[Scummvm-cvs-logs] scummvm master -> 9a08e0459c7544050bd18a637562ec444b5875a7

urukgit urukgit at users.noreply.github.com
Tue Feb 4 08:59:34 CET 2014


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
9a08e0459c AVALANCHE: Implement loading and drawing of the picture of the ghost.


Commit: 9a08e0459c7544050bd18a637562ec444b5875a7
    https://github.com/scummvm/scummvm/commit/9a08e0459c7544050bd18a637562ec444b5875a7
Author: uruk (koppirnyo at gmail.com)
Date: 2014-02-03T23:59:03-08:00

Commit Message:
AVALANCHE: Implement loading and drawing of the picture of the ghost.

Changed paths:
    engines/avalanche/animation.cpp
    engines/avalanche/ghostroom.cpp
    engines/avalanche/ghostroom.h
    engines/avalanche/graphics.cpp
    engines/avalanche/graphics.h



diff --git a/engines/avalanche/animation.cpp b/engines/avalanche/animation.cpp
index 375d393..a3c01af 100644
--- a/engines/avalanche/animation.cpp
+++ b/engines/avalanche/animation.cpp
@@ -815,7 +815,6 @@ void Animation::callSpecial(uint16 which) {
 		}
 		break;
 	case 4: // This is the ghost room link.
-		_vm->fadeOut();
 		_sprites[0]->turn(kDirRight); // you'll see this after we get back from bootstrap
 		_vm->_timer->addTimer(1, Timer::kProcGhostRoomPhew, Timer::kReasonGhostRoomPhew);
 		_vm->_ghostroom->run();
diff --git a/engines/avalanche/ghostroom.cpp b/engines/avalanche/ghostroom.cpp
index f56fcd2..491a686 100644
--- a/engines/avalanche/ghostroom.cpp
+++ b/engines/avalanche/ghostroom.cpp
@@ -78,7 +78,43 @@ void GhostRoom::bigGreenEyes(byte how) {
 	warning("STUB: bigGreenEyes()");
 }
 
+GhostRoom::ChunkBlockType GhostRoom::readChunkBlock(Common::File &file) {
+	ChunkBlockType cb;
+	cb._flavour = (FlavourType)file.readByte();
+	cb._x = file.readSint16LE();
+	cb._y = file.readSint16LE();
+	cb._xl = file.readSint16LE();
+	cb._yl = file.readSint16LE();
+	cb._size = file.readSint32LE();
+	return cb;
+}
+
 void GhostRoom::run() {
+	_vm->_graphics->saveScreen();
+	_vm->fadeOut();
+	_vm->fadeIn();
+	_vm->_graphics->drawFilledRectangle(Common::Rect(0, 0, 640, 200), kColorBlack);
+
+	if (!_file.open("spooky.avd"))
+		error("AVALANCHE: Trip: File not found: spooky.avd");
+
+	_file.seek(44);
+
+	// Initializing array.
+	for (int i = 0; i < 5; i++)
+		for (int j = 0; j < 2; j++)
+			for (int y = 0; y < 66; y++)
+				for (int x = 0; x < 26; x++)
+					_ghost[i][j][y][x] = 0;
+
+	// Reading in the pictures of the ghost.
+	for (int i = 0; i < 5; i++) {
+		ChunkBlockType cb = readChunkBlock(_file);
+		for (int j = 0; j < 2; j++)
+			for (uint16 y = 0; y <= cb._yl; y++)
+				_file.read(_ghost[i][j][y], cb._xl / 8);
+	}
+
 	warning("STUB: run()");
 }
 
diff --git a/engines/avalanche/ghostroom.h b/engines/avalanche/ghostroom.h
index e6dbfe4..8950a8a 100644
--- a/engines/avalanche/ghostroom.h
+++ b/engines/avalanche/ghostroom.h
@@ -29,6 +29,7 @@
 #define AVALANCHE_GHOSTROOM_H
 
 #include "common/scummsys.h"
+#include "graphics/surface.h"
 
 namespace Avalanche {
 class AvalancheEngine;
@@ -40,6 +41,15 @@ public:
 	void run();
 
 private:
+	enum FlavourType { ch_EGA, ch_BGI, ch_Natural, ch_Two, ch_One };
+
+	struct ChunkBlockType {
+		FlavourType _flavour;
+		int16 _x, _y;
+		int16 _xl, _yl;
+		int32 _size;
+	};
+
 	AvalancheEngine *_vm;
 
 	static const int8 kAdjustment[5];
@@ -48,19 +58,9 @@ private:
 	static const byte kGlerkFade[26];
 	static const byte kGreldetFade[18];
 
-	enum FlavourType { ch_EGA, ch_BGI, ch_Natural, ch_Two, ch_One };
-
-	struct ChunkBlockType {
-		FlavourType _flavour;
-		int8 _x, _y;
-		int8 _xl, _yl;
-		int32 _size;
-	};
-
 	typedef byte GlerkType[6][4][35][9];
 	
-	Common::File _f;
-	ChunkBlockType _cb;
+	Common::File _file;
 	byte _ghost[5][2][66][26];
 	void *_memLevel;
 	byte _y, _yy, _bit, _xofs;
@@ -72,7 +72,6 @@ private:
 	void *_greenEyes[5];
 	void *_greldet[6][2];
 	Common::Point _aarghWhere[6];
-	int16 _gd, _gm;
 	bool _gb;
 	byte _glerkStage;
 	int16 _batX, _batY;
@@ -88,6 +87,7 @@ private:
 	void wait(uint16 howLong);
 	void doBat();
 	void bigGreenEyes(byte how);
+	ChunkBlockType readChunkBlock(Common::File &file);
 };
 
 } // End of namespace Avalanche
diff --git a/engines/avalanche/graphics.cpp b/engines/avalanche/graphics.cpp
index a8efc4b..a85d7eb 100644
--- a/engines/avalanche/graphics.cpp
+++ b/engines/avalanche/graphics.cpp
@@ -500,6 +500,33 @@ void GraphicManager::nimFree() {
 	_nimLogo.free();
 }
 
+void GraphicManager::ghostDrawPicture(byte ghostArr[2][66][26], uint16 destX, uint16 destY) {
+	const byte kPlaneToUse[4] = { 0, 0, 0, 1 };
+	// Constants from the original code.
+	uint16 height = 66;
+	uint16 width = 26 * 8;
+
+	Graphics::Surface ghostPic;
+	ghostPic.create(width, height, Graphics::PixelFormat::createFormatCLUT8());
+
+	for (int y = 0; y < height; y++) {
+		for (int plane = 0; plane < 4; plane++) {
+			for (uint16 x = 0; x < width / 8; x ++) {
+				byte pixel = ghostArr[kPlaneToUse[plane]][y][x];
+				for (int bit = 0; bit < 8; bit++) {
+					byte pixelBit = (pixel >> bit) & 1;
+					if (pixelBit != 0)
+						*(byte *)ghostPic.getBasePtr(x * 8 + 7 - bit, y) += (pixelBit << plane);
+				}
+			}
+		}
+	}
+	
+	drawPicture(_surface, ghostPic, destX, destY);
+
+	ghostPic.free();
+}
+
 /**
  * This function mimics Pascal's getimage().
  */
diff --git a/engines/avalanche/graphics.h b/engines/avalanche/graphics.h
index 636ae6f..92b311e 100644
--- a/engines/avalanche/graphics.h
+++ b/engines/avalanche/graphics.h
@@ -38,6 +38,7 @@ namespace Avalanche {
 class AvalancheEngine;
 class AnimationType;
 struct SpriteType;
+struct ChunkBlockType;
 
 typedef byte FontType[256][16];
 typedef byte ManiType[2049];
@@ -62,6 +63,8 @@ public:
 	Common::Point drawScreenArc(int16 x, int16 y, int16 stAngle, int16 endAngle, uint16 radius, Color color);
 	void drawPieSlice(int16 x, int16 y, int16 stAngle, int16 endAngle, uint16 radius, Color color);
 	void drawTriangle(Common::Point *p, Color color);
+	void drawFilledRectangle(Common::Rect rect, Color color);
+	void drawRectangle(Common::Rect rect, Color color);
 	void drawNormalText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color);
 	void drawScrollText(const Common::String text, FontType font, byte fontHeight, int16 x, int16 y, Color color);
 	void drawDigit(int index, int x, int y);
@@ -79,8 +82,6 @@ public:
 	void drawDebugLines();
 
 	// For the mini-game "Nim".
-	void drawFilledRectangle(Common::Rect rect, Color color);
-	void drawRectangle(Common::Rect rect, Color color);
 	void nimLoad();
 	void nimDrawStone(int x, int y);
 	void nimDrawInitials();
@@ -90,6 +91,9 @@ public:
 	// Used in wobble()
 	void shiftScreen();
 
+	// Ghostroom's functions:
+	void ghostDrawPicture(byte ghostArr[2][66][26], uint16 destX, uint16 destY); // Very similar to loadPictureSign(). TODO: Unify the two later if possible.
+
 	void clearAlso();
 	void clearTextBar();
 	void setAlsoLine(int x1, int y1, int x2, int y2, Color color);






More information about the Scummvm-git-logs mailing list