Skip to content

Commit

Permalink
XEEN: Implement Quick Fight Options dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Feb 19, 2018
1 parent a282cea commit db07aeb
Show file tree
Hide file tree
Showing 7 changed files with 142 additions and 49 deletions.
39 changes: 0 additions & 39 deletions engines/xeen/dialogs_fight_options.cpp

This file was deleted.

105 changes: 105 additions & 0 deletions engines/xeen/dialogs_quick_fight.cpp
@@ -0,0 +1,105 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/

#include "xeen/dialogs_quick_fight.h"
#include "xeen/resources.h"
#include "xeen/xeen.h"

namespace Xeen {

void QuickFight::show(XeenEngine *vm, Character *currentChar) {
QuickFight *dlg = new QuickFight(vm, currentChar);
dlg->execute();
delete dlg;
}

QuickFight::QuickFight(XeenEngine *vm, Character *currentChar) : ButtonContainer(vm),
_currentChar(currentChar) {
loadButtons();
}

void QuickFight::execute() {
Combat &combat = *_vm->_combat;
EventsManager &events = *_vm->_events;
Interface &intf = *_vm->_interface;
Party &party = *_vm->_party;
Windows &windows = *_vm->_windows;
Window &w = windows[10];
w.open();

do {
// Draw the dialog text and buttons
Common::String msg = Common::String::format(Res.QUICK_FIGHT_TEXT,
_currentChar->_name.c_str(),
Res.QUICK_FIGHT_OPTIONS[_currentChar->_quickOption]);
w.writeString(msg);
drawButtons(&w);

// Wait for selection
_buttonValue = 0;
events.updateGameCounter();
do {
intf.draw3d(false, false);

events.pollEventsAndWait();
checkEvents(_vm);
if (_vm->shouldExit())
return;
} while (!_buttonValue && !events.timeElapsed());

switch (_buttonValue) {
case Common::KEYCODE_n:
case Common::KEYCODE_t:
_currentChar->_quickOption = (QuickAction)(((int)_currentChar->_quickOption + 1) % 4);
break;

case Common::KEYCODE_F1:
case Common::KEYCODE_F2:
case Common::KEYCODE_F3:
case Common::KEYCODE_F4:
case Common::KEYCODE_F5:
case Common::KEYCODE_F6: {
int charIdx = _buttonValue - Common::KEYCODE_F1;
if (charIdx < (int)combat._combatParty.size()) {
// Highlight new character
_currentChar = &party._activeParty[charIdx];
intf.highlightChar(charIdx);
}
break;
}

default:
break;
}
} while (_buttonValue != Common::KEYCODE_RETURN && _buttonValue != Common::KEYCODE_ESCAPE);

w.close();
events.clearEvents();
}

void QuickFight::loadButtons() {
_icons.load("train.icn");
addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons);
addButton(Common::Rect(242, 108, 266, 128), Common::KEYCODE_t, &_icons);
}

} // End of namespace Xeen
Expand Up @@ -20,22 +20,41 @@
*
*/

#ifndef XEEN_DIALOGS_FIGHT_OPTIONS_H
#define XEEN_DIALOGS_FIGHT_OPTIONS_H
#ifndef XEEN_DIALOGS_QUICK_FIGHT_H
#define XEEN_DIALOGS_QUICK_FIGHT_H

#include "xeen/character.h"
#include "xeen/dialogs.h"
#include "xeen/sprites.h"

namespace Xeen {

class FightOptions : public ButtonContainer {
class QuickFight : public ButtonContainer {
private:
FightOptions(XeenEngine *vm) : ButtonContainer(vm) {}
SpriteResource _icons;
Character *_currentChar;
private:
/**
* Constructor
*/
QuickFight(XeenEngine *vm, Character *currentChar);

/**
* Executes the display of the dialog
*/
void execute();

/**
* Load butons for the dialog
*/
void loadButtons();
public:
static void show(XeenEngine *vm);
/**
* Show the dialog
*/
static void show(XeenEngine *vm, Character *currentChar);
};

} // End of namespace Xeen

#endif /* XEEN_DIALOGS_FIGHT_OPTIONS_H */
#endif /* XEEN_DIALOGS_QUICK_FIGHT_H */
6 changes: 3 additions & 3 deletions engines/xeen/interface.cpp
Expand Up @@ -24,7 +24,7 @@
#include "xeen/dialogs_char_info.h"
#include "xeen/dialogs_control_panel.h"
#include "xeen/dialogs_message.h"
#include "xeen/dialogs_fight_options.h"
#include "xeen/dialogs_quick_fight.h"
#include "xeen/dialogs_info.h"
#include "xeen/dialogs_items.h"
#include "xeen/dialogs_map.h"
Expand Down Expand Up @@ -1578,8 +1578,8 @@ void Interface::doCombat() {
break;

case Common::KEYCODE_o:
// Fight Options
FightOptions::show(_vm);
// Quick Fight Options
QuickFight::show(_vm, combat._combatParty[combat._whosTurn]);
highlightChar(combat._whosTurn);
break;

Expand Down
2 changes: 1 addition & 1 deletion engines/xeen/module.mk
Expand Up @@ -20,7 +20,6 @@ MODULE_OBJS := \
dialogs_create_char.o \
dialogs_dismiss.o \
dialogs_exchange.o \
dialogs_fight_options.o \
dialogs_info.o \
dialogs_input.o \
dialogs_items.o \
Expand All @@ -29,6 +28,7 @@ MODULE_OBJS := \
dialogs_party.o \
dialogs_query.o \
dialogs_quests.o \
dialogs_quick_fight.o \
dialogs_quick_ref.o \
dialogs_spells.o \
dialogs_whowill.o \
Expand Down
6 changes: 6 additions & 0 deletions engines/xeen/resources.cpp
Expand Up @@ -1693,6 +1693,12 @@ const char *const Resources::NO_LOADING_IN_COMBAT =
"No Loading Allowed in Combat!";
const char *const Resources::NO_SAVING_IN_COMBAT =
"No Saving Allowed in Combat!";
const char *const Resources::QUICK_FIGHT_TEXT = "\r\fd\x3""c\v000\t000QuickFight Options\n\n"
"%s\x3l\n\n"
"Current\x3r\n"
"\t000%s\x2\x3""c\v122\t021\f37N\f04ext\t060Exit\x1";
const char *const Resources::QUICK_FIGHT_OPTIONS[4] = { "Attack", "Cast", "Block", "Run" };

const char *const Resources::WORLD_END_TEXT[9] = {
"\n\n\n\n\n\n\n"
"Congratulations Adventurers!\n\n"
Expand Down
2 changes: 2 additions & 0 deletions engines/xeen/resources.h
Expand Up @@ -361,6 +361,8 @@ class Resources {
static const char *const MR_WIZARD;
static const char *const NO_LOADING_IN_COMBAT;
static const char *const NO_SAVING_IN_COMBAT;
static const char *const QUICK_FIGHT_TEXT;
static const char *const QUICK_FIGHT_OPTIONS[4];
static const char *const WORLD_END_TEXT[9];
static const char *const WORLD_CONGRATULATIONS;
static const char *const WORLD_CONGRATULATIONS2;
Expand Down

0 comments on commit db07aeb

Please sign in to comment.