mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 13:50:13 +00:00
* Fixed positioning of balloons and faces in BRA (dos, at least).
* Adapted loading of faces. svn-id: r33392
This commit is contained in:
parent
e5c09b018a
commit
c8400e9725
@ -315,11 +315,11 @@ int BalloonManager_br::setSingleBalloon(char *text, uint16 x, uint16 y, uint16 w
|
||||
Balloon *balloon = &_intBalloons[id];
|
||||
|
||||
if (winding == 0) {
|
||||
src = _leftBalloon;
|
||||
src = _rightBalloon;
|
||||
srcFrame = 0;
|
||||
} else
|
||||
if (winding == 1) {
|
||||
src = _rightBalloon;
|
||||
src = _leftBalloon;
|
||||
srcFrame = 0;
|
||||
}
|
||||
|
||||
@ -332,10 +332,12 @@ int BalloonManager_br::setSingleBalloon(char *text, uint16 x, uint16 y, uint16 w
|
||||
|
||||
// TODO: extract some text to make a name for obj
|
||||
balloon->obj = _gfx->registerBalloon(new SurfaceToFrames(balloon->surface), 0);
|
||||
balloon->obj->x = x;
|
||||
balloon->obj->y = y;
|
||||
balloon->obj->x = x + balloon->box.left;
|
||||
balloon->obj->y = y + balloon->box.top;
|
||||
balloon->obj->transparentKey = BALLOON_TRANSPARENT_COLOR_BR;
|
||||
|
||||
printf("balloon (%i, %i)\n", balloon->obj->x, balloon->obj->y);
|
||||
|
||||
_numBalloons++;
|
||||
|
||||
return id;
|
||||
@ -351,11 +353,11 @@ int BalloonManager_br::setDialogueBalloon(char *text, uint16 winding, byte textC
|
||||
Balloon *balloon = &_intBalloons[id];
|
||||
|
||||
if (winding == 0) {
|
||||
src = _leftBalloon;
|
||||
src = _rightBalloon;
|
||||
srcFrame = id;
|
||||
} else
|
||||
if (winding == 1) {
|
||||
src = _rightBalloon;
|
||||
src = _leftBalloon;
|
||||
srcFrame = 0;
|
||||
}
|
||||
|
||||
@ -368,8 +370,8 @@ int BalloonManager_br::setDialogueBalloon(char *text, uint16 winding, byte textC
|
||||
|
||||
// TODO: extract some text to make a name for obj
|
||||
balloon->obj = _gfx->registerBalloon(new SurfaceToFrames(balloon->surface), 0);
|
||||
balloon->obj->x = 0;
|
||||
balloon->obj->y = 10;
|
||||
balloon->obj->x = balloon->box.left;
|
||||
balloon->obj->y = balloon->box.top;
|
||||
balloon->obj->transparentKey = BALLOON_TRANSPARENT_COLOR_BR;
|
||||
|
||||
if (id > 0) {
|
||||
|
@ -33,7 +33,7 @@
|
||||
namespace Parallaction {
|
||||
|
||||
#define MAX_PASSWORD_LENGTH 7
|
||||
|
||||
/*
|
||||
#define QUESTION_BALLOON_X 140
|
||||
#define QUESTION_BALLOON_Y 10
|
||||
#define QUESTION_CHARACTER_X 190
|
||||
@ -41,6 +41,25 @@ namespace Parallaction {
|
||||
|
||||
#define ANSWER_CHARACTER_X 10
|
||||
#define ANSWER_CHARACTER_Y 80
|
||||
*/
|
||||
struct BalloonPositions {
|
||||
Common::Point _questionBalloon;
|
||||
Common::Point _questionChar;
|
||||
|
||||
Common::Point _answerChar;
|
||||
};
|
||||
|
||||
BalloonPositions _balloonPositions_NS = {
|
||||
Common::Point(140, 10),
|
||||
Common::Point(190, 80),
|
||||
Common::Point(10, 80)
|
||||
};
|
||||
|
||||
BalloonPositions _balloonPositions_BR = {
|
||||
Common::Point(0, 0),
|
||||
Common::Point(380, 80),
|
||||
Common::Point(10, 80)
|
||||
};
|
||||
|
||||
|
||||
class DialogueManager {
|
||||
@ -78,6 +97,7 @@ class DialogueManager {
|
||||
bool _isKeyDown;
|
||||
uint16 _downKey;
|
||||
|
||||
BalloonPositions _ballonPos;
|
||||
|
||||
public:
|
||||
DialogueManager(Parallaction *vm, ZonePtr z);
|
||||
@ -112,6 +132,15 @@ protected:
|
||||
};
|
||||
|
||||
DialogueManager::DialogueManager(Parallaction *vm, ZonePtr z) : _vm(vm), _z(z) {
|
||||
int gtype = vm->getGameType();
|
||||
if (gtype == GType_Nippon) {
|
||||
_ballonPos = _balloonPositions_NS;
|
||||
} else
|
||||
if (gtype == GType_BRA) {
|
||||
_ballonPos = _balloonPositions_BR;
|
||||
} else
|
||||
error("unsupported game in DialogueManager");
|
||||
|
||||
_dialogue = _z->u.speak->_dialogue;
|
||||
isNpc = scumm_stricmp(_z->u.speak->_name, "yourself") && _z->u.speak->_name[0] != '\0';
|
||||
_questioner = isNpc ? _vm->_disk->loadTalk(_z->u.speak->_name) : _vm->_char._talk;
|
||||
@ -168,16 +197,16 @@ bool DialogueManager::displayAnswers() {
|
||||
if (_askPassword) {
|
||||
resetPassword();
|
||||
// _vm->_balloonMan->setDialogueBalloon(_q->_answers[0]->_text, 1, 3);
|
||||
int id = _vm->_gfx->setItem(_answerer, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y);
|
||||
int id = _vm->_gfx->setItem(_answerer, _ballonPos._answerChar.x, _ballonPos._answerChar.y);
|
||||
_vm->_gfx->setItemFrame(id, 0);
|
||||
} else
|
||||
if (_numVisAnswers == 1) {
|
||||
int id = _vm->_gfx->setItem(_answerer, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y);
|
||||
int id = _vm->_gfx->setItem(_answerer, _ballonPos._answerChar.x, _ballonPos._answerChar.y);
|
||||
_vm->_gfx->setItemFrame(id, _q->_answers[0]->_mood & 0xF);
|
||||
_vm->_balloonMan->setBalloonText(0, _q->_answers[_visAnswers[0]]->_text, 0);
|
||||
} else
|
||||
if (_numVisAnswers > 1) {
|
||||
int id = _vm->_gfx->setItem(_answerer, ANSWER_CHARACTER_X, ANSWER_CHARACTER_Y);
|
||||
int id = _vm->_gfx->setItem(_answerer, _ballonPos._answerChar.x, _ballonPos._answerChar.y);
|
||||
_vm->_gfx->setItemFrame(id, _q->_answers[_visAnswers[0]]->_mood & 0xF);
|
||||
_oldSelection = -1;
|
||||
_selection = 0;
|
||||
@ -189,8 +218,8 @@ bool DialogueManager::displayAnswers() {
|
||||
bool DialogueManager::displayQuestion() {
|
||||
if (!scumm_stricmp(_q->_text, "NULL")) return false;
|
||||
|
||||
_vm->_balloonMan->setSingleBalloon(_q->_text, QUESTION_BALLOON_X, QUESTION_BALLOON_Y, _q->_mood & 0x10, 0);
|
||||
int id = _vm->_gfx->setItem(_questioner, QUESTION_CHARACTER_X, QUESTION_CHARACTER_Y);
|
||||
_vm->_balloonMan->setSingleBalloon(_q->_text, _ballonPos._questionBalloon.x, _ballonPos._questionBalloon.y, _q->_mood & 0x10, 0);
|
||||
int id = _vm->_gfx->setItem(_questioner, _ballonPos._questionChar.x, _ballonPos._questionChar.y);
|
||||
_vm->_gfx->setItemFrame(id, _q->_mood & 0xF);
|
||||
|
||||
return true;
|
||||
|
@ -144,7 +144,16 @@ GfxObj* DosDisk_br::loadTalk(const char *name) {
|
||||
|
||||
Common::File stream;
|
||||
stream.open(node);
|
||||
return new GfxObj(0, createSprites(stream), name);
|
||||
|
||||
// talk position is set to (0,0), because talks are always displayed at
|
||||
// absolute coordinates, set in the dialogue manager. The original used
|
||||
// to null out coordinates every time they were needed. We do it better!
|
||||
Sprites *spr = createSprites(stream);
|
||||
for (int i = 0; i < spr->getNum(); i++) {
|
||||
spr->_sprites[i].x = 0;
|
||||
spr->_sprites[i].y = 0;
|
||||
}
|
||||
return new GfxObj(0, spr, name);
|
||||
}
|
||||
|
||||
Script* DosDisk_br::loadLocation(const char *name) {
|
||||
|
@ -499,24 +499,31 @@ void Parallaction::enterCommentMode(ZonePtr z) {
|
||||
return;
|
||||
}
|
||||
|
||||
int id;
|
||||
// TODO: move this balloons stuff into DialogueManager and BalloonManager
|
||||
if (getGameType() == GType_Nippon) {
|
||||
int id;
|
||||
if (data->_filename) {
|
||||
if (data->_cnv == 0) {
|
||||
data->_cnv = _disk->loadStatic(data->_filename);
|
||||
}
|
||||
|
||||
if (data->_filename) {
|
||||
if (data->_cnv == 0) {
|
||||
data->_cnv = _disk->loadStatic(data->_filename);
|
||||
_gfx->setHalfbriteMode(true);
|
||||
_balloonMan->setSingleBalloon(data->_description, 0, 90, 0, 0);
|
||||
Common::Rect r;
|
||||
data->_cnv->getRect(0, r);
|
||||
id = _gfx->setItem(data->_cnv, 140, (_screenHeight - r.height())/2);
|
||||
_gfx->setItemFrame(id, 0);
|
||||
id = _gfx->setItem(_char._head, 100, 152);
|
||||
_gfx->setItemFrame(id, 0);
|
||||
} else {
|
||||
_balloonMan->setSingleBalloon(data->_description, 140, 10, 0, 0);
|
||||
id = _gfx->setItem(_char._talk, 190, 80);
|
||||
_gfx->setItemFrame(id, 0);
|
||||
}
|
||||
|
||||
_gfx->setHalfbriteMode(true);
|
||||
_balloonMan->setSingleBalloon(data->_description, 0, 90, 0, 0);
|
||||
Common::Rect r;
|
||||
data->_cnv->getRect(0, r);
|
||||
id = _gfx->setItem(data->_cnv, 140, (_screenHeight - r.height())/2);
|
||||
_gfx->setItemFrame(id, 0);
|
||||
id = _gfx->setItem(_char._head, 100, 152);
|
||||
_gfx->setItemFrame(id, 0);
|
||||
} else {
|
||||
_balloonMan->setSingleBalloon(data->_description, 140, 10, 0, 0);
|
||||
id = _gfx->setItem(_char._talk, 190, 80);
|
||||
} else
|
||||
if (getGameType() == GType_BRA) {
|
||||
_balloonMan->setSingleBalloon(data->_description, 0, 0, 1, 0);
|
||||
int id = _gfx->setItem(_char._talk, 10, 80);
|
||||
_gfx->setItemFrame(id, 0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user