AVALANCHE: Implement loading and drawing of the picture of the ghost.
This commit is contained in:
parent
a67b7f487c
commit
9a08e0459c
5 changed files with 81 additions and 15 deletions
|
@ -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();
|
||||
|
|
|
@ -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()");
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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().
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue