Skip to content

Commit

Permalink
MOHAWK: Switch external command arguments to Common::Array
Browse files Browse the repository at this point in the history
  • Loading branch information
bgK authored and sev- committed Jul 3, 2017
1 parent 95951ee commit b552719
Show file tree
Hide file tree
Showing 19 changed files with 293 additions and 287 deletions.
7 changes: 6 additions & 1 deletion engines/mohawk/riven_scripts.cpp
Expand Up @@ -473,7 +473,12 @@ void RivenSimpleCommand::delay(uint16 op, uint16 argc, uint16 *argv) {

// Command 17: call external command
void RivenSimpleCommand::runExternalCommand(uint16 op, uint16 argc, uint16 *argv) {
_vm->getStack()->runCommand(argc, argv);
uint16 commandNameid = argv[0];
uint16 argumentCount = argv[1];

Common::Array<uint16> commandArgs(argv + 2, argumentCount);

_vm->getStack()->runCommand(commandNameid, commandArgs);
}

// Command 18: transition
Expand Down
10 changes: 5 additions & 5 deletions engines/mohawk/riven_stack.cpp
Expand Up @@ -154,22 +154,22 @@ void RivenStack::dump() const {
}
}

void RivenStack::runCommand(uint16 argc, uint16 *argv) {
Common::String externalCommandName = getName(kExternalCommandNames, argv[0]);
void RivenStack::runCommand(uint16 commandNameId, const ArgumentArray &args) {
Common::String externalCommandName = getName(kExternalCommandNames, commandNameId);

if (!_commands.contains(externalCommandName)) {
error("Unknown external command \'%s\'", externalCommandName.c_str());
}

(*_commands[externalCommandName])(argv[1], argv[1] ? argv + 2 : nullptr);
(*_commands[externalCommandName])(args);
}

void RivenStack::registerCommand(const Common::String &name, ExternalCommand *command) {
_commands[name] = Common::SharedPtr<ExternalCommand>(command);
}

void RivenStack::xflies(uint16 argc, uint16 *argv) {
_vm->_gfx->setFliesEffect(argv[1], argv[0] == 1);
void RivenStack::xflies(const ArgumentArray &args) {
_vm->_gfx->setFliesEffect(args[1], args[0] == 1);
}

uint16 RivenStack::getComboDigit(uint32 correctCombo, uint32 digit) {
Expand Down
9 changes: 5 additions & 4 deletions engines/mohawk/riven_stack.h
Expand Up @@ -83,6 +83,7 @@ class RivenStack {
RivenStack(MohawkEngine_Riven *vm, uint16 id);
virtual ~RivenStack();

typedef Common::Array<uint16> ArgumentArray;
typedef Common::Functor0<void> TimerProc;

/** Get the id of the stack */
Expand All @@ -108,7 +109,7 @@ class RivenStack {
uint32 getCardGlobalId(uint16 cardId) const;

/** Run an external command with the specified parameters */
void runCommand(uint16 argc, uint16 *argv);
void runCommand(uint16 commandNameId, const Common::Array<uint16> &args);

/** Write all of the stack's data including its cards to standard output */
void dump() const;
Expand Down Expand Up @@ -153,7 +154,7 @@ class RivenStack {
void keyForceUp();

// Common external commands
void xflies(uint16 argc, uint16 *argv); // Start the "flies" effect
void xflies(const ArgumentArray &args); // Start the "flies" effect

// Miscellaneous
uint16 getComboDigit(uint32 correctCombo, uint32 digit);
Expand All @@ -163,7 +164,7 @@ class RivenStack {
bool pageTurn(RivenTransition transition);

protected:
typedef Common::Functor2<uint16, uint16 *, void> ExternalCommand;
typedef Common::Functor1<const ArgumentArray &, void> ExternalCommand;

MohawkEngine_Riven *_vm;

Expand All @@ -178,7 +179,7 @@ class RivenStack {

#define REGISTER_COMMAND(cls, method) \
registerCommand( \
#method, new Common::Functor2Mem<uint16, uint16 *, void, cls>(this, &cls::method) \
#method, new Common::Functor1Mem<const Common::Array<uint16> &, void, cls>(this, &cls::method) \
)

#define TIMER(cls, method) \
Expand Down
42 changes: 21 additions & 21 deletions engines/mohawk/riven_stacks/aspit.cpp
Expand Up @@ -62,20 +62,20 @@ ASpit::ASpit(MohawkEngine_Riven *vm) :
REGISTER_COMMAND(ASpit, xaexittomain);
}

void ASpit::xastartupbtnhide(uint16 argc, uint16 *argv) {
void ASpit::xastartupbtnhide(const ArgumentArray &args) {
// The original game hides the start/setup buttons depending on an ini entry.
// It's safe to ignore this command.
}

void ASpit::xasetupcomplete(uint16 argc, uint16 *argv) {
void ASpit::xasetupcomplete(const ArgumentArray &args) {
// The original game sets an ini entry to disable the setup button and use the
// start button only. It's safe to ignore this part of the command.
uint16 menuCardId = getCardStackId(0xE2E);
RivenScriptPtr goToMenuScript = _vm->_scriptMan->createScriptFromData(1, kRivenCommandChangeCard, 1, menuCardId);
_vm->_scriptMan->runScript(goToMenuScript, false);
}

void ASpit::xaatrusopenbook(uint16 argc, uint16 *argv) {
void ASpit::xaatrusopenbook(const ArgumentArray &args) {
// Get the variable
uint32 &page = _vm->_vars["aatrusbook"];

Expand All @@ -97,11 +97,11 @@ void ASpit::xaatrusopenbook(uint16 argc, uint16 *argv) {
_vm->getCard()->drawPicture(page);
}

void ASpit::xaatrusbookback(uint16 argc, uint16 *argv) {
void ASpit::xaatrusbookback(const ArgumentArray &args) {
_vm->_inventory->backFromItemScript();
}

void ASpit::xaatrusbookprevpage(uint16 argc, uint16 *argv) {
void ASpit::xaatrusbookprevpage(const ArgumentArray &args) {
// Get the page variable
uint32 &page = _vm->_vars["aatrusbook"];

Expand All @@ -125,7 +125,7 @@ void ASpit::xaatrusbookprevpage(uint16 argc, uint16 *argv) {
}
}

void ASpit::xaatrusbooknextpage(uint16 argc, uint16 *argv) {
void ASpit::xaatrusbooknextpage(const ArgumentArray &args) {
// Get the page variable
uint32 &page = _vm->_vars["aatrusbook"];

Expand All @@ -149,7 +149,7 @@ void ASpit::xaatrusbooknextpage(uint16 argc, uint16 *argv) {
}
}

void ASpit::xacathopenbook(uint16 argc, uint16 *argv) {
void ASpit::xacathopenbook(const ArgumentArray &args) {
// Get the variable
uint32 page = _vm->_vars["acathbook"];

Expand Down Expand Up @@ -201,11 +201,11 @@ void ASpit::cathBookDrawTelescopeCombination() {// Draw the telescope combinatio
}
}

void ASpit::xacathbookback(uint16 argc, uint16 *argv) {
void ASpit::xacathbookback(const ArgumentArray &args) {
_vm->_inventory->backFromItemScript();
}

void ASpit::xacathbookprevpage(uint16 argc, uint16 *argv) {
void ASpit::xacathbookprevpage(const ArgumentArray &args) {
// Get the variable
uint32 &page = _vm->_vars["acathbook"];

Expand All @@ -230,7 +230,7 @@ void ASpit::xacathbookprevpage(uint16 argc, uint16 *argv) {
}
}

void ASpit::xacathbooknextpage(uint16 argc, uint16 *argv) {
void ASpit::xacathbooknextpage(const ArgumentArray &args) {
// Get the variable
uint32 &page = _vm->_vars["acathbook"];

Expand All @@ -255,13 +255,13 @@ void ASpit::xacathbooknextpage(uint16 argc, uint16 *argv) {
}
}

void ASpit::xtrapbookback(uint16 argc, uint16 *argv) {
void ASpit::xtrapbookback(const ArgumentArray &args) {
// Return to where we were before entering the book
_vm->_vars["atrap"] = 0;
_vm->_inventory->backFromItemScript();
}

void ASpit::xatrapbookclose(uint16 argc, uint16 *argv) {
void ASpit::xatrapbookclose(const ArgumentArray &args) {
// Close the trap book
_vm->_vars["atrap"] = 0;

Expand All @@ -276,7 +276,7 @@ void ASpit::xatrapbookclose(uint16 argc, uint16 *argv) {
_vm->getCard()->enter(false);
}

void ASpit::xatrapbookopen(uint16 argc, uint16 *argv) {
void ASpit::xatrapbookopen(const ArgumentArray &args) {
// Open the trap book
_vm->_vars["atrap"] = 1;

Expand All @@ -285,24 +285,24 @@ void ASpit::xatrapbookopen(uint16 argc, uint16 *argv) {
_vm->getCard()->enter(false);
}

void ASpit::xarestoregame(uint16 argc, uint16 *argv) {
void ASpit::xarestoregame(const ArgumentArray &args) {
// Launch the load game dialog
_vm->runLoadDialog();
}

void ASpit::xadisablemenureturn(uint16 argc, uint16 *argv) {
void ASpit::xadisablemenureturn(const ArgumentArray &args) {
// This function would normally enable the Windows menu item for
// returning to the main menu. Ctrl+r will do this instead.
// The original also had this shortcut.
}

void ASpit::xaenablemenureturn(uint16 argc, uint16 *argv) {
void ASpit::xaenablemenureturn(const ArgumentArray &args) {
// This function would normally enable the Windows menu item for
// returning to the main menu. Ctrl+r will do this instead.
// The original also had this shortcut.
}

void ASpit::xalaunchbrowser(uint16 argc, uint16 *argv) {
void ASpit::xalaunchbrowser(const ArgumentArray &args) {
// Well, we can't launch a browser for obvious reasons ;)
// The original text is as follows (for reference):

Expand All @@ -327,15 +327,15 @@ void ASpit::xalaunchbrowser(uint16 argc, uint16 *argv) {
dialog.runModal();
}

void ASpit::xadisablemenuintro(uint16 argc, uint16 *argv) {
void ASpit::xadisablemenuintro(const ArgumentArray &args) {
// This function would normally enable the Windows menu item for
// playing the intro. Ctrl+p will play the intro movies instead.
// The original also had this shortcut.

_vm->_inventory->forceHidden(true);
}

void ASpit::xaenablemenuintro(uint16 argc, uint16 *argv) {
void ASpit::xaenablemenuintro(const ArgumentArray &args) {
// This function would normally enable the Windows menu item for
// playing the intro. Ctrl+p will play the intro movies instead.
// The original also had this shortcut.
Expand All @@ -344,12 +344,12 @@ void ASpit::xaenablemenuintro(uint16 argc, uint16 *argv) {
_vm->_inventory->forceHidden(false);
}

void ASpit::xademoquit(uint16 argc, uint16 *argv) {
void ASpit::xademoquit(const ArgumentArray &args) {
// Exactly as it says on the tin. In the demo, this function quits.
_vm->quitGame();
}

void ASpit::xaexittomain(uint16 argc, uint16 *argv) {
void ASpit::xaexittomain(const ArgumentArray &args) {
// One could potentially implement this function, but there would be no
// point. This function is only used in the demo's aspit card 9 update
// screen script. However, card 9 is not accessible from the game without
Expand Down
42 changes: 21 additions & 21 deletions engines/mohawk/riven_stacks/aspit.h
Expand Up @@ -36,37 +36,37 @@ class ASpit : public RivenStack {
ASpit(MohawkEngine_Riven *vm);

// External commands - Main Menu
void xastartupbtnhide(uint16 argc, uint16 *argv);
void xasetupcomplete(uint16 argc, uint16 *argv);
void xastartupbtnhide(const ArgumentArray &args);
void xasetupcomplete(const ArgumentArray &args);

// External commands - Atrus' Journal
void xaatrusopenbook(uint16 argc, uint16 *argv);
void xaatrusbookback(uint16 argc, uint16 *argv);
void xaatrusbookprevpage(uint16 argc, uint16 *argv);
void xaatrusbooknextpage(uint16 argc, uint16 *argv);
void xaatrusopenbook(const ArgumentArray &args);
void xaatrusbookback(const ArgumentArray &args);
void xaatrusbookprevpage(const ArgumentArray &args);
void xaatrusbooknextpage(const ArgumentArray &args);

// External commands - Catherine's Journal
void xacathopenbook(uint16 argc, uint16 *argv);
void xacathbookback(uint16 argc, uint16 *argv);
void xacathbookprevpage(uint16 argc, uint16 *argv);
void xacathbooknextpage(uint16 argc, uint16 *argv);
void xacathopenbook(const ArgumentArray &args);
void xacathbookback(const ArgumentArray &args);
void xacathbookprevpage(const ArgumentArray &args);
void xacathbooknextpage(const ArgumentArray &args);

// External commands - Trap Book
void xtrapbookback(uint16 argc, uint16 *argv);
void xatrapbookclose(uint16 argc, uint16 *argv);
void xatrapbookopen(uint16 argc, uint16 *argv);
void xtrapbookback(const ArgumentArray &args);
void xatrapbookclose(const ArgumentArray &args);
void xatrapbookopen(const ArgumentArray &args);

// External commands - DVD-specific
void xarestoregame(uint16 argc, uint16 *argv);
void xarestoregame(const ArgumentArray &args);

// External commands - Demo-specific
void xadisablemenureturn(uint16 argc, uint16 *argv);
void xaenablemenureturn(uint16 argc, uint16 *argv);
void xalaunchbrowser(uint16 argc, uint16 *argv);
void xadisablemenuintro(uint16 argc, uint16 *argv);
void xaenablemenuintro(uint16 argc, uint16 *argv);
void xademoquit(uint16 argc, uint16 *argv);
void xaexittomain(uint16 argc, uint16 *argv);
void xadisablemenureturn(const ArgumentArray &args);
void xaenablemenureturn(const ArgumentArray &args);
void xalaunchbrowser(const ArgumentArray &args);
void xadisablemenuintro(const ArgumentArray &args);
void xaenablemenuintro(const ArgumentArray &args);
void xademoquit(const ArgumentArray &args);
void xaexittomain(const ArgumentArray &args);

private:
void cathBookDrawTelescopeCombination();
Expand Down

0 comments on commit b552719

Please sign in to comment.