mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-15 06:08:35 +00:00
273 lines
11 KiB
C++
273 lines
11 KiB
C++
/* 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.
|
|
*
|
|
*/
|
|
|
|
#ifndef RIVEN_EXTERNAL_H
|
|
#define RIVEN_EXTERNAL_H
|
|
|
|
#include "mohawk/riven.h"
|
|
|
|
namespace Mohawk {
|
|
|
|
#define COMMAND(x) _externalCommands.push_back(new RivenExternalCmd(#x, &RivenExternal::x))
|
|
|
|
class RivenExternal {
|
|
public:
|
|
RivenExternal(MohawkEngine_Riven *vm);
|
|
~RivenExternal();
|
|
|
|
void runCommand(uint16 argc, uint16 *argv);
|
|
uint16 getComboDigit(uint32 correctCombo, uint32 digit);
|
|
uint32 getDomeSliderState() { return _sliderState; }
|
|
void setDomeSliderState(uint32 state) { _sliderState = state; }
|
|
void checkYtramCatch(bool playSound);
|
|
|
|
private:
|
|
MohawkEngine_Riven *_vm;
|
|
uint32 _sliderState;
|
|
Common::Array<Common::Rect> _marbleBaseHotspots;
|
|
|
|
typedef void (RivenExternal::*ExternalCmd)(uint16 argc, uint16 *argv);
|
|
|
|
struct RivenExternalCmd {
|
|
RivenExternalCmd(const char *d, ExternalCmd p) : desc(d), proc(p) {}
|
|
const char *desc;
|
|
ExternalCmd proc;
|
|
};
|
|
|
|
Common::Array<RivenExternalCmd *> _externalCommands;
|
|
void setupCommands();
|
|
|
|
// Supplementary Functions
|
|
int jspitElevatorLoop();
|
|
void runDemoBoundaryDialog();
|
|
void runEndGame(uint16 video, uint32 delay);
|
|
void runCredits(uint16 video, uint32 delay);
|
|
void runDomeCheck();
|
|
void runDomeButtonMovie();
|
|
void resetDomeSliders(uint16 soundId, uint16 startHotspot);
|
|
void checkDomeSliders(uint16 resetSlidersHotspot, uint16 openDomeHotspot);
|
|
void checkSliderCursorChange(uint16 startHotspot);
|
|
void dragDomeSlider(uint16 soundId, uint16 resetSlidersHotspot, uint16 openDomeHotspot, uint16 startHotspot);
|
|
void drawDomeSliders(uint16 startHotspot);
|
|
void drawMarbles();
|
|
void setMarbleHotspots();
|
|
void redrawWharkNumberPuzzle(uint16 overlay, uint16 number);
|
|
void lowerPins();
|
|
|
|
// -----------------------------------------------------
|
|
// aspit (Main Menu, Books, Setup) external commands
|
|
// Main Menu
|
|
void xastartupbtnhide(uint16 argc, uint16 *argv);
|
|
void xasetupcomplete(uint16 argc, uint16 *argv);
|
|
// 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);
|
|
// 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);
|
|
// Trap Book
|
|
void xtrapbookback(uint16 argc, uint16 *argv);
|
|
void xatrapbookclose(uint16 argc, uint16 *argv);
|
|
void xatrapbookopen(uint16 argc, uint16 *argv);
|
|
// aspit DVD-specific commands
|
|
void xarestoregame(uint16 argc, uint16 *argv);
|
|
// aspit Demo-specific commands
|
|
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);
|
|
|
|
// -----------------------------------------------------
|
|
// bspit (Boiler Island) external commands
|
|
// Gehn's Lab Journal
|
|
void xblabopenbook(uint16 argc, uint16 *argv);
|
|
void xblabbooknextpage(uint16 argc, uint16 *argv);
|
|
void xblabbookprevpage(uint16 argc, uint16 *argv);
|
|
// Boiler Puzzle
|
|
void xsoundplug(uint16 argc, uint16 *argv);
|
|
void xbchangeboiler(uint16 argc, uint16 *argv);
|
|
void xbupdateboiler(uint16 argc, uint16 *argv);
|
|
// Frog Trap
|
|
void xbsettrap(uint16 argc, uint16 *argv);
|
|
void xbcheckcatch(uint16 argc, uint16 *argv);
|
|
void xbait(uint16 argc, uint16 *argv);
|
|
void xbfreeytram(uint16 argc, uint16 *argv);
|
|
void xbaitplate(uint16 argc, uint16 *argv);
|
|
// Dome
|
|
void xbisland190_opencard(uint16 argc, uint16 *argv);
|
|
void xbisland190_resetsliders(uint16 argc, uint16 *argv);
|
|
void xbisland190_slidermd(uint16 argc, uint16 *argv);
|
|
void xbisland190_slidermw(uint16 argc, uint16 *argv);
|
|
void xbscpbtn(uint16 argc, uint16 *argv);
|
|
void xbisland_domecheck(uint16 argc, uint16 *argv);
|
|
// Water Control
|
|
void xvalvecontrol(uint16 argc, uint16 *argv);
|
|
// Run the Wood Chipper
|
|
void xbchipper(uint16 argc, uint16 *argv);
|
|
|
|
// -----------------------------------------------------
|
|
// gspit (Garden Island) external commands
|
|
// Pins
|
|
void xgresetpins(uint16 argc, uint16 *argv);
|
|
void xgrotatepins(uint16 argc, uint16 *argv);
|
|
void xgpincontrols(uint16 argc, uint16 *argv);
|
|
// Dome
|
|
void xgisland25_opencard(uint16 argc, uint16 *argv);
|
|
void xgisland25_resetsliders(uint16 argc, uint16 *argv);
|
|
void xgisland25_slidermd(uint16 argc, uint16 *argv);
|
|
void xgisland25_slidermw(uint16 argc, uint16 *argv);
|
|
void xgscpbtn(uint16 argc, uint16 *argv);
|
|
void xgisland1490_domecheck(uint16 argc, uint16 *argv);
|
|
// Mapping
|
|
void xgplateau3160_dopools(uint16 argc, uint16 *argv);
|
|
// Scribe Taking the Tram
|
|
void xgwt200_scribetime(uint16 argc, uint16 *argv);
|
|
void xgwt900_scribe(uint16 argc, uint16 *argv);
|
|
// Periscope/Prison Viewer
|
|
void xgplaywhark(uint16 argc, uint16 *argv);
|
|
void xgrviewer(uint16 argc, uint16 *argv);
|
|
void xgwharksnd(uint16 argc, uint16 *argv);
|
|
void xglview_prisonoff(uint16 argc, uint16 *argv);
|
|
void xglview_villageoff(uint16 argc, uint16 *argv);
|
|
void xglviewer(uint16 argc, uint16 *argv);
|
|
void xglview_prisonon(uint16 argc, uint16 *argv);
|
|
void xglview_villageon(uint16 argc, uint16 *argv);
|
|
|
|
// -----------------------------------------------------
|
|
// jspit (Jungle Island) external commands
|
|
// Rebel Tunnel Puzzle
|
|
void xreseticons(uint16 argc, uint16 *argv);
|
|
void xicon(uint16 argc, uint16 *argv);
|
|
void xcheckicons(uint16 argc, uint16 *argv);
|
|
void xtoggleicon(uint16 argc, uint16 *argv);
|
|
void xjtunnel103_pictfix(uint16 argc, uint16 *argv);
|
|
void xjtunnel104_pictfix(uint16 argc, uint16 *argv);
|
|
void xjtunnel105_pictfix(uint16 argc, uint16 *argv);
|
|
void xjtunnel106_pictfix(uint16 argc, uint16 *argv);
|
|
// Lower the gallows carriage
|
|
void xvga1300_carriage(uint16 argc, uint16 *argv);
|
|
// Dome
|
|
void xjdome25_resetsliders(uint16 argc, uint16 *argv);
|
|
void xjdome25_slidermd(uint16 argc, uint16 *argv);
|
|
void xjdome25_slidermw(uint16 argc, uint16 *argv);
|
|
void xjscpbtn(uint16 argc, uint16 *argv);
|
|
void xjisland3500_domecheck(uint16 argc, uint16 *argv);
|
|
// Whark Elevator
|
|
void xhandlecontroldown(uint16 argc, uint16 *argv);
|
|
void xhandlecontrolmid(uint16 argc, uint16 *argv);
|
|
void xhandlecontrolup(uint16 argc, uint16 *argv);
|
|
// Beetle
|
|
void xjplaybeetle_550(uint16 argc, uint16 *argv);
|
|
void xjplaybeetle_600(uint16 argc, uint16 *argv);
|
|
void xjplaybeetle_950(uint16 argc, uint16 *argv);
|
|
void xjplaybeetle_1050(uint16 argc, uint16 *argv);
|
|
void xjplaybeetle_1450(uint16 argc, uint16 *argv);
|
|
// Creatures in the Lagoon
|
|
void xjlagoon700_alert(uint16 argc, uint16 *argv);
|
|
void xjlagoon800_alert(uint16 argc, uint16 *argv);
|
|
void xjlagoon1500_alert(uint16 argc, uint16 *argv);
|
|
// Play the Whark Game
|
|
void xschool280_playwhark(uint16 argc, uint16 *argv);
|
|
void xjschool280_resetleft(uint16 argc, uint16 *argv); // DVD only
|
|
void xjschool280_resetright(uint16 argc, uint16 *argv); // DVD only
|
|
// jspit Demo-specific commands
|
|
void xjatboundary(uint16 argc, uint16 *argv);
|
|
|
|
// -----------------------------------------------------
|
|
// ospit (233rd Age / Gehn's Office) external commands
|
|
// Death!
|
|
void xorollcredittime(uint16 argc, uint16 *argv);
|
|
// Trap Book Puzzle
|
|
void xbookclick(uint16 argc, uint16 *argv); // Four params -- movie_sref, start_time, end_time, u0
|
|
// Blank Linking Book
|
|
void xooffice30_closebook(uint16 argc, uint16 *argv);
|
|
// Gehn's Journal
|
|
void xobedroom5_closedrawer(uint16 argc, uint16 *argv);
|
|
void xogehnopenbook(uint16 argc, uint16 *argv);
|
|
void xogehnbookprevpage(uint16 argc, uint16 *argv);
|
|
void xogehnbooknextpage(uint16 argc, uint16 *argv);
|
|
// Elevator Combination
|
|
void xgwatch(uint16 argc, uint16 *argv);
|
|
|
|
// -----------------------------------------------------
|
|
// pspit (Prison Island) external commands
|
|
// Prison Elevator
|
|
void xpisland990_elevcombo(uint16 argc, uint16 *argv); // Param1: button
|
|
// Dome
|
|
void xpscpbtn(uint16 argc, uint16 *argv);
|
|
void xpisland290_domecheck(uint16 argc, uint16 *argv);
|
|
void xpisland25_opencard(uint16 argc, uint16 *argv);
|
|
void xpisland25_resetsliders(uint16 argc, uint16 *argv);
|
|
void xpisland25_slidermd(uint16 argc, uint16 *argv);
|
|
void xpisland25_slidermw(uint16 argc, uint16 *argv);
|
|
|
|
// -----------------------------------------------------
|
|
// rspit (Rebel Age / Tay) external commands
|
|
void xrcredittime(uint16 argc, uint16 *argv);
|
|
void xrshowinventory(uint16 argc, uint16 *argv);
|
|
void xrhideinventory(uint16 argc, uint16 *argv);
|
|
void xrwindowsetup(uint16 argc, uint16 *argv);
|
|
|
|
// -----------------------------------------------------
|
|
// tspit (Temple Island) external commands
|
|
// Telescope
|
|
void xtexterior300_telescopedown(uint16 argc, uint16 *argv);
|
|
void xtexterior300_telescopeup(uint16 argc, uint16 *argv);
|
|
// Called when clicking the telescope cover buttons. button is the button number (1...5).
|
|
void xtisland390_covercombo(uint16 argc, uint16 *argv); // Param1: button
|
|
// Atrus' Journal and Trap Book are added to inventory
|
|
void xtatrusgivesbooks(uint16 argc, uint16 *argv);
|
|
// Trap Book is removed from inventory
|
|
void xtchotakesbook(uint16 argc, uint16 *argv);
|
|
void xthideinventory(uint16 argc, uint16 *argv);
|
|
// Marble Puzzle
|
|
void xt7500_checkmarbles(uint16 argc, uint16 *argv);
|
|
void xt7600_setupmarbles(uint16 argc, uint16 *argv);
|
|
void xt7800_setup(uint16 argc, uint16 *argv);
|
|
void xdrawmarbles(uint16 argc, uint16 *argv);
|
|
void xtakeit(uint16 argc, uint16 *argv);
|
|
// Dome
|
|
void xtscpbtn(uint16 argc, uint16 *argv);
|
|
void xtisland4990_domecheck(uint16 argc, uint16 *argv);
|
|
void xtisland5056_opencard(uint16 argc, uint16 *argv);
|
|
void xtisland5056_resetsliders(uint16 argc, uint16 *argv);
|
|
void xtisland5056_slidermd(uint16 argc, uint16 *argv);
|
|
void xtisland5056_slidermw(uint16 argc, uint16 *argv);
|
|
// tspit Demo-specific commands
|
|
void xtatboundary(uint16 argc, uint16 *argv);
|
|
|
|
// -----------------------------------------------------
|
|
// Common external commands
|
|
void xflies(uint16 argc, uint16 *argv); // Start the "flies" realtime effect. u0 seems always 0, u1 is a small number (< 10).
|
|
};
|
|
|
|
} // End of namespace Mohawk
|
|
|
|
#endif
|