mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-31 07:53:36 +00:00
cleanup
svn-id: r26409
This commit is contained in:
parent
2f6f857eaf
commit
5a8b8ca92d
@ -56,7 +56,6 @@ namespace Parallaction {
|
||||
void wrapLocalVar(LocalVariable *local);
|
||||
|
||||
|
||||
LValue getLValue(Instruction *inst, char *str, LocalVariable *locals, Animation *a);
|
||||
|
||||
|
||||
uint16 _numLocals = 0;
|
||||
@ -108,7 +107,7 @@ Animation *Parallaction::parseAnimation(Script& script, Node *list, char *name)
|
||||
}
|
||||
}
|
||||
if (!scumm_stricmp(_tokens[0], "label")) {
|
||||
_vm->_gfx->makeCnvFromString(&vD0->_label._cnv, _tokens[1]);
|
||||
_gfx->makeCnvFromString(&vD0->_label._cnv, _tokens[1]);
|
||||
}
|
||||
if (!scumm_stricmp(_tokens[0], "flags")) {
|
||||
uint16 _si = 1;
|
||||
@ -414,7 +413,7 @@ void Parallaction::parseScriptLine(Instruction *inst, Animation *a, LocalVariabl
|
||||
return;
|
||||
}
|
||||
|
||||
LValue getLValue(Instruction *inst, char *str, LocalVariable *locals, Animation *a) {
|
||||
LValue Parallaction::getLValue(Instruction *inst, char *str, LocalVariable *locals, Animation *a) {
|
||||
|
||||
LValue v;
|
||||
|
||||
@ -434,7 +433,7 @@ LValue getLValue(Instruction *inst, char *str, LocalVariable *locals, Animation
|
||||
}
|
||||
|
||||
if (str[1] == '.') {
|
||||
a = _vm->findAnimation(&str[2]);
|
||||
a = findAnimation(&str[2]);
|
||||
}
|
||||
|
||||
if (str[0] == 'X') {
|
||||
@ -634,7 +633,7 @@ void Parallaction::sortAnimations() {
|
||||
Node v14;
|
||||
memset(&v14, 0, sizeof(Node));
|
||||
|
||||
_vm->_char._ani._z = _vm->_char._ani.height() + _vm->_char._ani._top;
|
||||
_char._ani._z = _char._ani.height() + _char._ani._top;
|
||||
|
||||
Animation *vC = (Animation*)_animations._next;
|
||||
Node *v8;
|
||||
|
@ -85,7 +85,7 @@ void Parallaction::parseCommands(Script &script, CommandList& list) {
|
||||
|
||||
case CMD_START: // start
|
||||
case CMD_STOP: // stop
|
||||
cmd->u._animation = _vm->findAnimation(_tokens[_si]);
|
||||
cmd->u._animation = findAnimation(_tokens[_si]);
|
||||
_si++;
|
||||
if (cmd->u._animation == NULL) {
|
||||
strcpy(_forwardedAnimationNames[_numForwards], _tokens[_si-1]);
|
||||
@ -100,7 +100,7 @@ void Parallaction::parseCommands(Script &script, CommandList& list) {
|
||||
case CMD_CLOSE: // close
|
||||
case CMD_ON: // on
|
||||
case CMD_OFF: // off
|
||||
cmd->u._zone = _vm->findZone(_tokens[_si]);
|
||||
cmd->u._zone = findZone(_tokens[_si]);
|
||||
_si++;
|
||||
break;
|
||||
|
||||
@ -213,7 +213,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
|
||||
Command *cmd = *it;
|
||||
CommandData *u = &cmd->u;
|
||||
uint32 v8 = _localFlags[_vm->_currentLocationIndex];
|
||||
uint32 v8 = _localFlags[_currentLocationIndex];
|
||||
|
||||
if (_engineFlags & kEngineQuit)
|
||||
break;
|
||||
@ -234,7 +234,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
cmd->u._flags &= ~kFlagsGlobal;
|
||||
_commandFlags |= cmd->u._flags;
|
||||
} else {
|
||||
_localFlags[_vm->_currentLocationIndex] |= cmd->u._flags;
|
||||
_localFlags[_currentLocationIndex] |= cmd->u._flags;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -243,7 +243,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
cmd->u._flags &= ~kFlagsGlobal;
|
||||
_commandFlags &= ~cmd->u._flags;
|
||||
} else {
|
||||
_localFlags[_vm->_currentLocationIndex] &= ~cmd->u._flags;
|
||||
_localFlags[_currentLocationIndex] &= ~cmd->u._flags;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -252,7 +252,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
cmd->u._flags &= ~kFlagsGlobal;
|
||||
_commandFlags ^= cmd->u._flags;
|
||||
} else {
|
||||
_localFlags[_vm->_currentLocationIndex] ^= cmd->u._flags;
|
||||
_localFlags[_currentLocationIndex] ^= cmd->u._flags;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -282,7 +282,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
case CMD_OPEN: // open
|
||||
u->_zone->_flags &= ~kFlagsClosed;
|
||||
if (u->_zone->u.door->_cnv) {
|
||||
_vm->addJob(&jobToggleDoor, (void*)u->_zone, kPriority18 );
|
||||
addJob(&jobToggleDoor, (void*)u->_zone, kPriority18 );
|
||||
}
|
||||
break;
|
||||
|
||||
@ -301,7 +301,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
u->_zone->_flags &= ~kFlagsRemove;
|
||||
u->_zone->_flags |= kFlagsActive;
|
||||
if ((u->_zone->_type & 0xFFFF) == kZoneGet) {
|
||||
_vm->addJob(&jobDisplayDroppedItem, u->_zone, kPriority17 );
|
||||
addJob(&jobDisplayDroppedItem, u->_zone, kPriority17 );
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -311,7 +311,7 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
break;
|
||||
|
||||
case CMD_LOCATION: // location
|
||||
strcpy(_vm->_location._name, u->_string);
|
||||
strcpy(_location._name, u->_string);
|
||||
_engineFlags |= kEngineChangeLocation;
|
||||
break;
|
||||
|
||||
@ -324,13 +324,13 @@ void Parallaction::runCommands(CommandList& list, Zone *z) {
|
||||
break;
|
||||
|
||||
case CMD_MOVE: { // move
|
||||
if ((_vm->_char._ani._flags & kFlagsRemove) || (_vm->_char._ani._flags & kFlagsActive) == 0) {
|
||||
if ((_char._ani._flags & kFlagsRemove) || (_char._ani._flags & kFlagsActive) == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
WalkNode *vC = buildWalkPath(u->_move._x, u->_move._y);
|
||||
|
||||
_vm->addJob(&jobWalk, vC, kPriority19 );
|
||||
addJob(&jobWalk, vC, kPriority19 );
|
||||
_engineFlags |= kEngineWalking;
|
||||
}
|
||||
break;
|
||||
|
@ -193,7 +193,7 @@ char *Parallaction::parseDialogueString(Script &script) {
|
||||
return vCC;
|
||||
}
|
||||
|
||||
uint16 askDialoguePassword(Dialogue *q, StaticCnv *face) {
|
||||
uint16 Parallaction::askDialoguePassword(Dialogue *q, StaticCnv *face) {
|
||||
debugC(1, kDebugDialogue, "checkDialoguePassword()");
|
||||
|
||||
char password[100];
|
||||
@ -201,15 +201,15 @@ uint16 askDialoguePassword(Dialogue *q, StaticCnv *face) {
|
||||
|
||||
while (true) {
|
||||
strcpy(password, ".......");
|
||||
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
|
||||
Common::Rect r(_answerBalloonW[0], _answerBalloonH[0]);
|
||||
r.moveTo(_answerBalloonX[0], _answerBalloonY[0]);
|
||||
|
||||
_vm->_gfx->drawBalloon(r, 1);
|
||||
_vm->_gfx->displayWrappedString(q->_answers[0]->_text, _answerBalloonX[0], _answerBalloonY[0], MAX_BALLOON_WIDTH, 3);
|
||||
_vm->_gfx->flatBlitCnv(face, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
_vm->_gfx->displayBalloonString(_answerBalloonX[0] + 5, _answerBalloonY[0] + _answerBalloonH[0] - 15, "> ", 0);
|
||||
_gfx->drawBalloon(r, 1);
|
||||
_gfx->displayWrappedString(q->_answers[0]->_text, _answerBalloonX[0], _answerBalloonY[0], MAX_BALLOON_WIDTH, 3);
|
||||
_gfx->flatBlitCnv(face, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
_gfx->displayBalloonString(_answerBalloonX[0] + 5, _answerBalloonY[0] + _answerBalloonH[0] - 15, "> ", 0);
|
||||
|
||||
Common::Event e;
|
||||
while (e.kbd.ascii != 0xD && passwordLen < MAX_PASSWORD_LENGTH) {
|
||||
@ -224,14 +224,14 @@ uint16 askDialoguePassword(Dialogue *q, StaticCnv *face) {
|
||||
passwordLen++;
|
||||
password[passwordLen] = '\0';
|
||||
|
||||
_vm->_gfx->displayBalloonString(_answerBalloonX[0] + 5, _answerBalloonY[0] + _answerBalloonH[0] - 15, password, 0);
|
||||
_gfx->displayBalloonString(_answerBalloonX[0] + 5, _answerBalloonY[0] + _answerBalloonH[0] - 15, password, 0);
|
||||
|
||||
g_system->delayMillis(20);
|
||||
}
|
||||
|
||||
if ((!scumm_stricmp(_vm->_characterName, _doughName) && !scumm_strnicmp(password, "1732461", 7)) ||
|
||||
(!scumm_stricmp(_vm->_characterName, _donnaName) && !scumm_strnicmp(password, "1622", 4)) ||
|
||||
(!scumm_stricmp(_vm->_characterName, _dinoName) && !scumm_strnicmp(password, "179", 3))) {
|
||||
if ((!scumm_stricmp(_characterName, _doughName) && !scumm_strnicmp(password, "1732461", 7)) ||
|
||||
(!scumm_stricmp(_characterName, _donnaName) && !scumm_strnicmp(password, "1622", 4)) ||
|
||||
(!scumm_stricmp(_characterName, _dinoName) && !scumm_strnicmp(password, "179", 3))) {
|
||||
|
||||
break;
|
||||
|
||||
@ -245,24 +245,24 @@ uint16 askDialoguePassword(Dialogue *q, StaticCnv *face) {
|
||||
|
||||
bool _askPassword;
|
||||
|
||||
bool displayAnswer(Dialogue *q, uint16 i) {
|
||||
bool Parallaction::displayAnswer(Dialogue *q, uint16 i) {
|
||||
|
||||
uint32 v28 = _localFlags[_vm->_currentLocationIndex];
|
||||
uint32 v28 = _localFlags[_currentLocationIndex];
|
||||
if (q->_answers[i]->_yesFlags & kFlagsGlobal)
|
||||
v28 = _commandFlags | kFlagsGlobal;
|
||||
|
||||
// display suitable answers
|
||||
if (((q->_answers[i]->_yesFlags & v28) == q->_answers[i]->_yesFlags) && ((q->_answers[i]->_noFlags & ~v28) == q->_answers[i]->_noFlags)) {
|
||||
|
||||
_vm->_gfx->getStringExtent(q->_answers[i]->_text, MAX_BALLOON_WIDTH, &_answerBalloonW[i], &_answerBalloonH[i]);
|
||||
_gfx->getStringExtent(q->_answers[i]->_text, MAX_BALLOON_WIDTH, &_answerBalloonW[i], &_answerBalloonH[i]);
|
||||
|
||||
Common::Rect r(_answerBalloonW[i], _answerBalloonH[i]);
|
||||
r.moveTo(_answerBalloonX[i], _answerBalloonY[i]);
|
||||
|
||||
_vm->_gfx->drawBalloon(r, 1);
|
||||
_gfx->drawBalloon(r, 1);
|
||||
|
||||
_answerBalloonY[i+1] = 10 + _answerBalloonY[i] + _answerBalloonH[i];
|
||||
_askPassword = _vm->_gfx->displayWrappedString(q->_answers[i]->_text, _answerBalloonX[i], _answerBalloonY[i], MAX_BALLOON_WIDTH, 3);
|
||||
_askPassword = _gfx->displayWrappedString(q->_answers[i]->_text, _answerBalloonX[i], _answerBalloonY[i], MAX_BALLOON_WIDTH, 3);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -271,7 +271,7 @@ bool displayAnswer(Dialogue *q, uint16 i) {
|
||||
|
||||
}
|
||||
|
||||
bool displayAnswers(Dialogue *q) {
|
||||
bool Parallaction::displayAnswers(Dialogue *q) {
|
||||
|
||||
bool displayed = false;
|
||||
|
||||
@ -290,7 +290,7 @@ bool displayAnswers(Dialogue *q) {
|
||||
return displayed;
|
||||
}
|
||||
|
||||
void displayQuestion(Dialogue *q, Cnv *cnv) {
|
||||
void Parallaction::displayQuestion(Dialogue *q, Cnv *cnv) {
|
||||
|
||||
int16 w = 0, h = 0;
|
||||
|
||||
@ -302,23 +302,23 @@ void displayQuestion(Dialogue *q, Cnv *cnv) {
|
||||
face._data0 = cnv->getFramePtr(q->_mood & 0xF);
|
||||
face._data1 = NULL; // cnv->field_8[v60->_mood & 0xF];
|
||||
|
||||
_vm->_gfx->flatBlitCnv(&face, QUESTION_CHARACTER_X, QUESTION_CHARACTER_Y, Gfx::kBitFront);
|
||||
_vm->_gfx->getStringExtent(q->_text, MAX_BALLOON_WIDTH, &w, &h);
|
||||
_gfx->flatBlitCnv(&face, QUESTION_CHARACTER_X, QUESTION_CHARACTER_Y, Gfx::kBitFront);
|
||||
_gfx->getStringExtent(q->_text, MAX_BALLOON_WIDTH, &w, &h);
|
||||
|
||||
Common::Rect r(w, h);
|
||||
r.moveTo(QUESTION_BALLOON_X, QUESTION_BALLOON_Y);
|
||||
|
||||
_vm->_gfx->drawBalloon(r, q->_mood & 0x10);
|
||||
_vm->_gfx->displayWrappedString(q->_text, QUESTION_BALLOON_X, QUESTION_BALLOON_Y, MAX_BALLOON_WIDTH, 0);
|
||||
_gfx->drawBalloon(r, q->_mood & 0x10);
|
||||
_gfx->displayWrappedString(q->_text, QUESTION_BALLOON_X, QUESTION_BALLOON_Y, MAX_BALLOON_WIDTH, 0);
|
||||
|
||||
waitUntilLeftClick();
|
||||
|
||||
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
uint16 getDialogueAnswer(Dialogue *q, Cnv *cnv) {
|
||||
uint16 Parallaction::getDialogueAnswer(Dialogue *q, Cnv *cnv) {
|
||||
|
||||
uint16 answer = 0;
|
||||
|
||||
@ -328,7 +328,7 @@ uint16 getDialogueAnswer(Dialogue *q, Cnv *cnv) {
|
||||
face._data0 = cnv->getFramePtr(0);
|
||||
face._data1 = NULL; // cnv->field_8[0];
|
||||
|
||||
_vm->_gfx->flatBlitCnv(&face, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
_gfx->flatBlitCnv(&face, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
|
||||
if (_askPassword == false) {
|
||||
answer = selectAnswer(q, &face);
|
||||
@ -336,7 +336,7 @@ uint16 getDialogueAnswer(Dialogue *q, Cnv *cnv) {
|
||||
answer = askDialoguePassword(q, &face);
|
||||
}
|
||||
|
||||
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront); // erase answer screen
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront); // erase answer screen
|
||||
|
||||
debugC(1, kDebugDialogue, "runDialogue: user selected answer #%i", answer);
|
||||
|
||||
@ -348,10 +348,10 @@ void Parallaction::runDialogue(SpeakData *data) {
|
||||
|
||||
enterDialogue();
|
||||
|
||||
_vm->_gfx->setFont("comic");
|
||||
_gfx->setFont("comic");
|
||||
|
||||
bool isNpc = scumm_stricmp(data->_name, "yourself") && data->_name[0] != '\0';
|
||||
Cnv *face = isNpc ? _vm->_disk->loadTalk(data->_name) : _vm->_char._talk;
|
||||
Cnv *face = isNpc ? _disk->loadTalk(data->_name) : _char._talk;
|
||||
|
||||
_askPassword = false;
|
||||
uint16 answer = 0;
|
||||
@ -368,7 +368,7 @@ void Parallaction::runDialogue(SpeakData *data) {
|
||||
if (scumm_stricmp(q->_answers[0]->_text, "NULL")) {
|
||||
|
||||
if (!displayAnswers(q)) break;
|
||||
answer = getDialogueAnswer(q, _vm->_char._talk);
|
||||
answer = getDialogueAnswer(q, _char._talk);
|
||||
cmdlist = &q->_answers[answer]->_commands;
|
||||
}
|
||||
|
||||
@ -377,7 +377,7 @@ void Parallaction::runDialogue(SpeakData *data) {
|
||||
|
||||
debugC(1, kDebugDialogue, "runDialogue: out of dialogue loop");
|
||||
|
||||
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
|
||||
if (isNpc) {
|
||||
delete face;
|
||||
@ -391,7 +391,7 @@ void Parallaction::runDialogue(SpeakData *data) {
|
||||
|
||||
}
|
||||
|
||||
int16 selectAnswer(Question *q, StaticCnv *cnv) {
|
||||
int16 Parallaction::selectAnswer(Question *q, StaticCnv *cnv) {
|
||||
|
||||
int16 numAvailableAnswers = 0;
|
||||
int16 _si = 0;
|
||||
@ -407,10 +407,10 @@ int16 selectAnswer(Question *q, StaticCnv *cnv) {
|
||||
_answerBalloonY[i] = 2000;
|
||||
|
||||
if (numAvailableAnswers == 1) {
|
||||
_vm->_gfx->displayWrappedString(q->_answers[_di]->_text, _answerBalloonX[_di], _answerBalloonY[_di], MAX_BALLOON_WIDTH, 0);
|
||||
cnv->_data0 = _vm->_char._talk->getFramePtr(q->_answers[_di]->_mood & 0xF);
|
||||
// cnv->_data1 = _vm->_char._talk->field_8[q->_answers[_di]->_mood & 0xF];
|
||||
_vm->_gfx->flatBlitCnv(cnv, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
_gfx->displayWrappedString(q->_answers[_di]->_text, _answerBalloonX[_di], _answerBalloonY[_di], MAX_BALLOON_WIDTH, 0);
|
||||
cnv->_data0 = _char._talk->getFramePtr(q->_answers[_di]->_mood & 0xF);
|
||||
// cnv->_data1 = _char._talk->field_8[q->_answers[_di]->_mood & 0xF];
|
||||
_gfx->flatBlitCnv(cnv, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
waitUntilLeftClick();
|
||||
return _di;
|
||||
}
|
||||
@ -420,17 +420,17 @@ int16 selectAnswer(Question *q, StaticCnv *cnv) {
|
||||
_mouseButtons = kMouseNone;
|
||||
while (_mouseButtons != kMouseLeftUp) {
|
||||
|
||||
_vm->updateInput();
|
||||
_si = getHoverAnswer(_vm->_mousePos.x, _vm->_mousePos.y, q);
|
||||
updateInput();
|
||||
_si = getHoverAnswer(_mousePos.x, _mousePos.y, q);
|
||||
|
||||
if (_si != v2) {
|
||||
if (v2 != -1)
|
||||
_vm->_gfx->displayWrappedString(q->_answers[v2]->_text, _answerBalloonX[v2], _answerBalloonY[v2], MAX_BALLOON_WIDTH, 3);
|
||||
_gfx->displayWrappedString(q->_answers[v2]->_text, _answerBalloonX[v2], _answerBalloonY[v2], MAX_BALLOON_WIDTH, 3);
|
||||
|
||||
_vm->_gfx->displayWrappedString(q->_answers[_si]->_text, _answerBalloonX[_si], _answerBalloonY[_si], MAX_BALLOON_WIDTH, 0);
|
||||
cnv->_data0 = _vm->_char._talk->getFramePtr(q->_answers[_si]->_mood & 0xF);
|
||||
// cnv->_data1 = _vm->_char._talk->field_8[q->_answers[_si]->_mood & 0xF];
|
||||
_vm->_gfx->flatBlitCnv(cnv, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
_gfx->displayWrappedString(q->_answers[_si]->_text, _answerBalloonX[_si], _answerBalloonY[_si], MAX_BALLOON_WIDTH, 0);
|
||||
cnv->_data0 = _char._talk->getFramePtr(q->_answers[_si]->_mood & 0xF);
|
||||
// cnv->_data1 = _char._talk->field_8[q->_answers[_si]->_mood & 0xF];
|
||||
_gfx->flatBlitCnv(cnv, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y, Gfx::kBitFront);
|
||||
}
|
||||
|
||||
g_system->delayMillis(30);
|
||||
@ -471,16 +471,16 @@ int16 getHoverAnswer(int16 x, int16 y, Question *q) {
|
||||
}
|
||||
|
||||
|
||||
void enterDialogue() {
|
||||
void Parallaction::enterDialogue() {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// rebuilds inventory
|
||||
//
|
||||
void exitDialogue() {
|
||||
void Parallaction::exitDialogue() {
|
||||
|
||||
refreshInventory(_vm->_characterName);
|
||||
refreshInventory(_characterName);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
#define NUM_BUFFERS 6
|
||||
#define NUM_BUFFERS 4
|
||||
|
||||
class Parallaction;
|
||||
|
||||
@ -194,37 +194,23 @@ public:
|
||||
public:
|
||||
Common::Point _labelPosition[2];
|
||||
static bool _proportionalFont;
|
||||
|
||||
uint16 _bgLayers[4];
|
||||
PaletteFxRange _palettefx[6];
|
||||
Palette _palette;
|
||||
|
||||
protected:
|
||||
Parallaction* _vm;
|
||||
|
||||
static byte * _buffers[NUM_BUFFERS];
|
||||
|
||||
static byte _mouseArrow[256];
|
||||
StaticCnv *_mouseComposedArrow;
|
||||
|
||||
Cnv *_font;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
//
|
||||
// maps a character for representation
|
||||
//
|
||||
byte mapChar(byte c);
|
||||
|
||||
void flatBlit(const Common::Rect& r, byte *data, Gfx::Buffers buffer);
|
||||
void blit(const Common::Rect& r, uint16 z, byte *data, Gfx::Buffers buffer);
|
||||
|
||||
|
||||
void initBuffers();
|
||||
void initMouse(uint16 arg_0);
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -115,7 +115,7 @@ int16 Parallaction::getHoverInventoryItem(int16 x, int16 y) {
|
||||
}
|
||||
|
||||
|
||||
int16 pickupItem(Zone *z) {
|
||||
int16 Parallaction::pickupItem(Zone *z) {
|
||||
|
||||
uint16 _si;
|
||||
for (_si = 0; _inventory[_si]._id != 0; _si++) ;
|
||||
@ -125,17 +125,17 @@ int16 pickupItem(Zone *z) {
|
||||
_inventory[_si]._id = MAKE_INVENTORY_ID(z->u.get->_icon);
|
||||
_inventory[_si]._index = z->u.get->_icon;
|
||||
|
||||
_vm->addJob(&jobRemovePickedItem, z, kPriority17 );
|
||||
addJob(&jobRemovePickedItem, z, kPriority17 );
|
||||
|
||||
if (_inventory[_si]._id == 0) return 0;
|
||||
|
||||
refreshInventoryItem(_vm->_characterName, _si);
|
||||
refreshInventoryItem(_characterName, _si);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void addInventoryItem(uint16 item) {
|
||||
void Parallaction::addInventoryItem(uint16 item) {
|
||||
|
||||
uint16 _si = 0;
|
||||
while (_inventory[_si]._id != 0) _si++;
|
||||
@ -143,13 +143,13 @@ void addInventoryItem(uint16 item) {
|
||||
_inventory[_si]._id = MAKE_INVENTORY_ID(item);
|
||||
_inventory[_si]._index = item;
|
||||
|
||||
refreshInventoryItem(_vm->_characterName, _si);
|
||||
refreshInventoryItem(_characterName, _si);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void dropItem(uint16 v) {
|
||||
void Parallaction::dropItem(uint16 v) {
|
||||
|
||||
uint16 _di = 0;
|
||||
for (uint16 _si = 0; _si < INVENTORY_MAX_ITEMS - 1; _si++) {
|
||||
@ -163,13 +163,13 @@ void dropItem(uint16 v) {
|
||||
memcpy(&_inventory[_si], &_inventory[_si+1], sizeof(InventoryItem));
|
||||
}
|
||||
|
||||
refreshInventory(_vm->_characterName);
|
||||
refreshInventory(_characterName);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int16 isItemInInventory(int32 v) {
|
||||
int16 Parallaction::isItemInInventory(int32 v) {
|
||||
|
||||
for (uint16 _si = 0; _si < INVENTORY_MAX_ITEMS; _si++) {
|
||||
if (_inventory[_si]._id == (uint)v)
|
||||
|
@ -43,10 +43,10 @@ void Parallaction::parseLocation(const char *filename) {
|
||||
debugC(1, kDebugLocation, "parseLocation('%s')", filename);
|
||||
|
||||
uint16 _si = 1;
|
||||
_vm->_gfx->_proportionalFont = false;
|
||||
_vm->_gfx->setFont("topaz");
|
||||
_gfx->_proportionalFont = false;
|
||||
_gfx->setFont("topaz");
|
||||
|
||||
_locationScript = _disk->loadLocation(filename);
|
||||
Script *_locationScript = _disk->loadLocation(filename);
|
||||
|
||||
fillBuffers(*_locationScript, true);
|
||||
while (scumm_stricmp(_tokens[0], "ENDLOCATION")) {
|
||||
@ -93,12 +93,12 @@ void Parallaction::parseLocation(const char *filename) {
|
||||
switchBackground(_location._name, mask);
|
||||
|
||||
if (_tokens[2][0] != '\0') {
|
||||
_vm->_char._ani._left = atoi(_tokens[2]);
|
||||
_vm->_char._ani._top = atoi(_tokens[3]);
|
||||
_char._ani._left = atoi(_tokens[2]);
|
||||
_char._ani._top = atoi(_tokens[3]);
|
||||
}
|
||||
|
||||
if (_tokens[4][0] != '\0') {
|
||||
_vm->_char._ani._frame = atoi(_tokens[4]);
|
||||
_char._ani._frame = atoi(_tokens[4]);
|
||||
}
|
||||
}
|
||||
if (!scumm_stricmp(_tokens[0], "DISK")) {
|
||||
@ -112,7 +112,7 @@ void Parallaction::parseLocation(const char *filename) {
|
||||
}
|
||||
}
|
||||
if (!scumm_stricmp(_tokens[0], "COMMANDS")) {
|
||||
parseCommands(*_locationScript, _location._commands);
|
||||
parseCommands(*_locationScript, _location._commands);
|
||||
}
|
||||
if (!scumm_stricmp(_tokens[0], "ACOMMANDS")) {
|
||||
parseCommands(*_locationScript, _location._aCommands);
|
||||
@ -157,17 +157,16 @@ void Parallaction::parseLocation(const char *filename) {
|
||||
resolveLocationForwards();
|
||||
|
||||
delete _locationScript;
|
||||
_locationScript = NULL;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void resolveLocationForwards() {
|
||||
void Parallaction::resolveLocationForwards() {
|
||||
// printf("resolveLocationForwards()");
|
||||
// printf("# forwards: %i", _numForwards);
|
||||
|
||||
for (uint16 _si = 0; _forwardedCommands[_si]; _si++) {
|
||||
_forwardedCommands[_si]->u._animation = _vm->findAnimation(_forwardedAnimationNames[_si]);
|
||||
_forwardedCommands[_si]->u._animation = findAnimation(_forwardedAnimationNames[_si]);
|
||||
_forwardedCommands[_si] = NULL;
|
||||
}
|
||||
|
||||
@ -187,15 +186,15 @@ void Parallaction::freeLocation() {
|
||||
debugC(7, kDebugLocation, "freeLocation: localflags names freed");
|
||||
|
||||
// TODO (LIST): this should be replaced by a call to _location._walkNodes.clear()
|
||||
freeNodeList(_vm->_location._walkNodes._next);
|
||||
_vm->_location._walkNodes._next = NULL;
|
||||
freeNodeList(_location._walkNodes._next);
|
||||
_location._walkNodes._next = NULL;
|
||||
debugC(7, kDebugLocation, "freeLocation: walk nodes freed");
|
||||
|
||||
// TODO (LIST): helperNode should be rendered useless by the use of a Common::List<>
|
||||
// to store Zones and Animations. Right now, it holds a list of Zones to be preserved
|
||||
// but that'll pretty meaningless with a single list approach.
|
||||
helperNode._prev = helperNode._next = NULL;
|
||||
_vm->freeZones(_zones._next);
|
||||
freeZones(_zones._next);
|
||||
freeNodeList(_zones._next);
|
||||
_zones._next = helperNode._next;
|
||||
_zones._prev = helperNode._prev;
|
||||
@ -206,25 +205,25 @@ void Parallaction::freeLocation() {
|
||||
// to store Zones and Animations. Right now, it holds a list of Zones to be preserved
|
||||
// but that'll pretty meaningless with a single list approach.
|
||||
helperNode._prev = helperNode._next = NULL;
|
||||
_vm->freeZones(_animations._next);
|
||||
_vm->freeAnimations();
|
||||
freeZones(_animations._next);
|
||||
freeAnimations();
|
||||
freeNodeList(_animations._next);
|
||||
_animations._next = helperNode._next;
|
||||
_animations._prev = helperNode._prev;
|
||||
// memcpy(&_animations, &helperNode, sizeof(Node));
|
||||
debugC(7, kDebugLocation, "freeLocation: animations freed");
|
||||
|
||||
if (_vm->_location._comment) {
|
||||
free(_vm->_location._comment);
|
||||
if (_location._comment) {
|
||||
free(_location._comment);
|
||||
}
|
||||
_vm->_location._comment = NULL;
|
||||
_location._comment = NULL;
|
||||
debugC(7, kDebugLocation, "freeLocation: comments freed");
|
||||
|
||||
// TODO (LIST): this should be _location._commands.clear();
|
||||
freeCommands(_vm->_location._commands);
|
||||
freeCommands(_location._commands);
|
||||
debugC(7, kDebugLocation, "freeLocation: commands freed");
|
||||
|
||||
freeCommands(_vm->_location._aCommands);
|
||||
freeCommands(_location._aCommands);
|
||||
debugC(7, kDebugLocation, "freeLocation: acommands freed");
|
||||
|
||||
return;
|
||||
@ -232,7 +231,7 @@ void Parallaction::freeLocation() {
|
||||
|
||||
|
||||
|
||||
void parseWalkNodes(Script& script, Node *list) {
|
||||
void Parallaction::parseWalkNodes(Script& script, Node *list) {
|
||||
|
||||
fillBuffers(script, true);
|
||||
while (scumm_stricmp(_tokens[0], "ENDNODES")) {
|
||||
@ -240,8 +239,8 @@ void parseWalkNodes(Script& script, Node *list) {
|
||||
if (!scumm_stricmp(_tokens[0], "COORD")) {
|
||||
|
||||
WalkNode *v4 = new WalkNode(
|
||||
atoi(_tokens[1]) - _vm->_char._ani.width()/2,
|
||||
atoi(_tokens[2]) - _vm->_char._ani.height()
|
||||
atoi(_tokens[1]) - _char._ani.width()/2,
|
||||
atoi(_tokens[2]) - _char._ani.height()
|
||||
);
|
||||
|
||||
addNode(list, v4);
|
||||
@ -255,14 +254,14 @@ void parseWalkNodes(Script& script, Node *list) {
|
||||
|
||||
}
|
||||
|
||||
void switchBackground(const char* background, const char* mask) {
|
||||
void Parallaction::switchBackground(const char* background, const char* mask) {
|
||||
// printf("switchBackground(%s)", name);
|
||||
|
||||
Gfx::Palette pal;
|
||||
|
||||
uint16 v2 = 0;
|
||||
if (!scumm_stricmp(background, "final")) {
|
||||
_vm->_gfx->clearScreen(Gfx::kBitBack);
|
||||
_gfx->clearScreen(Gfx::kBitBack);
|
||||
for (uint16 _si = 0; _si <= 93; ) {
|
||||
pal[_si] = v2;
|
||||
pal[_si+1] = v2;
|
||||
@ -271,10 +270,10 @@ void switchBackground(const char* background, const char* mask) {
|
||||
_si += 3;
|
||||
}
|
||||
|
||||
_vm->_gfx->extendPalette(pal);
|
||||
_gfx->extendPalette(pal);
|
||||
}
|
||||
|
||||
_vm->_disk->loadScenery(background, mask);
|
||||
_disk->loadScenery(background, mask);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -286,7 +285,7 @@ extern Job *_jEraseLabel;
|
||||
void Parallaction::showSlide(const char *name) {
|
||||
|
||||
_disk->loadSlide(name);
|
||||
_gfx->extendPalette(_vm->_gfx->_palette);
|
||||
_gfx->extendPalette(_gfx->_palette);
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
|
||||
debugC(1, kDebugLocation, "changeLocation: new background set");
|
||||
@ -346,7 +345,7 @@ void Parallaction::changeLocation(char *location) {
|
||||
debugC(2, kDebugLocation, "changeLocation: changed cursor");
|
||||
}
|
||||
|
||||
removeNode(&_vm->_char._ani);
|
||||
removeNode(&_char._ani);
|
||||
debugC(2, kDebugLocation, "changeLocation: removed character from the animation list");
|
||||
|
||||
freeLocation();
|
||||
@ -379,7 +378,7 @@ void Parallaction::changeLocation(char *location) {
|
||||
}
|
||||
}
|
||||
|
||||
addNode(&_animations, &_vm->_char._ani);
|
||||
addNode(&_animations, &_char._ani);
|
||||
debugC(2, kDebugLocation, "changeLocation: new character added to the animation list");
|
||||
|
||||
strcpy(_saveData1, list[0].c_str());
|
||||
@ -388,14 +387,14 @@ void Parallaction::changeLocation(char *location) {
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBit2);
|
||||
debugC(1, kDebugLocation, "changeLocation: new location '%s' parsed", _saveData1);
|
||||
|
||||
_vm->_char._ani._oldPos.x = -1000;
|
||||
_vm->_char._ani._oldPos.y = -1000;
|
||||
_char._ani._oldPos.x = -1000;
|
||||
_char._ani._oldPos.y = -1000;
|
||||
|
||||
_vm->_char._ani.field_50 = 0;
|
||||
_char._ani.field_50 = 0;
|
||||
if (_location._startPosition.x != -1000) {
|
||||
_vm->_char._ani._left = _location._startPosition.x;
|
||||
_vm->_char._ani._top = _location._startPosition.y;
|
||||
_vm->_char._ani._frame = _location._startFrame;
|
||||
_char._ani._left = _location._startPosition.x;
|
||||
_char._ani._top = _location._startPosition.y;
|
||||
_char._ani._frame = _location._startFrame;
|
||||
_location._startPosition.y = -1000;
|
||||
_location._startPosition.x = -1000;
|
||||
|
||||
@ -423,7 +422,7 @@ void Parallaction::changeLocation(char *location) {
|
||||
runJobs();
|
||||
_gfx->swapBuffers();
|
||||
|
||||
_gfx->extendPalette(_vm->_gfx->_palette);
|
||||
_gfx->extendPalette(_gfx->_palette);
|
||||
if (_location._aCommands.size() > 0) {
|
||||
runCommands(_location._aCommands);
|
||||
debugC(1, kDebugLocation, "changeLocation: location acommands run");
|
||||
@ -450,26 +449,26 @@ void Parallaction::doLocationEnterTransition() {
|
||||
if (_localFlags[_currentLocationIndex] & kFlagsVisited) return; // visited
|
||||
|
||||
byte pal[PALETTE_SIZE];
|
||||
_vm->_gfx->buildBWPalette(pal);
|
||||
_vm->_gfx->setPalette(pal, FIRST_BASE_COLOR, BASE_PALETTE_COLORS);
|
||||
_gfx->buildBWPalette(pal);
|
||||
_gfx->setPalette(pal, FIRST_BASE_COLOR, BASE_PALETTE_COLORS);
|
||||
|
||||
jobRunScripts(NULL, NULL);
|
||||
jobEraseAnimations(NULL, NULL);
|
||||
jobDisplayAnimations(NULL, NULL);
|
||||
|
||||
_vm->_gfx->setFont("comic");
|
||||
_vm->_gfx->swapBuffers();
|
||||
_vm->_gfx->copyScreen(Gfx::kBitFront, Gfx::kBitBack);
|
||||
_gfx->setFont("comic");
|
||||
_gfx->swapBuffers();
|
||||
_gfx->copyScreen(Gfx::kBitFront, Gfx::kBitBack);
|
||||
|
||||
int16 v7C, v7A;
|
||||
_vm->_gfx->getStringExtent(_vm->_location._comment, 130, &v7C, &v7A);
|
||||
_gfx->getStringExtent(_location._comment, 130, &v7C, &v7A);
|
||||
|
||||
Common::Rect r(10 + v7C, 5 + v7A);
|
||||
r.moveTo(5, 5);
|
||||
_vm->_gfx->floodFill(Gfx::kBitFront, r, 0);
|
||||
_gfx->floodFill(Gfx::kBitFront, r, 0);
|
||||
r.grow(-1);
|
||||
_vm->_gfx->floodFill(Gfx::kBitFront, r, 1);
|
||||
_vm->_gfx->displayWrappedString(_vm->_location._comment, 3, 5, 130, 0);
|
||||
_gfx->floodFill(Gfx::kBitFront, r, 1);
|
||||
_gfx->displayWrappedString(_location._comment, 3, 5, 130, 0);
|
||||
|
||||
// FIXME: ???
|
||||
#if 0
|
||||
@ -480,13 +479,13 @@ void Parallaction::doLocationEnterTransition() {
|
||||
|
||||
waitUntilLeftClick();
|
||||
|
||||
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront );
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront );
|
||||
|
||||
// fades maximum intensity palette towards approximation of main palette
|
||||
for (uint16 _si = 0; _si<6; _si++) {
|
||||
waitTime( 1 );
|
||||
_vm->_gfx->quickFadePalette(pal);
|
||||
_vm->_gfx->setPalette(pal);
|
||||
_gfx->quickFadePalette(pal);
|
||||
_gfx->setPalette(pal);
|
||||
}
|
||||
|
||||
debugC(1, kDebugLocation, "doLocationEnterTransition completed");
|
||||
|
@ -163,8 +163,6 @@ int Parallaction::init() {
|
||||
_activeItem._id = 0;
|
||||
_procCurrentHoverItem = -1;
|
||||
|
||||
_locationScript = NULL;
|
||||
|
||||
_musicData1 = 0;
|
||||
strcpy(_characterName1, "null");
|
||||
|
||||
|
@ -91,6 +91,34 @@ enum {
|
||||
kMouseRightDown = 4
|
||||
};
|
||||
|
||||
enum EngineFlags {
|
||||
kEngineQuit = (1 << 0),
|
||||
kEnginePauseJobs = (1 << 1),
|
||||
kEngineInventory = (1 << 2),
|
||||
kEngineWalking = (1 << 3),
|
||||
kEngineChangeLocation = (1 << 4),
|
||||
kEngineMouse = (1 << 5),
|
||||
kEngineDragging = (1 << 6),
|
||||
kEngineTransformedDonna = (1 << 7)
|
||||
};
|
||||
|
||||
enum {
|
||||
kEvNone = 0,
|
||||
kEvEnterZone = 1,
|
||||
kEvExitZone = 2,
|
||||
kEvAction = 3,
|
||||
kEvOpenInventory = 4,
|
||||
kEvCloseInventory = 5,
|
||||
kEvHoverInventory = 6,
|
||||
kEvWalk = 7,
|
||||
kEvQuitGame = 1000,
|
||||
kEvSaveGame = 2000,
|
||||
kEvLoadGame = 4000
|
||||
};
|
||||
|
||||
enum {
|
||||
kCursorArrow = -1
|
||||
};
|
||||
|
||||
enum ParallactionGameType {
|
||||
GType_Nippon = 1,
|
||||
@ -99,6 +127,8 @@ enum ParallactionGameType {
|
||||
|
||||
struct PARALLACTIONGameDescription;
|
||||
|
||||
|
||||
|
||||
struct Job;
|
||||
typedef void (*JobFn)(void*, Job*);
|
||||
|
||||
@ -121,40 +151,33 @@ struct Credit {
|
||||
|
||||
typedef void (*callable)(void*);
|
||||
|
||||
extern uint16 _mouseButtons;
|
||||
|
||||
extern uint16 _score;
|
||||
extern uint16 _language;
|
||||
extern Zone *_activeZone;
|
||||
extern uint32 _engineFlags;
|
||||
extern callable _callables[];
|
||||
|
||||
extern Node _zones;
|
||||
extern Node _animations;
|
||||
extern uint32 _localFlags[];
|
||||
extern Command *_forwardedCommands[];
|
||||
extern char _forwardedAnimationNames[][20];
|
||||
extern uint16 _numForwards;
|
||||
extern char _soundFile[];
|
||||
extern char _slideText[][40];
|
||||
extern uint16 _introSarcData3; // sarcophagus stuff to be saved
|
||||
extern uint16 _introSarcData2; // sarcophagus stuff to be saved
|
||||
|
||||
extern char _saveData1[];
|
||||
extern byte _mouseHidden;
|
||||
extern uint32 _commandFlags;
|
||||
|
||||
extern const char *_instructionNamesRes[];
|
||||
extern const char *_commandsNamesRes[];
|
||||
|
||||
extern const char *_dinoName;
|
||||
extern const char *_donnaName;
|
||||
extern const char *_doughName;
|
||||
extern const char *_drkiName;
|
||||
extern const char *_minidinoName;
|
||||
extern const char *_minidonnaName;
|
||||
extern const char *_minidoughName;
|
||||
extern const char *_minidrkiName;
|
||||
extern uint16 _mouseButtons;
|
||||
extern uint16 _score;
|
||||
extern uint16 _language;
|
||||
extern Zone *_activeZone;
|
||||
extern uint32 _engineFlags;
|
||||
extern callable _callables[];
|
||||
extern uint32 _localFlags[];
|
||||
extern Command *_forwardedCommands[];
|
||||
extern char _forwardedAnimationNames[][20];
|
||||
extern uint16 _numForwards;
|
||||
extern char _soundFile[];
|
||||
extern char _slideText[][40];
|
||||
extern uint16 _introSarcData3; // sarcophagus stuff to be saved
|
||||
extern uint16 _introSarcData2; // sarcophagus stuff to be saved
|
||||
extern char _saveData1[];
|
||||
extern byte _mouseHidden;
|
||||
extern uint32 _commandFlags;
|
||||
extern const char *_instructionNamesRes[];
|
||||
extern const char *_commandsNamesRes[];
|
||||
extern const char *_dinoName;
|
||||
extern const char *_donnaName;
|
||||
extern const char *_doughName;
|
||||
extern const char *_drkiName;
|
||||
extern const char *_minidinoName;
|
||||
extern const char *_minidonnaName;
|
||||
extern const char *_minidoughName;
|
||||
extern const char *_minidrkiName;
|
||||
|
||||
// Various ways of detecting character modes used to exist
|
||||
// inside the engine, so they have been unified in the two
|
||||
@ -191,36 +214,6 @@ void jobHideInventory(void *parm, Job *j);
|
||||
void jobEraseLabel(void *parm, Job *j);
|
||||
|
||||
|
||||
enum EngineFlags {
|
||||
kEngineQuit = (1 << 0),
|
||||
kEnginePauseJobs = (1 << 1),
|
||||
kEngineInventory = (1 << 2),
|
||||
kEngineWalking = (1 << 3),
|
||||
kEngineChangeLocation = (1 << 4),
|
||||
kEngineMouse = (1 << 5),
|
||||
kEngineDragging = (1 << 6),
|
||||
kEngineTransformedDonna = (1 << 7)
|
||||
};
|
||||
|
||||
enum {
|
||||
kEvNone = 0,
|
||||
kEvEnterZone = 1,
|
||||
kEvExitZone = 2,
|
||||
kEvAction = 3,
|
||||
kEvOpenInventory = 4,
|
||||
kEvCloseInventory = 5,
|
||||
kEvHoverInventory = 6,
|
||||
kEvWalk = 7,
|
||||
kEvQuitGame = 1000,
|
||||
kEvSaveGame = 2000,
|
||||
kEvLoadGame = 4000
|
||||
};
|
||||
|
||||
enum {
|
||||
kCursorArrow = -1
|
||||
};
|
||||
|
||||
|
||||
|
||||
class Gfx;
|
||||
class Menu;
|
||||
@ -250,18 +243,8 @@ struct Character {
|
||||
|
||||
Character() {
|
||||
_talk = NULL;
|
||||
// ._width = 0;
|
||||
// _talk._height = 0;
|
||||
// _talk._count = 0;
|
||||
|
||||
_head = NULL;
|
||||
// _head._width = 0;
|
||||
// _head._height = 0;
|
||||
// _head._data0 = NULL;
|
||||
// _head._data1 = NULL;
|
||||
|
||||
_objs = NULL;
|
||||
// _objs._count = 0;
|
||||
|
||||
_ani._left = 150;
|
||||
_ani._top = 100;
|
||||
@ -305,35 +288,42 @@ public:
|
||||
~Parallaction();
|
||||
|
||||
int init();
|
||||
|
||||
int go();
|
||||
|
||||
|
||||
void loadGame();
|
||||
void saveGame();
|
||||
|
||||
uint16 updateInput();
|
||||
uint16 updateInput();
|
||||
|
||||
void waitTime(uint32 t);
|
||||
void waitTime(uint32 t);
|
||||
|
||||
// static void initTable(const char *path, char **table);
|
||||
// static void freeTable(char** table);
|
||||
// static int16 searchTable(const char *s, const char **table);
|
||||
void freeCommands(CommandList& list);
|
||||
void parseLocation(const char *filename);
|
||||
void changeCursor(int32 index);
|
||||
void changeCharacter(const char *name);
|
||||
|
||||
void parseLocation(const char *filename);
|
||||
void changeCursor(int32 index);
|
||||
void changeCharacter(const char *name);
|
||||
char *parseComment(Script &script);
|
||||
char *parseDialogueString(Script &script);
|
||||
Dialogue *parseDialogue(Script &script);
|
||||
|
||||
char *parseComment(Script &script);
|
||||
char *parseDialogueString(Script &script);
|
||||
Dialogue *parseDialogue(Script &script);
|
||||
Job *addJob(JobFn fn, void *parm, uint16 tag);
|
||||
void removeJob(Job *j);
|
||||
void pauseJobs();
|
||||
void resumeJobs();
|
||||
void runJobs();
|
||||
|
||||
Job *addJob(JobFn fn, void *parm, uint16 tag);
|
||||
void removeJob(Job *j);
|
||||
void pauseJobs();
|
||||
void resumeJobs();
|
||||
void runJobs();
|
||||
Zone *findZone(const char *name);
|
||||
Zone *hitZone(uint32 type, uint16 x, uint16 y);
|
||||
uint16 runZone(Zone*);
|
||||
void freeZones(Node *list);
|
||||
|
||||
void runDialogue(SpeakData*);
|
||||
|
||||
void runCommands(CommandList& list, Zone *z = NULL);
|
||||
void freeCommands(CommandList& list); // to be phased out soon
|
||||
|
||||
Animation *findAnimation(const char *name);
|
||||
void sortAnimations();
|
||||
void freeAnimations();
|
||||
|
||||
Table *_globalTable;
|
||||
Table *_objectsNames;
|
||||
@ -344,17 +334,7 @@ public:
|
||||
Table *_instructionNames;
|
||||
Table *_localFlagNames;
|
||||
|
||||
void freeZones(Node *list);
|
||||
Animation *findAnimation(const char *name);
|
||||
Zone *findZone(const char *name);
|
||||
Zone *hitZone(uint32 type, uint16 x, uint16 y);
|
||||
void freeAnimations();
|
||||
void sortAnimations();
|
||||
void freeLocation();
|
||||
|
||||
uint16 runZone(Zone*);
|
||||
void runDialogue(SpeakData*);
|
||||
void runCommands(CommandList& list, Zone *z = NULL);
|
||||
|
||||
public:
|
||||
int getGameType() const;
|
||||
@ -369,22 +349,20 @@ public:
|
||||
|
||||
MidiPlayer *_midiPlayer;
|
||||
|
||||
Gfx* _gfx;
|
||||
Menu* _menu;
|
||||
char _characterName[30];
|
||||
Disk* _disk;
|
||||
Gfx* _gfx;
|
||||
Menu* _menu;
|
||||
Disk* _disk;
|
||||
|
||||
char _locationNames[120][32];
|
||||
int16 _currentLocationIndex;
|
||||
uint16 _numLocations;
|
||||
Character _char;
|
||||
char _characterName[30];
|
||||
|
||||
Character _char;
|
||||
Location _location;
|
||||
char _locationNames[120][32];
|
||||
int16 _currentLocationIndex;
|
||||
uint16 _numLocations;
|
||||
Location _location;
|
||||
|
||||
InventoryItem _activeItem;
|
||||
|
||||
Script *_locationScript;
|
||||
|
||||
Common::Point _mousePos;
|
||||
|
||||
Node _zones;
|
||||
@ -393,12 +371,11 @@ public:
|
||||
protected: // data
|
||||
|
||||
struct InputData {
|
||||
uint16 _event;
|
||||
Common::Point _mousePos;
|
||||
|
||||
int16 _inventoryIndex;
|
||||
Zone* _zone;
|
||||
Label* _label;
|
||||
uint16 _event;
|
||||
Common::Point _mousePos;
|
||||
int16 _inventoryIndex;
|
||||
Zone* _zone;
|
||||
Label* _label;
|
||||
};
|
||||
|
||||
bool _skipMenu;
|
||||
@ -414,14 +391,14 @@ protected: // data
|
||||
|
||||
uint32 _baseTime;
|
||||
|
||||
uint16 _musicData1; // only used in changeLocation
|
||||
uint16 _musicData1; // only used in changeLocation
|
||||
char _characterName1[50]; // only used in changeCharacter
|
||||
|
||||
int16 _keyDown;
|
||||
|
||||
Job _jobs;
|
||||
|
||||
Node helperNode; // used for freeZones
|
||||
Node helperNode; // used for freeZones: to be removed
|
||||
|
||||
protected: // members
|
||||
bool detectGame(void);
|
||||
@ -436,7 +413,8 @@ protected: // members
|
||||
void doSaveGame(uint16 slot, const char* name);
|
||||
|
||||
void runGame();
|
||||
InputData * translateInput();
|
||||
|
||||
InputData *translateInput();
|
||||
void processInput(InputData*);
|
||||
|
||||
int16 getHoverInventoryItem(int16 x, int16 y);
|
||||
@ -445,23 +423,45 @@ protected: // members
|
||||
void resetTimer();
|
||||
|
||||
void doLocationEnterTransition();
|
||||
void parseZone(Script &script, Node *list, char *name);
|
||||
Animation * parseAnimation(Script &script, Node *list, char *name);
|
||||
void parseScriptLine(Instruction *inst, Animation *a, LocalVariable *locals);
|
||||
void parseZoneTypeBlock(Script &script, Zone *z);
|
||||
void loadProgram(Animation *a, char *filename);
|
||||
void changeLocation(char *location);
|
||||
void showSlide(const char *name);
|
||||
void resolveLocationForwards();
|
||||
void switchBackground(const char* background, const char* mask);
|
||||
void freeLocation();
|
||||
|
||||
void parseZone(Script &script, Node *list, char *name);
|
||||
void parseZoneTypeBlock(Script &script, Zone *z);
|
||||
void parseWalkNodes(Script& script, Node *list);
|
||||
void displayCharacterComment(ExamineData *data);
|
||||
void displayItemComment(ExamineData *data);
|
||||
|
||||
Animation * parseAnimation(Script &script, Node *list, char *name);
|
||||
void parseScriptLine(Instruction *inst, Animation *a, LocalVariable *locals);
|
||||
void loadProgram(Animation *a, char *filename);
|
||||
LValue getLValue(Instruction *inst, char *str, LocalVariable *locals, Animation *a);
|
||||
|
||||
void parseCommands(Script &script, CommandList&);
|
||||
|
||||
void pickMusic(const char *location);
|
||||
void selectCharacterMusic(const char *name);
|
||||
|
||||
void parseCommands(Script &script, CommandList&);
|
||||
void freeCharacter();
|
||||
|
||||
|
||||
void initResources();
|
||||
|
||||
uint16 askDialoguePassword(Dialogue *q, StaticCnv *face);
|
||||
bool displayAnswer(Dialogue *q, uint16 i);
|
||||
bool displayAnswers(Dialogue *q);
|
||||
void displayQuestion(Dialogue *q, Cnv *cnv);
|
||||
uint16 getDialogueAnswer(Dialogue *q, Cnv *cnv);
|
||||
int16 selectAnswer(Question *q, StaticCnv *cnv);
|
||||
void enterDialogue();
|
||||
void exitDialogue();
|
||||
|
||||
void addInventoryItem(uint16 item);
|
||||
void dropItem(uint16 item);
|
||||
int16 pickupItem(Zone *z);
|
||||
int16 isItemInInventory(int32 v);
|
||||
};
|
||||
|
||||
// FIXME: remove global
|
||||
|
@ -62,10 +62,10 @@ void Parallaction::doLoadGame(uint16 slot) {
|
||||
|
||||
f->readLine(s, 29);
|
||||
|
||||
f->readLine(_vm->_characterName, 15);
|
||||
f->readLine(_vm->_location._name, 15);
|
||||
f->readLine(_characterName, 15);
|
||||
f->readLine(_location._name, 15);
|
||||
|
||||
strcat(_vm->_location._name, ".");
|
||||
strcat(_location._name, ".");
|
||||
|
||||
f->readLine(s, 15);
|
||||
_location._startPosition.x = atoi(s);
|
||||
@ -116,19 +116,19 @@ void Parallaction::doLoadGame(uint16 slot) {
|
||||
delete f;
|
||||
|
||||
_engineFlags &= ~kEngineTransformedDonna;
|
||||
if (!scumm_stricmp(_vm->_characterName, "donnatras")) {
|
||||
if (!scumm_stricmp(_characterName, "donnatras")) {
|
||||
_engineFlags |= kEngineTransformedDonna;
|
||||
strcpy(_vm->_characterName, "donna");
|
||||
strcpy(_characterName, "donna");
|
||||
}
|
||||
if (!scumm_stricmp(_vm->_characterName, "minidonnatras")) {
|
||||
if (!scumm_stricmp(_characterName, "minidonnatras")) {
|
||||
_engineFlags |= kEngineTransformedDonna;
|
||||
strcpy(_vm->_characterName, _minidonnaName);
|
||||
strcpy(_characterName, _minidonnaName);
|
||||
}
|
||||
|
||||
if (IS_MINI_CHARACTER(_vm->_characterName)) {
|
||||
strcpy(filename, _vm->_characterName+4);
|
||||
if (IS_MINI_CHARACTER(_characterName)) {
|
||||
strcpy(filename, _characterName+4);
|
||||
} else {
|
||||
strcpy(filename, _vm->_characterName);
|
||||
strcpy(filename, _characterName);
|
||||
}
|
||||
// strcat(filename, ".tab");
|
||||
// freeTable(_objectsNames);
|
||||
@ -142,7 +142,7 @@ void Parallaction::doLoadGame(uint16 slot) {
|
||||
// bugs, but it's a good maneuver anyway
|
||||
strcpy(_characterName1, "null");
|
||||
|
||||
strcat(_vm->_location._name, _vm->_characterName);
|
||||
strcat(_location._name, _characterName);
|
||||
_engineFlags |= kEngineChangeLocation;
|
||||
|
||||
return;
|
||||
@ -175,17 +175,17 @@ void Parallaction::doSaveGame(uint16 slot, const char* name) {
|
||||
f->writeString("\n");
|
||||
|
||||
if (_engineFlags & kEngineTransformedDonna) {
|
||||
sprintf(s, "%stras\n", _vm->_characterName);
|
||||
sprintf(s, "%stras\n", _characterName);
|
||||
} else {
|
||||
sprintf(s, "%s\n", _vm->_characterName);
|
||||
sprintf(s, "%s\n", _characterName);
|
||||
}
|
||||
f->writeString(s);
|
||||
|
||||
sprintf(s, "%s\n", _saveData1);
|
||||
f->writeString(s);
|
||||
sprintf(s, "%d\n", _vm->_char._ani._left);
|
||||
sprintf(s, "%d\n", _char._ani._left);
|
||||
f->writeString(s);
|
||||
sprintf(s, "%d\n", _vm->_char._ani._top);
|
||||
sprintf(s, "%d\n", _char._ani._top);
|
||||
f->writeString(s);
|
||||
sprintf(s, "%d\n", _score);
|
||||
f->writeString(s);
|
||||
@ -206,7 +206,7 @@ void Parallaction::doSaveGame(uint16 slot, const char* name) {
|
||||
|
||||
delete f;
|
||||
|
||||
refreshInventory(_vm->_characterName);
|
||||
refreshInventory(_characterName);
|
||||
|
||||
return;
|
||||
|
||||
@ -343,7 +343,7 @@ int Parallaction::buildSaveFileList(Common::StringList& l) {
|
||||
|
||||
int Parallaction::selectSaveFile(uint16 arg_0, const char* caption, const char* button) {
|
||||
|
||||
SaveLoadChooser* slc = new SaveLoadChooser(caption, button, _vm);
|
||||
SaveLoadChooser* slc = new SaveLoadChooser(caption, button, this);
|
||||
|
||||
Common::StringList l;
|
||||
|
||||
@ -382,7 +382,7 @@ void Parallaction::loadGame() {
|
||||
|
||||
void Parallaction::saveGame() {
|
||||
|
||||
if (!scumm_stricmp(_vm->_location._name, "caveau"))
|
||||
if (!scumm_stricmp(_location._name, "caveau"))
|
||||
return;
|
||||
|
||||
int slot = selectSaveFile( 1, "Save file", "Save" );
|
||||
|
@ -94,7 +94,7 @@ void Parallaction::parseZone(Script &script, Node *list, char *name) {
|
||||
}
|
||||
if (!scumm_stricmp(_tokens[0], "label")) {
|
||||
// printf("label: %s", _tokens[1]);
|
||||
_vm->_gfx->makeCnvFromString(&z->_label._cnv, _tokens[1]);
|
||||
_gfx->makeCnvFromString(&z->_label._cnv, _tokens[1]);
|
||||
}
|
||||
if (!scumm_stricmp(_tokens[0], "flags")) {
|
||||
uint16 _si = 1;
|
||||
@ -302,28 +302,28 @@ void Parallaction::parseZoneTypeBlock(Script &script, Zone *z) {
|
||||
//
|
||||
// works on the frontbuffer
|
||||
//
|
||||
void displayCharacterComment(ExamineData *data) {
|
||||
void Parallaction::displayCharacterComment(ExamineData *data) {
|
||||
if (data->_description == NULL) return;
|
||||
|
||||
StaticCnv v3C;
|
||||
v3C._width = _vm->_char._talk->_width;
|
||||
v3C._height = _vm->_char._talk->_height;
|
||||
v3C._data0 = _vm->_char._talk->getFramePtr(0);
|
||||
v3C._width = _char._talk->_width;
|
||||
v3C._height = _char._talk->_height;
|
||||
v3C._data0 = _char._talk->getFramePtr(0);
|
||||
v3C._data1 = NULL; //_talk->field_8[0];
|
||||
|
||||
_vm->_gfx->setFont("comic");
|
||||
_vm->_gfx->flatBlitCnv(&v3C, 190, 80, Gfx::kBitFront);
|
||||
_gfx->setFont("comic");
|
||||
_gfx->flatBlitCnv(&v3C, 190, 80, Gfx::kBitFront);
|
||||
|
||||
int16 v26, v28;
|
||||
_vm->_gfx->getStringExtent(data->_description, 130, &v28, &v26);
|
||||
_gfx->getStringExtent(data->_description, 130, &v28, &v26);
|
||||
Common::Rect r(v28, v26);
|
||||
r.moveTo(140, 10);
|
||||
_vm->_gfx->drawBalloon(r, 0);
|
||||
_vm->_gfx->displayWrappedString(data->_description, 140, 10, 130, 0);
|
||||
_gfx->drawBalloon(r, 0);
|
||||
_gfx->displayWrappedString(data->_description, 140, 10, 130, 0);
|
||||
|
||||
waitUntilLeftClick();
|
||||
|
||||
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -337,32 +337,32 @@ void displayCharacterComment(ExamineData *data) {
|
||||
// works on the frontbuffer
|
||||
//
|
||||
|
||||
void displayItemComment(ExamineData *data) {
|
||||
void Parallaction::displayItemComment(ExamineData *data) {
|
||||
|
||||
if (data->_description == NULL) return;
|
||||
|
||||
char v68[PATH_LEN];
|
||||
strcpy(v68, data->_filename);
|
||||
data->_cnv = _vm->_disk->loadStatic(v68);
|
||||
_vm->_gfx->flatBlitCnv(data->_cnv, 140, (SCREEN_HEIGHT - data->_cnv->_height)/2, Gfx::kBitFront);
|
||||
_vm->_gfx->freeStaticCnv(data->_cnv);
|
||||
data->_cnv = _disk->loadStatic(v68);
|
||||
_gfx->flatBlitCnv(data->_cnv, 140, (SCREEN_HEIGHT - data->_cnv->_height)/2, Gfx::kBitFront);
|
||||
_gfx->freeStaticCnv(data->_cnv);
|
||||
delete data->_cnv;
|
||||
|
||||
int16 v6A = 0, v6C = 0;
|
||||
|
||||
_vm->_gfx->setFont("comic");
|
||||
_vm->_gfx->getStringExtent(data->_description, 130, &v6C, &v6A);
|
||||
_gfx->setFont("comic");
|
||||
_gfx->getStringExtent(data->_description, 130, &v6C, &v6A);
|
||||
Common::Rect r(v6C, v6A);
|
||||
r.moveTo(0, 90);
|
||||
_vm->_gfx->drawBalloon(r, 0);
|
||||
_vm->_gfx->flatBlitCnv(_vm->_char._head, 100, 152, Gfx::kBitFront);
|
||||
_vm->_gfx->displayWrappedString(data->_description, 0, 90, 130, 0);
|
||||
_gfx->drawBalloon(r, 0);
|
||||
_gfx->flatBlitCnv(_vm->_char._head, 100, 152, Gfx::kBitFront);
|
||||
_gfx->displayWrappedString(data->_description, 0, 90, 130, 0);
|
||||
|
||||
jobEraseAnimations((void*)1, NULL);
|
||||
|
||||
waitUntilLeftClick();
|
||||
|
||||
_vm->_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
_gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -397,7 +397,7 @@ uint16 Parallaction::runZone(Zone *z) {
|
||||
if (z->_flags & kFlagsLocked) break;
|
||||
z->_flags ^= kFlagsClosed;
|
||||
if (z->u.door->_cnv == NULL) break;
|
||||
_vm->addJob(&jobToggleDoor, z, kPriority18 );
|
||||
addJob(&jobToggleDoor, z, kPriority18 );
|
||||
break;
|
||||
|
||||
case kZoneHear:
|
||||
@ -552,13 +552,13 @@ Zone *Parallaction::hitZone(uint32 type, uint16 x, uint16 y) {
|
||||
|
||||
if (z->_left != -1)
|
||||
continue;
|
||||
if (_si < _vm->_char._ani._left)
|
||||
if (_si < _char._ani._left)
|
||||
continue;
|
||||
if (_si > (_vm->_char._ani._left + _vm->_char._ani.width()))
|
||||
if (_si > (_char._ani._left + _char._ani.width()))
|
||||
continue;
|
||||
if (_di < _vm->_char._ani._top)
|
||||
if (_di < _char._ani._top)
|
||||
continue;
|
||||
if (_di > (_vm->_char._ani._top + _vm->_char._ani.height()))
|
||||
if (_di > (_char._ani._top + _char._ani.height()))
|
||||
continue;
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user