1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
/* 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef MADE_SCRIPTFUNCS_H
#define MADE_SCRIPTFUNCS_H
#include "made/resource.h"
#include "audio/mixer.h"
#include "common/debug.h"
#include "common/system.h"
namespace Audio {
class PCSpeaker;
}
namespace Made {
class MadeEngine;
typedef Common::Functor2<int16, int16*, int16> ExternalFunc;
class ScriptFunctions {
public:
ScriptFunctions(MadeEngine *vm);
virtual ~ScriptFunctions();
int16 callFunction(uint16 index, int16 argc, int16 *argv) {
if (index >= _externalFuncs.size())
error("ScriptFunctions::callFunction() Invalid function index %d", index);
debug(4, "%s", _externalFuncNames[index]);
return (*_externalFuncs[index])(argc, argv);
}
void setupExternalsTable();
const char* getFuncName(int index) { return _externalFuncNames[index]; }
int getCount() const { return _externalFuncs.size(); }
void stopSound();
protected:
MadeEngine *_vm;
Audio::SoundHandle _audioStreamHandle;
Audio::SoundHandle _voiceStreamHandle;
SoundResource* _soundResource;
bool _soundStarted;
// The sound length in milliseconds for purpose of checking if the sound is
// still playing.
int _soundCheckLength;
// The audio volume set by the game scripts.
uint8 _gameAudioVolume;
// PlayNote/StopNote and PlayTele/StopTele wave generators
Audio::SoundHandle _pcSpeakerHandle1, _pcSpeakerHandle2;
Audio::PCSpeaker *_pcSpeaker1, *_pcSpeaker2;
Common::Array<const ExternalFunc *> _externalFuncs;
Common::Array<const char *> _externalFuncNames;
GenericResource *_musicRes;
int16 sfSystemCall(int16 argc, int16 *argv);
int16 sfInitGraf(int16 argc, int16 *argv);
int16 sfRestoreGraf(int16 argc, int16 *argv);
int16 sfDrawPicture(int16 argc, int16 *argv);
int16 sfClearScreen(int16 argc, int16 *argv);
int16 sfShowPage(int16 argc, int16 *argv);
int16 sfPollEvent(int16 argc, int16 *argv);
int16 sfGetMouseX(int16 argc, int16 *argv);
int16 sfGetMouseY(int16 argc, int16 *argv);
int16 sfGetKey(int16 argc, int16 *argv);
int16 sfSetVisualEffect(int16 argc, int16 *argv);
int16 sfPlaySound(int16 argc, int16 *argv);
int16 sfPlayMusic(int16 argc, int16 *argv);
int16 sfStopMusic(int16 argc, int16 *argv);
int16 sfIsMusicPlaying(int16 argc, int16 *argv);
int16 sfSetTextPos(int16 argc, int16 *argv);
int16 sfFlashScreen(int16 argc, int16 *argv);
int16 sfPlayNote(int16 argc, int16 *argv);
int16 sfStopNote(int16 argc, int16 *argv);
int16 sfPlayTele(int16 argc, int16 *argv);
int16 sfStopTele(int16 argc, int16 *argv);
int16 sfHideMouseCursor(int16 argc, int16 *argv);
int16 sfShowMouseCursor(int16 argc, int16 *argv);
int16 sfGetMusicBeat(int16 argc, int16 *argv);
int16 sfSetScreenLock(int16 argc, int16 *argv);
int16 sfAddSprite(int16 argc, int16 *argv);
int16 sfFreeAnim(int16 argc, int16 *argv);
int16 sfDrawSprite(int16 argc, int16 *argv);
int16 sfEraseSprites(int16 argc, int16 *argv);
int16 sfUpdateSprites(int16 argc, int16 *argv);
int16 sfGetTimer(int16 argc, int16 *argv);
int16 sfSetTimer(int16 argc, int16 *argv);
int16 sfResetTimer(int16 argc, int16 *argv);
int16 sfAllocTimer(int16 argc, int16 *argv);
int16 sfFreeTimer(int16 argc, int16 *argv);
int16 sfSetPaletteLock(int16 argc, int16 *argv);
int16 sfSetFont(int16 argc, int16 *argv);
int16 sfDrawText(int16 argc, int16 *argv);
int16 sfHomeText(int16 argc, int16 *argv);
int16 sfSetTextRect(int16 argc, int16 *argv);
int16 sfSetTextXY(int16 argc, int16 *argv);
int16 sfSetFontDropShadow(int16 argc, int16 *argv);
int16 sfSetFontColor(int16 argc, int16 *argv);
int16 sfSetFontOutline(int16 argc, int16 *argv);
int16 sfLoadMouseCursor(int16 argc, int16 *argv);
int16 sfSetSpriteGround(int16 argc, int16 *argv);
int16 sfLoadResText(int16 argc, int16 *argv);
int16 sfSetClipArea(int16 argc, int16 *argv);
int16 sfSetSpriteClip(int16 argc, int16 *argv);
int16 sfAddScreenMask(int16 argc, int16 *argv);
int16 sfSetSpriteMask(int16 argc, int16 *argv);
int16 sfSoundPlaying(int16 argc, int16 *argv);
int16 sfStopSound(int16 argc, int16 *argv);
int16 sfPlayVoice(int16 argc, int16 *argv);
int16 sfPlayCd(int16 argc, int16 *argv);
int16 sfStopCd(int16 argc, int16 *argv);
int16 sfGetCdStatus(int16 argc, int16 *argv);
int16 sfGetCdTime(int16 argc, int16 *argv);
int16 sfPlayCdSegment(int16 argc, int16 *argv);
int16 sfPrintf(int16 argc, int16 *argv);
int16 sfClearMono(int16 argc, int16 *argv);
int16 sfGetSoundEnergy(int16 argc, int16 *argv);
int16 sfClearText(int16 argc, int16 *argv);
int16 sfAnimText(int16 argc, int16 *argv);
int16 sfGetTextWidth(int16 argc, int16 *argv);
int16 sfPlayMovie(int16 argc, int16 *argv);
int16 sfLoadSound(int16 argc, int16 *argv);
int16 sfLoadMusic(int16 argc, int16 *argv);
int16 sfLoadPicture(int16 argc, int16 *argv);
int16 sfSetMusicVolume(int16 argc, int16 *argv);
int16 sfRestartEvents(int16 argc, int16 *argv);
int16 sfPlaceSprite(int16 argc, int16 *argv);
int16 sfPlaceText(int16 argc, int16 *argv);
int16 sfDeleteChannel(int16 argc, int16 *argv);
int16 sfGetChannelType(int16 argc, int16 *argv);
int16 sfSetChannelState(int16 argc, int16 *argv);
int16 sfSetChannelLocation(int16 argc, int16 *argv);
int16 sfSetChannelContent(int16 argc, int16 *argv);
int16 sfSetExcludeArea(int16 argc, int16 *argv);
int16 sfSetSpriteExclude(int16 argc, int16 *argv);
int16 sfGetChannelState(int16 argc, int16 *argv);
int16 sfPlaceAnim(int16 argc, int16 *argv);
int16 sfSetAnimFrame(int16 argc, int16 *argv);
int16 sfGetAnimFrame(int16 argc, int16 *argv);
int16 sfGetAnimFrameCount(int16 argc, int16 *argv);
int16 sfGetPictureWidth(int16 argc, int16 *argv);
int16 sfGetPictureHeight(int16 argc, int16 *argv);
int16 sfSetSoundRate(int16 argc, int16 *argv);
int16 sfDrawAnimPic(int16 argc, int16 *argv);
int16 sfLoadAnim(int16 argc, int16 *argv);
int16 sfReadText(int16 argc, int16 *argv);
int16 sfReadMenu(int16 argc, int16 *argv);
int16 sfDrawMenu(int16 argc, int16 *argv);
int16 sfGetMenuCount(int16 argc, int16 *argv);
int16 sfSaveGame(int16 argc, int16 *argv);
int16 sfLoadGame(int16 argc, int16 *argv);
int16 sfGetGameDescription(int16 argc, int16 *argv);
int16 sfShakeScreen(int16 argc, int16 *argv);
int16 sfPlaceMenu(int16 argc, int16 *argv);
int16 sfSetSoundVolume(int16 argc, int16 *argv);
int16 sfGetSynthType(int16 argc, int16 *argv);
int16 sfIsSlowSystem(int16 argc, int16 *argv);
};
} // End of namespace Made
#endif /* MADE_H */
|