aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2014-03-22 14:20:04 -0400
committerPaul Gilbert2014-03-22 14:20:04 -0400
commitbbabe2b06b479fb5775b55c0de7b10df7ff67501 (patch)
tree88ffa042e77771ca25d482321642d201feec04a2
parent7cdaa9648c0c49345460a0ab194a4ca97869e6bd (diff)
downloadscummvm-rg350-bbabe2b06b479fb5775b55c0de7b10df7ff67501.tar.gz
scummvm-rg350-bbabe2b06b479fb5775b55c0de7b10df7ff67501.tar.bz2
scummvm-rg350-bbabe2b06b479fb5775b55c0de7b10df7ff67501.zip
MADS: Fix positioning of kernel messages
-rw-r--r--engines/mads/messages.cpp19
-rw-r--r--engines/mads/messages.h2
-rw-r--r--engines/mads/player.h8
3 files changed, 16 insertions, 13 deletions
diff --git a/engines/mads/messages.cpp b/engines/mads/messages.cpp
index 592dd4bd28..6dde40bbda 100644
--- a/engines/mads/messages.cpp
+++ b/engines/mads/messages.cpp
@@ -36,7 +36,6 @@ KernelMessages::KernelMessages(MADSEngine *vm): _vm(vm) {
}
_talkFont = _vm->_font->getFont(FONT_CONVERSATION);
- word_8469E = 0;
}
KernelMessages::~KernelMessages() {
@@ -89,7 +88,8 @@ int KernelMessages::add(const Common::Point &pt, uint fontColor, uint8 flags,
int KernelMessages::addQuote(int quoteId, int abortTimers, uint32 timeout) {
Common::String quoteStr = _vm->_game->getQuote(quoteId);
- return add(Common::Point(), 0x1110, KMSG_PLAYER_TIMEOUT | KMSG_CENTER_ALIGN, abortTimers, timeout, quoteStr);
+ return add(Common::Point(), 0x1110, KMSG_PLAYER_TIMEOUT | KMSG_CENTER_ALIGN,
+ abortTimers, timeout, quoteStr);
}
void KernelMessages::scrollMessage(int msgIndex, int numTicks, bool quoted) {
@@ -203,10 +203,16 @@ void KernelMessages::processText(int msgIndex) {
}
}
+ Player &player = _vm->_game->_player;
if (msg._flags & KMSG_PLAYER_TIMEOUT) {
- if (word_8469E != 0) {
- warning("TODO: KernelMessages::processText");
- // TODO: Figure out various flags
+ if (player._visible3) {
+ SpriteAsset &asset = *_vm->_game->_scene._sprites[player._spritesStart + player._spritesIdx];
+ MSprite *frame = asset.getFrame(player._frameNum - 1);
+
+ int yAmount = player._currentScale * player._yScale / 100;
+ x1 = player._playerPos.x;
+ y1 = (frame->h * player._currentScale / -100) + yAmount +
+ player._playerPos.y - 15;
} else {
x1 = 160;
y1 = 78;
@@ -222,11 +228,10 @@ void KernelMessages::processText(int msgIndex) {
++msg._msgOffset;
msg._msg.setChar(msg._asciiChar2, msg._msgOffset);
msg._asciiChar = msg._msg[msg._msgOffset];
- msg._asciiChar2 = msg._msg[msg._msgOffset + 1];
+ msg._asciiChar2 = !msg._asciiChar ? '\0' : msg._msg[msg._msgOffset + 1];
if (!msg._asciiChar) {
// End of message
- msg._msg.setChar('\0', msg._msgOffset);
msg._flags &= ~KMSG_SCROLL;
} else if (msg._flags & KMSG_QUOTED) {
msg._msg.setChar('"', msg._msgOffset);
diff --git a/engines/mads/messages.h b/engines/mads/messages.h
index 205cbf8f30..8fb75953f6 100644
--- a/engines/mads/messages.h
+++ b/engines/mads/messages.h
@@ -72,8 +72,6 @@ private:
Common::Array<KernelMessage> _entries;
Font *_talkFont;
public:
- int word_8469E;
-public:
KernelMessages(MADSEngine *vm);
~KernelMessages();
diff --git a/engines/mads/player.h b/engines/mads/player.h
index 8bc0ae73a1..d7e074afc8 100644
--- a/engines/mads/player.h
+++ b/engines/mads/player.h
@@ -40,11 +40,7 @@ private:
MADSEngine *_vm;
bool _highSprites;
bool _spriteSetsPresent[PLAYER_SPRITES_FILE_COUNT];
- int _currentDepth;
- int _currentScale;
int _frameOffset;
- int _frameNum;
- int _yScale;
int _frameCount;
int _frameListIndex;
int _actionIndex;
@@ -111,6 +107,7 @@ public:
bool _visible;
bool _priorVisible;
bool _visible3;
+ int _frameNum;
Common::Point _playerPos;
Common::Point _destPos;
Common::Point _posChange;
@@ -126,6 +123,9 @@ public:
int _unk3;
bool _unk4;
bool _forceRefresh;
+ int _yScale;
+ int _currentDepth;
+ int _currentScale;
Common::String _spritesPrefix;
int _routeCount;
int _routeOffset;