Add support for skipping introduction in Elivra 1/2/WW

svn-id: r24131
This commit is contained in:
Travis Howell 2006-10-06 04:51:22 +00:00
parent c22289416f
commit 7f99566784
5 changed files with 52 additions and 18 deletions

View File

@ -1768,9 +1768,21 @@ void AGOSEngine::waitForSync(uint a) {
}
}
if (_exitCutscene) {
if (getBitFlag(9)) {
endCutscene();
break;
if (getGameType() == GType_ELVIRA) {
if (_variableArray[105] == 0) {
_variableArray[105] = 255;
break;
}
} else if (getGameType() == GType_ELVIRA2 || getGameType() == GType_WW) {
if (_vgaWaitFor == 51) {
setBitFlag(244, 1);
break;
}
} else {
if (getBitFlag(9)) {
endCutscene();
break;
}
}
}
processSpecialKeys();

View File

@ -1042,6 +1042,8 @@ public:
void oww_textMenu();
void oww_ifDoorOpen();
void oww_opcode184();
void oww_opcode185();
void oww_opcode186();
void oww_opcode187();
// Opcodes, Simon 1 only

View File

@ -245,12 +245,12 @@ static const char *const ww_opcode_name_table[256] = {
/* 172 */
NULL,
NULL,
NULL,
"|LOCK_ZONES",
"W|UNK_174",
"|getDollar2",
/* 176 */
"|UNLOCK_ZONES",
"BBI|SCREEN_TEXT_POBJ",
"WWBB|GETPATHPOSN",
"IWBB|UNK_176",
"B|UNK_177",
"B|UNK_178",
"IWWJ|IS_ADJ_NOUN",
/* 180 */
"B|SET_BIT2",
@ -258,10 +258,14 @@ static const char *const ww_opcode_name_table[256] = {
"BJ|IS_BIT2_CLEAR",
"BJ|IS_BIT2_SET",
/* 184 */
"W|UNLOAD_ZONE",
"W|LOAD_SOUND_FILES",
"|UNFREEZE_ZONES",
"|FADE_TO_BLACK",
"T|UNK_184",
"T|UNK_185",
"B|UNK_186",
"|UNK_187",
/* 188 */
"I|UNK_188",
"|UNK_189",
"|UNK_190",
};
static const char *const simon1dos_opcode_name_table[256] = {

View File

@ -379,6 +379,8 @@ void AGOSEngine::setupWaxworksOpcodes(OpcodeProc *op) {
op[182] = &AGOSEngine::o_b2Zero;
op[183] = &AGOSEngine::o_b2NotZero;
op[184] = &AGOSEngine::oww_opcode184;
op[185] = &AGOSEngine::oww_opcode185;
op[186] = &AGOSEngine::oww_opcode186;
op[187] = &AGOSEngine::oww_opcode187;
// Code difference, check if triggered
@ -399,8 +401,6 @@ void AGOSEngine::setupWaxworksOpcodes(OpcodeProc *op) {
op[176] = NULL;
op[177] = NULL;
op[178] = NULL;
op[185] = NULL;
op[186] = NULL;
op[188] = NULL;
op[189] = NULL;
op[190] = NULL;
@ -1106,6 +1106,10 @@ void AGOSEngine::o_loadZone() {
uint vga_res = getVarOrWord();
_lockWord |= 0x80;
vc27_resetSprite();
vc29_stopAllSounds();
loadZone(vga_res);
_lockWord &= ~0x80;
}
@ -1870,9 +1874,9 @@ void AGOSEngine::oww_whereTo() {
int16 f = getVarOrByte();
if (f == 1)
_subjectItem = _itemArrayPtr[getExitOf(i, d)];
_subjectItem = derefItem(getExitOf(i, d));
else
_objectItem = _itemArrayPtr[getExitOf(i, d)];
_objectItem = derefItem(getExitOf(i, d));
}
void AGOSEngine::oww_menu() {
@ -1901,6 +1905,14 @@ void AGOSEngine::oww_opcode184() {
printf("%s\n", getStringPtrByID(getNextStringID()));
}
void AGOSEngine::oww_opcode185() {
printf("%s\n", getStringPtrByID(getNextStringID()));
}
void AGOSEngine::oww_opcode186() {
printf("%s\n", getStringPtrByID(_longText[getVarOrByte()]));
}
void AGOSEngine::oww_opcode187() {
}

View File

@ -245,8 +245,12 @@ bool AGOSEngine::loadRoomItems(uint item) {
}
while ((i = in.readUint16BE()) != 0) {
_itemArrayPtr[i] = (Item *)allocateItem(sizeof(Item));
readItemFromGamePc(&in, _itemArrayPtr[i]);
_itemArrayPtr[i + 1] = (Item *)allocateItem(sizeof(Item));
readItemFromGamePc(&in, _itemArrayPtr[i + 1]);
Item *tmp = _itemArrayPtr[i + 1];
tmp->child = 0;
tmp->parent = 0;
}
in.close();