mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-18 15:48:48 +00:00
Uniformed the interface of Parallaction class (and its hierarchy) with regards of gui code, which is now independent of engine version.
svn-id: r34219
This commit is contained in:
parent
805a46b229
commit
983863bef3
@ -318,7 +318,7 @@ DECLARE_COMMAND_OPCODE(stop) {
|
||||
}
|
||||
|
||||
|
||||
void Parallaction_ns::drawAnimations() {
|
||||
void Parallaction::drawAnimations() {
|
||||
debugC(9, kDebugExec, "Parallaction_ns::drawAnimations()\n");
|
||||
|
||||
uint16 layer = 0, scale = 100;
|
||||
|
@ -40,11 +40,11 @@ protected:
|
||||
Palette blackPal;
|
||||
Palette pal;
|
||||
|
||||
Parallaction_br *_vm;
|
||||
Parallaction *_vm;
|
||||
int _fadeSteps;
|
||||
|
||||
public:
|
||||
SplashInputState_BR(Parallaction_br *vm, const Common::String &name, MenuInputHelper *helper) : MenuInputState(name, helper), _vm(vm) {
|
||||
SplashInputState_BR(Parallaction *vm, const Common::String &name, MenuInputHelper *helper) : MenuInputState(name, helper), _vm(vm) {
|
||||
}
|
||||
|
||||
virtual MenuInputState* run() {
|
||||
@ -150,6 +150,8 @@ class MainMenuInputState_BR : public MenuInputState {
|
||||
static const char *_menuStrings[NUM_MENULINES];
|
||||
static const MenuOptions _options[NUM_MENULINES];
|
||||
|
||||
static const char *_firstLocation[];
|
||||
|
||||
int _availItems;
|
||||
int _selection;
|
||||
|
||||
@ -173,7 +175,7 @@ class MainMenuInputState_BR : public MenuInputState {
|
||||
break;
|
||||
|
||||
default:
|
||||
_vm->startPart(selectedItem);
|
||||
_vm->scheduleLocationSwitch(_firstLocation[selectedItem]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -218,9 +220,11 @@ public:
|
||||
}
|
||||
_vm->showSlide("tbra", x, y);
|
||||
|
||||
// TODO: load progress from savefile
|
||||
int progress = 3;
|
||||
_availItems = 4 + progress;
|
||||
_availItems = 4;
|
||||
|
||||
bool complete[3];
|
||||
_vm->getGamePartProgress(complete, 3);
|
||||
for (int i = 0; i < 3 && complete[i]; i++, _availItems++) ;
|
||||
|
||||
// TODO: keep track of and destroy menu item frames/surfaces
|
||||
int i;
|
||||
@ -236,6 +240,14 @@ public:
|
||||
|
||||
};
|
||||
|
||||
const char *MainMenuInputState_BR::_firstLocation[] = {
|
||||
"intro.0",
|
||||
"museo.1",
|
||||
"start.2",
|
||||
"bolscoi.3",
|
||||
"treno.4"
|
||||
};
|
||||
|
||||
const char *MainMenuInputState_BR::_menuStrings[NUM_MENULINES] = {
|
||||
"SEE INTRO",
|
||||
"NEW GAME",
|
||||
|
@ -41,10 +41,10 @@ protected:
|
||||
Common::String _nextState;
|
||||
uint32 _startTime;
|
||||
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
|
||||
public:
|
||||
SplashInputState_NS(Parallaction_ns *vm, const Common::String &name, MenuInputHelper *helper) : MenuInputState(name, helper), _vm(vm) {
|
||||
SplashInputState_NS(Parallaction *vm, const Common::String &name, MenuInputHelper *helper) : MenuInputState(name, helper), _vm(vm) {
|
||||
}
|
||||
|
||||
virtual MenuInputState* run() {
|
||||
@ -66,7 +66,7 @@ public:
|
||||
class SplashInputState0_NS : public SplashInputState_NS {
|
||||
|
||||
public:
|
||||
SplashInputState0_NS(Parallaction_ns *vm, MenuInputHelper *helper) : SplashInputState_NS(vm, "intro0", helper) {
|
||||
SplashInputState0_NS(Parallaction *vm, MenuInputHelper *helper) : SplashInputState_NS(vm, "intro0", helper) {
|
||||
_slideName = "intro";
|
||||
_timeOut = 2000;
|
||||
_nextState = "intro1";
|
||||
@ -76,7 +76,7 @@ public:
|
||||
class SplashInputState1_NS : public SplashInputState_NS {
|
||||
|
||||
public:
|
||||
SplashInputState1_NS(Parallaction_ns *vm, MenuInputHelper *helper) : SplashInputState_NS(vm, "intro1", helper) {
|
||||
SplashInputState1_NS(Parallaction *vm, MenuInputHelper *helper) : SplashInputState_NS(vm, "intro1", helper) {
|
||||
_slideName = "minintro";
|
||||
_timeOut = 2000;
|
||||
_nextState = "chooselanguage";
|
||||
@ -111,10 +111,10 @@ class ChooseLanguageInputState_NS : public MenuInputState {
|
||||
static const Common::Rect _amigaLanguageSelectBlocks[4];
|
||||
const Common::Rect *_blocks;
|
||||
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
|
||||
public:
|
||||
ChooseLanguageInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("chooselanguage", helper), _vm(vm) {
|
||||
ChooseLanguageInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("chooselanguage", helper), _vm(vm) {
|
||||
_allowChoice = false;
|
||||
_nextState = "selectgame";
|
||||
|
||||
@ -203,13 +203,13 @@ class SelectGameInputState_NS : public MenuInputState {
|
||||
|
||||
uint _labels[2];
|
||||
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
|
||||
static const char *newGameMsg[4];
|
||||
static const char *loadGameMsg[4];
|
||||
|
||||
public:
|
||||
SelectGameInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("selectgame", helper), _vm(vm) {
|
||||
SelectGameInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("selectgame", helper), _vm(vm) {
|
||||
_choice = 0;
|
||||
_oldChoice = -1;
|
||||
|
||||
@ -271,10 +271,10 @@ const char *SelectGameInputState_NS::loadGameMsg[4] = {
|
||||
|
||||
class LoadGameInputState_NS : public MenuInputState {
|
||||
bool _result;
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
|
||||
public:
|
||||
LoadGameInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("loadgame", helper), _vm(vm) { }
|
||||
LoadGameInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("loadgame", helper), _vm(vm) { }
|
||||
|
||||
virtual MenuInputState* run() {
|
||||
if (!_result) {
|
||||
@ -291,12 +291,12 @@ public:
|
||||
|
||||
|
||||
class NewGameInputState_NS : public MenuInputState {
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
|
||||
static const char *introMsg3[4];
|
||||
|
||||
public:
|
||||
NewGameInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("newgame", helper), _vm(vm) {
|
||||
NewGameInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("newgame", helper), _vm(vm) {
|
||||
}
|
||||
|
||||
virtual MenuInputState* run() {
|
||||
@ -344,10 +344,10 @@ const char *NewGameInputState_NS::introMsg3[4] = {
|
||||
|
||||
|
||||
class StartDemoInputState_NS : public MenuInputState {
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
|
||||
public:
|
||||
StartDemoInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("startdemo", helper), _vm(vm) {
|
||||
StartDemoInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("startdemo", helper), _vm(vm) {
|
||||
}
|
||||
|
||||
virtual MenuInputState* run() {
|
||||
@ -372,7 +372,7 @@ class SelectCharacterInputState_NS : public MenuInputState {
|
||||
static const Common::Rect codeSelectBlocks[9];
|
||||
static const Common::Rect codeTrueBlocks[9];
|
||||
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
|
||||
int guiGetSelectedBlock(const Common::Point &p) {
|
||||
|
||||
@ -425,7 +425,7 @@ class SelectCharacterInputState_NS : public MenuInputState {
|
||||
|
||||
|
||||
public:
|
||||
SelectCharacterInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("selectcharacter", helper), _vm(vm) {
|
||||
SelectCharacterInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("selectcharacter", helper), _vm(vm) {
|
||||
_keys = (_vm->getPlatform() == Common::kPlatformAmiga && (_vm->getFeatures() & GF_LANG_MULT)) ? _amigaKeys : _pcKeys;
|
||||
_block.create(BLOCK_WIDTH, BLOCK_HEIGHT, 1);
|
||||
}
|
||||
@ -509,7 +509,6 @@ public:
|
||||
error("If you read this, either your CPU or transivity is broken (we believe the former).");
|
||||
}
|
||||
|
||||
_vm->_inTestResult = false;
|
||||
_vm->cleanupGame();
|
||||
_vm->scheduleLocationSwitch(_charStartLocation[character]);
|
||||
}
|
||||
@ -621,7 +620,7 @@ const Common::Rect SelectCharacterInputState_NS::codeTrueBlocks[9] = {
|
||||
|
||||
|
||||
class ShowCreditsInputState_NS : public MenuInputState {
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
int _current;
|
||||
uint32 _startTime;
|
||||
|
||||
@ -633,7 +632,7 @@ class ShowCreditsInputState_NS : public MenuInputState {
|
||||
static const Credit _credits[6];
|
||||
|
||||
public:
|
||||
ShowCreditsInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("showcredits", helper), _vm(vm) {
|
||||
ShowCreditsInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("showcredits", helper), _vm(vm) {
|
||||
}
|
||||
|
||||
void drawCurrentLabel() {
|
||||
@ -686,11 +685,11 @@ const ShowCreditsInputState_NS::Credit ShowCreditsInputState_NS::_credits[6] = {
|
||||
};
|
||||
|
||||
class EndIntroInputState_NS : public MenuInputState {
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
bool _isDemo;
|
||||
|
||||
public:
|
||||
EndIntroInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("endintro", helper), _vm(vm) {
|
||||
EndIntroInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("endintro", helper), _vm(vm) {
|
||||
_isDemo = (_vm->getFeatures() & GF_DEMO) != 0;
|
||||
}
|
||||
|
||||
@ -723,7 +722,7 @@ public:
|
||||
|
||||
|
||||
class EndPartInputState_NS : public MenuInputState {
|
||||
Parallaction_ns *_vm;
|
||||
Parallaction *_vm;
|
||||
bool _allPartsComplete;
|
||||
|
||||
// part completion messages
|
||||
@ -739,7 +738,7 @@ class EndPartInputState_NS : public MenuInputState {
|
||||
|
||||
|
||||
public:
|
||||
EndPartInputState_NS(Parallaction_ns *vm, MenuInputHelper *helper) : MenuInputState("endpart", helper), _vm(vm) {
|
||||
EndPartInputState_NS(Parallaction *vm, MenuInputHelper *helper) : MenuInputState("endpart", helper), _vm(vm) {
|
||||
}
|
||||
|
||||
virtual MenuInputState* run() {
|
||||
@ -759,7 +758,9 @@ public:
|
||||
}
|
||||
|
||||
virtual void enter() {
|
||||
_allPartsComplete = _vm->allPartsComplete();
|
||||
bool completed[3];
|
||||
_vm->getGamePartProgress(completed, 3);
|
||||
_allPartsComplete = (completed[0] && completed[1] && completed[2]);
|
||||
_vm->_input->setMouseState(MOUSE_DISABLED);
|
||||
|
||||
uint id[4];
|
||||
|
@ -269,7 +269,15 @@ void Parallaction::freeLocation() {
|
||||
return;
|
||||
}
|
||||
|
||||
void Parallaction::showSlide(const char *name, int x, int y) {
|
||||
BackgroundInfo *info = new BackgroundInfo;
|
||||
_disk->loadSlide(*info, name);
|
||||
|
||||
info->x = (x == CENTER_LABEL_HORIZONTAL) ? ((_vm->_screenWidth - info->width) >> 1) : x;
|
||||
info->y = (y == CENTER_LABEL_VERTICAL) ? ((_vm->_screenHeight - info->height) >> 1) : y;
|
||||
|
||||
_gfx->setBackground(kBackgroundSlide, info);
|
||||
}
|
||||
|
||||
|
||||
void Parallaction::freeBackground() {
|
||||
|
@ -333,12 +333,16 @@ public:
|
||||
|
||||
void updateDoor(ZonePtr z, bool close);
|
||||
|
||||
virtual void drawAnimations() = 0;
|
||||
void drawAnimations();
|
||||
|
||||
void beep();
|
||||
void showSlide(const char *name, int x = 0, int y = 0);
|
||||
|
||||
ZonePtr _zoneTrap;
|
||||
|
||||
virtual void cleanupGame() = 0;
|
||||
virtual void getGamePartProgress(bool *complete, int size) = 0;
|
||||
|
||||
public:
|
||||
void highlightInventoryItem(ItemPosition pos);
|
||||
int16 getHoverInventoryItem(int16 x, int16 y);
|
||||
@ -443,14 +447,13 @@ public:
|
||||
bool saveGame();
|
||||
|
||||
void switchBackground(const char* background, const char* mask);
|
||||
void showSlide(const char *name, int x = 0, int y = 0);
|
||||
|
||||
// TODO: this should be private!!!!!!!
|
||||
bool _inTestResult;
|
||||
void cleanupGame();
|
||||
bool allPartsComplete();
|
||||
void getGamePartProgress(bool *complete, int size);
|
||||
|
||||
private:
|
||||
bool _inTestResult;
|
||||
|
||||
LocationParser_ns *_locationParser;
|
||||
ProgramParser_ns *_programParser;
|
||||
|
||||
@ -528,7 +531,6 @@ private:
|
||||
const Callable *_callables;
|
||||
|
||||
protected:
|
||||
void drawAnimations();
|
||||
|
||||
void parseLocation(const char *filename);
|
||||
void loadProgram(AnimationPtr a, const char *filename);
|
||||
@ -558,6 +560,7 @@ public:
|
||||
void setupSubtitles(char *s, char *s2, int y);
|
||||
void clearSubtitles();
|
||||
|
||||
void getGamePartProgress(bool *complete, int size);
|
||||
|
||||
public:
|
||||
Table *_countersNames;
|
||||
@ -565,7 +568,6 @@ public:
|
||||
const char **_audioCommandsNamesRes;
|
||||
|
||||
int _part;
|
||||
int _progress;
|
||||
|
||||
#if 0 // disabled since I couldn't find any references to lip sync in the scripts
|
||||
int16 _lipSyncVal;
|
||||
@ -579,7 +581,6 @@ public:
|
||||
int32 _counters[32];
|
||||
|
||||
uint32 _zoneFlags[NUM_LOCATIONS][NUM_ZONES];
|
||||
void startPart(uint part);
|
||||
private:
|
||||
LocationParser_br *_locationParser;
|
||||
ProgramParser_br *_programParser;
|
||||
|
@ -41,14 +41,6 @@ const char *Parallaction_br::_partNames[] = {
|
||||
"PART4"
|
||||
};
|
||||
|
||||
const char *partFirstLocation[] = {
|
||||
"intro",
|
||||
"museo",
|
||||
"start",
|
||||
"bolscoi",
|
||||
"treno"
|
||||
};
|
||||
|
||||
int Parallaction_br::init() {
|
||||
|
||||
_screenWidth = 640;
|
||||
@ -112,7 +104,7 @@ int Parallaction_br::go() {
|
||||
while ((_engineFlags & kEngineQuit) == 0) {
|
||||
|
||||
if (getFeatures() & GF_DEMO) {
|
||||
startPart(1);
|
||||
scheduleLocationSwitch("camalb.1");
|
||||
_input->_inputMode = Input::kInputModeGame;
|
||||
} else {
|
||||
startGui(splash);
|
||||
@ -174,23 +166,6 @@ void Parallaction_br::freePart() {
|
||||
_countersNames = 0;
|
||||
}
|
||||
|
||||
void Parallaction_br::startPart(uint part) {
|
||||
_part = part;
|
||||
_disk->selectArchive(_partNames[_part]);
|
||||
|
||||
initPart();
|
||||
|
||||
if (getFeatures() & GF_DEMO) {
|
||||
strcpy(_location._name, "camalb");
|
||||
} else {
|
||||
strcpy(_location._name, partFirstLocation[_part]);
|
||||
}
|
||||
|
||||
parseLocation("common");
|
||||
changeLocation(_location._name);
|
||||
|
||||
}
|
||||
|
||||
void Parallaction_br::runPendingZones() {
|
||||
ZonePtr z;
|
||||
|
||||
@ -245,6 +220,24 @@ void Parallaction_br::freeLocation() {
|
||||
|
||||
|
||||
void Parallaction_br::changeLocation(char *location) {
|
||||
char *partStr = strrchr(location, '.');
|
||||
if (partStr) {
|
||||
int n = partStr - location;
|
||||
strncpy(_location._name, location, n);
|
||||
_location._name[n] = '\0';
|
||||
|
||||
_part = atoi(++partStr);
|
||||
if (getFeatures() & GF_DEMO) {
|
||||
assert(_part == 1);
|
||||
} else {
|
||||
assert(_part >= 0 && _part <= 4);
|
||||
}
|
||||
|
||||
_disk->selectArchive(_partNames[_part]);
|
||||
initPart();
|
||||
parseLocation("common");
|
||||
}
|
||||
|
||||
freeLocation();
|
||||
// load new location
|
||||
parseLocation(location);
|
||||
|
@ -220,16 +220,6 @@ void Parallaction_ns::switchBackground(const char* background, const char* mask)
|
||||
}
|
||||
|
||||
|
||||
void Parallaction_ns::showSlide(const char *name, int x, int y) {
|
||||
BackgroundInfo *info = new BackgroundInfo;
|
||||
_disk->loadSlide(*info, name);
|
||||
|
||||
info->x = (x == CENTER_LABEL_HORIZONTAL) ? ((_vm->_screenWidth - info->width) >> 1) : x;
|
||||
info->y = (y == CENTER_LABEL_VERTICAL) ? ((_vm->_screenHeight - info->height) >> 1) : y;
|
||||
|
||||
_gfx->setBackground(kBackgroundSlide, info);
|
||||
}
|
||||
|
||||
void Parallaction_ns::runPendingZones() {
|
||||
if (_activeZone) {
|
||||
ZonePtr z = _activeZone; // speak Zone or sound
|
||||
@ -395,6 +385,7 @@ void Parallaction_ns::changeCharacter(const char *name) {
|
||||
}
|
||||
|
||||
void Parallaction_ns::cleanupGame() {
|
||||
_inTestResult = false;
|
||||
|
||||
_engineFlags &= ~kEngineTransformedDonna;
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define PARALLACTION_PARSER_H
|
||||
|
||||
#include "common/stream.h"
|
||||
#include "common/stack.h"
|
||||
#include "parallaction/objects.h"
|
||||
#include "parallaction/walk.h"
|
||||
|
||||
|
@ -445,14 +445,27 @@ void Parallaction_ns::setPartComplete(const Character& character) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool Parallaction_ns::allPartsComplete() {
|
||||
char buf[30];
|
||||
void Parallaction_ns::getGamePartProgress(bool *complete, int size) {
|
||||
assert(complete && size >= 3);
|
||||
|
||||
char buf[30];
|
||||
Common::InSaveFile *inFile = getInSaveFile(SPECIAL_SAVESLOT);
|
||||
inFile->readLine(buf, 29);
|
||||
delete inFile;
|
||||
|
||||
return strstr(buf, "dino") && strstr(buf, "donna") && strstr(buf, "dough");
|
||||
complete[0] = strstr(buf, "dino");
|
||||
complete[1] = strstr(buf, "donna");
|
||||
complete[2] = strstr(buf, "dough");
|
||||
}
|
||||
|
||||
void Parallaction_br::getGamePartProgress(bool *complete, int size) {
|
||||
assert(complete && size >= 3);
|
||||
|
||||
// TODO: implement progress loading
|
||||
|
||||
complete[0] = true;
|
||||
complete[1] = true;
|
||||
complete[2] = true;
|
||||
}
|
||||
|
||||
void Parallaction_ns::renameOldSavefiles() {
|
||||
|
Loading…
Reference in New Issue
Block a user