mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-29 21:24:53 +00:00
PRINCE: O_WAITHEROANIM(), O_WAITTEXT()
This commit is contained in:
parent
231ad30262
commit
c98549a184
@ -37,7 +37,7 @@
|
||||
|
||||
namespace Prince {
|
||||
|
||||
static const uint16 NUM_OPCODES = 144;
|
||||
static const uint16 kNumOpcodes = 144;
|
||||
|
||||
Room::Room() {}
|
||||
|
||||
@ -86,82 +86,6 @@ int Room::getOptionOffset(int option) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void Room::loadMobs(Common::SeekableReadStream &stream) {
|
||||
debug("loadMobs %d", stream.pos());
|
||||
static const uint8 MAX_MOBS = 64;
|
||||
uint8 mobs[MAX_MOBS];
|
||||
stream.read(&mobs, sizeof(mobs));
|
||||
for (uint8 i = 0; i < sizeof(mobs); i++) {
|
||||
debug("mob %d flag %d", i, mobs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void Room::loadBackAnim(Common::SeekableReadStream &stream) {
|
||||
debug("loadBackAnim %d", stream.pos());
|
||||
static const uint8 MAX_BACK_ANIMS = 64;
|
||||
uint32 backAnim[MAX_BACK_ANIMS];
|
||||
debug("loadBackAnim sizeof %lu", sizeof(backAnim));
|
||||
stream.read(backAnim, sizeof(backAnim));
|
||||
for (uint8 i = 0; i < MAX_BACK_ANIMS; i++) {
|
||||
debug("back anim offset %d", backAnim[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void Room::loadObj(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadNak(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadItemUse(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadItemGive(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadWalkTo(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadExamine(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadPickup(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadUse(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadPushOpen(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadPullClose(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadTalk(Common::SeekableReadStream &stream) {}
|
||||
void Room::loadGive(Common::SeekableReadStream &stream) {}
|
||||
*/
|
||||
/*
|
||||
void Room::nextLoadStep(Common::SeekableReadStream &stream, LoadingStep step) {
|
||||
uint32 offset = stream.readUint32LE();
|
||||
uint32 pos = stream.pos();
|
||||
stream.seek(offset);
|
||||
|
||||
debug("nextLoadStep offset %d, pos %d", offset, pos);
|
||||
|
||||
(this->*step)(stream);
|
||||
|
||||
stream.seek(pos);
|
||||
}
|
||||
*/
|
||||
/*
|
||||
bool Room::loadFromStream(Common::SeekableReadStream &stream) {
|
||||
|
||||
uint32 pos = stream.pos();
|
||||
|
||||
nextLoadStep(stream, &Room::loadMobs);
|
||||
nextLoadStep(stream, &Room::loadBackAnim);
|
||||
nextLoadStep(stream, &Room::loadObj);
|
||||
nextLoadStep(stream, &Room::loadNak);
|
||||
nextLoadStep(stream, &Room::loadItemUse);
|
||||
nextLoadStep(stream, &Room::loadItemGive);
|
||||
nextLoadStep(stream, &Room::loadWalkTo);
|
||||
nextLoadStep(stream, &Room::loadExamine);
|
||||
nextLoadStep(stream, &Room::loadPickup);
|
||||
nextLoadStep(stream, &Room::loadUse);
|
||||
nextLoadStep(stream, &Room::loadPushOpen);
|
||||
nextLoadStep(stream, &Room::loadPullClose);
|
||||
nextLoadStep(stream, &Room::loadTalk);
|
||||
nextLoadStep(stream, &Room::loadGive);
|
||||
|
||||
// skip some data for now
|
||||
static const uint8 ROOM_ENTRY_SIZE = 64;
|
||||
stream.seek(pos + ROOM_ENTRY_SIZE);
|
||||
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
Script::Script(PrinceEngine *vm) : _vm(vm), _data(nullptr), _dataSize(0) {
|
||||
}
|
||||
|
||||
@ -472,8 +396,7 @@ Interpreter::Interpreter(PrinceEngine *vm, Script *script, InterpreterFlags *fla
|
||||
|
||||
void Interpreter::debugInterpreter(const char *s, ...) {
|
||||
char buf[STRINGBUFLEN];
|
||||
va_list va;
|
||||
|
||||
va_list va;
|
||||
va_start(va, s);
|
||||
vsnprintf(buf, STRINGBUFLEN, s, va);
|
||||
va_end(va);
|
||||
@ -507,7 +430,7 @@ uint32 Interpreter::step(uint32 opcodePC) {
|
||||
// Get the current opcode
|
||||
_lastOpcode = readScript<uint16>();
|
||||
|
||||
if (_lastOpcode > NUM_OPCODES)
|
||||
if (_lastOpcode > kNumOpcodes)
|
||||
error(
|
||||
"Trying to execute unknown opcode @0x%04X: %02d",
|
||||
_currentInstruction,
|
||||
@ -766,7 +689,7 @@ void Interpreter::O__WAIT() {
|
||||
|
||||
debugInterpreter("O__WAIT pause %d", pause);
|
||||
|
||||
if (_waitFlag == 0) {
|
||||
if (!_waitFlag) {
|
||||
// set new wait flag value and continue
|
||||
_waitFlag = pause;
|
||||
_opcodeNF = 1;
|
||||
@ -774,7 +697,7 @@ void Interpreter::O__WAIT() {
|
||||
return;
|
||||
}
|
||||
|
||||
--_waitFlag;
|
||||
_waitFlag--;
|
||||
|
||||
if (_waitFlag > 0) {
|
||||
_opcodeNF = 1;
|
||||
@ -1199,13 +1122,21 @@ void Interpreter::O_TALKHERO() {
|
||||
_vm->talkHero(hero);
|
||||
}
|
||||
|
||||
//TODO
|
||||
void Interpreter::O_WAITTEXT() {
|
||||
uint16 slot = readScriptFlagValue();
|
||||
Text &text = _vm->_textSlots[slot];
|
||||
if (text._time) {
|
||||
_opcodeNF = 1;
|
||||
_currentInstruction -= 4;
|
||||
if (text._time && text._str) {
|
||||
if (_flags->getFlagValue(Flags::ESCAPED)) {
|
||||
text._time = 1;
|
||||
if (slot == 0) {
|
||||
_vm->_mainHero->_talkTime = 1;
|
||||
} else if (slot == 1) {
|
||||
_vm->_secondHero->_talkTime = 1;
|
||||
}
|
||||
} else {
|
||||
_opcodeNF = 1;
|
||||
_currentInstruction -= 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1217,7 +1148,17 @@ void Interpreter::O_SETHEROANIM() {
|
||||
|
||||
void Interpreter::O_WAITHEROANIM() {
|
||||
uint16 hero = readScriptFlagValue();
|
||||
|
||||
if (hero == 0) {
|
||||
if (_vm->_mainHero->_state == _vm->_mainHero->SPEC) {
|
||||
_currentInstruction -= 4;
|
||||
_opcodeNF = 1;
|
||||
}
|
||||
} else if (hero == 1) {
|
||||
if (_vm->_secondHero->_state == _vm->_secondHero->SPEC) {
|
||||
_currentInstruction -= 4;
|
||||
_opcodeNF = 1;
|
||||
}
|
||||
}
|
||||
debugInterpreter("O_WAITHEROANIM hero %d", hero);
|
||||
}
|
||||
|
||||
@ -1834,7 +1775,7 @@ void Interpreter::O_BREAK_POINT() {
|
||||
debugInterpreter("O_BREAK_POINT");
|
||||
}
|
||||
|
||||
Interpreter::OpcodeFunc Interpreter::_opcodes[NUM_OPCODES] = {
|
||||
Interpreter::OpcodeFunc Interpreter::_opcodes[kNumOpcodes] = {
|
||||
&Interpreter::O_WAITFOREVER,
|
||||
&Interpreter::O_BLACKPALETTE,
|
||||
&Interpreter::O_SETUPPALETTE,
|
||||
|
Loading…
Reference in New Issue
Block a user