From 14b485569bcbf3eba0b0e442ff6c701fb5981b99 Mon Sep 17 00:00:00 2001 From: Dries Harnie Date: Sat, 18 Feb 2012 22:18:34 +0100 Subject: [PATCH] EMI: Always reposition from original coordinates --- engines/grim/lua_v1_text.cpp | 2 +- engines/grim/textobject.cpp | 68 +++++++++++++++++------------------- engines/grim/textobject.h | 1 + 3 files changed, 34 insertions(+), 37 deletions(-) diff --git a/engines/grim/lua_v1_text.cpp b/engines/grim/lua_v1_text.cpp index b8d155dae0e..afe796d7acc 100644 --- a/engines/grim/lua_v1_text.cpp +++ b/engines/grim/lua_v1_text.cpp @@ -174,8 +174,8 @@ void Lua_V1::BlastText() { } void Lua_V1::SetOffscreenTextPos() { + // called with (0,0) on dialog entry, (nil, nil) on dialog exit warning("Lua_V1::SetOffscreenTextPos: implement opcode"); - // this sets where we shouldn't put dialog maybe? } void Lua_V1::TextFileGetLine() { diff --git a/engines/grim/textobject.cpp b/engines/grim/textobject.cpp index bdbf32801b6..ba2154c3f6e 100644 --- a/engines/grim/textobject.cpp +++ b/engines/grim/textobject.cpp @@ -146,24 +146,20 @@ void TextObject::destroy() { } void TextObject::reposition() { - // In EMI most stuff seems to be relative to the center, - // but sometimes it is not so I catch that with _x being over 320. - // This is probably not the corrent way to do it though. - if (!_positioned && g_grim->getGameType() == GType_MONKEY4) { - _positioned = true; - if (_x == 0) { - _x += 320; - if (_y < 0) { - _y = -_y; - } else { - _y = 240 - _y; - } - } else if (_x > 320) { - _y = -_y; + if (_positioned) + return; + + _positioned = true; + _posX = _x; + _posY = _y; + if (g_grim->getGameType() == GType_MONKEY4) { + if (_isSpeech) { + _posY = 480 - _y; } else { - _x += 320; - _y = 240 - _y; + _posX = _x + 320; + _posY = - _y; } + Debug::debug(Debug::TextObjects, "Repositioning (%d, %d) -> (%d, %d)", _x, _y, _posX, _posY); } } @@ -196,10 +192,10 @@ void TextObject::setupText() { // If the speaker is too close to the edge of the screen we have to make // some room for the subtitles. if (_isSpeech){ - if (_x < SCREEN_MARGIN) { - _x = SCREEN_MARGIN; - } else if (SCREEN_WIDTH - _x < SCREEN_MARGIN) { - _x = SCREEN_WIDTH - SCREEN_MARGIN; + if (_posX < SCREEN_MARGIN) { + _posX = SCREEN_MARGIN; + } else if (SCREEN_WIDTH - _posX < SCREEN_MARGIN) { + _posX = SCREEN_WIDTH - SCREEN_MARGIN; } } @@ -208,11 +204,11 @@ void TextObject::setupText() { // with GrimE. int maxWidth = 0; if (_justify == CENTER) { - maxWidth = 2 * MIN(_x, SCREEN_WIDTH - _x); + maxWidth = 2 * MIN(_posX, SCREEN_WIDTH - _posX); } else if (_justify == LJUSTIFY) { - maxWidth = SCREEN_WIDTH - _x; + maxWidth = SCREEN_WIDTH - _posX; } else if (_justify == RJUSTIFY) { - maxWidth = _x; + maxWidth = _posX; } // We break the message to lines not longer than maxWidth @@ -269,9 +265,9 @@ void TextObject::setupText() { // printed further down the screen. const int SCREEN_TOP_MARGIN = 16; if (_isSpeech) { - _y -= _numberLines * _font->getHeight(); - if (_y < SCREEN_TOP_MARGIN) { - _y = SCREEN_TOP_MARGIN; + _posY -= _numberLines * _font->getHeight(); + if (_posY < SCREEN_TOP_MARGIN) { + _posY = SCREEN_TOP_MARGIN; } } @@ -299,11 +295,11 @@ void TextObject::setupText() { } int TextObject::getLineX(int line) { - int x = _x; + int x = _posX; if (_justify == CENTER) - x = _x - (_font->getStringLength(_lines[line]) / 2); + x = _posX - (_font->getStringLength(_lines[line]) / 2); else if (_justify == RJUSTIFY) - x = _x - getBitmapWidth(); + x = _posX - getBitmapWidth(); if (x < 0) x = 0; @@ -311,20 +307,20 @@ int TextObject::getLineX(int line) { } int TextObject::getLineY(int line) { - int y = _y; + int y = _posY; if (_blastDraw) - y = _y + 5; + y = _posY + 5; else { if (_font->getHeight() == 21) // talk_font,verb_font - y = _y - 6; + y = _posY - 6; else if (_font->getHeight() == 26) // special_font - y = _y - 12; + y = _posY - 12; else if (_font->getHeight() == 13) // computer_font - y = _y - 6; + y = _posY - 6; else if (_font->getHeight() == 19) // pt_font - y = _y - 9; + y = _posY - 9; else - y = _y; + y = _posY; } if (y < 0) y = 0; diff --git a/engines/grim/textobject.h b/engines/grim/textobject.h index c668e5fbce6..b10bbec835e 100644 --- a/engines/grim/textobject.h +++ b/engines/grim/textobject.h @@ -62,6 +62,7 @@ protected: Color _fgColor; int _x, _y; + int _posX, _posY; int _width, _height; int _justify; Font *_font;