from the MM/Zak scripts, the code etc. it's clear that unk2 is the sentence preposition

svn-id: r7827
This commit is contained in:
Max Horn 2003-05-22 14:10:20 +00:00
parent 711c698948
commit a9788c771a
7 changed files with 19 additions and 17 deletions

View file

@ -240,7 +240,7 @@ protected:
void o2_getActorX(); void o2_getActorX();
void o2_getActorY(); void o2_getActorY();
void o2_getBitVar(); void o2_getBitVar();
void o2_getObjUnknown(); void o2_getObjPreposition();
void o2_ifClassOfIs(); void o2_ifClassOfIs();
void o2_ifNotState01(); void o2_ifNotState01();
void o2_ifNotState02(); void o2_ifNotState02();
@ -264,7 +264,7 @@ protected:
void o2_setBitVar(); void o2_setBitVar();
void o2_setCameraAt(); void o2_setCameraAt();
void o2_setObjectName(); void o2_setObjectName();
void o2_setObjUnknown(); void o2_setObjPreposition();
void o2_setOwnerOf(); void o2_setOwnerOf();
void o2_setState01(); void o2_setState01();
void o2_setState02(); void o2_setState02();
@ -282,6 +282,7 @@ protected:
byte VAR_SENTENCE_VERB; byte VAR_SENTENCE_VERB;
byte VAR_SENTENCE_OBJECT1; byte VAR_SENTENCE_OBJECT1;
byte VAR_SENTENCE_OBJECT2; byte VAR_SENTENCE_OBJECT2;
byte VAR_SENTENCE_PREPOSITION;
byte VAR_BACKUP_VERB; byte VAR_BACKUP_VERB;
}; };

View file

@ -532,7 +532,7 @@ void Scumm::saveOrLoad(Serializer *s, uint32 savegameVersion) {
const SaveLoadEntry sentenceTabEntries[] = { const SaveLoadEntry sentenceTabEntries[] = {
MKLINE(SentenceTab, verb, sleUint8, VER_V8), MKLINE(SentenceTab, verb, sleUint8, VER_V8),
MKLINE(SentenceTab, unk2, sleUint8, VER_V8), MKLINE(SentenceTab, preposition, sleUint8, VER_V8),
MKLINE(SentenceTab, objectA, sleUint16, VER_V8), MKLINE(SentenceTab, objectA, sleUint16, VER_V8),
MKLINE(SentenceTab, objectB, sleUint16, VER_V8), MKLINE(SentenceTab, objectB, sleUint16, VER_V8),
MKLINE(SentenceTab, freezeCount, sleUint8, VER_V8), MKLINE(SentenceTab, freezeCount, sleUint8, VER_V8),

View file

@ -818,7 +818,7 @@ void Scumm::doSentence(int verb, int objectA, int objectB) {
st->verb = verb; st->verb = verb;
st->objectA = objectA; st->objectA = objectA;
st->objectB = objectB; st->objectB = objectB;
st->unk2 = (objectB & 0xFF00) != 0; st->preposition = (objectB & 0xFF00) != 0;
st->freezeCount = 0; st->freezeCount = 0;
} }
@ -845,7 +845,7 @@ void Scumm::checkAndRunSentenceScript() {
_sentenceNum--; _sentenceNum--;
if (!(_features & GF_AFTER_V7)) if (!(_features & GF_AFTER_V7))
if (_sentence[_sentenceNum].unk2 && _sentence[_sentenceNum].objectB == _sentence[_sentenceNum].objectA) if (_sentence[_sentenceNum].preposition && _sentence[_sentenceNum].objectB == _sentence[_sentenceNum].objectA)
return; return;
if (_features & GF_AFTER_V2) { if (_features & GF_AFTER_V2) {

View file

@ -46,7 +46,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isNotEqual), OPCODE(o5_isNotEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_assignVarWordIndirect), OPCODE(o2_assignVarWordIndirect),
OPCODE(o2_setObjUnknown), OPCODE(o2_setObjPreposition),
/* 0C */ /* 0C */
OPCODE(o2_resourceRoutines), OPCODE(o2_resourceRoutines),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -126,7 +126,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isEqual), OPCODE(o5_isEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_chainScript), OPCODE(o2_chainScript),
OPCODE(o2_setObjUnknown), OPCODE(o2_setObjPreposition),
/* 4C */ /* 4C */
OPCODE(o2_waitForSentence), OPCODE(o2_waitForSentence),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -168,7 +168,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_subIndirect), OPCODE(o2_subIndirect),
OPCODE(o2_dummy), OPCODE(o2_dummy),
/* 6C */ /* 6C */
OPCODE(o2_getObjUnknown), OPCODE(o2_getObjPreposition),
OPCODE(o5_putActorInRoom), OPCODE(o5_putActorInRoom),
OPCODE(o2_dummy), OPCODE(o2_dummy),
OPCODE(o2_ifState04), OPCODE(o2_ifState04),
@ -206,7 +206,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isNotEqual), OPCODE(o5_isNotEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_assignVarWordIndirect), OPCODE(o2_assignVarWordIndirect),
OPCODE(o2_setObjUnknown), OPCODE(o2_setObjPreposition),
/* 8C */ /* 8C */
OPCODE(o2_resourceRoutines), OPCODE(o2_resourceRoutines),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -286,7 +286,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isEqual), OPCODE(o5_isEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_chainScript), OPCODE(o2_chainScript),
OPCODE(o2_setObjUnknown), OPCODE(o2_setObjPreposition),
/* CC */ /* CC */
OPCODE(o5_pseudoRoom), OPCODE(o5_pseudoRoom),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -328,7 +328,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_subIndirect), OPCODE(o2_subIndirect),
OPCODE(o2_dummy), OPCODE(o2_dummy),
/* EC */ /* EC */
OPCODE(o2_getObjUnknown), OPCODE(o2_getObjPreposition),
OPCODE(o5_putActorInRoom), OPCODE(o5_putActorInRoom),
OPCODE(o2_dummy), OPCODE(o2_dummy),
OPCODE(o2_ifState04), OPCODE(o2_ifState04),
@ -512,7 +512,7 @@ void Scumm_v2::o2_assignVarByte() {
setResult(fetchScriptByte()); setResult(fetchScriptByte());
} }
void Scumm_v2::o2_setObjUnknown() { void Scumm_v2::o2_setObjPreposition() {
int obj = getVarOrDirectWord(0x80); int obj = getVarOrDirectWord(0x80);
int unk = fetchScriptByte(); int unk = fetchScriptByte();
@ -522,7 +522,7 @@ void Scumm_v2::o2_setObjUnknown() {
} }
} }
void Scumm_v2::o2_getObjUnknown() { void Scumm_v2::o2_getObjPreposition() {
getResultPos(); getResultPos();
int obj = getVarOrDirectWord(0x80); int obj = getVarOrDirectWord(0x80);
@ -859,7 +859,7 @@ void Scumm_v2::o2_doSentence() {
st->verb = a; st->verb = a;
st->objectA = getVarOrDirectWord(0x40); st->objectA = getVarOrDirectWord(0x40);
st->objectB = getVarOrDirectWord(0x20); st->objectB = getVarOrDirectWord(0x20);
st->unk2 = (st->objectB != 0); st->preposition = (st->objectB != 0);
st->freezeCount = 0; st->freezeCount = 0;
// TODO // TODO
@ -1363,5 +1363,5 @@ void Scumm_v2::resetSentence() {
VAR(VAR_SENTENCE_VERB) = VAR(VAR_BACKUP_VERB); VAR(VAR_SENTENCE_VERB) = VAR(VAR_BACKUP_VERB);
VAR(VAR_SENTENCE_OBJECT1) = 0; VAR(VAR_SENTENCE_OBJECT1) = 0;
VAR(VAR_SENTENCE_OBJECT2) = 0; VAR(VAR_SENTENCE_OBJECT2) = 0;
_scummVars[29] = 0; VAR(VAR_SENTENCE_PREPOSITION) = 0;
} }

View file

@ -749,7 +749,7 @@ void Scumm_v5::o5_doSentence() {
st->verb = a; st->verb = a;
st->objectA = getVarOrDirectWord(0x40); st->objectA = getVarOrDirectWord(0x40);
st->objectB = getVarOrDirectWord(0x20); st->objectB = getVarOrDirectWord(0x20);
st->unk2 = (st->objectB != 0); st->preposition = (st->objectB != 0);
st->freezeCount = 0; st->freezeCount = 0;
} }

View file

@ -218,7 +218,7 @@ struct ArrayHeader {
struct SentenceTab { struct SentenceTab {
byte verb; byte verb;
byte unk2; byte preposition;
uint16 objectA; uint16 objectA;
uint16 objectB; uint16 objectB;
uint8 freezeCount; uint8 freezeCount;

View file

@ -123,6 +123,7 @@ void Scumm_v2::setupScummVars() {
VAR_SENTENCE_VERB = 26; VAR_SENTENCE_VERB = 26;
VAR_SENTENCE_OBJECT1 = 27; VAR_SENTENCE_OBJECT1 = 27;
VAR_SENTENCE_OBJECT2 = 28; VAR_SENTENCE_OBJECT2 = 28;
VAR_SENTENCE_PREPOSITION = 29;
VAR_VIRT_MOUSE_X = 30; VAR_VIRT_MOUSE_X = 30;
VAR_VIRT_MOUSE_Y = 31; VAR_VIRT_MOUSE_Y = 31;
VAR_CLICK_AREA = 32; VAR_CLICK_AREA = 32;