aboutsummaryrefslogtreecommitdiff
path: root/simon
diff options
context:
space:
mode:
authorChris Apers2005-11-05 18:47:03 +0000
committerChris Apers2005-11-05 18:47:03 +0000
commitaf1cbcde851711b627a1f846383d6a1e92e639f0 (patch)
treec01865e479b59fedab69bae1c6170b79a918179a /simon
parent3fe9730fc9c3f3f0f6b980b97a0792eed89af250 (diff)
downloadscummvm-rg350-af1cbcde851711b627a1f846383d6a1e92e639f0.tar.gz
scummvm-rg350-af1cbcde851711b627a1f846383d6a1e92e639f0.tar.bz2
scummvm-rg350-af1cbcde851711b627a1f846383d6a1e92e639f0.zip
- Changed PalmOS ifdef
- Move opcode table to setupVgaOpcodes so that the table is correctly initialized with PalmOS ARM svn-id: r19471
Diffstat (limited to 'simon')
-rw-r--r--simon/simon.cpp22
-rw-r--r--simon/simon.h5
-rw-r--r--simon/vga.cpp183
3 files changed, 112 insertions, 98 deletions
diff --git a/simon/simon.cpp b/simon/simon.cpp
index 5ddfb15a5b..8a8189db12 100644
--- a/simon/simon.cpp
+++ b/simon/simon.cpp
@@ -45,7 +45,7 @@
extern bool isSmartphone(void);
#endif
-#ifdef __PALM_OS__
+#ifdef PALMOS_68K
#include "globals.h"
#endif
@@ -169,7 +169,7 @@ REGISTER_PLUGIN(SIMON, "Simon the Sorcerer")
namespace Simon {
-#ifdef __PALM_OS__
+#ifdef PALMOS_68K
#define PTR(a) a
static const GameSpecificSettings *simon1_settings;
static const GameSpecificSettings *simon1acorn_settings;
@@ -177,6 +177,7 @@ static const GameSpecificSettings *simon1amiga_settings;
static const GameSpecificSettings *simon1demo_settings;
static const GameSpecificSettings *simon2win_settings;
static const GameSpecificSettings *simon2dos_settings;
+static const GameSpecificSettings *feeblefiles_settings;
#else
#define PTR(a) &a
static const GameSpecificSettings simon1_settings = {
@@ -292,6 +293,7 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)
_gameOffsetsPtr = 0;
_debugger = 0;
+ setupVgaOpcodes();
const SimonGameSettings *g = simon_settings;
while (g->name) {
@@ -364,7 +366,7 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)
VGA_DELAY_BASE = 1;
if (_game == GAME_FEEBLEFILES) {
NUM_VIDEO_OP_CODES = 85;
-#ifndef __PALM_OS__
+#ifndef PALMOS_68K
VGA_MEM_SIZE = 7500000;
#else
VGA_MEM_SIZE = gVars->memory[kMemSimon2Games];
@@ -374,7 +376,7 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)
TABLE_INDEX_BASE = 1580 / 4;
TEXT_INDEX_BASE = 1500 / 4;
NUM_VIDEO_OP_CODES = 75;
-#ifndef __PALM_OS__
+#ifndef PALMOS_68K
VGA_MEM_SIZE = 2000000;
#else
VGA_MEM_SIZE = gVars->memory[kMemSimon2Games];
@@ -390,7 +392,7 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)
TABLE_INDEX_BASE = 1576 / 4;
TEXT_INDEX_BASE = 1460 / 4;
NUM_VIDEO_OP_CODES = 64;
-#ifndef __PALM_OS__
+#ifndef PALMOS_68K
VGA_MEM_SIZE = 1000000;
#else
VGA_MEM_SIZE = gVars->memory[kMemSimon1Games];
@@ -1404,7 +1406,6 @@ void SimonEngine::loadTablesIntoMem(uint subr_id) {
in = openTablesFile(filename);
readSubroutineBlock(in);
closeTablesFile(in);
-
if (_game == GAME_FEEBLEFILES) {
// TODO
} else if (_game & GF_SIMON2) {
@@ -2572,6 +2573,7 @@ void SimonEngine::set_video_mode_internal(uint mode, uint vga_res_id) {
} else {
_vcPtr = _curVgaFile1 + READ_BE_UINT16(&((ImageHeader_Simon *) b)->scriptOffs);
}
+
//dump_vga_script(_vcPtr, num, vga_res_id);
run_vga_script();
_vcPtr = vc_ptr_org;
@@ -2593,8 +2595,10 @@ void SimonEngine::set_video_mode_internal(uint mode, uint vga_res_id) {
num_lines = 200;
else
num_lines = _windowNum == 4 ? 134 : 200;
+
dx_copy_from_attached_to_2(0, 0, _screenWidth, num_lines);
dx_copy_from_attached_to_3(num_lines);
+
_syncFlag2 = 1;
_timer5 = 0;
}
@@ -4200,7 +4204,7 @@ void SimonEngine::delay(uint amount) {
break;
case OSystem::EVENT_LBUTTONDOWN:
_leftButtonDown++;
-#if defined (_WIN32_WCE) || defined(__PALM_OS__)
+#if defined (_WIN32_WCE) || defined(PALMOS_MODE)
_sdlMouseX = event.mouse.x;
_sdlMouseY = event.mouse.y;
#endif
@@ -4325,7 +4329,7 @@ byte SimonEngine::getByte() {
} // End of namespace Simon
-#ifdef __PALM_OS__
+#ifdef PALMOS_68K
#include "scumm_globals.h"
_GINIT(Simon_Simon)
@@ -4335,6 +4339,7 @@ _GSETPTR(Simon::simon1amiga_settings, GBVARS_SIMON1AMIGASETTINGS_INDEX, Simon::G
_GSETPTR(Simon::simon1demo_settings, GBVARS_SIMON1DEMOSETTINGS_INDEX, Simon::GameSpecificSettings, GBVARS_SIMON)
_GSETPTR(Simon::simon2win_settings, GBVARS_SIMON2WINSETTINGS_INDEX, Simon::GameSpecificSettings, GBVARS_SIMON)
_GSETPTR(Simon::simon2dos_settings, GBVARS_SIMON2DOSSETTINGS_INDEX, Simon::GameSpecificSettings, GBVARS_SIMON)
+_GSETPTR(Simon::feeblefiles_settings, GBVARS_FEEBLEFILESSETTINGS_INDEX, Simon::GameSpecificSettings, GBVARS_SIMON)
_GEND
_GRELEASE(Simon_Simon)
@@ -4344,6 +4349,7 @@ _GRELEASEPTR(GBVARS_SIMON1AMIGASETTINGS_INDEX, GBVARS_SIMON)
_GRELEASEPTR(GBVARS_SIMON1DEMOSETTINGS_INDEX, GBVARS_SIMON)
_GRELEASEPTR(GBVARS_SIMON2WINSETTINGS_INDEX, GBVARS_SIMON)
_GRELEASEPTR(GBVARS_SIMON2DOSSETTINGS_INDEX, GBVARS_SIMON)
+_GRELEASEPTR(GBVARS_FEEBLEFILESSETTINGS_INDEX, GBVARS_SIMON)
_GEND
#endif
diff --git a/simon/simon.h b/simon/simon.h
index c4c528c792..c6fe96e59b 100644
--- a/simon/simon.h
+++ b/simon/simon.h
@@ -109,6 +109,11 @@ class SimonEngine : public Engine {
friend class Debugger;
void errorString(const char *buf_input, char *buf_output);
+
+ typedef void (SimonEngine::*VgaOpcodeProc) ();
+ void setupVgaOpcodes();
+ const VgaOpcodeProc *_vga_opcode_table;
+
protected:
void playSting(uint a);
diff --git a/simon/vga.cpp b/simon/vga.cpp
index a81dccd01b..cadbe37bc3 100644
--- a/simon/vga.cpp
+++ b/simon/vga.cpp
@@ -29,96 +29,98 @@
namespace Simon {
-typedef void (SimonEngine::*VgaOpcodeProc) ();
-
// Opcode tables
-static const VgaOpcodeProc vga_opcode_table[] = {
- NULL,
- &SimonEngine::vc1_fadeOut,
- &SimonEngine::vc2_call,
- &SimonEngine::vc3_loadSprite,
- &SimonEngine::vc4_fadeIn,
- &SimonEngine::vc5_skip_if_neq,
- &SimonEngine::vc6_skip_ifn_sib_with_a,
- &SimonEngine::vc7_skip_if_sib_with_a,
- &SimonEngine::vc8_skip_if_parent_is,
- &SimonEngine::vc9_skip_if_unk3_is,
- &SimonEngine::vc10_draw,
- &SimonEngine::vc11_clearPathFinder,
- &SimonEngine::vc12_delay,
- &SimonEngine::vc13_addToSpriteX,
- &SimonEngine::vc14_addToSpriteY,
- &SimonEngine::vc15_wakeup_id,
- &SimonEngine::vc16_sleep_on_id,
- &SimonEngine::vc17_setPathfinderItem,
- &SimonEngine::vc18_jump,
- &SimonEngine::vc19_chain_to_script,
- &SimonEngine::vc20_setRepeat,
- &SimonEngine::vc21_endRepeat,
- &SimonEngine::vc22_setSpritePalette,
- &SimonEngine::vc23_setSpritePriority,
- &SimonEngine::vc24_setSpriteXY,
- &SimonEngine::vc25_halt_sprite,
- &SimonEngine::vc26_setSubWindow,
- &SimonEngine::vc27_resetSprite,
- &SimonEngine::vc28_dummy_op,
- &SimonEngine::vc29_stopAllSounds,
- &SimonEngine::vc30_setFrameRate,
- &SimonEngine::vc31_setWindow,
- &SimonEngine::vc32_copyVar,
- &SimonEngine::vc33_setMouseOn,
- &SimonEngine::vc34_setMouseOff,
- &SimonEngine::vc35_clearWindow,
- &SimonEngine::vc36_setWindowImage,
- &SimonEngine::vc37_addToSpriteY,
- &SimonEngine::vc38_skipIfVarZero,
- &SimonEngine::vc39_setVar,
- &SimonEngine::vc40,
- &SimonEngine::vc41,
- &SimonEngine::vc42_delayIfNotEQ,
- &SimonEngine::vc43_skipIfBitClear,
- &SimonEngine::vc44_skipIfBitSet,
- &SimonEngine::vc45_setSpriteX,
- &SimonEngine::vc46_setSpriteY,
- &SimonEngine::vc47_addToVar,
- &SimonEngine::vc48_setPathFinder,
- &SimonEngine::vc49_setBit,
- &SimonEngine::vc50_clearBit,
- &SimonEngine::vc51_clear_hitarea_bit_0x40,
- &SimonEngine::vc52_playSound,
- &SimonEngine::vc53_no_op,
- &SimonEngine::vc54_no_op,
- &SimonEngine::vc55_offset_hit_area,
- &SimonEngine::vc56_delay,
- &SimonEngine::vc57_no_op,
- &SimonEngine::vc58,
- &SimonEngine::vc59,
- &SimonEngine::vc60_killSprite,
- &SimonEngine::vc61_changeSprite,
- &SimonEngine::vc62_fastFadeOut,
- &SimonEngine::vc63_fastFadeIn,
- &SimonEngine::vc64_skipIfSpeechEnded,
- &SimonEngine::vc65_slowFadeIn,
- &SimonEngine::vc66_skipIfNotEqual,
- &SimonEngine::vc67_skipIfGE,
- &SimonEngine::vc68_skipIfLE,
- &SimonEngine::vc69_playTrack,
- &SimonEngine::vc70_queueMusic,
- &SimonEngine::vc71_checkMusicQueue,
- &SimonEngine::vc72_play_track_2,
- &SimonEngine::vc73_setMark,
- &SimonEngine::vc74_clearMark,
- &SimonEngine::vc75_setScale,
- &SimonEngine::vc76_setScaleXOffs,
- &SimonEngine::vc77_setScaleYOffs,
- &SimonEngine::vc78_pathUnk1,
- &SimonEngine::vc79_pathUnk2,
- &SimonEngine::vc80_setOverlayImage,
- &SimonEngine::vc81_setRandom,
- &SimonEngine::vc82_pathUnk3,
- &SimonEngine::vc83_playSoundLoop,
- &SimonEngine::vc84_stopSoundLoop,
-};
+void SimonEngine::setupVgaOpcodes() {
+ static const VgaOpcodeProc vga_opcode_table[] = {
+ NULL,
+ &SimonEngine::vc1_fadeOut,
+ &SimonEngine::vc2_call,
+ &SimonEngine::vc3_loadSprite,
+ &SimonEngine::vc4_fadeIn,
+ &SimonEngine::vc5_skip_if_neq,
+ &SimonEngine::vc6_skip_ifn_sib_with_a,
+ &SimonEngine::vc7_skip_if_sib_with_a,
+ &SimonEngine::vc8_skip_if_parent_is,
+ &SimonEngine::vc9_skip_if_unk3_is,
+ &SimonEngine::vc10_draw,
+ &SimonEngine::vc11_clearPathFinder,
+ &SimonEngine::vc12_delay,
+ &SimonEngine::vc13_addToSpriteX,
+ &SimonEngine::vc14_addToSpriteY,
+ &SimonEngine::vc15_wakeup_id,
+ &SimonEngine::vc16_sleep_on_id,
+ &SimonEngine::vc17_setPathfinderItem,
+ &SimonEngine::vc18_jump,
+ &SimonEngine::vc19_chain_to_script,
+ &SimonEngine::vc20_setRepeat,
+ &SimonEngine::vc21_endRepeat,
+ &SimonEngine::vc22_setSpritePalette,
+ &SimonEngine::vc23_setSpritePriority,
+ &SimonEngine::vc24_setSpriteXY,
+ &SimonEngine::vc25_halt_sprite,
+ &SimonEngine::vc26_setSubWindow,
+ &SimonEngine::vc27_resetSprite,
+ &SimonEngine::vc28_dummy_op,
+ &SimonEngine::vc29_stopAllSounds,
+ &SimonEngine::vc30_setFrameRate,
+ &SimonEngine::vc31_setWindow,
+ &SimonEngine::vc32_copyVar,
+ &SimonEngine::vc33_setMouseOn,
+ &SimonEngine::vc34_setMouseOff,
+ &SimonEngine::vc35_clearWindow,
+ &SimonEngine::vc36_setWindowImage,
+ &SimonEngine::vc37_addToSpriteY,
+ &SimonEngine::vc38_skipIfVarZero,
+ &SimonEngine::vc39_setVar,
+ &SimonEngine::vc40,
+ &SimonEngine::vc41,
+ &SimonEngine::vc42_delayIfNotEQ,
+ &SimonEngine::vc43_skipIfBitClear,
+ &SimonEngine::vc44_skipIfBitSet,
+ &SimonEngine::vc45_setSpriteX,
+ &SimonEngine::vc46_setSpriteY,
+ &SimonEngine::vc47_addToVar,
+ &SimonEngine::vc48_setPathFinder,
+ &SimonEngine::vc49_setBit,
+ &SimonEngine::vc50_clearBit,
+ &SimonEngine::vc51_clear_hitarea_bit_0x40,
+ &SimonEngine::vc52_playSound,
+ &SimonEngine::vc53_no_op,
+ &SimonEngine::vc54_no_op,
+ &SimonEngine::vc55_offset_hit_area,
+ &SimonEngine::vc56_delay,
+ &SimonEngine::vc57_no_op,
+ &SimonEngine::vc58,
+ &SimonEngine::vc59,
+ &SimonEngine::vc60_killSprite,
+ &SimonEngine::vc61_changeSprite,
+ &SimonEngine::vc62_fastFadeOut,
+ &SimonEngine::vc63_fastFadeIn,
+ &SimonEngine::vc64_skipIfSpeechEnded,
+ &SimonEngine::vc65_slowFadeIn,
+ &SimonEngine::vc66_skipIfNotEqual,
+ &SimonEngine::vc67_skipIfGE,
+ &SimonEngine::vc68_skipIfLE,
+ &SimonEngine::vc69_playTrack,
+ &SimonEngine::vc70_queueMusic,
+ &SimonEngine::vc71_checkMusicQueue,
+ &SimonEngine::vc72_play_track_2,
+ &SimonEngine::vc73_setMark,
+ &SimonEngine::vc74_clearMark,
+ &SimonEngine::vc75_setScale,
+ &SimonEngine::vc76_setScaleXOffs,
+ &SimonEngine::vc77_setScaleYOffs,
+ &SimonEngine::vc78_pathUnk1,
+ &SimonEngine::vc79_pathUnk2,
+ &SimonEngine::vc80_setOverlayImage,
+ &SimonEngine::vc81_setRandom,
+ &SimonEngine::vc82_pathUnk3,
+ &SimonEngine::vc83_playSoundLoop,
+ &SimonEngine::vc84_stopSoundLoop,
+ };
+
+ _vga_opcode_table = vga_opcode_table;
+}
// Script parser
void SimonEngine::run_vga_script() {
@@ -145,7 +147,7 @@ void SimonEngine::run_vga_script() {
if (opcode == 0)
return;
- (this->*vga_opcode_table[opcode]) ();
+ (this->*_vga_opcode_table[opcode]) ();
}
}
@@ -665,6 +667,7 @@ void SimonEngine::vc10_draw() {
state.palette = (_vcPtr[1] << 4);
_vcPtr += 2;
state.x = (int16)vc_read_next_word();
+
if (_game & GF_SIMON2) {
state.x -= _scrollX;
}