diff options
Diffstat (limited to 'engines/parallaction')
-rw-r--r-- | engines/parallaction/debug.cpp | 12 | ||||
-rw-r--r-- | engines/parallaction/debug.h | 2 | ||||
-rw-r--r-- | engines/parallaction/graphics.cpp | 108 | ||||
-rw-r--r-- | engines/parallaction/graphics.h | 15 | ||||
-rw-r--r-- | engines/parallaction/parallaction.cpp | 63 | ||||
-rw-r--r-- | engines/parallaction/parallaction.h | 4 |
6 files changed, 39 insertions, 165 deletions
diff --git a/engines/parallaction/debug.cpp b/engines/parallaction/debug.cpp index 02ac4f5a38..22b2ac6bec 100644 --- a/engines/parallaction/debug.cpp +++ b/engines/parallaction/debug.cpp @@ -45,7 +45,6 @@ Debugger::Debugger(Parallaction *vm) DCmd_Register("localflags", WRAP_METHOD(Debugger, Cmd_LocalFlags)); DCmd_Register("locations", WRAP_METHOD(Debugger, Cmd_Locations)); DCmd_Register("gfxobjects", WRAP_METHOD(Debugger, Cmd_GfxObjects)); - DCmd_Register("set", WRAP_METHOD(Debugger, Cmd_Set)); DCmd_Register("programs", WRAP_METHOD(Debugger, Cmd_Programs)); } @@ -204,17 +203,6 @@ bool Debugger::Cmd_GfxObjects(int argc, const char **argv) { return true; } -bool Debugger::Cmd_Set(int argc, const char** argv) { - - if (argc < 3) { - DebugPrintf("set <var name> <value>\n"); - } else { - _vm->_gfx->setVar(Common::String(argv[1]), atoi(argv[2])); - } - - return true; -} - bool Debugger::Cmd_Programs(int argc, const char** argv) { ProgramList::iterator b = _vm->_location._programs.begin(); diff --git a/engines/parallaction/debug.h b/engines/parallaction/debug.h index 62bc3179cc..09938b8f1f 100644 --- a/engines/parallaction/debug.h +++ b/engines/parallaction/debug.h @@ -28,8 +28,6 @@ protected: bool Cmd_GlobalFlags(int argc, const char **argv); bool Cmd_Locations(int argc, const char **argv); bool Cmd_GfxObjects(int argc, const char **argv); - bool Cmd_GfxFeature(int argc, const char** argv); - bool Cmd_Set(int argc, const char** argv); bool Cmd_Programs(int argc, const char** argv); }; diff --git a/engines/parallaction/graphics.cpp b/engines/parallaction/graphics.cpp index 8ad52b9848..4828d7ad7d 100644 --- a/engines/parallaction/graphics.cpp +++ b/engines/parallaction/graphics.cpp @@ -40,36 +40,6 @@ namespace Parallaction { #define MAXIMUM_UNPACKED_BITMAP_SIZE 641*401 -void Gfx::registerVar(const Common::String &name, int32 initialValue) { - if (_vars.contains(name)) { - warning("Variable '%s' already registered, ignoring initial value.\n", name.c_str()); - } else { - _vars.setVal(name, initialValue); - } -} - -void Gfx::setVar(const Common::String &name, int32 value) { - if (!_vars.contains(name)) { - warning("Variable '%s' doesn't exist, skipping assignment.\n", name.c_str()); - } else { - _vars.setVal(name, value); - } -} - -int32 Gfx::getVar(const Common::String &name) { - int32 v = 0; - - if (!_vars.contains(name)) { - warning("Variable '%s' doesn't exist, returning default value.\n", name.c_str()); - } else { - v = _vars.getVal(name); - } - - return v; -} - - - #define LABEL_TRANSPARENT_COLOR 0xFF void halfbritePixel(int x, int y, int color, void *data) { @@ -343,56 +313,6 @@ void Gfx::drawList(Graphics::Surface &surface, GfxObjArray &list) { } } -void Gfx::beginFrame() { - _skipBackground = (_backgroundInfo->bg.pixels == 0); // don't render frame if background is missing - - if (!_skipBackground) { - int32 oldBackgroundMode = _varBackgroundMode; - _varBackgroundMode = getVar("background_mode"); - if (oldBackgroundMode != _varBackgroundMode) { - switch (_varBackgroundMode) { - case 1: - _bitmapMask.free(); - break; - case 2: - _bitmapMask.create(_backgroundInfo->width, _backgroundInfo->height, 1); - byte *data = (byte*)_bitmapMask.pixels; - for (uint y = 0; y < _bitmapMask.h; y++) { - for (uint x = 0; x < _bitmapMask.w; x++) { - *data++ = _backgroundInfo->mask.getValue(x, y); - } - } -#if 0 - Common::DumpFile dump; - dump.open("maskdump.bin"); - dump.write(_bitmapMask.pixels, _bitmapMask.w * _bitmapMask.h); - dump.close(); -#endif - break; - } - } - } - - _varDrawPathZones = getVar("draw_path_zones"); - if (_varDrawPathZones == 1 && _gameType != GType_BRA) { - setVar("draw_path_zones", 0); - _varDrawPathZones = 0; - warning("Path zones are supported only in Big Red Adventure"); - } -} - -int32 Gfx::getRenderMode(const char *type) { - - int32 mode = getVar(type); - if (mode < 0 || mode > 2) { - warning("new value for '%s' is wrong: resetting default", type); - setVar(type, 1); - mode = 1; - } - return mode; - -} - void Gfx::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { if (_doubleBuffering) { if (_overlayMode) @@ -457,26 +377,17 @@ void Gfx::updateScreen() { // is needed _overlayMode = false; - if (!_skipBackground) { + bool skipBackground = (_backgroundInfo->bg.pixels == 0); // don't render frame if background is missing + + if (!skipBackground) { // background may not cover the whole screen, so adjust bulk update size uint w = _backgroundInfo->width; uint h = _backgroundInfo->height; - - byte *backgroundData = 0; - uint16 backgroundPitch = 0; - switch (_varBackgroundMode) { - case 1: - backgroundData = (byte*)_backgroundInfo->bg.getBasePtr(0, 0); - backgroundPitch = _backgroundInfo->bg.pitch; - break; - case 2: - backgroundData = (byte*)_bitmapMask.getBasePtr(0, 0); - backgroundPitch = _bitmapMask.pitch; - break; - } + byte *backgroundData = (byte*)_backgroundInfo->bg.getBasePtr(0, 0); + uint16 backgroundPitch = _backgroundInfo->bg.pitch; copyRectToScreen(backgroundData, backgroundPitch, _backgroundInfo->x, _backgroundInfo->y, w, h); } - +/* if (_varDrawPathZones == 1) { Graphics::Surface *surf = lockScreen(); ZoneList::iterator b = _vm->_location._zones.begin(); @@ -489,7 +400,7 @@ void Gfx::updateScreen() { } unlockScreen(); } - +*/ sortScene(); Graphics::Surface *surf = lockScreen(); // draws animations frames and other game items @@ -798,11 +709,6 @@ Gfx::Gfx(Parallaction* vm) : _unpackedBitmap = new byte[MAXIMUM_UNPACKED_BITMAP_SIZE]; assert(_unpackedBitmap); - registerVar("background_mode", 1); - _varBackgroundMode = 1; - - registerVar("draw_path_zones", 0); - if ((_gameType == GType_BRA) && (_vm->getPlatform() == Common::kPlatformPC)) { // this loads the backup palette needed by the PC version of BRA (see setBackground()). BackgroundInfo paletteInfo; diff --git a/engines/parallaction/graphics.h b/engines/parallaction/graphics.h index c643a61369..0f4c332ad6 100644 --- a/engines/parallaction/graphics.h +++ b/engines/parallaction/graphics.h @@ -477,8 +477,6 @@ public: }; -typedef Common::HashMap<Common::String, int32, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> VarMap; - typedef Common::Array<GfxObj*> GfxObjArray; @@ -489,7 +487,6 @@ protected: public: Disk *_disk; - VarMap _vars; GfxObjArray _sceneObjects; GfxObj* loadAnim(const char *name); @@ -544,12 +541,6 @@ public: Gfx(Parallaction* vm); virtual ~Gfx(); - void beginFrame(); - - void registerVar(const Common::String &name, int32 initialValue); - void setVar(const Common::String &name, int32 value); - int32 getVar(const Common::String &name); - void clearScreen(); void updateScreen(); @@ -561,8 +552,6 @@ public: protected: bool _halfbrite; - bool _skipBackground; - Common::Point _hbCirclePos; int _hbCircleRadius; @@ -570,10 +559,6 @@ protected: Palette _backupPal; // frame data stored in programmable variables - int32 _varBackgroundMode; // 1 = normal, 2 = only mask - int32 _varRenderMode; - int32 _varDrawPathZones; // 0 = don't draw, 1 = draw - Graphics::Surface _bitmapMask; int32 getRenderMode(const char *type); Graphics::Surface *lockScreen(); diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index e2d5fc61df..6db48f7846 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -308,24 +308,39 @@ void Parallaction::showLocationComment(const Common::String &text, bool end) { } -void Parallaction::processInput(int event) { +void Parallaction::runGameFrame(int event) { + if (_input->_inputMode != Input::kInputModeGame) { + return; + } - switch (event) { - case kEvSaveGame: + if (event != kEvNone) { _input->stopHovering(); - _saveLoad->saveGame(); + if (event == kEvSaveGame) { + _saveLoad->saveGame(); + } else + if (event == kEvLoadGame) { + _saveLoad->loadGame(); + } _input->setArrowCursor(); - break; + } - case kEvLoadGame: - _input->stopHovering(); - _saveLoad->loadGame(); - _input->setArrowCursor(); - break; + runPendingZones(); + if (shouldQuit()) + return; + + if (_engineFlags & kEngineChangeLocation) { + changeLocation(_location._name); } - return; + _programExec->runScripts(_location._programs.begin(), _location._programs.end()); + _char._ani->setZ(_char._ani->height() + _char._ani->getFrameY()); + if (_char._ani->gfxobj) { + _char._ani->gfxobj->z = _char._ani->getZ(); + } + _char._walker->walk(); + drawAnimations(); + } void Parallaction::runGame() { @@ -337,30 +352,10 @@ void Parallaction::runGame() { runGuiFrame(); runDialogueFrame(); runCommentFrame(); + runGameFrame(event); - if (_input->_inputMode == Input::kInputModeGame) { - processInput(event); - runPendingZones(); - - if (shouldQuit()) - return; - - if (_engineFlags & kEngineChangeLocation) { - changeLocation(_location._name); - } - } - - _gfx->beginFrame(); - - if (_input->_inputMode == Input::kInputModeGame) { - _programExec->runScripts(_location._programs.begin(), _location._programs.end()); - _char._ani->setZ(_char._ani->height() + _char._ani->getFrameY()); - if (_char._ani->gfxobj) { - _char._ani->gfxobj->z = _char._ani->getZ(); - } - _char._walker->walk(); - drawAnimations(); - } + if (shouldQuit()) + return; // change this to endFrame? updateView(); diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index dd4598ed96..bcdbdaeb2e 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -123,6 +123,7 @@ class Input; class DialogueManager; class MenuInputHelper; + struct Location { Common::Point _startPosition; @@ -301,6 +302,7 @@ public: protected: void runGame(); + void runGameFrame(int event); void runGuiFrame(); void cleanupGui(); void runDialogueFrame(); @@ -308,7 +310,6 @@ protected: void runCommentFrame(); void enterCommentMode(ZonePtr z); void exitCommentMode(); - void processInput(int event); void updateView(); void drawAnimations(); void freeCharacter(); @@ -494,6 +495,7 @@ public: int32 _counters[32]; uint32 _zoneFlags[NUM_LOCATIONS][NUM_ZONES]; + private: LocationParser_br *_locationParser; ProgramParser_br *_programParser; |