mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 09:23:37 +00:00
XEEN: Create CutsceneLocation base class for cutscene locations
This commit is contained in:
parent
e4882f6057
commit
a5590a3755
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
namespace Xeen {
|
namespace Xeen {
|
||||||
|
|
||||||
TownLocation::TownLocation(TownAction action) : ButtonContainer(g_vm),
|
BaseLocation::BaseLocation(TownAction action) : ButtonContainer(g_vm),
|
||||||
_townActionId(action), _isDarkCc(g_vm->_files->_isDarkCc),
|
_townActionId(action), _isDarkCc(g_vm->_files->_isDarkCc),
|
||||||
_vocName("hello1.voc") {
|
_vocName("hello1.voc") {
|
||||||
_townMaxId = (action >= SPHINX) ? 0 : Res.TOWN_MAXES[_isDarkCc][action];
|
_townMaxId = (action >= SPHINX) ? 0 : Res.TOWN_MAXES[_isDarkCc][action];
|
||||||
@ -44,10 +44,9 @@ TownLocation::TownLocation(TownAction action) : ButtonContainer(g_vm),
|
|||||||
_farewellTime = 0;
|
_farewellTime = 0;
|
||||||
_drawCtr1 = _drawCtr2 = 0;
|
_drawCtr1 = _drawCtr2 = 0;
|
||||||
_townPos = Common::Point(8, 8);
|
_townPos = Common::Point(8, 8);
|
||||||
_animCtr = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TownLocation::~TownLocation() {
|
BaseLocation::~BaseLocation() {
|
||||||
Interface &intf = *g_vm->_interface;
|
Interface &intf = *g_vm->_interface;
|
||||||
|
|
||||||
for (uint idx = 0; idx < _townSprites.size(); ++idx)
|
for (uint idx = 0; idx < _townSprites.size(); ++idx)
|
||||||
@ -55,7 +54,7 @@ TownLocation::~TownLocation() {
|
|||||||
intf.mainIconsPrint();
|
intf.mainIconsPrint();
|
||||||
}
|
}
|
||||||
|
|
||||||
int TownLocation::show() {
|
int BaseLocation::show() {
|
||||||
Map &map = *g_vm->_map;
|
Map &map = *g_vm->_map;
|
||||||
Party &party = *g_vm->_party;
|
Party &party = *g_vm->_party;
|
||||||
Sound &sound = *g_vm->_sound;
|
Sound &sound = *g_vm->_sound;
|
||||||
@ -110,7 +109,7 @@ int TownLocation::show() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TownLocation::drawBackground() {
|
void BaseLocation::drawBackground() {
|
||||||
Interface &intf = *g_vm->_interface;
|
Interface &intf = *g_vm->_interface;
|
||||||
|
|
||||||
intf._face1UIFrame = intf._face2UIFrame = 0;
|
intf._face1UIFrame = intf._face2UIFrame = 0;
|
||||||
@ -120,7 +119,7 @@ void TownLocation::drawBackground() {
|
|||||||
_townSprites[_drawFrameIndex / 8].draw(0, _drawFrameIndex % 8, _townPos);
|
_townSprites[_drawFrameIndex / 8].draw(0, _drawFrameIndex % 8, _townPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TownLocation::drawWindow() {
|
void BaseLocation::drawWindow() {
|
||||||
Interface &intf = *g_vm->_interface;
|
Interface &intf = *g_vm->_interface;
|
||||||
Party &party = *g_vm->_party;
|
Party &party = *g_vm->_party;
|
||||||
Windows &windows = *g_vm->_windows;
|
Windows &windows = *g_vm->_windows;
|
||||||
@ -138,7 +137,7 @@ void TownLocation::drawWindow() {
|
|||||||
intf.highlightChar(0);
|
intf.highlightChar(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TownLocation::drawAnim(bool flag) {
|
void BaseLocation::drawAnim(bool flag) {
|
||||||
Interface &intf = *g_vm->_interface;
|
Interface &intf = *g_vm->_interface;
|
||||||
Sound &sound = *g_vm->_sound;
|
Sound &sound = *g_vm->_sound;
|
||||||
Windows &windows = *g_vm->_windows;
|
Windows &windows = *g_vm->_windows;
|
||||||
@ -273,7 +272,7 @@ void TownLocation::drawAnim(bool flag) {
|
|||||||
_animFrame = 2;
|
_animFrame = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TownLocation::wait() {
|
int BaseLocation::wait() {
|
||||||
EventsManager &events = *g_vm->_events;
|
EventsManager &events = *g_vm->_events;
|
||||||
Windows &windows = *g_vm->_windows;
|
Windows &windows = *g_vm->_windows;
|
||||||
|
|
||||||
@ -291,13 +290,9 @@ int TownLocation::wait() {
|
|||||||
return _buttonValue;
|
return _buttonValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TownLocation::animUpdate() {
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
BankLocation::BankLocation() : TownLocation(BANK) {
|
BankLocation::BankLocation() : BaseLocation(BANK) {
|
||||||
_icons1.load("bank.icn");
|
_icons1.load("bank.icn");
|
||||||
_icons2.load("bank2.icn");
|
_icons2.load("bank2.icn");
|
||||||
addButton(Common::Rect(234, 108, 259, 128), Common::KEYCODE_d, &_icons1);
|
addButton(Common::Rect(234, 108, 259, 128), Common::KEYCODE_d, &_icons1);
|
||||||
@ -440,7 +435,7 @@ void BankLocation::depositWithdrawl(PartyBank whereId) {
|
|||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
BlacksmithLocation::BlacksmithLocation() : TownLocation(BLACKSMITH) {
|
BlacksmithLocation::BlacksmithLocation() : BaseLocation(BLACKSMITH) {
|
||||||
_icons1.load("esc.icn");
|
_icons1.load("esc.icn");
|
||||||
addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
|
addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
|
||||||
addButton(Common::Rect(234, 54, 308, 62), 0);
|
addButton(Common::Rect(234, 54, 308, 62), 0);
|
||||||
@ -487,7 +482,7 @@ void BlacksmithLocation::farewell() {
|
|||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
GuildLocation::GuildLocation() : TownLocation(GUILD) {
|
GuildLocation::GuildLocation() : BaseLocation(GUILD) {
|
||||||
loadStrings("spldesc.bin");
|
loadStrings("spldesc.bin");
|
||||||
_icons1.load("esc.icn");
|
_icons1.load("esc.icn");
|
||||||
addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
|
addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
|
||||||
@ -540,7 +535,7 @@ Character *GuildLocation::doOptions(Character *c) {
|
|||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
TavernLocation::TavernLocation() : TownLocation(TAVERN) {
|
TavernLocation::TavernLocation() : BaseLocation(TAVERN) {
|
||||||
_v21 = 0;
|
_v21 = 0;
|
||||||
_v22 = 0;
|
_v22 = 0;
|
||||||
_v23 = 0;
|
_v23 = 0;
|
||||||
@ -781,7 +776,7 @@ void TavernLocation::farewell() {
|
|||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
TempleLocation::TempleLocation() : TownLocation(TEMPLE) {
|
TempleLocation::TempleLocation() : BaseLocation(TEMPLE) {
|
||||||
_currentCharLevel = 0;
|
_currentCharLevel = 0;
|
||||||
_donation = 0;
|
_donation = 0;
|
||||||
_healCost = 0;
|
_healCost = 0;
|
||||||
@ -966,7 +961,7 @@ Character *TempleLocation::doOptions(Character *c) {
|
|||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
TrainingLocation::TrainingLocation() : TownLocation(TRAINING) {
|
TrainingLocation::TrainingLocation() : BaseLocation(TRAINING) {
|
||||||
Common::fill(&_charsTrained[0], &_charsTrained[6], 0);
|
Common::fill(&_charsTrained[0], &_charsTrained[6], 0);
|
||||||
_maxLevel = 0;
|
_maxLevel = 0;
|
||||||
_experienceToNextLevel = 0;
|
_experienceToNextLevel = 0;
|
||||||
@ -1106,19 +1101,41 @@ Character *TrainingLocation::doOptions(Character *c) {
|
|||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
ArenaLocation::ArenaLocation() : TownLocation(ARENA) {
|
ArenaLocation::ArenaLocation() : BaseLocation(ARENA) {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
ReaperLocation::ReaperLocation() : TownLocation(REAPER) {
|
CutsceneLocation::CutsceneLocation(TownAction action) : BaseLocation(action),
|
||||||
|
_animCtr(0), _mazeFlag(false) {
|
||||||
|
Party &party = *g_vm->_party;
|
||||||
|
_mazeId = party._mazeId;
|
||||||
|
_mazePos = party._mazePosition;
|
||||||
|
_mazeDir = party._mazeDirection;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutsceneLocation::cutsceneAnimUpdate() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutsceneLocation::setNewLocation() {
|
||||||
|
Map &map = *g_vm->_map;
|
||||||
|
Party &party = *g_vm->_party;
|
||||||
|
map.load(_mazeId);
|
||||||
|
party._mazePosition = _mazePos;
|
||||||
|
party._mazeDirection = _mazeDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ReaperCutscene::ReaperCutscene() : CutsceneLocation(REAPER) {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
GolemLocation::GolemLocation() : TownLocation(GOLEM) {
|
GolemCutscene::GolemCutscene() : CutsceneLocation(GOLEM) {
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1148,15 +1165,13 @@ const int16 DWARF2_Y[2][16] = {
|
|||||||
{ 0, 12, 25, 37, 50, 62, 75, 87, 100, 112, 125, 137, 150, 162, 175, 186 }
|
{ 0, 12, 25, 37, 50, 62, 75, 87, 100, 112, 125, 137, 150, 162, 175, 186 }
|
||||||
};
|
};
|
||||||
|
|
||||||
DwarfLocation::DwarfLocation(bool isDwarf) : TownLocation(NO_ACTION) {
|
DwarfCutscene::DwarfCutscene(bool isDwarf) : CutsceneLocation(NO_ACTION) {
|
||||||
_townMaxId = Res.TOWN_MAXES[_isDarkCc][isDwarf ? DWARF1 : DWARF2];
|
_townMaxId = Res.TOWN_MAXES[_isDarkCc][isDwarf ? DWARF1 : DWARF2];
|
||||||
loadStrings("special.bin");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int DwarfLocation::show() {
|
int DwarfCutscene::show() {
|
||||||
EventsManager &events = *g_vm->_events;
|
EventsManager &events = *g_vm->_events;
|
||||||
Interface &intf = *g_vm->_interface;
|
Interface &intf = *g_vm->_interface;
|
||||||
Party &party = *g_vm->_party;
|
|
||||||
Screen &screen = *g_vm->_screen;
|
Screen &screen = *g_vm->_screen;
|
||||||
Sound &sound = *g_vm->_sound;
|
Sound &sound = *g_vm->_sound;
|
||||||
Windows &windows = *g_vm->_windows;
|
Windows &windows = *g_vm->_windows;
|
||||||
@ -1165,7 +1180,7 @@ int DwarfLocation::show() {
|
|||||||
SpriteResource sprites2(_isDarkCc ? "town2.zom" : "dwarf2.vga");
|
SpriteResource sprites2(_isDarkCc ? "town2.zom" : "dwarf2.vga");
|
||||||
SpriteResource sprites3(_isDarkCc ? "town3.zom" : "dwarf3.vga");
|
SpriteResource sprites3(_isDarkCc ? "town3.zom" : "dwarf3.vga");
|
||||||
SpriteResource boxSprites("box.vga");
|
SpriteResource boxSprites("box.vga");
|
||||||
bool mazeFlag = setNewLocation();
|
getNewLocation();
|
||||||
|
|
||||||
// Save the screen contents
|
// Save the screen contents
|
||||||
Graphics::ManagedSurface savedBg;
|
Graphics::ManagedSurface savedBg;
|
||||||
@ -1208,13 +1223,13 @@ int DwarfLocation::show() {
|
|||||||
if (_isDarkCc) {
|
if (_isDarkCc) {
|
||||||
sprites2.draw(0, 0);
|
sprites2.draw(0, 0);
|
||||||
sprites3.draw(0, 0);
|
sprites3.draw(0, 0);
|
||||||
animUpdate();
|
cutsceneAnimUpdate();
|
||||||
|
|
||||||
events.timeMark5();
|
events.timeMark5();
|
||||||
while (!g_vm->shouldQuit() && events.timeElapsed5() < 7)
|
while (!g_vm->shouldQuit() && events.timeElapsed5() < 7)
|
||||||
events.pollEventsAndWait();
|
events.pollEventsAndWait();
|
||||||
|
|
||||||
sound.playSound(mazeFlag ? "ok2.voc" : "back2.voc");
|
sound.playSound(_mazeFlag ? "ok2.voc" : "back2.voc");
|
||||||
} else {
|
} else {
|
||||||
sound.playSound("dwarf11.voc");
|
sound.playSound("dwarf11.voc");
|
||||||
}
|
}
|
||||||
@ -1229,7 +1244,7 @@ int DwarfLocation::show() {
|
|||||||
do {
|
do {
|
||||||
sprites2.draw(0, 0);
|
sprites2.draw(0, 0);
|
||||||
sprites3.draw(0, g_vm->getRandomNumber(_isDarkCc ? 8 : 9));
|
sprites3.draw(0, g_vm->getRandomNumber(_isDarkCc ? 8 : 9));
|
||||||
animUpdate();
|
cutsceneAnimUpdate();
|
||||||
|
|
||||||
events.timeMark5();
|
events.timeMark5();
|
||||||
while (!g_vm->shouldQuit() && events.timeElapsed5() < 2)
|
while (!g_vm->shouldQuit() && events.timeElapsed5() < 2)
|
||||||
@ -1245,6 +1260,8 @@ int DwarfLocation::show() {
|
|||||||
sprites3.draw(0, 1);
|
sprites3.draw(0, 1);
|
||||||
windows[0].update();
|
windows[0].update();
|
||||||
|
|
||||||
|
setNewLocation();
|
||||||
|
|
||||||
// Restore game screen
|
// Restore game screen
|
||||||
sound.setMusicVolume(95);
|
sound.setMusicVolume(95);
|
||||||
screen.loadBackground("back.raw");
|
screen.loadBackground("back.raw");
|
||||||
@ -1255,54 +1272,48 @@ int DwarfLocation::show() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DwarfLocation::setNewLocation() {
|
void DwarfCutscene::getNewLocation() {
|
||||||
Map &map = *g_vm->_map;
|
|
||||||
Party &party = *g_vm->_party;
|
Party &party = *g_vm->_party;
|
||||||
Common::Point mazePos;
|
|
||||||
Direction mazeDir = DIR_NORTH;
|
|
||||||
int mazeId = 0;
|
|
||||||
bool mazeFlag = false;
|
|
||||||
|
|
||||||
// Set
|
|
||||||
if (_isDarkCc) {
|
if (_isDarkCc) {
|
||||||
switch (party._mazeId) {
|
switch (party._mazeId) {
|
||||||
case 4:
|
case 4:
|
||||||
if (party._questItems[35]) {
|
if (party._questItems[35]) {
|
||||||
mazeId = 29;
|
_mazeId = 29;
|
||||||
mazePos = Common::Point(15, 31);
|
_mazePos = Common::Point(15, 31);
|
||||||
mazeDir = DIR_SOUTH;
|
_mazeDir = DIR_SOUTH;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
if (party._questItems[38]) {
|
if (party._questItems[38]) {
|
||||||
mazeId = 35;
|
_mazeId = 35;
|
||||||
mazePos = Common::Point(15, 8);
|
_mazePos = Common::Point(15, 8);
|
||||||
mazeDir = DIR_WEST;
|
_mazeDir = DIR_WEST;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 19:
|
case 19:
|
||||||
if (party._questItems[36]) {
|
if (party._questItems[36]) {
|
||||||
mazeId = 31;
|
_mazeId = 31;
|
||||||
mazePos = Common::Point(31, 16);
|
_mazePos = Common::Point(31, 16);
|
||||||
mazeDir = DIR_WEST;
|
_mazeDir = DIR_WEST;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 22:
|
case 22:
|
||||||
if (party._questItems[37]) {
|
if (party._questItems[37]) {
|
||||||
mazeId = 33;
|
_mazeId = 33;
|
||||||
mazePos = Common::Point(0, 3);
|
_mazePos = Common::Point(0, 3);
|
||||||
mazeDir = DIR_EAST;
|
_mazeDir = DIR_EAST;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 98:
|
case 98:
|
||||||
if (party._questItems[39]) {
|
if (party._questItems[39]) {
|
||||||
mazeId = 37;
|
_mazeId = 37;
|
||||||
mazePos = Common::Point(7, 0);
|
_mazePos = Common::Point(7, 0);
|
||||||
mazeDir = DIR_NORTH;
|
_mazeDir = DIR_NORTH;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1310,41 +1321,36 @@ bool DwarfLocation::setNewLocation() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mazeFlag = mazeId != 0;
|
_mazeFlag = _mazeId != 0;
|
||||||
if (!mazeFlag) {
|
|
||||||
mazeId = party._mazeId;
|
|
||||||
mazePos = party._mazePosition;
|
|
||||||
mazeDir = party._mazeDirection;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
switch (party._mazeId) {
|
switch (party._mazeId) {
|
||||||
case 14:
|
case 14:
|
||||||
mazeId = 37;
|
_mazeId = 37;
|
||||||
mazePos = Common::Point(1, 4);
|
_mazePos = Common::Point(1, 4);
|
||||||
mazeDir = DIR_EAST;
|
_mazeDir = DIR_EAST;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 18:
|
case 18:
|
||||||
if (party._mazePosition.x == 9) {
|
if (party._mazePosition.x == 9) {
|
||||||
mazeId = 35;
|
_mazeId = 35;
|
||||||
mazePos = Common::Point(1, 12);
|
_mazePos = Common::Point(1, 12);
|
||||||
mazeDir = DIR_EAST;
|
_mazeDir = DIR_EAST;
|
||||||
} else {
|
} else {
|
||||||
mazeId = 36;
|
_mazeId = 36;
|
||||||
mazePos = Common::Point(7, 1);
|
_mazePos = Common::Point(7, 1);
|
||||||
mazeDir = DIR_NORTH;
|
_mazeDir = DIR_NORTH;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 23:
|
case 23:
|
||||||
if (party._mazePosition.x == 5) {
|
if (party._mazePosition.x == 5) {
|
||||||
mazeId = 33;
|
_mazeId = 33;
|
||||||
mazePos = Common::Point(7, 1);
|
_mazePos = Common::Point(7, 1);
|
||||||
mazeDir = DIR_NORTH;
|
_mazeDir = DIR_NORTH;
|
||||||
} else {
|
} else {
|
||||||
mazeId = 34;
|
_mazeId = 34;
|
||||||
mazePos = Common::Point(7, 30);
|
_mazePos = Common::Point(7, 30);
|
||||||
mazeDir = DIR_SOUTH;
|
_mazeDir = DIR_SOUTH;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1352,22 +1358,57 @@ bool DwarfLocation::setNewLocation() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
map.load(mazeId);
|
|
||||||
party._mazePosition = mazePos;
|
|
||||||
party._mazeDirection = mazeDir;
|
|
||||||
return mazeFlag;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
SphinxLocation::SphinxLocation() : TownLocation(SPHINX) {
|
SphinxCutscene::SphinxCutscene() : CutsceneLocation(SPHINX) {
|
||||||
|
SpriteResource sprites1("sphinx.vga");
|
||||||
|
_boxSprites.load("box.vga");
|
||||||
|
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SphinxCutscene::getNewLocation() {
|
||||||
|
Map &map = *g_vm->_map;
|
||||||
|
Party &party = *g_vm->_party;
|
||||||
|
|
||||||
|
switch (party._mazeId) {
|
||||||
|
case 2:
|
||||||
|
if (party._questItems[51]) {
|
||||||
|
map._loadDarkSide = true;
|
||||||
|
_mazeId = 125;
|
||||||
|
_mazePos = Common::Point(7, 6);
|
||||||
|
_mazeDir = DIR_NORTH;
|
||||||
|
_mazeFlag = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
if (party._questItems[4]) {
|
||||||
|
_mazeId = 82;
|
||||||
|
_mazePos = Common::Point(7, 5);
|
||||||
|
_mazeDir = DIR_NORTH;
|
||||||
|
_mazeFlag = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_mazeFlag) {
|
||||||
|
_mazeId = party._mazeId;
|
||||||
|
_mazePos = party._mazePosition;
|
||||||
|
_mazeDir = party._mazeDirection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
PyramidLocation::PyramidLocation() : TownLocation(PYRAMID) {
|
PyramidLocation::PyramidLocation() : BaseLocation(PYRAMID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int PyramidLocation::show() {
|
int PyramidLocation::show() {
|
||||||
@ -1450,19 +1491,19 @@ int Town::townAction(TownAction actionId) {
|
|||||||
_location = new ArenaLocation();
|
_location = new ArenaLocation();
|
||||||
break;
|
break;
|
||||||
case REAPER:
|
case REAPER:
|
||||||
_location = new ReaperLocation();
|
_location = new ReaperCutscene();
|
||||||
break;
|
break;
|
||||||
case GOLEM:
|
case GOLEM:
|
||||||
_location = new GolemLocation();
|
_location = new GolemCutscene();
|
||||||
break;
|
break;
|
||||||
case DWARF1:
|
case DWARF1:
|
||||||
_location = new DwarfLocation(true);
|
_location = new DwarfCutscene(true);
|
||||||
break;
|
break;
|
||||||
case DWARF2:
|
case DWARF2:
|
||||||
_location = new DwarfLocation(false);
|
_location = new DwarfCutscene(false);
|
||||||
break;
|
break;
|
||||||
case SPHINX:
|
case SPHINX:
|
||||||
_location = new SphinxLocation();
|
_location = new SphinxCutscene();
|
||||||
break;
|
break;
|
||||||
case PYRAMID:
|
case PYRAMID:
|
||||||
_location = new PyramidLocation();
|
_location = new PyramidLocation();
|
||||||
|
@ -40,7 +40,7 @@ enum TownAction {
|
|||||||
class XeenEngine;
|
class XeenEngine;
|
||||||
class TownMessage;
|
class TownMessage;
|
||||||
|
|
||||||
class TownLocation : public ButtonContainer {
|
class BaseLocation : public ButtonContainer {
|
||||||
protected:
|
protected:
|
||||||
TownAction _townActionId;
|
TownAction _townActionId;
|
||||||
Common::Array<SpriteResource> _townSprites;
|
Common::Array<SpriteResource> _townSprites;
|
||||||
@ -53,7 +53,6 @@ protected:
|
|||||||
int _drawFrameIndex;
|
int _drawFrameIndex;
|
||||||
uint _farewellTime;
|
uint _farewellTime;
|
||||||
int _drawCtr1, _drawCtr2;
|
int _drawCtr1, _drawCtr2;
|
||||||
int _animCtr;
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Draw the window
|
* Draw the window
|
||||||
@ -65,11 +64,6 @@ protected:
|
|||||||
*/
|
*/
|
||||||
int wait();
|
int wait();
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles animation updates for Sphinx, Golem, Repear, and Dwarf events
|
|
||||||
*/
|
|
||||||
void animUpdate();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates the display text for the location, for a given character
|
* Generates the display text for the location, for a given character
|
||||||
*/
|
*/
|
||||||
@ -90,8 +84,8 @@ protected:
|
|||||||
*/
|
*/
|
||||||
virtual void farewell() {}
|
virtual void farewell() {}
|
||||||
public:
|
public:
|
||||||
TownLocation(TownAction action);
|
BaseLocation(TownAction action);
|
||||||
virtual ~TownLocation();
|
virtual ~BaseLocation();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show the town location
|
* Show the town location
|
||||||
@ -104,7 +98,7 @@ public:
|
|||||||
void drawAnim(bool flag);
|
void drawAnim(bool flag);
|
||||||
};
|
};
|
||||||
|
|
||||||
class BankLocation : public TownLocation {
|
class BankLocation : public BaseLocation {
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Handles deposits or withdrawls fro the bank
|
* Handles deposits or withdrawls fro the bank
|
||||||
@ -130,7 +124,7 @@ public:
|
|||||||
virtual ~BankLocation() {}
|
virtual ~BankLocation() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class BlacksmithLocation : public TownLocation {
|
class BlacksmithLocation : public BaseLocation {
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Generates the display text for the location, for a given character
|
* Generates the display text for the location, for a given character
|
||||||
@ -151,7 +145,7 @@ public:
|
|||||||
virtual ~BlacksmithLocation() {}
|
virtual ~BlacksmithLocation() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class GuildLocation : public TownLocation {
|
class GuildLocation : public BaseLocation {
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Generates the display text for the location, for a given character
|
* Generates the display text for the location, for a given character
|
||||||
@ -167,7 +161,7 @@ public:
|
|||||||
virtual ~GuildLocation() {}
|
virtual ~GuildLocation() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class TavernLocation : public TownLocation {
|
class TavernLocation : public BaseLocation {
|
||||||
private:
|
private:
|
||||||
int _v21;
|
int _v21;
|
||||||
uint _v22;
|
uint _v22;
|
||||||
@ -193,7 +187,7 @@ public:
|
|||||||
virtual ~TavernLocation() {}
|
virtual ~TavernLocation() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class TempleLocation : public TownLocation {
|
class TempleLocation : public BaseLocation {
|
||||||
private:
|
private:
|
||||||
int _currentCharLevel;
|
int _currentCharLevel;
|
||||||
int _donation;
|
int _donation;
|
||||||
@ -219,7 +213,7 @@ public:
|
|||||||
virtual ~TempleLocation() {}
|
virtual ~TempleLocation() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class TrainingLocation : public TownLocation {
|
class TrainingLocation : public BaseLocation {
|
||||||
private:
|
private:
|
||||||
int _charIndex;
|
int _charIndex;
|
||||||
bool _charsTrained[MAX_ACTIVE_PARTY];
|
bool _charsTrained[MAX_ACTIVE_PARTY];
|
||||||
@ -240,33 +234,55 @@ public:
|
|||||||
virtual ~TrainingLocation() {}
|
virtual ~TrainingLocation() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ArenaLocation : public TownLocation {
|
class ArenaLocation : public BaseLocation {
|
||||||
public:
|
public:
|
||||||
ArenaLocation();
|
ArenaLocation();
|
||||||
virtual ~ArenaLocation() {}
|
virtual ~ArenaLocation() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ReaperLocation : public TownLocation {
|
class CutsceneLocation : public BaseLocation {
|
||||||
|
protected:
|
||||||
|
int _animCtr;
|
||||||
|
SpriteResource _boxSprites;
|
||||||
|
int _mazeId;
|
||||||
|
Direction _mazeDir;
|
||||||
|
Common::Point _mazePos;
|
||||||
|
bool _mazeFlag;
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* Handles cutscene animation update
|
||||||
|
*/
|
||||||
|
void cutsceneAnimUpdate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the new location
|
||||||
|
*/
|
||||||
|
void setNewLocation();
|
||||||
public:
|
public:
|
||||||
ReaperLocation();
|
CutsceneLocation(TownAction action);
|
||||||
virtual ~ReaperLocation() {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class GolemLocation : public TownLocation {
|
class ReaperCutscene : public CutsceneLocation {
|
||||||
public:
|
public:
|
||||||
GolemLocation();
|
ReaperCutscene();
|
||||||
virtual ~GolemLocation() {}
|
virtual ~ReaperCutscene() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class DwarfLocation : public TownLocation {
|
class GolemCutscene : public CutsceneLocation {
|
||||||
|
public:
|
||||||
|
GolemCutscene();
|
||||||
|
virtual ~GolemCutscene() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class DwarfCutscene : public CutsceneLocation {
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Set the new location
|
* Get the new location
|
||||||
*/
|
*/
|
||||||
bool setNewLocation();
|
void getNewLocation();
|
||||||
public:
|
public:
|
||||||
DwarfLocation(bool isDwarf1);
|
DwarfCutscene(bool isDwarf1);
|
||||||
virtual ~DwarfLocation() {}
|
virtual ~DwarfCutscene() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show the town location
|
* Show the town location
|
||||||
@ -274,13 +290,18 @@ public:
|
|||||||
virtual int show();
|
virtual int show();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SphinxLocation : public TownLocation {
|
class SphinxCutscene : public CutsceneLocation {
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* Get the new location
|
||||||
|
*/
|
||||||
|
void getNewLocation();
|
||||||
public:
|
public:
|
||||||
SphinxLocation();
|
SphinxCutscene();
|
||||||
virtual ~SphinxLocation() {}
|
virtual ~SphinxCutscene() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class PyramidLocation : public TownLocation {
|
class PyramidLocation : public BaseLocation {
|
||||||
public:
|
public:
|
||||||
PyramidLocation();
|
PyramidLocation();
|
||||||
virtual ~PyramidLocation() {}
|
virtual ~PyramidLocation() {}
|
||||||
@ -293,7 +314,7 @@ public:
|
|||||||
|
|
||||||
class Town {
|
class Town {
|
||||||
private:
|
private:
|
||||||
TownLocation *_location;
|
BaseLocation *_location;
|
||||||
private:
|
private:
|
||||||
int townWait();
|
int townWait();
|
||||||
|
|
||||||
@ -327,11 +348,11 @@ public:
|
|||||||
void drawAnim(bool flag);
|
void drawAnim(bool flag);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TownMessage : public TownLocation {
|
class TownMessage : public BaseLocation {
|
||||||
private:
|
private:
|
||||||
SpriteResource _iconSprites;
|
SpriteResource _iconSprites;
|
||||||
|
|
||||||
TownMessage() : TownLocation(NO_ACTION) {}
|
TownMessage() : BaseLocation(NO_ACTION) {}
|
||||||
|
|
||||||
bool execute(int portrait, const Common::String &name,
|
bool execute(int portrait, const Common::String &name,
|
||||||
const Common::String &text, int confirm);
|
const Common::String &text, int confirm);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user