[Scummvm-cvs-logs] CVS: scummvm/queen display.cpp,1.34,1.35 display.h,1.27,1.28 input.cpp,1.16,1.17 input.h,1.13,1.14 logic.cpp,1.138,1.139

Gregory Montoir cyx at users.sourceforge.net
Fri Dec 26 06:50:01 CET 2003


Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1:/tmp/cvs-serv26712/queen

Modified Files:
	display.cpp display.h input.cpp input.h logic.cpp 
Log Message:
enable original screen blankers

Index: display.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/display.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- display.cpp	11 Dec 2003 22:16:34 -0000	1.34
+++ display.cpp	26 Dec 2003 14:49:49 -0000	1.35
@@ -109,12 +109,15 @@
 	_buffer[RB_BACKDROP] = new uint8[BACKDROP_W * BACKDROP_H];
 	_buffer[RB_PANEL]    = new uint8[PANEL_W * PANEL_H];
 	_buffer[RB_SCREEN]   = new uint8[SCREEN_W * SCREEN_H];
+	_buffer[RB_MINI]     = new uint8[MINI_W * MINI_H];
 	memset(_buffer[RB_BACKDROP], 0, BACKDROP_W * BACKDROP_H);
 	memset(_buffer[RB_PANEL],    0, PANEL_W * PANEL_H);
 	memset(_buffer[RB_SCREEN],   0, SCREEN_W * SCREEN_H);
+	memset(_buffer[RB_MINI],     0, MINI_W * MINI_H);
 	_bufPitch[RB_BACKDROP] = BACKDROP_W;
 	_bufPitch[RB_PANEL]    = PANEL_W;
 	_bufPitch[RB_SCREEN]   = SCREEN_W;
+	_bufPitch[RB_MINI]     = MINI_H;
 
 	_pal.room   = new uint8[ 256 * 3 ];
 	_pal.screen = new uint8[ 256 * 3 ];
@@ -125,6 +128,7 @@
 	_pal.scrollable = true;
 	
 	_horizontalScroll = 0;
+	_curBlankingEffect = 0;
 }
 
 
@@ -133,6 +137,7 @@
 	delete[] _buffer[RB_BACKDROP];
 	delete[] _buffer[RB_PANEL];
 	delete[] _buffer[RB_SCREEN];
+	delete[] _buffer[RB_MINI];
 
 	delete[] _pal.room;
 	delete[] _pal.screen;
@@ -691,9 +696,7 @@
 		_pal.dirtyMin = 144;
 		_pal.dirtyMax = 144;
 	}
-	_system->copy_rect(_buffer[RB_SCREEN], _bufPitch[RB_SCREEN], 0, 0, SCREEN_W, SCREEN_H);
-	_system->update_screen();
-	waitForTimer();
+	drawScreen();
 }
 
 
@@ -879,6 +882,111 @@
 	}
 }
 
+
+void Display::drawScreen() {
+
+	_system->copy_rect(_buffer[RB_SCREEN], _bufPitch[RB_SCREEN], 0, 0, SCREEN_W, SCREEN_H);
+	_system->update_screen();
+	waitForTimer();
+}
+
+
+
+void Display::blankScreen() {
+
+	typedef void (Display::*BlankerEffect)();
+	static const BlankerEffect effects[] = {
+		&Display::blankScreenEffect1,
+		&Display::blankScreenEffect2,
+		&Display::blankScreenEffect3
+	};
+	(this->*effects[_curBlankingEffect])();
+	_curBlankingEffect = (_curBlankingEffect + 1) % 3;
+}
+
+
+void Display::blankScreenEffect1() {
+
+	while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) {
+		for(int i = 0; i < 2; ++i) {    
+			uint16 x = _vm->randomizer.getRandomNumber(SCREEN_W - MINI_W - 2) + 1;
+			uint16 y = _vm->randomizer.getRandomNumber(SCREEN_H - MINI_H - 2) + 1;
+			uint8 *p = _buffer[RB_SCREEN] + _bufPitch[RB_SCREEN] * y + x;
+			blit(RB_MINI, 0, 0, p, MINI_W, MINI_H, _bufPitch[RB_SCREEN], false, false);
+			if (_vm->randomizer.getRandomNumber(1) & 1) {
+				--x;
+			} else {
+				++x;
+			}
+			if (_vm->randomizer.getRandomNumber(1) & 1) {
+				--y;
+			} else {
+				++y;
+			}
+			blit(RB_SCREEN, x, y, _buffer[RB_MINI], MINI_W, MINI_H, _bufPitch[RB_MINI], false, false);
+			drawScreen();
+		}
+	}
+}
+
+
+void Display::blankScreenEffect2() {
+
+	while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) {
+		uint16 x = _vm->randomizer.getRandomNumber(SCREEN_W - 2);
+		uint16 y = _vm->randomizer.getRandomNumber(SCREEN_H - 2);
+		uint8 c = 0;
+		switch (_vm->randomizer.getRandomNumber(3)) {
+		case 0:
+			c = *(_buffer[RB_SCREEN] + _bufPitch[RB_SCREEN] * y + x);
+			break;
+		case 1:
+			c = *(_buffer[RB_SCREEN] + _bufPitch[RB_SCREEN] * y + x + 1);
+			break;
+		case 2:
+			c = *(_buffer[RB_SCREEN] + _bufPitch[RB_SCREEN] * (y + 1) + x);
+			break;
+		case 3:
+			c = *(_buffer[RB_SCREEN] + _bufPitch[RB_SCREEN] * (y + 1) + x + 1);
+			break;
+		default:
+			break;
+		}
+		uint8 *p = _buffer[RB_SCREEN] + y * _bufPitch[RB_SCREEN] + x;
+		int j = 2;
+		while (j--) {
+			memset(p, c, 2);
+			p += _bufPitch[RB_SCREEN];
+		}
+		drawScreen();
+	}
+}
+
+
+void Display::blankScreenEffect3() {
+
+	uint32 i = 0;
+	while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) {
+		uint16 x = _vm->randomizer.getRandomNumber(SCREEN_W - 2);
+		uint16 y = _vm->randomizer.getRandomNumber(SCREEN_H - 2);
+		uint8 *p = _buffer[RB_SCREEN] + _bufPitch[RB_SCREEN] * y + x;
+		uint8 p0 = *p;
+		uint8 p1 = *(p + 1);
+		uint8 p2 = *(p + _bufPitch[RB_SCREEN]);
+		uint8 p3 = *(p + _bufPitch[RB_SCREEN] + 1);
+		uint8 c = (p0 + p1 + p2 + p3) / 4;
+		int j = 2;
+		while (j--) {
+			memset(p, c, 2);
+			p += _bufPitch[RB_SCREEN];
+		}
+		if (i > 4000000) {
+			memset(_buffer[RB_SCREEN], 0, SCREEN_W * SCREEN_H);
+		}
+		drawScreen();
+		++i;
+	}
+}
 
 
 const uint8 TextRenderer::_font[] = {

Index: display.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/display.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- display.h	11 Dec 2003 22:16:34 -0000	1.27
+++ display.h	26 Dec 2003 14:49:49 -0000	1.28
@@ -31,7 +31,8 @@
 enum RenderingBuffer {
 	RB_BACKDROP = 0,
 	RB_PANEL    = 1,
-	RB_SCREEN   = 2
+	RB_SCREEN   = 2,
+	RB_MINI     = 3
 };
 
 enum JoePalette {
@@ -112,6 +113,12 @@
 	void showMouseCursor(bool show);
 
 	void drawBox(int16 x1, int16 y1, int16 x2, int16 y2, uint8 col);
+	void drawScreen();
+
+	void blankScreen();
+	void blankScreenEffect1();
+	void blankScreenEffect2();
+	void blankScreenEffect3();
 
 private:
 
@@ -125,7 +132,9 @@
 		SCREEN_W   = 320,
 		SCREEN_H   = 200,
 		PANEL_W    = 320,
-		PANEL_H    =  50
+		PANEL_H    =  50,
+		MINI_W     =  32,
+		MINI_H     =  32
 	};
 
 	TextRenderer _textRenderer;
@@ -137,8 +146,8 @@
 		bool scrollable;
 	} _pal;
 
