[Scummvm-cvs-logs] SF.net SVN: scummvm: [24161] scummvm/trunk/engines/agos
kirben at users.sourceforge.net
kirben at users.sourceforge.net
Sat Oct 7 10:28:19 CEST 2006
Revision: 24161
http://svn.sourceforge.net/scummvm/?rev=24161&view=rev
Author: kirben
Date: 2006-10-07 01:28:06 -0700 (Sat, 07 Oct 2006)
Log Message:
-----------
Add more code differences in Elvira 1
Modified Paths:
--------------
scummvm/trunk/engines/agos/agos.cpp
scummvm/trunk/engines/agos/agos.h
scummvm/trunk/engines/agos/debug.h
scummvm/trunk/engines/agos/items.cpp
scummvm/trunk/engines/agos/verb.cpp
Modified: scummvm/trunk/engines/agos/agos.cpp
===================================================================
--- scummvm/trunk/engines/agos/agos.cpp 2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/agos.cpp 2006-10-07 08:28:06 UTC (rev 24161)
@@ -1380,11 +1380,13 @@
void AGOSEngine::hitarea_stuff_helper() {
time_t cur_time;
- if (getGameType() == GType_SIMON2 || getGameType() == GType_FF || getGameType() == GType_PP) {
+ if (getGameType() == GType_SIMON2 || getGameType() == GType_FF ||
+ getGameType() == GType_PP) {
if (_variableArray[254] || _variableArray[249]) {
hitarea_stuff_helper_2();
}
- } else {
+ } else if (getGameType() == GType_ELVIRA2 || getGameType() == GType_WW ||
+ getGameType() == GType_SIMON1) {
uint subr_id = (uint16)_variableArray[254];
if (subr_id != 0) {
Subroutine *sub = getSubroutineByID(subr_id);
Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h 2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/agos.h 2006-10-07 08:28:06 UTC (rev 24161)
@@ -1054,6 +1054,7 @@
void oe1_pobj();
void oe1_pName();
void oe1_pcName();
+ void oe1_cFlag();
void oe1_means();
void oe1_setUserItem();
void oe1_getUserItem();
@@ -1061,9 +1062,12 @@
void oe1_findMaster();
void oe1_nextMaster();
void oe1_setTime();
+ void oe1_bitClear();
+ void oe1_bitSet();
void oe1_bitTest();
void oe1_zoneDisk();
void oe1_printStats();
+ void oe1_setStore();
// Opcodes, Elvira 2 only
void oe2_loadUserGame();
Modified: scummvm/trunk/engines/agos/debug.h
===================================================================
--- scummvm/trunk/engines/agos/debug.h 2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/debug.h 2006-10-07 08:28:06 UTC (rev 24161)
@@ -168,7 +168,7 @@
NULL,
NULL,
/* 112 */
- "I|PRINT_OBJ",
+ "IW|PRINT_OBJ",
NULL,
"I|PRINT_NAME",
"I|PRINT_CNAME",
@@ -230,8 +230,8 @@
/* 160 */
NULL,
NULL,
+ "IWJ|IS_CFLAG",
NULL,
- NULL,
/* 164 */
"|RESCAN",
"wwwW|MEANS",
@@ -341,9 +341,9 @@
NULL,
"IW|SET_CLASS",
"IW|UNSET_CLASS",
- NULL,
+ "WW|CLEAR_BIT",
/* 252 */
- NULL,
+ "WW|SET_BIT",
"WWJ|BIT_TEST",
NULL,
"W|WAIT_SYNC",
@@ -380,7 +380,7 @@
/* 280 */
"II|SET_PARENT_SPECIAL",
"|CLEAR_TIMERS",
- NULL,
+ "IW|SET_STORE",
"WJ|IS_BOX",
};
Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp 2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/items.cpp 2006-10-07 08:28:06 UTC (rev 24161)
@@ -260,6 +260,8 @@
op[152] = &AGOSEngine::o_debug;
+ op[162] = &AGOSEngine::oe1_cFlag;
+
op[164] = &AGOSEngine::o1_rescan;
op[165] = &AGOSEngine::oe1_means;
@@ -300,6 +302,8 @@
op[249] = &AGOSEngine::o_setClass;
op[250] = &AGOSEngine::o_unsetClass;
+ op[251] = &AGOSEngine::oe1_bitClear;
+ op[252] = &AGOSEngine::oe1_bitSet;
op[253] = &AGOSEngine::oe1_bitTest;
op[259] = &AGOSEngine::oe1_setTime;
@@ -1365,9 +1369,11 @@
}
void AGOSEngine::o_stopTune() {
- // 134: dummy opcode?
- midi.stop();
- _lastMusicPlayed = -1;
+ // 134: stop tune
+ if (getGameType() == GType_SIMON2) {
+ midi.stop();
+ _lastMusicPlayed = -1;
+ }
}
void AGOSEngine::o_pauseGame() {
@@ -1904,9 +1910,10 @@
void AGOSEngine::oe1_pobj() {
// 112: print object
SubObject *subObject = (SubObject *)findChildOfType(getNextItemPtr(), 2);
+ getVarOrWord();
- if (subObject != NULL && subObject->objectFlags & kOFText)
- showMessageFormat("%s", (const char *)getStringPtrByID(subObject->objectFlagValue[0]));
+ if (subObject != NULL)
+ showMessageFormat("%s", (const char *)getStringPtrByID(subObject->objectName));
}
void AGOSEngine::oe1_pName() {
@@ -1923,8 +1930,19 @@
showMessageFormat("%s", name.c_str());
}
+void AGOSEngine::oe1_cFlag() {
+ // 162: check container flag
+ SubContainer *c = (SubContainer *)findChildOfType(getNextItemPtr(), 7);
+ uint bit = getVarOrWord();
+
+ if (c == NULL)
+ setScriptCondition(false);
+ else
+ setScriptCondition((c->flags & (1 << bit)) != 0);
+}
+
void AGOSEngine::oe1_means() {
- // TODO
+ // 165: TODO
}
void AGOSEngine::oe1_setUserItem() {
@@ -1983,6 +2001,22 @@
_objectItem = nextMaster(levelOf(me()), item, ad, no);
}
+void AGOSEngine::oe1_bitClear() {
+ // 251: set bit off
+ int var = getVarOrWord();
+ int bit = getVarOrWord();
+
+ writeVariable(var, _variableArray[var] & ~(1 << bit));
+}
+
+void AGOSEngine::oe1_bitSet() {
+ // 252: set bit on
+ int var = getVarOrWord();
+ int bit = getVarOrWord();
+
+ writeVariable(var, _variableArray[var] | (1 << bit));
+}
+
void AGOSEngine::oe1_bitTest() {
// 253: bit test
int var = getVarOrWord();
@@ -2006,6 +2040,16 @@
// 270: print stats
}
+void AGOSEngine::oe1_setStore() {
+ // 282: set store
+ Item *item = getNextItemPtr();
+
+ if (getVarOrWord() == 1)
+ _subjectItem = item;
+ else
+ _objectItem = item;
+}
+
// -----------------------------------------------------------------------
// Elvira 2 Opcodes
// -----------------------------------------------------------------------
Modified: scummvm/trunk/engines/agos/verb.cpp
===================================================================
--- scummvm/trunk/engines/agos/verb.cpp 2006-10-07 06:09:24 UTC (rev 24160)
+++ scummvm/trunk/engines/agos/verb.cpp 2006-10-07 08:28:06 UTC (rev 24161)
@@ -744,10 +744,17 @@
if (getGameType() == GType_PP) {
_variableArray[400] = x;
_variableArray[401] = y;
- } else {
+ } else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2 ||
+ getGameType() == GType_FF) {
_variableArray[1] = x;
_variableArray[2] = y;
- }
+ } else if (getGameType() == GType_ELVIRA1) {
+ if (best_ha->verb & 0x4000) {
+ if (_variableArray[500] == 0) {
+ _variableArray[500] = best_ha->verb & 0xBFFF;
+ }
+ }
+ }
}
if (best_ha->flags & kBFNoTouchName) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list