diff options
| author | Martin Kiewitz | 2016-01-29 13:13:40 +0100 | 
|---|---|---|
| committer | Martin Kiewitz | 2016-01-29 13:22:22 +0100 | 
| commit | 8a595e7771aa89d06876e13d7ab6751e26da8982 (patch) | |
| tree | dfc61e112c9f7e5b1d9e295fbb60edf4ae1b65f3 /engines/agi/preagi.cpp | |
| parent | 1e73796bd0b17740ca4c35b9a7bd1882f9de6a37 (diff) | |
| download | scummvm-rg350-8a595e7771aa89d06876e13d7ab6751e26da8982.tar.gz scummvm-rg350-8a595e7771aa89d06876e13d7ab6751e26da8982.tar.bz2 scummvm-rg350-8a595e7771aa89d06876e13d7ab6751e26da8982.zip | |
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
Diffstat (limited to 'engines/agi/preagi.cpp')
| -rw-r--r-- | engines/agi/preagi.cpp | 29 | 
1 files changed, 10 insertions, 19 deletions
| 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<char>(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);  	}  } | 