-	uint8 *_buffer[3];
-	uint16 _bufPitch[3];
+	uint8 *_buffer[4];
+	uint16 _bufPitch[4];
 
 	bool _fullscreen;
 
@@ -146,6 +155,7 @@
 	uint16 _bdWidth, _bdHeight;
 
 	bool _gotTick;
+	int _curBlankingEffect;
 
 	Dynalum _dynalum;
 	OSystem *_system;

Index: input.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/input.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- input.cpp	26 Dec 2003 12:58:27 -0000	1.16
+++ input.cpp	26 Dec 2003 14:49:49 -0000	1.17
@@ -37,7 +37,7 @@
 	_system(system), _fastMode(false), _keyVerb(VERB_NONE), 
 	_cutawayRunning(false), _cutawayQuit(false), _talkQuit(false),
 	_quickSave(false), _quickLoad(false), _debugger(false),
-	_inKey(0), _mouse_x(0), _mouse_y(0), _mouseButton(0) {
+	_inKey(0), _mouse_x(0), _mouse_y(0), _mouseButton(0), _idleTime(0) {
 
 	switch (language) {
 		case ENGLISH:
@@ -75,8 +75,13 @@
 	uint32 start = _system->get_msecs();
 	uint32 cur = start;
 
+	if (_idleTime < DELAY_SCREEN_BLANKER) {
+		_idleTime += amount;
+	}
+
 	do {
 		while (_system->poll_event(&event)) {
+			_idleTime = 0;
 			switch (event.event_code) {
 				case OSystem::EVENT_KEYDOWN:
 					debug(1, "event.kbd.keycode = %i (%c)", 

Index: input.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/input.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- input.h	26 Dec 2003 12:58:27 -0000	1.13
+++ input.h	26 Dec 2003 14:49:49 -0000	1.14
@@ -34,7 +34,8 @@
 		//! Adjust here to change delays!
 		enum {
 			DELAY_SHORT  =  10,
-			DELAY_NORMAL = 100
+			DELAY_NORMAL = 100,
+			DELAY_SCREEN_BLANKER = 5 * 60 * 1000
 		};
 
 		enum {
@@ -87,6 +88,8 @@
 		int mouseButton() const { return _mouseButton; }
 		void clearMouseButton() { _mouseButton = 0; }
 
+		uint32 idleTime() const { return _idleTime; }
+
 	private:
 
 		enum KeyCode {
@@ -154,6 +157,8 @@
 
 		//! Set by delay();
 		int _mouseButton;
+
+		uint32 _idleTime;
 
 		//! Command keys for current language
 		const char *_currentCommandKeys;

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/logic.cpp,v
retrieving revision 1.138
retrieving revision 1.139
diff -u -d -r1.138 -r1.139
--- logic.cpp	26 Dec 2003 12:58:27 -0000	1.138
+++ logic.cpp	26 Dec 2003 14:49:49 -0000	1.139
@@ -2258,6 +2258,9 @@
 			_vm->input()->quickLoadReset();
 			gameLoad(0);
 		}
+		if (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) {
+			_vm->display()->blankScreen();
+		}
 	}
 }
 





More information about the Scummvm-git-logs mailing list