From 8a595e7771aa89d06876e13d7ab6751e26da8982 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Fri, 29 Jan 2016 13:13:40 +0100 Subject: AGI: graphics rewrite + cleanup - graphics code fully rewritten - Apple IIgs font support - Amiga Topaz support - Word parser rewritten - menu code rewritten - removed forced 2 second delay on all room changes replaced with heuristic to detect situations, where it's required - lots of naming cleanup - new console commands show_map, screenobj, vmvars and vmflags - all sorts of hacks/workarounds removed - added SCI wait mouse cursor - added Apple IIgs mouse cursor - added Atari ST mouse cursor - added Amiga/Apple IIgs transition - added Atari ST transition - user can select another render mode and use Apple IIgs palette + transition for PC versions - inventory screen rewritten - SetSimple command now properly implemented - PreAGI Mickey: Sierra logo now shown - saved games: now saving controller key mapping also saving automatic save data (SetSimple command) - fixed invalid memory access when saving games (31 bytes were saved using Common::String c_ptr() Special Thanks to: - fuzzie for helping out with the Apple IIgs font + valgrind - eriktorbjorn for helping out with valgrind - LordHoto for figuring out the code, that caused invalid memory access in the original code, when saving a game - sev for help out with reversing the Amiga transition currently missing: - mouse support for menu - mouse support for system dialogs - predictive dialog support --- engines/agi/preagi.cpp | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) (limited to 'engines/agi/preagi.cpp') diff --git a/engines/agi/preagi.cpp b/engines/agi/preagi.cpp index c368c7b195..c0a53e7608 100644 --- a/engines/agi/preagi.cpp +++ b/engines/agi/preagi.cpp @@ -29,6 +29,7 @@ #include "agi/preagi.h" #include "agi/graphics.h" #include "agi/keyboard.h" +#include "agi/text.h" namespace Agi { @@ -55,32 +56,22 @@ PreAgiEngine::PreAgiEngine(OSystem *syst, const AGIGameDescription *gameDesc) : void PreAgiEngine::initialize() { initRenderMode(); + initFont(); _gfx = new GfxMgr(this); _picture = new PictureMgr(this, _gfx); - if (getGameID() == GID_MICKEY) { - _fontData = fontData_Mickey; - } else { - _fontData = fontData_IBM; - } - _gfx->initMachine(); _game.gameFlags = 0; - _game.colorFg = 15; - _game.colorBg = 0; + //_game._vm->_text->charAttrib_Set(15, 0); _defaultColor = 0xF; _game.name[0] = '\0'; - _game.sbufOrig = (uint8 *)calloc(_WIDTH, _HEIGHT * 2); // Allocate space for two AGI screens vertically - _game.sbuf16c = _game.sbufOrig + SBUF16_OFFSET; // Make sbuf16c point to the 16 color (+control line & priority info) AGI screen - _game.sbuf = _game.sbuf16c; // Make sbuf point to the 16 color (+control line & priority info) AGI screen by default - - _game.lineMinPrint = 0; // hardcoded + //_game._vm->_text->configureScreen(0); // hardcoded _gfx->initVideo(); @@ -91,7 +82,7 @@ void PreAgiEngine::initialize() { debugC(2, kDebugLevelMain, "Detect game"); // clear all resources and events - for (int i = 0; i < MAX_DIRS; i++) { + for (int i = 0; i < MAX_DIRECTORY_ENTRIES; i++) { memset(&_game.pictures[i], 0, sizeof(struct AgiPicture)); memset(&_game.sounds[i], 0, sizeof(class AgiSound *)); // _game.sounds contains pointers now memset(&_game.dirPic[i], 0, sizeof(struct AgiDir)); @@ -113,11 +104,11 @@ void PreAgiEngine::clearScreen(int attr, bool overrideDefault) { if (overrideDefault) _defaultColor = attr; - _gfx->clearScreen((attr & 0xF0) / 0x10); + _gfx->clearDisplay((attr & 0xF0) / 0x10); } void PreAgiEngine::clearGfxScreen(int attr) { - _gfx->drawRectangle(0, 0, GFX_WIDTH - 1, IDI_MAX_ROW_PIC * 8 -1, (attr & 0xF0) / 0x10); + _gfx->drawDisplayRect(0, 0, GFX_WIDTH - 1, IDI_MAX_ROW_PIC * 8 -1, (attr & 0xF0) / 0x10); } // String functions @@ -143,7 +134,7 @@ void PreAgiEngine::drawStr(int row, int col, int attr, const char *buffer) { break; default: - _gfx->putTextCharacter(1, col * 8 , row * 8, static_cast(code), attr & 0x0f, (attr & 0xf0) / 0x10, false, _fontData); + _gfx->drawCharacter(row, col, code, attr & 0x0f, attr >> 4, false); if (++col == 320 / 8) { col = 0; @@ -176,7 +167,7 @@ void PreAgiEngine::clearRow(int row) { void PreAgiEngine::printStr(const char* szMsg) { clearTextArea(); drawStr(21, 0, IDA_DEFAULT, szMsg); - _gfx->doUpdate(); + g_system->updateScreen(); } void PreAgiEngine::XOR80(char *buffer) { @@ -274,7 +265,7 @@ void PreAgiEngine::waitForTimer(int msec_delay) { uint32 start_time = _system->getMillis(); while (_system->getMillis() < start_time + msec_delay) { - _gfx->doUpdate(); + g_system->updateScreen(); _system->delayMillis(10); } } -- cgit v1.2.3