diff options
| -rw-r--r-- | engines/lilliput/lilliput.cpp | 106 | ||||
| -rw-r--r-- | engines/lilliput/lilliput.h | 7 | ||||
| -rw-r--r-- | engines/lilliput/script.cpp | 40 | ||||
| -rw-r--r-- | engines/lilliput/script.h | 4 | 
4 files changed, 117 insertions, 40 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp index 50b19c299a..834eeb787a 100644 --- a/engines/lilliput/lilliput.cpp +++ b/engines/lilliput/lilliput.cpp @@ -125,6 +125,7 @@ LilliputEngine::LilliputEngine(OSystem *syst, const LilliputGameDescription *gd)  	_savedMousePosDivided = 0xFFFF;  	_skipDisplayFlag1 = 1;  	_skipDisplayFlag2 = 0; +	_displayMap = 0;  	_scriptHandler = new LilliputScript(this);  	_soundHandler = new LilliputSound(this); @@ -450,7 +451,7 @@ void LilliputEngine::displayFunction7() {  void LilliputEngine::displayFunction8() {  	debugC(2, kDebugEngine, "displayFunction8()"); -	if (_scriptHandler->displayMap == 1) +	if (_displayMap == 1)  		return;  	displayFunction5(); @@ -617,7 +618,7 @@ void LilliputEngine::displayFunction13(byte *buf, int var1, int var2, int var3)  void LilliputEngine::displayFunction14() {  	debugC(2, kDebugEngine, "displayFunction14()"); -	if (_scriptHandler->displayMap == 1) +	if (_displayMap == 1)  		return;  	if (_mouseDisplayX > 48) @@ -778,8 +779,12 @@ void LilliputEngine::displayFunction15() {  void LilliputEngine::displayFunction16() {  	debugC(2, kDebugEngine, "displayFunction16()"); -	if (_scriptHandler->displayMap == 1) { -		warning("sub_15F31"); +	if (_displayMap == 1) { +		bool forceReturnFl = false; +		sub15F31(forceReturnFl); +		if (forceReturnFl) +			return; +  		restoreMapPoints();  		sub16626();  		sub12F37(); @@ -803,8 +808,46 @@ void LilliputEngine::displayFunction16() {  	}  } -int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) -{ +void LilliputEngine::sub1863B() { +	_arr18560[0]._field0 = 0; +	_arr18560[1]._field0 = 0; +	_arr18560[2]._field0 = 0; +	_arr18560[3]._field0 = 0; +	_scriptHandler->_word1855E = 0; +} + +void LilliputEngine::paletteFadeOut() { +	debugC(2, kDebugEngine, "paletteFadeOut()"); + +	sub1863B(); +	byte palette[768]; +	for (int fade = 256; fade >= 0;	fade -= 8) { +		for (int i = 0; i < 768; i++) { +			palette[i] = (_curPalette[i] * fade) >> 8; +		} +		_system->getPaletteManager()->setPalette(palette, 0, 256); +		_system->updateScreen(); +		_system->delayMillis(20); +	} +} + +void LilliputEngine::paletteFadeIn() { +	debugC(2, kDebugEngine, "paletteFadeIn()"); + +	byte palette[768]; +	for (int fade = 8; fade <= 256;	fade += 8) { +		for (int i = 0; i < 768; i++) { +			palette[i] = (_curPalette[i] * fade) >> 8; +		} +		_system->getPaletteManager()->setPalette(palette, 0, 256); +		_system->updateScreen(); +		_system->delayMillis(20); +	} +} + +int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2) { +	debugC(2, kDebugEngine, "sub16DD5(%d, %d, %d, %d)", x1, y1, x2, y2); +  	byte *isoMap = _bufferIsoMap + (x1 << 8) + (y1 << 2) + 1;  	int dx = x2 - x1; @@ -868,6 +911,57 @@ int LilliputEngine::sub16DD5(int x1, int y1, int x2, int y2)  	return 1;  } +void LilliputEngine::sub15F75() { +	debugC(2, kDebugEngine, "sub15F75()"); + +	_byte129A0 = 0xFF; +	_savedMousePosDivided = 0xFFFF; +	byte newX = _mouseX >> 2;  +	byte newY = _mouseY / 3; + +	if ((newX >= 64) || (newY >= 64)) +		return; +	 +	_savedMousePosDivided = (newX << 8) + newY; +	_byte16F07_menuId = 5; +} + +void LilliputEngine::sub130B6() { +	debugC(2, kDebugEngine, "sub130B6()"); + +	for (int index = 0; index < _word12F68_ERULES; index++) { +		if (_scriptHandler->_array122E9[index] == 3) +			_scriptHandler->_array122E9[index] = 2; +	} +} + +void LilliputEngine::sub15F31(bool &forceReturnFl) { +	debugC(2, kDebugEngine, "sub15F31()"); + +	forceReturnFl = false; +	if (_displayMap != 1) +		return; + +	pollEvent(); +	warning("sub15F31- TODO: Check keyboard"); + +	if ((_mouseButton & 1) == 0) +		return; + +	_mouseButton = 0; +	sub15F75(); +	 +	_displayMap = 0; +	paletteFadeOut(); +	_word15AC2 = 0; +	sub130B6(); +	displayFunction12(); +	_scriptHandler->_heroismLevel = 0; +	sub16217(); +	paletteFadeIn(); +	forceReturnFl = true; +} +  void LilliputEngine::sub16CA0() {  	debugC(2, kDebugEngine, "sub16CA0()"); diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h index 756cc11604..e9b46953d0 100644 --- a/engines/lilliput/lilliput.h +++ b/engines/lilliput/lilliput.h @@ -123,6 +123,7 @@ public:  	bool _saveFlag;  	bool _int8installed; +	byte _displayMap;  	int _word10800_ERULES;  	int _numCharacters; @@ -232,6 +233,11 @@ public:  	void displayFunction18(int index, int x, int y, int flags);  	void displayString(byte *buf, int var2, int var4);  	void displayChar(int index, int var1); +	void sub130B6(); +	void sub15F75(); +	void sub1863B(); +	void paletteFadeOut(); +	void paletteFadeIn();  	void sortCharacters();  	void scrollToViewportCharacterTarget(); @@ -265,6 +271,7 @@ public:  	void sub1546F(byte displayX, byte displayY);  	void sub15498(byte x, byte y, int var2);  	void sub15A4C(int &vgaIndex, byte *srcBuf, int &bufIndex); +	void sub15F31(bool &forceReturnFl);  	void initGame(const LilliputGameDescription *gd);  	byte *loadVGA(Common::String filename, bool loadPal); diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index 9bcc8adf67..6b576930da 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -30,7 +30,6 @@ namespace Lilliput {  LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) {  	_byte129A0 = 0xFF; -	displayMap = 0;  	_byte1855D = 0;  	_byte12A04 = 0;  	_byte10806 = 0; @@ -764,14 +763,6 @@ void LilliputScript::runMenuScript(ScriptStream script) {  		_vm->update();  } -void LilliputScript::sub1863B() { -	_vm->_arr18560[0]._field0 = 0; -	_vm->_arr18560[1]._field0 = 0; -	_vm->_arr18560[2]._field0 = 0; -	_vm->_arr18560[3]._field0 = 0; -	_word1855E = 0; -} -  void LilliputScript::sub185ED(byte index, byte subIndex) {  	debugC(2, kDebugScript, "sub185ED");  	if (_vm->_arr18560[index]._field0 != 1) @@ -929,7 +920,7 @@ void LilliputScript::sub17D40(bool &forceReturnFl) {  	debugC(1, kDebugScript, "sub17D40()");  	forceReturnFl = false; -	if ((displayMap != 1) && (_vm->_characterRelativePositionX[_vm->_rulesBuffer2PrevIndx] != 0xFF)) +	if ((_vm->_displayMap != 1) && (_vm->_characterRelativePositionX[_vm->_rulesBuffer2PrevIndx] != 0xFF))  		return;  	forceReturnFl = true; @@ -2472,30 +2463,17 @@ void LilliputScript::OC_sub182EC() {  void LilliputScript::OC_PaletteFadeOut() {  	debugC(1, kDebugScript, "OC_PaletteFadeOut()"); -	sub1863B(); -	byte palette[768]; -	for (int fade = 256; fade >= 0;	fade -= 8) { -		for (int i = 0; i < 768; i++) { -			palette[i] = (_vm->_curPalette[i] * fade) >> 8; -		} -		_vm->_system->getPaletteManager()->setPalette(palette, 0, 256); -		_vm->_system->updateScreen(); -		_vm->_system->delayMillis(20); -	} +	_byte12A09 = 1; +	_vm->paletteFadeOut(); +	_byte12A09 = 0;  }  void LilliputScript::OC_PaletteFadeIn() {  	debugC(1, kDebugScript, "OC_PaletteFadeIn()"); -	byte palette[768]; -	for (int fade = 8; fade <= 256;	fade += 8) { -		for (int i = 0; i < 768; i++) { -			palette[i] = (_vm->_curPalette[i] * fade) >> 8; -		} -		_vm->_system->getPaletteManager()->setPalette(palette, 0, 256); -		_vm->_system->updateScreen(); -		_vm->_system->delayMillis(20); -	} +	_byte12A09 = 1; +	_vm->paletteFadeIn(); +	_byte12A09 = 0;  }  void LilliputScript::OC_loadAndDisplayCUBESx_GFX() { @@ -2594,7 +2572,7 @@ void LilliputScript::OC_sub1847F() {  	int var2 = _currScript->readUint16LE();  	int var4 = _currScript->readUint16LE(); -	if (displayMap != 1) { +	if (_vm->_displayMap != 1) {  		_vm->displayFunction5();  		sub18BE6(var1 & 0xFF, var2, var4);  		_vm->displayFunction4(); @@ -2667,7 +2645,7 @@ void LilliputScript::OC_sub1853B() {  	debugC(1, kDebugScript, "OC_sub1853B()");  	OC_PaletteFadeOut(); -	displayMap = 0; +	_vm->_displayMap = 0;  	_heroismLevel = 0;  	sub130B6(); diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h index 8356f92b1d..9cd0899be2 100644 --- a/engines/lilliput/script.h +++ b/engines/lilliput/script.h @@ -35,7 +35,6 @@ class LilliputEngine;  class LilliputScript {  public: -	byte displayMap;  	byte _byte12A04;  	byte _heroismLevel; @@ -57,6 +56,7 @@ public:  	int _word1881B;  	int _heroismBarX;  	int _heroismBarBottomY; +	int _word1855E;  	short _array12311[640];  	byte _array128EF[40]; @@ -92,14 +92,12 @@ private:  	int _word16F00;  	int _word10804; -	int _word1855E;  	int _word18776;  	int handleOpcode(ScriptStream *script);  	byte handleOpcodeType1(int curWord);  	void handleOpcodeType2(int curWord); -	void sub1863B();  	void sub185ED(byte index, byte subIndex);  	void sub185B4_display();  	void sub1823E(byte var1, byte var2, byte *curBufPtr);  | 
