implement IHNM verb mapper
svn-id: r20003
This commit is contained in:
parent
641caf7e73
commit
3a7a7b3291
10 changed files with 240 additions and 145 deletions
|
@ -650,7 +650,7 @@ void Actor::stepZoneAction(ActorData *actor, const HitZone *hitZone, bool exit,
|
||||||
event.time = 0;
|
event.time = 0;
|
||||||
event.param = _vm->_scene->getScriptModuleNumber(); // module number
|
event.param = _vm->_scene->getScriptModuleNumber(); // module number
|
||||||
event.param2 = hitZone->getScriptNumber(); // script entry point number
|
event.param2 = hitZone->getScriptNumber(); // script entry point number
|
||||||
event.param3 = kVerbEnter; // Action
|
event.param3 = _vm->_script->getVerbType(kVerbEnter); // Action
|
||||||
event.param4 = ID_NOTHING; // Object
|
event.param4 = ID_NOTHING; // Object
|
||||||
event.param5 = ID_NOTHING; // With Object
|
event.param5 = ID_NOTHING; // With Object
|
||||||
event.param6 = ID_PROTAG; // Actor
|
event.param6 = ID_PROTAG; // Actor
|
||||||
|
@ -1972,7 +1972,7 @@ bool Actor::actorEndWalk(uint16 actorId, bool recurse) {
|
||||||
|
|
||||||
if (actor == _protagonist) {
|
if (actor == _protagonist) {
|
||||||
_vm->_script->wakeUpActorThread(kWaitTypeWalk, actor);
|
_vm->_script->wakeUpActorThread(kWaitTypeWalk, actor);
|
||||||
if (_vm->_script->_pendingVerb == kVerbWalkTo) {
|
if (_vm->_script->_pendingVerb == _vm->_script->getVerbType(kVerbWalkTo)) {
|
||||||
actor->_location.toScreenPointUV(testPoint);
|
actor->_location.toScreenPointUV(testPoint);
|
||||||
hitZoneIndex = _vm->_scene->_actionMap->hitTest(testPoint);
|
hitZoneIndex = _vm->_scene->_actionMap->hitTest(testPoint);
|
||||||
if (hitZoneIndex != -1) {
|
if (hitZoneIndex != -1) {
|
||||||
|
@ -1981,7 +1981,7 @@ bool Actor::actorEndWalk(uint16 actorId, bool recurse) {
|
||||||
} else {
|
} else {
|
||||||
_vm->_script->setNoPendingVerb();
|
_vm->_script->setNoPendingVerb();
|
||||||
}
|
}
|
||||||
} else if (_vm->_script->_pendingVerb != kVerbNone) {
|
} else if (_vm->_script->_pendingVerb != _vm->_script->getVerbType(kVerbNone)) {
|
||||||
_vm->_script->doVerb();
|
_vm->_script->doVerb();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -53,14 +53,14 @@ static int detectGame(const FSList &fslist, bool mode = false, int start = -1);
|
||||||
|
|
||||||
// ITE section
|
// ITE section
|
||||||
static PanelButton ITE_MainPanelButtons[] = {
|
static PanelButton ITE_MainPanelButtons[] = {
|
||||||
{kPanelButtonVerb, 52,4, 57,10, kVerbWalkTo,'w',0, 0,1,0},
|
{kPanelButtonVerb, 52,4, 57,10, kVerbITEWalkTo,'w',0, 0,1,0},
|
||||||
{kPanelButtonVerb, 52,15, 57,10, kVerbLookAt,'l',0, 2,3,0},
|
{kPanelButtonVerb, 52,15, 57,10, kVerbITELookAt,'l',0, 2,3,0},
|
||||||
{kPanelButtonVerb, 52,26, 57,10, kVerbPickUp,'p',0, 4,5,0},
|
{kPanelButtonVerb, 52,26, 57,10, kVerbITEPickUp,'p',0, 4,5,0},
|
||||||
{kPanelButtonVerb, 52,37, 57,10, kVerbTalkTo,'t',0, 0,1,0},
|
{kPanelButtonVerb, 52,37, 57,10, kVerbITETalkTo,'t',0, 0,1,0},
|
||||||
{kPanelButtonVerb, 110,4, 56,10, kVerbOpen,'o',0, 6,7,0},
|
{kPanelButtonVerb, 110,4, 56,10, kVerbITEOpen,'o',0, 6,7,0},
|
||||||
{kPanelButtonVerb, 110,15, 56,10, kVerbClose,'c',0, 8,9,0},
|
{kPanelButtonVerb, 110,15, 56,10, kVerbITEClose,'c',0, 8,9,0},
|
||||||
{kPanelButtonVerb, 110,26, 56,10, kVerbUse,'u',0, 10,11,0},
|
{kPanelButtonVerb, 110,26, 56,10, kVerbITEUse,'u',0, 10,11,0},
|
||||||
{kPanelButtonVerb, 110,37, 56,10, kVerbGive,'g',0, 12,13,0},
|
{kPanelButtonVerb, 110,37, 56,10, kVerbITEGive,'g',0, 12,13,0},
|
||||||
{kPanelButtonArrow, 306,6, 8,5, -1,'U',0, 0,4,2},
|
{kPanelButtonArrow, 306,6, 8,5, -1,'U',0, 0,4,2},
|
||||||
{kPanelButtonArrow, 306,41, 8,5, 1,'D',0, 1,5,3},
|
{kPanelButtonArrow, 306,41, 8,5, 1,'D',0, 1,5,3},
|
||||||
|
|
||||||
|
@ -533,14 +533,14 @@ static GamePatchDescription ITELinPatch_Files[] = {
|
||||||
// IHNM section
|
// IHNM section
|
||||||
|
|
||||||
static PanelButton IHNM_MainPanelButtons[] = {
|
static PanelButton IHNM_MainPanelButtons[] = {
|
||||||
{kPanelButtonVerb, 106,12, 114,30, kVerbWalkTo,'w',0, 0,1,0},
|
{kPanelButtonVerb, 106,12, 114,30, kVerbIHNMWalk,'w',0, 0,1,0},
|
||||||
{kPanelButtonVerb, 106,44, 114,30, kVerbLookAt,'l',0, 2,3,0},
|
{kPanelButtonVerb, 106,44, 114,30, kVerbIHNMLookAt,'l',0, 2,3,0},
|
||||||
{kPanelButtonVerb, 106,76, 114,30, kVerbTake,'k',0, 4,5,0},
|
{kPanelButtonVerb, 106,76, 114,30, kVerbIHNMTake,'k',0, 4,5,0},
|
||||||
{kPanelButtonVerb, 106,108, 114,30, kVerbUse,'u',0, 6,7,0},
|
{kPanelButtonVerb, 106,108, 114,30, kVerbIHNMUse,'u',0, 6,7,0},
|
||||||
{kPanelButtonVerb, 223,12, 114,30, kVerbTalkTo,'t',0, 8,9,0},
|
{kPanelButtonVerb, 223,12, 114,30, kVerbIHNMTalkTo,'t',0, 8,9,0},
|
||||||
{kPanelButtonVerb, 223,44, 114,30, kVerbSwallow,'s',0, 10,11,0},
|
{kPanelButtonVerb, 223,44, 114,30, kVerbIHNMSwallow,'s',0, 10,11,0},
|
||||||
{kPanelButtonVerb, 223,76, 114,30, kVerbGive,'g',0, 12,13,0},
|
{kPanelButtonVerb, 223,76, 114,30, kVerbIHNMGive,'g',0, 12,13,0},
|
||||||
{kPanelButtonVerb, 223,108, 114,30, kVerbPush,'p',0, 14,15,0},
|
{kPanelButtonVerb, 223,108, 114,30, kVerbIHNMPush,'p',0, 14,15,0},
|
||||||
{kPanelButtonArrow, 606,22, 20,25, -1,'[',0, 0,0,0}, //TODO: arrow Sprite Numbers
|
{kPanelButtonArrow, 606,22, 20,25, -1,'[',0, 0,0,0}, //TODO: arrow Sprite Numbers
|
||||||
{kPanelButtonArrow, 606,108, 20,25, 1,']',0, 0,0,0},
|
{kPanelButtonArrow, 606,108, 20,25, 1,']',0, 0,0,0},
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@ int SagaEngine::processInput() {
|
||||||
_render->toggleFlag(RF_ACTOR_PATH_TEST);
|
_render->toggleFlag(RF_ACTOR_PATH_TEST);
|
||||||
break;
|
break;
|
||||||
case 288: // F7
|
case 288: // F7
|
||||||
|
//_actor->frameTest();
|
||||||
break;
|
break;
|
||||||
case 289: // F8
|
case 289: // F8
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
|
|
||||||
namespace Saga {
|
namespace Saga {
|
||||||
|
|
||||||
static int verbTypeToTextStringsIdLUT[2][kVerbTypesMax] = {
|
static int verbTypeToTextStringsIdLUT[2][kVerbTypeIdsMax] = {
|
||||||
{-1,
|
{-1,
|
||||||
kTextPickUp,
|
kTextPickUp,
|
||||||
kTextLookAt,
|
kTextLookAt,
|
||||||
|
@ -64,12 +64,17 @@ static int verbTypeToTextStringsIdLUT[2][kVerbTypesMax] = {
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1,
|
-1,
|
||||||
-1},
|
-1},
|
||||||
{-1, -1, 2, 1, 5, -1, -1, 7, 4, -1, -1, -1, -1, -1, -1, 3, 6, 8}
|
{-1,
|
||||||
|
3, //TODO:check
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
5,
|
||||||
|
6, //TODO:check
|
||||||
|
8, //TODO:check
|
||||||
|
7,
|
||||||
|
4}
|
||||||
};
|
};
|
||||||
|
|
||||||
Interface::Interface(SagaEngine *vm) : _vm(vm) {
|
Interface::Interface(SagaEngine *vm) : _vm(vm) {
|
||||||
|
@ -86,7 +91,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
|
||||||
_mainPanel.buttons = _vm->getDisplayInfo().mainPanelButtons;
|
_mainPanel.buttons = _vm->getDisplayInfo().mainPanelButtons;
|
||||||
_mainPanel.buttonsCount = _vm->getDisplayInfo().mainPanelButtonsCount;
|
_mainPanel.buttonsCount = _vm->getDisplayInfo().mainPanelButtonsCount;
|
||||||
|
|
||||||
for (i = 0; i < kVerbTypesMax; i++) {
|
for (i = 0; i < kVerbTypeIdsMax; i++) {
|
||||||
_verbTypeToPanelButton[i] = NULL;
|
_verbTypeToPanelButton[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -632,7 +637,7 @@ void Interface::draw() {
|
||||||
_mainPanel.getRect(rect);
|
_mainPanel.getRect(rect);
|
||||||
backBuffer->blit(rect, _mainPanel.image);
|
backBuffer->blit(rect, _mainPanel.image);
|
||||||
|
|
||||||
for (i = 0; i < kVerbTypesMax; i++) {
|
for (i = 0; i < kVerbTypeIdsMax; i++) {
|
||||||
if (_verbTypeToPanelButton[i] != NULL) {
|
if (_verbTypeToPanelButton[i] != NULL) {
|
||||||
drawVerbPanel(backBuffer, _verbTypeToPanelButton[i]);
|
drawVerbPanel(backBuffer, _verbTypeToPanelButton[i]);
|
||||||
}
|
}
|
||||||
|
@ -681,6 +686,7 @@ void Interface::draw() {
|
||||||
void Interface::calcOptionSaveSlider() {
|
void Interface::calcOptionSaveSlider() {
|
||||||
int totalFiles = _vm->getSaveFilesCount();
|
int totalFiles = _vm->getSaveFilesCount();
|
||||||
int visibleFiles = _vm->getDisplayInfo().optionSaveFileVisible;
|
int visibleFiles = _vm->getDisplayInfo().optionSaveFileVisible;
|
||||||
|
if (_optionSaveFileSlider == NULL) return; //TODO:REMOVE
|
||||||
int height = _optionSaveFileSlider->height;
|
int height = _optionSaveFileSlider->height;
|
||||||
int sliderHeight;
|
int sliderHeight;
|
||||||
int pos;
|
int pos;
|
||||||
|
@ -750,6 +756,7 @@ void Interface::drawOption() {
|
||||||
Rect rect2;
|
Rect rect2;
|
||||||
PanelButton *panelButton;
|
PanelButton *panelButton;
|
||||||
Point textPoint;
|
Point textPoint;
|
||||||
|
if (_optionSaveFileSlider == NULL) return;//TODO:REMOVE
|
||||||
|
|
||||||
backBuffer = _vm->_gfx->getBackBuffer();
|
backBuffer = _vm->_gfx->getBackBuffer();
|
||||||
|
|
||||||
|
@ -1186,6 +1193,7 @@ void Interface::handleOptionUpdate(const Point& mousePoint) {
|
||||||
bool releasedButton;
|
bool releasedButton;
|
||||||
|
|
||||||
if (_vm->mouseButtonPressed()) {
|
if (_vm->mouseButtonPressed()) {
|
||||||
|
if (_optionSaveFileSlider != NULL) //TODO:REMOVE
|
||||||
if (_optionSaveFileSlider->state > 0) {
|
if (_optionSaveFileSlider->state > 0) {
|
||||||
_optionPanel.calcPanelButtonRect(_optionSaveFileSlider, rect);
|
_optionPanel.calcPanelButtonRect(_optionSaveFileSlider, rect);
|
||||||
|
|
||||||
|
@ -1314,7 +1322,7 @@ void Interface::handleChapterSelectionClick(const Point& mousePoint) {
|
||||||
event.time = 0;
|
event.time = 0;
|
||||||
event.param = _vm->_scene->getScriptModuleNumber();
|
event.param = _vm->_scene->getScriptModuleNumber();
|
||||||
event.param2 = script;
|
event.param2 = script;
|
||||||
event.param3 = kVerbUse; // Action
|
event.param3 = _vm->_script->getVerbType(kVerbUse); // Action
|
||||||
event.param4 = obj; // Object
|
event.param4 = obj; // Object
|
||||||
event.param5 = 0; // With Object
|
event.param5 = 0; // With Object
|
||||||
event.param6 = obj; // Actor
|
event.param6 = obj; // Actor
|
||||||
|
@ -1782,6 +1790,7 @@ void Interface::drawInventory(Surface *backBuffer) {
|
||||||
|
|
||||||
void Interface::setVerbState(int verb, int state) {
|
void Interface::setVerbState(int verb, int state) {
|
||||||
PanelButton * panelButton = getPanelButtonByVerbType(verb);
|
PanelButton * panelButton = getPanelButtonByVerbType(verb);
|
||||||
|
if (panelButton == NULL) return;
|
||||||
if (state == 2) {
|
if (state == 2) {
|
||||||
state = (_mainPanel.currentButton == panelButton) ? 1 : 0;
|
state = (_mainPanel.currentButton == panelButton) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -358,7 +358,7 @@ public:
|
||||||
private:
|
private:
|
||||||
void converseDisplayTextLines(Surface *ds);
|
void converseDisplayTextLines(Surface *ds);
|
||||||
PanelButton *getPanelButtonByVerbType(int verb) {
|
PanelButton *getPanelButtonByVerbType(int verb) {
|
||||||
if ((verb < 0) || (verb >= kVerbTypesMax)) {
|
if ((verb < 0) || (verb >= kVerbTypeIdsMax)) {
|
||||||
error("Interface::getPanelButtonByVerbType wrong verb");
|
error("Interface::getPanelButtonByVerbType wrong verb");
|
||||||
}
|
}
|
||||||
return _verbTypeToPanelButton[verb];
|
return _verbTypeToPanelButton[verb];
|
||||||
|
@ -393,7 +393,7 @@ private:
|
||||||
PanelButton *_converseUpButton;
|
PanelButton *_converseUpButton;
|
||||||
PanelButton *_converseDownButton;
|
PanelButton *_converseDownButton;
|
||||||
SpriteList _scenePortraits;
|
SpriteList _scenePortraits;
|
||||||
PanelButton *_verbTypeToPanelButton[kVerbTypesMax];
|
PanelButton *_verbTypeToPanelButton[kVerbTypeIdsMax];
|
||||||
InterfacePanel _optionPanel;
|
InterfacePanel _optionPanel;
|
||||||
PanelButton * _optionSaveFileSlider;
|
PanelButton * _optionSaveFileSlider;
|
||||||
PanelButton * _optionSaveFilePanel;
|
PanelButton * _optionSaveFilePanel;
|
||||||
|
|
|
@ -260,7 +260,7 @@ int SagaEngine::init(GameDetector &detector) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_interface->converseInit();
|
_interface->converseInit();
|
||||||
_script->setVerb(kVerbWalkTo);
|
_script->setVerb(_script->getVerbType(kVerbWalkTo));
|
||||||
|
|
||||||
_music->setVolume(-1, 1);
|
_music->setVolume(-1, 1);
|
||||||
|
|
||||||
|
@ -417,27 +417,26 @@ const char *SagaEngine::getTextString(int textStringId) {
|
||||||
|
|
||||||
void SagaEngine::getExcuseInfo(int verb, const char *&textString, int &soundResourceId) {
|
void SagaEngine::getExcuseInfo(int verb, const char *&textString, int &soundResourceId) {
|
||||||
textString = NULL;
|
textString = NULL;
|
||||||
switch (verb) {
|
|
||||||
case kVerbPickUp:
|
if (verb == _script->getVerbType(kVerbPickUp)) {
|
||||||
textString = getTextString(kTextICantPickup);
|
textString = getTextString(kTextICantPickup);
|
||||||
soundResourceId = RID_BOAR_VOICE_007;
|
soundResourceId = RID_BOAR_VOICE_007;
|
||||||
break;
|
} else
|
||||||
case kVerbLookAt:
|
if (verb == _script->getVerbType(kVerbLookAt)) {
|
||||||
textString = getTextString(kTextNothingSpecial);
|
textString = getTextString(kTextNothingSpecial);
|
||||||
soundResourceId = RID_BOAR_VOICE_006;
|
soundResourceId = RID_BOAR_VOICE_006;
|
||||||
break;
|
}
|
||||||
case kVerbOpen:
|
if (verb == _script->getVerbType(kVerbOpen)) {
|
||||||
textString = getTextString(kTextNoPlaceToOpen);
|
textString = getTextString(kTextNoPlaceToOpen);
|
||||||
soundResourceId = RID_BOAR_VOICE_000;
|
soundResourceId = RID_BOAR_VOICE_000;
|
||||||
break;
|
}
|
||||||
case kVerbClose:
|
if (verb == _script->getVerbType(kVerbClose)) {
|
||||||
textString = getTextString(kTextNoOpening);
|
textString = getTextString(kTextNoOpening);
|
||||||
soundResourceId = RID_BOAR_VOICE_002;
|
soundResourceId = RID_BOAR_VOICE_002;
|
||||||
break;
|
}
|
||||||
case kVerbUse:
|
if (verb == _script->getVerbType(kVerbUse)) {
|
||||||
textString = getTextString(kTextDontKnow);
|
textString = getTextString(kTextDontKnow);
|
||||||
soundResourceId = RID_BOAR_VOICE_005;
|
soundResourceId = RID_BOAR_VOICE_005;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -620,7 +620,7 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
|
||||||
|
|
||||||
_inGame = true;
|
_inGame = true;
|
||||||
|
|
||||||
_vm->_script->setVerb(kVerbWalkTo);
|
_vm->_script->setVerb(_vm->_script->getVerbType(kVerbWalkTo));
|
||||||
|
|
||||||
if (loadSceneParams->sceneDescriptor == -2) {
|
if (loadSceneParams->sceneDescriptor == -2) {
|
||||||
return;
|
return;
|
||||||
|
@ -859,7 +859,7 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
|
||||||
event.time = 0;
|
event.time = 0;
|
||||||
event.param = _sceneDescription.scriptModuleNumber;
|
event.param = _sceneDescription.scriptModuleNumber;
|
||||||
event.param2 = _sceneDescription.sceneScriptEntrypointNumber;
|
event.param2 = _sceneDescription.sceneScriptEntrypointNumber;
|
||||||
event.param3 = kVerbEnter; // Action
|
event.param3 = _vm->_script->getVerbType(kVerbEnter); // Action
|
||||||
event.param4 = _sceneNumber; // Object
|
event.param4 = _sceneNumber; // Object
|
||||||
event.param5 = loadSceneParams->actorsEntrance; // With Object
|
event.param5 = loadSceneParams->actorsEntrance; // With Object
|
||||||
event.param6 = 0; // Actor
|
event.param6 = 0; // Actor
|
||||||
|
|
189
saga/script.cpp
189
saga/script.cpp
|
@ -40,6 +40,8 @@
|
||||||
|
|
||||||
namespace Saga {
|
namespace Saga {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Initializes the scripting module.
|
// Initializes the scripting module.
|
||||||
// Loads script resource look-up table, initializes script data system
|
// Loads script resource look-up table, initializes script data system
|
||||||
Script::Script(SagaEngine *vm) : _vm(vm) {
|
Script::Script(SagaEngine *vm) : _vm(vm) {
|
||||||
|
@ -58,11 +60,11 @@ Script::Script(SagaEngine *vm) : _vm(vm) {
|
||||||
|
|
||||||
_firstObjectSet = false;
|
_firstObjectSet = false;
|
||||||
_secondObjectNeeded = false;
|
_secondObjectNeeded = false;
|
||||||
_pendingVerb = kVerbNone;
|
_pendingVerb = getVerbType(kVerbNone);
|
||||||
_currentVerb = kVerbNone;
|
_currentVerb = getVerbType(kVerbNone);
|
||||||
_stickyVerb = kVerbWalkTo;
|
_stickyVerb = getVerbType(kVerbWalkTo);
|
||||||
_leftButtonVerb = kVerbNone;
|
_leftButtonVerb = getVerbType(kVerbNone);
|
||||||
_rightButtonVerb = kVerbNone;
|
_rightButtonVerb = getVerbType(kVerbNone);
|
||||||
_pointerObject = ID_NOTHING;
|
_pointerObject = ID_NOTHING;
|
||||||
|
|
||||||
_staticSize = 0;
|
_staticSize = 0;
|
||||||
|
@ -279,7 +281,7 @@ void Script::showVerb(int statusColor) {
|
||||||
const char *object2Name;
|
const char *object2Name;
|
||||||
char statusString[STATUS_TEXT_LEN];
|
char statusString[STATUS_TEXT_LEN];
|
||||||
|
|
||||||
if (_leftButtonVerb == kVerbNone) {
|
if (_leftButtonVerb == getVerbType(kVerbNone)) {
|
||||||
_vm->_interface->setStatusText("");
|
_vm->_interface->setStatusText("");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -306,11 +308,11 @@ void Script::showVerb(int statusColor) {
|
||||||
object2Name = "";
|
object2Name = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_leftButtonVerb == kVerbGive) {
|
if (_leftButtonVerb == getVerbType(kVerbGive)) {
|
||||||
snprintf(statusString, STATUS_TEXT_LEN, _vm->getTextString(kTextGiveTo), object1Name, object2Name);
|
snprintf(statusString, STATUS_TEXT_LEN, _vm->getTextString(kTextGiveTo), object1Name, object2Name);
|
||||||
_vm->_interface->setStatusText(statusString, statusColor);
|
_vm->_interface->setStatusText(statusString, statusColor);
|
||||||
} else {
|
} else {
|
||||||
if (_leftButtonVerb == kVerbUse) {
|
if (_leftButtonVerb == getVerbType(kVerbUse)) {
|
||||||
snprintf(statusString, STATUS_TEXT_LEN, _vm->getTextString(kTextUseWidth), object1Name, object2Name);
|
snprintf(statusString, STATUS_TEXT_LEN, _vm->getTextString(kTextUseWidth), object1Name, object2Name);
|
||||||
_vm->_interface->setStatusText(statusString, statusColor);
|
_vm->_interface->setStatusText(statusString, statusColor);
|
||||||
} else {
|
} else {
|
||||||
|
@ -320,6 +322,70 @@ void Script::showVerb(int statusColor) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Script::getVerbType(VerbTypes verbType) {
|
||||||
|
if (_vm->getGameType() == GType_ITE) {
|
||||||
|
switch (verbType) {
|
||||||
|
case kVerbNone:
|
||||||
|
return kVerbITENone;
|
||||||
|
case kVerbWalkTo:
|
||||||
|
return kVerbITEWalkTo;
|
||||||
|
case kVerbGive:
|
||||||
|
return kVerbITEGive;
|
||||||
|
case kVerbUse:
|
||||||
|
return kVerbITEUse;
|
||||||
|
case kVerbEnter:
|
||||||
|
return kVerbITEEnter;
|
||||||
|
case kVerbLookAt:
|
||||||
|
return kVerbITELookAt;
|
||||||
|
case kVerbPickUp:
|
||||||
|
return kVerbITEPickUp;
|
||||||
|
case kVerbOpen:
|
||||||
|
return kVerbITEOpen;
|
||||||
|
case kVerbClose:
|
||||||
|
return kVerbITEClose;
|
||||||
|
case kVerbTalkTo:
|
||||||
|
return kVerbITETalkTo;
|
||||||
|
case kVerbWalkOnly:
|
||||||
|
return kVerbITEWalkOnly;
|
||||||
|
case kVerbLookOnly:
|
||||||
|
return kVerbITELookOnly;
|
||||||
|
case kVerbOptions:
|
||||||
|
return kVerbITEOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switch (verbType) {
|
||||||
|
case kVerbNone:
|
||||||
|
return kVerbIHNMNone;
|
||||||
|
case kVerbWalkTo:
|
||||||
|
return kVerbIHNMWalk;
|
||||||
|
case kVerbGive:
|
||||||
|
return kVerbIHNMGive;
|
||||||
|
case kVerbUse:
|
||||||
|
return kVerbIHNMUse;
|
||||||
|
case kVerbEnter:
|
||||||
|
return kVerbIHNMEnter;
|
||||||
|
case kVerbLookAt:
|
||||||
|
return kVerbIHNMLookAt;
|
||||||
|
case kVerbPickUp:
|
||||||
|
return kVerbIHNMTake;
|
||||||
|
case kVerbOpen:
|
||||||
|
return -2;
|
||||||
|
case kVerbClose:
|
||||||
|
return -2;
|
||||||
|
case kVerbTalkTo:
|
||||||
|
return kVerbIHNMTalkTo;
|
||||||
|
case kVerbWalkOnly:
|
||||||
|
return kVerbIHNMWalkOnly;
|
||||||
|
case kVerbLookOnly:
|
||||||
|
return kVerbIHNMLookOnly;
|
||||||
|
case kVerbOptions:
|
||||||
|
return kVerbIHNMOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
error("Script::getVerbType() unknown verb type %d", verbType);
|
||||||
|
}
|
||||||
|
|
||||||
void Script::setVerb(int verb) {
|
void Script::setVerb(int verb) {
|
||||||
_pendingObject[0] = ID_NOTHING;
|
_pendingObject[0] = ID_NOTHING;
|
||||||
_currentObject[0] = ID_NOTHING;
|
_currentObject[0] = ID_NOTHING;
|
||||||
|
@ -343,10 +409,10 @@ void Script::setLeftButtonVerb(int verb) {
|
||||||
_currentVerb = _leftButtonVerb = verb;
|
_currentVerb = _leftButtonVerb = verb;
|
||||||
|
|
||||||
if ((_currentVerb != oldVerb) && (_vm->_interface->getMode() == kPanelMain)){
|
if ((_currentVerb != oldVerb) && (_vm->_interface->getMode() == kPanelMain)){
|
||||||
if (oldVerb > kVerbNone)
|
if (oldVerb > getVerbType(kVerbNone))
|
||||||
_vm->_interface->setVerbState(oldVerb, 2);
|
_vm->_interface->setVerbState(oldVerb, 2);
|
||||||
|
|
||||||
if (_currentVerb > kVerbNone)
|
if (_currentVerb > getVerbType(kVerbNone))
|
||||||
_vm->_interface->setVerbState(_currentVerb, 2);
|
_vm->_interface->setVerbState(_currentVerb, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -357,10 +423,10 @@ void Script::setRightButtonVerb(int verb) {
|
||||||
_rightButtonVerb = verb;
|
_rightButtonVerb = verb;
|
||||||
|
|
||||||
if ((_rightButtonVerb != oldVerb) && (_vm->_interface->getMode() == kPanelMain)){
|
if ((_rightButtonVerb != oldVerb) && (_vm->_interface->getMode() == kPanelMain)){
|
||||||
if (oldVerb > kVerbNone)
|
if (oldVerb > getVerbType(kVerbNone))
|
||||||
_vm->_interface->setVerbState(oldVerb, 2);
|
_vm->_interface->setVerbState(oldVerb, 2);
|
||||||
|
|
||||||
if (_rightButtonVerb > kVerbNone)
|
if (_rightButtonVerb > getVerbType(kVerbNone))
|
||||||
_vm->_interface->setVerbState(_rightButtonVerb, 2);
|
_vm->_interface->setVerbState(_rightButtonVerb, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -376,7 +442,7 @@ void Script::doVerb() {
|
||||||
|
|
||||||
objectType = objectTypeId(_pendingObject[0]);
|
objectType = objectTypeId(_pendingObject[0]);
|
||||||
|
|
||||||
if (_pendingVerb == kVerbGive) {
|
if (_pendingVerb == getVerbType(kVerbGive)) {
|
||||||
scriptEntrypointNumber = _vm->_actor->getObjectScriptEntrypointNumber(_pendingObject[1]);
|
scriptEntrypointNumber = _vm->_actor->getObjectScriptEntrypointNumber(_pendingObject[1]);
|
||||||
if (_vm->_actor->getObjectFlags(_pendingObject[1]) & (kFollower|kProtagonist|kExtended)) {
|
if (_vm->_actor->getObjectFlags(_pendingObject[1]) & (kFollower|kProtagonist|kExtended)) {
|
||||||
scriptModuleNumber = 0;
|
scriptModuleNumber = 0;
|
||||||
|
@ -384,7 +450,7 @@ void Script::doVerb() {
|
||||||
scriptModuleNumber = _vm->_scene->getScriptModuleNumber();
|
scriptModuleNumber = _vm->_scene->getScriptModuleNumber();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (_pendingVerb == kVerbUse) {
|
if (_pendingVerb == getVerbType(kVerbUse)) {
|
||||||
if ((objectTypeId(_pendingObject[1]) > kGameObjectNone) && (objectType < objectTypeId(_pendingObject[1]))) {
|
if ((objectTypeId(_pendingObject[1]) > kGameObjectNone) && (objectType < objectTypeId(_pendingObject[1]))) {
|
||||||
SWAP(_pendingObject[0], _pendingObject[1]);
|
SWAP(_pendingObject[0], _pendingObject[1]);
|
||||||
objectType = objectTypeId(_pendingObject[0]);
|
objectType = objectTypeId(_pendingObject[0]);
|
||||||
|
@ -436,11 +502,11 @@ void Script::doVerb() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_currentVerb == kVerbWalkTo) || (_currentVerb == kVerbLookAt)) {
|
if ((_currentVerb == getVerbType(kVerbWalkTo)) || (_currentVerb == getVerbType(kVerbLookAt))) {
|
||||||
_stickyVerb = _currentVerb;
|
_stickyVerb = _currentVerb;
|
||||||
}
|
}
|
||||||
|
|
||||||
_pendingVerb = kVerbNone;
|
_pendingVerb = getVerbType(kVerbNone);
|
||||||
_currentObject[0] = _currentObject[1] = ID_NOTHING;
|
_currentObject[0] = _currentObject[1] = ID_NOTHING;
|
||||||
setLeftButtonVerb(_stickyVerb);
|
setLeftButtonVerb(_stickyVerb);
|
||||||
|
|
||||||
|
@ -458,7 +524,7 @@ void Script::hitObject(bool leftButton) {
|
||||||
int verb;
|
int verb;
|
||||||
verb = leftButton ? _leftButtonVerb : _rightButtonVerb;
|
verb = leftButton ? _leftButtonVerb : _rightButtonVerb;
|
||||||
|
|
||||||
if (verb > kVerbNone) {
|
if (verb > getVerbType(kVerbNone)) {
|
||||||
if (_firstObjectSet) {
|
if (_firstObjectSet) {
|
||||||
if (_secondObjectNeeded) {
|
if (_secondObjectNeeded) {
|
||||||
_pendingObject[0] = _currentObject[0];
|
_pendingObject[0] = _currentObject[0];
|
||||||
|
@ -466,7 +532,7 @@ void Script::hitObject(bool leftButton) {
|
||||||
_pendingVerb = verb;
|
_pendingVerb = verb;
|
||||||
|
|
||||||
_leftButtonVerb = verb;
|
_leftButtonVerb = verb;
|
||||||
if (_pendingVerb > kVerbNone)
|
if (_pendingVerb > getVerbType(kVerbNone))
|
||||||
showVerb(kITEColorBrightWhite);
|
showVerb(kITEColorBrightWhite);
|
||||||
else
|
else
|
||||||
showVerb();
|
showVerb();
|
||||||
|
@ -476,10 +542,10 @@ void Script::hitObject(bool leftButton) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (verb == kVerbGive) {
|
if (verb == getVerbType(kVerbGive)) {
|
||||||
_secondObjectNeeded = true;
|
_secondObjectNeeded = true;
|
||||||
} else {
|
} else {
|
||||||
if (verb == kVerbUse) {
|
if (verb == getVerbType(kVerbUse)) {
|
||||||
|
|
||||||
if (_currentObjectFlags[0] & kObjUseWith) {
|
if (_currentObjectFlags[0] & kObjUseWith) {
|
||||||
_secondObjectNeeded = true;
|
_secondObjectNeeded = true;
|
||||||
|
@ -500,7 +566,7 @@ void Script::hitObject(bool leftButton) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_leftButtonVerb = verb;
|
_leftButtonVerb = verb;
|
||||||
if (_pendingVerb > kVerbNone)
|
if (_pendingVerb > getVerbType(kVerbNone))
|
||||||
showVerb(kITEColorBrightWhite);
|
showVerb(kITEColorBrightWhite);
|
||||||
else
|
else
|
||||||
showVerb();
|
showVerb();
|
||||||
|
@ -521,8 +587,8 @@ void Script::playfieldClick(const Point& mousePoint, bool leftButton) {
|
||||||
(_vm->_actor->_protagonist->_currentAction != kActionWalkToPoint)) {
|
(_vm->_actor->_protagonist->_currentAction != kActionWalkToPoint)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_pendingVerb > kVerbNone) {
|
if (_pendingVerb > getVerbType(kVerbNone)) {
|
||||||
setLeftButtonVerb(kVerbWalkTo);
|
setLeftButtonVerb(getVerbType(kVerbWalkTo));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_pointerObject != ID_NOTHING) {
|
if (_pointerObject != ID_NOTHING) {
|
||||||
|
@ -530,7 +596,7 @@ void Script::playfieldClick(const Point& mousePoint, bool leftButton) {
|
||||||
} else {
|
} else {
|
||||||
_pendingObject[0] = ID_NOTHING;
|
_pendingObject[0] = ID_NOTHING;
|
||||||
_pendingObject[1] = ID_NOTHING;
|
_pendingObject[1] = ID_NOTHING;
|
||||||
_pendingVerb = kVerbWalkTo;
|
_pendingVerb = getVerbType(kVerbWalkTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -547,7 +613,7 @@ void Script::playfieldClick(const Point& mousePoint, bool leftButton) {
|
||||||
if (objectTypeId(_pendingObject[0]) == kGameObjectHitZone) {
|
if (objectTypeId(_pendingObject[0]) == kGameObjectHitZone) {
|
||||||
hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(_pendingObject[0]));
|
hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(_pendingObject[0]));
|
||||||
} else {
|
} else {
|
||||||
if ((_pendingVerb == kVerbUse) && (objectTypeId(_pendingObject[1]) == kGameObjectHitZone)) {
|
if ((_pendingVerb == getVerbType(kVerbUse)) && (objectTypeId(_pendingObject[1]) == kGameObjectHitZone)) {
|
||||||
hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(_pendingObject[1]));
|
hitZone = _vm->_scene->_objectMap->getHitZone(objectIdToIndex(_pendingObject[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -577,27 +643,25 @@ void Script::playfieldClick(const Point& mousePoint, bool leftButton) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (_pendingVerb) {
|
if ((_pendingVerb == getVerbType(kVerbWalkTo)) ||
|
||||||
case kVerbWalkTo:
|
(_pendingVerb == getVerbType(kVerbPickUp)) ||
|
||||||
case kVerbPickUp:
|
(_pendingVerb == getVerbType(kVerbOpen)) ||
|
||||||
case kVerbOpen:
|
(_pendingVerb == getVerbType(kVerbClose)) ||
|
||||||
case kVerbClose:
|
(_pendingVerb == getVerbType(kVerbUse))) {
|
||||||
case kVerbUse:
|
|
||||||
_vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
|
_vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
|
||||||
break;
|
} else {
|
||||||
|
if (_pendingVerb == getVerbType(kVerbLookAt)) {
|
||||||
case kVerbLookAt:
|
|
||||||
if (objectTypeId(_pendingObject[0]) != kGameObjectActor ) {
|
if (objectTypeId(_pendingObject[0]) != kGameObjectActor ) {
|
||||||
_vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
|
_vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
|
||||||
} else {
|
} else {
|
||||||
doVerb();
|
doVerb();
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
|
if ((_pendingVerb == getVerbType(kVerbTalkTo)) ||
|
||||||
case kVerbTalkTo:
|
(_pendingVerb == getVerbType(kVerbGive))) {
|
||||||
case kVerbGive:
|
|
||||||
doVerb();
|
doVerb();
|
||||||
break;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -617,7 +681,7 @@ void Script::whichObject(const Point& mousePoint) {
|
||||||
objectId = ID_NOTHING;
|
objectId = ID_NOTHING;
|
||||||
objectFlags = 0;
|
objectFlags = 0;
|
||||||
_leftButtonVerb = _currentVerb;
|
_leftButtonVerb = _currentVerb;
|
||||||
newRightButtonVerb = kVerbNone;
|
newRightButtonVerb = getVerbType(kVerbNone);
|
||||||
|
|
||||||
if (_vm->_actor->_protagonist->_currentAction != kActionWalkDir) {
|
if (_vm->_actor->_protagonist->_currentAction != kActionWalkDir) {
|
||||||
if (_vm->_scene->getHeight() >= mousePoint.y) {
|
if (_vm->_scene->getHeight() >= mousePoint.y) {
|
||||||
|
@ -627,9 +691,9 @@ void Script::whichObject(const Point& mousePoint) {
|
||||||
if (objectTypeId(newObjectId) == kGameObjectObject) {
|
if (objectTypeId(newObjectId) == kGameObjectObject) {
|
||||||
objectId = newObjectId;
|
objectId = newObjectId;
|
||||||
objectFlags = 0;
|
objectFlags = 0;
|
||||||
newRightButtonVerb = kVerbLookAt;
|
newRightButtonVerb = getVerbType(kVerbLookAt);
|
||||||
|
|
||||||
if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && _firstObjectSet)) {
|
if ((_currentVerb == getVerbType(kVerbTalkTo)) || ((_currentVerb == getVerbType(kVerbGive)) && _firstObjectSet)) {
|
||||||
objectId = ID_NOTHING;
|
objectId = ID_NOTHING;
|
||||||
newObjectId = ID_NOTHING;
|
newObjectId = ID_NOTHING;
|
||||||
}
|
}
|
||||||
|
@ -637,13 +701,13 @@ void Script::whichObject(const Point& mousePoint) {
|
||||||
actor = _vm->_actor->getActor(newObjectId);
|
actor = _vm->_actor->getActor(newObjectId);
|
||||||
objectId = newObjectId;
|
objectId = newObjectId;
|
||||||
objectFlags = kObjUseWith;
|
objectFlags = kObjUseWith;
|
||||||
newRightButtonVerb = kVerbTalkTo;
|
newRightButtonVerb = getVerbType(kVerbTalkTo);
|
||||||
|
|
||||||
if ((_currentVerb == kVerbPickUp) ||
|
if ((_currentVerb == getVerbType(kVerbPickUp)) ||
|
||||||
(_currentVerb == kVerbOpen) ||
|
(_currentVerb == getVerbType(kVerbOpen)) ||
|
||||||
(_currentVerb == kVerbClose) ||
|
(_currentVerb == getVerbType(kVerbClose)) ||
|
||||||
((_currentVerb == kVerbGive) && !_firstObjectSet) ||
|
((_currentVerb == getVerbType(kVerbGive)) && !_firstObjectSet) ||
|
||||||
((_currentVerb == kVerbUse) && !(actor->_flags & kFollower))) {
|
((_currentVerb == getVerbType(kVerbUse)) && !(actor->_flags & kFollower))) {
|
||||||
objectId = ID_NOTHING;
|
objectId = ID_NOTHING;
|
||||||
newObjectId = ID_NOTHING;
|
newObjectId = ID_NOTHING;
|
||||||
}
|
}
|
||||||
|
@ -668,38 +732,41 @@ void Script::whichObject(const Point& mousePoint) {
|
||||||
objectFlags = 0;
|
objectFlags = 0;
|
||||||
newRightButtonVerb = hitZone->getRightButtonVerb() & 0x7f;
|
newRightButtonVerb = hitZone->getRightButtonVerb() & 0x7f;
|
||||||
|
|
||||||
if (newRightButtonVerb == kVerbWalkOnly) {
|
if (_vm->getGameType() == GType_ITE) {
|
||||||
|
|
||||||
|
if (newRightButtonVerb == getVerbType(kVerbWalkOnly)) {
|
||||||
if (_firstObjectSet) {
|
if (_firstObjectSet) {
|
||||||
objectId = ID_NOTHING;
|
objectId = ID_NOTHING;
|
||||||
} else {
|
} else {
|
||||||
newRightButtonVerb = _leftButtonVerb = kVerbWalkTo;
|
newRightButtonVerb = _leftButtonVerb = getVerbType(kVerbWalkTo);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (newRightButtonVerb == kVerbLookOnly) {
|
if (newRightButtonVerb == getVerbType(kVerbLookOnly)) {
|
||||||
if (_firstObjectSet) {
|
if (_firstObjectSet) {
|
||||||
objectId = ID_NOTHING;
|
objectId = ID_NOTHING;
|
||||||
} else {
|
} else {
|
||||||
newRightButtonVerb = _leftButtonVerb = kVerbLookAt;
|
newRightButtonVerb = _leftButtonVerb = getVerbType(kVerbLookAt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newRightButtonVerb >= kVerbOptions) {
|
if (newRightButtonVerb >= getVerbType(kVerbOptions)) {
|
||||||
newRightButtonVerb = kVerbNone;
|
newRightButtonVerb = getVerbType(kVerbNone);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && _firstObjectSet)) {
|
if ((_currentVerb == getVerbType(kVerbTalkTo)) || ((_currentVerb == getVerbType(kVerbGive)) && _firstObjectSet)) {
|
||||||
objectId = ID_NOTHING;
|
objectId = ID_NOTHING;
|
||||||
newObjectId = ID_NOTHING;
|
newObjectId = ID_NOTHING;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_leftButtonVerb == kVerbUse) && (hitZone->getRightButtonVerb() & 0x80)) {
|
if ((_leftButtonVerb == getVerbType(kVerbUse)) && (hitZone->getRightButtonVerb() & 0x80)) {
|
||||||
objectFlags = kObjUseWith;
|
objectFlags = kObjUseWith;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && _firstObjectSet)) {
|
if ((_currentVerb == getVerbType(kVerbTalkTo)) || ((_currentVerb == getVerbType(kVerbGive)) && _firstObjectSet)) {
|
||||||
// no way
|
// no way
|
||||||
} else {
|
} else {
|
||||||
panelButton = _vm->_interface->inventoryHitTest(mousePoint);
|
panelButton = _vm->_interface->inventoryHitTest(mousePoint);
|
||||||
|
@ -707,7 +774,7 @@ void Script::whichObject(const Point& mousePoint) {
|
||||||
objectId = _vm->_interface->getInventoryContentByPanelButton(panelButton);
|
objectId = _vm->_interface->getInventoryContentByPanelButton(panelButton);
|
||||||
if (objectId != 0) {
|
if (objectId != 0) {
|
||||||
obj = _vm->_actor->getObj(objectId);
|
obj = _vm->_actor->getObj(objectId);
|
||||||
newRightButtonVerb = kVerbLookAt;
|
newRightButtonVerb = getVerbType(kVerbLookAt);
|
||||||
if (obj->_interactBits & kObjUseWith) {
|
if (obj->_interactBits & kObjUseWith) {
|
||||||
objectFlags = kObjUseWith;
|
objectFlags = kObjUseWith;
|
||||||
}
|
}
|
||||||
|
@ -715,8 +782,8 @@ void Script::whichObject(const Point& mousePoint) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_currentVerb == kVerbPickUp) || (_currentVerb == kVerbTalkTo) || (_currentVerb == kVerbWalkTo)) {
|
if ((_currentVerb == getVerbType(kVerbPickUp)) || (_currentVerb == getVerbType(kVerbTalkTo)) || (_currentVerb == getVerbType(kVerbWalkTo))) {
|
||||||
_leftButtonVerb = kVerbLookAt;
|
_leftButtonVerb = getVerbType(kVerbLookAt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -725,7 +792,7 @@ void Script::whichObject(const Point& mousePoint) {
|
||||||
_pointerObject = objectId;
|
_pointerObject = objectId;
|
||||||
_currentObject[_firstObjectSet ? 1 : 0] = objectId;
|
_currentObject[_firstObjectSet ? 1 : 0] = objectId;
|
||||||
_currentObjectFlags[_firstObjectSet ? 1 : 0] = objectFlags;
|
_currentObjectFlags[_firstObjectSet ? 1 : 0] = objectFlags;
|
||||||
if (_pendingVerb == kVerbNone) {
|
if (_pendingVerb == getVerbType(kVerbNone)) {
|
||||||
showVerb();
|
showVerb();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,30 +55,26 @@ enum AddressTypes {
|
||||||
kAddressIndex = 7 // index from id*/
|
kAddressIndex = 7 // index from id*/
|
||||||
};
|
};
|
||||||
|
|
||||||
enum VerbTypes {
|
enum VerbTypeIds {
|
||||||
kVerbNone = 0,
|
kVerbITENone = 0,
|
||||||
kVerbPickUp = 1,
|
kVerbITEPickUp = 1,
|
||||||
kVerbLookAt = 2,
|
kVerbITELookAt = 2,
|
||||||
kVerbWalkTo = 3,
|
kVerbITEWalkTo = 3,
|
||||||
kVerbTalkTo = 4,
|
kVerbITETalkTo = 4,
|
||||||
kVerbOpen = 5,
|
kVerbITEOpen = 5,
|
||||||
kVerbClose = 6,
|
kVerbITEClose = 6,
|
||||||
kVerbGive = 7,
|
kVerbITEGive = 7,
|
||||||
kVerbUse = 8,
|
kVerbITEUse = 8,
|
||||||
kVerbOptions = 9,
|
kVerbITEOptions = 9,
|
||||||
kVerbEnter = 10,
|
kVerbITEEnter = 10,
|
||||||
kVerbLeave = 11,
|
kVerbITELeave = 11,
|
||||||
kVerbBegin = 12,
|
kVerbITEBegin = 12,
|
||||||
kVerbWalkOnly = 13,
|
kVerbITEWalkOnly = 13,
|
||||||
kVerbLookOnly = 14,
|
kVerbITELookOnly = 14,
|
||||||
|
|
||||||
|
|
||||||
//additional IHNM
|
|
||||||
kVerbTake = 15,
|
|
||||||
kVerbSwallow = 16,
|
|
||||||
kVerbPush = 17,
|
|
||||||
/*
|
|
||||||
kVerbIHNMNone = 0,
|
kVerbIHNMNone = 0,
|
||||||
kVerbIHNMWalkTo = 1,
|
kVerbIHNMWalk = 1,
|
||||||
kVerbIHNMLookAt = 2,
|
kVerbIHNMLookAt = 2,
|
||||||
kVerbIHNMTake = 3,
|
kVerbIHNMTake = 3,
|
||||||
kVerbIHNMUse = 4,
|
kVerbIHNMUse = 4,
|
||||||
|
@ -86,8 +82,30 @@ enum VerbTypes {
|
||||||
kVerbIHNMSwallow = 6,
|
kVerbIHNMSwallow = 6,
|
||||||
kVerbIHNMGive = 7,
|
kVerbIHNMGive = 7,
|
||||||
kVerbIHNMPush = 8,
|
kVerbIHNMPush = 8,
|
||||||
*/
|
kVerbIHNMOptions = 9,
|
||||||
kVerbTypesMax = kVerbPush + 1
|
kVerbIHNMEnter = 10,
|
||||||
|
kVerbIHNMLeave = 11,
|
||||||
|
kVerbIHNMBegin = 12,
|
||||||
|
kVerbIHNMWalkOnly = 13,
|
||||||
|
kVerbIHNMLookOnly = 14,
|
||||||
|
|
||||||
|
kVerbTypeIdsMax = kVerbITELookOnly + 1
|
||||||
|
};
|
||||||
|
|
||||||
|
enum VerbTypes {
|
||||||
|
kVerbNone,
|
||||||
|
kVerbWalkTo,
|
||||||
|
kVerbGive,
|
||||||
|
kVerbUse,
|
||||||
|
kVerbEnter,
|
||||||
|
kVerbLookAt,
|
||||||
|
kVerbPickUp,
|
||||||
|
kVerbOpen,
|
||||||
|
kVerbClose,
|
||||||
|
kVerbTalkTo,
|
||||||
|
kVerbWalkOnly,
|
||||||
|
kVerbLookOnly,
|
||||||
|
kVerbOptions
|
||||||
};
|
};
|
||||||
|
|
||||||
#define STHREAD_TIMESLICE 8
|
#define STHREAD_TIMESLICE 8
|
||||||
|
@ -379,15 +397,16 @@ public:
|
||||||
void setRightButtonVerb(int verb);
|
void setRightButtonVerb(int verb);
|
||||||
int getRightButtonVerb() const { return _rightButtonVerb; }
|
int getRightButtonVerb() const { return _rightButtonVerb; }
|
||||||
void setNonPlayfieldVerb() {
|
void setNonPlayfieldVerb() {
|
||||||
setRightButtonVerb(kVerbNone);
|
setRightButtonVerb(getVerbType(kVerbNone));
|
||||||
_pointerObject = ID_NOTHING;
|
_pointerObject = ID_NOTHING;
|
||||||
_currentObject[_firstObjectSet ? 1 : 0] = ID_NOTHING;
|
_currentObject[_firstObjectSet ? 1 : 0] = ID_NOTHING;
|
||||||
}
|
}
|
||||||
void setNoPendingVerb() {
|
void setNoPendingVerb() {
|
||||||
_pendingVerb = kVerbNone;
|
_pendingVerb = getVerbType(kVerbNone);
|
||||||
_currentObject[0] = _currentObject[0] = ID_NOTHING;
|
_currentObject[0] = _currentObject[0] = ID_NOTHING;
|
||||||
setPointerVerb();
|
setPointerVerb();
|
||||||
}
|
}
|
||||||
|
int getVerbType(VerbTypes verbType);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// When reading or writing data to the common buffer, we have to use a
|
// When reading or writing data to the common buffer, we have to use a
|
||||||
|
|
|
@ -566,7 +566,7 @@ void Script::sfScriptGotoScene(SCRIPTFUNC_PARAMS) {
|
||||||
_vm->_scene->changeScene(sceneNumber, entrance, (sceneNumber == ITE_SCENE_ENDCREDIT1) ? kTransitionFade : kTransitionNoFade);
|
_vm->_scene->changeScene(sceneNumber, entrance, (sceneNumber == ITE_SCENE_ENDCREDIT1) ? kTransitionFade : kTransitionNoFade);
|
||||||
|
|
||||||
//TODO: placard stuff
|
//TODO: placard stuff
|
||||||
_pendingVerb = kVerbNone;
|
_pendingVerb = _vm->_script->getVerbType(kVerbNone);
|
||||||
_currentObject[0] = _currentObject[1] = ID_NOTHING;
|
_currentObject[0] = _currentObject[1] = ID_NOTHING;
|
||||||
showVerb();
|
showVerb();
|
||||||
}
|
}
|
||||||
|
@ -1108,7 +1108,7 @@ void Script::sfPlaceActor(SCRIPTFUNC_PARAMS) {
|
||||||
actor->_facingDirection = actor->_actionDirection = actorDirection;
|
actor->_facingDirection = actor->_actionDirection = actorDirection;
|
||||||
|
|
||||||
if (!actor->_frames)
|
if (!actor->_frames)
|
||||||
_vm->_actor->loadActorResources(actor);
|
_vm->_actor->loadActorResources(actor); //? is not it already loaded ?
|
||||||
|
|
||||||
if (frameType >= 0) {
|
if (frameType >= 0) {
|
||||||
frameRange = _vm->_actor->getActorFrameRange(actorId, frameType);
|
frameRange = _vm->_actor->getActorFrameRange(actorId, frameType);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue