C64 maniac uses separate bitmasks for actor settings and misc settings

svn-id: r21004
This commit is contained in:
Travis Howell 2006-03-02 06:06:24 +00:00
parent 2c9f041178
commit 64ce4d6dd7
3 changed files with 22 additions and 17 deletions

View File

@ -78,6 +78,7 @@ void Actor::initActor(int mode) {
_walkdata.point3.x = 32000;
_walkScript = 0;
memset(_heTalkQueue, 0, sizeof(_heTalkQueue));
_miscflags = 0;
mode = 1;
}

View File

@ -133,6 +133,9 @@ public:
uint16 _sound[32];
CostumeData _cost;
/* C64 maniac specific */
byte _miscflags;
/* HE specific */
bool _heNoTalkAnimation;
bool _heSkipLimbs;

View File

@ -690,50 +690,51 @@ void ScummEngine_c64::o_nop() {
}
void ScummEngine_c64::o_setActorBitVar() {
byte flag = getVarOrDirectByte(PARAM_1);
byte act = getVarOrDirectByte(PARAM_1);
byte mask = getVarOrDirectByte(PARAM_2);
byte mod = getVarOrDirectByte(PARAM_3);
//if (mod)
// _miscFlags[flag] |= mask;
//else
// _miscFlags[flag] &= ~mash;
Actor *a = derefActor(act, "o_setActorBitVar");
if (mod)
a->_miscflags |= mask;
else
a->_miscflags &= ~mask;
warning("STUB: o_setActorBitVar(%d, %d, %d)", flag, mask, mod);
debug(0, "o_setActorBitVar(%d, %d, %d)", act, mask, mod);
}
void ScummEngine_c64::o_getActorBitVar() {
getResultPos();
byte flag = getVarOrDirectByte(PARAM_1);
byte act = getVarOrDirectByte(PARAM_1);
byte mask = getVarOrDirectByte(PARAM_2);
//setResult((_miscFlags[flag] & mask) ? 1 : 0);
Actor *a = derefActor(act, "o_setActorBitVar");
setResult((a->_miscflags & mask) ? 1 : 0);
setResult(0);
warning("STUB: o_getActorBitVar(%d, %d)", flag, mask);
debug(0, "o_getActorBitVar(%d, %d, %d)", act, mask, (a->_miscflags & mask));
}
void ScummEngine_c64::o_setBitVar() {
int var = getVarOrDirectByte(PARAM_1);
byte flag = getVarOrDirectByte(PARAM_1);
byte mask = getVarOrDirectByte(PARAM_2);
byte mod = getVarOrDirectByte(PARAM_3);
if (mod)
_scummVars[var] |= (1 << mask);
_bitVars[flag] |= (1 << mask);
else
_scummVars[var] &= ~(1 << mask);
_bitVars[flag] &= ~(1 << mask);
debug(0, "o_setBitVar (%d, %d %d)", var, mask, mod);
debug(0, "o_setBitVar (%d, %d %d)", flag, mask, mod);
}
void ScummEngine_c64::o_getBitVar() {
getResultPos();
int var = getVarOrDirectByte(PARAM_1);
byte flag = getVarOrDirectByte(PARAM_1);
byte mask = getVarOrDirectByte(PARAM_2);
setResult((_scummVars[var] & (1 << mask)) ? 1 : 0);
setResult((_bitVars[flag] & (1 << mask)) ? 1 : 0);
debug(0, "o_getBitVar (%d, %d %d)", var, mask, _scummVars[var] & (1 << mask));
debug(0, "o_getBitVar (%d, %d %d)", flag, mask, _bitVars[flag] & (1 << mask));
}
void ScummEngine_c64::o_print_c64() {