mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-23 11:04:44 +00:00
SUPERNOVA2: Add interaction with room objects
This commit is contained in:
parent
3cb1cf1699
commit
6bd7e561b4
@ -132,9 +132,9 @@ kString10, kStringStatusCommandGo, kStringStatusCommandLook, kStringStatusComman
|
||||
kStringStatusCommandClose, kStringStatusCommandPress, kStringStatusCommandPull, kStringStatusCommandUse, kStringStatusCommandTalk,
|
||||
kStringStatusCommandGive, kPhrasalVerbParticleGiveTo, kPhrasalVerbParticleUseWith, kString23, kString24,
|
||||
kString25, kString26, kString27, kStringTextSpeed, kString29,
|
||||
kString30, kString31, kString32, kString33, kString34,
|
||||
kString35, kString36, kString37, kString38, kString39,
|
||||
kString40, kString41, kString42, kString43, kString44,
|
||||
kString30, kString31, kStringGenericInteract1, kStringGenericInteract2, kStringGenericInteract3,
|
||||
kStringGenericInteract4, kStringGenericInteract5, kStringGenericInteract6, kStringGenericInteract7, kStringGenericInteract8,
|
||||
kStringGenericInteract9, kStringGenericInteract10, kStringGenericInteract11, kStringGenericInteract12, kStringGenericInteract13,
|
||||
kStringIntro1, kStringIntro2, kStringIntro3, kStringIntro4, kStringIntro5,
|
||||
kString50, kString51, kString52, kString53, kString54,
|
||||
kString55, kString56, kString57, kString58, kString59,
|
||||
|
@ -557,6 +557,16 @@ void GameManager::drawStatus() {
|
||||
}
|
||||
}
|
||||
|
||||
void GameManager::takeObject(Object &obj) {
|
||||
if (obj.hasProperty(CARRIED))
|
||||
return;
|
||||
|
||||
if (obj._section != 0)
|
||||
_vm->renderImage(obj._section);
|
||||
obj._click = obj._click2 = 255;
|
||||
_inventory.add(obj);
|
||||
}
|
||||
|
||||
void GameManager::drawCommandBox() {
|
||||
for (int i = 0; i < ARRAYSIZE(_guiCommandButton); ++i) {
|
||||
_vm->renderBox(_guiCommandButton[i]);
|
||||
@ -667,9 +677,115 @@ bool GameManager::waitOnInput(int ticks, Common::KeyCode &keycode) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int GameManager::invertSection(int section) {
|
||||
if (section < 128)
|
||||
section += 128;
|
||||
else
|
||||
section -= 128;
|
||||
|
||||
return section;
|
||||
}
|
||||
|
||||
bool GameManager::genericInteract(Action verb, Object &obj1, Object &obj2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void GameManager::handleInput() {
|
||||
bool validCommand = genericInteract(_inputVerb, *_inputObject[0], *_inputObject[1]);
|
||||
if (!validCommand)
|
||||
validCommand = _currentRoom->interact(_inputVerb, *_inputObject[0], *_inputObject[1]);
|
||||
if (!validCommand) {
|
||||
switch (_inputVerb) {
|
||||
case ACTION_LOOK:
|
||||
_vm->renderMessage(_inputObject[0]->_description);
|
||||
break;
|
||||
|
||||
case ACTION_WALK:
|
||||
if (_inputObject[0]->hasProperty(CARRIED)) {
|
||||
// You already carry this.
|
||||
_vm->renderMessage(kStringGenericInteract1);
|
||||
} else if (!_inputObject[0]->hasProperty(EXIT)) {
|
||||
// You're already there.
|
||||
_vm->renderMessage(kStringGenericInteract2);
|
||||
} else if (_inputObject[0]->hasProperty(OPENABLE) && !_inputObject[0]->hasProperty(OPENED)) {
|
||||
// This is closed
|
||||
_vm->renderMessage(kStringGenericInteract3);
|
||||
} else
|
||||
changeRoom(_inputObject[0]->_exitRoom);
|
||||
|
||||
break;
|
||||
|
||||
case ACTION_TAKE:
|
||||
if (_inputObject[0]->hasProperty(OPENED)) {
|
||||
// You already have that
|
||||
_vm->renderMessage(kStringGenericInteract4);
|
||||
} else if (_inputObject[0]->hasProperty(UNNECESSARY)) {
|
||||
// You do not need that.
|
||||
_vm->renderMessage(kStringGenericInteract5);
|
||||
} else if (!_inputObject[0]->hasProperty(TAKE)) {
|
||||
// You can't take that.
|
||||
_vm->renderMessage(kStringGenericInteract6);
|
||||
} else
|
||||
takeObject(*_inputObject[0]);
|
||||
|
||||
break;
|
||||
|
||||
case ACTION_OPEN:
|
||||
if (!_inputObject[0]->hasProperty(OPENABLE)) {
|
||||
// This can't be opened
|
||||
_vm->renderMessage(kStringGenericInteract7);
|
||||
} else if (_inputObject[0]->hasProperty(OPENED)) {
|
||||
// This is already opened.
|
||||
_vm->renderMessage(kStringGenericInteract8);
|
||||
} else if (_inputObject[0]->hasProperty(CLOSED)) {
|
||||
// This is locked.
|
||||
_vm->renderMessage(kStringGenericInteract9);
|
||||
} else {
|
||||
_vm->renderImage(_inputObject[0]->_section);
|
||||
_inputObject[0]->setProperty(OPENED);
|
||||
byte i = _inputObject[0]->_click;
|
||||
_inputObject[0]->_click = _inputObject[0]->_click2;
|
||||
_inputObject[0]->_click2 = i;
|
||||
//_sound->play(kAudioDoorOpen);
|
||||
}
|
||||
break;
|
||||
|
||||
case ACTION_CLOSE:
|
||||
if (!_inputObject[0]->hasProperty(OPENABLE) ||
|
||||
(_inputObject[0]->hasProperty(CLOSED) &&
|
||||
_inputObject[0]->hasProperty(OPENED))) {
|
||||
// This can't be closed.
|
||||
_vm->renderMessage(kStringGenericInteract10);
|
||||
} else if (!_inputObject[0]->hasProperty(OPENED)) {
|
||||
// This is already closed.
|
||||
_vm->renderMessage(kStringGenericInteract11);
|
||||
} else {
|
||||
_vm->renderImage(invertSection(_inputObject[0]->_section));
|
||||
_inputObject[0]->disableProperty(OPENED);
|
||||
byte i = _inputObject[0]->_click;
|
||||
_inputObject[0]->_click = _inputObject[0]->_click2;
|
||||
_inputObject[0]->_click2 = i;
|
||||
//_sound->play(kAudioDoorClose);
|
||||
}
|
||||
break;
|
||||
|
||||
case ACTION_GIVE:
|
||||
if (_inputObject[0]->hasProperty(CARRIED)) {
|
||||
// Better keep it!
|
||||
_vm->renderMessage(kStringGenericInteract12);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// This is not possible.
|
||||
_vm->renderMessage(kStringGenericInteract13);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GameManager::executeRoom() {
|
||||
if (_processInput && !_vm->_screen->isMessageShown() && _guiEnabled) {
|
||||
// handleInput();
|
||||
handleInput();
|
||||
if (_mouseClicked) {
|
||||
Common::Event event;
|
||||
event.type = Common::EVENT_MOUSEMOVE;
|
||||
|
@ -145,6 +145,7 @@ public:
|
||||
byte _rows[6];
|
||||
byte _rowsStart[6];
|
||||
|
||||
void takeObject(Object &obj);
|
||||
void setObjectNull(Object *&obj);
|
||||
bool isNullObject(Object *obj);
|
||||
|
||||
@ -152,18 +153,21 @@ public:
|
||||
void initRooms();
|
||||
void destroyRooms();
|
||||
void initGui();
|
||||
bool genericInteract(Action verb, Object &obj1, Object &obj2);
|
||||
uint16 getKeyInput(bool blockForPrintChar = false);
|
||||
void getInput();
|
||||
void wait(int ticks);
|
||||
void waitOnInput(int ticks);
|
||||
bool waitOnInput(int ticks, Common::KeyCode &keycode);
|
||||
void showMenu();
|
||||
int invertSection(int section);
|
||||
void drawMapExits();
|
||||
void drawStatus();
|
||||
void drawCommandBox();
|
||||
void drawInventory();
|
||||
void changeRoom(RoomId id);
|
||||
void resetInputState();
|
||||
void handleInput();
|
||||
|
||||
private:
|
||||
int _prevImgId;
|
||||
|
Loading…
x
Reference in New Issue
Block a user