diff options
89 files changed, 4279 insertions, 728 deletions
@@ -391,6 +391,9 @@ Other contributions ------------ Thierry Crozat - Translation Lead + Basque: + Mikel Iturbe Urretxa + Catalan: Jordi Vilalta Prat @@ -11,6 +11,7 @@ For a more comprehensive changelog of the latest experimental code, see: - Implemented support for TrueType fonts via FreeType2 in our GUI. Along with it GNU FreeFont was also added to our modern theme. Note that not all ports take advantage of this. + - Added Basque translation SDL ports: - Added support for OpenGL (GSoC Task). diff --git a/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp b/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp index f3835c4524..75e6bc3d10 100644 --- a/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp +++ b/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp @@ -1175,7 +1175,7 @@ void TownsPC98_AudioDriver::loadMusicData(uint8 *data, bool loadPaused) { _patches = src_a + 4; _finishedChannelsFlag = _finishedSSGFlag = _finishedRhythmFlag = 0; - _musicPlaying = (loadPaused ? false : true); + _musicPlaying = !loadPaused; } void TownsPC98_AudioDriver::loadSoundEffectData(uint8 *data, uint8 trackNum) { diff --git a/backends/keymapper/hardware-input.cpp b/backends/keymapper/hardware-input.cpp index a09f0b54fc..d1f8822ac0 100644 --- a/backends/keymapper/hardware-input.cpp +++ b/backends/keymapper/hardware-input.cpp @@ -209,16 +209,33 @@ const HardwareInput *HardwareInputSet::findHardwareInput(String id) const { return 0; } +const HardwareInput *HardwareInputSet::findHardwareInput(const HardwareInputCode code) const { + List<const HardwareInput *>::const_iterator it; + + for (it = _inputs.begin(); it != _inputs.end(); ++it) { + const HardwareInput *entry = *it; + if (entry->type == kHardwareInputTypeGeneric && entry->inputCode == code) + return entry; + } + return 0; +} + const HardwareInput *HardwareInputSet::findHardwareInput(const KeyState& keystate) const { List<const HardwareInput *>::const_iterator it; for (it = _inputs.begin(); it != _inputs.end(); ++it) { - if ((*it)->key == keystate) - return (*it); + const HardwareInput *entry = *it; + if (entry->type == kHardwareInputTypeKeyboard && entry->key == keystate) + return entry; } return 0; } +void HardwareInputSet::addHardwareInputs(const HardwareInputTableEntry inputs[]) { + for (const HardwareInputTableEntry *entry = inputs; entry->hwId; ++entry) + addHardwareInput(new HardwareInput(entry->hwId, entry->code, entry->desc)); +} + void HardwareInputSet::addHardwareInputs(const KeyTableEntry keys[], const ModifierTableEntry modifiers[]) { const KeyTableEntry *key; const ModifierTableEntry *mod; @@ -247,10 +264,6 @@ void HardwareInputSet::addHardwareInputs(const KeyTableEntry keys[], const Modif } } -void HardwareInputSet::addHardwareInputs(const KeyTableEntry keys[]) { - addHardwareInputs(keys, defaultModifiers); -} - void HardwareInputSet::removeHardwareInput(const HardwareInput *input) { if (!input) return; @@ -259,7 +272,16 @@ void HardwareInputSet::removeHardwareInput(const HardwareInput *input) { for (it = _inputs.begin(); it != _inputs.end(); ++it) { const HardwareInput *entry = (*it); - if (entry->id == input->id || entry->key == input->key) { + bool match = false; + if (entry->id == input->id) + match = true; + else if (input->type == entry->type) { + if (input->type == kHardwareInputTypeGeneric && input->inputCode == entry->inputCode) + match = true; + else if (input->type == kHardwareInputTypeKeyboard && input->key == entry->key) + match = true; + } + if (match) { debug(7, "Removing hardware input [%s] (%s) because it matches [%s] (%s)", entry->id.c_str(), entry->description.c_str(), input->id.c_str(), input->description.c_str()); delete entry; _inputs.erase(it); diff --git a/backends/keymapper/hardware-input.h b/backends/keymapper/hardware-input.h index 9396765bbe..51d4accb5b 100644 --- a/backends/keymapper/hardware-input.h +++ b/backends/keymapper/hardware-input.h @@ -34,6 +34,15 @@ namespace Common { +typedef uint32 HardwareInputCode; + +enum HardwareInputType { + /** Input that sends single events */ + kHardwareInputTypeGeneric, + /** Input that usually send -up and -down events */ + kHardwareInputTypeKeyboard +}; + /** * Describes an available hardware input */ @@ -44,14 +53,33 @@ struct HardwareInput { /** Human readable description */ String description; + const HardwareInputType type; + /** - * The KeyState that is generated by the back-end - * when this hardware key is pressed. - */ + * A platform specific unique identifier for an input event + * generated when this input is triggered. + * This is only relevant when type == kHardwareInputTypeGeneric + */ + HardwareInputCode inputCode; + + /** + * The KeyState that is generated by the back-end + * when this hardware key is pressed. + * This is only relevant when type == kHardwareInputTypeKeyboard + */ KeyState key; - HardwareInput(String i, KeyState ky = KeyState(), String desc = "") - : id(i), key(ky), description(desc) { } + HardwareInput(String i, HardwareInputCode ic = 0, String desc = "") + : id(i), inputCode(ic), description(desc), type(kHardwareInputTypeGeneric) { } + + HardwareInput(String i, KeyState ky, String desc = "") + : id(i), key(ky), description(desc), type(kHardwareInputTypeKeyboard) { } +}; + +struct HardwareInputTableEntry { + const char *hwId; + HardwareInputCode code; + const char *desc; }; /** @@ -97,6 +125,8 @@ public: const HardwareInput *findHardwareInput(String id) const; + const HardwareInput *findHardwareInput(const HardwareInputCode code) const; + const HardwareInput *findHardwareInput(const KeyState& keystate) const; const List<const HardwareInput *> &getHardwareInputs() const { return _inputs; } @@ -104,18 +134,17 @@ public: uint size() const { return _inputs.size(); } /** - * Add hardware inputs to the set out of key and modifier tables. - * @param keys table of available keys - * @param modifiers table of available modifiers + * Add hardware inputs to the set out of a table. + * @param inputs table of available inputs */ - void addHardwareInputs(const KeyTableEntry keys[], const ModifierTableEntry modifiers[]); + void addHardwareInputs(const HardwareInputTableEntry inputs[]); /** - * Add hardware inputs to the set out of a key table. - * The default modifiers are applied to the key entries + * Add hardware inputs to the set out of key and modifier tables. * @param keys table of available keys + * @param modifiers table of available modifiers */ - void addHardwareInputs(const KeyTableEntry keys[]); + void addHardwareInputs(const KeyTableEntry keys[], const ModifierTableEntry modifiers[]); void removeHardwareInput(const HardwareInput *input); diff --git a/backends/keymapper/keymap.cpp b/backends/keymapper/keymap.cpp index 8ea975c927..e95dd6afb5 100644 --- a/backends/keymapper/keymap.cpp +++ b/backends/keymapper/keymap.cpp @@ -33,14 +33,17 @@ namespace Common { -Keymap::Keymap(const Keymap& km) : _actions(km._actions), _keymap(), _configDomain(0) { +Keymap::Keymap(const Keymap& km) : _actions(km._actions), _keymap(), _nonkeymap(), _configDomain(0) { List<Action *>::iterator it; for (it = _actions.begin(); it != _actions.end(); ++it) { const HardwareInput *hwInput = (*it)->getMappedInput(); if (hwInput) { - _keymap[hwInput->key] = *it; + if (hwInput->type == kHardwareInputTypeKeyboard) + _keymap[hwInput->key] = *it; + else if (hwInput->type == kHardwareInputTypeGeneric) + _nonkeymap[hwInput->inputCode] = *it; } } } @@ -60,23 +63,31 @@ void Keymap::addAction(Action *action) { } void Keymap::registerMapping(Action *action, const HardwareInput *hwInput) { - HashMap<KeyState, Action *>::iterator it; - - it = _keymap.find(hwInput->key); - - // if key is already mapped to a different action then un-map it - if (it != _keymap.end() && action != it->_value) { - it->_value->mapInput(0); + if (hwInput->type == kHardwareInputTypeKeyboard) { + HashMap<KeyState, Action *>::iterator it = _keymap.find(hwInput->key); + // if input is already mapped to a different action then unmap it from there + if (it != _keymap.end() && action != it->_value) + it->_value->mapInput(0); + // now map it + _keymap[hwInput->key] = action; + } else if (hwInput->type == kHardwareInputTypeGeneric) { + HashMap<HardwareInputCode, Action *>::iterator it = _nonkeymap.find(hwInput->inputCode); + // if input is already mapped to a different action then unmap it from there + if (it != _nonkeymap.end() && action != it->_value) + it->_value->mapInput(0); + // now map it + _nonkeymap[hwInput->inputCode] = action; } - - _keymap[hwInput->key] = action; } void Keymap::unregisterMapping(Action *action) { const HardwareInput *hwInput = action->getMappedInput(); if (hwInput) { - _keymap.erase(hwInput->key); + if (hwInput->type == kHardwareInputTypeKeyboard) + _keymap.erase(hwInput->key); + else if (hwInput->type == kHardwareInputTypeGeneric) + _nonkeymap.erase(hwInput->inputCode); } } @@ -116,6 +127,17 @@ Action *Keymap::getMappedAction(const KeyState& ks) const { return it->_value; } +Action *Keymap::getMappedAction(const HardwareInputCode code) const { + HashMap<HardwareInputCode, Action *>::iterator it; + + it = _nonkeymap.find(code); + + if (it == _nonkeymap.end()) + return 0; + else + return it->_value; +} + void Keymap::setConfigDomain(ConfigManager::Domain *dom) { _configDomain = dom; } diff --git a/backends/keymapper/keymap.h b/backends/keymapper/keymap.h index 4c3e89700f..6eaec7dcaf 100644 --- a/backends/keymapper/keymap.h +++ b/backends/keymapper/keymap.h @@ -33,12 +33,10 @@ #include "common/keyboard.h" #include "common/list.h" #include "backends/keymapper/action.h" +#include "backends/keymapper/hardware-input.h" namespace Common { -struct HardwareInput; -class HardwareInputSet; - /** * Hash function for KeyState */ @@ -76,6 +74,13 @@ public: */ Action *getMappedAction(const KeyState& ks) const; + /** + * Find the Action that a generic input is mapped to + * @param code the input code that is mapped to the required Action + * @return a pointer to the Action or 0 if no + */ + Action *getMappedAction(const HardwareInputCode code) const; + void setConfigDomain(ConfigManager::Domain *dom); /** @@ -130,6 +135,7 @@ private: String _name; List<Action *> _actions; HashMap<KeyState, Action *> _keymap; + HashMap<HardwareInputCode, Action *> _nonkeymap; ConfigManager::Domain *_configDomain; }; diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp index bda4cd47da..dcb021f2d8 100644 --- a/backends/keymapper/keymapper.cpp +++ b/backends/keymapper/keymapper.cpp @@ -25,9 +25,14 @@ #ifdef ENABLE_KEYMAPPER #include "common/config-manager.h" +#include "common/system.h" namespace Common { +// These magic numbers are provided by fuzzie and WebOS +static const uint32 kDelayKeyboardEventMillis = 250; +static const uint32 kDelayMouseEventMillis = 50; + void Keymapper::Domain::addKeymap(Keymap *map) { iterator it = find(map->getName()); @@ -54,7 +59,7 @@ Keymap *Keymapper::Domain::getKeymap(const String& name) { } Keymapper::Keymapper(EventManager *evtMgr) - : _eventMan(evtMgr), _enabled(true), _hardwareInputs(0) { + : _eventMan(evtMgr), _enabled(true), _remapping(false), _hardwareInputs(0), _actionToRemap(0) { ConfigManager::Domain *confDom = ConfMan.getDomain(ConfigManager::kKeymapperDomain); _globalDomain.setConfigDomain(confDom); @@ -183,13 +188,16 @@ List<Event> Keymapper::mapEvent(const Event &ev, EventSource *source) { if (source && !source->allowMapping()) { return DefaultEventMapper::mapEvent(ev, source); } - List<Event> mappedEvents; - if (ev.type == Common::EVENT_KEYDOWN) + if (_remapping) + mappedEvents = remap(ev); + else if (ev.type == Common::EVENT_KEYDOWN) mappedEvents = mapKeyDown(ev.kbd); else if (ev.type == Common::EVENT_KEYUP) mappedEvents = mapKeyUp(ev.kbd); + else if (ev.type == Common::EVENT_CUSTOM_BACKEND_HARDWARE) + mappedEvents = mapNonKey(ev.customType); if (!mappedEvents.empty()) return mappedEvents; @@ -197,6 +205,13 @@ List<Event> Keymapper::mapEvent(const Event &ev, EventSource *source) { return DefaultEventMapper::mapEvent(ev, source); } +void Keymapper::startRemappingMode(Action *actionToRemap) { + assert(!_remapping); + + _remapping = true; + _actionToRemap = actionToRemap; +} + List<Event> Keymapper::mapKeyDown(const KeyState& key) { return mapKey(key, true); } @@ -236,7 +251,30 @@ List<Event> Keymapper::mapKey(const KeyState& key, bool keyDown) { if (!action) return List<Event>(); - return executeAction(action, keyDown); + return executeAction(action, keyDown ? kIncomingKeyDown : kIncomingKeyUp); +} + + +List<Event> Keymapper::mapNonKey(const HardwareInputCode code) { + if (!_enabled || _activeMaps.empty()) + return List<Event>(); + + Action *action = 0; + + // Search for nonkey in active keymap stack + for (int i = _activeMaps.size() - 1; i >= 0; --i) { + MapRecord mr = _activeMaps[i]; + debug(5, "Keymapper::mapKey keymap: %s", mr.keymap->getName().c_str()); + action = mr.keymap->getMappedAction(code); + + if (action || !mr.transparent) + break; + } + + if (!action) + return List<Event>(); + + return executeAction(action); } Action *Keymapper::getAction(const KeyState& key) { @@ -245,56 +283,108 @@ Action *Keymapper::getAction(const KeyState& key) { return action; } -List<Event> Keymapper::executeAction(const Action *action, bool keyDown) { +List<Event> Keymapper::executeAction(const Action *action, IncomingEventType incomingType) { List<Event> mappedEvents; List<Event>::const_iterator it; - + Event evt; for (it = action->events.begin(); it != action->events.end(); ++it) { - Event evt = *it; - - switch (evt.type) { - case EVENT_KEYDOWN: - if (!keyDown) evt.type = EVENT_KEYUP; - break; - case EVENT_KEYUP: - if (keyDown) evt.type = EVENT_KEYDOWN; - break; - case EVENT_LBUTTONDOWN: - if (!keyDown) evt.type = EVENT_LBUTTONUP; - break; - case EVENT_LBUTTONUP: - if (keyDown) evt.type = EVENT_LBUTTONDOWN; - break; - case EVENT_RBUTTONDOWN: - if (!keyDown) evt.type = EVENT_RBUTTONUP; - break; - case EVENT_RBUTTONUP: - if (keyDown) evt.type = EVENT_RBUTTONDOWN; - break; - case EVENT_MBUTTONDOWN: - if (!keyDown) evt.type = EVENT_MBUTTONUP; - break; - case EVENT_MBUTTONUP: - if (keyDown) evt.type = EVENT_MBUTTONDOWN; - break; - case EVENT_MAINMENU: - if (!keyDown) evt.type = EVENT_MAINMENU; - break; - default: - // don't deliver other events on key up - if (!keyDown) continue; + evt = Event(*it); + EventType convertedType = convertDownToUp(evt.type); + + // hardware keys need to send up instead when they are up + if (incomingType == kIncomingKeyUp) { + if (convertedType == EVENT_INVALID) + continue; // don't send any non-down-converted events on up they were already sent on down + evt.type = convertedType; } evt.mouse = _eventMan->getMousePos(); - mappedEvents.push_back(evt); + + // Check if the event is coming from a non-key hardware event + // that is mapped to a key event + if (incomingType == kIncomingNonKey && convertedType != EVENT_INVALID) + // WORKAROUND: Delay the down events coming from non-key hardware events + // with a zero delay. This is to prevent DOWN1 DOWN2 UP1 UP2. + addDelayedEvent(0, evt); + else + mappedEvents.push_back(evt); + + // non-keys need to send up as well + if (incomingType == kIncomingNonKey && convertedType != EVENT_INVALID) { + // WORKAROUND: Delay the up events coming from non-key hardware events + // This is for engines that run scripts that check on key being down + evt.type = convertedType; + const uint32 delay = (convertedType == EVENT_KEYUP ? kDelayKeyboardEventMillis : kDelayMouseEventMillis); + addDelayedEvent(delay, evt); + } } return mappedEvents; } +EventType Keymapper::convertDownToUp(EventType type) { + EventType result = EVENT_INVALID; + switch (type) { + case EVENT_KEYDOWN: + result = EVENT_KEYUP; + break; + case EVENT_LBUTTONDOWN: + result = EVENT_LBUTTONUP; + break; + case EVENT_RBUTTONDOWN: + result = EVENT_RBUTTONUP; + break; + case EVENT_MBUTTONDOWN: + result = EVENT_MBUTTONUP; + break; + default: + break; + } + return result; +} + const HardwareInput *Keymapper::findHardwareInput(const KeyState& key) { return (_hardwareInputs) ? _hardwareInputs->findHardwareInput(key) : 0; } +const HardwareInput *Keymapper::findHardwareInput(const HardwareInputCode code) { + return (_hardwareInputs) ? _hardwareInputs->findHardwareInput(code) : 0; +} + +List<Event> Keymapper::remap(const Event &ev) { + assert(_remapping); + assert(_actionToRemap); + + List<Event> list; + + const HardwareInput *hwInput = 0; + Event mappedEvent; + + switch (ev.type) { + case EVENT_KEYDOWN: + // eat the event by returning an event invalid + mappedEvent.type = EVENT_INVALID; + list.push_back(mappedEvent); + break; + case EVENT_KEYUP: + hwInput = findHardwareInput(ev.kbd); + break; + case EVENT_CUSTOM_BACKEND_HARDWARE: + hwInput = findHardwareInput(ev.customType); + break; + default: + break; + } + if (hwInput) { + _actionToRemap->mapInput(hwInput); + _actionToRemap->getParent()->saveMappings(); + _remapping = false; + _actionToRemap = 0; + mappedEvent.type = EVENT_GUI_REMAP_COMPLETE_ACTION; + list.push_back(mappedEvent); + } + return list; +} + } // End of namespace Common #endif // #ifdef ENABLE_KEYMAPPER diff --git a/backends/keymapper/keymapper.h b/backends/keymapper/keymapper.h index daa746f379..1e8d1c08c3 100644 --- a/backends/keymapper/keymapper.h +++ b/backends/keymapper/keymapper.h @@ -149,6 +149,7 @@ public: * @return mapped events */ List<Event> mapKey(const KeyState& key, bool keyDown); + List<Event> mapNonKey(const HardwareInputCode code); /** * @brief Map a key down event. @@ -168,16 +169,45 @@ public: void setEnabled(bool enabled) { _enabled = enabled; } /** + * @brief Activate remapping mode + * While this mode is active, any mappable event will be bound to the action + * provided. + * @param actionToRemap Action that is the target of the remap + */ + void startRemappingMode(Action *actionToRemap); + + /** + * @brief Force-stop the remapping mode + */ + void stopRemappingMode() { _remapping = false; } + + /** + * Query whether the keymapper is currently in the remapping mode + */ + bool isRemapping() const { return _remapping; } + + /** * Return a HardwareInput pointer for the given key state */ const HardwareInput *findHardwareInput(const KeyState& key); + /** + * Return a HardwareInput pointer for the given input code + */ + const HardwareInput *findHardwareInput(const HardwareInputCode code); + Domain& getGlobalDomain() { return _globalDomain; } Domain& getGameDomain() { return _gameDomain; } const Stack<MapRecord>& getActiveStack() const { return _activeMaps; } private: + enum IncomingEventType { + kIncomingKeyDown, + kIncomingKeyUp, + kIncomingNonKey + }; + void initKeymap(Domain &domain, Keymap *keymap); Domain _globalDomain; @@ -188,12 +218,16 @@ private: void pushKeymap(Keymap *newMap, bool transparent, bool global); Action *getAction(const KeyState& key); - List<Event> executeAction(const Action *act, bool keyDown); + List<Event> executeAction(const Action *act, IncomingEventType incomingType = kIncomingNonKey); + EventType convertDownToUp(EventType eventType); + List<Event> remap(const Event &ev); EventManager *_eventMan; bool _enabled; + bool _remapping; + Action *_actionToRemap; Stack<MapRecord> _activeMaps; HashMap<KeyState, Action *> _keysDown; diff --git a/backends/keymapper/remap-dialog.cpp b/backends/keymapper/remap-dialog.cpp index dab295219a..009c2201a9 100644 --- a/backends/keymapper/remap-dialog.cpp +++ b/backends/keymapper/remap-dialog.cpp @@ -39,7 +39,7 @@ enum { }; RemapDialog::RemapDialog() - : Dialog("KeyMapper"), _keymapTable(0), _activeRemapAction(0), _topAction(0), _remapTimeout(0), _topKeymapIsGui(false) { + : Dialog("KeyMapper"), _keymapTable(0), _topAction(0), _remapTimeout(0), _topKeymapIsGui(false) { _keymapper = g_system->getEventManager()->getKeymapper(); assert(_keymapper); @@ -243,16 +243,14 @@ void RemapDialog::clearMapping(uint i) { return; debug(3, "clear the mapping %u", i); - _activeRemapAction = _currentActions[_topAction + i].action; - _activeRemapAction->mapInput(0); - _activeRemapAction->getParent()->saveMappings(); + Action *activeRemapAction = _currentActions[_topAction + i].action; + activeRemapAction->mapInput(0); + activeRemapAction->getParent()->saveMappings(); _changes = true; // force refresh - _topAction = -1; + stopRemapping(true); refreshKeymap(); - - _activeRemapAction = 0; } void RemapDialog::startRemapping(uint i) { @@ -260,57 +258,56 @@ void RemapDialog::startRemapping(uint i) { return; _remapTimeout = g_system->getMillis() + kRemapTimeoutDelay; - _activeRemapAction = _currentActions[_topAction + i].action; + Action *activeRemapAction = _currentActions[_topAction + i].action; _keymapWidgets[i].keyButton->setLabel("..."); _keymapWidgets[i].keyButton->draw(); - _keymapper->setEnabled(false); + _keymapper->startRemappingMode(activeRemapAction); } -void RemapDialog::stopRemapping() { +void RemapDialog::stopRemapping(bool force) { _topAction = -1; refreshKeymap(); - _activeRemapAction = 0; - - _keymapper->setEnabled(true); + if (force) + _keymapper->stopRemappingMode(); } void RemapDialog::handleKeyDown(Common::KeyState state) { - if (_activeRemapAction) + if (_keymapper->isRemapping()) return; GUI::Dialog::handleKeyDown(state); } void RemapDialog::handleKeyUp(Common::KeyState state) { - if (_activeRemapAction) { - const HardwareInput *hwInput = _keymapper->findHardwareInput(state); + if (_keymapper->isRemapping()) + return; - debug(4, "RemapDialog::handleKeyUp Key: %d, %d (%c), %x", state.keycode, state.ascii, (state.ascii ? state.ascii : ' '), state.flags); + GUI::Dialog::handleKeyUp(state); +} - if (hwInput) { - _activeRemapAction->mapInput(hwInput); - _activeRemapAction->getParent()->saveMappings(); - _changes = true; - stopRemapping(); - } +void RemapDialog::handleOtherEvent(Event ev) { + if (ev.type == EVENT_GUI_REMAP_COMPLETE_ACTION) { + // _keymapper is telling us that something changed + _changes = true; + stopRemapping(); } else { - GUI::Dialog::handleKeyUp(state); + GUI::Dialog::handleOtherEvent(ev); } } void RemapDialog::handleMouseDown(int x, int y, int button, int clickCount) { - if (_activeRemapAction) + if (_keymapper->isRemapping()) stopRemapping(); else Dialog::handleMouseDown(x, y, button, clickCount); } void RemapDialog::handleTickle() { - if (_activeRemapAction && g_system->getMillis() > _remapTimeout) - stopRemapping(); + if (_keymapper->isRemapping() && g_system->getMillis() > _remapTimeout) + stopRemapping(true); Dialog::handleTickle(); } @@ -354,9 +351,14 @@ void RemapDialog::loadKeymap() { Keymapper::MapRecord mr = activeKeymaps[i]; debug(3, "RemapDialog::loadKeymap keymap: %s", mr.keymap->getName().c_str()); List<const HardwareInput *>::iterator inputIt = freeInputs.begin(); + const HardwareInput *input = *inputIt; while (inputIt != freeInputs.end()) { - Action *act = mr.keymap->getMappedAction((*inputIt)->key); + Action *act = 0; + if (input->type == kHardwareInputTypeKeyboard) + act = mr.keymap->getMappedAction(input->key); + else if (input->type == kHardwareInputTypeGeneric) + act = mr.keymap->getMappedAction(input->inputCode); if (act) { ActionInfo info = {act, true, act->description + " (" + mr.keymap->getName() + ")"}; diff --git a/backends/keymapper/remap-dialog.h b/backends/keymapper/remap-dialog.h index 143deca4cf..82c68405db 100644 --- a/backends/keymapper/remap-dialog.h +++ b/backends/keymapper/remap-dialog.h @@ -50,6 +50,7 @@ public: virtual void handleKeyUp(Common::KeyState state); virtual void handleMouseDown(int x, int y, int button, int clickCount); virtual void handleTickle(); + virtual void handleOtherEvent(Common::Event ev); protected: struct ActionWidgets { @@ -67,7 +68,7 @@ protected: void refreshKeymap(); void clearMapping(uint i); void startRemapping(uint i); - void stopRemapping(); + void stopRemapping(bool force = false); Keymapper *_keymapper; Keymap** _keymapTable; @@ -85,7 +86,6 @@ protected: uint _rowCount; Array<ActionWidgets> _keymapWidgets; - Action *_activeRemapAction; uint32 _remapTimeout; static const uint32 kRemapTimeoutDelay = 3000; diff --git a/backends/platform/ps2/icon.h b/backends/platform/ps2/icon.h index bc614bf70b..3ad19910d3 100644 --- a/backends/platform/ps2/icon.h +++ b/backends/platform/ps2/icon.h @@ -22,10 +22,6 @@ class PS2Icon { public: - PS2Icon() {}; - - ~PS2Icon() {}; - uint16 decompressData(uint16 **data); void setup(mcIcon *icon); }; diff --git a/backends/platform/psp/default_display_client.h b/backends/platform/psp/default_display_client.h index e1cd8e7e72..721a7e6fea 100644 --- a/backends/platform/psp/default_display_client.h +++ b/backends/platform/psp/default_display_client.h @@ -65,9 +65,6 @@ protected: */ class Overlay : public DefaultDisplayClient { public: - Overlay() {} - ~Overlay() {} - void init(); bool allocate(); void setBytesPerPixel(uint32 size); @@ -85,7 +82,6 @@ public: memset(&_pixelFormat, 0, sizeof(_pixelFormat)); memset(&_frameBuffer, 0, sizeof(_frameBuffer)); } - ~Screen() {} void init(); bool allocate(); diff --git a/common/EventDispatcher.cpp b/common/EventDispatcher.cpp index 4c7286bbb5..012a2dfce5 100644 --- a/common/EventDispatcher.cpp +++ b/common/EventDispatcher.cpp @@ -60,6 +60,12 @@ void EventDispatcher::dispatch() { } } } + + List<Event> delayedEvents = _mapper->getDelayedEvents(); + for (List<Event>::iterator k = delayedEvents.begin(); k != delayedEvents.end(); ++k) { + const Event delayedEvent = *k; + dispatchEvent(delayedEvent); + } } void EventDispatcher::registerMapper(EventMapper *mapper) { diff --git a/common/EventMapper.cpp b/common/EventMapper.cpp index 2808a7b5fd..47db61e472 100644 --- a/common/EventMapper.cpp +++ b/common/EventMapper.cpp @@ -22,6 +22,9 @@ #include "common/events.h" +#include "common/system.h" +#include "common/textconsole.h" + namespace Common { List<Event> DefaultEventMapper::mapEvent(const Event &ev, EventSource *source) { @@ -46,9 +49,44 @@ List<Event> DefaultEventMapper::mapEvent(const Event &ev, EventSource *source) { // if it didn't get mapped, just pass it through if (mappedEvent.type == EVENT_INVALID) mappedEvent = ev; + +#ifdef ENABLE_VKEYBD + // TODO: this check is not needed post-split + if (mappedEvent.type == EVENT_CUSTOM_BACKEND_HARDWARE) { + warning("EVENT_CUSTOM_BACKEND_HARDWARE was not mapped"); + return List<Event>(); + } +#endif + events.push_back(mappedEvent); return events; } +void DefaultEventMapper::addDelayedEvent(uint32 millis, Event ev) { + if (_delayedEvents.empty()) { + _delayedEffectiveTime = g_system->getMillis() + millis; + millis = 0; + } + DelayedEventsEntry entry = DelayedEventsEntry(millis, ev); + _delayedEvents.push(entry); +} + +List<Event> DefaultEventMapper::getDelayedEvents() { + List<Event> events; + + if (_delayedEvents.empty()) + return events; + + uint32 now = g_system->getMillis(); + + while (!_delayedEvents.empty() && now >= _delayedEffectiveTime) { + DelayedEventsEntry entry = _delayedEvents.pop(); + if (!_delayedEvents.empty()) + _delayedEffectiveTime += _delayedEvents.front().timerOffset; + events.push_back(entry.event); + } + return events; +} + } // namespace Common diff --git a/common/events.h b/common/events.h index 4efdd67b91..7366c51d36 100644 --- a/common/events.h +++ b/common/events.h @@ -79,6 +79,8 @@ enum EventType { // IMPORTANT NOTE: This is part of the WIP Keymapper. If you plan to use // this, please talk to tsoliman and/or LordHoto. EVENT_CUSTOM_BACKEND_ACTION = 18, + EVENT_CUSTOM_BACKEND_HARDWARE = 21, + EVENT_GUI_REMAP_COMPLETE_ACTION = 22, EVENT_KEYMAPPER_REMAP = 19 #endif #ifdef ENABLE_VKEYBD @@ -230,12 +232,27 @@ public: * Map an incoming event to one or more action events */ virtual List<Event> mapEvent(const Event &ev, EventSource *source) = 0; + + virtual List<Event> getDelayedEvents() = 0; }; class DefaultEventMapper : public EventMapper { public: + DefaultEventMapper() : _delayedEvents(), _delayedEffectiveTime(0) {} // EventMapper interface virtual List<Event> mapEvent(const Event &ev, EventSource *source); + virtual List<Event> getDelayedEvents(); +protected: + virtual void addDelayedEvent(uint32 millis, Event ev); + + struct DelayedEventsEntry { + const uint32 timerOffset; + const Event event; + DelayedEventsEntry(const uint32 offset, const Event ev) : timerOffset(offset), event(ev) { } + }; + + Queue<DelayedEventsEntry> _delayedEvents; + uint32 _delayedEffectiveTime; }; /** diff --git a/common/gui_options.cpp b/common/gui_options.cpp index 5b7d939dc4..32a7cc9c41 100644 --- a/common/gui_options.cpp +++ b/common/gui_options.cpp @@ -79,23 +79,6 @@ bool checkGameGUIOption(const String &option, const String &str) { return false; } -bool checkGameGUIOptionLanguage(Language lang, const String &str) { - if (!str.contains("lang_")) // If no languages are specified - return true; - - if (str.contains(getGameGUIOptionsDescriptionLanguage(lang))) - return true; - - return false; -} - -const String getGameGUIOptionsDescriptionLanguage(Language lang) { - if (lang == UNK_LANG) - return ""; - - return String("lang_") + getLanguageDescription(lang); -} - String parseGameGUIOptions(const String &str) { String res; diff --git a/common/gui_options.h b/common/gui_options.h index 5649f1103d..33ecccad63 100644 --- a/common/gui_options.h +++ b/common/gui_options.h @@ -23,8 +23,6 @@ #ifndef COMMON_GUI_OPTIONS_H #define COMMON_GUI_OPTIONS_H -#include "common/language.h" - #define GUIO_NONE "\000" #define GUIO_NOSUBTITLES "\001" #define GUIO_NOMUSIC "\002" @@ -68,12 +66,11 @@ namespace Common { +class String; bool checkGameGUIOption(const String &option, const String &str); -bool checkGameGUIOptionLanguage(Common::Language lang, const String &str); String parseGameGUIOptions(const String &str); const String getGameGUIOptionsDescription(const String &options); -const String getGameGUIOptionsDescriptionLanguage(Common::Language lang); /** * Updates the GUI options of the current config manager diff --git a/common/language.cpp b/common/language.cpp index 1de01b0207..898adf8d0e 100644 --- a/common/language.cpp +++ b/common/language.cpp @@ -20,6 +20,7 @@ */ #include "common/language.h" +#include "common/gui_options.h" #include "common/str.h" namespace Common { @@ -104,4 +105,21 @@ const char *getLanguageDescription(Language id) { return 0; } +bool checkGameGUIOptionLanguage(Language lang, const String &str) { + if (!str.contains("lang_")) // If no languages are specified + return true; + + if (str.contains(getGameGUIOptionsDescriptionLanguage(lang))) + return true; + + return false; +} + +const String getGameGUIOptionsDescriptionLanguage(Language lang) { + if (lang == UNK_LANG) + return ""; + + return String("lang_") + getLanguageDescription(lang); +} + } // End of namespace Common diff --git a/common/language.h b/common/language.h index b83f0d34fd..db552fc9c4 100644 --- a/common/language.h +++ b/common/language.h @@ -75,6 +75,12 @@ extern const char *getLanguageCode(Language id); extern const char *getLanguageLocale(Language id); extern const char *getLanguageDescription(Language id); +// TODO: Document this GUIO related function +const String getGameGUIOptionsDescriptionLanguage(Common::Language lang); + +// TODO: Document this GUIO related function +bool checkGameGUIOptionLanguage(Common::Language lang, const String &str); + } // End of namespace Common #endif diff --git a/common/rendermode.cpp b/common/rendermode.cpp index 62b67faee5..e8f3146630 100644 --- a/common/rendermode.cpp +++ b/common/rendermode.cpp @@ -22,6 +22,7 @@ #include "common/rendermode.h" +#include "common/gui_options.h" #include "common/str.h" #include "common/translation.h" @@ -43,6 +44,26 @@ const RenderModeDescription g_renderModes[] = { {0, 0, kRenderDefault} }; +struct RenderGUIOMapping { + RenderMode id; + const char *guio; +}; + +// TODO: Merge s_renderGUIOMapping into g_renderModes? the kRenderDefault +// could be used to indicate "any" mode when passed to renderMode2GUIO (if +// we wanted to merge allRenderModesGUIOs back into) +static const RenderGUIOMapping s_renderGUIOMapping[] = { + { kRenderHercG, GUIO_RENDERHERCGREEN }, + { kRenderHercA, GUIO_RENDERHERCAMBER }, + { kRenderCGA, GUIO_RENDERCGA }, + { kRenderEGA, GUIO_RENDEREGA }, + { kRenderVGA, GUIO_RENDERVGA }, + { kRenderAmiga, GUIO_RENDERAMIGA }, + { kRenderFMTowns, GUIO_RENDERFMTOWNS }, + { kRenderPC9821, GUIO_RENDERPC9821 }, + { kRenderPC9801, GUIO_RENDERPC9801 } +}; + DECLARE_TRANSLATION_ADDITIONAL_CONTEXT("Hercules Green", "lowres") DECLARE_TRANSLATION_ADDITIONAL_CONTEXT("Hercules Amber", "lowres") @@ -77,5 +98,25 @@ const char *getRenderModeDescription(RenderMode id) { return 0; } +String renderMode2GUIO(RenderMode id) { + String res; + + for (int i = 0; i < ARRAYSIZE(s_renderGUIOMapping); i++) { + if (id == s_renderGUIOMapping[i].id) + res += s_renderGUIOMapping[i].guio; + } + + return res; +} + +String allRenderModesGUIOs() { + String res; + + for (int i = 0; i < ARRAYSIZE(s_renderGUIOMapping); i++) { + res += s_renderGUIOMapping[i].guio; + } + + return res; +} } // End of namespace Common diff --git a/common/rendermode.h b/common/rendermode.h index c2fece77ee..945c4e7d9d 100644 --- a/common/rendermode.h +++ b/common/rendermode.h @@ -61,6 +61,12 @@ extern RenderMode parseRenderMode(const String &str); extern const char *getRenderModeCode(RenderMode id); extern const char *getRenderModeDescription(RenderMode id); +// TODO: Rename the following to something better; also, document it +extern String renderMode2GUIO(RenderMode id); + +// TODO: Rename the following to something better; also, document it +extern String allRenderModesGUIOs(); + } // End of namespace Common diff --git a/common/translation.cpp b/common/translation.cpp index 219fce8794..2bc31c617b 100644 --- a/common/translation.cpp +++ b/common/translation.cpp @@ -232,8 +232,9 @@ bool TranslationManager::openTranslationsFile(File &inFile) { ArchiveMemberList fileList; SearchMan.listMatchingMembers(fileList, "translations.dat"); for (ArchiveMemberList::iterator it = fileList.begin(); it != fileList.end(); ++it) { - SeekableReadStream *stream = it->get()->createReadStream(); - if (stream && inFile.open(stream, it->get()->getName())) { + ArchiveMember const &m = **it; + SeekableReadStream *const stream = m.createReadStream(); + if (stream && inFile.open(stream, m.getName())) { if (checkHeader(inFile)) return true; inFile.close(); diff --git a/devtools/create_translations/cp_parser.cpp b/devtools/create_translations/cp_parser.cpp index a4202bf153..f5e4c9d6bb 100644 --- a/devtools/create_translations/cp_parser.cpp +++ b/devtools/create_translations/cp_parser.cpp @@ -42,9 +42,11 @@ Codepage *parseCodepageMapping(const std::string &filename) { size_t start = filename.find_last_of("/\\"); if (start == std::string::npos) start = 0; + else + ++start; // Strip off the filename extension const size_t pos = filename.find_last_of('.'); - const std::string charset(filename.substr(start + 1, pos != std::string::npos ? (pos - start - 1) : std::string::npos)); + const std::string charset(filename.substr(start, pos != std::string::npos ? (pos - start) : std::string::npos)); std::ifstream in(filename.c_str()); if (!in) { diff --git a/devtools/credits.pl b/devtools/credits.pl index 8330450984..b3a506125f 100755 --- a/devtools/credits.pl +++ b/devtools/credits.pl @@ -915,6 +915,9 @@ begin_credits("Credits"); begin_persons(); add_person("Thierry Crozat", "criezy", "Translation Lead"); end_persons(); + begin_section("Basque"); + add_person("Mikel Iturbe Urretxa", "", ""); + end_section(); begin_section("Catalan"); add_person("Jordi Vilalta Prat", "jvprat", ""); end_section(); diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp index 37f4eb070e..309b89bdda 100644 --- a/engines/cge/bitmap.cpp +++ b/engines/cge/bitmap.cpp @@ -158,7 +158,7 @@ BitmapPtr Bitmap::code() { debugC(1, kCGEDebugBitmap, "Bitmap::code()"); if (!_m) - return false; + return NULL; uint16 cnt; diff --git a/engines/gob/anifile.cpp b/engines/gob/anifile.cpp index 1a905f1083..2671fe0405 100644 --- a/engines/gob/anifile.cpp +++ b/engines/gob/anifile.cpp @@ -28,19 +28,11 @@ #include "gob/dataio.h" #include "gob/surface.h" #include "gob/video.h" +#include "gob/cmpfile.h" #include "gob/anifile.h" namespace Gob { -ANIFile::Layer::Layer() : surface(0), coordinates(0) { -} - -ANIFile::Layer::~Layer() { - delete coordinates; - delete surface; -} - - ANIFile::ANIFile(GobEngine *vm, const Common::String &fileName, uint16 width, uint8 bpp) : _vm(vm), _width(width), _bpp(bpp), _hasPadding(false) { @@ -72,6 +64,8 @@ ANIFile::ANIFile(GobEngine *vm, const Common::String &fileName, } ANIFile::~ANIFile() { + for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l) + delete *l; } void ANIFile::load(Common::SeekableSubReadStreamEndian &ani, const Common::String &fileName) { @@ -90,9 +84,9 @@ void ANIFile::load(Common::SeekableSubReadStreamEndian &ani, const Common::Strin if (_hasPadding) ani.skip(1); - _layers.resize(layerCount - 1); - for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l) - loadLayer(*l, ani); + _layers.reserve(layerCount - 1); + for (int i = 0; i < layerCount - 1; i++) + _layers.push_back(loadLayer(ani)); } _maxWidth = 0; @@ -158,14 +152,13 @@ void ANIFile::loadAnimation(Animation &animation, FrameArray &frames, area.right = area.bottom = -0x7FFF; for (ChunkList::const_iterator c = frame.begin(); c != frame.end(); c++) { - const Layer *layer; - const RXYFile::Coordinates *coords; + uint16 cL, cT, cR, cB; - if (!getPart(c->layer, c->part, layer, coords)) + if (!getCoordinates(c->layer, c->part, cL, cT, cR, cB)) continue; - const uint16 width = coords->right - coords->left + 1; - const uint16 height = coords->bottom - coords->top + 1; + const uint16 width = cR - cL + 1; + const uint16 height = cB - cT + 1; const uint16 l = c->x; const uint16 t = c->y; @@ -233,33 +226,12 @@ void ANIFile::loadFrames(FrameArray &frames, Common::SeekableSubReadStreamEndian } } -void ANIFile::loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &ani) { - Common::String file = Util::readString(ani, 13); +CMPFile *ANIFile::loadLayer(Common::SeekableSubReadStreamEndian &ani) { + Common::String file = Util::setExtension(Util::readString(ani, 13), ""); if (_hasPadding) ani.skip(1); - if (file.empty()) - return; - - Common::String fileRXY = Util::setExtension(file, ".RXY"); - Common::String fileCMP = Util::setExtension(file, ".CMP"); - if (!_vm->_dataIO->hasFile(fileRXY) || !_vm->_dataIO->hasFile(fileCMP)) - return; - - loadLayer(layer, fileRXY, fileCMP); -} - -void ANIFile::loadLayer(Layer &layer, const Common::String &fileRXY, - const Common::String &fileCMP) { - - Common::SeekableReadStream *dataRXY = _vm->_dataIO->getFile(fileRXY); - if (!dataRXY) - return; - - layer.coordinates = new RXYFile(*dataRXY); - layer.surface = new Surface(_width, layer.coordinates->getHeight(), _bpp); - - _vm->_video->drawPackedSprite(fileCMP.c_str(), *layer.surface); + return new CMPFile(_vm, file, _width, 0, _bpp); } uint16 ANIFile::getAnimationCount() const { @@ -277,24 +249,13 @@ const ANIFile::Animation &ANIFile::getAnimationInfo(uint16 animation) const { return _animations[animation]; } -bool ANIFile::getPart(uint16 layer, uint16 part, - const Layer *&l, const RXYFile::Coordinates *&c) const { +bool ANIFile::getCoordinates(uint16 layer, uint16 part, + uint16 &left, uint16 &top, uint16 &right, uint16 &bottom) const { if (layer >= _layers.size()) return false; - l = &_layers[layer]; - if (!l->surface || !l->coordinates) - return false; - - if (part >= l->coordinates->size()) - return false; - - c = &(*l->coordinates)[part]; - if (c->left == 0xFFFF) - return false; - - return true; + return _layers[layer]->getCoordinates(part, left, top, right, bottom); } void ANIFile::draw(Surface &dest, uint16 animation, uint16 frame, int16 x, int16 y) const { @@ -314,13 +275,10 @@ void ANIFile::draw(Surface &dest, uint16 animation, uint16 frame, int16 x, int16 void ANIFile::drawLayer(Surface &dest, uint16 layer, uint16 part, int16 x, int16 y, int32 transp) const { - const Layer *l; - const RXYFile::Coordinates *c; - - if (!getPart(layer, part, l, c)) + if (layer >= _layers.size()) return; - dest.blit(*l->surface, c->left, c->top, c->right, c->bottom, x, y, transp); + _layers[layer]->draw(dest, part, x, y, transp); } } // End of namespace Gob diff --git a/engines/gob/anifile.h b/engines/gob/anifile.h index 1e10da6ff4..b6d9c735b5 100644 --- a/engines/gob/anifile.h +++ b/engines/gob/anifile.h @@ -28,8 +28,6 @@ #include "common/array.h" #include "common/list.h" -#include "gob/rxyfile.h" - namespace Common { class SeekableSubReadStreamEndian; } @@ -38,6 +36,7 @@ namespace Gob { class GobEngine; class Surface; +class CMPFile; /** An ANI file, describing an animation. * @@ -94,16 +93,7 @@ public: void draw(Surface &dest, uint16 animation, uint16 frame, int16 x, int16 y) const; private: - /** A sprite layer. */ - struct Layer { - Surface *surface; ///< The surface containing the layer sprite. - RXYFile *coordinates; ///< The coordinates describing the layer sprite parts. - - Layer(); - ~Layer(); - }; - - typedef Common::Array<Layer> LayerArray; + typedef Common::Array<CMPFile *> LayerArray; typedef Common::Array<Animation> AnimationArray; /** A "chunk" of an animation frame. */ @@ -139,9 +129,7 @@ private: void load(Common::SeekableSubReadStreamEndian &ani, const Common::String &fileName); - void loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &ani); - void loadLayer(Layer &layer, const Common::String &fileRXY, - const Common::String &fileCMP); + CMPFile *loadLayer(Common::SeekableSubReadStreamEndian &ani); void loadAnimation(Animation &animation, FrameArray &frames, Common::SeekableSubReadStreamEndian &ani); @@ -149,8 +137,8 @@ private: // Drawing helpers - bool getPart(uint16 layer, uint16 part, - const Layer *&l, const RXYFile::Coordinates *&c) const; + bool getCoordinates(uint16 layer, uint16 part, + uint16 &left, uint16 &top, uint16 &right, uint16 &bottom) const; void drawLayer(Surface &dest, uint16 layer, uint16 part, int16 x, int16 y, int32 transp) const; diff --git a/engines/gob/aniobject.cpp b/engines/gob/aniobject.cpp index 0ca850d1fb..154f8e04ed 100644 --- a/engines/gob/aniobject.cpp +++ b/engines/gob/aniobject.cpp @@ -22,11 +22,20 @@ #include "gob/surface.h" #include "gob/anifile.h" +#include "gob/cmpfile.h" #include "gob/aniobject.h" namespace Gob { -ANIObject::ANIObject(const ANIFile &ani) : _ani(&ani), +ANIObject::ANIObject(const ANIFile &ani) : _ani(&ani), _cmp(0), + _visible(false), _paused(false), _mode(kModeContinuous), + _x(0), _y(0), _background(0), _drawn(false) { + + setAnimation(0); + setPosition(); +} + +ANIObject::ANIObject(const CMPFile &cmp) : _ani(0), _cmp(&cmp), _visible(false), _paused(false), _mode(kModeContinuous), _x(0), _y(0), _background(0), _drawn(false) { @@ -68,6 +77,10 @@ void ANIObject::rewind() { } void ANIObject::setPosition() { + // CMP "animations" have no default position + if (_cmp) + return; + if (_animation >= _ani->getAnimationCount()) return; @@ -88,6 +101,12 @@ void ANIObject::getPosition(int16 &x, int16 &y) const { } void ANIObject::getFramePosition(int16 &x, int16 &y) const { + // CMP "animations" have no specific frame positions + if (_cmp) { + getPosition(x, y); + return; + } + if (_animation >= _ani->getAnimationCount()) return; @@ -100,6 +119,13 @@ void ANIObject::getFramePosition(int16 &x, int16 &y) const { } void ANIObject::getFrameSize(int16 &width, int16 &height) const { + if (_cmp) { + width = _cmp->getWidth (_animation); + height = _cmp->getHeight(_animation); + + return; + } + if (_animation >= _ani->getAnimationCount()) return; @@ -147,6 +173,47 @@ void ANIObject::draw(Surface &dest, int16 &left, int16 &top, if (!_visible) return; + if (_cmp) + drawCMP(dest, left, top, right, bottom); + else if (_ani) + drawANI(dest, left, top, right, bottom); +} + +void ANIObject::drawCMP(Surface &dest, int16 &left, int16 &top, + int16 &right, int16 &bottom) { + + if (!_background) { + uint16 width, height; + + _cmp->getMaxSize(width, height); + + _background = new Surface(width, height, dest.getBPP()); + } + + const uint16 cR = _cmp->getWidth (_animation) - 1; + const uint16 cB = _cmp->getHeight(_animation) - 1; + + _backgroundLeft = CLIP<int16>( + _x, 0, dest.getWidth () - 1); + _backgroundTop = CLIP<int16>( + _y, 0, dest.getHeight() - 1); + _backgroundRight = CLIP<int16>(cR + _x, 0, dest.getWidth () - 1); + _backgroundBottom = CLIP<int16>(cB + _y, 0, dest.getHeight() - 1); + + _background->blit(dest, _backgroundLeft , _backgroundTop, + _backgroundRight, _backgroundBottom, 0, 0); + + _cmp->draw(dest, _animation, _x, _y, 0); + + _drawn = true; + + left = _backgroundLeft; + top = _backgroundTop; + right = _backgroundRight; + bottom = _backgroundBottom; +} + +void ANIObject::drawANI(Surface &dest, int16 &left, int16 &top, + int16 &right, int16 &bottom) { + if (!_background) { uint16 width, height; @@ -202,6 +269,10 @@ void ANIObject::advance() { if (_paused) return; + // CMP "animations" have only one frame + if (_cmp) + return; + if (_animation >= _ani->getAnimationCount()) return; @@ -229,6 +300,10 @@ uint16 ANIObject::getFrame() const { } bool ANIObject::lastFrame() const { + // CMP "animations" have only one frame + if (_cmp) + return true; + if (_animation >= _ani->getAnimationCount()) return true; diff --git a/engines/gob/aniobject.h b/engines/gob/aniobject.h index e3fe301400..c101d747b7 100644 --- a/engines/gob/aniobject.h +++ b/engines/gob/aniobject.h @@ -28,6 +28,7 @@ namespace Gob { class ANIFile; +class CMPFile; class Surface; /** An ANI object, controlling an animation within an ANI file. */ @@ -38,7 +39,10 @@ public: kModeOnce ///< Play the animation only once. }; + /** Create an animation object from an ANI file. */ ANIObject(const ANIFile &ani); + /** Create an animation object from a CMP sprite. */ + ANIObject(const CMPFile &cmp); virtual ~ANIObject(); /** Make the object visible/invisible. */ @@ -98,6 +102,7 @@ public: private: const ANIFile *_ani; ///< The managed ANI file. + const CMPFile *_cmp; ///< The managed CMP file. uint16 _animation; ///< The current animation number uint16 _frame; ///< The current frame. @@ -117,6 +122,9 @@ private: int16 _backgroundTop; ///< The top of the saved background. int16 _backgroundRight; ///< The right position of the saved background. int16 _backgroundBottom; ///< The bottom position of the saved background. + + void drawCMP(Surface &dest, int16 &left, int16 &top, int16 &right, int16 &bottom); + void drawANI(Surface &dest, int16 &left, int16 &top, int16 &right, int16 &bottom); }; } // End of namespace Gob diff --git a/engines/gob/cmpfile.cpp b/engines/gob/cmpfile.cpp new file mode 100644 index 0000000000..7b21c4c835 --- /dev/null +++ b/engines/gob/cmpfile.cpp @@ -0,0 +1,246 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 + * of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/stream.h" +#include "common/str.h" + +#include "gob/gob.h" +#include "gob/util.h" +#include "gob/surface.h" +#include "gob/video.h" +#include "gob/dataio.h" +#include "gob/rxyfile.h" +#include "gob/cmpfile.h" + +namespace Gob { + +CMPFile::CMPFile(GobEngine *vm, const Common::String &baseName, + uint16 width, uint16 height, uint8 bpp) : + _vm(vm), _width(width), _height(height), _bpp(bpp), _maxWidth(0), _maxHeight(0), + _surface(0), _coordinates(0) { + + if (baseName.empty()) + return; + + const Common::String rxyFile = Util::setExtension(baseName, ".RXY"); + const Common::String cmpFile = Util::setExtension(baseName, ".CMP"); + + if (!_vm->_dataIO->hasFile(cmpFile)) + return; + + loadRXY(rxyFile); + createSurface(); + + loadCMP(cmpFile); +} + +CMPFile::CMPFile(GobEngine *vm, const Common::String &cmpFile, const Common::String &rxyFile, + uint16 width, uint16 height, uint8 bpp) : + _vm(vm), _width(width), _height(height), _bpp(bpp), _maxWidth(0), _maxHeight(0), + _surface(0), _coordinates(0) { + + if (cmpFile.empty() || !_vm->_dataIO->hasFile(cmpFile)) + return; + + loadRXY(rxyFile); + createSurface(); + + loadCMP(cmpFile); +} + +CMPFile::CMPFile(GobEngine *vm, Common::SeekableReadStream &cmp, Common::SeekableReadStream &rxy, + uint16 width, uint16 height, uint8 bpp) : + _vm(vm), _width(width), _height(height), _bpp(bpp), _maxWidth(0), _maxHeight(0), + _surface(0), _coordinates(0) { + + loadRXY(rxy); + createSurface(); + + loadCMP(cmp); +} + +CMPFile::CMPFile(GobEngine *vm, Common::SeekableReadStream &cmp, + uint16 width, uint16 height, uint8 bpp) : + _vm(vm), _width(width), _height(height), _bpp(bpp), _maxWidth(0), _maxHeight(0), + _surface(0), _coordinates(0) { + + createRXY(); + createSurface(); + + loadCMP(cmp); +} + +CMPFile::~CMPFile() { + delete _surface; + delete _coordinates; +} + +bool CMPFile::empty() const { + return (_surface == 0) || (_coordinates == 0); +} + +uint16 CMPFile::getSpriteCount() const { + if (empty()) + return 0; + + return _coordinates->size(); +} + +void CMPFile::loadCMP(const Common::String &cmp) { + Common::SeekableReadStream *dataCMP = _vm->_dataIO->getFile(cmp); + if (!dataCMP) + return; + + loadCMP(*dataCMP); + + delete dataCMP; +} + +void CMPFile::loadRXY(const Common::String &rxy) { + Common::SeekableReadStream *dataRXY = 0; + if (!rxy.empty()) + dataRXY = _vm->_dataIO->getFile(rxy); + + if (dataRXY) + loadRXY(*dataRXY); + else + createRXY(); + + _height = _coordinates->getHeight(); + + delete dataRXY; +} + +void CMPFile::loadCMP(Common::SeekableReadStream &cmp) { + uint32 size = cmp.size(); + byte *data = new byte[size]; + + if (cmp.read(data, size) != size) + return; + + _vm->_video->drawPackedSprite(data, _surface->getWidth(), _surface->getHeight(), 0, 0, 0, *_surface); + + delete[] data; +} + +void CMPFile::loadRXY(Common::SeekableReadStream &rxy) { + _coordinates = new RXYFile(rxy); + + for (uint i = 0; i < _coordinates->size(); i++) { + const RXYFile::Coordinates &c = (*_coordinates)[i]; + + if (c.left == 0xFFFF) + continue; + + const uint16 width = c.right - c.left + 1; + const uint16 height = c.bottom - c.top + 1; + + _maxWidth = MAX(_maxWidth , width); + _maxHeight = MAX(_maxHeight, height); + } +} + +void CMPFile::createRXY() { + _coordinates = new RXYFile(_width, _height); + + _maxWidth = _width; + _maxHeight = _height; +} + +void CMPFile::createSurface() { + if (_width == 0) + _width = 320; + if (_height == 0) + _height = 200; + + _surface = new Surface(_width, _height, _bpp); +} + +bool CMPFile::getCoordinates(uint16 sprite, uint16 &left, uint16 &top, uint16 &right, uint16 &bottom) const { + if (empty() || (sprite >= _coordinates->size())) + return false; + + left = (*_coordinates)[sprite].left; + top = (*_coordinates)[sprite].top; + right = (*_coordinates)[sprite].right; + bottom = (*_coordinates)[sprite].bottom; + + return left != 0xFFFF; +} + +uint16 CMPFile::getWidth(uint16 sprite) const { + if (empty() || (sprite >= _coordinates->size())) + return 0; + + return (*_coordinates)[sprite].right - (*_coordinates)[sprite].left + 1; +} + +uint16 CMPFile::getHeight(uint16 sprite) const { + if (empty() || (sprite >= _coordinates->size())) + return 0; + + return (*_coordinates)[sprite].bottom - (*_coordinates)[sprite].top + 1; +} + +void CMPFile::getMaxSize(uint16 &width, uint16 &height) const { + width = _maxWidth; + height = _maxHeight; +} + +void CMPFile::draw(Surface &dest, uint16 sprite, uint16 x, uint16 y, int32 transp) const { + if (empty()) + return; + + if (sprite >= _coordinates->size()) + return; + + const RXYFile::Coordinates &coords = (*_coordinates)[sprite]; + + draw(dest, coords.left, coords.top, coords.right, coords.bottom, x, y, transp); +} + +void CMPFile::draw(Surface &dest, uint16 left, uint16 top, uint16 right, uint16 bottom, + uint16 x, uint16 y, int32 transp) const { + + if (!_surface) + return; + + if (left == 0xFFFF) + return; + + dest.blit(*_surface, left, top, right, bottom, x, y, transp); +} + +uint16 CMPFile::addSprite(uint16 left, uint16 top, uint16 right, uint16 bottom) { + if (empty()) + return 0; + + const uint16 height = bottom - top + 1; + const uint16 width = right - left + 1; + + _maxWidth = MAX(_maxWidth , width); + _maxHeight = MAX(_maxHeight, height); + + return _coordinates->add(left, top, right, bottom); +} + +} // End of namespace Gob diff --git a/engines/gob/cmpfile.h b/engines/gob/cmpfile.h new file mode 100644 index 0000000000..2b669e4d38 --- /dev/null +++ b/engines/gob/cmpfile.h @@ -0,0 +1,98 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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 + * of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GOB_CMPFILE_H +#define GOB_CMPFILE_H + +#include "common/system.h" +#include "common/array.h" + +namespace Common { + class String; + class SeekableReadStream; +} + +namespace Gob { + +class GobEngine; +class Surface; +class RXYFile; + +/** A CMP file, containing a sprite. + * + * Used in hardcoded "actiony" parts of gob games. + */ +class CMPFile { +public: + CMPFile(GobEngine *vm, const Common::String &baseName, + uint16 width, uint16 height, uint8 bpp = 1); + CMPFile(GobEngine *vm, const Common::String &cmpFile, const Common::String &rxyFile, + uint16 width, uint16 height, uint8 bpp = 1); + CMPFile(GobEngine *vm, Common::SeekableReadStream &cmp, Common::SeekableReadStream &rxy, + uint16 width, uint16 height, uint8 bpp = 1); + CMPFile(GobEngine *vm, Common::SeekableReadStream &cmp, + uint16 width, uint16 height, uint8 bpp = 1); + ~CMPFile(); + + bool empty() const; + + uint16 getSpriteCount() const; + + bool getCoordinates(uint16 sprite, uint16 &left, uint16 &top, uint16 &right, uint16 &bottom) const; + + uint16 getWidth (uint16 sprite) const; + uint16 getHeight(uint16 sprite) const; + + void getMaxSize(uint16 &width, uint16 &height) const; + + void draw(Surface &dest, uint16 sprite, uint16 x, uint16 y, int32 transp = -1) const; + void draw(Surface &dest, uint16 left, uint16 top, uint16 right, uint16 bottom, + uint16 x, uint16 y, int32 transp = -1) const; + + uint16 addSprite(uint16 left, uint16 top, uint16 right, uint16 bottom); + +private: + GobEngine *_vm; + + uint16 _width; + uint16 _height; + uint16 _bpp; + + uint16 _maxWidth; + uint16 _maxHeight; + + Surface *_surface; + RXYFile *_coordinates; + + void loadCMP(const Common::String &cmp); + void loadRXY(const Common::String &rxy); + + void loadCMP(Common::SeekableReadStream &cmp); + void loadRXY(Common::SeekableReadStream &rxy); + + void createRXY(); + void createSurface(); +}; + +} // End of namespace Gob + +#endif // GOB_CMPFILE_H diff --git a/engines/gob/decfile.cpp b/engines/gob/decfile.cpp index f5910f0654..fb67c52627 100644 --- a/engines/gob/decfile.cpp +++ b/engines/gob/decfile.cpp @@ -29,25 +29,14 @@ #include "gob/dataio.h" #include "gob/surface.h" #include "gob/video.h" -#include "gob/rxyfile.h" +#include "gob/cmpfile.h" #include "gob/decfile.h" namespace Gob { -DECFile::Layer::Layer() : surface(0), coordinates(0) { -} - -DECFile::Layer::~Layer() { - delete coordinates; - delete surface; -} - - DECFile::DECFile(GobEngine *vm, const Common::String &fileName, uint16 width, uint16 height, uint8 bpp) : _vm(vm), - _width(width), _height(height), _bpp(bpp), _hasPadding(false) { - - _backdrop = new Surface(_width, _height, _bpp); + _width(width), _height(height), _bpp(bpp), _hasPadding(false), _backdrop(0) { Common::SeekableReadStream *dec = _vm->_dataIO->getFile(fileName); if (dec) { @@ -77,6 +66,9 @@ DECFile::DECFile(GobEngine *vm, const Common::String &fileName, DECFile::~DECFile() { delete _backdrop; + + for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l) + delete *l; } void DECFile::load(Common::SeekableSubReadStreamEndian &dec, const Common::String &fileName) { @@ -102,9 +94,9 @@ void DECFile::load(Common::SeekableSubReadStreamEndian &dec, const Common::Strin } // Load the layers - _layers.resize(MAX(0, layerCount - 1)); - for (LayerArray::iterator l = _layers.begin(); l != _layers.end(); ++l) - loadLayer(*l, dec); + _layers.reserve(MAX(0, layerCount - 1)); + for (int i = 0; i < layerCount - 1; i++) + _layers.push_back(loadLayer(dec)); // Load the backdrop parts if (backdropCount > 0) @@ -113,43 +105,19 @@ void DECFile::load(Common::SeekableSubReadStreamEndian &dec, const Common::Strin void DECFile::loadBackdrop(Common::SeekableSubReadStreamEndian &dec) { // Interestingly, DEC files reference "FOO.LBM" instead of "FOO.CMP" - Common::String file = Util::setExtension(Util::readString(dec, 13), ".CMP"); + Common::String file = Util::setExtension(Util::readString(dec, 13), ""); if (_hasPadding) dec.skip(1); - if (file.empty() || !_vm->_dataIO->hasFile(file)) - return; - - _vm->_video->drawPackedSprite(file.c_str(), *_backdrop); + _backdrop = new CMPFile(_vm, file, _width, _height, _bpp); } -void DECFile::loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &dec) { - Common::String file = Util::readString(dec, 13); +CMPFile *DECFile::loadLayer(Common::SeekableSubReadStreamEndian &dec) { + Common::String file = Util::setExtension(Util::readString(dec, 13), ""); if (_hasPadding) dec.skip(1); - if (file.empty()) - return; - - Common::String fileRXY = Util::setExtension(file, ".RXY"); - Common::String fileCMP = Util::setExtension(file, ".CMP"); - if (!_vm->_dataIO->hasFile(fileRXY) || !_vm->_dataIO->hasFile(fileCMP)) - return; - - loadLayer(layer, fileRXY, fileCMP); -} - -void DECFile::loadLayer(Layer &layer, const Common::String &fileRXY, - const Common::String &fileCMP) { - - Common::SeekableReadStream *dataRXY = _vm->_dataIO->getFile(fileRXY); - if (!dataRXY) - return; - - layer.coordinates = new RXYFile(*dataRXY); - layer.surface = new Surface(_width, layer.coordinates->getHeight(), _bpp); - - _vm->_video->drawPackedSprite(fileCMP.c_str(), *layer.surface); + return new CMPFile(_vm, file, _width, _height, _bpp); } void DECFile::loadParts(Common::SeekableSubReadStreamEndian &dec) { @@ -188,7 +156,10 @@ void DECFile::draw(Surface &dest) const { } void DECFile::drawBackdrop(Surface &dest) const { - dest.blit(*_backdrop); + if (!_backdrop) + return; + + _backdrop->draw(dest, 0, 0, 0); } void DECFile::drawLayer(Surface &dest, uint16 layer, uint16 part, @@ -197,18 +168,7 @@ void DECFile::drawLayer(Surface &dest, uint16 layer, uint16 part, if (layer >= _layers.size()) return; - const Layer &l = _layers[layer]; - if (!l.surface || !l.coordinates) - return; - - if (part >= l.coordinates->size()) - return; - - const RXYFile::Coordinates &c = (*l.coordinates)[part]; - if (c.left == 0xFFFF) - return; - - dest.blit(*l.surface, c.left, c.top, c.right, c.bottom, x, y, transp); + _layers[layer]->draw(dest, part, x, y, transp); } } // End of namespace Gob diff --git a/engines/gob/decfile.h b/engines/gob/decfile.h index 31d90180d3..48af740d41 100644 --- a/engines/gob/decfile.h +++ b/engines/gob/decfile.h @@ -34,7 +34,7 @@ namespace Gob { class GobEngine; class Surface; -class RXYFile; +class CMPFile; /** A DEC file, describing a "decal" (background). * @@ -60,14 +60,6 @@ public: uint16 x, uint16 y, int32 transp = -1) const; private: - struct Layer { - Surface *surface; ///< The surface containing the layer sprite. - RXYFile *coordinates; ///< The coordinates describing the layer sprite parts. - - Layer(); - ~Layer(); - }; - struct Part { uint8 layer; uint8 part; @@ -77,8 +69,8 @@ private: bool transp; }; - typedef Common::Array<Layer> LayerArray; - typedef Common::Array<Part> PartArray; + typedef Common::Array<CMPFile *> LayerArray; + typedef Common::Array<Part> PartArray; GobEngine *_vm; @@ -88,7 +80,7 @@ private: byte _hasPadding; - Surface *_backdrop; + CMPFile *_backdrop; LayerArray _layers; PartArray _parts; @@ -98,9 +90,7 @@ private: void loadBackdrop(Common::SeekableSubReadStreamEndian &dec); - void loadLayer(Layer &layer, Common::SeekableSubReadStreamEndian &dec); - void loadLayer(Layer &layer, const Common::String &fileRXY, - const Common::String &fileCMP); + CMPFile *loadLayer(Common::SeekableSubReadStreamEndian &dec); void loadParts(Common::SeekableSubReadStreamEndian &dec); void loadPart(Part &part, Common::SeekableSubReadStreamEndian &dec); diff --git a/engines/gob/module.mk b/engines/gob/module.mk index 1c83b4ae40..9da5a82de2 100644 --- a/engines/gob/module.mk +++ b/engines/gob/module.mk @@ -5,6 +5,7 @@ MODULE_OBJS := \ aniobject.o \ cheater.o \ cheater_geisha.o \ + cmpfile.o \ console.o \ dataio.o \ databases.o \ diff --git a/engines/gob/rxyfile.cpp b/engines/gob/rxyfile.cpp index 5311eece0f..9702dc8c7f 100644 --- a/engines/gob/rxyfile.cpp +++ b/engines/gob/rxyfile.cpp @@ -30,6 +30,15 @@ RXYFile::RXYFile(Common::SeekableReadStream &rxy) : _width(0), _height(0) { load(rxy); } +RXYFile::RXYFile(uint16 width, uint16 height) : _realCount(1), _width(width), _height(height) { + _coords.resize(1); + + _coords[0].left = 0; + _coords[0].top = 0; + _coords[0].right = _width - 1; + _coords[0].bottom = _height - 1; +} + RXYFile::~RXYFile() { } @@ -79,4 +88,15 @@ void RXYFile::load(Common::SeekableReadStream &rxy) { } } +uint16 RXYFile::add(uint16 left, uint16 top, uint16 right, uint16 bottom) { + _coords.resize(_coords.size() + 1); + + _coords.back().left = left; + _coords.back().top = top; + _coords.back().right = right; + _coords.back().bottom = bottom; + + return _coords.size() - 1; +} + } // End of namespace Gob diff --git a/engines/gob/rxyfile.h b/engines/gob/rxyfile.h index 828f8b73c7..bc9600b5b0 100644 --- a/engines/gob/rxyfile.h +++ b/engines/gob/rxyfile.h @@ -46,6 +46,7 @@ public: }; RXYFile(Common::SeekableReadStream &rxy); + RXYFile(uint16 width, uint16 height); ~RXYFile(); uint size() const; @@ -57,6 +58,8 @@ public: const Coordinates &operator[](uint i) const; + uint16 add(uint16 left, uint16 top, uint16 right, uint16 bottom); + private: typedef Common::Array<Coordinates> CoordArray; diff --git a/engines/kyra/eobcommon.cpp b/engines/kyra/eobcommon.cpp index 1489e4f1f5..a63f123258 100644 --- a/engines/kyra/eobcommon.cpp +++ b/engines/kyra/eobcommon.cpp @@ -2066,7 +2066,7 @@ bool EoBCoreEngine::characterAttackHitTest(int charIndex, int monsterIndex, int s = CLIP(s, 1, 20); - return s < m ? false : true; + return s >= m; } bool EoBCoreEngine::monsterAttackHitTest(EoBMonsterInPlay *m, int charIndex) { @@ -2300,7 +2300,7 @@ bool EoBCoreEngine::trySavingThrow(void *target, int hpModifier, int level, int s -= constMod[c->constitutionCur]; } - return rollDice(1, 20) < s ? false : true; + return rollDice(1, 20) >= s; } bool EoBCoreEngine::specialAttackSavingThrow(int charIndex, int type) { diff --git a/engines/kyra/gui_eob.cpp b/engines/kyra/gui_eob.cpp index e8e69d5b1f..e3c0743e5c 100644 --- a/engines/kyra/gui_eob.cpp +++ b/engines/kyra/gui_eob.cpp @@ -1460,7 +1460,7 @@ void GUI_EoB::processButton(Button *button) { // nullsub (at least EOBII) } else if (button->data0Val1 == 4) { if (button->data1Callback) - (*button->data1Callback.get())(button); + (*button->data1Callback)(button); } } else if (button->data1Val1 == 2) { if (!(button->flags2 & 4)) @@ -1469,7 +1469,7 @@ void GUI_EoB::processButton(Button *button) { // nullsub (at least EOBII) } else if (button->data1Val1 == 4) { if (button->data1Callback) - (*button->data1Callback.get())(button); + (*button->data1Callback)(button); } } @@ -1486,7 +1486,7 @@ void GUI_EoB::processButton(Button *button) { // nullsub (at least EOBII) } else if (button->data0Val1 == 4) { if (button->data2Callback) - (*button->data2Callback.get())(button); + (*button->data2Callback)(button); } } else if (button->data2Val1 == 2) { _screen->drawBox(sx, sy, fx2, fy2, (button->flags2 & 1) ? button->data3Val2 : button->data2Val2); @@ -1494,7 +1494,7 @@ void GUI_EoB::processButton(Button *button) { // nullsub (at least EOBII) } else if (button->data2Val1 == 4) { if (button->data2Callback) - (*button->data2Callback.get())(button); + (*button->data2Callback)(button); } } @@ -1507,7 +1507,7 @@ void GUI_EoB::processButton(Button *button) { // nullsub (at least EOBII) } else if (button->data0Val1 == 4) { if (button->data0Callback) - (*button->data0Callback.get())(button); + (*button->data0Callback)(button); } else if (button->data0Val1 == 5) { _screen->drawBox(sx, sy, fx2, fy2, button->data0Val2); } else { @@ -1876,7 +1876,7 @@ int GUI_EoB::processButtonList(Kyra::Button *buttonList, uint16 inputFlags, int8 processButton(buttonList); if (v6 && buttonList->buttonCallback) - runLoop = ((*buttonList->buttonCallback.get())(buttonList)) ? false : true; + runLoop = !(*buttonList->buttonCallback)(buttonList); if ((flgs2 & 2) && (flgs & 0x20)) runLoop = false; @@ -2331,7 +2331,7 @@ bool GUI_EoB::confirmDialogue2(int dim, int id, int deflt) { _screen->setFont(of); _screen->setScreenDim(od); - return newHighlight ? false : true; + return newHighlight == 0; } void GUI_EoB::messageDialogue(int dim, int id, int buttonTextCol) { @@ -3548,7 +3548,7 @@ bool GUI_EoB::confirmDialogue(int id) { _vm->removeInputTop(); if (inputFlag == _vm->_keyMap[Common::KEYCODE_KP5] || inputFlag == _vm->_keyMap[Common::KEYCODE_SPACE] || inputFlag == _vm->_keyMap[Common::KEYCODE_RETURN]) { - result = lastHighlight ? false : true; + result = lastHighlight == 0; inputFlag = 0x8021 + lastHighlight; runLoop = false; } else if (inputFlag == _vm->_keyMap[Common::KEYCODE_KP4] || inputFlag == _vm->_keyMap[Common::KEYCODE_LEFT] || inputFlag == _vm->_keyMap[Common::KEYCODE_KP6] || inputFlag == _vm->_keyMap[Common::KEYCODE_RIGHT]) { diff --git a/engines/kyra/gui_lok.cpp b/engines/kyra/gui_lok.cpp index 18470e5d76..b4e5148b64 100644 --- a/engines/kyra/gui_lok.cpp +++ b/engines/kyra/gui_lok.cpp @@ -243,7 +243,7 @@ int GUI_LoK::processButtonList(Button *list, uint16 inputFlag, int8 mouseWheel) } if (mouseWheel && list->mouseWheel == mouseWheel && list->buttonCallback) { - if ((*list->buttonCallback.get())(list)) + if ((*list->buttonCallback)(list)) break; } @@ -282,7 +282,7 @@ int GUI_LoK::processButtonList(Button *list, uint16 inputFlag, int8 mouseWheel) if (processMouseClick) { if (list->buttonCallback) { - if ((*list->buttonCallback.get())(list)) + if ((*list->buttonCallback)(list)) break; } } @@ -349,7 +349,7 @@ void GUI_LoK::processButton(Button *button) { if (processType == 1 && shape) _screen->drawShape(_screen->_curPage, shape, x, y, button->dimTableIndex, 0x10); else if (processType == 4 && callback) - (*callback.get())(button); + (*callback)(button); } void GUI_LoK::setGUILabels() { diff --git a/engines/kyra/gui_lol.cpp b/engines/kyra/gui_lol.cpp index b025aefbd0..a79da0681e 100644 --- a/engines/kyra/gui_lol.cpp +++ b/engines/kyra/gui_lol.cpp @@ -2165,7 +2165,7 @@ int GUI_LoL::processButtonList(Button *buttonList, uint16 inputFlag, int8 mouseW if (buttonList->buttonCallback) { //_vm->removeInputTop(); - if ((*buttonList->buttonCallback.get())(buttonList)) + if ((*buttonList->buttonCallback)(buttonList)) break; } diff --git a/engines/kyra/gui_v2.cpp b/engines/kyra/gui_v2.cpp index 580adb0e5d..65f8bd45e5 100644 --- a/engines/kyra/gui_v2.cpp +++ b/engines/kyra/gui_v2.cpp @@ -360,7 +360,7 @@ int GUI_v2::processButtonList(Button *buttonList, uint16 inputFlag, int8 mouseWh if (buttonList->buttonCallback) { _vm->removeInputTop(); - if ((*buttonList->buttonCallback.get())(buttonList)) + if ((*buttonList->buttonCallback)(buttonList)) break; } diff --git a/engines/kyra/screen_v2.cpp b/engines/kyra/screen_v2.cpp index dde22498eb..7d4b064e2a 100644 --- a/engines/kyra/screen_v2.cpp +++ b/engines/kyra/screen_v2.cpp @@ -365,7 +365,7 @@ bool Screen_v2::calcBounds(int w0, int h0, int &x1, int &y1, int &w1, int &h1, i } } - return (w1 == -1) ? false : true; + return w1 != -1; } void Screen_v2::checkedPageUpdate(int srcPage, int dstPage) { diff --git a/engines/kyra/sequences_hof.cpp b/engines/kyra/sequences_hof.cpp index 686c3c9320..f2abfb81dc 100644 --- a/engines/kyra/sequences_hof.cpp +++ b/engines/kyra/sequences_hof.cpp @@ -32,7 +32,7 @@ namespace Kyra { void KyraEngine_HoF::seq_playSequences(int startSeq, int endSeq) { seq_init(); - bool allowSkip = (!(_flags.isDemo && !_flags.isTalkie) && (startSeq == kSequenceTitle)) ? false : true; + bool allowSkip = (_flags.isDemo && !_flags.isTalkie) || startSeq != kSequenceTitle; if (endSeq == -1) endSeq = startSeq; @@ -74,7 +74,7 @@ void KyraEngine_HoF::seq_playSequences(int startSeq, int endSeq) { _seqFrameCounter = 0; _seqStartTime = _system->getMillis(); - allowSkip = (!(_flags.isDemo && !_flags.isTalkie) && (seqNum == kSequenceTitle)) ? false : true; + allowSkip = (_flags.isDemo && !_flags.isTalkie) || seqNum != kSequenceTitle; Sequence cseq = _sequences->seq[seqNum]; SeqProc cb = _callbackS[seqNum]; diff --git a/engines/kyra/sprites_lol.cpp b/engines/kyra/sprites_lol.cpp index 5a05d81a22..a07abd4580 100644 --- a/engines/kyra/sprites_lol.cpp +++ b/engines/kyra/sprites_lol.cpp @@ -248,7 +248,7 @@ bool LoLEngine::updateMonsterAdjustBlocks(LoLMonster *monster) { int16 fx2 = 0; setLevelShapesDim(x2 + dims[y2], fx1, fx2, 13); - return (fx1 >= fx2) ? false : true; + return fx1 < fx2; } void LoLEngine::placeMonster(LoLMonster *monster, uint16 x, uint16 y) { @@ -1447,7 +1447,7 @@ void LoLEngine::rearrangeAttackingMonster(LoLMonster *monster) { uint16 mx = monster->x; uint16 my = monster->y; uint16 *c = (t & 1) ? &my : &mx; - bool centered = (*c & 0x7f) ? false : true; + bool centered = (*c & 0x7f) == 0; bool posFlag = true; if (monster->properties->maxWidth <= 63) { diff --git a/engines/kyra/timer_eob.cpp b/engines/kyra/timer_eob.cpp index de1becfa72..766fe453ab 100644 --- a/engines/kyra/timer_eob.cpp +++ b/engines/kyra/timer_eob.cpp @@ -186,7 +186,7 @@ void EoBCoreEngine::timerProcessFlyingObjects(int timerNum) { if (!fo->enable) continue; - bool endFlight = fo->distance ? false : true; + bool endFlight = fo->distance == 0; uint8 pos = dirPosIndex[(fo->direction << 2) + (fo->curPos & 3)]; uint16 bl = fo->curBlock; diff --git a/engines/kyra/vqa.cpp b/engines/kyra/vqa.cpp index 04455ae307..471e83c9ed 100644 --- a/engines/kyra/vqa.cpp +++ b/engines/kyra/vqa.cpp @@ -395,7 +395,7 @@ void VQAMovie::displayFrame(uint frameNum) { if (frameNum >= _header.numFrames || !_opened) return; - bool foundSound = _stream ? false : true; + bool foundSound = !_stream; bool foundFrame = false; uint i; diff --git a/engines/lastexpress/entities/chapters.cpp b/engines/lastexpress/entities/chapters.cpp index 96e08ba808..4ef2dc50e8 100644 --- a/engines/lastexpress/entities/chapters.cpp +++ b/engines/lastexpress/entities/chapters.cpp @@ -1805,7 +1805,7 @@ void Chapters::enterExitHelper(bool isEnteringStation) { getObjects()->update(kObjectHandleOutsideLeft, kEntityPlayer, kObjectLocation1, kCursorNormal, isEnteringStation ? kCursorNormal : kCursorHand); getObjects()->update(kObjectHandleOutsideRight, kEntityPlayer, kObjectLocation1, kCursorNormal, isEnteringStation ? kCursorNormal : kCursorHand); - getProgress().isTrainRunning = isEnteringStation ? false : true; + getProgress().isTrainRunning = !isEnteringStation; if (isEnteringStation) { ENTITY_PARAM(0, 2) = 1; diff --git a/engines/lure/debugger.cpp b/engines/lure/debugger.cpp index ef4a22f73a..3fbbf84469 100644 --- a/engines/lure/debugger.cpp +++ b/engines/lure/debugger.cpp @@ -119,21 +119,21 @@ bool Debugger::cmd_listRooms(int argc, const char **argv) { DebugPrintf("Available rooms are:\n"); for (RoomDataList::iterator i = rooms.begin(); i != rooms.end(); ++i) { - RoomData *room = (*i).get(); + RoomData const &room = **i; // Explictly note the second drawbridge room as "Alt" - if (room->roomNumber == 49) { + if (room.roomNumber == 49) { strings.getString(47, buffer); strcat(buffer, " (alt)"); } else { - strings.getString(room->roomNumber, buffer); + strings.getString(room.roomNumber, buffer); } - DebugPrintf("#%d - %s", room->roomNumber, buffer); + DebugPrintf("#%d - %s", room.roomNumber, buffer); if (++ctr % 3 == 0) DebugPrintf("\n"); else { // Write out spaces between columns - int numSpaces = 25 - strlen(buffer) - ((room->roomNumber >= 10) ? 2 : 1); + int numSpaces = 25 - strlen(buffer) - (room.roomNumber >= 10 ? 2 : 1); char *s = buffer; while (numSpaces-- > 0) *s++ = ' '; *s = '\0'; @@ -243,13 +243,13 @@ bool Debugger::cmd_hotspots(int argc, const char **argv) { // Loop for displaying active hotspots HotspotList::iterator i; for (i = res.activeHotspots().begin(); i != res.activeHotspots().end(); ++i) { - Hotspot *hotspot = (*i).get(); + Hotspot const &hotspot = **i; - if (hotspot->nameId() == 0) strcpy(buffer, "none"); - else strings.getString(hotspot->nameId(), buffer); + if (hotspot.nameId() == 0) strcpy(buffer, "none"); + else strings.getString(hotspot.nameId(), buffer); - DebugPrintf("%4xh - %s pos=(%d,%d,%d)\n", hotspot->hotspotId(), buffer, - hotspot->x(), hotspot->y(), hotspot->roomNumber()); + DebugPrintf("%4xh - %s pos=(%d,%d,%d)\n", hotspot.hotspotId(), buffer, + hotspot.x(), hotspot.y(), hotspot.roomNumber()); } } else { // Presume it's a room's hotspots @@ -257,14 +257,14 @@ bool Debugger::cmd_hotspots(int argc, const char **argv) { HotspotDataList::iterator i; for (i = res.hotspotData().begin(); i != res.hotspotData().end(); ++i) { - HotspotData *hotspot = (*i).get(); + HotspotData const &hotspot = **i; - if (hotspot->roomNumber == roomNumber) { - if (hotspot->nameId == 0) strcpy(buffer, "none"); - else strings.getString(hotspot->nameId, buffer); + if (hotspot.roomNumber == roomNumber) { + if (hotspot.nameId == 0) strcpy(buffer, "none"); + else strings.getString(hotspot.nameId, buffer); - DebugPrintf("%4xh - %s pos=(%d,%d,%d)\n", hotspot->hotspotId, buffer, - hotspot->startX, hotspot->startY, hotspot->roomNumber); + DebugPrintf("%4xh - %s pos=(%d,%d,%d)\n", hotspot.hotspotId, buffer, + hotspot.startX, hotspot.startY, hotspot.roomNumber); } } } @@ -415,10 +415,10 @@ bool Debugger::cmd_room(int argc, const char **argv) { else { RoomExitHotspotList::iterator i; for (i = exits.begin(); i != exits.end(); ++i) { - RoomExitHotspotData *rec = (*i).get(); + RoomExitHotspotData const &rec = **i; DebugPrintf("\nArea - (%d,%d)-(%d,%d) Room=%d Cursor=%d Hotspot=%xh", - rec->xs, rec->ys, rec->xe, rec->ye, rec->destRoomNumber, rec->cursorNum, rec->hotspotId); + rec.xs, rec.ys, rec.xe, rec.ye, rec.destRoomNumber, rec.cursorNum, rec.hotspotId); } DebugPrintf("\n"); @@ -430,11 +430,11 @@ bool Debugger::cmd_room(int argc, const char **argv) { else { RoomExitList::iterator i2; for (i2 = room->exits.begin(); i2 != room->exits.end(); ++i2) { - RoomExitData *rec2 = (*i2).get(); + RoomExitData const &rec2 = **i2; DebugPrintf("\nExit - (%d,%d)-(%d,%d) Dest=%d,(%d,%d) Dir=%s Sequence=%xh", - rec2->xs, rec2->ys, rec2->xe, rec2->ye, rec2->roomNumber, - rec2->x, rec2->y, directionList[rec2->direction], rec2->sequenceOffset); + rec2.xs, rec2.ys, rec2.xe, rec2.ye, rec2.roomNumber, + rec2.x, rec2.y, directionList[rec2.direction], rec2.sequenceOffset); } DebugPrintf("\n"); diff --git a/engines/lure/game.cpp b/engines/lure/game.cpp index 9542c35785..eaed7ebbe7 100644 --- a/engines/lure/game.cpp +++ b/engines/lure/game.cpp @@ -71,12 +71,12 @@ void Game::tick() { uint16 *idList = new uint16[res.activeHotspots().size()]; int idSize = 0; for (i = res.activeHotspots().begin(); i != res.activeHotspots().end(); ++i) { - Hotspot *hotspot = (*i).get(); + Hotspot const &hotspot = **i; - if (!_preloadFlag || ((hotspot->layer() != 0xff) && - (hotspot->hotspotId() < FIRST_NONCHARACTER_ID))) + if (!_preloadFlag || ((hotspot.layer() != 0xff) && + (hotspot.hotspotId() < FIRST_NONCHARACTER_ID))) // Add hotspot to list to execute - idList[idSize++] = hotspot->hotspotId(); + idList[idSize++] = hotspot.hotspotId(); } debugC(ERROR_DETAILED, kLureDebugAnimations, "Hotspot ticks begin"); diff --git a/engines/lure/hotspots.cpp b/engines/lure/hotspots.cpp index c7e7e81900..ee7a185ea1 100644 --- a/engines/lure/hotspots.cpp +++ b/engines/lure/hotspots.cpp @@ -430,7 +430,7 @@ bool Hotspot::isActiveAnimation() { return ((_numFrames != 0) && (_layer != 0)); } -uint16 Hotspot::nameId() { +uint16 Hotspot::nameId() const { if (_data == NULL) return 0; else @@ -1169,30 +1169,30 @@ bool Hotspot::doorCloseCheck(uint16 doorId) { HotspotList::iterator i; HotspotList &lst = res.activeHotspots(); for (i = lst.begin(); i != lst.end(); ++i) { - Hotspot *hsCurrent = (*i).get(); + Hotspot const &hsCurrent = **i; // Skip entry if it's the door or the character - if ((hsCurrent->hotspotId() == hotspotId()) || - (hsCurrent->hotspotId() == doorHotspot->hotspotId())) + if ((hsCurrent.hotspotId() == hotspotId()) || + (hsCurrent.hotspotId() == doorHotspot->hotspotId())) continue; // Skip entry if it doesn't meet certain criteria - if ((hsCurrent->layer() == 0) || - (hsCurrent->roomNumber() != doorHotspot->roomNumber()) || - (hsCurrent->hotspotId() < PLAYER_ID) || - ((hsCurrent->hotspotId() >= 0x408) && (hsCurrent->hotspotId() < 0x2710))) + if ((hsCurrent.layer() == 0) || + (hsCurrent.roomNumber() != doorHotspot->roomNumber()) || + (hsCurrent.hotspotId() < PLAYER_ID) || + ((hsCurrent.hotspotId() >= 0x408) && (hsCurrent.hotspotId() < 0x2710))) continue; // Also skip entry if special Id - if ((hsCurrent->hotspotId() == 0xfffe) || (hsCurrent->hotspotId() == 0xffff)) + if ((hsCurrent.hotspotId() == 0xfffe) || (hsCurrent.hotspotId() == 0xffff)) continue; // Check to see if the character is intersecting the door area - int tempY = hsCurrent->y() + hsCurrent->heightCopy(); - if ((hsCurrent->x() >= bounds.right) || - (hsCurrent->x() + hsCurrent->widthCopy() <= bounds.left) || - (tempY + hsCurrent->charRectY() < bounds.top) || - (tempY - hsCurrent->yCorrection() - hsCurrent->charRectY() > bounds.bottom)) + int tempY = hsCurrent.y() + hsCurrent.heightCopy(); + if ((hsCurrent.x() >= bounds.right) || + (hsCurrent.x() + hsCurrent.widthCopy() <= bounds.left) || + (tempY + hsCurrent.charRectY() < bounds.top) || + (tempY - hsCurrent.yCorrection() - hsCurrent.charRectY() > bounds.bottom)) continue; // At this point we know a character is blocking door, so return false @@ -1883,12 +1883,12 @@ void Hotspot::doStatus(HotspotData *hotspot) { HotspotDataList &list = res.hotspotData(); HotspotDataList::iterator i; for (i = list.begin(); i != list.end(); ++i) { - HotspotData *rec = (*i).get(); + HotspotData const &rec = **i; - if (rec->roomNumber == PLAYER_ID) { + if (rec.roomNumber == PLAYER_ID) { if (numItems++ == 0) strcat(buffer, ": "); else strcat(buffer, ", "); - strings.getString(rec->nameId, buffer + strlen(buffer)); + strings.getString(rec.nameId, buffer + strlen(buffer)); } } @@ -2286,7 +2286,7 @@ void Hotspot::startTalk(HotspotData *charHotspot, uint16 id) { charHotspot->hotspotId, id); } -void Hotspot::saveToStream(Common::WriteStream *stream) { +void Hotspot::saveToStream(Common::WriteStream *stream) const { if (_data) _data->npcSchedule.saveToStream(stream); else @@ -4113,7 +4113,7 @@ void HotspotTickHandlers::npcRoomChange(Hotspot &h) { // This method performs rounding of the number of steps depending on direciton -int WalkingActionEntry::numSteps() { +int WalkingActionEntry::numSteps() const { switch (_direction) { case UP: case DOWN: @@ -4385,8 +4385,8 @@ Common::String PathFinder::getDebugInfo() const { WalkingActionList::const_iterator i; for (i = _list.begin(); i != _list.end(); ++i) { - WalkingActionEntry *e = (*i).get(); - buffer += Common::String::format("Direction=%d, numSteps=%d\n", e->direction(), e->numSteps()); + WalkingActionEntry const &e = **i; + buffer += Common::String::format("Direction=%d, numSteps=%d\n", e.direction(), e.numSteps()); } return buffer; @@ -4496,7 +4496,7 @@ void PathFinder::initVars() { _countdownCtr -= 700; } -void PathFinder::saveToStream(Common::WriteStream *stream) { +void PathFinder::saveToStream(Common::WriteStream *stream) const { stream->writeByte(_inUse); if (_inUse) { @@ -4504,11 +4504,10 @@ void PathFinder::saveToStream(Common::WriteStream *stream) { stream->write(_layer, sizeof(RoomPathsDecompressedData)); // Save any active step sequence - WalkingActionList::iterator i; - for (i = _list.begin(); i != _list.end(); ++i) { - WalkingActionEntry *entry = (*i).get(); - stream->writeByte(entry->direction()); - stream->writeSint16LE(entry->rawSteps()); + for (WalkingActionList::const_iterator i = _list.begin(); i != _list.end(); ++i) { + WalkingActionEntry &entry = **i; + stream->writeByte(entry.direction()); + stream->writeSint16LE(entry.rawSteps()); } stream->writeByte(0xff); stream->writeSint16LE(_stepCtr); @@ -4683,18 +4682,17 @@ bool Support::isCharacterInList(uint16 *lst, int numEntries, uint16 charId) { return false; } -void HotspotList::saveToStream(Common::WriteStream *stream) { - HotspotList::iterator i; - for (i = begin(); i != end(); ++i) { - Hotspot *hotspot = (*i).get(); - debugC(ERROR_INTERMEDIATE, kLureDebugAnimations, "Saving hotspot %xh", hotspot->hotspotId()); - bool dynamicObject = hotspot->hotspotId() != hotspot->originalId(); - stream->writeUint16LE(hotspot->originalId()); +void HotspotList::saveToStream(Common::WriteStream *stream) const { + for (HotspotList::const_iterator i = begin(); i != end(); ++i) { + Hotspot const &hotspot = **i; + debugC(ERROR_INTERMEDIATE, kLureDebugAnimations, "Saving hotspot %xh", hotspot.hotspotId()); + bool dynamicObject = hotspot.hotspotId() != hotspot.originalId(); + stream->writeUint16LE(hotspot.originalId()); stream->writeByte(dynamicObject); - stream->writeUint16LE(hotspot->destHotspotId()); - hotspot->saveToStream(stream); + stream->writeUint16LE(hotspot.destHotspotId()); + hotspot.saveToStream(stream); - debugC(ERROR_DETAILED, kLureDebugAnimations, "Saved hotspot %xh", hotspot->hotspotId()); + debugC(ERROR_DETAILED, kLureDebugAnimations, "Saved hotspot %xh", hotspot.hotspotId()); } stream->writeUint16LE(0); } diff --git a/engines/lure/hotspots.h b/engines/lure/hotspots.h index a58a34456e..85d36dc138 100644 --- a/engines/lure/hotspots.h +++ b/engines/lure/hotspots.h @@ -111,9 +111,9 @@ private: int _numSteps; public: WalkingActionEntry(Direction dir, int steps): _direction(dir), _numSteps(steps) {} - Direction direction() { return _direction; } + Direction direction() const { return _direction; } int &rawSteps() { return _numSteps; } - int numSteps(); + int numSteps() const; }; enum PathFinderResult {PF_UNFINISHED, PF_OK, PF_DEST_OCCUPIED, PF_PART_PATH, PF_NO_WALK}; @@ -158,11 +158,11 @@ public: Common::String getDebugInfo() const; void pop() { _list.erase(_list.begin()); } - WalkingActionEntry &top() { return **_list.begin(); } - bool isEmpty() { return _list.empty(); } + WalkingActionEntry &top() const { return **_list.begin(); } + bool isEmpty() const { return _list.empty(); } int &stepCtr() { return _stepCtr; } - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -279,62 +279,62 @@ public: void setAnimation(uint16 newAnimId); void setAnimationIndex(int animIndex); void setAnimation(HotspotAnimData *newRecord); - uint16 hotspotId() { return _hotspotId; } - uint16 originalId() { return _originalId; } - Surface &frames() { return *_frames; } - HotspotAnimData &anim() { return *_anim; } - HotspotData *resource() { return _data; } - uint16 numFrames() { return _numFrames; } - uint16 frameNumber() { return _frameNumber; } + uint16 hotspotId() const { return _hotspotId; } + uint16 originalId() const { return _originalId; } + Surface &frames() const { return *_frames; } + HotspotAnimData &anim() const { return *_anim; } + HotspotData *resource() const { return _data; } + uint16 numFrames() const { return _numFrames; } + uint16 frameNumber() const { return _frameNumber; } void setFrameNumber(uint16 frameNum) { assert(frameNum < _numFrames); _frameNumber = frameNum; } void incFrameNumber(); - Direction direction() { return _direction; } - uint16 frameWidth() { return _width; } - int16 x() { return _startX; } - int16 y() { return _startY; } - int16 destX() { return _destX; } - int16 destY() { return _destY; } - int8 talkX() { return _talkX; } - int8 talkY() { return _talkY; } - uint16 destHotspotId() { return _destHotspotId; } - uint16 blockedOffset() { return _blockedOffset; } - uint8 exitCtr() { return _exitCtr; } - bool walkFlag() { return _walkFlag; } - uint16 startRoomNumber() { return _startRoomNumber; } - uint16 width() { return _width; } - uint16 height() { return _height; } - uint16 widthCopy() { return _widthCopy; } - uint16 heightCopy() { return _heightCopy; } - uint16 yCorrection() { return _yCorrection; } - uint16 charRectY() { return _charRectY; } - uint16 roomNumber() { return _roomNumber; } - uint16 talkScript() { + Direction direction() const { return _direction; } + uint16 frameWidth() const { return _width; } + int16 x() const { return _startX; } + int16 y() const { return _startY; } + int16 destX() const { return _destX; } + int16 destY() const { return _destY; } + int8 talkX() const { return _talkX; } + int8 talkY() const { return _talkY; } + uint16 destHotspotId() const { return _destHotspotId; } + uint16 blockedOffset() const { return _blockedOffset; } + uint8 exitCtr() const { return _exitCtr; } + bool walkFlag() const { return _walkFlag; } + uint16 startRoomNumber() const { return _startRoomNumber; } + uint16 width() const { return _width; } + uint16 height() const { return _height; } + uint16 widthCopy() const { return _widthCopy; } + uint16 heightCopy() const { return _heightCopy; } + uint16 yCorrection() const { return _yCorrection; } + uint16 charRectY() const { return _charRectY; } + uint16 roomNumber() const { return _roomNumber; } + uint16 talkScript() const { assert(_data); return _data->talkScriptOffset; } - uint16 hotspotScript() { return _hotspotScriptOffset; } - uint8 layer() { return _layer; } - bool skipFlag() { return _skipFlag; } + uint16 hotspotScript() const { return _hotspotScriptOffset; } + uint8 layer() const { return _layer; } + bool skipFlag() const { return _skipFlag; } void setTickProc(uint16 newVal); - bool persistant() { return _persistant; } + bool persistant() const { return _persistant; } void setPersistant(bool value) { _persistant = value; } - uint8 colorOffset() { return _colorOffset; } + uint8 colorOffset() const { return _colorOffset; } void setColorOffset(uint8 value) { _colorOffset = value; } void setRoomNumber(uint16 roomNum) { _roomNumber = roomNum; if (_data) _data->roomNumber = roomNum; } - uint16 nameId(); + uint16 nameId() const; const char *getName(); bool isActiveAnimation(); void setPosition(int16 newX, int16 newY); void setDestPosition(int16 newX, int16 newY) { _destX = newX; _destY = newY; } void setDestHotspot(uint16 id) { _destHotspotId = id; } void setExitCtr(uint8 value) { _exitCtr = value; } - BlockedState blockedState() { + BlockedState blockedState() const { assert(_data); return _data->blockedState; } @@ -342,7 +342,7 @@ public: assert(_data); _data->blockedState = newState; } - bool blockedFlag() { + bool blockedFlag() const { assert(_data); return _data->blockedFlag; } @@ -376,7 +376,7 @@ public: } void setCharRectY(uint16 value) { _charRectY = value; } void setSkipFlag(bool value) { _skipFlag = value; } - CharacterMode characterMode() { + CharacterMode characterMode() const { assert(_data != NULL); return _data->characterMode; } @@ -384,7 +384,7 @@ public: assert(_data != NULL); _data->characterMode = value; } - uint16 delayCtr() { + uint16 delayCtr() const { assert(_data); return _data->delayCtr; } @@ -392,7 +392,7 @@ public: assert(_data); _data->delayCtr = value; } - uint16 pauseCtr() { + uint16 pauseCtr() const { assert(_data); return _data->pauseCtr; } @@ -400,7 +400,7 @@ public: assert(_data); _data->pauseCtr = value; } - VariantBool coveredFlag() { + VariantBool coveredFlag() const { assert(_data); return _data->coveredFlag; } @@ -408,7 +408,7 @@ public: assert(_data); _data->coveredFlag = value; } - uint16 useHotspotId() { + uint16 useHotspotId() const { assert(_data); return _data->useHotspotId; } @@ -416,7 +416,7 @@ public: assert(_data); _data->useHotspotId = value; } - uint16 talkGate() { + uint16 talkGate() const { assert(_data); return _data->talkGate; } @@ -424,7 +424,7 @@ public: assert(_data); _data->talkGate = value; } - uint16 supportValue() { return _supportValue; } + uint16 supportValue() const { return _supportValue; } void setSupportValue(uint16 value) { _supportValue = value; } void copyTo(Surface *dest); @@ -449,16 +449,16 @@ public: void doAction(); void doAction(Action action, HotspotData *hotspot); - CurrentActionStack ¤tActions() { + CurrentActionStack ¤tActions() const { assert(_data); return _data->npcSchedule; } PathFinder &pathFinder() { return _pathFinder; } DestStructure &tempDest() { return _tempDest; } - uint16 frameCtr() { return _frameCtr; } + uint16 frameCtr() const { return _frameCtr; } void setFrameCtr(uint16 value) { _frameCtr = value; } void decrFrameCtr() { if (_frameCtr > 0) --_frameCtr; } - uint8 actionCtr() { + uint8 actionCtr() const { assert(_data); return _data->actionCtr; } @@ -466,7 +466,7 @@ public: assert(_data); _data->actionCtr = v; } - uint8 voiceCtr() { return _voiceCtr; } + uint8 voiceCtr() const { return _voiceCtr; } void setVoiceCtr(uint8 v) { _voiceCtr = v; } // Miscellaneous @@ -477,13 +477,13 @@ public: void scheduleConverse(uint16 destHotspot, uint16 messageId); void handleTalkDialog(); - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; class HotspotList: public Common::List<Common::SharedPtr<Hotspot> > { public: - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; diff --git a/engines/lure/menu.cpp b/engines/lure/menu.cpp index 61de2bf165..5a0dd26cba 100644 --- a/engines/lure/menu.cpp +++ b/engines/lure/menu.cpp @@ -276,11 +276,11 @@ uint16 PopupMenu::ShowInventory() { HotspotDataList::iterator i; for (i = rsc.hotspotData().begin(); i != rsc.hotspotData().end(); ++i) { - HotspotData *hotspot = (*i).get(); - if (hotspot->roomNumber == PLAYER_ID) { - idList[itemCtr] = hotspot->hotspotId; + HotspotData const &hotspot = **i; + if (hotspot.roomNumber == PLAYER_ID) { + idList[itemCtr] = hotspot.hotspotId; char *hotspotName = itemNames[itemCtr++] = (char *) malloc(MAX_HOTSPOT_NAME_SIZE); - strings.getString(hotspot->nameId, hotspotName); + strings.getString(hotspot.nameId, hotspotName); } } @@ -317,52 +317,52 @@ uint16 PopupMenu::ShowItems(Action contextAction, uint16 roomNumber) { // Loop for rooms for (ir = rooms.begin(); ir != rooms.end(); ++ir) { - RoomData *roomData = (*ir).get(); + RoomData const &roomData = **ir; // Pre-condition checks for whether to skip room - if ((roomData->hdrFlags != 15) && ((roomData->hdrFlags & fields.hdrFlagMask()) == 0)) + if ((roomData.hdrFlags != 15) && ((roomData.hdrFlags & fields.hdrFlagMask()) == 0)) continue; - if (((roomData->flags & HOTSPOTFLAG_MENU_EXCLUSION) != 0) || ((roomData->flags & HOTSPOTFLAG_FOUND) == 0)) + if (((roomData.flags & HOTSPOTFLAG_MENU_EXCLUSION) != 0) || ((roomData.flags & HOTSPOTFLAG_FOUND) == 0)) continue; - if ((roomData->actions & contextBitflag) == 0) + if ((roomData.actions & contextBitflag) == 0) continue; // Add room to list of entries to display if (numItems == MAX_NUM_DISPLAY_ITEMS) error("Out of space in ask list"); - entryIds[numItems] = roomData->roomNumber; - nameIds[numItems] = roomData->roomNumber; + entryIds[numItems] = roomData.roomNumber; + nameIds[numItems] = roomData.roomNumber; entryNames[numItems] = (char *) Memory::alloc(MAX_HOTSPOT_NAME_SIZE); - strings.getString(roomData->roomNumber, entryNames[numItems]); + strings.getString(roomData.roomNumber, entryNames[numItems]); ++numItems; } // Loop for hotspots for (ih = hotspots.begin(); ih != hotspots.end(); ++ih) { - HotspotData *hotspot = (*ih).get(); + HotspotData const &hotspot = **ih; - if ((hotspot->headerFlags != 15) && - ((hotspot->headerFlags & fields.hdrFlagMask()) == 0)) + if ((hotspot.headerFlags != 15) && + ((hotspot.headerFlags & fields.hdrFlagMask()) == 0)) continue; - if (((hotspot->flags & HOTSPOTFLAG_MENU_EXCLUSION) != 0) || ((hotspot->flags & HOTSPOTFLAG_FOUND) == 0)) + if (((hotspot.flags & HOTSPOTFLAG_MENU_EXCLUSION) != 0) || ((hotspot.flags & HOTSPOTFLAG_FOUND) == 0)) // Skip the current hotspot continue; // If the hotspot is room specific, skip if the character will not be in the specified room - if (((hotspot->flags & HOTSPOTFLAG_ROOM_SPECIFIC) != 0) && - (hotspot->roomNumber != roomNumber)) + if (((hotspot.flags & HOTSPOTFLAG_ROOM_SPECIFIC) != 0) && + (hotspot.roomNumber != roomNumber)) continue; // If hotspot does not allow action, then skip it - if ((hotspot->actions & contextBitflag) == 0) + if ((hotspot.actions & contextBitflag) == 0) continue; // If a special hotspot Id, then skip displaying - if ((hotspot->nameId == 0x17A) || (hotspot->nameId == 0x147)) + if ((hotspot.nameId == 0x17A) || (hotspot.nameId == 0x147)) continue; // Check if the hotspot's name is already used in an already set item itemCtr = 0; - while ((itemCtr < numItems) && (nameIds[itemCtr] != hotspot->nameId)) + while ((itemCtr < numItems) && (nameIds[itemCtr] != hotspot.nameId)) ++itemCtr; if (itemCtr != numItems) // Item's name is already present - skip hotspot @@ -370,10 +370,10 @@ uint16 PopupMenu::ShowItems(Action contextAction, uint16 roomNumber) { // Add hotspot to list of entries to display if (numItems == MAX_NUM_DISPLAY_ITEMS) error("Out of space in ask list"); - entryIds[numItems] = hotspot->hotspotId; - nameIds[numItems] = hotspot->nameId; + entryIds[numItems] = hotspot.hotspotId; + nameIds[numItems] = hotspot.nameId; entryNames[numItems] = (char *) Memory::alloc(MAX_HOTSPOT_NAME_SIZE); - strings.getString(hotspot->nameId, entryNames[numItems]); + strings.getString(hotspot.nameId, entryNames[numItems]); ++numItems; } diff --git a/engines/lure/res.cpp b/engines/lure/res.cpp index 6328301233..9ec641140b 100644 --- a/engines/lure/res.cpp +++ b/engines/lure/res.cpp @@ -386,7 +386,6 @@ RoomData *Resources::getRoom(uint16 roomNumber) { for (i = _roomData.begin(); i != _roomData.end(); ++i) { RoomData *rec = (*i).get(); if (rec->roomNumber == roomNumber) return rec; - ++rec; } return NULL; @@ -678,9 +677,9 @@ void Resources::deactivateHotspot(uint16 hotspotId, bool isDestId) { HotspotList::iterator i = _activeHotspots.begin(); while (i != _activeHotspots.end()) { - Hotspot *h = (*i).get(); - if ((!isDestId && (h->hotspotId() == hotspotId)) || - (isDestId && (h->destHotspotId() == hotspotId) && (h->hotspotId() == 0xffff))) { + Hotspot const &h = **i; + if ((!isDestId && (h.hotspotId() == hotspotId)) || + (isDestId && (h.destHotspotId() == hotspotId) && (h.hotspotId() == 0xffff))) { _activeHotspots.erase(i); break; } @@ -708,8 +707,7 @@ uint16 Resources::numInventoryItems() { HotspotDataList &list = _hotspotData; HotspotDataList::iterator i; for (i = list.begin(); i != list.end(); ++i) { - HotspotData *rec = (*i).get(); - if (rec->roomNumber == PLAYER_ID) ++numItems; + if ((*i)->roomNumber == PLAYER_ID) ++numItems; } return numItems; @@ -754,12 +752,12 @@ void Resources::saveToStream(Common::WriteStream *stream) { // Save out the schedule for any non-active NPCs HotspotDataList::iterator i; for (i = _hotspotData.begin(); i != _hotspotData.end(); ++i) { - HotspotData *rec = (*i).get(); - if (!rec->npcSchedule.isEmpty()) { - Hotspot *h = getActiveHotspot(rec->hotspotId); + HotspotData const &rec = **i; + if (!rec.npcSchedule.isEmpty()) { + Hotspot *h = getActiveHotspot(rec.hotspotId); if (h == NULL) { - stream->writeUint16LE(rec->hotspotId); - rec->npcSchedule.saveToStream(stream); + stream->writeUint16LE(rec.hotspotId); + rec.npcSchedule.saveToStream(stream); } } } diff --git a/engines/lure/res_struct.cpp b/engines/lure/res_struct.cpp index 222f55b5dc..aee4f11215 100644 --- a/engines/lure/res_struct.cpp +++ b/engines/lure/res_struct.cpp @@ -278,13 +278,11 @@ void RoomPathsData::decompress(RoomPathsDecompressedData &dataOut, int character // Room data class -void RoomDataList::saveToStream(Common::WriteStream *stream) { - RoomDataList::iterator i; - - for (i = begin(); i != end(); ++i) { - RoomData *rec = (*i).get(); - stream->writeByte(rec->flags); - const byte *pathData = rec->paths.data(); +void RoomDataList::saveToStream(Common::WriteStream *stream) const { + for (RoomDataList::const_iterator i = begin(); i != end(); ++i) { + RoomData const &rec = **i; + stream->writeByte(rec.flags); + const byte *pathData = rec.paths.data(); stream->write(pathData, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH); } } @@ -294,10 +292,10 @@ void RoomDataList::loadFromStream(Common::ReadStream *stream) { byte data[ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH]; for (i = begin(); i != end(); ++i) { - RoomData *rec = (*i).get(); - rec->flags = stream->readByte(); + RoomData &rec = **i; + rec.flags = stream->readByte(); stream->read(data, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH); - rec->paths.load(data); + rec.paths.load(data); } } @@ -317,17 +315,17 @@ RoomExitJoinData::RoomExitJoinData(RoomExitJoinResource *rec) { blocked = rec->blocked; } -void RoomExitJoinList::saveToStream(Common::WriteStream *stream) { - for (RoomExitJoinList::iterator i = begin(); i != end(); ++i) { - RoomExitJoinData *rec = (*i).get(); - - stream->writeUint16LE(rec->hotspots[0].hotspotId); - stream->writeUint16LE(rec->hotspots[1].hotspotId); - stream->writeByte(rec->hotspots[0].currentFrame); - stream->writeByte(rec->hotspots[0].destFrame); - stream->writeByte(rec->hotspots[1].currentFrame); - stream->writeByte(rec->hotspots[1].destFrame); - stream->writeByte(rec->blocked); +void RoomExitJoinList::saveToStream(Common::WriteStream *stream) const { + for (RoomExitJoinList::const_iterator i = begin(); i != end(); ++i) { + RoomExitJoinData const &rec = **i; + + stream->writeUint16LE(rec.hotspots[0].hotspotId); + stream->writeUint16LE(rec.hotspots[1].hotspotId); + stream->writeByte(rec.hotspots[0].currentFrame); + stream->writeByte(rec.hotspots[0].destFrame); + stream->writeByte(rec.hotspots[1].currentFrame); + stream->writeByte(rec.hotspots[1].destFrame); + stream->writeByte(rec.blocked); } // Write end of list marker @@ -336,21 +334,21 @@ void RoomExitJoinList::saveToStream(Common::WriteStream *stream) { void RoomExitJoinList::loadFromStream(Common::ReadStream *stream) { for (RoomExitJoinList::iterator i = begin(); i != end(); ++i) { - RoomExitJoinData *rec = (*i).get(); + RoomExitJoinData &rec = **i; uint16 hotspot1Id = stream->readUint16LE(); if (hotspot1Id == 0xffff) error("Invalid room exit join list"); uint16 hotspot2Id = stream->readUint16LE(); - if ((rec->hotspots[0].hotspotId != hotspot1Id) || - (rec->hotspots[1].hotspotId != hotspot2Id)) + if ((rec.hotspots[0].hotspotId != hotspot1Id) || + (rec.hotspots[1].hotspotId != hotspot2Id)) break; - rec->hotspots[0].currentFrame = stream->readByte(); - rec->hotspots[0].destFrame = stream->readByte(); - rec->hotspots[1].currentFrame = stream->readByte(); - rec->hotspots[1].destFrame = stream->readByte(); - rec->blocked = stream->readByte(); + rec.hotspots[0].currentFrame = stream->readByte(); + rec.hotspots[0].destFrame = stream->readByte(); + rec.hotspots[1].currentFrame = stream->readByte(); + rec.hotspots[1].destFrame = stream->readByte(); + rec.blocked = stream->readByte(); } // Read final end of list marker @@ -368,8 +366,8 @@ HotspotActionData::HotspotActionData(HotspotActionResource *rec) { uint16 HotspotActionList::getActionOffset(Action action) { iterator i; for (i = begin(); i != end(); ++i) { - HotspotActionData *rec = (*i).get(); - if (rec->action == action) return rec->sequenceOffset; + HotspotActionData const &rec = **i; + if (rec.action == action) return rec.sequenceOffset; } return 0; @@ -435,7 +433,7 @@ HotspotData::HotspotData(HotspotResource *rec) { npcScheduleId = READ_LE_UINT16(&rec->npcSchedule); } -void HotspotData::saveToStream(Common::WriteStream *stream) { +void HotspotData::saveToStream(Common::WriteStream *stream) const { // Write out the basic fields stream->writeUint16LE(nameId); stream->writeUint16LE(descId); @@ -534,12 +532,11 @@ void HotspotData::loadFromStream(Common::ReadStream *stream) { // Hotspot data list -void HotspotDataList::saveToStream(Common::WriteStream *stream) { - iterator i; - for (i = begin(); i != end(); ++i) { - HotspotData *hotspot = (*i).get(); - stream->writeUint16LE(hotspot->hotspotId); - hotspot->saveToStream(stream); +void HotspotDataList::saveToStream(Common::WriteStream *stream) const { + for (const_iterator i = begin(); i != end(); ++i) { + HotspotData const &hotspot = **i; + stream->writeUint16LE(hotspot.hotspotId); + hotspot.saveToStream(stream); } stream->writeUint16LE(0); } @@ -582,14 +579,14 @@ bool MovementDataList::getFrame(uint16 currentFrame, int16 &xChange, iterator i; for (i = begin(); i != end(); ++i) { - MovementData *rec = (*i).get(); + MovementData const &rec = **i; if (foundFlag || (i == begin())) { - xChange = rec->xChange; - yChange = rec->yChange; - nextFrame = rec->frameNumber; + xChange = rec.xChange; + yChange = rec.yChange; + nextFrame = rec.frameNumber; if (foundFlag) return true; } - if (rec->frameNumber == currentFrame) foundFlag = true; + if (rec.frameNumber == currentFrame) foundFlag = true; } return true; @@ -699,15 +696,12 @@ TalkEntryData *TalkData::getResponse(int index) { // The following class acts as a container for all the NPC conversations -void TalkDataList::saveToStream(Common::WriteStream *stream) { - TalkDataList::iterator i; - for (i = begin(); i != end(); ++i) { - TalkData *rec = (*i).get(); - TalkEntryList::iterator i2; +void TalkDataList::saveToStream(Common::WriteStream *stream) const { + for (TalkDataList::const_iterator i = begin(); i != end(); ++i) { + TalkData const &rec = **i; - for (i2 = rec->entries.begin(); i2 != rec->entries.end(); ++i2) { - TalkEntryData *entry = (*i2).get(); - stream->writeUint16LE(entry->descId); + for (TalkEntryList::const_iterator i2 = rec.entries.begin(); i2 != rec.entries.end(); ++i2) { + stream->writeUint16LE((*i2)->descId); } } } @@ -715,12 +709,10 @@ void TalkDataList::saveToStream(Common::WriteStream *stream) { void TalkDataList::loadFromStream(Common::ReadStream *stream) { TalkDataList::iterator i; for (i = begin(); i != end(); ++i) { - TalkData *rec = (*i).get(); - TalkEntryList::iterator i2; + TalkData const &rec = **i; - for (i2 = rec->entries.begin(); i2 != rec->entries.end(); ++i2) { - TalkEntryData *entry = (*i2).get(); - entry->descId = stream->readUint16LE(); + for (TalkEntryList::const_iterator i2 = rec.entries.begin(); i2 != rec.entries.end(); ++i2) { + (*i2)->descId = stream->readUint16LE(); } } } @@ -785,17 +777,17 @@ void SequenceDelayList::tick() { g_system->getMillis()); for (i = begin(); i != end(); ++i) { - SequenceDelayData *entry = (*i).get(); - debugC(ERROR_DETAILED, kLureDebugScripts, "Delay List check %xh at time %d", entry->sequenceOffset, entry->timeoutCtr); + SequenceDelayData &entry = **i; + debugC(ERROR_DETAILED, kLureDebugScripts, "Delay List check %xh at time %d", entry.sequenceOffset, entry.timeoutCtr); - if (entry->timeoutCtr <= GAME_FRAME_DELAY) { + if (entry.timeoutCtr <= GAME_FRAME_DELAY) { // Timeout reached - delete entry from list and execute the sequence - uint16 seqOffset = entry->sequenceOffset; + uint16 seqOffset = entry.sequenceOffset; erase(i); Script::execute(seqOffset); return; } else { - entry->timeoutCtr -= GAME_FRAME_DELAY; + entry.timeoutCtr -= GAME_FRAME_DELAY; } } } @@ -804,22 +796,19 @@ void SequenceDelayList::clear(bool forceClear) { SequenceDelayList::iterator i = begin(); while (i != end()) { - SequenceDelayData *entry = (*i).get(); - if (entry->canClear || forceClear) + if ((*i)->canClear || forceClear) i = erase(i); else ++i; } } -void SequenceDelayList::saveToStream(Common::WriteStream *stream) { - SequenceDelayList::iterator i; - - for (i = begin(); i != end(); ++i) { - SequenceDelayData *entry = (*i).get(); - stream->writeUint16LE(entry->sequenceOffset); - stream->writeUint32LE(entry->timeoutCtr); - stream->writeByte(entry->canClear); +void SequenceDelayList::saveToStream(Common::WriteStream *stream) const { + for (SequenceDelayList::const_iterator i = begin(); i != end(); ++i) { + SequenceDelayData const &entry = **i; + stream->writeUint16LE(entry.sequenceOffset); + stream->writeUint32LE(entry.timeoutCtr); + stream->writeByte(entry.canClear); } stream->writeUint16LE(0); @@ -1016,7 +1005,7 @@ RandomActionSet *RandomActionList::getRoom(uint16 roomNumber) { return NULL; } -void RandomActionSet::saveToStream(Common::WriteStream *stream) { +void RandomActionSet::saveToStream(Common::WriteStream *stream) const { stream->writeByte(numActions()); for (int actionIndex = 0; actionIndex < _numActions; ++actionIndex) stream->writeByte((byte)_types[actionIndex]); @@ -1030,8 +1019,8 @@ void RandomActionSet::loadFromStream(Common::ReadStream *stream) { } -void RandomActionList::saveToStream(Common::WriteStream *stream) { - for (iterator i = begin(); i != end(); ++i) +void RandomActionList::saveToStream(Common::WriteStream *stream) const { + for (const_iterator i = begin(); i != end(); ++i) (*i)->saveToStream(stream); } @@ -1052,9 +1041,9 @@ RoomExitIndexedHotspotData::RoomExitIndexedHotspotData(RoomExitIndexedHotspotRes uint16 RoomExitIndexedHotspotList::getHotspot(uint16 roomNumber, uint8 hotspotIndexId) { iterator i; for (i = begin(); i != end(); ++i) { - RoomExitIndexedHotspotData *entry = (*i).get(); - if ((entry->roomNumber == roomNumber) && (entry->hotspotIndex == hotspotIndexId)) - return entry->hotspotId; + RoomExitIndexedHotspotData const &entry = **i; + if ((entry.roomNumber == roomNumber) && (entry.hotspotIndex == hotspotIndexId)) + return entry.hotspotId; } // No hotspot @@ -1074,12 +1063,12 @@ PausedCharacter::PausedCharacter(uint16 SrcCharId, uint16 DestCharId) { void PausedCharacterList::reset(uint16 hotspotId) { iterator i; for (i = begin(); i != end(); ++i) { - PausedCharacter *rec = (*i).get(); + PausedCharacter &rec = **i; - if (rec->srcCharId == hotspotId) { - rec->counter = 1; - if (rec->destCharId < START_EXIT_ID) - rec->charHotspot->pauseCtr = 1; + if (rec.srcCharId == hotspotId) { + rec.counter = 1; + if (rec.destCharId < START_EXIT_ID) + rec.charHotspot->pauseCtr = 1; } } } @@ -1088,15 +1077,15 @@ void PausedCharacterList::countdown() { iterator i = begin(); while (i != end()) { - PausedCharacter *rec = (*i).get(); - --rec->counter; + PausedCharacter &rec = **i; + --rec.counter; // Handle reflecting counter to hotspot - if (rec->destCharId < START_EXIT_ID) - rec->charHotspot->pauseCtr = rec->counter + 1; + if (rec.destCharId < START_EXIT_ID) + rec.charHotspot->pauseCtr = rec.counter + 1; // If counter has reached zero, remove entry from list - if (rec->counter == 0) + if (rec.counter == 0) i = erase(i); else ++i; @@ -1109,13 +1098,13 @@ void PausedCharacterList::scan(Hotspot &h) { if (h.blockedState() != BS_NONE) { for (i = begin(); i != end(); ++i) { - PausedCharacter *rec = (*i).get(); + PausedCharacter &rec = **i; - if (rec->srcCharId == h.hotspotId()) { - rec->counter = IDLE_COUNTDOWN_SIZE; + if (rec.srcCharId == h.hotspotId()) { + rec.counter = IDLE_COUNTDOWN_SIZE; - if (rec->destCharId < START_EXIT_ID) - rec->charHotspot->pauseCtr = IDLE_COUNTDOWN_SIZE; + if (rec.destCharId < START_EXIT_ID) + rec.charHotspot->pauseCtr = IDLE_COUNTDOWN_SIZE; } } } @@ -1139,9 +1128,9 @@ int PausedCharacterList::check(uint16 charId, int numImpinging, uint16 *impingin // calling character and the impinging list entry bool foundEntry = false; for (i = res.pausedList().begin(); !foundEntry && (i != res.pausedList().end()); ++i) { - PausedCharacter *rec = (*i).get(); - foundEntry = (rec->srcCharId == charId) && - (rec->destCharId == hotspot->hotspotId()); + PausedCharacter const &rec = **i; + foundEntry = (rec.srcCharId == charId) && + (rec.destCharId == hotspot->hotspotId()); } if (foundEntry) @@ -1196,7 +1185,7 @@ BarEntry &BarmanLists::getDetails(uint16 roomNumber) { error("Invalid room %d specified for barman details retrieval", roomNumber); } -void BarmanLists::saveToStream(Common::WriteStream *stream) { +void BarmanLists::saveToStream(Common::WriteStream *stream) const { for (int index = 0; index < 3; ++index) { uint16 value = (_barList[index].currentCustomer == NULL) ? 0 : (_barList[index].currentCustomer - &_barList[index].customers[0]) / sizeof(BarEntry) + 1; @@ -1296,7 +1285,7 @@ void ValueTableData::setField(FieldName fieldName, uint16 value) { setField((uint16) fieldName, value); } -void ValueTableData::saveToStream(Common::WriteStream *stream) { +void ValueTableData::saveToStream(Common::WriteStream *stream) const { // Write out the special fields stream->writeUint16LE(_numGroats); stream->writeSint16LE(_playerNewPos.position.x); @@ -1371,7 +1360,7 @@ void CurrentActionEntry::setSupportData(uint16 entryId) { setSupportData(newEntry); } -void CurrentActionEntry::saveToStream(Common::WriteStream *stream) { +void CurrentActionEntry::saveToStream(Common::WriteStream *stream) const { debugC(ERROR_DETAILED, kLureDebugAnimations, "Saving hotspot action entry dyn=%d id=%d", hasSupportData(), hasSupportData() ? supportData().id() : 0); stream->writeByte((uint8) _action); @@ -1443,11 +1432,11 @@ Common::String CurrentActionStack::getDebugInfo() const { buffer += Common::String::format("CurrentActionStack::list num_actions=%d\n", size()); for (i = _actions.begin(); i != _actions.end(); ++i) { - CurrentActionEntry *entry = (*i).get(); - buffer += Common::String::format("style=%d room#=%d", entry->action(), entry->roomNumber()); + CurrentActionEntry const &entry = **i; + buffer += Common::String::format("style=%d room#=%d", entry.action(), entry.roomNumber()); - if (entry->hasSupportData()) { - CharacterScheduleEntry &rec = entry->supportData(); + if (entry.hasSupportData()) { + CharacterScheduleEntry &rec = entry.supportData(); buffer += Common::String::format(", action=%d params=", rec.action()); @@ -1466,16 +1455,13 @@ Common::String CurrentActionStack::getDebugInfo() const { return buffer; } -void CurrentActionStack::saveToStream(Common::WriteStream *stream) { - ActionsList::iterator i; - +void CurrentActionStack::saveToStream(Common::WriteStream *stream) const { debugC(ERROR_DETAILED, kLureDebugAnimations, "Saving hotspot action stack"); Common::String buffer = getDebugInfo(); debugC(ERROR_DETAILED, kLureDebugAnimations, "%s", buffer.c_str()); - for (i = _actions.begin(); i != _actions.end(); ++i) { - CurrentActionEntry *rec = (*i).get(); - rec->saveToStream(stream); + for (ActionsList::const_iterator i = _actions.begin(); i != _actions.end(); ++i) { + (*i)->saveToStream(stream); } stream->writeByte(0xff); // End of list marker debugC(ERROR_DETAILED, kLureDebugAnimations, "Finished saving hotspot action stack"); diff --git a/engines/lure/res_struct.h b/engines/lure/res_struct.h index 8d6c557297..a4d2f76cec 100644 --- a/engines/lure/res_struct.h +++ b/engines/lure/res_struct.h @@ -300,7 +300,7 @@ public: void load(byte *srcData) { memcpy(_data, srcData, ROOM_PATHS_SIZE); } - const byte *data() { return _data; } + const byte *data() const { return _data; } bool isOccupied(int x, int y); bool isOccupied(int x, int y, int width); void setOccupied(int x, int y, int width); @@ -334,7 +334,7 @@ public: class RoomDataList: public Common::List<Common::SharedPtr<RoomData> > { public: - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -357,7 +357,7 @@ public: class RoomExitJoinList: public Common::List<Common::SharedPtr<RoomExitJoinData> > { public: - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -433,13 +433,13 @@ public: if (_dynamicSupportData) delete _supportData; } - CurrentAction action() { return _action; } - CharacterScheduleEntry &supportData() { + CurrentAction action() const { return _action; } + CharacterScheduleEntry &supportData() const { if (!_supportData) error("Access made to non-defined action support record"); return *_supportData; } - bool hasSupportData() { return _supportData != NULL; } - uint16 roomNumber() { return _roomNumber; } + bool hasSupportData() const { return _supportData != NULL; } + uint16 roomNumber() const { return _roomNumber; } void setAction(CurrentAction newAction) { _action = newAction; } void setRoomNumber(uint16 roomNum) { _roomNumber = roomNum; } void setSupportData(CharacterScheduleEntry *newRec) { @@ -452,7 +452,7 @@ public: } void setSupportData(uint16 entryId); - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; static CurrentActionEntry *loadFromStream(Common::ReadStream *stream); }; @@ -505,7 +505,7 @@ public: validateStack(); } - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); void copyFrom(CurrentActionStack &stack); }; @@ -569,13 +569,13 @@ public: void enable() { flags |= 0x80; } void disable() { flags &= 0x7F; } Direction nonVisualDirection() { return (Direction) scriptLoadFlag; } - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; class HotspotDataList: public Common::List<Common::SharedPtr<HotspotData> > { public: - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -663,7 +663,7 @@ public: class TalkDataList: public Common::List<Common::SharedPtr<TalkData> > { public: - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -722,7 +722,7 @@ public: void tick(); void clear(bool forceClear = false); - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -760,8 +760,8 @@ public: RandomActionSet(uint16 *&offset); ~RandomActionSet(); - uint16 roomNumber() { return _roomNumber; } - int numActions() { return _numActions; } + uint16 roomNumber() const { return _roomNumber; } + int numActions() const { return _numActions; } void getEntry(int index, RandomActionType &actionType, uint16 &id) { assert((index >= 0) && (index < _numActions)); actionType = _types[index]; @@ -772,14 +772,14 @@ public: assert(_types[index] == REPEAT_ONCE); _types[index] = REPEAT_ONCE_DONE; } - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; class RandomActionList: public Common::List<Common::SharedPtr<RandomActionSet> > { public: RandomActionSet *getRoom(uint16 roomNumber); - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -828,7 +828,7 @@ public: void reset(); BarEntry &getDetails(uint16 roomNumber); - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; @@ -923,7 +923,7 @@ public: uint8 &hdrFlagMask() { return _hdrFlagMask; } PlayerNewPosition &playerNewPos() { return _playerNewPos; } - void saveToStream(Common::WriteStream *stream); + void saveToStream(Common::WriteStream *stream) const; void loadFromStream(Common::ReadStream *stream); }; diff --git a/engines/lure/room.cpp b/engines/lure/room.cpp index 219ed0263d..9a9313ece9 100644 --- a/engines/lure/room.cpp +++ b/engines/lure/room.cpp @@ -138,8 +138,8 @@ void Room::leaveRoom() { HotspotList &list = r.activeHotspots(); HotspotList::iterator i = list.begin(); while (i != list.end()) { - Hotspot *h = (i.operator*()).get(); - if (!h->persistant()) { + Hotspot const &h = **i; + if (!h.persistant()) { i = list.erase(i); } else { ++i; @@ -153,11 +153,11 @@ void Room::loadRoomHotspots() { HotspotDataList::iterator i; for (i = list.begin(); i != list.end(); ++i) { - HotspotData *rec = (*i).get(); + HotspotData const &rec = **i; - if ((rec->hotspotId < 0x7530) && (rec->roomNumber == _roomNumber) && - (rec->layer != 0)) - r.activateHotspot(rec->hotspotId); + if ((rec.hotspotId < 0x7530) && (rec.roomNumber == _roomNumber) && + (rec.layer != 0)) + r.activateHotspot(rec.hotspotId); } } @@ -252,24 +252,24 @@ CursorType Room::checkRoomExits() { RoomExitHotspotList::iterator i; for (i = exits.begin(); i != exits.end(); ++i) { - RoomExitHotspotData *rec = (*i).get(); + RoomExitHotspotData const &rec = **i; skipFlag = false; - if (rec->hotspotId != 0) { - join = res.getExitJoin(rec->hotspotId); + if (rec.hotspotId != 0) { + join = res.getExitJoin(rec.hotspotId); if ((join) && (join->blocked != 0)) skipFlag = true; } - if (!skipFlag && (m.x() >= rec->xs) && (m.x() <= rec->xe) && - (m.y() >= rec->ys) && (m.y() <= rec->ye)) { + if (!skipFlag && (m.x() >= rec.xs) && (m.x() <= rec.xe) && + (m.y() >= rec.ys) && (m.y() <= rec.ye)) { // Cursor is within exit area - CursorType cursorNum = (CursorType)rec->cursorNum; - _destRoomNumber = rec->destRoomNumber; + CursorType cursorNum = (CursorType)rec.cursorNum; + _destRoomNumber = rec.destRoomNumber; // If it's a hotspotted exit, change arrow to the + arrow - if (rec->hotspotId != 0) { - _hotspotId = rec->hotspotId; + if (rec.hotspotId != 0) { + _hotspotId = rec.hotspotId; _hotspot = res.getHotspot(_hotspotId); _hotspotNameId = _hotspot->nameId; _isExit = true; @@ -437,7 +437,7 @@ void Room::update() { // Handle first layer (layer 3) for (i = hotspots.begin(); i != hotspots.end(); ++i) { - Hotspot &h = *i.operator*(); + Hotspot &h = **i; if ((h.roomNumber() == _roomNumber) && h.isActiveAnimation() && (h.layer() == 3)) { addAnimation(h); @@ -449,28 +449,28 @@ void Room::update() { Common::List<Hotspot *> tempList; Common::List<Hotspot *>::iterator iTemp; for (i = hotspots.begin(); i != hotspots.end(); ++i) { - Hotspot *h = (i.operator*()).get(); + Hotspot *h = i->get(); if ((h->layer() != 1) || (h->roomNumber() != _roomNumber) || h->skipFlag() || !h->isActiveAnimation()) continue; int16 endY = h->y() + h->heightCopy(); for (iTemp = tempList.begin(); iTemp != tempList.end(); ++iTemp) { - Hotspot *hTemp = iTemp.operator*(); + Hotspot *hTemp = *iTemp; int16 tempY = hTemp->y() + hTemp->heightCopy(); if (endY < tempY) break; } tempList.insert(iTemp, h); } for (iTemp = tempList.begin(); iTemp != tempList.end(); ++iTemp) { - Hotspot &h = *iTemp.operator*(); + Hotspot &h = **iTemp; addAnimation(h); addLayers(h); } // Handle third layer (layer 2) for (i = hotspots.begin(); i != hotspots.end(); ++i) { - Hotspot &h = *i.operator*(); + Hotspot &h = **i; if ((h.roomNumber() == _roomNumber) && h.isActiveAnimation() && (h.layer() == 2)) { addAnimation(h); diff --git a/engines/lure/sound.cpp b/engines/lure/sound.cpp index bf0abdea07..298483bed8 100644 --- a/engines/lure/sound.cpp +++ b/engines/lure/sound.cpp @@ -107,8 +107,7 @@ void SoundManager::saveToStream(Common::WriteStream *stream) { SoundListIterator i; for (i = _activeSounds.begin(); i != _activeSounds.end(); ++i) { - SoundDescResource *rec = (*i).get(); - stream->writeByte(rec->soundNumber); + stream->writeByte((*i)->soundNumber); } stream->writeByte(0xff); } @@ -335,14 +334,14 @@ void SoundManager::tidySounds() { SoundListIterator i = _activeSounds.begin(); while (i != _activeSounds.end()) { - SoundDescResource *rec = (*i).get(); + SoundDescResource const &rec = **i; - if (musicInterface_CheckPlaying(rec->soundNumber)) + if (musicInterface_CheckPlaying(rec.soundNumber)) // Still playing, so move to next entry ++i; else { // Mark the channels that it used as now being free - Common::fill(_channelsInUse+rec->channel, _channelsInUse+rec->channel+rec->numChannels, false); + Common::fill(_channelsInUse + rec.channel, _channelsInUse + rec.channel + rec.numChannels, false); i = _activeSounds.erase(i); } @@ -356,10 +355,10 @@ void SoundManager::removeSounds() { SoundListIterator i = _activeSounds.begin(); while (i != _activeSounds.end()) { - SoundDescResource *rec = (*i).get(); + SoundDescResource const &rec = **i; - if ((rec->flags & SF_IN_USE) != 0) - musicInterface_Stop(rec->soundNumber); + if ((rec.flags & SF_IN_USE) != 0) + musicInterface_Stop(rec.soundNumber); ++i; } @@ -370,13 +369,13 @@ void SoundManager::restoreSounds() { SoundListIterator i = _activeSounds.begin(); while (i != _activeSounds.end()) { - SoundDescResource *rec = (*i).get(); + SoundDescResource const &rec = **i; - if ((rec->numChannels != 0) && ((rec->flags & SF_RESTORE) != 0)) { - Common::fill(_channelsInUse+rec->channel, _channelsInUse+rec->channel+rec->numChannels, true); + if ((rec.numChannels != 0) && ((rec.flags & SF_RESTORE) != 0)) { + Common::fill(_channelsInUse + rec.channel, _channelsInUse + rec.channel + rec.numChannels, true); - musicInterface_Play(rec->soundNumber, rec->channel, rec->numChannels); - musicInterface_SetVolume(rec->channel, rec->volume); + musicInterface_Play(rec.soundNumber, rec.channel, rec.numChannels); + musicInterface_SetVolume(rec.channel, rec.volume); } ++i; @@ -397,10 +396,10 @@ void SoundManager::fadeOut() { g_system->lockMutex(_soundMutex); MusicListIterator i; for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) { - MidiMusic *music = (*i).get(); - if (music->getVolume() > 0) { + MidiMusic &music = **i; + if (music.getVolume() > 0) { inProgress = true; - music->setVolume(music->getVolume() >= 10 ? (music->getVolume() - 10) : 0); + music.setVolume(music.getVolume() >= 10 ? music.getVolume() - 10 : 0); } } @@ -468,8 +467,7 @@ void SoundManager::musicInterface_Stop(uint8 soundNumber) { g_system->lockMutex(_soundMutex); MusicListIterator i; for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) { - MidiMusic *music = (*i).get(); - if (music->soundNumber() == soundNum) { + if ((*i)->soundNumber() == soundNum) { _playingSounds.erase(i); break; } @@ -489,8 +487,7 @@ bool SoundManager::musicInterface_CheckPlaying(uint8 soundNumber) { g_system->lockMutex(_soundMutex); MusicListIterator i; for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) { - MidiMusic *music = (*i).get(); - if (music->soundNumber() == soundNum) { + if ((*i)->soundNumber() == soundNum) { result = true; break; } @@ -511,9 +508,9 @@ void SoundManager::musicInterface_SetVolume(uint8 channelNum, uint8 volume) { g_system->lockMutex(_soundMutex); MusicListIterator i; for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) { - MidiMusic *music = (*i).get(); - if (music->channelNumber() == channelNum) - music->setVolume(volume); + MidiMusic &music = **i; + if (music.channelNumber() == channelNum) + music.setVolume(volume); } g_system->unlockMutex(_soundMutex); } @@ -528,8 +525,7 @@ void SoundManager::musicInterface_KillAll() { g_system->lockMutex(_soundMutex); MusicListIterator i; for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) { - MidiMusic *music = (*i).get(); - music->stopMusic(); + (*i)->stopMusic(); } _playingSounds.clear(); @@ -561,8 +557,7 @@ void SoundManager::musicInterface_TidySounds() { g_system->lockMutex(_soundMutex); MusicListIterator i = _playingSounds.begin(); while (i != _playingSounds.end()) { - MidiMusic *music = (*i).get(); - if (!music->isPlaying()) + if (!(*i)->isPlaying()) i = _playingSounds.erase(i); else ++i; @@ -583,9 +578,9 @@ void SoundManager::doTimer() { MusicListIterator i; for (i = _playingSounds.begin(); i != _playingSounds.end(); ++i) { - MidiMusic *music = (*i).get(); - if (music->isPlaying()) - music->onTimer(); + MidiMusic &music = **i; + if (music.isPlaying()) + music.onTimer(); } g_system->unlockMutex(_soundMutex); diff --git a/engines/lure/surface.cpp b/engines/lure/surface.cpp index bfada8fde6..4d63647af5 100644 --- a/engines/lure/surface.cpp +++ b/engines/lure/surface.cpp @@ -1329,8 +1329,8 @@ bool CopyProtectionDialog::show() { ++hotspot6; // Add wording header and display screen - (hotspot2->get())->setFrameNumber(1); - (hotspot2->get())->copyTo(&screen.screen()); + (*hotspot2)->setFrameNumber(1); + (*hotspot2)->copyTo(&screen.screen()); screen.update(); screen.setPalette(&p); @@ -1340,8 +1340,8 @@ bool CopyProtectionDialog::show() { } while (!events.interruptableDelay(100)); // Change title text to selection - (hotspot2->get())->setFrameNumber(0); - (hotspot2->get())->copyTo(&screen.screen()); + (*hotspot2)->setFrameNumber(0); + (*hotspot2)->copyTo(&screen.screen()); screen.update(); // Clear any prior try @@ -1356,8 +1356,8 @@ bool CopyProtectionDialog::show() { HotspotsList::iterator tmpHotspot = _hotspots.begin(); for (int i = 0; i < _charIndex + 3; i++) ++tmpHotspot; - (tmpHotspot->get())->setFrameNumber(10); // Blank space - (tmpHotspot->get())->copyTo(&screen.screen()); + (*tmpHotspot)->setFrameNumber(10); // Blank space + (*tmpHotspot)->copyTo(&screen.screen()); screen.update(); } else if ((events.event().kbd.keycode >= Common::KEYCODE_0) && @@ -1366,8 +1366,8 @@ bool CopyProtectionDialog::show() { for (int i = 0; i < _charIndex + 3; i++) ++tmpHotspot; // Number pressed - (tmpHotspot->get())->setFrameNumber(events.event().kbd.ascii - '0'); - (tmpHotspot->get())->copyTo(&screen.screen()); + (*tmpHotspot)->setFrameNumber(events.event().kbd.ascii - '0'); + (*tmpHotspot)->copyTo(&screen.screen()); ++_charIndex; } @@ -1385,11 +1385,11 @@ bool CopyProtectionDialog::show() { return false; // At this point, two page numbers have been entered - validate them - int page1 = ((hotspot3->get())->frameNumber() * 10) + (hotspot4->get())->frameNumber(); - int page2 = ((hotspot5->get())->frameNumber() * 10) + (hotspot6->get())->frameNumber(); + int page1 = ((*hotspot3)->frameNumber() * 10) + (*hotspot4)->frameNumber(); + int page2 = ((*hotspot5)->frameNumber() * 10) + (*hotspot6)->frameNumber(); - if ((page1 == pageNumbers[(hotspot0->get())->frameNumber()]) && - (page2 == pageNumbers[(hotspot1->get())->frameNumber()])) + if ((page1 == pageNumbers[(*hotspot0)->frameNumber()]) && + (page2 == pageNumbers[(*hotspot1)->frameNumber()])) return true; } @@ -1404,11 +1404,11 @@ void CopyProtectionDialog::chooseCharacters() { int char2 = rnd.getRandomNumber(19); HotspotsList::iterator curHotspot = _hotspots.begin(); - (curHotspot->get())->setFrameNumber(char1); - (curHotspot->get())->copyTo(&screen.screen()); + (*curHotspot)->setFrameNumber(char1); + (*curHotspot)->copyTo(&screen.screen()); ++curHotspot; - (curHotspot->get())->setFrameNumber(char2); - (curHotspot->get())->copyTo(&screen.screen()); + (*curHotspot)->setFrameNumber(char2); + (*curHotspot)->copyTo(&screen.screen()); screen.update(); } diff --git a/engines/mohawk/detection_tables.h b/engines/mohawk/detection_tables.h index 08df0a2cbe..5acc1bb179 100644 --- a/engines/mohawk/detection_tables.h +++ b/engines/mohawk/detection_tables.h @@ -376,7 +376,7 @@ static const MohawkGameDescription gameDescriptions[] = { Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, - GUIO1(GUIO_NOASPECT) + GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD) }, GType_RIVEN, GF_DEMO, diff --git a/engines/mohawk/myst_areas.cpp b/engines/mohawk/myst_areas.cpp index fe33ceaa9b..a54b67bef4 100644 --- a/engines/mohawk/myst_areas.cpp +++ b/engines/mohawk/myst_areas.cpp @@ -134,7 +134,7 @@ const Common::String MystResourceType5::describe() { desc += " ops:"; for (uint i = 0; i < _script->size(); i++) - desc += " " + _vm->_scriptParser->getOpcodeDesc(_script->operator[](i).opcode); + desc += " " + _vm->_scriptParser->getOpcodeDesc((*_script)[i].opcode); } return desc; diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp index b9353312c7..107a8b03e9 100644 --- a/engines/mohawk/myst_scripts.cpp +++ b/engines/mohawk/myst_scripts.cpp @@ -161,7 +161,7 @@ void MystScriptParser::runScript(MystScript script, MystResource *invokingResour _vm->_gfx->enableDrawingTimeSimulation(true); for (uint16 i = 0; i < script->size(); i++) { - MystScriptEntry &entry = script->operator[](i); + MystScriptEntry &entry = (*script)[i]; debugC(kDebugScript, "\tOpcode %d: %d", i, entry.opcode); if (entry.type == kMystScriptNormal) @@ -207,7 +207,7 @@ MystScript MystScriptParser::readScript(Common::SeekableReadStream *stream, Myst script->resize(opcodeCount); for (uint16 i = 0; i < opcodeCount; i++) { - MystScriptEntry &entry = script->operator[](i); + MystScriptEntry &entry = (*script)[i]; entry.type = type; // Resource ID only exists in INIT and EXIT scripts diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp index 38b38d2c56..95a8313536 100644 --- a/engines/mohawk/riven.cpp +++ b/engines/mohawk/riven.cpp @@ -171,7 +171,7 @@ Common::Error MohawkEngine_Riven::run() { error ("Could not find saved game"); // Attempt to load the game. On failure, just send us to the main menu. - if (!_saveLoad->loadGame(savedGamesList[gameToLoad])) { + if (_saveLoad->loadGame(savedGamesList[gameToLoad]).getCode() != Common::kNoError) { changeToStack(aspit); changeToCard(1); } @@ -729,7 +729,7 @@ void MohawkEngine_Riven::runLoadDialog() { } Common::Error MohawkEngine_Riven::loadGameState(int slot) { - return _saveLoad->loadGame(_saveLoad->generateSaveGameList()[slot]) ? Common::kNoError : Common::kUnknownError; + return _saveLoad->loadGame(_saveLoad->generateSaveGameList()[slot]); } Common::Error MohawkEngine_Riven::saveGameState(int slot, const Common::String &desc) { @@ -738,7 +738,7 @@ Common::Error MohawkEngine_Riven::saveGameState(int slot, const Common::String & if ((uint)slot < saveList.size()) _saveLoad->deleteSave(saveList[slot]); - return _saveLoad->saveGame(Common::String(desc)) ? Common::kNoError : Common::kUnknownError; + return _saveLoad->saveGame(desc); } Common::String MohawkEngine_Riven::getStackName(uint16 stack) const { diff --git a/engines/mohawk/riven.h b/engines/mohawk/riven.h index e99a9f78fc..961d85d61a 100644 --- a/engines/mohawk/riven.h +++ b/engines/mohawk/riven.h @@ -130,8 +130,8 @@ public: GUI::Debugger *getDebugger(); - bool canLoadGameStateCurrently() { return true; } - bool canSaveGameStateCurrently() { return true; } + bool canLoadGameStateCurrently() { return !(getFeatures() & GF_DEMO); } + bool canSaveGameStateCurrently() { return !(getFeatures() & GF_DEMO); } Common::Error loadGameState(int slot); Common::Error saveGameState(int slot, const Common::String &desc); bool hasFeature(EngineFeature f) const; diff --git a/engines/mohawk/riven_saveload.cpp b/engines/mohawk/riven_saveload.cpp index 18c13ec12b..f5bf7782d4 100644 --- a/engines/mohawk/riven_saveload.cpp +++ b/engines/mohawk/riven_saveload.cpp @@ -88,13 +88,13 @@ static uint16 mapNewStackIDToOld(uint16 newID) { return 0; } -bool RivenSaveLoad::loadGame(Common::String filename) { +Common::Error RivenSaveLoad::loadGame(Common::String filename) { if (_vm->getFeatures() & GF_DEMO) // Don't load games in the demo - return false; + return Common::kNoError; Common::InSaveFile *loadFile = _saveFileMan->openForLoading(filename); if (!loadFile) - return false; + return Common::kReadingFailed; debug(0, "Loading game from \'%s\'", filename.c_str()); @@ -103,7 +103,7 @@ bool RivenSaveLoad::loadGame(Common::String filename) { if (!mhk->openStream(loadFile)) { warning("Save file is not a Mohawk archive"); delete mhk; - return false; + return Common::Error(Common::kUnknownError, "Invalid save file"); } // First, let's make sure we're using a saved game file from this version of Riven by checking the VERS resource @@ -114,7 +114,7 @@ bool RivenSaveLoad::loadGame(Common::String filename) { || (saveGameVersion == kDVDSaveGameVersion && !(_vm->getFeatures() & GF_DVD))) { warning("Incompatible saved game versions. No support for this yet"); delete mhk; - return false; + return Common::Error(Common::kUnknownError, "Incompatible save version"); } // Now, we'll read in the variable values. @@ -206,7 +206,7 @@ bool RivenSaveLoad::loadGame(Common::String filename) { delete zips; delete mhk; - return true; + return Common::kNoError; } Common::MemoryWriteStreamDynamic *RivenSaveLoad::genVERSSection() { @@ -273,7 +273,7 @@ Common::MemoryWriteStreamDynamic *RivenSaveLoad::genZIPSSection() { return stream; } -bool RivenSaveLoad::saveGame(Common::String filename) { +Common::Error RivenSaveLoad::saveGame(Common::String filename) { // NOTE: This code is designed to only output a Mohawk archive // for a Riven saved game. It's hardcoded to do this because // (as of right now) this is the only place in the engine @@ -295,7 +295,7 @@ bool RivenSaveLoad::saveGame(Common::String filename) { Common::OutSaveFile *saveFile = _saveFileMan->openForSaving(filename); if (!saveFile) - return false; + return Common::kWritingFailed; debug (0, "Saving game to \'%s\'", filename.c_str()); @@ -418,7 +418,7 @@ bool RivenSaveLoad::saveGame(Common::String filename) { delete varsSection; delete zipsSection; - return true; + return Common::kNoError; } void RivenSaveLoad::deleteSave(Common::String saveName) { diff --git a/engines/mohawk/riven_saveload.h b/engines/mohawk/riven_saveload.h index c1b3fc639e..37b73c26c6 100644 --- a/engines/mohawk/riven_saveload.h +++ b/engines/mohawk/riven_saveload.h @@ -42,8 +42,8 @@ public: ~RivenSaveLoad(); Common::StringArray generateSaveGameList(); - bool loadGame(Common::String); - bool saveGame(Common::String); + Common::Error loadGame(Common::String); + Common::Error saveGame(Common::String); void deleteSave(Common::String); private: diff --git a/engines/parallaction/objects.h b/engines/parallaction/objects.h index 387e7af088..81761b2c6b 100644 --- a/engines/parallaction/objects.h +++ b/engines/parallaction/objects.h @@ -377,12 +377,12 @@ public: int16 getValue() const { assert(_accessor); - return _accessor->operator()(); + return (*_accessor)(); } void setValue(int16 value) { assert(_mutator); - _mutator->operator()(value); + (*_mutator)(value); } }; diff --git a/engines/saga/actor_path.cpp b/engines/saga/actor_path.cpp index 3e10aba6b6..0fb072b201 100644 --- a/engines/saga/actor_path.cpp +++ b/engines/saga/actor_path.cpp @@ -223,7 +223,6 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be int currentRating; Point bestPath; int pointCounter; - int startDirection; const PathDirectionData *samplePathDirection; Point nextPoint; int directionCount; @@ -235,7 +234,7 @@ int Actor::fillPathArray(const Point &fromPoint, const Point &toPoint, Point &be bestRating = quickDistance(fromPoint, toPoint, compressX); bestPath = fromPoint; - for (startDirection = 0; startDirection < 4; startDirection++) { + for (int8 startDirection = 0; startDirection < 4; startDirection++) { PathDirectionData tmp = { startDirection, fromPoint.x, fromPoint.y }; pathDirectionQueue.push_back(tmp); } diff --git a/engines/saga/sndres.cpp b/engines/saga/sndres.cpp index 5a97eb6019..71044034d7 100644 --- a/engines/saga/sndres.cpp +++ b/engines/saga/sndres.cpp @@ -104,9 +104,6 @@ SndRes::SndRes(SagaEngine *vm) : _vm(vm), _sfxContext(NULL), _voiceContext(NULL) } } -SndRes::~SndRes() { -} - void SndRes::setVoiceBank(int serial) { Common::File *file; if (_voiceSerial == serial) diff --git a/engines/saga/sndres.h b/engines/saga/sndres.h index 979c0288f6..bc38bed431 100644 --- a/engines/saga/sndres.h +++ b/engines/saga/sndres.h @@ -39,7 +39,6 @@ class SndRes { public: SndRes(SagaEngine *vm); - ~SndRes(); void playSound(uint32 resourceId, int volume, bool loop); void playVoice(uint32 resourceId); diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 63eda1c348..2047f58c8b 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -1421,6 +1421,15 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformPC, 0, GUIO1(GUIO_NOSPEECH) }, + // King's Quest 6 - French DOS Floppy (supplied by misterhands in bug #3503425) + // SCI interpreter version ??? + {"kq6", "", { + {"resource.map", 0, "a362063318eebe7d6423b1d9dc6213e1", 8703}, + {"resource.000", 0, "f2b7f753992c56a0c7a08d6a5077c895", 7863324}, + {"resource.msg", 0, "adc2aa8adbdcc97507d44a6f492fbd77", 265194}, + AD_LISTEND}, + Common::FR_FRA, Common::kPlatformPC, 0, GUIO1(GUIO_NOSPEECH) }, + // King's Quest 6 - German DOS Floppy (supplied by markcoolio in bug report #2727156) // SCI interpreter version 1.001.054 {"kq6", "", { diff --git a/engines/sci/engine/kmenu.cpp b/engines/sci/engine/kmenu.cpp index 02aa1d3ece..05ba7005d7 100644 --- a/engines/sci/engine/kmenu.cpp +++ b/engines/sci/engine/kmenu.cpp @@ -94,7 +94,7 @@ reg_t kDrawMenuBar(EngineState *s, int argc, reg_t *argv) { reg_t kMenuSelect(EngineState *s, int argc, reg_t *argv) { reg_t eventObject = argv[0]; - bool pauseSound = argc > 1 ? (argv[1].isNull() ? false : true) : true; + bool pauseSound = argc <= 1 || !argv[1].isNull(); return g_sci->_gfxMenu->kernelSelect(eventObject, pauseSound); } diff --git a/engines/sci/graphics/controls16.cpp b/engines/sci/graphics/controls16.cpp index ab54e468d1..7c09969717 100644 --- a/engines/sci/graphics/controls16.cpp +++ b/engines/sci/graphics/controls16.cpp @@ -297,7 +297,7 @@ void GfxControls16::kernelDrawButton(Common::Rect rect, reg_t obj, const char *t _paint16->eraseRect(rect); _paint16->frameRect(rect); rect.grow(-2); - _ports->textGreyedOutput(style & 1 ? false : true); + _ports->textGreyedOutput(!(style & SCI_CONTROLS_STYLE_ENABLED)); _text16->Box(text, false, rect, SCI_TEXT16_ALIGNMENT_CENTER, fontId); _ports->textGreyedOutput(false); rect.grow(1); diff --git a/engines/sci/graphics/menu.cpp b/engines/sci/graphics/menu.cpp index 673729784f..47f34cf99d 100644 --- a/engines/sci/graphics/menu.cpp +++ b/engines/sci/graphics/menu.cpp @@ -286,7 +286,7 @@ void GfxMenu::kernelSetAttribute(uint16 menuId, uint16 itemId, uint16 attributeI switch (attributeId) { case SCI_MENU_ATTRIBUTE_ENABLED: - itemEntry->enabled = value.isNull() ? false : true; + itemEntry->enabled = !value.isNull(); break; case SCI_MENU_ATTRIBUTE_SAID: itemEntry->saidVmPtr = value; @@ -606,7 +606,7 @@ void GfxMenu::drawMenu(uint16 oldMenuId, uint16 newMenuId) { listItemEntry = *listItemIterator; if (listItemEntry->menuId == newMenuId) { if (!listItemEntry->separatorLine) { - _ports->textGreyedOutput(listItemEntry->enabled ? false : true); + _ports->textGreyedOutput(!listItemEntry->enabled); _ports->moveTo(_menuRect.left, topPos); _text16->DrawString(listItemEntry->textSplit.c_str()); _ports->moveTo(_menuRect.right - listItemEntry->textRightAlignedWidth - 5, topPos); diff --git a/engines/sci/graphics/paint16.cpp b/engines/sci/graphics/paint16.cpp index 23177dfc7b..c951f3349d 100644 --- a/engines/sci/graphics/paint16.cpp +++ b/engines/sci/graphics/paint16.cpp @@ -513,7 +513,7 @@ reg_t GfxPaint16::kernelDisplay(const char *text, int argc, reg_t *argv) { argc--; argv++; break; case SCI_DISPLAY_SETGREYEDOUTPUT: - _ports->textGreyedOutput(argv[0].isNull() ? false : true); + _ports->textGreyedOutput(!argv[0].isNull()); argc--; argv++; break; case SCI_DISPLAY_SETFONT: diff --git a/engines/scumm/gfx_towns.cpp b/engines/scumm/gfx_towns.cpp index 8bffcab4a0..f86a4e56d5 100644 --- a/engines/scumm/gfx_towns.cpp +++ b/engines/scumm/gfx_towns.cpp @@ -271,7 +271,7 @@ void TownsScreen::setupLayer(int layer, int width, int height, int numCol, void l->enabled = true; _layers[0].onBottom = true; - _layers[1].onBottom = _layers[0].enabled ? false : true; + _layers[1].onBottom = !_layers[0].enabled; l->ready = true; } @@ -424,7 +424,7 @@ void TownsScreen::toggleLayers(int flag) { _layers[0].enabled = (flag & 1) ? true : false; _layers[0].onBottom = true; _layers[1].enabled = (flag & 2) ? true : false; - _layers[1].onBottom = _layers[0].enabled ? false : true; + _layers[1].onBottom = !_layers[0].enabled; _dirtyRects.clear(); _dirtyRects.push_back(Common::Rect(_width - 1, _height - 1)); diff --git a/engines/sword25/kernel/inputpersistenceblock.cpp b/engines/sword25/kernel/inputpersistenceblock.cpp index cdce539c31..0fe5d88b80 100644 --- a/engines/sword25/kernel/inputpersistenceblock.cpp +++ b/engines/sword25/kernel/inputpersistenceblock.cpp @@ -86,7 +86,7 @@ void InputPersistenceBlock::read(bool &value) { if (checkMarker(BOOL_MARKER)) { uint uintBool = READ_LE_UINT32(_iter); _iter += 4; - value = uintBool == 0 ? false : true; + value = uintBool != 0; } else { value = false; } diff --git a/engines/sword25/script/luabindhelper.h b/engines/sword25/script/luabindhelper.h index 0cb6d37bdc..5223d4440e 100644 --- a/engines/sword25/script/luabindhelper.h +++ b/engines/sword25/script/luabindhelper.h @@ -40,7 +40,7 @@ namespace Sword25 { #define lua_pushbooleancpp(L, b) (lua_pushboolean(L, b ? 1 : 0)) -#define lua_tobooleancpp(L, i) (lua_toboolean(L, i) == 0 ? false : true) +#define lua_tobooleancpp(L, i) (lua_toboolean(L, i) != 0) struct lua_constant_reg { const char *Name; diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index b3dceba292..0781ae4544 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -230,7 +230,7 @@ GfxSurface::GfxSurface(const GfxSurface &s) { _lockSurfaceCtr = 0; _customSurface = NULL; _trackDirtyRects = false; - this->operator =(s); + *this = s; } GfxSurface::~GfxSurface() { diff --git a/graphics/imagedec.h b/graphics/imagedec.h index e839d097b2..b03b8bc36b 100644 --- a/graphics/imagedec.h +++ b/graphics/imagedec.h @@ -36,7 +36,6 @@ struct Surface; class ImageDecoder { public: - ImageDecoder() {} virtual ~ImageDecoder() {} static Surface *loadFile(const Common::String &name, const PixelFormat &format); diff --git a/gui/credits.h b/gui/credits.h index 154f577fba..ecfe280d20 100644 --- a/gui/credits.h +++ b/gui/credits.h @@ -459,6 +459,9 @@ static const char *credits[] = { "C1""Translations", "C0""Thierry Crozat", "C2""Translation Lead", +"C1""Basque", +"C0""Mikel Iturbe Urretxa", +"", "C1""Catalan", "C0""Jordi Vilalta Prat", "", diff --git a/gui/debugger.cpp b/gui/debugger.cpp index 26e62dc1d9..972163df6f 100644 --- a/gui/debugger.cpp +++ b/gui/debugger.cpp @@ -200,9 +200,8 @@ void Debugger::enter() { bool Debugger::handleCommand(int argc, const char **argv, bool &result) { if (_cmds.contains(argv[0])) { - Debuglet *debuglet = _cmds[argv[0]].get(); - assert(debuglet); - result = (*debuglet)(argc, argv); + assert(_cmds[argv[0]]); + result = (*_cmds[argv[0]])(argc, argv); return true; } diff --git a/gui/dialog.cpp b/gui/dialog.cpp index fd15ba5e09..2201e83ca5 100644 --- a/gui/dialog.cpp +++ b/gui/dialog.cpp @@ -21,6 +21,10 @@ #include "common/rect.h" +#ifdef ENABLE_KEYMAPPER +#include "common/events.h" +#endif + #include "gui/gui-manager.h" #include "gui/dialog.h" #include "gui/widget.h" @@ -314,6 +318,9 @@ void Dialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { } } +#ifdef ENABLE_KEYMAPPER +void Dialog::handleOtherEvent(Common::Event evt) { } +#endif /* * Determine the widget at location (x,y) if any. Assumes the coordinates are * in the local coordinate system, i.e. relative to the top left of the dialog. diff --git a/gui/dialog.h b/gui/dialog.h index a324450996..f5a5f94a68 100644 --- a/gui/dialog.h +++ b/gui/dialog.h @@ -29,6 +29,12 @@ #include "gui/object.h" #include "gui/ThemeEngine.h" +#ifdef ENABLE_KEYMAPPER +namespace Common { +struct Event; +} +#endif + namespace GUI { class Widget; @@ -82,6 +88,9 @@ protected: virtual void handleKeyUp(Common::KeyState state); virtual void handleMouseMoved(int x, int y, int button); virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data); +#ifdef ENABLE_KEYMAPPER + virtual void handleOtherEvent(Common::Event evt); +#endif Widget *findWidget(int x, int y); // Find the widget at pos x,y if any Widget *findWidget(const char *name); diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp index 4fa60bfe07..ffecd928bc 100644 --- a/gui/gui-manager.cpp +++ b/gui/gui-manager.cpp @@ -366,6 +366,9 @@ void GuiManager::runLoop() { screenChange(); break; default: +#ifdef ENABLE_KEYMAPPER + activeDialog->handleOtherEvent(event); +#endif break; } diff --git a/gui/options.cpp b/gui/options.cpp index 5085f9cdd9..6747195a1b 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -750,7 +750,7 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr } // RenderMode popup - const Common::String allFlags = renderType2GUIO((uint32)-1); + const Common::String allFlags = Common::allRenderModesGUIOs(); bool renderingTypeDefined = (strpbrk(_guioptions.c_str(), allFlags.c_str()) != NULL); _renderModePopUpDesc = new StaticTextWidget(boss, prefix + "grRenderPopupDesc", _("Render mode:"), _("Special dithering modes supported by some games")); @@ -759,7 +759,7 @@ void OptionsDialog::addGraphicControls(GuiObject *boss, const Common::String &pr _renderModePopUp->appendEntry(""); const Common::RenderModeDescription *rm = Common::g_renderModes; for (; rm->code; ++rm) { - Common::String renderGuiOption = renderType2GUIO(rm->id); + Common::String renderGuiOption = Common::renderMode2GUIO(rm->id); if ((_domain == Common::ConfigManager::kApplicationDomain) || (_domain != Common::ConfigManager::kApplicationDomain && !renderingTypeDefined) || (_guioptions.contains(renderGuiOption))) _renderModePopUp->appendEntry(_c(rm->description, context), rm->id); } @@ -1010,7 +1010,7 @@ bool OptionsDialog::loadMusicDeviceSetting(PopUpWidget *popup, Common::String se for (MusicDevices::iterator d = i.begin(); d != i.end(); ++d) { if (setting.empty() ? (preferredType == d->getMusicType()) : (drv == d->getCompleteId())) { popup->setSelectedTag(d->getHandle()); - return popup->getSelected() == -1 ? false : true; + return popup->getSelected() != -1; } } } @@ -1040,31 +1040,6 @@ void OptionsDialog::saveMusicDeviceSetting(PopUpWidget *popup, Common::String se ConfMan.removeKey(setting, _domain); } -Common::String OptionsDialog::renderType2GUIO(uint32 renderType) { - static const struct { - Common::RenderMode type; - const char *guio; - } renderGUIOMapping[] = { - { Common::kRenderHercG, GUIO_RENDERHERCGREEN }, - { Common::kRenderHercA, GUIO_RENDERHERCAMBER }, - { Common::kRenderCGA, GUIO_RENDERCGA }, - { Common::kRenderEGA, GUIO_RENDEREGA }, - { Common::kRenderVGA, GUIO_RENDERVGA }, - { Common::kRenderAmiga, GUIO_RENDERAMIGA }, - { Common::kRenderFMTowns, GUIO_RENDERFMTOWNS }, - { Common::kRenderPC9821, GUIO_RENDERPC9821 }, - { Common::kRenderPC9801, GUIO_RENDERPC9801 } - }; - Common::String res; - - for (int i = 0; i < ARRAYSIZE(renderGUIOMapping); i++) { - if (renderType == renderGUIOMapping[i].type || renderType == (uint32)-1) - res += renderGUIOMapping[i].guio; - } - - return res; -} - int OptionsDialog::getSubtitleMode(bool subtitles, bool speech_mute) { if (_guioptions.contains(GUIO_NOSUBTITLES)) return kSubtitlesSpeech; // Speech only diff --git a/gui/options.h b/gui/options.h index 83c9d60d59..05b3cac617 100644 --- a/gui/options.h +++ b/gui/options.h @@ -85,8 +85,6 @@ protected: bool loadMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MusicType preferredType = MT_AUTO); void saveMusicDeviceSetting(PopUpWidget *popup, Common::String setting); - Common::String renderType2GUIO(uint32 renderType); - TabWidget *_tabWidget; int _graphicsTabId; int _midiTabId; diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat Binary files differindex 65ca204393..d3a384ef77 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat diff --git a/po/eu.po b/po/eu.po new file mode 100644 index 0000000000..ab677fda82 --- /dev/null +++ b/po/eu.po @@ -0,0 +1,2911 @@ +# Basque translation for ScummVM. +# Copyright (C) 2011 ScummVM Team +# This file is distributed under the same license as the ScummVM package. +# Mikel Iturbe Urretxa <mikel@hamahiru.org>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: ScummVM 1.5.0git\n" +"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" +"POT-Creation-Date: 2012-03-07 22:09+0000\n" +"PO-Revision-Date: 2011-12-15 14:53+0100\n" +"Last-Translator: Mikel Iturbe Urretxa <mikel@hamahiru.org>\n" +"Language-Team: Librezale <librezale@librezale.org>\n" +"Language: Euskara\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: gui/about.cpp:91 +#, c-format +msgid "(built on %s)" +msgstr "(%s-(e)an konpilatua)" + +#: gui/about.cpp:98 +msgid "Features compiled in:" +msgstr "Ezaugarri erantsiak:" + +#: gui/about.cpp:107 +msgid "Available engines:" +msgstr "Motore erabilgarriak:" + +#: gui/browser.cpp:66 +msgid "Go up" +msgstr "Joan gora" + +#: gui/browser.cpp:66 gui/browser.cpp:68 +msgid "Go to previous directory level" +msgstr "Igo aurreko direktorio-mailara" + +#: gui/browser.cpp:68 +msgctxt "lowres" +msgid "Go up" +msgstr "Joan gora" + +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:320 gui/massadd.cpp:94 gui/options.cpp:1253 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/engine.cpp:442 engines/scumm/dialogs.cpp:190 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:191 +#: backends/events/default/default-events.cpp:213 +msgid "Cancel" +msgstr "Utzi" + +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 +msgid "Choose" +msgstr "Aukeratu" + +#: gui/gui-manager.cpp:115 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:209 +#: backends/keymapper/remap-dialog.cpp:52 +msgid "Close" +msgstr "Itxi" + +#: gui/gui-manager.cpp:118 +msgid "Mouse click" +msgstr "Sagu-klika" + +#: gui/gui-manager.cpp:122 base/main.cpp:288 +msgid "Display keyboard" +msgstr "Teklatua erakutsi" + +#: gui/gui-manager.cpp:126 base/main.cpp:292 +msgid "Remap keys" +msgstr "Teklak esleitu" + +#: gui/gui-manager.cpp:129 base/main.cpp:295 +msgid "Toggle FullScreen" +msgstr "Txandakatu pantaila osoa" + +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 +msgid "Choose an action to map" +msgstr "Aukeratu esleituko den ekintza" + +#: gui/KeysDialog.cpp:41 +msgid "Map" +msgstr "Esleitu" + +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:321 gui/launcher.cpp:960 +#: gui/launcher.cpp:964 gui/massadd.cpp:91 gui/options.cpp:1254 +#: engines/engine.cpp:361 engines/engine.cpp:372 engines/scumm/dialogs.cpp:192 +#: engines/scumm/scumm.cpp:1775 engines/agos/animation.cpp:551 +#: engines/groovie/script.cpp:420 engines/sky/compact.cpp:131 +#: engines/sky/compact.cpp:141 engines/sword1/animation.cpp:539 +#: engines/sword1/animation.cpp:560 engines/sword1/animation.cpp:570 +#: engines/sword1/animation.cpp:577 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:435 +#: engines/sword2/animation.cpp:455 engines/sword2/animation.cpp:465 +#: engines/sword2/animation.cpp:474 engines/parallaction/saveload.cpp:281 +#: backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:54 +msgid "OK" +msgstr "Ados" + +#: gui/KeysDialog.cpp:49 +msgid "Select an action and click 'Map'" +msgstr "Aukeratu ekintza eta sakatu \"Esleitu\"" + +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 +#, c-format +msgid "Associated key : %s" +msgstr "Esleituriko tekla: %s" + +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 +#, c-format +msgid "Associated key : none" +msgstr "Esleituriko tekla: bat ere ez" + +#: gui/KeysDialog.cpp:90 +msgid "Please select an action" +msgstr "Mesedez, aukeratu ekintza bat" + +#: gui/KeysDialog.cpp:106 +msgid "Press the key to associate" +msgstr "Sakatu esleituko den tekla" + +#: gui/launcher.cpp:170 +msgid "Game" +msgstr "Jokoa" + +#: gui/launcher.cpp:174 +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:174 gui/launcher.cpp:176 gui/launcher.cpp:177 +msgid "" +"Short game identifier used for referring to savegames and running the game " +"from the command line" +msgstr "" +"Partida gordeak identifikatzeko eta jokoa komando lerrotik abiarazteko " +"erabiltzen den identifikatzailea" + +#: gui/launcher.cpp:176 +msgctxt "lowres" +msgid "ID:" +msgstr "ID:" + +#: gui/launcher.cpp:181 +msgid "Name:" +msgstr "Izena:" + +#: gui/launcher.cpp:181 gui/launcher.cpp:183 gui/launcher.cpp:184 +msgid "Full title of the game" +msgstr "Jokoaren izen osoa" + +#: gui/launcher.cpp:183 +msgctxt "lowres" +msgid "Name:" +msgstr "Izena:" + +#: gui/launcher.cpp:187 +msgid "Language:" +msgstr "Hizkuntza:" + +#: gui/launcher.cpp:187 gui/launcher.cpp:188 +msgid "" +"Language of the game. This will not turn your Spanish game version into " +"English" +msgstr "" +"Jokoaren hizkuntza. Honek ez du zure ingelesezko bertsioa frantsesera pasako" + +#: gui/launcher.cpp:189 gui/launcher.cpp:203 gui/options.cpp:80 +#: gui/options.cpp:745 gui/options.cpp:758 gui/options.cpp:1224 +#: audio/null.cpp:40 +msgid "<default>" +msgstr "<lehenetsia>" + +#: gui/launcher.cpp:199 +msgid "Platform:" +msgstr "Plataforma:" + +#: gui/launcher.cpp:199 gui/launcher.cpp:201 gui/launcher.cpp:202 +msgid "Platform the game was originally designed for" +msgstr "Jatorriz, jokoa diseinatua izan zen plataforma" + +#: gui/launcher.cpp:201 +msgctxt "lowres" +msgid "Platform:" +msgstr "Plataforma:" + +#: gui/launcher.cpp:213 gui/options.cpp:1087 gui/options.cpp:1104 +msgid "Graphics" +msgstr "Grafikoak" + +#: gui/launcher.cpp:213 gui/options.cpp:1087 gui/options.cpp:1104 +msgid "GFX" +msgstr "GFX" + +#: gui/launcher.cpp:216 +msgid "Override global graphic settings" +msgstr "Ezarpen grafiko globalak baliogabetu" + +#: gui/launcher.cpp:218 +msgctxt "lowres" +msgid "Override global graphic settings" +msgstr "Ezarpen grafiko globalak baliogabetu" + +#: gui/launcher.cpp:225 gui/options.cpp:1110 +msgid "Audio" +msgstr "Soinua" + +#: gui/launcher.cpp:228 +msgid "Override global audio settings" +msgstr "Soinu ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:230 +msgctxt "lowres" +msgid "Override global audio settings" +msgstr "Soinu ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:239 gui/options.cpp:1115 +msgid "Volume" +msgstr "Bolumena" + +#: gui/launcher.cpp:241 gui/options.cpp:1117 +msgctxt "lowres" +msgid "Volume" +msgstr "Bolumena" + +#: gui/launcher.cpp:244 +msgid "Override global volume settings" +msgstr "Bolumen ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:246 +msgctxt "lowres" +msgid "Override global volume settings" +msgstr "Bolumen ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:254 gui/options.cpp:1125 +msgid "MIDI" +msgstr "MIDI" + +#: gui/launcher.cpp:257 +msgid "Override global MIDI settings" +msgstr "MIDI ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:259 +msgctxt "lowres" +msgid "Override global MIDI settings" +msgstr "MIDI ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:268 gui/options.cpp:1131 +msgid "MT-32" +msgstr "MT-32" + +#: gui/launcher.cpp:271 +msgid "Override global MT-32 settings" +msgstr "MT-32 ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:273 +msgctxt "lowres" +msgid "Override global MT-32 settings" +msgstr "MT-32 ezarpen globalak baliogabetu" + +#: gui/launcher.cpp:282 gui/options.cpp:1138 +msgid "Paths" +msgstr "Bide-izenak" + +#: gui/launcher.cpp:284 gui/options.cpp:1140 +msgctxt "lowres" +msgid "Paths" +msgstr "Bideak" + +#: gui/launcher.cpp:291 +msgid "Game Path:" +msgstr "Jokoa:" + +#: gui/launcher.cpp:293 +msgctxt "lowres" +msgid "Game Path:" +msgstr "Jokoa:" + +#: gui/launcher.cpp:298 gui/options.cpp:1164 +msgid "Extra Path:" +msgstr "Gehigarriak:" + +#: gui/launcher.cpp:298 gui/launcher.cpp:300 gui/launcher.cpp:301 +msgid "Specifies path to additional data used the game" +msgstr "Jokoak erabiltzen duen datu gehigarrien bide-izena" + +#: gui/launcher.cpp:300 gui/options.cpp:1166 +msgctxt "lowres" +msgid "Extra Path:" +msgstr "Gehigarria:" + +#: gui/launcher.cpp:307 gui/options.cpp:1148 +msgid "Save Path:" +msgstr "Partida gordeak:" + +#: gui/launcher.cpp:307 gui/launcher.cpp:309 gui/launcher.cpp:310 +#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151 +msgid "Specifies where your savegames are put" +msgstr "Zure gordetako partidak non gordeko diren zehazten du" + +#: gui/launcher.cpp:309 gui/options.cpp:1150 +msgctxt "lowres" +msgid "Save Path:" +msgstr "Partida gordeak:" + +#: gui/launcher.cpp:329 gui/launcher.cpp:416 gui/launcher.cpp:469 +#: gui/launcher.cpp:523 gui/options.cpp:1159 gui/options.cpp:1167 +#: gui/options.cpp:1176 gui/options.cpp:1283 gui/options.cpp:1289 +#: gui/options.cpp:1297 gui/options.cpp:1327 gui/options.cpp:1333 +#: gui/options.cpp:1340 gui/options.cpp:1433 gui/options.cpp:1436 +#: gui/options.cpp:1448 +msgctxt "path" +msgid "None" +msgstr "Bat ere ez" + +#: gui/launcher.cpp:334 gui/launcher.cpp:422 gui/launcher.cpp:527 +#: gui/options.cpp:1277 gui/options.cpp:1321 gui/options.cpp:1439 +#: backends/platform/wii/options.cpp:56 +msgid "Default" +msgstr "Lehenetsia" + +#: gui/launcher.cpp:462 gui/options.cpp:1442 +msgid "Select SoundFont" +msgstr "SoundFont-a aukeratu" + +#: gui/launcher.cpp:481 gui/launcher.cpp:636 +msgid "Select directory with game data" +msgstr "Jokoaren direktorioa aukeratu" + +#: gui/launcher.cpp:499 +msgid "Select additional game directory" +msgstr "Direktorio gehigarria aukeratu" + +#: gui/launcher.cpp:511 +msgid "Select directory for saved games" +msgstr "Partida gordeen direktorioa aukeratu" + +#: gui/launcher.cpp:538 +msgid "This game ID is already taken. Please choose another one." +msgstr "ID hau jada erabilia izaten ari da. Mesedez, aukeratu beste bat." + +#: gui/launcher.cpp:579 engines/dialogs.cpp:110 +msgid "~Q~uit" +msgstr "~I~rten" + +#: gui/launcher.cpp:579 backends/platform/sdl/macosx/appmenu_osx.mm:96 +msgid "Quit ScummVM" +msgstr "Irten ScummVM-tik" + +#: gui/launcher.cpp:580 +msgid "A~b~out..." +msgstr "Ho~n~i buruz..." + +#: gui/launcher.cpp:580 backends/platform/sdl/macosx/appmenu_osx.mm:70 +msgid "About ScummVM" +msgstr "ScummVM-i buruz" + +#: gui/launcher.cpp:581 +msgid "~O~ptions..." +msgstr "~A~ukerak" + +#: gui/launcher.cpp:581 +msgid "Change global ScummVM options" +msgstr "ScummVM-ren aukera globalak aldatu" + +#: gui/launcher.cpp:583 +msgid "~S~tart" +msgstr "~H~asi" + +#: gui/launcher.cpp:583 +msgid "Start selected game" +msgstr "Aukeraturiko jokora jolastu" + +#: gui/launcher.cpp:586 +msgid "~L~oad..." +msgstr "~K~argatu" + +#: gui/launcher.cpp:586 +msgid "Load savegame for selected game" +msgstr "Aukeraturiko jokorako partida gordea kargatu" + +#: gui/launcher.cpp:591 gui/launcher.cpp:1079 +msgid "~A~dd Game..." +msgstr "~G~ehitu..." + +#: gui/launcher.cpp:591 gui/launcher.cpp:598 +msgid "Hold Shift for Mass Add" +msgstr "Shift mantendu sakaturik hainbat joko gehitzeko" + +#: gui/launcher.cpp:593 +msgid "~E~dit Game..." +msgstr "~E~ditatu..." + +#: gui/launcher.cpp:593 gui/launcher.cpp:600 +msgid "Change game options" +msgstr "Aldatu jokoaren aukerak" + +#: gui/launcher.cpp:595 +msgid "~R~emove Game" +msgstr "~K~endu jokoa" + +#: gui/launcher.cpp:595 gui/launcher.cpp:602 +msgid "Remove game from the list. The game data files stay intact" +msgstr "Jokoa zerrendatik kendu. Jokoaren fitxategiak ez dira ezabatzen" + +#: gui/launcher.cpp:598 gui/launcher.cpp:1079 +msgctxt "lowres" +msgid "~A~dd Game..." +msgstr "~G~ehitu..." + +#: gui/launcher.cpp:600 +msgctxt "lowres" +msgid "~E~dit Game..." +msgstr "~E~ditatu..." + +#: gui/launcher.cpp:602 +msgctxt "lowres" +msgid "~R~emove Game" +msgstr "~K~endu" + +#: gui/launcher.cpp:610 +msgid "Search in game list" +msgstr "Bilatu joko-zerrendan" + +#: gui/launcher.cpp:614 gui/launcher.cpp:1126 +msgid "Search:" +msgstr "Bilatu:" + +#: gui/launcher.cpp:639 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:716 engines/cruise/menu.cpp:216 +msgid "Load game:" +msgstr "Jokoa kargatu:" + +#: gui/launcher.cpp:639 engines/dialogs.cpp:114 engines/scumm/dialogs.cpp:188 +#: engines/mohawk/myst.cpp:255 engines/mohawk/riven.cpp:716 +#: engines/cruise/menu.cpp:216 backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Load" +msgstr "Kargatu" + +#: gui/launcher.cpp:747 +msgid "" +"Do you really want to run the mass game detector? This could potentially add " +"a huge number of games." +msgstr "" +"Joko detektatzaile masiboa exekutatu nahi al duzu? Honek joko kantitate " +"handia gehitu dezake." + +#: gui/launcher.cpp:748 gui/launcher.cpp:896 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Yes" +msgstr "Bai" + +#: gui/launcher.cpp:748 gui/launcher.cpp:896 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "No" +msgstr "Ez" + +#: gui/launcher.cpp:796 +msgid "ScummVM couldn't open the specified directory!" +msgstr "ScummVM-k ezin izan du zehazturiko direktorioa ireki!" + +#: gui/launcher.cpp:808 +msgid "ScummVM could not find any game in the specified directory!" +msgstr "ScummVM-k ezin izan du jokorik aurkitu zehazturiko direktorioan!" + +#: gui/launcher.cpp:822 +msgid "Pick the game:" +msgstr "Jokoa aukeratu:" + +#: gui/launcher.cpp:896 +msgid "Do you really want to remove this game configuration?" +msgstr "Benetan ezabatu nahi duzu joko-konfigurazio hau?" + +#: gui/launcher.cpp:960 +msgid "This game does not support loading games from the launcher." +msgstr "Joko honek ez du uzten partidak abiarazletik kargatzen." + +#: gui/launcher.cpp:964 +msgid "ScummVM could not find any engine capable of running the selected game!" +msgstr "" +"ScummVM-k ezin izan du aukeraturiko jokoa exekutatzeko gai den motorerik " +"aurkitu!" + +#: gui/launcher.cpp:1078 +msgctxt "lowres" +msgid "Mass Add..." +msgstr "Hainbat gehitu..." + +#: gui/launcher.cpp:1078 +msgid "Mass Add..." +msgstr "Hainbat gehitu..." + +#: gui/massadd.cpp:78 gui/massadd.cpp:81 +msgid "... progress ..." +msgstr "... aurrerapena ..." + +#: gui/massadd.cpp:258 +msgid "Scan complete!" +msgstr "Bilaketa amaitua!" + +#: gui/massadd.cpp:261 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" +"%d joko berri aurkitu dira, aurretik gehituriko %d ez dira kontuan hartu" + +#: gui/massadd.cpp:265 +#, c-format +msgid "Scanned %d directories ..." +msgstr "%d direktorio eskaneatu dira ..." + +#: gui/massadd.cpp:268 +#, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." +msgstr "" +"%d joko berri aurkitu dira, aurretik gehituriko %d ez dira kontuan hartu" + +#: gui/options.cpp:78 +msgid "Never" +msgstr "Inoiz ez" + +#: gui/options.cpp:78 +msgid "every 5 mins" +msgstr "5 minuturo" + +#: gui/options.cpp:78 +msgid "every 10 mins" +msgstr "10 minuturo" + +#: gui/options.cpp:78 +msgid "every 15 mins" +msgstr "15 minuturo" + +#: gui/options.cpp:78 +msgid "every 30 mins" +msgstr "30 minuturo" + +#: gui/options.cpp:80 +msgid "8 kHz" +msgstr "8 kHz" + +#: gui/options.cpp:80 +msgid "11kHz" +msgstr "11kHz" + +#: gui/options.cpp:80 +msgid "22 kHz" +msgstr "22 kHz" + +#: gui/options.cpp:80 +msgid "44 kHz" +msgstr "44 kHz" + +#: gui/options.cpp:80 +msgid "48 kHz" +msgstr "48 kHz" + +#: gui/options.cpp:257 gui/options.cpp:485 gui/options.cpp:586 +#: gui/options.cpp:659 gui/options.cpp:868 +msgctxt "soundfont" +msgid "None" +msgstr "Bat ere ez" + +#: gui/options.cpp:393 +msgid "Failed to apply some of the graphic options changes:" +msgstr "Ezin izan da grafikoen aukeretako batzuk aplikatu:" + +#: gui/options.cpp:405 +msgid "the video mode could not be changed." +msgstr "ezin izan da bideo-modua aldatu." + +#: gui/options.cpp:411 +msgid "the fullscreen setting could not be changed" +msgstr "ezin izan da pantaila-osoaren ezarpena aldatu" + +#: gui/options.cpp:417 +msgid "the aspect ratio setting could not be changed" +msgstr "formatu-ratioaren ezarpena ezin izan da aldatu" + +#: gui/options.cpp:742 +msgid "Graphics mode:" +msgstr "Modu grafikoa:" + +#: gui/options.cpp:756 +msgid "Render mode:" +msgstr "Renderizazioa:" + +#: gui/options.cpp:756 gui/options.cpp:757 +msgid "Special dithering modes supported by some games" +msgstr "Joko batzuk onarturiko lausotze-modu bereziak" + +#: gui/options.cpp:768 +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2248 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:472 +msgid "Fullscreen mode" +msgstr "Pantaila osoa" + +#: gui/options.cpp:771 +msgid "Aspect ratio correction" +msgstr "Formatu-ratioaren zuzenketa" + +#: gui/options.cpp:771 +msgid "Correct aspect ratio for 320x200 games" +msgstr "320x200 jokoentzako formatu-ratioa zuzendu" + +#: gui/options.cpp:772 +msgid "EGA undithering" +msgstr "EGA lausotzea" + +#: gui/options.cpp:772 +msgid "Enable undithering in EGA games that support it" +msgstr "EGA lausotzea gaitu joko bateragarrietan" + +#: gui/options.cpp:780 +msgid "Preferred Device:" +msgstr "Gogoko gailua:" + +#: gui/options.cpp:780 +msgid "Music Device:" +msgstr "Musika gailua:" + +#: gui/options.cpp:780 gui/options.cpp:782 +msgid "Specifies preferred sound device or sound card emulator" +msgstr "Gogoko soinu txartel edo emuladorea zein den ezartzen du" + +#: gui/options.cpp:780 gui/options.cpp:782 gui/options.cpp:783 +msgid "Specifies output sound device or sound card emulator" +msgstr "Irteerako soinu txartel edo emuladorea ezartzen du" + +#: gui/options.cpp:782 +msgctxt "lowres" +msgid "Preferred Dev.:" +msgstr "Gail. gogokoa:" + +#: gui/options.cpp:782 +msgctxt "lowres" +msgid "Music Device:" +msgstr "Musika gailua:" + +#: gui/options.cpp:809 +msgid "AdLib emulator:" +msgstr "AdLib emuladorea:" + +#: gui/options.cpp:809 gui/options.cpp:810 +msgid "AdLib is used for music in many games" +msgstr "AdLib musikarako hainbat jokotan erabiltzen da" + +#: gui/options.cpp:820 +msgid "Output rate:" +msgstr "Irteera maizt.:" + +#: gui/options.cpp:820 gui/options.cpp:821 +msgid "" +"Higher value specifies better sound quality but may be not supported by your " +"soundcard" +msgstr "" +"Balio altuagoek soinu kalitate hobea ezartzen dute, baina baliteke zure " +"soinu-txartela bateragarria ez izatea" + +#: gui/options.cpp:831 +msgid "GM Device:" +msgstr "GM gailua:" + +#: gui/options.cpp:831 +msgid "Specifies default sound device for General MIDI output" +msgstr "Defektuzko soinu txartela ezartzen du General MIDI irteerarako" + +#: gui/options.cpp:842 +msgid "Don't use General MIDI music" +msgstr "Ez erabili General MIDI musika" + +#: gui/options.cpp:853 gui/options.cpp:915 +msgid "Use first available device" +msgstr "Erabilgarri dagoen lehen gailua erabili" + +#: gui/options.cpp:865 +msgid "SoundFont:" +msgstr "SoundFont:" + +#: gui/options.cpp:865 gui/options.cpp:867 gui/options.cpp:868 +msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" +msgstr "" +"Zenbait soinu txartel bateragarriak dira SoundFont-ekin, Fluidsynth eta " +"Timidity besteak beste" + +#: gui/options.cpp:867 +msgctxt "lowres" +msgid "SoundFont:" +msgstr "SoundFont:" + +#: gui/options.cpp:873 +msgid "Mixed AdLib/MIDI mode" +msgstr "AdLib/MIDI modua" + +#: gui/options.cpp:873 +msgid "Use both MIDI and AdLib sound generation" +msgstr "Soinua sortzerakoan MIDI eta AdLib erabili" + +#: gui/options.cpp:876 +msgid "MIDI gain:" +msgstr "MIDI irabazia:" + +#: gui/options.cpp:886 +msgid "MT-32 Device:" +msgstr "MT-32 gailua:" + +#: gui/options.cpp:886 +msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" +msgstr "" +"Roland MT-32/LAPC1/CM32l/CM64 irteerarako defektuzko soinu txartela ezartzen " +"du" + +#: gui/options.cpp:891 +msgid "True Roland MT-32 (disable GM emulation)" +msgstr "Benetako Roland MT-32 (GM emulazio gabe)" + +#: gui/options.cpp:891 gui/options.cpp:893 +msgid "" +"Check if you want to use your real hardware Roland-compatible sound device " +"connected to your computer" +msgstr "" +"Markatu ordenagailura konektaturiko Roland-ekin bateragarria den soinu-" +"gailua erabiltzeko" + +#: gui/options.cpp:893 +msgctxt "lowres" +msgid "True Roland MT-32 (no GM emulation)" +msgstr "Benetako Roland MT-32 (GM emulazio gabe)" + +#: gui/options.cpp:896 +msgid "Enable Roland GS Mode" +msgstr "Roland GS modua gaitu" + +#: gui/options.cpp:896 +msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" +msgstr "" +"Roland MT-32 soinua duten jokoetan General MIDI bihurtzea desgaitzen du" + +#: gui/options.cpp:905 +msgid "Don't use Roland MT-32 music" +msgstr "Ez erabili Roland MT-32 musika" + +#: gui/options.cpp:932 +msgid "Text and Speech:" +msgstr "Testu eta ahotsa:" + +#: gui/options.cpp:936 gui/options.cpp:946 +msgid "Speech" +msgstr "Ahotsa" + +#: gui/options.cpp:937 gui/options.cpp:947 +msgid "Subtitles" +msgstr "Azpitituluak" + +#: gui/options.cpp:938 +msgid "Both" +msgstr "Biak" + +#: gui/options.cpp:940 +msgid "Subtitle speed:" +msgstr "Azpitit. abiadura:" + +#: gui/options.cpp:942 +msgctxt "lowres" +msgid "Text and Speech:" +msgstr "Testu eta ahotsa:" + +#: gui/options.cpp:946 +msgid "Spch" +msgstr "Ahots." + +#: gui/options.cpp:947 +msgid "Subs" +msgstr "Azp." + +#: gui/options.cpp:948 +msgctxt "lowres" +msgid "Both" +msgstr "Biak" + +#: gui/options.cpp:948 +msgid "Show subtitles and play speech" +msgstr "Ahotsak erreproduzitu eta azpitituluak erakutsi" + +#: gui/options.cpp:950 +msgctxt "lowres" +msgid "Subtitle speed:" +msgstr "Azpit. abiadura:" + +#: gui/options.cpp:966 +msgid "Music volume:" +msgstr "Musika:" + +#: gui/options.cpp:968 +msgctxt "lowres" +msgid "Music volume:" +msgstr "Musika:" + +#: gui/options.cpp:975 +msgid "Mute All" +msgstr "Mututu dena" + +#: gui/options.cpp:978 +msgid "SFX volume:" +msgstr "Efektuak:" + +#: gui/options.cpp:978 gui/options.cpp:980 gui/options.cpp:981 +msgid "Special sound effects volume" +msgstr "Soinu efektu berezien bolumena" + +#: gui/options.cpp:980 +msgctxt "lowres" +msgid "SFX volume:" +msgstr "Efektuak:" + +#: gui/options.cpp:988 +msgid "Speech volume:" +msgstr "Ahotsak:" + +#: gui/options.cpp:990 +msgctxt "lowres" +msgid "Speech volume:" +msgstr "Ahotsak:" + +#: gui/options.cpp:1156 +msgid "Theme Path:" +msgstr "Gaiak:" + +#: gui/options.cpp:1158 +msgctxt "lowres" +msgid "Theme Path:" +msgstr "Gaiak:" + +#: gui/options.cpp:1164 gui/options.cpp:1166 gui/options.cpp:1167 +msgid "Specifies path to additional data used by all games or ScummVM" +msgstr "" +"Joko guztiek edo ScummVM-k darabilten datu gehigarrien bide-izena ezartzen du" + +#: gui/options.cpp:1173 +msgid "Plugins Path:" +msgstr "Pluginak:" + +#: gui/options.cpp:1175 +msgctxt "lowres" +msgid "Plugins Path:" +msgstr "Pluginak:" + +#: gui/options.cpp:1184 +msgid "Misc" +msgstr "Beste" + +#: gui/options.cpp:1186 +msgctxt "lowres" +msgid "Misc" +msgstr "Beste" + +#: gui/options.cpp:1188 +msgid "Theme:" +msgstr "Gaia:" + +#: gui/options.cpp:1192 +msgid "GUI Renderer:" +msgstr "Interfazea:" + +#: gui/options.cpp:1204 +msgid "Autosave:" +msgstr "Autogordetzea:" + +#: gui/options.cpp:1206 +msgctxt "lowres" +msgid "Autosave:" +msgstr "Autogordetzea:" + +#: gui/options.cpp:1214 +msgid "Keys" +msgstr "Teklak" + +#: gui/options.cpp:1221 +msgid "GUI Language:" +msgstr "Hizkuntza" + +#: gui/options.cpp:1221 +msgid "Language of ScummVM GUI" +msgstr "ScummVM interfazearen hizkuntza" + +#: gui/options.cpp:1372 +msgid "You have to restart ScummVM before your changes will take effect." +msgstr "ScummVM berrabiarazi behar duzu aldaketak indarrean jartzeko" + +#: gui/options.cpp:1385 +msgid "Select directory for savegames" +msgstr "Gordetako partiden direktorioa aukeratu" + +#: gui/options.cpp:1392 +msgid "The chosen directory cannot be written to. Please select another one." +msgstr "Aukeraturiko direktorioan ezin da idatzi. Mesedez, aukeratu beste bat." + +#: gui/options.cpp:1401 +msgid "Select directory for GUI themes" +msgstr "Gaien direktorioa aukeratu" + +#: gui/options.cpp:1411 +msgid "Select directory for extra files" +msgstr "Fitxategi gehigarrien direktorioa aukeratu" + +#: gui/options.cpp:1422 +msgid "Select directory for plugins" +msgstr "Pluginen direktorioa aukeratu" + +#: gui/options.cpp:1475 +msgid "" +"The theme you selected does not support your current language. If you want " +"to use this theme you need to switch to another language first." +msgstr "" +"Aukeraturiko gaia ez da zure hizkuntzarekin bateragarria. Gai hau erabili " +"nahi baduzu, aurretik beste hizkuntza batera pasa behar duzu." + +#: gui/saveload.cpp:58 gui/saveload.cpp:239 +msgid "No date saved" +msgstr "Ez dago datarik gordeta" + +#: gui/saveload.cpp:59 gui/saveload.cpp:240 +msgid "No time saved" +msgstr "Ez dago ordurik gordeta" + +#: gui/saveload.cpp:60 gui/saveload.cpp:241 +msgid "No playtime saved" +msgstr "Ez dago denborarik gordeta" + +#: gui/saveload.cpp:67 gui/saveload.cpp:155 +msgid "Delete" +msgstr "Ezabatu" + +#: gui/saveload.cpp:154 +msgid "Do you really want to delete this savegame?" +msgstr "Ezabatu partida gorde hau?" + +#: gui/saveload.cpp:264 +msgid "Date: " +msgstr "Data:" + +#: gui/saveload.cpp:268 +msgid "Time: " +msgstr "Ordua" + +#: gui/saveload.cpp:274 +msgid "Playtime: " +msgstr "Denbora:" + +#: gui/saveload.cpp:287 gui/saveload.cpp:354 +msgid "Untitled savestate" +msgstr "Titulurik gabeko partida" + +#: gui/themebrowser.cpp:44 +msgid "Select a Theme" +msgstr "Gaia aukeratu" + +#: gui/ThemeEngine.cpp:333 +msgid "Disabled GFX" +msgstr "GFX desgaituta" + +#: gui/ThemeEngine.cpp:333 +msgctxt "lowres" +msgid "Disabled GFX" +msgstr "GFX desgaituta" + +#: gui/ThemeEngine.cpp:334 +msgid "Standard Renderer (16bpp)" +msgstr "Estandarra (16bpp)" + +#: gui/ThemeEngine.cpp:334 +msgid "Standard (16bpp)" +msgstr "Estandarra (16bpp)" + +#: gui/ThemeEngine.cpp:336 +msgid "Antialiased Renderer (16bpp)" +msgstr "Lausotua (16bpp)" + +#: gui/ThemeEngine.cpp:336 +msgid "Antialiased (16bpp)" +msgstr "Lausotua (16bpp)" + +#: gui/widget.cpp:312 gui/widget.cpp:314 gui/widget.cpp:320 gui/widget.cpp:322 +msgid "Clear value" +msgstr "Balioa kendu:" + +#: base/main.cpp:203 +#, c-format +msgid "Engine does not support debug level '%s'" +msgstr "Motoreak ez da '%s' debug mailarekin bateragarria" + +#: base/main.cpp:275 +msgid "Menu" +msgstr "Menua" + +#: base/main.cpp:278 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 +msgid "Skip" +msgstr "Saltatu" + +#: base/main.cpp:281 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 +msgid "Pause" +msgstr "Gelditu" + +#: base/main.cpp:284 +msgid "Skip line" +msgstr "Lerroa saltatu" + +#: base/main.cpp:455 +msgid "Error running game:" +msgstr "Jokoa exekutatzean errorea:" + +#: base/main.cpp:479 +msgid "Could not find any engine capable of running the selected game" +msgstr "Ezin izan da aukeraturiko jokoa exekutatzeko gai den motorerik aurkitu" + +#: common/error.cpp:38 +msgid "No error" +msgstr "Errorerik ez" + +#: common/error.cpp:40 +msgid "Game data not found" +msgstr "Jokoaren datuak ez dira aurkitu" + +#: common/error.cpp:42 +msgid "Game id not supported" +msgstr "Jokoaren ID ez-onartua" + +#: common/error.cpp:44 +msgid "Unsupported color mode" +msgstr "Kolore modu ez-onartua" + +#: common/error.cpp:47 +msgid "Read permission denied" +msgstr "Irakurketa baimena ukatua" + +#: common/error.cpp:49 +msgid "Write permission denied" +msgstr "Idazketa baimena ukatua" + +#: common/error.cpp:52 +msgid "Path does not exist" +msgstr "Bide-izena ez da existitzen" + +#: common/error.cpp:54 +msgid "Path not a directory" +msgstr "Bide-izena ez da direktorioa" + +#: common/error.cpp:56 +msgid "Path not a file" +msgstr "Bide-izena ez da fitxategia" + +#: common/error.cpp:59 +msgid "Cannot create file" +msgstr "Fitxategia ezin da sortu" + +#: common/error.cpp:61 +msgid "Reading data failed" +msgstr "Errorea irakurtzean" + +#: common/error.cpp:63 +msgid "Writing data failed" +msgstr "Errorea idaztean" + +#: common/error.cpp:66 +msgid "Could not find suitable engine plugin" +msgstr "Ezin izan da motore-plugin egokirik aurkitu" + +#: common/error.cpp:68 +msgid "Engine plugin does not support save states" +msgstr "Motore-pluginak ez ditu gordetako partidak onartzen" + +#: common/error.cpp:71 +msgid "User canceled" +msgstr "Erabiltzaileak utzia" + +#: common/error.cpp:75 +msgid "Unknown error" +msgstr "Errore ezezaguna" + +#: engines/advancedDetector.cpp:296 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "'%s'-(e)ko jokoa ezezaguna dela dirudi" + +#: engines/advancedDetector.cpp:297 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "Mesedez, bidali hurrengo datuak ScummVM taldeari gehitzen saiatu zaren" + +#: engines/advancedDetector.cpp:299 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "jokoaren izen, bertsio/hizkuntza/e.a.-ekin batera:" + +#: engines/dialogs.cpp:84 +msgid "~R~esume" +msgstr "~J~arraitu" + +#: engines/dialogs.cpp:86 +msgid "~L~oad" +msgstr "Ka~r~gatu" + +#: engines/dialogs.cpp:90 +msgid "~S~ave" +msgstr "~G~orde" + +#: engines/dialogs.cpp:94 +msgid "~O~ptions" +msgstr "~A~ukerak" + +#: engines/dialogs.cpp:99 +msgid "~H~elp" +msgstr "~L~aguntza" + +#: engines/dialogs.cpp:101 +msgid "~A~bout" +msgstr "Ho~n~i buruz" + +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 +msgid "~R~eturn to Launcher" +msgstr "It~z~uli abiarazlera" + +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 +msgctxt "lowres" +msgid "~R~eturn to Launcher" +msgstr "It~z~uli abiarazlera" + +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:566 +msgid "Save game:" +msgstr "Gorde jokoa:" + +#: engines/dialogs.cpp:116 engines/scumm/dialogs.cpp:187 +#: engines/cruise/menu.cpp:214 engines/sci/engine/kfile.cpp:566 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Save" +msgstr "Gorde" + +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" +"Barkatu, motore honek ez du joko barruan laguntzarik eskaintzen. Jo ezazu " +"README-ra oinarrizko informaziorako eta laguntza gehiago nola jaso jakiteko." + +#: engines/dialogs.cpp:243 +#, c-format +msgid "" +"Gamestate save failed (%s)! Please consult the README for basic information, " +"and for instructions on how to obtain further assistance." +msgstr "" +"Jokoaren egoera gordetzeak huts egin du (%s)! Jo ezazu README-ra oinarrizko " +"informaziorako eta laguntza gehiago nola jaso jakiteko." + +#: engines/dialogs.cpp:321 engines/mohawk/dialogs.cpp:109 +#: engines/mohawk/dialogs.cpp:174 +msgid "~O~K" +msgstr "~A~dos" + +#: engines/dialogs.cpp:322 engines/mohawk/dialogs.cpp:110 +#: engines/mohawk/dialogs.cpp:175 +msgid "~C~ancel" +msgstr "~U~tzi" + +#: engines/dialogs.cpp:325 +msgid "~K~eys" +msgstr "~T~eklak" + +#: engines/engine.cpp:235 +msgid "Could not initialize color format." +msgstr "Kolore formatua ezin izan da hasieratu." + +#: engines/engine.cpp:243 +msgid "Could not switch to video mode: '" +msgstr "Ezin izan da aldatu bideo modura : '" + +#: engines/engine.cpp:252 +msgid "Could not apply aspect ratio setting." +msgstr "Ezin izan da formatu-ratio ezarpena aplikatu." + +#: engines/engine.cpp:257 +msgid "Could not apply fullscreen setting." +msgstr "Ezin izan da pantaila-osoa ezarpena aplikatu." + +#: engines/engine.cpp:357 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" +"Joko honetara zuzenean CD-tik jolasten\n" +"zaudela ematen du. Jakina da honek arazoak\n" +"sortzen dituela eta beraz gomendagarria da\n" +"fitxategiak disko gogorrera kopiatzea.\n" +"Jo README fitxategira xehetasunetarako." + +#: engines/engine.cpp:368 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" +"Joko honek bere diskoan audio pistak ditu.\n" +"Pista hauek diskotik erauzi behar dira erauzle\n" +"egoki bat erabiliz, jokoko musika entzun ahal\n" +"izateko. Jo README fitxategira\n" +"xehetasunetarako." + +#: engines/engine.cpp:426 +#, c-format +msgid "" +"Gamestate load failed (%s)! Please consult the README for basic information, " +"and for instructions on how to obtain further assistance." +msgstr "" +"Jokoaren egoera kargatzeak huts egin du (%s)! Jo ezazu README-ra oinarrizko " +"informaziorako eta laguntza gehiago nola jaso jakiteko." + +#: engines/engine.cpp:439 +msgid "" +"WARNING: The game you are about to start is not yet fully supported by " +"ScummVM. As such, it is likely to be unstable, and any saves you make might " +"not work in future versions of ScummVM." +msgstr "" +"ABISUA: ScummVM-k ez du guztiz onartzen exekutatuko duzun jokoa oraindik. " +"Hori dela eta, ezegonkorra izan daiteke eta gerta daiteke gordeta izan " +"ditzakezun partidan ez ibiltzea ScummVM-ren etorkizuneko bertsioetan." + +#: engines/engine.cpp:442 +msgid "Start anyway" +msgstr "Jolastu berdin-berdin" + +#: engines/scumm/dialogs.cpp:175 +#, c-format +msgid "Insert Disk %c and Press Button to Continue." +msgstr "%c diskoa sartu eta sakatu botoi bat jarraitzeko." + +#: engines/scumm/dialogs.cpp:176 +#, c-format +msgid "Unable to Find %s, (%c%d) Press Button." +msgstr "Ezin izan da %s, (%c%d) aurkitu. Sakatu botoi bat" + +#: engines/scumm/dialogs.cpp:177 +#, c-format +msgid "Error reading disk %c, (%c%d) Press Button." +msgstr "%c, (%c%d) diskoa irakurtzean errorea. Sakatu botoia." + +#: engines/scumm/dialogs.cpp:178 +msgid "Game Paused. Press SPACE to Continue." +msgstr "Joko pausatua. Sakatu ZURIUNEA jarraitzeko." + +#. I18N: You may specify 'Yes' symbol at the end of the line, like this: +#. "Moechten Sie wirklich neu starten? (J/N)J" +#. Will react to J as 'Yes' +#: engines/scumm/dialogs.cpp:182 +msgid "Are you sure you want to restart? (Y/N)" +msgstr "Ziur zaude berrabiarazi nahi duzula (B/E)B" + +#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment +#: engines/scumm/dialogs.cpp:184 +msgid "Are you sure you want to quit? (Y/N)" +msgstr "Ziur zaude irten nahi duzula? (B/E)B" + +#: engines/scumm/dialogs.cpp:189 +msgid "Play" +msgstr "Jolastu" + +#: engines/scumm/dialogs.cpp:191 engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:84 +#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:44 +#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/events/default/default-events.cpp:213 +msgid "Quit" +msgstr "Irten" + +#: engines/scumm/dialogs.cpp:193 +msgid "Insert save/load game disk" +msgstr "Sartu partida gordeak dituen diskoa" + +#: engines/scumm/dialogs.cpp:194 +msgid "You must enter a name" +msgstr "Izen bat sartu behar duzu" + +#: engines/scumm/dialogs.cpp:195 +msgid "The game was NOT saved (disk full?)" +msgstr "Jokoa EZ da gorde (diskoa beteta?)" + +#: engines/scumm/dialogs.cpp:196 +msgid "The game was NOT loaded" +msgstr "Jokoa EZ da kargatu" + +#: engines/scumm/dialogs.cpp:197 +#, c-format +msgid "Saving '%s'" +msgstr "'%s' gordetzen" + +#: engines/scumm/dialogs.cpp:198 +#, c-format +msgid "Loading '%s'" +msgstr "'%s' kargatzen" + +#: engines/scumm/dialogs.cpp:199 +msgid "Name your SAVE game" +msgstr "Izendatu zure partida" + +#: engines/scumm/dialogs.cpp:200 +msgid "Select a game to LOAD" +msgstr "Aukeratu kargatzeko partida" + +#: engines/scumm/dialogs.cpp:201 +msgid "Game title)" +msgstr "Jokoaren izena)" + +#. I18N: Previous page button +#: engines/scumm/dialogs.cpp:287 +msgid "~P~revious" +msgstr "~A~urrekoa" + +#. I18N: Next page button +#: engines/scumm/dialogs.cpp:289 +msgid "~N~ext" +msgstr "~H~urrengoa" + +#: engines/scumm/dialogs.cpp:290 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 +msgid "~C~lose" +msgstr "~I~txi" + +#: engines/scumm/dialogs.cpp:597 +msgid "Speech Only" +msgstr "Ahotsak bakarrik" + +#: engines/scumm/dialogs.cpp:598 +msgid "Speech and Subtitles" +msgstr "Ahotsak eta azpitituluak" + +#: engines/scumm/dialogs.cpp:599 +msgid "Subtitles Only" +msgstr "Azpitituluak bakarrik" + +#: engines/scumm/dialogs.cpp:607 +msgctxt "lowres" +msgid "Speech & Subs" +msgstr "Ahotsak & azpit." + +#: engines/scumm/dialogs.cpp:653 +msgid "Select a Proficiency Level." +msgstr "Zailtasuna aukeratu." + +#: engines/scumm/dialogs.cpp:655 +msgid "Refer to your Loom(TM) manual for help." +msgstr "Loom(TM)-ko eskuliburura jo ezazu laguntza lortzeko." + +#: engines/scumm/dialogs.cpp:658 +msgid "Standard" +msgstr "Estandarra" + +#: engines/scumm/dialogs.cpp:659 +msgid "Practice" +msgstr "Entrenamendua" + +#: engines/scumm/dialogs.cpp:660 +msgid "Expert" +msgstr "Aditua" + +#: engines/scumm/help.cpp:73 +msgid "Common keyboard commands:" +msgstr "Teklatuko komando oinarrizkoak:" + +#: engines/scumm/help.cpp:74 +msgid "Save / Load dialog" +msgstr "Gorde / Kargatu pantaila" + +#: engines/scumm/help.cpp:76 +msgid "Skip line of text" +msgstr "Esaldia saltatu" + +#: engines/scumm/help.cpp:77 +msgid "Esc" +msgstr "Ihes" + +#: engines/scumm/help.cpp:77 +msgid "Skip cutscene" +msgstr "Eszena saltatu" + +#: engines/scumm/help.cpp:78 +msgid "Space" +msgstr "Zuriunea" + +#: engines/scumm/help.cpp:78 +msgid "Pause game" +msgstr "Jokoa pausatu" + +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Ctrl" +msgstr "Ktrl" + +#: engines/scumm/help.cpp:79 +msgid "Load game state 1-10" +msgstr "1-10 jokoa kargatu" + +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 +msgid "Alt" +msgstr "Alt" + +#: engines/scumm/help.cpp:80 +msgid "Save game state 1-10" +msgstr "1-10 partida gorde" + +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 +msgid "Enter" +msgstr "Sartu" + +#: engines/scumm/help.cpp:86 +msgid "Toggle fullscreen" +msgstr "Pantaila osoa jarri / kendu" + +#: engines/scumm/help.cpp:87 +msgid "Music volume up / down" +msgstr "Musikaren bolumena gora / behera" + +#: engines/scumm/help.cpp:88 +msgid "Text speed slower / faster" +msgstr "Testu-abiadura astiroago / bizkorrago" + +#: engines/scumm/help.cpp:89 +msgid "Simulate left mouse button" +msgstr "Saguaren ezker botoia simulatu" + +#: engines/scumm/help.cpp:90 +msgid "Tab" +msgstr "Tab" + +#: engines/scumm/help.cpp:90 +msgid "Simulate right mouse button" +msgstr "Saguaren eskuin botoia simulatu" + +#: engines/scumm/help.cpp:93 +msgid "Special keyboard commands:" +msgstr "Teklatuko komando bereziak:" + +#: engines/scumm/help.cpp:94 +msgid "Show / Hide console" +msgstr "Kontsola erakutsi / ezkutatu" + +#: engines/scumm/help.cpp:95 +msgid "Start the debugger" +msgstr "Araztailea abiarazi" + +#: engines/scumm/help.cpp:96 +msgid "Show memory consumption" +msgstr "Memoria kontsumoa erakutsi" + +#: engines/scumm/help.cpp:97 +msgid "Run in fast mode (*)" +msgstr "Modu azkarrean exekutatu (*)" + +#: engines/scumm/help.cpp:98 +msgid "Run in really fast mode (*)" +msgstr "Era oso azkarrean exekutatu (*)" + +#: engines/scumm/help.cpp:99 +msgid "Toggle mouse capture" +msgstr "Saguaren kaptura" + +#: engines/scumm/help.cpp:100 +msgid "Switch between graphics filters" +msgstr "Filtro grafikoen artean txandakatu" + +#: engines/scumm/help.cpp:101 +msgid "Increase / Decrease scale factor" +msgstr "Eskala faktorea handitu / txikitu" + +#: engines/scumm/help.cpp:102 +msgid "Toggle aspect-ratio correction" +msgstr "Txandakatu fFormatu-ratioaren zuzenketa" + +#: engines/scumm/help.cpp:107 +msgid "* Note that using ctrl-f and" +msgstr "* Ktrl-F eta Ktrl-G" + +#: engines/scumm/help.cpp:108 +msgid " ctrl-g are not recommended" +msgstr "erabiltzea ez da gomendagarria" + +#: engines/scumm/help.cpp:109 +msgid " since they may cause crashes" +msgstr "kraskadurak eta jokoaren jokabide" + +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." +msgstr "desegokia sor dezaketelako." + +#: engines/scumm/help.cpp:114 +msgid "Spinning drafts on the keyboard:" +msgstr "Sorginkeriak teklatuarekin egin:" + +#: engines/scumm/help.cpp:116 +msgid "Main game controls:" +msgstr "Joko kontrol nagusiak:" + +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 +msgid "Push" +msgstr "Bultzatu" + +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 +msgid "Pull" +msgstr "Tiratu" + +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:207 +msgid "Give" +msgstr "Eman" + +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:190 +#: engines/scumm/help.cpp:208 +msgid "Open" +msgstr "Ireki" + +#: engines/scumm/help.cpp:126 +msgid "Go to" +msgstr "Joan" + +#: engines/scumm/help.cpp:127 +msgid "Get" +msgstr "Jaso" + +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:198 +#: engines/scumm/help.cpp:213 engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:250 +msgid "Use" +msgstr "Erabili" + +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 +msgid "Read" +msgstr "Irakurri" + +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 +msgid "New kid" +msgstr "Pertsonaia aldatu" + +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 +msgid "Turn on" +msgstr "Piztu" + +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 +msgid "Turn off" +msgstr "Itzali" + +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:194 +msgid "Walk to" +msgstr "Joan" + +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:227 +msgid "Pick up" +msgstr "Jaso" + +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 +msgid "What is" +msgstr "Zer da" + +#: engines/scumm/help.cpp:146 +msgid "Unlock" +msgstr "Ireki" + +#: engines/scumm/help.cpp:149 +msgid "Put on" +msgstr "Ipini" + +#: engines/scumm/help.cpp:150 +msgid "Take off" +msgstr "Kendu" + +#: engines/scumm/help.cpp:156 +msgid "Fix" +msgstr "Konpondu" + +#: engines/scumm/help.cpp:158 +msgid "Switch" +msgstr "Aldatu" + +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:228 +msgid "Look" +msgstr "Begiratu" + +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:223 +msgid "Talk" +msgstr "Hitz egin" + +#: engines/scumm/help.cpp:174 +msgid "Travel" +msgstr "Bidaiatu" + +#: engines/scumm/help.cpp:175 +msgid "To Henry / To Indy" +msgstr "Henry / Indy" + +#. I18N: These are different musical notes +#: engines/scumm/help.cpp:179 +msgid "play C minor on distaff" +msgstr "Jo C minor bastoiarekin" + +#: engines/scumm/help.cpp:180 +msgid "play D on distaff" +msgstr "Jo D bastoiarekin" + +#: engines/scumm/help.cpp:181 +msgid "play E on distaff" +msgstr "Jo E bastoiarekin" + +#: engines/scumm/help.cpp:182 +msgid "play F on distaff" +msgstr "Jo F bastoiarekin" + +#: engines/scumm/help.cpp:183 +msgid "play G on distaff" +msgstr "Jo G bastoiarekin" + +#: engines/scumm/help.cpp:184 +msgid "play A on distaff" +msgstr "Jo A bastoiarekin" + +#: engines/scumm/help.cpp:185 +msgid "play B on distaff" +msgstr "Jo B bastoiarekin" + +#: engines/scumm/help.cpp:186 +msgid "play C major on distaff" +msgstr "Jo C maior bastoiarekin" + +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 +msgid "puSh" +msgstr "Bultzatu" + +#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:215 +msgid "pull (Yank)" +msgstr "Tiratu" + +#: engines/scumm/help.cpp:196 engines/scumm/help.cpp:212 +#: engines/scumm/help.cpp:248 +msgid "Talk to" +msgstr "Hitz egin" + +#: engines/scumm/help.cpp:199 engines/scumm/help.cpp:211 +msgid "Look at" +msgstr "Begiratu" + +#: engines/scumm/help.cpp:200 +msgid "turn oN" +msgstr "Piztu" + +#: engines/scumm/help.cpp:201 +msgid "turn oFf" +msgstr "Itzali" + +#: engines/scumm/help.cpp:217 +msgid "KeyUp" +msgstr "Gora" + +#: engines/scumm/help.cpp:217 +msgid "Highlight prev dialogue" +msgstr "Aurreko elkarrizketa aukeratu" + +#: engines/scumm/help.cpp:218 +msgid "KeyDown" +msgstr "Behera" + +#: engines/scumm/help.cpp:218 +msgid "Highlight next dialogue" +msgstr "Hurrengo elkarrizketa aukeratu" + +#: engines/scumm/help.cpp:222 +msgid "Walk" +msgstr "Ibili" + +#: engines/scumm/help.cpp:225 engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:249 +msgid "Inventory" +msgstr "Inbentarioa" + +#: engines/scumm/help.cpp:226 +msgid "Object" +msgstr "Objektua" + +#: engines/scumm/help.cpp:229 +msgid "Black and White / Color" +msgstr "Zuri Beltza / Koloretan" + +#: engines/scumm/help.cpp:232 +msgid "Eyes" +msgstr "Begiak" + +#: engines/scumm/help.cpp:233 +msgid "Tongue" +msgstr "Mihia" + +#: engines/scumm/help.cpp:235 +msgid "Punch" +msgstr "Ukabilkada" + +#: engines/scumm/help.cpp:236 +msgid "Kick" +msgstr "Ostikada" + +#: engines/scumm/help.cpp:239 engines/scumm/help.cpp:247 +msgid "Examine" +msgstr "Aztertu" + +#: engines/scumm/help.cpp:240 +msgid "Regular cursor" +msgstr "Kurtsore normala" + +#. I18N: Comm is a communication device +#: engines/scumm/help.cpp:243 +msgid "Comm" +msgstr "Comm" + +#: engines/scumm/help.cpp:246 +msgid "Save / Load / Options" +msgstr "Gorde / Kargatu / Aukerak" + +#: engines/scumm/help.cpp:255 +msgid "Other game controls:" +msgstr "Beste kontrol batzuk:" + +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:267 +msgid "Inventory:" +msgstr "Inbentarioa:" + +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:274 +msgid "Scroll list up" +msgstr "Gora" + +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +msgid "Scroll list down" +msgstr "Behera" + +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:268 +msgid "Upper left item" +msgstr "Goiko ezkerreko objektua" + +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:270 +msgid "Lower left item" +msgstr "Beheko ezkerreko objektua" + +#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +msgid "Upper right item" +msgstr "Goiko eskuineko objektua" + +#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:273 +msgid "Lower right item" +msgstr "Beheko eskuineko objektua" + +#: engines/scumm/help.cpp:269 +msgid "Middle left item" +msgstr "Erdiko ezkereko objektua" + +#: engines/scumm/help.cpp:272 +msgid "Middle right item" +msgstr "Erdiko eskuineko objektua" + +#: engines/scumm/help.cpp:279 engines/scumm/help.cpp:284 +msgid "Switching characters:" +msgstr "Pertsonaia aldatu:" + +#: engines/scumm/help.cpp:281 +msgid "Second kid" +msgstr "Bigarren gaztea" + +#: engines/scumm/help.cpp:282 +msgid "Third kid" +msgstr "Hirugarren gaztea" + +#: engines/scumm/help.cpp:294 +msgid "Fighting controls (numpad):" +msgstr "Borroka-kontrolak (tekl. num.)" + +#: engines/scumm/help.cpp:295 engines/scumm/help.cpp:296 +#: engines/scumm/help.cpp:297 +msgid "Step back" +msgstr "Atzera egin" + +#: engines/scumm/help.cpp:298 +msgid "Block high" +msgstr "Blokeo garaia" + +#: engines/scumm/help.cpp:299 +msgid "Block middle" +msgstr "Erdiko blokeoa" + +#: engines/scumm/help.cpp:300 +msgid "Block low" +msgstr "Blokeo baxua" + +#: engines/scumm/help.cpp:301 +msgid "Punch high" +msgstr "Ukabilkada altua" + +#: engines/scumm/help.cpp:302 +msgid "Punch middle" +msgstr "Ukabilkada erdira" + +#: engines/scumm/help.cpp:303 +msgid "Punch low" +msgstr "Ukabilkada baxua" + +#: engines/scumm/help.cpp:306 +msgid "These are for Indy on left." +msgstr "Indy ezkerrean dagoenerako dira," + +#: engines/scumm/help.cpp:307 +msgid "When Indy is on the right," +msgstr "Indy eskuinean dagoenean," + +#: engines/scumm/help.cpp:308 +msgid "7, 4, and 1 are switched with" +msgstr "7, 4 eta 1 aldatuak dira" + +#: engines/scumm/help.cpp:309 +msgid "9, 6, and 3, respectively." +msgstr "9, 6 eta 3rekin, hurrenez hurren." + +#: engines/scumm/help.cpp:316 +msgid "Biplane controls (numpad):" +msgstr "Biplanoaren kontrolak (tekl. num.)" + +#: engines/scumm/help.cpp:317 +msgid "Fly to upper left" +msgstr "Gora eta ezkerrera hegan egin" + +#: engines/scumm/help.cpp:318 +msgid "Fly to left" +msgstr "Ezkerrera hegan egin" + +#: engines/scumm/help.cpp:319 +msgid "Fly to lower left" +msgstr "Behera eta ezkerrera hegan egin" + +#: engines/scumm/help.cpp:320 +msgid "Fly upwards" +msgstr "Gorantz hegan egin" + +#: engines/scumm/help.cpp:321 +msgid "Fly straight" +msgstr "Zuzen hegan egin" + +#: engines/scumm/help.cpp:322 +msgid "Fly down" +msgstr "Behera hegan egin" + +#: engines/scumm/help.cpp:323 +msgid "Fly to upper right" +msgstr "Gora eta eskuinera hegan egin" + +#: engines/scumm/help.cpp:324 +msgid "Fly to right" +msgstr "Eskuinera hegan egin" + +#: engines/scumm/help.cpp:325 +msgid "Fly to lower right" +msgstr "Behera eta eskuinera hegan egin" + +#: engines/scumm/scumm.cpp:1773 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" +"MIDI euskarri natiboak LucasArts-en Roland eguneraketa behar du,\n" +"baina %s ez dago eskuragarri. AdLib erabiliko da." + +#: engines/scumm/scumm.cpp:2271 engines/agos/saveload.cpp:189 +#, c-format +msgid "" +"Failed to save game state to file:\n" +"\n" +"%s" +msgstr "" +"Errorea fitxategian gordetzean:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2278 engines/agos/saveload.cpp:154 +#, c-format +msgid "" +"Failed to load game state from file:\n" +"\n" +"%s" +msgstr "" +"Errorea fitxategitik kargatzean:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2290 engines/agos/saveload.cpp:197 +#, c-format +msgid "" +"Successfully saved game state in file:\n" +"\n" +"%s" +msgstr "" +"Partida ondo gorde da hurrengo fitxategian:\n" +"\n" +"%s" + +#: engines/scumm/scumm.cpp:2505 +msgid "" +"Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " +"play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " +"directory inside the Tentacle game directory." +msgstr "" +"Maniac Mansion orain hasi beharko litzateke, baina ScummVM-k ez du " +"baimentzen oraindik. Jolasteko , joan 'Jokoa gehitu' hasierako menura eta " +"aukeratu 'Maniac' direktorioa Tentacle-ren joko-direktorioaren barruan." + +#. I18N: Option for fast scene switching +#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:171 +msgid "~Z~ip Mode Activated" +msgstr "~Z~ip modua aktibaturik" + +#: engines/mohawk/dialogs.cpp:93 +msgid "~T~ransitions Enabled" +msgstr "~T~rantsizioak gaituta" + +#. I18N: Drop book page +#: engines/mohawk/dialogs.cpp:95 +msgid "~D~rop Page" +msgstr "Orria ~b~ota" + +#: engines/mohawk/dialogs.cpp:99 +msgid "~S~how Map" +msgstr "~M~apa erakutsi" + +#: engines/mohawk/dialogs.cpp:105 +msgid "~M~ain Menu" +msgstr "Menu ~n~agusia" + +#: engines/mohawk/dialogs.cpp:172 +msgid "~W~ater Effect Enabled" +msgstr "~U~r-efektua gaituta" + +#: engines/sci/engine/kfile.cpp:673 +msgid "Restore game:" +msgstr "Jokoa kargatu:" + +#: engines/sci/engine/kfile.cpp:673 +msgid "Restore" +msgstr "Kargatu" + +#: engines/agos/animation.cpp:550 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "'%s' bideo fitxategia ez da aurkitu!" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:502 +msgid "Failed to load game state from file." +msgstr "Ezin izan da fitxategitik jokoa kargatu." + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:515 +msgid "Failed to save game state to file." +msgstr "Ezin izan da jokoa fitxategira gorde." + +#: engines/gob/inter_v5.cpp:107 +msgid "Failed to delete file." +msgstr "Ezin izan da fitxategia ezabatu" + +#: engines/groovie/script.cpp:420 +msgid "Failed to save game" +msgstr "Ezin izan da jokoa gorde" + +#: engines/kyra/lol.cpp:478 +msgid "Attack 1" +msgstr "1 erasoa" + +#: engines/kyra/lol.cpp:479 +msgid "Attack 2" +msgstr "2 erasoa" + +#: engines/kyra/lol.cpp:480 +msgid "Attack 3" +msgstr "3 erasoa" + +#: engines/kyra/lol.cpp:481 +msgid "Move Forward" +msgstr "Aurrera mugitu" + +#: engines/kyra/lol.cpp:482 +msgid "Move Back" +msgstr "Atzera mugitu" + +#: engines/kyra/lol.cpp:483 +msgid "Slide Left" +msgstr "Ezkerrera irristatu" + +#: engines/kyra/lol.cpp:484 +msgid "Slide Right" +msgstr "Eskuinera irristatu" + +#: engines/kyra/lol.cpp:485 +msgid "Turn Left" +msgstr "Ezkerrera biratu" + +#: engines/kyra/lol.cpp:486 +msgid "Turn Right" +msgstr "Eskuinera biratu" + +#: engines/kyra/lol.cpp:487 +msgid "Rest" +msgstr "Kargatu" + +#: engines/kyra/lol.cpp:488 +msgid "Options" +msgstr "Aukerak" + +#: engines/kyra/lol.cpp:489 +msgid "Choose Spell" +msgstr "Sorginkeria aukeratu" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" +"General MIDI gailua erabiltzen zaudela dirudi,\n" +"baina zure jokoak Roland MT32 MIDI bakarrik\n" +"erabili dezake. Roland MT32 instrumentuak\n" +"General MIDIkoetara egokitzen saiatuko gara,\n" +"baina posible da pista batzuk egoki ez entzutea." + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" +"Ezin izan da \"sky.cpt\" fitxategia aurkitu!\n" +"Mesedez, jaitsi ezazu www.scummvm.org-etik" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" +"\"sky.cpt\" fitxategiak tamaina desegokia du.\n" +"Mesdez, jaitsi ezazu (berriz) www.scummvm.org-etik" + +#: engines/sword1/animation.cpp:539 +#, c-format +msgid "PSX stream cutscene '%s' cannot be played in paletted mode" +msgstr "" + +#: engines/sword1/animation.cpp:560 engines/sword2/animation.cpp:455 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" +"DXA bideoak aurkitu dira, baina ScummVM zlib euskarri gabe konpilatu da" + +#: engines/sword1/animation.cpp:570 engines/sword2/animation.cpp:465 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "MPEG2 bideoak ez dira bateragarriak jada" + +#: engines/sword1/animation.cpp:576 engines/sword2/animation.cpp:473 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "Ez da '%s' bideoa aurkitu" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" +"ScummVM-k aurkitu du konbertitu beharko liratekeen Broken Sword 1-eko " +"partida gorde zaharrak dituzula.\n" +"Partida gordeen formatu zaharra ez da bateragarria jada, eta beraz ezingo " +"dituzu zure partidak kargatu ez badituzu formatu berrira pasatzen.\n" +"\n" +"Sakatu Ados orain konbertitzeko, bestela berriz galdetuko dizut jokoa berriz " +"martxan jartzen duzunean.\n" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" +"Gordetako partida jadanik existitzen da!\n" +"Gordetako partida zaharra (%s) ala berria (%s) mantendu nahi zenuke?\n" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "Zaharra mantendu" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "Berria mantendu" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "Hau Broken Sword 1 Demoaren amaiera da" + +#: engines/sword2/animation.cpp:435 +msgid "" +"PSX cutscenes found but ScummVM has been built without RGB color support" +msgstr "" +"PSX eszenak aurkitu dira, baina ScummVM RGB kolorearen euskarri gabe " +"konpilatu da" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" +"Ezin da partida gorde %i zirrikituan\n" +"\n" + +#: engines/parallaction/saveload.cpp:211 +msgid "Loading game..." +msgstr "Jokoa kargatzen..." + +#: engines/parallaction/saveload.cpp:226 +msgid "Saving game..." +msgstr "Jokoa gordetzen..." + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" +"ScummVM-k aurkitu du berrizendatu beharko liratekeen Nippon Safes-eko " +"partida gorde zaharrak dituzula.\n" +"Partida gordeen izen zaharra ez da bateragarria jada, eta beraz ezingo " +"dituzu zure partidak kargatu ez badituzu formatu berrira pasatzen.\n" +"\n" +"Sakatu Ados orain konbertitzeko, bestela berriz galdetuko dizut jokoa berriz " +"martxan jartzen duzunean.\n" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "ScummVM-k ondo konbertitu ditu zure gordetako partida guztiak." + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" +"ScummVM-k zenbait abisu inprimatu ditu zure kontsola leihoan eta ezin du " +"ziurtatu zure fitxategi guztiak ondo konbertitu diren.\n" +"\n" +"Mesedez, eman abisua taldeari." + +#: audio/fmopl.cpp:49 +msgid "MAME OPL emulator" +msgstr "MAME OPL emuladorea" + +#: audio/fmopl.cpp:51 +msgid "DOSBox OPL emulator" +msgstr "DOSBox OPL emuladorea" + +#: audio/mididrv.cpp:209 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" +"Aukeraturiko '%s' soinu gailua ez da aurkitu (baliteke itzalita edo " +"konektatu gabe egotea)" + +#: audio/mididrv.cpp:209 audio/mididrv.cpp:221 audio/mididrv.cpp:257 +#: audio/mididrv.cpp:272 +msgid "Attempting to fall back to the next available device..." +msgstr "Eskuragarri dagoen hurrengo soinu gailura joaten..." + +#: audio/mididrv.cpp:221 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" +"Aukeraturiko '%s' soinu gailua ezin da erabili. Ikusi log fitxategia " +"informazio gehiagorako." + +#: audio/mididrv.cpp:257 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected)." +msgstr "" +"'%s' gogoko soinu gailua ez da aurkitu (baliteke itzalita edo konektatu gabe " +"egotea)" + +#: audio/mididrv.cpp:272 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information." +msgstr "" +"'%s' gogoko soinu gailua ezin da erabili. Ikusi log fitxategia informazio " +"gehiagorako." + +#: audio/null.h:43 +msgid "No music" +msgstr "Musikarik ez" + +#: audio/mods/paula.cpp:189 +msgid "Amiga Audio Emulator" +msgstr "Amiga Audio emuladorea" + +#: audio/softsynth/adlib.cpp:1593 +msgid "AdLib Emulator" +msgstr "AdLib emuladorea" + +#: audio/softsynth/appleiigs.cpp:33 +msgid "Apple II GS Emulator (NOT IMPLEMENTED)" +msgstr "Apple II GS emuladorea (INPLEMENTATU GABE)" + +#: audio/softsynth/sid.cpp:1430 +msgid "C64 Audio Emulator" +msgstr "C64 Audio emuladorea" + +#: audio/softsynth/mt32.cpp:293 +msgid "Initializing MT-32 Emulator" +msgstr "MT-32 emuladorea hasieratzen" + +#: audio/softsynth/mt32.cpp:512 +msgid "MT-32 Emulator" +msgstr "MT-32 emuladorea" + +#: audio/softsynth/pcspk.cpp:139 +msgid "PC Speaker Emulator" +msgstr "PC bozgoragailuaren emuladorea" + +#: audio/softsynth/pcspk.cpp:158 +msgid "IBM PCjr Emulator" +msgstr "IBM PCjr emuladorea" + +#: backends/keymapper/remap-dialog.cpp:47 +msgid "Keymap:" +msgstr "Teklen esleipena:" + +#: backends/keymapper/remap-dialog.cpp:66 +msgid " (Effective)" +msgstr "(Egiazkoa)" + +#: backends/keymapper/remap-dialog.cpp:106 +msgid " (Active)" +msgstr "(Aktiboa)" + +#: backends/keymapper/remap-dialog.cpp:106 +msgid " (Blocked)" +msgstr "(Blokeaturik)" + +#: backends/keymapper/remap-dialog.cpp:119 +msgid " (Global)" +msgstr "(Orokorra)" + +#: backends/keymapper/remap-dialog.cpp:127 +msgid " (Game)" +msgstr "(Jokoa)" + +#: backends/midi/windows.cpp:164 +msgid "Windows MIDI" +msgstr "Windows MIDI" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 +msgid "ScummVM Main Menu" +msgstr "ScummVM menu orokorra" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 +msgid "~L~eft handed mode" +msgstr "~E~zkertientzako modua" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 +msgid "~I~ndy fight controls" +msgstr "~I~ndy-ren borrokarako kontrolak" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 +msgid "Show mouse cursor" +msgstr "Saguaren kurtsorea erakutsi" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +msgid "Snap to edges" +msgstr "Ertzetara itsatsi" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +msgid "Touch X Offset" +msgstr "Ukimenaren X oreka" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 +msgid "Touch Y Offset" +msgstr "Ukimenaren Y oreka" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 +msgid "Use laptop trackpad-style cursor control" +msgstr "Eramangarrietako trackpad estiloko kurtsore-kontrola erabili" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 +msgid "Tap for left click, double tap right click" +msgstr "Toke bat ezker-klikerako, toke bikoitza eskuin klikerako" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +msgid "Sensitivity" +msgstr "Sentikortasuna" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 +msgid "Initial top screen scale:" +msgstr "Goiko pantailaren hasierako eskala:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 +msgid "Main screen scaling:" +msgstr "Pantaila nagusiaren eskala:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 +msgid "Hardware scale (fast, but low quality)" +msgstr "Hardware bidezko eskala (arina, baina kalitate baxukoa)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +msgid "Software scale (good quality, but slower)" +msgstr "Software bidezko eskala (kalitate ona, baina geldoagoa)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 +msgid "Unscaled (you must scroll left and right)" +msgstr "Eskalatu gabe (ezker-eskuin mugitu behar duzu pantaila)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +msgid "Brightness:" +msgstr "Distira:" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 +msgid "High quality audio (slower) (reboot)" +msgstr "Kalitate altuko soinua (geldoagoa) (berrabiarazi)" + +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 +msgid "Disable power off" +msgstr "Itzaltzea desgaitu" + +#: backends/platform/iphone/osys_events.cpp:301 +msgid "Mouse-click-and-drag mode enabled." +msgstr "Saguko klik-eta-arrastratu modua gaituta." + +#: backends/platform/iphone/osys_events.cpp:303 +msgid "Mouse-click-and-drag mode disabled." +msgstr "Saguko klik-eta-arrastratu modua desgaituta." + +#: backends/platform/iphone/osys_events.cpp:314 +msgid "Touchpad mode enabled." +msgstr "Touchpad modua gaituta." + +#: backends/platform/iphone/osys_events.cpp:316 +msgid "Touchpad mode disabled." +msgstr "Touchpad modua desgaituta." + +#: backends/platform/maemo/maemo.cpp:205 +msgid "Click Mode" +msgstr "Klikatzeko modua" + +#: backends/platform/maemo/maemo.cpp:211 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/bada/form.cpp:281 +msgid "Left Click" +msgstr "Ezker-klika" + +#: backends/platform/maemo/maemo.cpp:214 +msgid "Middle Click" +msgstr "Erdiko klika" + +#: backends/platform/maemo/maemo.cpp:217 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/bada/form.cpp:273 +msgid "Right Click" +msgstr "Eskuin-klika" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:78 +msgid "Hide ScummVM" +msgstr "ScummVM ezkutatu" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:83 +msgid "Hide Others" +msgstr "Besteak ezkutatu" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:88 +msgid "Show All" +msgstr "Denak erakutsi" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:110 +#: backends/platform/sdl/macosx/appmenu_osx.mm:121 +msgid "Window" +msgstr "Leihoa" + +#: backends/platform/sdl/macosx/appmenu_osx.mm:115 +msgid "Minimize" +msgstr "Minimizatu" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:45 +msgid "Normal (no scaling)" +msgstr "Normala (eskalatu gabe)" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:64 +msgctxt "lowres" +msgid "Normal (no scaling)" +msgstr "Normala" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2147 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:533 +msgid "Enabled aspect ratio correction" +msgstr "Formatu-ratio zuzenketa gaituta" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2153 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:538 +msgid "Disabled aspect ratio correction" +msgstr "Formatu-ratio zuzenketa desgaituta" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2208 +msgid "Active graphics filter:" +msgstr "Filtro grafiko aktiboa:" + +#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2250 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:477 +msgid "Windowed mode" +msgstr "Leiho modua" + +#: backends/graphics/opengl/opengl-graphics.cpp:130 +msgid "OpenGL Normal" +msgstr "OpenGL normala" + +#: backends/graphics/opengl/opengl-graphics.cpp:131 +msgid "OpenGL Conserve" +msgstr "OpenGL aurreztu" + +#: backends/graphics/opengl/opengl-graphics.cpp:132 +msgid "OpenGL Original" +msgstr "OpenGL jatorrizkoa" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:415 +msgid "Current display mode" +msgstr "Oraingo bideo-modua" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:428 +msgid "Current scale" +msgstr "Oraingo eskala" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:558 +msgid "Active filter mode: Linear" +msgstr "Filtro aktibo modua: lineala" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:560 +msgid "Active filter mode: Nearest" +msgstr "Filtro aktibo modua: hurbilena" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 +msgid "Up" +msgstr "Gora" + +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 +msgid "Down" +msgstr "Behera" + +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 +msgid "Left" +msgstr "Ezker" + +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 +msgid "Right" +msgstr "Eskuin" + +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 +msgid "Zone" +msgstr "Zonaldea" + +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 +msgid "Multi Function" +msgstr "Multifuntzioa" + +#: backends/platform/symbian/src/SymbianActions.cpp:48 +msgid "Swap character" +msgstr "Pertsonaia aldatu" + +#: backends/platform/symbian/src/SymbianActions.cpp:49 +msgid "Skip text" +msgstr "Testua saltatu" + +#: backends/platform/symbian/src/SymbianActions.cpp:51 +msgid "Fast mode" +msgstr "Modu bizkorra" + +#: backends/platform/symbian/src/SymbianActions.cpp:53 +msgid "Debugger" +msgstr "Araztailea" + +#: backends/platform/symbian/src/SymbianActions.cpp:54 +msgid "Global menu" +msgstr "Menu orokorra" + +#: backends/platform/symbian/src/SymbianActions.cpp:55 +msgid "Virtual keyboard" +msgstr "Teklatu birtuala" + +#: backends/platform/symbian/src/SymbianActions.cpp:56 +msgid "Key mapper" +msgstr "Teklen esleipena" + +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +msgid "Do you want to quit ?" +msgstr "Irten nahi al duzu?" + +#: backends/platform/wii/options.cpp:51 +msgid "Video" +msgstr "Bideo" + +#: backends/platform/wii/options.cpp:54 +msgid "Current video mode:" +msgstr "Oraingo bideo modua:" + +#: backends/platform/wii/options.cpp:56 +msgid "Double-strike" +msgstr "Kolpe bikoitza" + +#: backends/platform/wii/options.cpp:60 +msgid "Horizontal underscan:" +msgstr "Underscan horizontala" + +#: backends/platform/wii/options.cpp:66 +msgid "Vertical underscan:" +msgstr "Underscan bertikala:" + +#: backends/platform/wii/options.cpp:71 +msgid "Input" +msgstr "Sarrrera" + +#: backends/platform/wii/options.cpp:74 +msgid "GC Pad sensitivity:" +msgstr "GC Pad-aren sentikortasuna" + +#: backends/platform/wii/options.cpp:80 +msgid "GC Pad acceleration:" +msgstr "GC Pad-aren azelerazioa:" + +#: backends/platform/wii/options.cpp:86 +msgid "DVD" +msgstr "DVD:" + +#: backends/platform/wii/options.cpp:89 backends/platform/wii/options.cpp:101 +msgid "Status:" +msgstr "Egoera:" + +#: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 +msgid "Unknown" +msgstr "Ezezaguna" + +#: backends/platform/wii/options.cpp:93 +msgid "Mount DVD" +msgstr "DVD-a muntatu" + +#: backends/platform/wii/options.cpp:94 +msgid "Unmount DVD" +msgstr "DVD-a desmuntatu" + +#: backends/platform/wii/options.cpp:98 +msgid "SMB" +msgstr "SMB" + +#: backends/platform/wii/options.cpp:106 +msgid "Server:" +msgstr "Zerbitzaria:" + +#: backends/platform/wii/options.cpp:110 +msgid "Share:" +msgstr "Konpartituriko direktorioa:" + +#: backends/platform/wii/options.cpp:114 +msgid "Username:" +msgstr "Erabiltzaile-izena:" + +#: backends/platform/wii/options.cpp:118 +msgid "Password:" +msgstr "Pasahitza:" + +#: backends/platform/wii/options.cpp:121 +msgid "Init network" +msgstr "Sarea hasi" + +#: backends/platform/wii/options.cpp:123 +msgid "Mount SMB" +msgstr "SMB-a muntatu" + +#: backends/platform/wii/options.cpp:124 +msgid "Unmount SMB" +msgstr "SMB-a desmuntatu" + +#: backends/platform/wii/options.cpp:143 +msgid "DVD Mounted successfully" +msgstr "DVD-a ondo muntatu da" + +#: backends/platform/wii/options.cpp:146 +msgid "Error while mounting the DVD" +msgstr "Errorea DVD-a muntatzean" + +#: backends/platform/wii/options.cpp:148 +msgid "DVD not mounted" +msgstr "DVD ez muntatua" + +#: backends/platform/wii/options.cpp:161 +msgid "Network up, share mounted" +msgstr "Sarea konektaturik, konpartituriko direktorioa muntaturik" + +#: backends/platform/wii/options.cpp:163 +msgid "Network up" +msgstr "Sarea konektaturik" + +#: backends/platform/wii/options.cpp:166 +msgid ", error while mounting the share" +msgstr ", konpartituriko direktorioa muntatzerakoan errorea" + +#: backends/platform/wii/options.cpp:168 +msgid ", share not mounted" +msgstr ", konpartituriko direktorioa ez muntatua" + +#: backends/platform/wii/options.cpp:174 +msgid "Network down" +msgstr "Sarea konektatu gabe" + +#: backends/platform/wii/options.cpp:178 +msgid "Initializing network" +msgstr "Sarea hasieratzen" + +#: backends/platform/wii/options.cpp:182 +msgid "Timeout while initializing network" +msgstr "Sarearen hasieratze denbora agortu da" + +#: backends/platform/wii/options.cpp:186 +#, c-format +msgid "Network not initialized (%d)" +msgstr "Sarea ez da hasieratu (%d)" + +#: backends/platform/wince/CEActionsPocket.cpp:46 +msgid "Hide Toolbar" +msgstr "Tresna-barra ezkutatu" + +#: backends/platform/wince/CEActionsPocket.cpp:47 +msgid "Show Keyboard" +msgstr "Teklatua erakutsi" + +#: backends/platform/wince/CEActionsPocket.cpp:48 +msgid "Sound on/off" +msgstr "Soinua aktibatuta/desaktibatuta" + +#: backends/platform/wince/CEActionsPocket.cpp:49 +msgid "Right click" +msgstr "Eskuin klik-a" + +#: backends/platform/wince/CEActionsPocket.cpp:50 +msgid "Show/Hide Cursor" +msgstr "Kurtsorea erakutsi/ezkutatu" + +#: backends/platform/wince/CEActionsPocket.cpp:51 +msgid "Free look" +msgstr "Bista librea" + +#: backends/platform/wince/CEActionsPocket.cpp:52 +msgid "Zoom up" +msgstr "Zoom-a hurbildu" + +#: backends/platform/wince/CEActionsPocket.cpp:53 +msgid "Zoom down" +msgstr "Zoom-a urrundu" + +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 +msgid "Bind Keys" +msgstr "Teklak esleitu" + +#: backends/platform/wince/CEActionsPocket.cpp:56 +msgid "Cursor Up" +msgstr "Gora" + +#: backends/platform/wince/CEActionsPocket.cpp:57 +msgid "Cursor Down" +msgstr "Behera" + +#: backends/platform/wince/CEActionsPocket.cpp:58 +msgid "Cursor Left" +msgstr "Ezker" + +#: backends/platform/wince/CEActionsPocket.cpp:59 +msgid "Cursor Right" +msgstr "Eskuin" + +#: backends/platform/wince/CEActionsPocket.cpp:267 +#: backends/platform/wince/CEActionsSmartphone.cpp:231 +msgid "Do you want to load or save the game?" +msgstr "Jokoa kargatu edo gorde nahi duzu?" + +#: backends/platform/wince/CEActionsPocket.cpp:326 +#: backends/platform/wince/CEActionsSmartphone.cpp:287 +msgid " Are you sure you want to quit ? " +msgstr " Ziur irten nahi duzula?" + +#: backends/platform/wince/CEActionsSmartphone.cpp:50 +msgid "Keyboard" +msgstr "Teklatua" + +#: backends/platform/wince/CEActionsSmartphone.cpp:51 +msgid "Rotate" +msgstr "Biratu" + +#: backends/platform/wince/CELauncherDialog.cpp:56 +msgid "Using SDL driver " +msgstr "SDL kontrolatzailea erabiltzen" + +#: backends/platform/wince/CELauncherDialog.cpp:60 +msgid "Display " +msgstr "Pantaila" + +#: backends/platform/wince/CELauncherDialog.cpp:83 +msgid "Do you want to perform an automatic scan ?" +msgstr "Bilaketa automatikoa erabili nahi duzu?" + +#: backends/platform/wince/wince-sdl.cpp:515 +msgid "Map right click action" +msgstr "'Eskuin klika' ekintza esleitu" + +#: backends/platform/wince/wince-sdl.cpp:519 +msgid "You must map a key to the 'Right Click' action to play this game" +msgstr "" +"'Eskuin klika' ekintza esleitu behar diozu tekla bati joko honetara jolasteko" + +#: backends/platform/wince/wince-sdl.cpp:528 +msgid "Map hide toolbar action" +msgstr "'Tresna-barra ezkutatu' ekintza esleitu" + +#: backends/platform/wince/wince-sdl.cpp:532 +msgid "You must map a key to the 'Hide toolbar' action to play this game" +msgstr "" +"'Tresna-barra ezkutatu' ekintza tekla bati esleitu behar diozu joko honetara " +"jolasteko" + +#: backends/platform/wince/wince-sdl.cpp:541 +msgid "Map Zoom Up action (optional)" +msgstr "'Zoom-a urrundu' ekintza esleitu (hautazkoa)" + +#: backends/platform/wince/wince-sdl.cpp:544 +msgid "Map Zoom Down action (optional)" +msgstr "'Zoom-a hurbildu' ekintza esleitu (hautazkkoa)" + +#: backends/platform/wince/wince-sdl.cpp:552 +msgid "" +"Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" +msgstr "" +"Ez ahaztu 'tresna-barra ezkutatu' ekintza tekla bati esleitzea inbentario " +"osoa ikusteko" + +#: backends/events/default/default-events.cpp:191 +msgid "Do you really want to return to the Launcher?" +msgstr "Ziur zaude abiarazlera itzuli nahi duzula?" + +#: backends/events/default/default-events.cpp:191 +msgid "Launcher" +msgstr "Abiarazlea" + +#: backends/events/default/default-events.cpp:213 +msgid "Do you really want to quit?" +msgstr "Benetan irten?" + +#: backends/events/gph/gph-events.cpp:338 +#: backends/events/gph/gph-events.cpp:381 +#: backends/events/openpandora/op-events.cpp:139 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "Ukimen-pantailako 'kolpetxo modua' - Ezker klika" + +#: backends/events/gph/gph-events.cpp:340 +#: backends/events/gph/gph-events.cpp:383 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "Ukimen-pantailako 'kolpetxo modua' - Eskuin klika" + +#: backends/events/gph/gph-events.cpp:342 +#: backends/events/gph/gph-events.cpp:385 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "Ukimen-pantailako 'kolpetxo modua' - Flotatu (klikik ez)" + +#: backends/events/gph/gph-events.cpp:362 +msgid "Maximum Volume" +msgstr "Bolumen maximoa" + +#: backends/events/gph/gph-events.cpp:364 +msgid "Increasing Volume" +msgstr "Bolumena igotzen" + +#: backends/events/gph/gph-events.cpp:370 +msgid "Minimal Volume" +msgstr "Bolumen minimoa" + +#: backends/events/gph/gph-events.cpp:372 +msgid "Decreasing Volume" +msgstr "Bolumena jaisten" + +#: backends/updates/macosx/macosx-updates.mm:65 +msgid "Check for Updates..." +msgstr "Eguneraketak bilatzen..." + +#: backends/platform/bada/form.cpp:269 +msgid "Right Click Once" +msgstr "Eskuin-klika behin" + +#: backends/platform/bada/form.cpp:277 +msgid "Move Only" +msgstr "Mugitu bakarrik" + +#: backends/platform/bada/form.cpp:291 +msgid "Escape Key" +msgstr "Ihes tekla" + +#: backends/platform/bada/form.cpp:296 +msgid "Game Menu" +msgstr "Jokoaren menua" + +#: backends/platform/bada/form.cpp:301 +msgid "Show Keypad" +msgstr "Teklatu numerikoa erakutsi" + +#: backends/platform/bada/form.cpp:309 +msgid "Control Mouse" +msgstr "Saguaren kontrola" + +#: backends/events/maemosdl/maemosdl-events.cpp:192 +msgid "Clicking Enabled" +msgstr "Klikatzea gaituta" + +#: backends/events/maemosdl/maemosdl-events.cpp:192 +msgid "Clicking Disabled" +msgstr "Klikatzea desgaituta" + +#~ msgid "Hercules Green" +#~ msgstr "Herkules berdea" + +#~ msgid "Hercules Amber" +#~ msgstr "Herkules anbar-kolorekoa" + +#~ msgctxt "lowres" +#~ msgid "Hercules Green" +#~ msgstr "Herkules berdea" + +#~ msgctxt "lowres" +#~ msgid "Hercules Amber" +#~ msgstr "Herkules anbar-kolorekoa" + +#~ msgid "Save game failed!" +#~ msgstr "Partida gordeak huts egin du!" |