aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction/parallaction_br.cpp
diff options
context:
space:
mode:
authorNicola Mettifogo2008-02-02 12:36:06 +0000
committerNicola Mettifogo2008-02-02 12:36:06 +0000
commit9f3ecd64092f5765c0b9952b10ddc223858ac7eb (patch)
tree9e4da00b8e4dde90cd29fc95e5c1f8640827f1b3 /engines/parallaction/parallaction_br.cpp
parent33a534b76ca54b6230c851850fd431d345f383ca (diff)
downloadscummvm-rg350-9f3ecd64092f5765c0b9952b10ddc223858ac7eb.tar.gz
scummvm-rg350-9f3ecd64092f5765c0b9952b10ddc223858ac7eb.tar.bz2
scummvm-rg350-9f3ecd64092f5765c0b9952b10ddc223858ac7eb.zip
Cleanup of BRA menu code.
svn-id: r30739
Diffstat (limited to 'engines/parallaction/parallaction_br.cpp')
-rw-r--r--engines/parallaction/parallaction_br.cpp210
1 files changed, 3 insertions, 207 deletions
diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp
index 123a0f968e..f8ba6e7e07 100644
--- a/engines/parallaction/parallaction_br.cpp
+++ b/engines/parallaction/parallaction_br.cpp
@@ -31,17 +31,8 @@
namespace Parallaction {
-enum MenuOptions {
- kMenuPart0 = 0,
- kMenuPart1 = 1,
- kMenuPart2 = 2,
- kMenuPart3 = 3,
- kMenuPart4 = 4,
- kMenuLoadGame = 5,
- kMenuQuit = 6
-};
-const char *partNames[] = {
+const char *Parallaction_br::_partNames[] = {
"PART0",
"PART1",
"PART2",
@@ -104,33 +95,12 @@ void Parallaction_br::callFunction(uint index, void* parm) {
}
int Parallaction_br::go() {
- splash("dyna");
- splash("core");
-
- // TODO: load progress value from special save game
- _progress = 3;
while ((_engineFlags & kEngineQuit) == 0) {
-// initCharacter();
-
- int option = showMenu();
- switch (option) {
- case kMenuQuit:
- _engineFlags |= kEngineQuit;
- break;
-
- case kMenuLoadGame:
- warning("loadgame not yet implemented");
- break;
-
- default:
- _part = option;
- _disk->selectArchive(partNames[_part]);
- startPart();
- break;
- }
+ guiStart();
+// initCharacter();
runGame();
@@ -143,180 +113,6 @@ int Parallaction_br::go() {
return 0;
}
-void Parallaction_br::splash(const char *name) {
-
- _gfx->clearScreen();
- _gfx->setBackground(kBackgroundSlide, name, 0, 0);
- _gfx->_backgroundInfo.x = (_screenWidth - _gfx->_backgroundInfo.width) >> 1;
- _gfx->_backgroundInfo.y = (_screenHeight - _gfx->_backgroundInfo.height) >> 1;
- _gfx->updateScreen();
- _system->delayMillis(600);
-
- Palette blackPal;
- Palette pal(_gfx->_backgroundInfo.palette);
- for (uint i = 0; i < 64; i++) {
- pal.fadeTo(blackPal, 1);
- _gfx->setPalette(pal);
- _gfx->updateScreen();
- _system->delayMillis(20);
- }
-
-}
-
-#define MENUITEMS_X 250
-#define MENUITEMS_Y 200
-
-#define MENUITEM_WIDTH 190
-#define MENUITEM_HEIGHT 18
-
-void Parallaction_br::renderMenuItem(Graphics::Surface &surf, const char *text) {
- surf.create(MENUITEM_WIDTH, MENUITEM_HEIGHT, 1);
- _menuFont->setColor(0);
- _menuFont->drawString((byte*)surf.getBasePtr(5, 2), MENUITEM_WIDTH, text);
-}
-
-void Parallaction_br::invertMenuItem(Graphics::Surface &surf) {
- for (int i = 0; i < surf.w * surf.h; i++)
- ((byte*)surf.pixels)[i] ^= 0xD;
-}
-
-/*
- this adapter can handle Surfaces containing multiple frames,
- provided all these frames are the same width and height
-*/
-struct SurfaceToMultiFrames : public Frames {
-
- uint _num;
- uint _width, _height;
- Graphics::Surface *_surf;
-
- SurfaceToMultiFrames(uint num, uint w, uint h, Graphics::Surface *surf) : _num(num), _width(w), _height(h), _surf(surf) {
-
- }
-
- ~SurfaceToMultiFrames() {
- delete _surf;
- }
-
- uint16 getNum() {
- return _num;
- }
- byte* getData(uint16 index) {
- assert(index < _num);
- return (byte*)_surf->getBasePtr(0, _height * index);
- }
- void getRect(uint16 index, Common::Rect &r) {
- assert(index < _num);
- r.left = 0;
- r.top = 0;
- r.setWidth(_width);
- r.setHeight(_height);
- }
-
-};
-
-Frames* Parallaction_br::renderMenuItem(const char *text) {
- // this builds a surface containing two copies of the text.
- // one is in normal color, the other is inverted.
- // the two 'frames' are used to display selected/unselected menu items
-
- Graphics::Surface *surf = new Graphics::Surface;
- surf->create(MENUITEM_WIDTH, MENUITEM_HEIGHT*2, 1);
-
- // build first frame to be displayed when item is not selected
- _menuFont->setColor(0);
- _menuFont->drawString((byte*)surf->getBasePtr(5, 2), MENUITEM_WIDTH, text);
-
- // build second frame to be displayed when item is selected
- _menuFont->drawString((byte*)surf->getBasePtr(5, 2 + MENUITEM_HEIGHT), MENUITEM_WIDTH, text);
- byte *s = (byte*)surf->getBasePtr(0, MENUITEM_HEIGHT);
- for (int i = 0; i < surf->w * MENUITEM_HEIGHT; i++) {
- *s++ ^= 0xD;
- }
-
- // wrap the surface into the suitable Frames adapter
- return new SurfaceToMultiFrames(2, MENUITEM_WIDTH, MENUITEM_HEIGHT, surf);
-}
-
-
-int Parallaction_br::showMenu() {
- // TODO: filter menu entries according to progress in game
-
- #define NUM_MENULINES 7
- Frames *_lines[NUM_MENULINES];
-
- const char *menuStrings[NUM_MENULINES] = {
- "SEE INTRO",
- "NEW GAME",
- "SAVED GAME",
- "EXIT TO DOS",
- "PART 2",
- "PART 3",
- "PART 4"
- };
-
- MenuOptions options[NUM_MENULINES] = {
- kMenuPart0,
- kMenuPart1,
- kMenuLoadGame,
- kMenuQuit,
- kMenuPart2,
- kMenuPart3,
- kMenuPart4
- };
-
- _gfx->clearScreen();
- _gfx->setBackground(kBackgroundSlide, "tbra", 0, 0);
- _gfx->_backgroundInfo.x = 20;
- _gfx->_backgroundInfo.y = 50;
-
- int availItems = 4 + _progress;
-
- // TODO: keep track of and destroy menu item frames/surfaces
-
- int i;
- for (i = 0; i < availItems; i++) {
- _lines[i] = renderMenuItem(menuStrings[i]);
- uint id = _gfx->setItem(_lines[i], MENUITEMS_X, MENUITEMS_Y + MENUITEM_HEIGHT * i, 0xFF);
- _gfx->setItemFrame(id, 0);
- }
-
- int selectedItem = -1;
-
- setMousePointer(0);
-
- while (true) {
-
- if ((_mouseButtons == kMouseLeftUp) && selectedItem >= 0)
- break;
-
- readInput();
-
- if ((_mousePos.x > MENUITEMS_X) && (_mousePos.x < (MENUITEMS_X+MENUITEM_WIDTH)) && (_mousePos.y > MENUITEMS_Y)) {
- selectedItem = (_mousePos.y - MENUITEMS_Y) / MENUITEM_HEIGHT;
-
- if (!(selectedItem < availItems))
- selectedItem = -1;
- } else
- selectedItem = -1;
-
- for (int i = 0; i < availItems; i++) {
- _gfx->setItemFrame(i, selectedItem == i ? 1 : 0);
- }
-
- _gfx->updateScreen();
- _system->delayMillis(20);
- }
-
- _system->showMouse(false);
- _gfx->hideDialogueStuff();
-
- for (i = 0; i < availItems; i++) {
- delete _lines[i];
- }
-
- return options[selectedItem];
-}
void Parallaction_br::initFonts() {