aboutsummaryrefslogtreecommitdiff
path: root/engines/m4
diff options
context:
space:
mode:
authorPaul Gilbert2010-03-14 05:47:33 +0000
committerPaul Gilbert2010-03-14 05:47:33 +0000
commit404088f58b0630ee357a03123e917c30d7674ee2 (patch)
treec8de0d28e105eef0fa15963eabfe73f7ff172d22 /engines/m4
parent77c821249e706875c45689ea8361773955cbd532 (diff)
downloadscummvm-rg350-404088f58b0630ee357a03123e917c30d7674ee2.tar.gz
scummvm-rg350-404088f58b0630ee357a03123e917c30d7674ee2.tar.bz2
scummvm-rg350-404088f58b0630ee357a03123e917c30d7674ee2.zip
Further separation of MADS and M4 scene logic
svn-id: r48257
Diffstat (limited to 'engines/m4')
-rw-r--r--engines/m4/m4_scene.cpp22
-rw-r--r--engines/m4/m4_scene.h1
-rw-r--r--engines/m4/mads_scene.cpp98
-rw-r--r--engines/m4/mads_scene.h1
-rw-r--r--engines/m4/scene.cpp119
-rw-r--r--engines/m4/scene.h2
6 files changed, 122 insertions, 121 deletions
diff --git a/engines/m4/m4_scene.cpp b/engines/m4/m4_scene.cpp
index 912ec45ceb..90f288c31a 100644
--- a/engines/m4/m4_scene.cpp
+++ b/engines/m4/m4_scene.cpp
@@ -117,6 +117,28 @@ void M4Scene::loadSceneInverseColourTable(int sceneNumber) {
iplS->read(_inverseColourTable, iplS->size());
_vm->res()->toss(filename);
}
+
+void M4Scene::loadSceneSpriteCodes(int sceneNumber) {
+ char filename[kM4MaxFilenameSize];
+ sprintf(filename, "%i.ssc", sceneNumber);
+
+ Common::SeekableReadStream *sceneS = _vm->res()->get(filename);
+
+ // TODO
+
+ if (sceneS != NULL) {
+ SpriteAsset* _sceneSpriteCodes = new SpriteAsset(_vm, sceneS, sceneS->size(), filename);
+ int colorCount = _sceneSpriteCodes->getColorCount();
+// RGB8* spritePalette = _sceneSpriteCodes->getPalette();
+ //_vm->_palette->setPalette(spritePalette, 0, colorCount);
+
+ printf("Scene has %d sprite codes, each one having %d colors\n", _sceneSpriteCodes->getCount(), colorCount);
+
+ // Note that toss() deletes the MemoryReadStream
+ _vm->res()->toss(filename);
+ }
+}
+
void M4Scene::loadScene(int sceneNumber) {
Scene::loadScene(sceneNumber);
diff --git a/engines/m4/m4_scene.h b/engines/m4/m4_scene.h
index c90bdbfeaa..14eea3dfac 100644
--- a/engines/m4/m4_scene.h
+++ b/engines/m4/m4_scene.h
@@ -55,6 +55,7 @@ private:
void loadSceneSprites(int sceneNumber);
void loadSceneResources(int sceneNumber);
void loadSceneInverseColourTable(int sceneNumber);
+ void loadSceneSpriteCodes(int sceneNumber);
void nextCommonCursor();
public:
M4Scene(M4Engine *vm);
diff --git a/engines/m4/mads_scene.cpp b/engines/m4/mads_scene.cpp
index 94ae83366b..338bc8fb4f 100644
--- a/engines/m4/mads_scene.cpp
+++ b/engines/m4/mads_scene.cpp
@@ -370,6 +370,104 @@ void MadsScene::loadPlayerSprites(const char *prefix) {
error("Couldn't find player sprites");
}
+enum boxSprites {
+ topLeft = 0,
+ topRight = 1,
+ bottomLeft = 2,
+ bottomRight = 3,
+ left = 4,
+ right = 5,
+ top = 6,
+ bottom = 7,
+ topMiddle = 8,
+ filler1 = 9,
+ filler2 = 10
+ // TODO: finish this
+};
+
+// TODO: calculate width and height, show text, show face if it exists
+// TODO: this has been tested with Dragonsphere only, there are some differences
+// in the sprites used in Phantom
+void MadsScene::showMADSV2TextBox(char *text, int x, int y, char *faceName) {
+ int repeatX = 40; // FIXME: this is hardcoded
+ int repeatY = 30; // FIXME: this is hardcoded
+ int curX = x, curY = y;
+ int topRightX = x; // TODO: this is probably not needed
+ Common::SeekableReadStream *data = _vm->res()->get("box.ss");
+ SpriteAsset *boxSprites = new SpriteAsset(_vm, data, data->size(), "box.ss");
+ _vm->res()->toss("box.ss");
+
+ RGBList *palData = new RGBList(boxSprites->getColorCount(), boxSprites->getPalette(), true);
+ _vm->_palette->addRange(palData);
+
+ for (int i = 0; i < boxSprites->getCount(); i++)
+ boxSprites->getFrame(i)->translate(palData); // sprite pixel translation
+
+ // Top left corner
+ boxSprites->getFrame(topLeft)->copyTo(_backgroundSurface, x, curY);
+ curX += boxSprites->getFrame(topLeft)->width();
+
+ // Top line
+ for (int i = 0; i < repeatX; i++) {
+ boxSprites->getFrame(top)->copyTo(_backgroundSurface, curX, curY + 3);
+ curX += boxSprites->getFrame(top)->width();
+ }
+
+ // Top right corner
+ boxSprites->getFrame(topRight)->copyTo(_backgroundSurface, curX, curY);
+ topRightX = curX;
+
+ // Top middle
+ // FIXME: the transparent color for this is also the black border color
+ boxSprites->getFrame(topMiddle)->copyTo(_backgroundSurface,
+ x + (curX - x) / 2 - boxSprites->getFrame(topMiddle)->width() / 2,
+ curY - 5, 167);
+ curX = x;
+ curY += boxSprites->getFrame(topLeft)->height();
+
+ // -----------------------------------------------------------------------------------------------
+
+ // Draw contents
+ for (int i = 0; i < repeatY; i++) {
+ for (int j = 0; j < repeatX; j++) {
+ if (j == 0) {
+ boxSprites->getFrame(left)->copyTo(_backgroundSurface, curX + 3, curY);
+ curX += boxSprites->getFrame(left)->width();
+ } else if (j == repeatX - 1) {
+ curX = topRightX - 2;
+ boxSprites->getFrame(right)->copyTo(_backgroundSurface, curX + 3, curY + 1);
+ } else {
+ // TODO: the background of the contents follows a pattern which is not understood yet
+ if (j % 2 == 0) {
+ boxSprites->getFrame(filler1)->copyTo(_backgroundSurface, curX + 3, curY);
+ curX += boxSprites->getFrame(filler1)->width();
+ } else {
+ boxSprites->getFrame(filler2)->copyTo(_backgroundSurface, curX + 3, curY);
+ curX += boxSprites->getFrame(filler2)->width();
+ }
+ }
+ } // for j
+ curX = x;
+ curY += boxSprites->getFrame(left)->height();
+ } // for i
+
+ // -----------------------------------------------------------------------------------------------
+ curX = x;
+
+ // Bottom left corner
+ boxSprites->getFrame(bottomLeft)->copyTo(_backgroundSurface, curX, curY);
+ curX += boxSprites->getFrame(bottomLeft)->width();
+
+ // Bottom line
+ for (int i = 0; i < repeatX; i++) {
+ boxSprites->getFrame(bottom)->copyTo(_backgroundSurface, curX, curY + 1);
+ curX += boxSprites->getFrame(bottom)->width();
+ }
+
+ // Bottom right corner
+ boxSprites->getFrame(bottomRight)->copyTo(_backgroundSurface, curX, curY + 1);
+}
+
/*--------------------------------------------------------------------------*/
MadsAction::MadsAction() {
diff --git a/engines/m4/mads_scene.h b/engines/m4/mads_scene.h
index e8b30b32ff..82ac4f28ba 100644
--- a/engines/m4/mads_scene.h
+++ b/engines/m4/mads_scene.h
@@ -192,6 +192,7 @@ public:
int loadSceneSpriteSet(const char *setName);
void loadPlayerSprites(const char *prefix);
+ void showMADSV2TextBox(char *text, int x, int y, char *faceName);
MadsInterfaceView *getInterface() { return (MadsInterfaceView *)_interfaceSurface; };
MadsSceneResources &getSceneResources() { return _sceneResources; };
diff --git a/engines/m4/scene.cpp b/engines/m4/scene.cpp
index da0f0e42aa..fb4145c123 100644
--- a/engines/m4/scene.cpp
+++ b/engines/m4/scene.cpp
@@ -91,27 +91,6 @@ void Scene::hideInterface() {
_vm->_viewManager->deleteView(_interfaceSurface);
}
-void Scene::loadSceneSpriteCodes(int sceneNumber) {
- char filename[kM4MaxFilenameSize];
- sprintf(filename, "%i.ssc", sceneNumber);
-
- Common::SeekableReadStream *sceneS = _vm->res()->get(filename);
-
- // TODO
-
- if (sceneS != NULL) {
- SpriteAsset* _sceneSpriteCodes = new SpriteAsset(_vm, sceneS, sceneS->size(), filename);
- int colorCount = _sceneSpriteCodes->getColorCount();
-// RGB8* spritePalette = _sceneSpriteCodes->getPalette();
- //_vm->_palette->setPalette(spritePalette, 0, colorCount);
-
- printf("Scene has %d sprite codes, each one having %d colors\n", _sceneSpriteCodes->getCount(), colorCount);
-
- // Note that toss() deletes the MemoryReadStream
- _vm->res()->toss(filename);
- }
-}
-
void Scene::showSprites() {
// TODO: This is all experimental code, it needs heavy restructuring
// and cleanup
@@ -222,102 +201,4 @@ bool Scene::onEvent(M4EventType eventType, int32 param1, int x, int y, bool &cap
return true;
}
-enum boxSprites {
- topLeft = 0,
- topRight = 1,
- bottomLeft = 2,
- bottomRight = 3,
- left = 4,
- right = 5,
- top = 6,
- bottom = 7,
- topMiddle = 8,
- filler1 = 9,
- filler2 = 10
- // TODO: finish this
-};
-
-// TODO: calculate width and height, show text, show face if it exists
-// TODO: this has been tested with Dragonsphere only, there are some differences
-// in the sprites used in Phantom
-void Scene::showMADSV2TextBox(char *text, int x, int y, char *faceName) {
- int repeatX = 40; // FIXME: this is hardcoded
- int repeatY = 30; // FIXME: this is hardcoded
- int curX = x, curY = y;
- int topRightX = x; // TODO: this is probably not needed
- Common::SeekableReadStream *data = _vm->res()->get("box.ss");
- SpriteAsset *boxSprites = new SpriteAsset(_vm, data, data->size(), "box.ss");
- _vm->res()->toss("box.ss");
-
- RGBList *palData = new RGBList(boxSprites->getColorCount(), boxSprites->getPalette(), true);
- _vm->_palette->addRange(palData);
-
- for (int i = 0; i < boxSprites->getCount(); i++)
- boxSprites->getFrame(i)->translate(palData); // sprite pixel translation
-
- // Top left corner
- boxSprites->getFrame(topLeft)->copyTo(_backgroundSurface, x, curY);
- curX += boxSprites->getFrame(topLeft)->width();
-
- // Top line
- for (int i = 0; i < repeatX; i++) {
- boxSprites->getFrame(top)->copyTo(_backgroundSurface, curX, curY + 3);
- curX += boxSprites->getFrame(top)->width();
- }
-
- // Top right corner
- boxSprites->getFrame(topRight)->copyTo(_backgroundSurface, curX, curY);
- topRightX = curX;
-
- // Top middle
- // FIXME: the transparent color for this is also the black border color
- boxSprites->getFrame(topMiddle)->copyTo(_backgroundSurface,
- x + (curX - x) / 2 - boxSprites->getFrame(topMiddle)->width() / 2,
- curY - 5, 167);
- curX = x;
- curY += boxSprites->getFrame(topLeft)->height();
-
- // -----------------------------------------------------------------------------------------------
-
- // Draw contents
- for (int i = 0; i < repeatY; i++) {
- for (int j = 0; j < repeatX; j++) {
- if (j == 0) {
- boxSprites->getFrame(left)->copyTo(_backgroundSurface, curX + 3, curY);
- curX += boxSprites->getFrame(left)->width();
- } else if (j == repeatX - 1) {
- curX = topRightX - 2;
- boxSprites->getFrame(right)->copyTo(_backgroundSurface, curX + 3, curY + 1);
- } else {
- // TODO: the background of the contents follows a pattern which is not understood yet
- if (j % 2 == 0) {
- boxSprites->getFrame(filler1)->copyTo(_backgroundSurface, curX + 3, curY);
- curX += boxSprites->getFrame(filler1)->width();
- } else {
- boxSprites->getFrame(filler2)->copyTo(_backgroundSurface, curX + 3, curY);
- curX += boxSprites->getFrame(filler2)->width();
- }
- }
- } // for j
- curX = x;
- curY += boxSprites->getFrame(left)->height();
- } // for i
-
- // -----------------------------------------------------------------------------------------------
- curX = x;
-
- // Bottom left corner
- boxSprites->getFrame(bottomLeft)->copyTo(_backgroundSurface, curX, curY);
- curX += boxSprites->getFrame(bottomLeft)->width();
-
- // Bottom line
- for (int i = 0; i < repeatX; i++) {
- boxSprites->getFrame(bottom)->copyTo(_backgroundSurface, curX, curY + 1);
- curX += boxSprites->getFrame(bottom)->width();
- }
-
- // Bottom right corner
- boxSprites->getFrame(bottomRight)->copyTo(_backgroundSurface, curX, curY + 1);
-}
-
} // End of namespace M4
diff --git a/engines/m4/scene.h b/engines/m4/scene.h
index d8349b541e..67acfc6654 100644
--- a/engines/m4/scene.h
+++ b/engines/m4/scene.h
@@ -108,7 +108,6 @@ public:
// TODO: perhaps move playIntro() someplace else?
void playIntro();
- void loadSceneSpriteCodes(int sceneNumber);
void showSprites();
void showHotSpots();
void showCodes();
@@ -116,7 +115,6 @@ public:
M4Surface *getBackgroundSurface() const { return _backgroundSurface; }
void showInterface();
void hideInterface();
- void showMADSV2TextBox(char *text, int x, int y, char *faceName);
GameInterfaceView *getInterface() { return _interfaceSurface; };
SceneResources &getSceneResources() { return *_sceneResources; };