Merged revisions 32744-32745,32747,32750-32759,32762-32764,32769,32777,32783,32785-32786,32789-32791,32798-32799,32801-32807,32809-32812,32816-32817,32819-32821,32823-32830,32832-32836,32838-32844,32846-32850,32852-32854,32858-32859,32865-32868,32873-32874,32879,32883,32895,32899,32902-32904,32910-32912,32923-32924,32930-32931,32938,32940,32948-32949,32951,32960-32964,32966-32970,32972-32974,32976,32978,32983,32986-32990,32992,32994,33002-33004,33006-33007,33009-33010,33014,33017,33021-33023,33030,33033 via svnmerge from

https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk

svn-id: r33051
This commit is contained in:
Christopher Page 2008-07-14 00:10:09 +00:00
commit d2e8d4831e
197 changed files with 6324 additions and 4365 deletions

2
NEWS
View file

@ -10,11 +10,13 @@ For a more comprehensive changelog for the latest experimental SVN code, see:
- Added support for the PC version of Waxworks
- Added support for the Macintosh version of I Have no Mouth, and I
must Scream
- Added support for Drascula: The Vampire Strikes Back
General:
- Added CAMD MIDI driver for AmigaOS4.
- Revived the PS2 port (was already in 0.11.1 but was forgotten in the
release notes).
- Plugged numerous memory leaks in all engines (part of GSoC'08 task)
AGOS:
- Fixed palette issues in Amiga versions of Simon the Sorcerer 1.

View file

@ -16,6 +16,7 @@ LDFLAGS = -Wl,-Ttext,0x8c010000 -nostartfiles $(ronindir)/lib/crt0.o
INCLUDES= -I./ -I$(srcdir) -I$(ronindir)/include/ -I$(srcdir)/engines
LIBS = -L$(ronindir)/lib -lmad -lronin -lz -lm
EXECUTABLE = scummvm.elf
DEPDIR = .deps
PLUGIN_PREFIX =
PLUGIN_SUFFIX = .plg
PLUGIN_EXTRA_DEPS = plugin.x plugin.syms scummvm.elf
@ -32,12 +33,37 @@ ifdef DYNAMIC_MODULES
DEFINES += -DDYNAMIC_MODULES
PRE_OBJS_FLAGS = -Wl,--whole-archive
POST_OBJS_FLAGS = -Wl,--no-whole-archive
ENABLED=DYNAMIC_PLUGIN
else
ENABLED=STATIC_PLUGIN
endif
ENABLE_SCUMM = $(ENABLED)
ENABLE_SCUMM_7_8 = $(ENABLED)
ENABLE_HE = $(ENABLED)
ENABLE_AGI = $(ENABLED)
ENABLE_AGOS = $(ENABLED)
ENABLE_CINE = $(ENABLED)
ENABLE_CRUISE = $(ENABLED)
ENABLE_DRASCULA = $(ENABLED)
ENABLE_GOB = $(ENABLED)
ENABLE_IGOR = $(ENABLED)
ENABLE_KYRA = $(ENABLED)
ENABLE_LURE = $(ENABLED)
ENABLE_M4 = $(ENABLED)
ENABLE_MADE = $(ENABLED)
ENABLE_PARALLACTION = $(ENABLED)
ENABLE_QUEEN = $(ENABLED)
ENABLE_SAGA = $(ENABLED)
ENABLE_SKY = $(ENABLED)
ENABLE_SWORD1 = $(ENABLED)
ENABLE_SWORD2 = $(ENABLED)
ENABLE_TOUCHE = $(ENABLED)
OBJS := dcmain.o time.o display.o audio.o input.o selector.o icon.o \
label.o vmsave.o softkbd.o dcloader.o cache.o dc-fs.o
MODULE_DIRS += .
MODULE_DIRS += ./
include $(srcdir)/Makefile.common

View file

@ -25,17 +25,18 @@
#include <common/scummsys.h>
#include "engines/engine.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
#include "dc.h"
EXTERN_C void *memcpy4s(void *s1, const void *s2, unsigned int n);
void initSound()
uint OSystem_Dreamcast::initSound()
{
stop_sound();
do_sound_command(CMD_SET_FREQ_EXP(FREQ_22050_EXP));
do_sound_command(CMD_SET_STEREO(1));
do_sound_command(CMD_SET_BUFFER(SOUND_BUFFER_SHIFT));
return read_sound_int(&SOUNDSTATUS->freq);
}
void OSystem_Dreamcast::checkSound()
@ -61,7 +62,7 @@ void OSystem_Dreamcast::checkSound()
if (n<100)
return;
Audio::Mixer::mixCallback(_mixer, (byte*)temp_sound_buffer,
_mixer->mixCallback((byte*)temp_sound_buffer,
2*SAMPLES_TO_BYTES(n));
if (fillpos+n > curr_ring_buffer_samples) {
@ -77,8 +78,4 @@ void OSystem_Dreamcast::checkSound()
fillpos = 0;
}
int OSystem_Dreamcast::getOutputSampleRate() const
{
return read_sound_int(&SOUNDSTATUS->freq);
}

View file

@ -28,6 +28,7 @@
#include <ronin/soundcommon.h>
#include "backends/timer/default/default-timer.h"
#include "backends/fs/fs-factory.h"
#include "sound/mixer_intern.h"
#define NUM_BUFFERS 4
#define SOUND_BUFFER_SHIFT 3
@ -195,7 +196,7 @@ class OSystem_Dreamcast : public OSystem, public FilesystemFactory {
private:
Common::SaveFileManager *_savefile;
Audio::Mixer *_mixer;
Audio::MixerImpl *_mixer;
DefaultTimerManager *_timer;
SoftKeyboard _softkbd;
@ -223,6 +224,7 @@ class OSystem_Dreamcast : public OSystem, public FilesystemFactory {
int temp_sound_buffer[RING_BUFFER_SAMPLES>>SOUND_BUFFER_SHIFT];
uint initSound();
void checkSound();
void drawMouse(int xdraw, int ydraw, int w, int h,
@ -237,6 +239,5 @@ class OSystem_Dreamcast : public OSystem, public FilesystemFactory {
extern int handleInput(struct mapledev *pad,
int &mouse_x, int &mouse_y,
byte &shiftFlags, Interactive *inter = NULL);
extern void initSound();
extern bool selectGame(char *&, char *&, class Icon &);

View file

@ -33,7 +33,7 @@
#include <common/config-manager.h>
#include "backends/plugins/dc/dc-provider.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
Icon icon;
@ -54,8 +54,10 @@ OSystem_Dreamcast::OSystem_Dreamcast()
void OSystem_Dreamcast::initBackend()
{
_savefile = createSavefileManager();
_mixer = new Audio::Mixer();
_mixer = new Audio::MixerImpl(this);
_timer = new DefaultTimerManager();
_mixer->setOutputRate(initSound());
_mixer->setReady(true);
}
@ -216,7 +218,6 @@ int main()
static int argc = 1;
dc_init_hardware();
initSound();
g_system = new OSystem_Dreamcast();
assert(g_system);

View file

@ -25,7 +25,9 @@
#include <common/scummsys.h>
#include <engines/engine.h>
#include <engines/metaengine.h>
#include <base/plugins.h>
#include <base/game.h>
#include <common/fs.h>
#include <common/events.h>
#include "dc.h"
@ -149,15 +151,6 @@ struct Dir
static Game the_game;
static void detectGames(FSList &files, GameList &candidates)
{
const EnginePluginList &plugins = EngineMan.getPlugins();
EnginePluginList::const_iterator iter = plugins.begin();
for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
candidates.push_back((*iter)->detectGames(files));
}
}
static bool isIcon(const FilesystemNode &entry)
{
int l = entry.getDisplayName().size();
@ -227,8 +220,7 @@ static int findGames(Game *games, int max)
files.push_back(*entry);
}
GameList candidates;
detectGames(files, candidates);
GameList candidates = EngineMan.detectGames(files);
for (GameList::const_iterator ge = candidates.begin();
ge != candidates.end(); ++ge)

View file

@ -168,7 +168,7 @@ bool displayModeIs8Bit = false;
u8 gameID;
bool snapToBorder = false;
bool consoleEnable = false;
bool consoleEnable = true;
bool gameScreenSwap = false;
bool isCpuScalerEnabled();
//#define HEAVY_LOGGING
@ -899,12 +899,6 @@ u16* get8BitBackBuffer() {
return BG_GFX + 0x10000; // 16bit qty!
}
void setSoundProc(OSystem_DS::SoundProc proc, void* param) {
// consolePrintf("Set sound callback");
soundCallback = proc;
soundParam = param;
}
// The sound system in ScummVM seems to always return stereo interleaved samples.
// Here, I'm treating an 11Khz stereo stream as a 22Khz mono stream, which works sorta ok, but is
// a horrible bodge. Any advice on how to change the engine to output mono would be greatly
@ -914,7 +908,8 @@ void doSoundCallback() {
consolePrintf("doSoundCallback...");
#endif
if (soundCallback) {
if (OSystem_DS::instance())
if (OSystem_DS::instance()->getMixerImpl()) {
lastCallbackFrame = frameCount;
for (int r = IPC->playingSection; r < IPC->playingSection + 4; r++) {
@ -923,7 +918,7 @@ void doSoundCallback() {
if (IPC->fillNeeded[chunk]) {
IPC->fillNeeded[chunk] = false;
DC_FlushAll();
soundCallback(soundParam, (byte *) (soundBuffer + ((bufferSamples >> 2) * chunk)), bufferSamples >> 1);
OSystem_DS::instance()->getMixerImpl()->mixCallback((byte *) (soundBuffer + ((bufferSamples >> 2) * chunk)), bufferSamples >> 1);
IPC->fillNeeded[chunk] = false;
DC_FlushAll();
}

View file

@ -88,7 +88,6 @@ int getMillis(); // Return the current runtime in milliseconds
void doTimerCallback(); // Call callback function if required
// Sound
void setSoundProc(OSystem_DS::SoundProc proc, void* param); // Setup a callback function for sound
void doSoundCallback(); // Call function if sound buffers need more data
void playSound(const void* data, u32 length, bool loop, bool adpcm = false, int rate = 22050); // Start a sound
void stopSound(int channel);

View file

@ -67,11 +67,13 @@ void OSystem_DS::initBackend() {
ConfMan.setInt("autosave_period", 0);
ConfMan.setBool("FM_medium_quality", true);
_mixer = new DSAudioMixer;
_timer = new DSTimerManager;
DS::setSoundProc(Audio::Mixer::mixCallback, _mixer);
_mixer = new DSAudioMixer(this);
_timer = new DSTimerManager();
DS::setTimerCallback(&OSystem_DS::timerHandler, 10);
_mixer->setOutputRate(11025 /*DS::getSoundFrequency()*/);
_mixer->setReady(true);
OSystem::initBackend();
}
@ -139,7 +141,7 @@ void OSystem_DS::setPalette(const byte *colors, uint start, uint num) {
green >>= 3;
blue >>= 3;
// if (r != 255)
if (r != 255)
{
BG_PALETTE[r] = red | (green << 5) | (blue << 10);
if (!DS::getKeyboardEnable()) {
@ -158,13 +160,13 @@ bool OSystem_DS::grabRawScreen(Graphics::Surface* surf) {
// Ensure we copy using 16 bit quantities due to limitation of VRAM addressing
u16* image = (u16 *) DS::get8BitBackBuffer();
const u16* image = (const u16 *) DS::get8BitBackBuffer();
for (int y = 0; y < DS::getGameHeight(); y++)
{
DC_FlushRange(image + (y << 8), DS::getGameWidth());
for (int x = 0; x < DS::getGameWidth() >> 1; x++)
{
*(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[y << 8 + x];
*(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[(y << 8) + x];
}
}
@ -277,7 +279,7 @@ void OSystem_DS::grabOverlay (OverlayColor *buf, int pitch) {
void OSystem_DS::copyRectToOverlay (const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
u16* bg = (u16 *) DS::get16BitBackBuffer();
u16* src = (u16 *) buf;
const u16* src = (const u16 *) buf;
// if (x + w > 256) w = 256 - x;
//if (x + h > 256) h = 256 - y;
@ -433,13 +435,7 @@ void OSystem_DS::unlockMutex(MutexRef mutex) {
void OSystem_DS::deleteMutex(MutexRef mutex) {
}
void OSystem_DS::clearSoundCallback() {
// consolePrintf("Clearing sound callback");
// DS::setSoundProc(NULL, NULL);
}
int OSystem_DS::getOutputSampleRate() const
{
int OSystem_DS::getOutputSampleRate() const {
return DS::getSoundFrequency();
}

View file

@ -30,10 +30,13 @@
#include "gbampsave.h"
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
#include "graphics/surface.h"
class DSAudioMixer : public Audio::Mixer {
class DSAudioMixer : public Audio::MixerImpl {
public:
DSAudioMixer(OSystem* system) : Audio::MixerImpl(system) { }
};
class DSTimerManager : public DefaultTimerManager {
@ -62,7 +65,7 @@ protected:
Graphics::Surface* createTempFrameBuffer();
public:
typedef void (*SoundProc)(void *param, byte *buf, int len);
typedef void (*SoundProc)(byte *buf, int len);
typedef int (*TimerProc)(int interval);
OSystem_DS();
@ -114,7 +117,6 @@ public:
virtual void unlockMutex(MutexRef mutex);
virtual void deleteMutex(MutexRef mutex);
virtual void clearSoundCallback();
virtual int getOutputSampleRate() const;
virtual bool openCD(int drive);
@ -147,6 +149,8 @@ public:
virtual void unlockScreen();
virtual Audio::Mixer* getMixer() { return _mixer; }
Audio::MixerImpl* getMixerImpl() { return _mixer; }
virtual Common::TimerManager* getTimerManager() { return _timer; }
static int timerHandler(int t);

View file

@ -1,6 +1,6 @@
#include "wordcompletion.h"
#include "engines/agi/agi.h"
#include "osystem_ds.h"
#include "engines/agi/agi.h" // Caution for #define for NUM_CHANNELS, causes problems in mixer_intern.h
#ifdef ENABLE_AGI

View file

@ -1,4 +1,4 @@
ScummVM - GP2X SPECIFIC README - 0.10.0 SVN
ScummVM - GP2X SPECIFIC README - HEAD SVN
------------------------------------------------------------------------
Contents:

View file

@ -2,12 +2,15 @@
<html>
<head>
<title>ScummVM - GP2X SPECIFIC README</title>
</head>
<body>
<span style="font-weight: bold;">ScummVM - GP2X&nbsp;SPECIFIC README - 0.10.0 SVN<br>
<span style="font-weight: bold;">ScummVM -
GP2X&nbsp;SPECIFIC README - HEAD SVN<br>
</span>
<hr style="width: 100%; height: 2px;"><br>
@ -16,52 +19,65 @@
<ul>
<li><a href="#About_the_backendport">About the backend/port</a></li>
<li><a href="#About_the_backendport">About the
backend/port</a></li>
<li><a href="#Game_compatibility">Game compatability</a></li>
<li><a href="#Game_compatibility">Game
compatability</a></li>
<li><a href="#Included_engines">Included engines</a></li>
<li><a href="#Supported_audio_options">Supported audio options</a></li>
<li><a href="#Supported_audio_options">Supported
audio options</a></li>
<li><a href="#Supported_cut-scene_options">Supported cut-scene options</a></li>
<li><a href="#Supported_cut-scene_options">Supported
cut-scene options</a></li>
<li><a href="#Recent_changes">Recent changes</a></li>
<li><a href="#How_to_save">How to save</a></li>
<li><a href="#Controller_mappings">Controller mappings</a></li>
<li><a href="#Controller_mappings">Controller
mappings</a></li>
<li><a href="#Know_issues">Know issues</a></li>
<li><a href="#Major_TODOs">Major TODO's</a></li>
<li><a href="#Additional_resourceslinks">Additional resources/links</a></li>
<li><a href="#Additional_resourceslinks">Additional
resources/links</a></li>
<li><a href="#Credits">Credits</a></li>
</ul>
<br>
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="About_the_backendport"></a><span style="font-weight: bold;">About the backend/port</span><br>
<br>
This is the readme for the offficial GP2X ScummVM backend (also known as the GP2X port).<br>
This is the readme for the offficial GP2X ScummVM backend (also known
as the GP2X port).<br>
<br>
This is an SVN test release of ScummVM for the GP2X, it would be appreciated
This is an SVN test release of ScummVM for the GP2X, it would be
appreciated
if this SVN test distribution was not mirrored and that people be
directed to <a href="http://www.distant-earth.com/scummvm">http://www.distant-earth.com/scummvm</a> instead for updated SVN builds.<br>
directed to <a href="http://www.distant-earth.com/scummvm">http://www.distant-earth.com/scummvm</a>
instead for updated SVN builds.<br>
<br>
Full supported official releases of the GP2X ScummVM backend are made
in line with main official releases and are avalalble from the <a href="http://www.scummvm.org/downloads.php">ScummVM downloads page</a>.<br>
in line with main official releases and are avalalble from the <a href="http://www.scummvm.org/downloads.php">ScummVM
downloads page</a>.<br>
<br>
This build is in an active state of development and as such no &lsquo;expected&rsquo; behavior can be guaranteed ;).<br>
This build is in an active state of development and as such no
&lsquo;expected&rsquo; behavior can be guaranteed ;).<br>
<br>
@ -69,47 +85,59 @@ SVN builds are quickly tested with firmware 2.0.0 for reference.<br>
<br>
Please refer to the <a href="http://forums.scummvm.org/viewforum.php?f=14">GP2X ScummVM forum</a> and <a href="http://wiki.scummvm.org/index.php/GP2X">WiKi</a> for the latest information on the port.<br>
Please refer to the <a href="http://forums.scummvm.org/viewforum.php?f=14">GP2X
ScummVM forum</a> and <a href="http://wiki.scummvm.org/index.php/GP2X">WiKi</a>
for the latest information on the port.<br>
<br>
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Game_compatibility"></a><span style="font-weight: bold;">Game compatibility</span><br>
<br>
For information on the compatability of a specific game please refer to the <a href="http://wiki.scummvm.org/index.php/GP2X#Compatibility_List">GP2X compatability section of the ScummVM WiKi</a>.<br>
For information on the compatability of a specific game please refer to
the <a href="http://wiki.scummvm.org/index.php/GP2X#Compatibility_List">GP2X
compatability section of the ScummVM WiKi</a>.<br>
<br>
Please note the version and date of the ScummVM build you are running when reviewing the above list.<br>
Please note the version and date of the ScummVM build you are running
when reviewing the above list.<br>
<br>
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Included_engines"></a><span style="font-weight: bold;">Included engines</span><br>
<br>
Just because an engine is included does not mean any/all of its games
are supported. Please check game compatability for more infomation.<br>
<ul>
<li>
Scumm - (All games supported by ScummVM should work to some extent, using the hardware scalar if needed)</li>
<li>Scumm - (All games supported by ScummVM should work to some
extent, using the hardware scalar if needed)</li>
<li>AGOS (AKA Simon) - (Simon the Sorcerer one and two).</li>
<li>Sky - (Beneath a Steel Sky)</li>
<li>
Sword - (Broken Sword 1) - This engine uses the hardware scalar to
<li>Sword - (Broken Sword 1) - This engine uses the hardware
scalar to
downsize the graphics to fix on the GP2X. It is NOT very nice to look
at.</li>
<li>
Sword2 - (Broken Sword 2) - This engine uses the hardware
<li>Sword2 - (Broken Sword 2) - This engine uses the hardware
scalar to downsize the graphics to fix on the GP2X. It is NOT very nice
to look at.</li>
<li>
Gob - (Goblins one)</li>
<li>
Queen - (Flight of the Amazon Queen)</li>
<li>
Kyra - (The Legend of Kyrandia)</li>
</ul>
<li>Gob - (Goblins one)</li>
<li>Queen - (Flight of the Amazon Queen)</li>
<li>Kyra - (The Legend of Kyrandia)</li>
</ul>
All other game engines are disabled in this release.<br>
@ -155,13 +183,18 @@ DXA video support will be added as soon as it is stable.<br>
Enabled hardware scalar code.<br>
Now built using SDL 1.2.9 for the parts of the port that use SDL (some parts now hit the hardware directly).<br>
Now built using SDL 1.2.9 for the parts of the port that use SDL (some
parts now hit the hardware directly).<br>
Enabled new launcher - (Ensure defaulttheme.zip is in the same folder as the executable).<br>
Enabled new launcher - (Ensure defaulttheme.zip is in the same folder
as the executable).<br>
Aspect Ratio Correction can now be disabled &lsquo;per game&rsquo;. When adding a game you can find this option on the GFX tab. <br>
Aspect Ratio Correction can now be disabled &lsquo;per
game&rsquo;. When adding a game you can find this option on the GFX
tab. <br>
Note: This will cause the game to run with a black border at the bottom as it will be rendered to a 320*200 frame.<br>
Note: This will cause the game to run with a black border at the bottom
as it will be rendered to a 320*200 frame.<br>
<br>
@ -169,7 +202,9 @@ Note: This will cause the game to run with a black border at the bottom as it wi
<br>
<span style="font-weight: bold;">NOTE:</span> Everything is saved to the SD card, saves are stored in the <span style="font-weight: bold;">saves</span> folder under your main ScummVM executable unless you set another save location.<br>
<span style="font-weight: bold;">NOTE:</span>
Everything is saved to the SD card, saves are stored in the <span style="font-weight: bold;">saves</span> folder under
your main ScummVM executable unless you set another save location.<br>
<br>
@ -178,7 +213,8 @@ same place as the ScummVM executable.<br>
<br>
The save process below is&nbsp;for Scumm engine games but the principle is the same for all.<br>
The save process below is&nbsp;for Scumm engine games but the
principle is the same for all.<br>
<br>
@ -198,11 +234,13 @@ In Game.<br>
<br>
Basically the emulated keys you can use are equivelent to the values buttons are mapped to, <br>
Basically the emulated keys you can use are equivelent to the values
buttons are mapped to, <br>
<br>
I have a virtual keyboard like the GP32 one (left/right on the stick to pick chars) to add in at some point ;-)<br>
I have a virtual keyboard like the GP32 one (left/right on the stick to
pick chars) to add in at some point ;-)<br>
<br>
@ -262,9 +300,11 @@ Select: Exit ScummVM completely (and gracefully)<br>
<br>
Possible random crash (well SegFault). I have had this happen twice and have not tracked down the cause. <br>
Possible random crash (well SegFault). I have had this happen twice and
have not tracked down the cause. <br>
It happens very infrequently, both times it was in the DOTT CD intro. Saving often is never a bad idea anyhow.<br>
It happens very infrequently, both times it was in the DOTT CD intro.
Saving often is never a bad idea anyhow.<br>
<br>
@ -272,11 +312,14 @@ It happens very infrequently, both times it was in the DOTT CD intro. Saving oft
<br>
Fix save support when using the Sky engine (Beneath a Steel Sky) - You CAN'T save at the moment but auto save works.<br>
Fix save support when using the Sky engine (Beneath a Steel Sky) - You
CAN'T save at the moment but auto save works.<br>
Look into inconsistencies with AGOS engine and map Y key to a button combination to allow clean quitting (Simon 1/2).<br>
Look into inconsistencies with AGOS engine and map Y key to a button
combination to allow clean quitting (Simon 1/2).<br>
Add splash-screen and pre-ScummVM config menu (CPU speed, LCD timings etc.) - Partly done.<br>
Add splash-screen and pre-ScummVM config menu (CPU speed, LCD timings
etc.) - Partly done.<br>
Fix TV out, maybe make it an option in the pre-ScummVM config menu.<br>
@ -284,17 +327,29 @@ Any help appreciated :).<br>
<br style="font-weight: bold;">
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Additional_resourceslinks"></a><span style="font-weight: bold;">Additional resources/links</span><br>
<hr style="width: 100%; height: 2px;"><a style="font-weight: bold;" name="Additional_resourceslinks"></a><span style="font-weight: bold;">Additional resources/links<br>
<br>
</span><span style="font-weight: bold;">Note:</span>
When providing feedback,
requests, forum posts, bug reports or anything like that always include
a mention of the version of ScummVM you are using (the build version,
date and time can be seen in the main game launcher window).<br>
<ul>
<li><a href="http://wiki.scummvm.org/index.php/GP2X">ScummVM WiKi GP2X page</a></li>
<li><a href="http://wiki.scummvm.org/index.php/GP2X">ScummVM
WiKi GP2X page</a></li>
<li><a href="http://forums.scummvm.org/viewforum.php?f=14">ScummVM forums GP2X forum</a></li>
<li><a href="http://forums.scummvm.org/viewforum.php?f=14">ScummVM
forums GP2X forum</a></li>
<li><a href="http://www.distant-earth.com/scummvm">My own ScummVM page</a> (for SVN/test builds)</li>
<li><a href="http://www.distant-earth.com/scummvm">My
own ScummVM page</a> (for SVN/test builds)</li>
<li><a href="http://www.scummvm.org">Main ScummVM site</a> (for official supported release builds)</li>
<li><a href="http://www.scummvm.org">Main ScummVM
site</a> (for official supported release builds)</li>
</ul>

0
backends/platform/gp2x/build/build.sh Normal file → Executable file
View file

0
backends/platform/gp2x/build/bundle.sh Normal file → Executable file
View file

0
backends/platform/gp2x/build/clean.sh Normal file → Executable file
View file

4
backends/platform/gp2x/build/config.sh Normal file → Executable file
View file

@ -17,7 +17,7 @@ export DEFINES=-DNDEBUG
# Edit the configure line to suit.
cd ../../../..
./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6
#--enable-plugins
./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-made --enable-m4
#--enable-plugins --default-dynamic
echo Generating config for GP2X complete. Check for errors.

0
backends/platform/gp2x/build/scummvm.gpe Normal file → Executable file
View file

View file

@ -37,7 +37,7 @@
#include <SDL_gp2x.h>
namespace Audio {
class Mixer;
class MixerImpl;
}
namespace Common {
@ -128,12 +128,10 @@ public:
virtual bool pollEvent(Common::Event &event); // overloaded by CE backend
// Set function that generates samples
typedef void (*SoundProc)(void *param, byte *buf, int len);
virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend
void setupMixer();
static void mixCallback(void *s, byte *samples, int len);
virtual Audio::Mixer *getMixer();
void clearSoundCallback();
// Poll CD status
// Returns true if cd audio is playing
bool pollCD();
@ -181,7 +179,6 @@ public:
int getGraphicsMode() const;
bool openCD(int drive);
int getOutputSampleRate() const;
bool hasFeature(Feature f);
void setFeatureState(Feature f, bool enable);
@ -369,7 +366,7 @@ protected:
Common::SaveFileManager *_savefile;
FilesystemFactory *getFilesystemFactory();
Audio::Mixer *_mixer;
Audio::MixerImpl *_mixer;
SDL_TimerID _timerID;
Common::TimerManager *_timer;

View file

@ -40,7 +40,7 @@
#include "backends/timer/default/default-timer.h"
#include "backends/plugins/posix/posix-provider.h"
#include "backends/fs/posix/posix-fs-factory.h" // for getFilesystemFactory()
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
#include <stdio.h>
#include <stdlib.h>
@ -225,8 +225,7 @@ void OSystem_GP2X::initBackend() {
// Create and hook up the mixer, if none exists yet (we check for this to
// allow subclasses to provide their own).
if (_mixer == 0) {
_mixer = new Audio::Mixer();
setSoundCallback(Audio::Mixer::mixCallback, _mixer);
setupMixer();
}
// Create and hook up the timer manager, if none exists yet (we check for
@ -445,45 +444,69 @@ void OSystem_GP2X::deleteMutex(MutexRef mutex) {
#pragma mark --- Audio ---
#pragma mark -
bool OSystem_GP2X::setSoundCallback(SoundProc proc, void *param) {
void OSystem_GP2X::mixCallback(void *sys, byte *samples, int len) {
OSystem_GP2X *this_ = (OSystem_GP2X *)sys;
assert(this_);
if (this_->_mixer)
this_->_mixer->mixCallback(samples, len);
}
void OSystem_GP2X::setupMixer() {
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
memset(&desired, 0, sizeof(desired));
//memset(&desired, 0, sizeof(desired));
// Determine the desired output sampling frequency.
_samplesPerSec = 0;
if (ConfMan.hasKey("output_rate"))
_samplesPerSec = ConfMan.getInt("output_rate");
if (_samplesPerSec <= 0)
_samplesPerSec = SAMPLES_PER_SEC;
//Quick EVIL Hack - DJWillis
_samplesPerSec = 11025;
// Determine the sample buffer size. We want it to store enough data for
// about 1/16th of a second. Note that it must be a power of two.
// So e.g. at 22050 Hz, we request a sample buffer size of 2048.
int samples = 8192;
while (16 * samples >= _samplesPerSec) {
samples >>= 1;
}
memset(&desired, 0, sizeof(desired));
desired.freq = _samplesPerSec;
desired.format = AUDIO_S16SYS;
desired.channels = 2;
//desired.samples = (uint16)samples;
desired.samples = 128; // Samples hack
desired.callback = proc;
desired.userdata = param;
desired.callback = mixCallback;
desired.userdata = this;
// Create the mixer instance
assert(!_mixer);
_mixer = new Audio::MixerImpl(this);
assert(_mixer);
if (SDL_OpenAudio(&desired, &obtained) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
return false;
}
_samplesPerSec = 0;
_mixer->setReady(false);
} else {
// Note: This should be the obtained output rate, but it seems that at
// least on some platforms SDL will lie and claim it did get the rate
// even if it didn't. Probably only happens for "weird" rates, though.
_samplesPerSec = obtained.freq;
debug(1, "Output sample rate: %d Hz", _samplesPerSec);
// Tell the mixer that we are ready and start the sound processing
_mixer->setOutputRate(_samplesPerSec);
_mixer->setReady(true);
SDL_PauseAudio(0);
return true;
}
void OSystem_GP2X::clearSoundCallback() {
SDL_CloseAudio();
}
int OSystem_GP2X::getOutputSampleRate() const {
return _samplesPerSec;
}
Audio::Mixer *OSystem_GP2X::getMixer() {

View file

@ -1128,10 +1128,6 @@ bool OSystem_IPHONE::setSoundCallback(SoundProc proc, void *param) {
return true;
}
void OSystem_IPHONE::clearSoundCallback() {
debug("clearSoundCallback()\n");
}
int OSystem_IPHONE::getOutputSampleRate() const {
return AUDIO_SAMPLE_RATE;
}

View file

@ -153,7 +153,6 @@ public:
virtual void deleteMutex(MutexRef mutex);
virtual bool setSoundCallback(SoundProc proc, void *param);
virtual void clearSoundCallback();
virtual int getOutputSampleRate() const;
virtual void setTimerCallback(TimerProc callback, int interval);

View file

@ -28,18 +28,37 @@
#if defined(USE_NULL_DRIVER)
#ifdef UNIX
#include <unistd.h>
#include <sys/time.h>
#endif
#include "common/rect.h"
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
/*
* Include header files needed for the getFilesystemFactory() method.
*/
#if defined(__amigaos4__)
#include "backends/fs/amigaos4/amigaos4-fs-factory.h"
#elif defined(UNIX)
#include "backends/fs/posix/posix-fs-factory.h"
#elif defined(WIN32)
#include "backends/fs/windows/windows-fs-factory.h"
#endif
class OSystem_NULL : public OSystem {
protected:
Common::SaveFileManager *_savefile;
Audio::Mixer *_mixer;
Audio::MixerImpl *_mixer;
Common::TimerManager *_timer;
timeval _startTime;
public:
OSystem_NULL();
@ -93,8 +112,6 @@ public:
typedef void (*SoundProc)(void *param, byte *buf, int len);
virtual bool setSoundCallback(SoundProc proc, void *param);
virtual void clearSoundCallback();
virtual int getOutputSampleRate() const;
virtual void quit();
@ -104,6 +121,8 @@ public:
virtual Audio::Mixer *getMixer();
virtual void getTimeAndDate(struct tm &t) const;
virtual Common::TimerManager *getTimerManager();
FilesystemFactory *getFilesystemFactory();
};
static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
@ -124,9 +143,14 @@ OSystem_NULL::~OSystem_NULL() {
void OSystem_NULL::initBackend() {
_savefile = new DefaultSaveFileManager();
_mixer = new Audio::Mixer();
_mixer = new Audio::MixerImpl(this);
_timer = new DefaultTimerManager();
_mixer->setOutputRate(22050);
_mixer->setReady(false);
gettimeofday(&_startTime, NULL);
// Note that both the mixer and the timer manager are useless
// this way; they need to be hooked into the system somehow to
// be functional. Of course, can't do that in a NULL backend :).
@ -245,10 +269,20 @@ bool OSystem_NULL::pollEvent(Common::Event &event) {
}
uint32 OSystem_NULL::getMillis() {
#ifdef UNIX
timeval curTime;
gettimeofday(&curTime, NULL);
return (uint32)(((curTime.tv_sec - _startTime.tv_sec) * 1000) + \
((curTime.tv_usec - _startTime.tv_usec) / 1000));
#else
return 0;
#endif
}
void OSystem_NULL::delayMillis(uint msecs) {
#ifdef UNIX
usleep(msecs * 1000);
#endif
}
OSystem::MutexRef OSystem_NULL::createMutex(void) {
@ -268,13 +302,6 @@ bool OSystem_NULL::setSoundCallback(SoundProc proc, void *param) {
return true;
}
void OSystem_NULL::clearSoundCallback() {
}
int OSystem_NULL::getOutputSampleRate() const {
return 22050;
}
void OSystem_NULL::quit() {
}
@ -299,6 +326,19 @@ Common::TimerManager *OSystem_NULL::getTimerManager() {
void OSystem_NULL::getTimeAndDate(struct tm &t) const {
}
FilesystemFactory *OSystem_NULL::getFilesystemFactory() {
#if defined(__amigaos4__)
return &AmigaOSFilesystemFactory::instance();
#elif defined(UNIX)
return &POSIXFilesystemFactory::instance();
#elif defined(WIN32)
return &WindowsFilesystemFactory::instance();
#else
#error Unknown and unsupported backend in OSystem_NULL::getFilesystemFactory
#endif
}
OSystem *OSystem_NULL_create() {
return new OSystem_NULL();
}

View file

@ -727,7 +727,6 @@ void OSystem_PS2::quit(void) {
driveStandby();
fio.umount("pfs0:");
}
//clearSoundCallback();
//setTimerCallback(NULL, 0);
_screen->wantAnim(false);
_systemQuit = true;

View file

@ -2,10 +2,36 @@
# $URL$
# $Id$
ENABLED=STATIC_PLUGIN
#control build
DISABLE_SCALERS = true
DISABLE_HQ_SCALERS = true
ENABLE_SCUMM = $(ENABLED)
ENABLE_SCUMM_7_8 = $(ENABLED)
#ENABLE_HE = $(ENABLED)
ENABLE_AGI = $(ENABLED)
ENABLE_AGOS = $(ENABLED)
#ENABLE_CINE = $(ENABLED)
#ENABLE_CRUISE = $(ENABLED)
ENABLE_DRASCULA = $(ENABLED)
ENABLE_GOB = $(ENABLED)
#ENABLE_IGOR = $(ENABLED)
ENABLE_KYRA = $(ENABLED)
ENABLE_LURE = $(ENABLED)
#ENABLE_M4 = $(ENABLED)
#ENABLE_MADE = $(ENABLED)
#ENABLE_PARALLACTION = $(ENABLED)
#ENABLE_QUEEN = $(ENABLED)
#ENABLE_SAGA = $(ENABLED)
ENABLE_SKY = $(ENABLED)
ENABLE_SWORD1 = $(ENABLED)
ENABLE_SWORD2 = $(ENABLED)
#ENABLE_TINSEL = $(ENABLED)
#ENABLE_TOUCHE = $(ENABLED)
srcdir = ../../..
VPATH = $(srcdir)
HAVE_GCC3 = false
@ -63,6 +89,8 @@ OBJS := psp_main.o \
kbd_l_c.o \
trace.o
DEPDIR = .deps
include $(srcdir)/Makefile.common
PSP_EBOOT_SFO = param.sfo

View file

@ -34,7 +34,7 @@
#include "backends/timer/default/default-timer.h"
#include "graphics/surface.h"
#include "graphics/scaler.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
#include <pspgu.h>
@ -72,7 +72,7 @@ const OSystem::GraphicsMode OSystem_PSP::s_supportedGraphicsModes[] = {
};
OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0) {
OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0), _mixer(0) {
memset(_palette, 0, sizeof(_palette));
@ -99,11 +99,11 @@ OSystem_PSP::~OSystem_PSP() {
void OSystem_PSP::initBackend() {
_savefile = new DefaultSaveFileManager();
_mixer = new Audio::Mixer();
_timer = new DefaultTimerManager();
setSoundCallback(Audio::Mixer::mixCallback, _mixer);
setTimerCallback(&timer_handler, 10);
setupMixer();
OSystem::initBackend();
}
@ -586,7 +586,15 @@ void OSystem_PSP::deleteMutex(MutexRef mutex) {
SDL_DestroyMutex((SDL_mutex *)mutex);
}
bool OSystem_PSP::setSoundCallback(SoundProc proc, void *param) {
void OSystem_PSP::mixCallback(void *sys, byte *samples, int len) {
OSystem_PSP *this_ = (OSystem_PSP *)sys;
assert(this_);
if (this_->_mixer)
this_->_mixer->mixCallback(samples, len);
}
void OSystem_PSP::setupMixer(void) {
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
@ -613,29 +621,33 @@ bool OSystem_PSP::setSoundCallback(SoundProc proc, void *param) {
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = samples;
desired.callback = proc;
desired.userdata = param;
desired.callback = mixCallback;
desired.userdata = this;
assert(!_mixer);
_mixer = new Audio::MixerImpl(this);
assert(_mixer);
if (SDL_OpenAudio(&desired, &obtained) != 0) {
return false;
}
warning("Could not open audio: %s", SDL_GetError());
_samplesPerSec = 0;
_mixer->setReady(false);
} else {
// Note: This should be the obtained output rate, but it seems that at
// least on some platforms SDL will lie and claim it did get the rate
// even if it didn't. Probably only happens for "weird" rates, though.
_samplesPerSec = obtained.freq;
// Tell the mixer that we are ready and start the sound processing
_mixer->setOutputRate(_samplesPerSec);
_mixer->setReady(true);
SDL_PauseAudio(0);
return true;
}
void OSystem_PSP::clearSoundCallback() {
SDL_CloseAudio();
}
int OSystem_PSP::getOutputSampleRate() const {
return _samplesPerSec;
}
void OSystem_PSP::quit() {
clearSoundCallback();
SDL_CloseAudio();
SDL_Quit();
sceGuTerm();
sceKernelExitGame();

View file

@ -26,6 +26,7 @@
#include "common/scummsys.h"
#include "common/system.h"
#include "graphics/surface.h"
#include "sound/mixer_intern.h"
#include "backends/fs/psp/psp-fs-factory.h"
@ -71,7 +72,7 @@ protected:
SceCtrlData pad;
Common::SaveFileManager *_savefile;
Audio::Mixer *_mixer;
Audio::MixerImpl *_mixer;
Common::TimerManager *_timer;
public:
@ -129,10 +130,8 @@ public:
virtual void unlockMutex(MutexRef mutex);
virtual void deleteMutex(MutexRef mutex);
typedef void (*SoundProc)(void *param, byte *buf, int len);
virtual bool setSoundCallback(SoundProc proc, void *param);
virtual void clearSoundCallback();
virtual int getOutputSampleRate() const;
static void mixCallback(void *sys, byte *samples, int len);
virtual void setupMixer(void);
Common::SaveFileManager *getSavefileManager() { return _savefile; }
Audio::Mixer *getMixer() { return _mixer; }

View file

@ -30,7 +30,7 @@
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
#include "icons/scummvm.xpm"
@ -131,9 +131,7 @@ void OSystem_SDL::initBackend() {
// Create and hook up the mixer, if none exists yet (we check for this to
// allow subclasses to provide their own).
if (_mixer == 0) {
_mixer = new Audio::Mixer();
bool result = setSoundCallback(Audio::Mixer::mixCallback, _mixer);
_mixer->setReady(result);
setupMixer();
}
// Create and hook up the timer manager, if none exists yet (we check for
@ -391,7 +389,15 @@ void OSystem_SDL::deleteMutex(MutexRef mutex) {
#pragma mark --- Audio ---
#pragma mark -
bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) {
void OSystem_SDL::mixCallback(void *sys, byte *samples, int len) {
OSystem_SDL *this_ = (OSystem_SDL *)sys;
assert(this_);
if (this_->_mixer)
this_->_mixer->mixCallback(samples, len);
}
void OSystem_SDL::setupMixer() {
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
@ -403,7 +409,7 @@ bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) {
_samplesPerSec = SAMPLES_PER_SEC;
// Determine the sample buffer size. We want it to store enough data for
// about 1/32th of a second. Note that it must be a power of two.
// about 1/16th of a second. Note that it must be a power of two.
// So e.g. at 22050 Hz, we request a sample buffer size of 2048.
int samples = 8192;
while (16 * samples >= _samplesPerSec) {
@ -415,23 +421,30 @@ bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) {
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = (uint16)samples;
desired.callback = proc;
desired.userdata = param;
desired.callback = mixCallback;
desired.userdata = this;
// Create the mixer instance
assert(!_mixer);
_mixer = new Audio::MixerImpl(this);
assert(_mixer);
if (SDL_OpenAudio(&desired, &obtained) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
return false;
}
_samplesPerSec = 0;
_mixer->setReady(false);
} else {
// Note: This should be the obtained output rate, but it seems that at
// least on some platforms SDL will lie and claim it did get the rate
// even if it didn't. Probably only happens for "weird" rates, though.
_samplesPerSec = obtained.freq;
debug(1, "Output sample rate: %d Hz", _samplesPerSec);
SDL_PauseAudio(0);
return true;
}
int OSystem_SDL::getOutputSampleRate() const {
return _samplesPerSec;
// Tell the mixer that we are ready and start the sound processing
_mixer->setOutputRate(_samplesPerSec);
_mixer->setReady(true);
SDL_PauseAudio(0);
}
}
Audio::Mixer *OSystem_SDL::getMixer() {

View file

@ -38,7 +38,7 @@
namespace Audio {
class Mixer;
class MixerImpl;
}
namespace Common {
@ -134,8 +134,9 @@ public:
virtual bool pollEvent(Common::Event &event); // overloaded by CE backend
// Set function that generates samples
typedef void (*SoundProc)(void *param, byte *buf, int len);
virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend
virtual void setupMixer();
static void mixCallback(void *s, byte *samples, int len);
virtual Audio::Mixer *getMixer();
// Poll CD status
@ -186,7 +187,6 @@ public:
virtual void setWindowCaption(const char *caption);
virtual bool openCD(int drive);
virtual int getOutputSampleRate() const;
virtual bool hasFeature(Feature f);
virtual void setFeatureState(Feature f, bool enable);
@ -371,7 +371,7 @@ protected:
Common::SaveFileManager *_savefile;
Audio::Mixer *_mixer;
Audio::MixerImpl *_mixer;
SDL_TimerID _timerID;
Common::TimerManager *_timer;

View file

@ -6,31 +6,37 @@ chdir("../../../");
# list of project files to process
@mmp_files = (
"mmp/scummvm_scumm.mmp",
"mmp/scummvm_queen.mmp",
"mmp/scummvm_agos.mmp",
"mmp/scummvm_sky.mmp",
"mmp/scummvm_gob.mmp",
"mmp/scummvm_saga.mmp",
"mmp/scummvm_kyra.mmp",
"mmp/scummvm_sword1.mmp",
"mmp/scummvm_sword2.mmp",
"mmp/scummvm_lure.mmp",
"mmp/scummvm_cine.mmp",
# Engine Project files
"mmp/scummvm_agi.mmp",
"mmp/scummvm_touche.mmp",
"mmp/scummvm_parallaction.mmp",
"mmp/scummvm_agos.mmp",
"mmp/scummvm_cine.mmp",
"mmp/scummvm_cruise.mmp",
"mmp/scummvm_drascula.mmp",
"mmp/scummvm_gob.mmp",
"mmp/scummvm_igor.mmp",
"mmp/scummvm_made.mmp",
"mmp/scummvm_kyra.mmp",
"mmp/scummvm_lure.mmp",
"mmp/scummvm_m4.mmp",
"mmp/scummvm_made.mmp",
"mmp/scummvm_parallaction.mmp",
"mmp/scummvm_queen.mmp",
"mmp/scummvm_saga.mmp",
"mmp/scummvm_scumm.mmp",
"mmp/scummvm_sky.mmp",
"mmp/scummvm_sword1.mmp",
"mmp/scummvm_sword2.mmp",
"mmp/scummvm_touche.mmp",
# Target Platform Project Files
"S60/ScummVM_S60.mmp",
"S60v3/ScummVM_S60v3.mmp",
"S80/ScummVM_S80.mmp",
"S90/ScummVM_S90.mmp",
"UIQ2/ScummVM_UIQ2.mmp",
"UIQ3/ScummVM_UIQ3.mmp"
);
# do this first to set all *.mmp & *.inf files to *.*.in states
@ -43,7 +49,7 @@ Updating slave MACRO settings in MMP files from master 'scummvm_base.mmp'
";
# do this first so we have @DisableDefines for correct inclusion of SOURCE files later
# do this first so we have @EnabledDefines and @DisabledDefines for correct inclusion of SOURCE files later
UpdateSlaveMacros();
print "
@ -53,32 +59,39 @@ Preparing to update all the Symbian MMP project files with objects from module.m
";
# some modules.mk files have #ifndef ENABLE_XXXX blocks:
my @section_empty = (""); # section standard: no #ifdef's in module.mk files
my @sections_scumm = ("", "DISABLE_SCUMM_7_8", "DISABLE_HE"); # special sections for engine SCUMM
my @sections_scumm = ("", "ENABLE_SCUMM_7_8", "ENABLE_HE"); # special sections for engine SCUMM
# files excluded from build, case insensitive, will be matched in filename string only
my @excludes_snd = (
"mt32",
"fluidsynth",
"i386",
"part.cpp",
"partial.cpp",
"partialmanager.cpp",
"mt32.*",
"fluidsynth.cpp",
"i386.cpp",
"part.*",
"synth.cpp",
"tables.cpp",
"freeverb.cpp"
"freeverb.cpp",
"rate.*" # not really needed, USE_ARM_SOUND_ASM currently not parsed correctly,
# "rate[_arm|_arm_asm].(cpp|s)" will be added later based on WINS/ARM build!
# These #defines for compile time are set in portdefs.h
);
my @excludes_graphics = (
"iff.cpp"
);
# the USE_ARM_* defines not parsed correctly, exclude manually:
my @excludes_scumm = (
"codec47ARM.cpp",
"gfxARM.cpp",
"proc3arm.cpp"
".*ARM.*", # the *ARM.s files are added in .mpp files based on WINS/ARM build!
# USE_ARM_SMUSH_ASM codec47ARM.s
# USE_ARM_GFX_ASM gfxARM.s
# USE_ARM_COSTUME_ASM proc3ARM.s compiled, linked?, but *not* used :P (portdefs.h)
);
#arseModule(mmpStr, dirStr, ifdefArray, [exclusionsArray])
ParseModule("_base", "base", \@section_empty); # now in ./TRG/ScummVM_TRG.mmp, these never change anyways...
ParseModule("_base", "common", \@section_empty);
@ -156,6 +169,7 @@ sub CheckForModuleMK
if (-f $item and $item =~ /.*\/module.mk$/)
{
my $sec = "";
my $isenable;
my $ObjectsSelected = 0;
my $ObjectsTotal = 0;
@ -170,11 +184,21 @@ sub CheckForModuleMK
A: foreach $line (@lines)
{
# all things we need are inside #ifdef sections,
# there is nothing we need in #ifndef sections: so ignore these for now
# found a section? reset
if ($line =~ /^ifdef (.*)/)
{
$sec = $1;
$isenable = 1;
}
if ($line =~ /^ifndef (.*)/)
{
$sec = $1;
$isenable = 0;
}
# found an object? Not uncommented!
if (!($line =~ /^#/) && $line =~ s/\.o/.cpp/)
{
@ -193,20 +217,40 @@ sub CheckForModuleMK
{
if ($line =~ /$exclusion/i)
{
print "\n ! $line (excluded, \@exclusions[$exclusion])";
my $reason = "excluded, \@exclusions[$exclusion]";
print "\n ! $line ($reason)";
$output .= "//SOURCE $line ($reason)\n";
next A;
}
}
# do we need to skip this file? According to MACROs in .MMPs
foreach $DisableDefine (@DisableDefines)
# do we need to do this file? According to MACROs in .MMPs
my $found = 0;
foreach $EnableDefine (@EnabledDefines)
{
if ($DisableDefine eq $section && $section ne '')
if (($EnableDefine eq $section) && ($section ne ''))
{
print "\n !$line (excluded, MACRO $DisableDefine)";
next A;
$found = 1;
last;
}
}
foreach $DisableDefine (@DisabledDefines)
{
if (($DisableDefine eq $section) && ($section ne ''))
{
$found = 0;
last;
}
}
# always allow non-sections
$found = 1 if ($section eq '');
if (!$found)
{
my $reason = "excluded, MACRO $section";
print "\n !$line ($reason)";
$output .= "//SOURCE $line ($reason)\n";
next A;
}
$ObjectsSelected++;
#print "\n $line";
@ -296,26 +340,39 @@ sub UpdateSlaveMacros
# this macro enabled? then also add the .lib
if ($line =~ /^\s*MACRO\s*$macro/m)
{
# these are the USE_ libs
# add an USE_ lib? (these need to be added @ the beginning, before _base)
$libs_second .= "STATICLIBRARY $lib\n" if ($macro =~ /^USE_/);
}
else
# add an ENABLE_ lib? (these need to be added @ the end, after _base)
if ($macro =~ /^ENABLE_/)
{
# these are the non DISABLED_ libs
$libs_first .= "STATICLIBRARY $lib\n" if ($macro =~ /^DISABLE_/);
$libs_first .= "STATICLIBRARY $lib\n";
# add projects for BLD.INF's
my $projectname = substr("$lib",0,-4);
$projects .= "..\\mmp\\$projectname.mmp\n" if ($macro =~ /^DISABLE_/);
$projects .= "..\\mmp\\$projectname.mmp\n";
}
}
else
{
# skip lines not beginning with "MACRO" (like "//MACRO")
}
$macro_counter++;
}
# not commented out? then add the macro to output string
if ($line =~ /^\s*MACRO\s*([0-9A-Z_]*)\s*/)
{
my $macro = $1;
$macros2 .= "$line\n";
push @DisableDefines, $macro; # used in CheckForModuleMK()!!
if ($macro =~ /^ENABLE_/)
{
push @EnabledDefines, $macro; # used in CheckForModuleMK()!!
}
elsif ($macro =~ /^DISABLE_/)
{
push @DisabledDefines, $macro; # used in CheckForModuleMK()!!
}
}
}

View file

@ -8,6 +8,7 @@ require "BuildPackageUpload_LocalSettings.pl";
##################################################################################################################
# prep some vars
# the dir containing the build files: '.\backends\platforms\symbian\$SDK_BuildDir\'
$SDK_BuildDirs{'UIQ2'} = "UIQ2";
$SDK_BuildDirs{'UIQ3'} = "UIQ3";
$SDK_BuildDirs{'S60v1'} = "S60";
@ -16,6 +17,7 @@ $SDK_BuildDirs{'S60v3'} = "S60v3";
$SDK_BuildDirs{'S80'} = "S80";
$SDK_BuildDirs{'S90'} = "S90";
# the target name inserted here: 'abld BUILD $SDK_TargetName UREL'
$SDK_TargetName{'UIQ2'} = "armi";
$SDK_TargetName{'UIQ3'} = "gcce";
$SDK_TargetName{'S60v1'}= "armi";
@ -24,6 +26,7 @@ $SDK_TargetName{'S60v3'}= "gcce";
$SDK_TargetName{'S80'} = "armi";
$SDK_TargetName{'S90'} = "armi";
# Binaries are installed here: '$SDK_RootDirs\epoc32\release\$SDK_TargetDir\urel\'
$SDK_TargetDir{'UIQ2'} = "armi";
$SDK_TargetDir{'UIQ3'} = "armv5";
$SDK_TargetDir{'S60v1'} = "armi";
@ -34,11 +37,11 @@ $SDK_TargetDir{'S90'} = "armi";
$build_dir = getcwd();
$output_dir = "$build_dir/Packages";
chdir("../../");
chdir("../../../");
$base_dir = getcwd();
chdir($build_dir);
$build_log_out = "$build_dir/Build.out.log";
$build_log_err = "$build_dir/Build.err.log";
$build_log_out = "$build_dir/out.build.out.log"; # don't start these files with "Build"
$build_log_err = "$build_dir/out.build.err.log"; # so "B"+TAB completion works in 1 go :P
$initial_path = $ENV{'PATH'}; # so we can start with a fresh PATH for each Build
@ -54,22 +57,44 @@ $PackagesUploaded = 0;
@ErrorMessages = ();
$ftp_url = "FTP://$FTP_User\@$FTP_Host/$FTP_Dir/";
# these macros are always defined:
$ExtraMacros = "MACRO NONSTANDARD_PORT\n";
$ExtraMacros .= "MACRO DISABLE_FANCY_THEMES\n";
$ExtraMacros .= "MACRO DISABLE_SCALERS\n";
$ExtraMacros .= "MACRO DISABLE_HQ_SCALERS\n";
# prep nice list of SDKs
#while( ($SDK, $RootDir) = each(%SDK_RootDirs) )
foreach $SDK (sort keys(%SDK_RootDirs))
{
# see if it exists!
if (-d $SDK_RootDirs{$SDK})
{
$SDKs .= "$SDK\t$SDK_RootDirs{$SDK}\n\t\t\t";
}
else # missing?
{
$SDKs .= "$SDK\t$SDK_RootDirs{$SDK}\t[MISSING: Skipping!]\n\t\t\t";
# remove it from array, to prevent building!
delete $SDK_RootDirs{$SDK};
}
}
# prep nice list of Libraries
while( ($SDK, $Value) = each(%SDK_LibraryDirs) )
{
while( ($Library, $Path) = each(%{$SDK_LibraryDirs{$SDK}}) )
{
$PresentLibs{$Library} = $Path;
# maybe it's already been built?
if (-e $SDK_RootDirs{$SDK}."\\epoc32\\release\\$SDK_TargetDir{$SDK}\\urel\\$Library")
{
$PresentLibs{$Library} = "$Path [EXISTS: Skipping!]";
delete $SDK_LibraryDirs{$SDK}{$Library};
}
else # make it!
{
$PresentLibs{$Library} = "$Path";
}
}
}
foreach $Library (sort keys(%PresentLibs))
@ -78,10 +103,37 @@ foreach $Library (sort keys(%PresentLibs))
}
# prep nice list of Variations
while( ($SDK, $Value) = each(%SDK_Variations) )
#while( ($SDK, $Value) = each(%SDK_Variations) )
#{
# while( ($Variation, $Value2) = each(%{$SDK_Variations{$SDK}}) )
# {
# $Extra = ($Variation ne '' ? "_$Variation" : "");
# if ($SDK eq "ALL")
# {
# while( ($SDK2, $RootDir) = each(%SDK_RootDirs) )
# {
# if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently)
# {
# push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK2, $Extra);
# $PackagesQueued++;
# }
# }
# }
# else
# {
# if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently)
# {
# push @Packages, sprintf($file_tpl_sis, $version_tpl_sis, $SDK, $Extra);
# $PackagesQueued++;
# }
# }
# }
#}
while( ($SDK, $Value) = each(%VariationSets) )
{
while( ($Variation, $Value2) = each(%{$SDK_Variations{$SDK}}) )
while( ($Variation, $FeaturesBlock) = each(%{$VariationSets{$SDK}}) )
{
#my $MacroBlock = &MakeMppMacroDefs($FeaturesBlock);
$Extra = ($Variation ne '' ? "_$Variation" : "");
if ($SDK eq "ALL")
{
@ -161,6 +213,9 @@ while( ($SDK, $Value) = each(%SDK_LibraryDirs) )
{
if ($SDK_RootDirs{$SDK2} ne '') # is this SDK listed as installed? (fails silently)
{
# do we already have this one?
next if (-e $SDK_RootDirs{$SDK2}."\\epoc32\\release\\$SDK_TargetDir{$SDK2}\\urel\\$Library");
$LibrariesQueued++;
DoLibrary($SDK2, $Library, $Path);
}
@ -170,6 +225,9 @@ while( ($SDK, $Value) = each(%SDK_LibraryDirs) )
{
if ($SDK_RootDirs{$SDK} ne '') # is this SDK listed as installed? (fails silently)
{
# do we already have this one?
next if (-e $SDK_RootDirs{$SDK}."\\epoc32\\release\\$SDK_TargetDir{$SDK}\\urel\\$Library");
$LibrariesQueued++;
DoLibrary($SDK, $Library, $Path);
}
@ -206,6 +264,31 @@ while( ($SDK, $VariationsHash) = each(%SDK_Variations) )
}
}
while( ($SDK, $VariationsHash) = each(%VariationSets) )
{
while( ($Variation, $FeaturesBlock) = each(%{$VariationSets{$SDK}}) )
{
my $MacroBlock = &MakeMppMacroDefs($FeaturesBlock);
if ($SDK eq "ALL")
{
while( ($SDK2, $RootDir) = each(%SDK_RootDirs) )
{
if ($SDK_RootDirs{$SDK2} ne '')
{
DoVariation($SDK2, $Variation, $MacroBlock);
}
}
}
else
{
if ($SDK_RootDirs{$SDK} ne '')
{
DoVariation($SDK, $Variation, $MacroBlock);
}
}
}
}
##################################################################################################################
# give report
@ -248,6 +331,80 @@ print " SumthinWicked wishes you a ridiculously good and optimally happy d
##################################################################################################################
##################################################################################################################
# create a set of "MACRO xxx" definitions for use in the scummvm_base.mpp file
sub MakeMppMacroDefs
{
my ($features) = @_;
my %EnabledFeatures = ();
foreach (split(/\W|\r|\n/, $features))
{
if ($_ ne "")
{
#print "FEATURE: $_\n";
$EnabledFeatures{$_} = 1;
}
}
my $MacroDefs = "";
$MacroDefs .= " // Features //\n";
foreach my $e (sort keys %UseableFeatures)
{
my $E = uc($e);
if ($EnabledFeatures{$e})
{
$MacroDefs .= "MACRO USE_$E // LIB:$UseableFeatures{$e}\n";
# this one is used: remove it now
delete $EnabledFeatures{$e};
# this will leave us with a list of unparsed options!
}
else
{
$MacroDefs .= "//MACRO USE_$E\n";
}
}
$MacroDefs .= " // Engines //\n";
foreach my $e (sort @EnablableEngines)
{
my $E = uc($e);
if ($EnabledFeatures{$e})
{
$MacroDefs .= "MACRO ENABLE_$E // LIB:scummvm_$e.lib\n";
# this one is used: remove it now
delete $EnabledFeatures{$e};
# this will leave us with a list of unparsed options!
}
else
{
$MacroDefs .= "//MACRO ENABLE_$E\n";
}
}
$MacroDefs .= " // SubEngines //\n";
foreach my $e (sort @EnablableSubEngines)
{
my $E = uc($e);
if ($EnabledFeatures{$e})
{
$MacroDefs .= "MACRO ENABLE_$E\n";
# this one is used: remove it now
delete $EnabledFeatures{$e};
# this will leave us with a list of unparsed options!
}
else
{
$MacroDefs .= "//MACRO ENABLE_$E\n";
}
}
#print "\n\n'$features' ==> $MacroDefs\n\n\n";
return $MacroDefs;
}
##################################################################################################################
# Build, Package & Upload a single Variation
sub DoLibrary
{
@ -286,8 +443,8 @@ my $header = "
PrintMessage("Cleaning for $Target") if (!$ReallyQuiet);
system("bldmake bldfiles > NUL 2> NUL");
PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8);
system("abld clean $TargetName urel > NUL 2> NUL");
PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
system("abld CLEAN $TargetName UREL > NUL 2> NUL");
PrintErrorMessage("'abld CLEAN $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
# remove file so we are sure that after .lib generation we have a fresh copy!
if (-e $TargetFilePath) { unlink($TargetFilePath) or PrintErrorMessage("Removing $TargetFilePath"); }
@ -298,10 +455,10 @@ my $header = "
my $OldSize = (-s $build_log_err);
$Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : "");
system("abld build $TargetName urel $Redirection >> $build_log_out");
system("abld BUILD $TargetName UREL $Redirection >> $build_log_out");
$OK = 0 if ($? >> 8);
# print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err));
PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
PrintErrorMessage("'abld BUILD $TargetName UREL' exited with value " . ($? >> 8)) if ($? >> 8);
return 0 if (!$OK); # ABLD always returns ok :( grr
PrintMessage("Done.") if (!$ReallyQuiet);
@ -318,7 +475,7 @@ my $header = "
}
else
{
PrintErrorMessage("'abld build $TargetName urel' apparently failed.");
PrintErrorMessage("'abld BUILD $TargetName UREL' apparently failed.");
if ($HaltOnError)
{
PrintErrorMessage("Halting on error as requested!");
@ -449,12 +606,14 @@ sub BuildVariation()
if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); }
$UnlinkFile = $SDK_RootDirs{$SDK}."/epoc32/release/$TargetDir/urel/ScummVM.exe";
if (-e $UnlinkFile) { unlink($UnlinkFile) or PrintErrorMessage("Removing $UnlinkFile"); }
# remove all libs here, note they are in another dir!
system("del ".$SDK_RootDirs{$SDK}."/epoc32/release/$TargetName/urel/scummvm_*.lib");
system("bldmake bldfiles 2> NUL > NUL");
PrintErrorMessage("'bldmake bldfiles' exited with value " . ($? >> 8)) if ($? >> 8);
system("abld clean $TargetName urel 2> NUL > NUL");
PrintErrorMessage("'abld clean $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
system("abld CLEAN $TargetName UREL 2> NUL > NUL");
PrintErrorMessage("'abld CLEAN $TargetName UREL' exited with value " . ($? >> 8)) if ($? >> 8);
my $Redirection = "OUT:file, ERR:".($RedirectSTDERR ? "file" : "screen");
my $Message = "Building $Package ($Redirection)";
@ -463,10 +622,10 @@ sub BuildVariation()
my $OldSize = (-s $build_log_err);
$Redirection = ($RedirectSTDERR ? "2>> $build_log_err" : "");
system("abld build $TargetName urel $Redirection >> $build_log_out");
system("abld BUILD $TargetName UREL $Redirection >> $build_log_out");
$OK = 0 if ($? >> 8);
print " STDERR: ".((-s $build_log_err)-$OldSize)." bytes output written to $build_log_err\n+--------------------------------------------------------------------------------------\n" if ($OldSize != (-s $build_log_err) && !$ReallyQuiet);
PrintErrorMessage("'abld build $TargetName urel' exited with value " . ($? >> 8)) if ($? >> 8);
PrintErrorMessage("'abld BUILD $TargetName UREL' exited with value " . ($? >> 8)) if ($? >> 8);
return 0 if (!$OK); # ABLD always returns ok :( grr
PrintMessage("Done.") if (!$ReallyQuiet);
@ -574,6 +733,7 @@ sub PrepSdkPaths()
# set env stuff
PrintMessage("Prepending $SDK specific paths to %PATH%") if (!$ReallyQuiet);
$AdditionalPathEntries .= "$SDK_ToolchainDirs{$SDK};" if ($SDK_ToolchainDirs{$SDK} ne '');
$AdditionalPathEntries .= "$ECompXL_BinDir;" if ($ECompXL_BinDir ne '' && $SDK eq 'UIQ2');
$AdditionalPathEntries .= "$EPOC32RT\\include;";
$AdditionalPathEntries .= "$EPOC32RT\\tools;";
@ -635,3 +795,4 @@ sub PrintMessage()
##################################################################################################################

View file

@ -1,10 +1,42 @@
##################################################################################################################
@WorkingEngines = qw(
scumm agos sky queen gob saga
kyra lure agi
);
@TestingEngines = qw(
cine cruise touche parallaction
drascula igor made m4
);
@BrokenEngines = qw(
sword1
sword2
);
@EnablableEngines = (@WorkingEngines, @TestingEngines);
@EnablableSubEngines = qw(
scumm_7_8
he
);
%UseableFeatures = (
'zlib' => 'zlib.lib',
'mad' => 'libmad.lib',
'tremor' => 'libtremor.lib',
'mpeg2' => 'libmpeg2.lib'
);
# these are normally enabled for each variation
$DefaultFeatures = qw(zlib tremor);
#$DefaultFeatures = qw(zlib mad tremor);
# you can use these below for speed & clarity or override with custom settings
$DefaultTopMacros = "
MACRO USE_ZLIB // LIB:zlib.lib
MACRO USE_MAD // LIB:libmad.lib
//MACRO USE_MAD // LIB:libmad.lib
MACRO USE_TREMOR // LIB:libtremor.lib
";
@ -13,63 +45,75 @@
MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
";
##################################################################################################################
##
## General system information:
## General system information, based on $COMPUTERNAME, so this way
## you can use the same LocalSettings.pl file on multiple machines!
##
##################################################################################################################
# this way you can use the same LocalSettings.pl file on multiple machines!
if ($ENV{'COMPUTERNAME'} eq "BRAAMBOOK")
if ($ENV{'COMPUTERNAME'} eq "PC-21") #########################################################################
{
# might use this string for file/dir naming in the future :)
$Producer = "SumthinWicked";
$RedirectSTDERR = 0;
$HaltOnError = 1;
$HaltOnError = 0;
$SkipExistingPackages = 0;
$ReallyQuiet = 0;
$DevBase = "C:\\S";
# specify an optional FTP server to upload to after each Build+Package (can leave empty)
#$FTP_Host = "host.domain";
#$FTP_User = "test";
#$FTP_Pass = "test";
#$FTP_Dir = "test";
#$FTP_Host = "host.com";
$FTP_User = "something";
$FTP_Pass = "password";
$FTP_Dir = "cvsbuilds";
# What Platform SDKs are installed on this machine?
# possible SDKs: ("UIQ2", UIQ3", "S60v1", "S60v2", "S60v3", "S80", "S90")
# Note1: the \epoc32 directory needs to be in these rootdirs
# Note2: these paths do NOT end in a backslash!
$SDK_RootDirs{'UIQ2'} = "C:\\S\\UIQ_21";
$SDK_RootDirs{'S60v1'} = "C:\\S\\S60v1";
$SDK_RootDirs{'S60v2'} = "C:\\S\\S60v2";
$SDK_RootDirs{'S80'} = "C:\\S\\S80";
$SDK_RootDirs{'S90'} = "C:\\S\\S90";
$ECompXL_BinDir = "C:\\S\\ECompXL\\bin"; # only needed for UIQ
# you need to specify each of the SDKs used in the blocks below!
# $SDK_RootDirs{'UIQ2'} = "$DevBase\\UIQ_21";
$SDK_RootDirs{'UIQ3'} = "$DevBase\\UIQ3";
# $SDK_RootDirs{'S60v1'} = "$DevBase\\S60v1";
# $SDK_RootDirs{'S60v2'} = "$DevBase\\S60v2";
$SDK_RootDirs{'S60v3'} = "$DevBase\\S60v3";
# $SDK_RootDirs{'S80'} = "$DevBase\\S80";
# $SDK_RootDirs{'S90'} = "$DevBase\\S90";
$SDK_ToolchainDirs{'S60v3'} = "$DevBase\\arm-symbianelf\\bin";
$SDK_ToolchainDirs{'UIQ2'} = "$DevBase\\ECompXL\\bin"; # only needed for UIQ2/UIQ3
$SDK_ToolchainDirs{'UIQ3'} = "$DevBase\\ECompXL\\bin"; # only needed for UIQ2/UIQ3
# these supporting libraries get built first, then all the Variations
# Note: the string {'xxx.lib'} is used in checking in build success: so needs to be accurate!
if (0) # so we can turn them on/off easily
{
#$SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "C:\\S\\zlib-1.2.2\\epoc";
#$SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "C:\\S\\libmad-0.15.1b\\group";
#$SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "C:\\S\\tremor\\epoc";
$SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = $SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\UIQ";
#$SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S60";
#$SDK_LibraryDirs{'S80'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S80";
#$SDK_LibraryDirs{'S90'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S90";
#$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc";
## Standard libraries
$SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "$DevBase\\zlib-1.2.2\\epoc";
#$SDK_LibraryDirs{'ALL'}{'libmad.lib'} = "$DevBase\\libmad-0.15.1b\\group";
$SDK_LibraryDirs{'ALL'}{'libtremor.lib'}= "$DevBase\\tremor\\epoc";
## SDL 1.2.12 / AnotherGuest / Symbian version
my $SdlBase = "$DevBase\\SDL-1.2.12-ag\\Symbian";
#$SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = "$SdlBase\\S60"; // unsupported?
#$SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = "$SdlBase\\S60v2";
$SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "$SdlBase\\S60v3";
#$SDK_LibraryDirs{'S80'}{'esdl.lib'} = "$SdlBase\\S80";
#$SDK_LibraryDirs{'S90'}{'esdl.lib'} = "$SdlBase\\S90";
#$SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = "$SdlBase\\UIQ2"
#$SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "$SdlBase\\UIQ3";
## HardlySupported(TM) :P
#$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "$DevBase\\mpeg2dec-0.4.0\\epoc";
}
# backup :P
#Path=C:\Progra~1\Active\Python24\.;C:\Program Files\Active\Tcl\bin;C:\Progra~1\Active\Perl\bin\;C:\WINDOWS\system32;C:\W
#INDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\GNU\cvsnt;C:\Progra
#m Files\WinSCP3\;"C:\Program Files\Common Files\Microsoft Shared\VSA\8.0\VsaEnv\";"c:\Program Files\Microsoft Visual Stu
#dio 8\VC\bin";"C:\Program Files\UltraEdit-32"
# now you can add $VariationSets only built on this PC below this line :)
#$VariationSets{'ALL'}{'scumm'} = "$DefaultFeatures scumm scumm_7_8 he";
#$VariationSets{'ALL'}{'all'} = "$DefaultFeatures @WorkingEngines @EnablableSubEngines";
}
elsif ($ENV{'COMPUTERNAME'} eq "TSSLND0106")
elsif ($ENV{'COMPUTERNAME'} eq "TSSLND0106") #################################################################
{
$Producer = "AnotherGuest";
$RedirectSTDERR = 1;
@ -101,9 +145,11 @@ if (0) # so we can turn them on/off easily
# $SDK_LibraryDirs{'S90'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S90";
#$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc";
}
# now you can add $SDK_Variations only built on this PC here :)
# now you can add $VariationSets only built on this PC below this line :)
}
elsif ($ENV{'COMPUTERNAME'} eq "BIGMACHINE")
elsif ($ENV{'COMPUTERNAME'} eq "BIGMACHINE") #################################################################
{
$Producer = "AnotherGuest";
$RedirectSTDERR = 1;
@ -116,14 +162,14 @@ elsif ($ENV{'COMPUTERNAME'} eq "BIGMACHINE")
#$FTP_Pass = "password";
#$FTP_Dir = "cvsbuilds";
#$SDK_RootDirs{'UIQ2'}= "E:\\UIQ2";
$SDK_RootDirs{'UIQ3'}= "E:\\UIQ3";
#$SDK_RootDirs{'S60v1'}= "E:\\S60v1";
#$SDK_RootDirs{'S60v2'}= "E:\\S60v2";
$SDK_RootDirs{'S60v3'}= "E:\\S60v3";
#$SDK_RootDirs{'S80'}= "E:\\S80";
#$SDK_RootDirs{'S90'}= "E:\\S90";
$ECompXL_BinDir= "E:\\ECompXL\\";
#$SDK_RootDirs{'UIQ2'}= "D:\\UIQ2";
$SDK_RootDirs{'UIQ3'}= "D:\\UIQ3";
#$SDK_RootDirs{'S60v1'}= "D:\\S60v1";
#$SDK_RootDirs{'S60v2'}= "D:\\S60v2";
$SDK_RootDirs{'S60v3'}= "D:\\S60v3";
#$SDK_RootDirs{'S80'}= "D:\\S80";
#$SDK_RootDirs{'S90'}= "D:\\S90";
$ECompXL_BinDir= "D:\\ECompXL\\";
if (0) # so we can turn them on/off easily
{
# $SDK_LibraryDirs{'ALL'}{'zlib.lib'} = "C:\\S\\zlib-1.2.2\\epoc";
@ -137,28 +183,32 @@ if (0) # so we can turn them on/off easily
$SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\UIQ\\UIQ3";
#$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc";
}
# now you can add $SDK_Variations only built on this PC here :)
# now you can add $VariationSets only built on this PC below this line :)
}
else
else #########################################################################################################
{
print "ERROR: Computer name ".$ENV{'COMPUTERNAME'}." not recognized! Plz edit _LocalSettings.pl!";
exit 1;
}
##################################################################################################################
##
## Variation defines:
##
##################################################################################################################
# second hash index = literal string used in .sis file created.
# empty string also removes the trailing '_'. Some 051101 examples:
# $SDK_Variations{'UIQ2'}{''} would produce:
# $VariationSets{'UIQ2'}{''} would produce:
# scummvm-051101-SymbianUIQ2.sis
# $SDK_Variations{'S60v2'}{'agos'} would produce:
# $VariationSets{'S60v2'}{'agos'} would produce:
# scummvm-051101-SymbianS60v2_agos.sis
# $SDK_Variations{'ALL'}{'queen'} with all $SDK_RootDirs defined would produce:
# $VariationSets{'ALL'}{'queen'} with all $SDK_RootDirs defined would produce:
# scummvm-051101-SymbianUIQ2_queen.sis
# scummvm-051101-SymbianUIQ3_queen.sis
# scummvm-051101-SymbianS60v1_queen.sis
@ -167,361 +217,47 @@ if (0) # so we can turn them on/off easily
# scummvm-051101-SymbianS80_queen.sis
# scummvm-051101-SymbianS90_queen.sis
#$SDK_Variations{'ALL'}{'test'} = "$DefaultTopMacro
# //MACRO USE_TREMOR // LIB:libtremor.lib
# //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
# //MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
# //MACRO DISABLE_SKY // LIB:scummvm_sky.lib
# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
# //MACRO DISABLE_GOB // LIB:scummvm_gob.lib
# //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
# //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
#$DefaultBottomMacros";
#$SDK_Variations{'S60v1'}{'test'} = $SDK_Variations{'UIQ2'}{'test'};
# NOTE: empty $VariationSets{''} string instead of 'ALL' = easy way to disable pkg!
if (1) # all regular combo's
{
# the first one includes all SDKs & release-ready engines
$SDK_Variations{'ALL'}{'all'} = "$DefaultTopMacros
//MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
//MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
//MACRO DISABLE_SKY // LIB:scummvm_sky.lib
//MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
//MACRO DISABLE_GOB // LIB:scummvm_gob.lib
//MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
//MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
//MACRO DISABLE_AGI // LIB:scummvm_agi.lib
//MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
//MACRO DISABLE_CINE // LIB:scummvm_cine.lib
//MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
//MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
//MACRO DISABLE_LURE // LIB:scummvm_lure.lib
//MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
//MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
//MACRO DISABLE_MADE // LIB:scummvm_made.lib
//MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
$VariationSets{'ALL'}{'all'} = "$DefaultFeatures @WorkingEngines @EnablableSubEngines";
# now one for each ready-for-release engine
$SDK_Variations{'ALL'}{'scumm'} = "$DefaultTopMacros
//MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
foreach (@WorkingEngines)
{
$VariationSets{'ALL'}{$_} = "$DefaultFeatures $_";
}
# for scumm, we need to add 2 features:
$VariationSets{'ALL'}{'scumm'} .= " scumm_7_8 he";
$SDK_Variations{'ALL'}{'agos'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
//MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
# now one for each not-ready-for-release-or-testing engine
$SDK_Variations{'ALL'}{'sky'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
//MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
$SDK_Variations{'ALL'}{'queen'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
//MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
$SDK_Variations{'ALL'}{'gob'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
//MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
$SDK_Variations{'ALL'}{'saga'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
//MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
$SDK_Variations{'ALL'}{'kyra'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
//MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
foreach (@TestingEngines)
{
$VariationSets{'ALL'}{"test_$_"} = "$DefaultFeatures $_";
}
# below here you could specify weird & experimental combinations, non-ready engines
$SDK_Variations{'ALL'}{'saga_mini'} = "
//MACRO USE_ZLIB // LIB:zlib.lib
//MACRO USE_MAD // LIB:libmad.lib
//MACRO USE_TREMOR // LIB:libtremor.lib
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
//MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
# a small version of the saga engine, because it is so big (no tremor,mad,zlib)
$VariationSets{'ALL'}{'saga_mini'} = "saga";
# $SDK_Variations{'ALL'}{'scumm_no78he'} = "
# MACRO USE_ZLIB // LIB:zlib.lib
# MACRO USE_MAD // LIB:libmad.lib
# //MACRO USE_TREMOR // LIB:libtremor.lib
# MACRO DISABLE_SCUMM_7_8
# MACRO DISABLE_SCUMM_HE
# //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
# MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
# MACRO DISABLE_SKY // LIB:scummvm_sky.lib
# MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
# MACRO DISABLE_GOB // LIB:scummvm_gob.lib
# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
# MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
# MACRO DISABLE_AGI // LIB:scummvm_agi.lib
# MACRO DISABLE_LURE // LIB:scummvm_lure.lib
# MACRO DISABLE_CINE // LIB:scummvm_cine.lib
# MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
# $DefaultBottomMacros";
# a smaller version of scumm without support for v7, v8 and HE games
$VariationSets{'ALL'}{'scumm_no78he'} = "$DefaultFeatures scumm";
# $SDK_Variations{'ALL'}{'all_vorbis'} = "
# MACRO USE_ZLIB // LIB:zlib.lib
# MACRO USE_MAD // LIB:libmad.lib
# MACRO USE_TREMOR // LIB:libtremor.lib
#
# //MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
# //MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
# //MACRO DISABLE_SKY // LIB:scummvm_sky.lib
# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
# //MACRO DISABLE_GOB // LIB:scummvm_gob.lib
# //MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
# //MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
# $DefaultBottomMacros";
# maybe you feel lucky and want to test the sword engines? :P
#$VariationSets{'S60v2'}{'test_sword'} = "$DefaultFeatures mpeg2 sword1 sword2";
#$VariationSets{'UIQ2'}{'test_sword'} = "$DefaultFeatures mpeg2 sword1 sword2";
$SDK_Variations{'ALL'}{'lure'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
//MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_agi.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
# for mega-fast-testing only plz! Warning: contains to engines!
#$VariationSets{'ALL'}{'fast_empty'} = "";
# empty $SDK_Variations{''} string instead of 'ALL' = package disabled
$SDK_Variations{'ALL'}{'test_cine'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
//MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
} # end quick-n-fast if (1|0)
$SDK_Variations{'ALL'}{'agi'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
//MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
$DefaultBottomMacros";
$SDK_Variations{'ALL'}{'test_touche'} = "$DefaultTopMacros
MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
MACRO DISABLE_SKY // LIB:scummvm_sky.lib
MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
MACRO DISABLE_GOB // LIB:scummvm_gob.lib
MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
MACRO DISABLE_LURE // LIB:scummvm_lure.lib
MACRO DISABLE_CINE // LIB:scummvm_cine.lib
MACRO DISABLE_AGI // LIB:scummvm_agi.lib
MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
//MACRO DISABLE_TOUCHE // LIB:scummvm_touche.lib
MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
MACRO DISABLE_IGOR // LIB:scummvm_igor.lib
MACRO DISABLE_MADE // LIB:scummvm_made.lib
MACRO DISABLE_M4 // LIB:scummvm_m4.lib
";
}
#
# $SDK_Variations{'S60v2'}{'test_sword'} = "$DefaultTopMacros
# MACRO USE_MPEG2 // LIB:libmpeg2.lib
# MACRO USE_TREMOR // LIB:libtremor.lib
# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
# MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
# MACRO DISABLE_SKY // LIB:scummvm_sky.lib
# MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
# MACRO DISABLE_GOB // LIB:scummvm_gob.lib
# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
# MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
# MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
# MACRO DISABLE_CINE // LIB:scummvm_cine.lib
# MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
# //MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
# //MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
# ";
# $SDK_Variations{'UIQ2'}{'test_sword'} = $SDK_Variations{'S60v2'}{'test_sword'}
#
# for mega-fast-testing only plz!
# $SDK_Variations{'ALL'}{'(fast_empty)'} = "
# //MACRO USE_ZLIB // LIB:zlib.lib
# //MACRO USE_MAD // LIB:libmad.lib
# //MACRO USE_TREMOR // LIB:libtremor.lib
# MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib
# MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
# MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
# MACRO DISABLE_SKY // LIB:scummvm_sky.lib
# //MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
# MACRO DISABLE_GOB // LIB:scummvm_gob.lib
# MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
# $DefaultBottomMacros";
##################################################################################################################

View file

@ -38,6 +38,7 @@ Building ScummVM
Lets just say the framework needs quite some time to set up and takes a while
to get used to. If you choose to continue you will need the following items:
- UIQ 3.0 SDK (To build for UIQ3 devices)
- UIQ 2.1 SDK (To build for UIQ2 devices);
http://www.symbian.com/developer/sdks_uiq.asp
@ -58,14 +59,14 @@ Building ScummVM
- zlib, a massively spiffy yet delicately unobtrusive compression library
http://www.zlib.net/
These are probably too heavy-duty for your phone:
- latest version of active perl (included with Symbian SDK does not work with the build scripts)
- libogg, the free media file container format
http://www.xiph.org/ogg/
- libvorbis, the free audio codec
http://www.vorbis.com/
These are probably too heavy-duty for your phone:
- flac, the Free Lossless Audio Codec
http://flac.sourceforge.net/

View file

@ -29,7 +29,7 @@
TARGET ScummVM.exe
TARGETPATH sys\bin
TARGETTYPE exe
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
UID 0x100039ce 0xA0000657
@ -81,13 +81,6 @@ ALWAYS_BUILD_AS_ARM
STATICLIBRARY esdl.lib
#if !defined(WINS)
staticlibrary rate_arm_asm.o
staticlibrary proc3arm.o
staticlibrary codec47ARM.o
staticlibrary gfxARM.o
#endif
// *** Include paths
USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines

View file

@ -30,7 +30,7 @@ TARGET ScummVM.exe
TARGETPATH sys\bin
TARGETTYPE exe
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
UID 0x100039ce 0xA0000657
@ -82,13 +82,6 @@ ALWAYS_BUILD_AS_ARM
STATICLIBRARY esdl.lib
#if !defined(WINS)
staticlibrary rate_arm_asm.o
staticlibrary proc3arm.o
staticlibrary codec47ARM.o
staticlibrary gfxARM.o
#endif
// *** Include paths
USERINCLUDE ..\..\..\.. ..\..\..\..\common ..\..\..\..\gui ..\..\..\..\engines

View file

@ -30,7 +30,7 @@ TARGET scummvm_agi.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_agos.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,36 +30,15 @@ TARGET scummvm_base.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
// Note: the LIB:*.lib statements are used by AdaptAllMMPs.pl, so don't remove them!
//START_AUTO_MACROS_MASTER//
// empty base file, will be updated by Perl build scripts
// list of possible MACROs: (will be replaced when generating scummvm_base.mmp)
//MACRO USE_ZLIB // LIB:zlib.lib
//MACRO USE_MAD // LIB:libmad.lib
//MACRO USE_TREMOR // LIB:libtremor.lib
//MACRO USE_UIQ_SE_VIBRA // LIB:vibration.lib
//MACRO DISABLE_SCUMM_7_8
//MACRO DISABLE_SCUMM_HE
//MACRO DISABLE_SCUMM // LIB:scummvm_scumm.lib
//MACRO DISABLE_AGOS // LIB:scummvm_agos.lib
//MACRO DISABLE_SKY // LIB:scummvm_sky.lib
//MACRO DISABLE_QUEEN // LIB:scummvm_queen.lib
//MACRO DISABLE_GOB // LIB:scummvm_gob.lib
//MACRO DISABLE_SAGA // LIB:scummvm_saga.lib
//MACRO DISABLE_KYRA // LIB:scummvm_kyra.lib
//MACRO DISABLE_SWORD1 // LIB:scummvm_sword1.lib
//MACRO DISABLE_SWORD2 // LIB:scummvm_sword2.lib
//MACRO DISABLE_LURE // LIB:scummvm_lure.lib
//MACRO DISABLE_CINE // LIB:scummvm_cine.lib
//MACRO DISABLE_AGI // LIB:scummvm_agi.lib
//MACRO DISABLE_PARALLACTION // LIB:scummvm_parallaction.lib
//MACRO DISABLE_CRUISE // LIB:scummvm_cruise.lib
//MACRO DISABLE_DRASCULA // LIB:scummvm_drascula.lib
// this file will be modified first, then from here all
// MACROs will be replicated to the other MPP files.
//STOP_AUTO_MACROS_MASTER//
@ -77,6 +56,7 @@ SYSTEMINCLUDE ..\src // for portdefs.h
// *** SOURCE files
SOURCEPATH ..\..\..\..\common
//START_AUTO_OBJECTS_COMMON_//
@ -84,6 +64,7 @@ SOURCEPATH ..\..\..\..\common
//STOP_AUTO_OBJECTS_COMMON_//
SOURCEPATH ..\..\..\..\graphics
//START_AUTO_OBJECTS_GRAPHICS_//
@ -91,6 +72,7 @@ SOURCEPATH ..\..\..\..\graphics
//STOP_AUTO_OBJECTS_GRAPHICS_//
SOURCEPATH ..\..\..\..\gui
//START_AUTO_OBJECTS_GUI_//
@ -103,6 +85,7 @@ SOURCEPATH ..\..\..\..\gui
//SOURCE KeysDialog.cpp
//SOURCE Actions.cpp
SOURCEPATH ..\..\..\..\sound
//START_AUTO_OBJECTS_SOUND_//
@ -110,16 +93,22 @@ SOURCEPATH ..\..\..\..\sound
//STOP_AUTO_OBJECTS_SOUND_//
#if defined (WINS)
SOURCE rate.cpp
SOURCE rate.cpp // WINS emulator version: add regular .cpp
#else
SOURCE rate_arm.cpp
SOURCE rate_arm.cpp // ARM version: add ASM .cpp wrapper
SOURCE rate_arm_asm.s // ARM version: add ASM routines
#endif
sourcepath ..\..\..\..
source backends\events\default\default-events.cpp
source backends\timer\default\default-timer.cpp
source backends\saves\savefile.cpp
source backends\saves\default\default-saves.cpp
source backends\saves\compressed\compressed-saves.cpp
source engines\engine.cpp
// add a few files manually, since they are not parsed from modules.mk files
SOURCEPATH ..\..\..\..
SOURCE backends\events\default\default-events.cpp
SOURCE backends\timer\default\default-timer.cpp
SOURCE backends\saves\savefile.cpp
SOURCE backends\saves\default\default-saves.cpp
SOURCE backends\saves\compressed\compressed-saves.cpp
SOURCE engines\engine.cpp
// backend specific includes
// backend specific includes

View file

@ -30,7 +30,7 @@ TARGET scummvm_CINE.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_cruise.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_drascula.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_gob.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_kyra.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_lure.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_m4.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_made.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_parallaction.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_queen.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_saga.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_scumm.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//
@ -43,23 +43,34 @@ ALWAYS_BUILD_AS_ARM
SOURCEPATH ..\..\..\..\engines\scumm
//START_AUTO_OBJECTS_SCUMM_//
// empty base file, will be updated by Perl build scripts
//STOP_AUTO_OBJECTS_SCUMM_//
#if !defined (WINS)
SOURCE gfxARM.s // ARM version: add ASM routines
SOURCE proc3ARM.s // ARM version: add ASM routines
#endif
//START_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8//
//START_AUTO_OBJECTS_SCUMM_ENABLE_SCUMM_7_8//
// empty base file, will be updated by Perl build scripts
//STOP_AUTO_OBJECTS_SCUMM_DISABLE_SCUMM_7_8//
//STOP_AUTO_OBJECTS_SCUMM_ENABLE_SCUMM_7_8//
#if !defined (WINS)
SOURCE smush/codec47ARM.s // ARM version: add ASM routines
#endif
//START_AUTO_OBJECTS_SCUMM_DISABLE_HE//
//START_AUTO_OBJECTS_SCUMM_ENABLE_HE//
// empty base file, will be updated by Perl build scripts
//STOP_AUTO_OBJECTS_SCUMM_DISABLE_HE//
//STOP_AUTO_OBJECTS_SCUMM_ENABLE_HE//
// *** Include paths

View file

@ -30,7 +30,7 @@ TARGET scummvm_sky.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_sword1.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_sword2.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -30,7 +30,7 @@ TARGET scummvm_touche.lib
TARGETTYPE lib
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
OPTION GCC -Wno-multichar -Wno-reorder // don't optimize for ARM, platform way too sensitive for that :( just turn off some common warnings
OPTION GCCE -Wno-multichar -Wno-reorder -fsigned-char
OPTION GCCE -Wno-multichar -Wno-reorder -Wno-unused -Wno-format -fsigned-char
ALWAYS_BUILD_AS_ARM
//START_AUTO_MACROS_SLAVE//

View file

@ -173,11 +173,8 @@ void OSystem_SDL_Symbian::quit() {
OSystem_SDL::quit();
}
bool OSystem_SDL_Symbian::setSoundCallback(SoundProc proc, void *param) {
void OSystem_SDL_Symbian::setupMixer() {
// First save the proc and param
_sound_proc_param = param;
_sound_proc = proc;
SDL_AudioSpec desired;
SDL_AudioSpec obtained;
@ -207,17 +204,19 @@ bool OSystem_SDL_Symbian::setSoundCallback(SoundProc proc, void *param) {
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = (uint16)samples;
#ifdef S60
desired.callback = symbianMixCallback;
desired.userdata = this;
#else
desired.callback = proc;
desired.userdata = param;
#endif
// Create the mixer instance
assert(!_mixer);
_mixer = new Audio::MixerImpl(this);
assert(_mixer);
if (SDL_OpenAudio(&desired, &obtained) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
return false;
}
_samplesPerSec = 0;
_mixer->setReady(false);
} else {
// Note: This should be the obtained output rate, but it seems that at
// least on some platforms SDL will lie and claim it did get the rate
// even if it didn't. Probably only happens for "weird" rates, though.
@ -229,26 +228,29 @@ bool OSystem_SDL_Symbian::setSoundCallback(SoundProc proc, void *param) {
_stereo_mix_buffer = new byte [obtained.size*2];//*2 for stereo values
}
// Tell the mixer that we are ready and start the sound processing
_mixer->setOutputRate(_samplesPerSec);
_mixer->setReady(true);
SDL_PauseAudio(0);
return true;
}
}
/**
* The mixer callback function, passed on to OSystem::setSoundCallback().
* This simply calls the mix() method.
*/
void OSystem_SDL_Symbian::symbianMixCallback(void *s, byte *samples, int len) {
static_cast <OSystem_SDL_Symbian*>(s)->symbianMix(samples,len);
}
void OSystem_SDL_Symbian::symbianMixCallback(void *sys, byte *samples, int len) {
OSystem_SDL_Symbian *this_ = (OSystem_SDL_Symbian *)sys;
assert(this_);
if (!this_->_mixer)
return;
/**
* Actual mixing implementation
*/
void OSystem_SDL_Symbian::symbianMix(byte *samples, int len) {
#ifdef S60
// If not stereo then we need to downmix
if (_channels != 2) {
_sound_proc(_sound_proc_param, _stereo_mix_buffer, len * 2);
this_->_mixer->mixCallback(_stereo_mix_buffer, len * 2);
int16 *bitmixDst = (int16 *)samples;
int16 *bitmixSrc = (int16 *)_stereo_mix_buffer;
@ -258,9 +260,12 @@ void OSystem_SDL_Symbian::symbianMix(byte *samples, int len) {
bitmixSrc += 2;
}
} else
_sound_proc(_sound_proc_param, samples, len);
#else
this_->_mixer->mixCallback(samples, len);
#endif
}
/**
* This is an implementation by the remapKey function
* @param SDL_Event to remap

View file

@ -58,7 +58,7 @@ public:
// This function is overridden by the symbian port in order to provide MONO audio
// downmix is done by supplying our own audiocallback
//
virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend
virtual void setupMixer(); // overloaded by CE backend
// Overloaded from SDL_Commmon
void quit();
@ -70,11 +70,6 @@ protected:
//
static void symbianMixCallback(void *s, byte *samples, int len);
//
// Actual mixing implementation
//
void symbianMix(byte *samples, int len);
virtual FilesystemFactory *getFilesystemFactory();
public:
// vibration support
@ -121,8 +116,6 @@ protected:
// Audio
int _channels;
SoundProc _sound_proc;
void *_sound_proc_param;
byte *_stereo_mix_buffer;
// Used to handle joystick navi zones

View file

@ -35,8 +35,8 @@
#include <e32std.h>
#include <math.h>
#define DISABLE_SCALERS // we only need 1x
#define DISABLE_HQ_SCALERS
//#define DISABLE_SCALERS // we only need 1x
//#define DISABLE_HQ_SCALERS
#if defined(USE_TREMOR) && !defined(USE_VORBIS)
#define USE_VORBIS // make sure this one is defined together with USE_TREMOR!

View file

@ -91,7 +91,7 @@ void OSystem_Wii::initBackend() {
_startup_time = gettime();
_savefile = new DefaultSaveFileManager();
_mixer = new Audio::Mixer();
_mixer = new Audio::MixerImpl(this);
_timer = new DefaultTimerManager();
initGfx();

View file

@ -31,7 +31,7 @@
#include "backends/saves/default/default-saves.h"
#include "backends/timer/default/default-timer.h"
#include "graphics/surface.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
#include <gctypes.h>
#include <gccore.h>
@ -96,7 +96,7 @@ private:
protected:
Common::SaveFileManager *_savefile;
Audio::Mixer *_mixer;
Audio::MixerImpl *_mixer;
DefaultTimerManager *_timer;
public:
@ -159,7 +159,6 @@ public:
virtual void deleteMutex(MutexRef mutex);
typedef void (*SoundProc)(void *param, byte *buf, int len);
virtual int getOutputSampleRate() const;
virtual void quit();

View file

@ -36,9 +36,6 @@ static bool sfx_thread_quit = false;
static u8 sb = 0;
static u8 *sound_buffer[2];
static OSystem_Wii::SoundProc sound_proc = NULL;
static void *proc_param = NULL;
static void audio_switch_buffers() {
AUDIO_StopDMA();
AUDIO_InitDMA((u32) sound_buffer[sb], SFX_THREAD_FRAG_SIZE);
@ -48,6 +45,7 @@ static void audio_switch_buffers() {
}
static void * sfx_thread_func(void *arg) {
Audio::MixerImpl *mixer = (Audio::MixerImpl *) arg;
u8 next_sb;
while (true) {
@ -57,7 +55,7 @@ static void * sfx_thread_func(void *arg) {
break;
next_sb = sb ^ 1;
sound_proc(proc_param, sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE);
mixer->mixCallback(sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE);
DCFlushRange(sound_buffer[next_sb], SFX_THREAD_FRAG_SIZE);
sb = next_sb;
@ -75,7 +73,7 @@ void OSystem_Wii::initSfx() {
LWP_InitQueue(&sfx_queue);
s32 res = LWP_CreateThread(&sfx_thread, sfx_thread_func, NULL, sfx_stack,
s32 res = LWP_CreateThread(&sfx_thread, sfx_thread_func, _mixer, sfx_stack,
SFX_THREAD_STACKSIZE, SFX_THREAD_PRIO);
if (res) {
@ -95,9 +93,7 @@ void OSystem_Wii::initSfx() {
DCFlushRange(sound_buffer[0], SFX_THREAD_FRAG_SIZE);
DCFlushRange(sound_buffer[1], SFX_THREAD_FRAG_SIZE);
sound_proc = Audio::Mixer::mixCallback;
proc_param = _mixer;
_mixer->setOutputRate(48000);
_mixer->setReady(true);
AUDIO_SetDSPSampleRate(AI_SAMPLERATE_48KHZ);
@ -127,7 +123,3 @@ void OSystem_Wii::deinitSfx() {
}
}
int OSystem_Wii::getOutputSampleRate() const {
return 48000;
}

View file

@ -19,6 +19,8 @@
## Enable whichever engines you want here
ENABLE_SCUMM = STATIC_PLUGIN
ENABLE_SCUMM_7_8 = 1
ENABLE_HE = 1
ENABLE_SKY = STATIC_PLUGIN
ENABLE_QUEEN = STATIC_PLUGIN
ENABLE_GOB = STATIC_PLUGIN
@ -163,7 +165,8 @@ endif
EXECUTABLE = scummvm.exe
CXXFLAGS := $(CFLAGS)
OBJS :=
MODULE_DIRS += .
MODULE_DIRS += ./
DEPDIR = .deps
OBJS += CEActionsPocket.o CEDevice.o CEScaler.o \
CEActionsSmartphone.o CELauncherDialog.o wince-sdl.o

View file

@ -35,7 +35,7 @@
#include "base/main.h"
#include "base/plugins.h"
#include "sound/mixer.h"
#include "sound/mixer_intern.h"
#include "sound/fmopl.h"
#include "backends/timer/default/default-timer.h"
@ -94,7 +94,6 @@ static char stdout_fname[MAX_PATH], stderr_fname[MAX_PATH];
// Static member inits
typedef void (*SoundProc)(void *param, byte *buf, int len);
bool OSystem_WINCE3::_soundMaster = true;
SoundProc OSystem_WINCE3::_originalSoundProc = NULL;
bool _isSmartphone = false;
bool _hasSmartphoneResolution = false;
@ -403,9 +402,8 @@ void OSystem_WINCE3::initBackend()
{
// Instantiate our own sound mixer
// mixer init is postponed until a game engine is selected.
if (_mixer == 0) {
_mixer = new Audio::Mixer();
}
if (_mixer == 0)
_mixer = new Audio::MixerImpl(this);
// Create the timer. CE SDL does not support multiple timers (SDL_AddTimer).
// We work around this by using the SetTimer function, since we only use
@ -770,7 +768,7 @@ void OSystem_WINCE3::create_toolbar() {
_toolbarHandler.setVisible(false);
}
bool OSystem_WINCE3::setSoundCallback(SoundProc proc, void *param) {
void OSystem_WINCE3::setupMixer() {
SDL_AudioSpec desired;
int thread_priority;
@ -779,18 +777,20 @@ bool OSystem_WINCE3::setSoundCallback(SoundProc proc, void *param) {
memset(&desired, 0, sizeof(desired));
_originalSoundProc = proc;
desired.freq = _sampleRate;
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = 128;
desired.callback = private_sound_proc;
desired.userdata = param;
desired.userdata = this;
// Create the mixer instance
if (_mixer == 0)
_mixer = new Audio::MixerImpl(this);
// Add sound thread priority
if (!ConfMan.hasKey("sound_thread_priority")) {
if (!ConfMan.hasKey("sound_thread_priority"))
thread_priority = THREAD_PRIORITY_NORMAL;
}
else
thread_priority = ConfMan.getInt("sound_thread_priority");
@ -799,16 +799,26 @@ bool OSystem_WINCE3::setSoundCallback(SoundProc proc, void *param) {
SDL_CloseAudio();
if (SDL_OpenAudio(&desired, NULL) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
return false;
}
else
_mixer->setReady(false);
} else {
debug(1, "Sound opened OK, mixing at %d Hz", _sampleRate);
// Re-create mixer to match the output rate
delete(_mixer);
_mixer = new Audio::MixerImpl(this);
_mixer->setOutputRate(_sampleRate);
_mixer->setReady(true);
SDL_PauseAudio(0);
return true;
}
}
void OSystem_WINCE3::private_sound_proc(void *param, byte *buf, int len) {
(*_originalSoundProc)(param, buf, len);
OSystem_WINCE3 *this_ = (OSystem_WINCE3 *)param;
assert(this_);
if (this_->_mixer)
this_->_mixer->mixCallback(buf, len);
if (!_soundMaster)
memset(buf, 0, len);
}
@ -838,7 +848,7 @@ bool OSystem_WINCE3::checkOggHighSampleRate() {
}
#endif
void OSystem_WINCE3::get_sample_rate() {
void OSystem_WINCE3::compute_sample_rate() {
// Force at least medium quality FM synthesis for FOTAQ
Common::String gameid(ConfMan.get("gameid"));
if (gameid == "queen") {
@ -875,9 +885,8 @@ void OSystem_WINCE3::setWindowCaption(const char *caption) {
//update_game_settings();
// finalize mixer init
get_sample_rate();
bool result = setSoundCallback(Audio::Mixer::mixCallback, _mixer);
_mixer->setReady(result);
compute_sample_rate();
setupMixer();
// handle the actual event
OSystem_SDL::setWindowCaption(caption);
@ -1050,7 +1059,7 @@ void OSystem_WINCE3::update_game_settings() {
}
}
get_sample_rate();
compute_sample_rate();
}
void OSystem_WINCE3::initSize(uint w, uint h) {

View file

@ -82,7 +82,7 @@ public:
// Overloaded from SDL_Commmon
void quit();
// Overloaded from SDL_Commmon (master volume and sample rate subtleties)
bool setSoundCallback(SoundProc proc, void *param);
void setupMixer();
// Overloaded from OSystem
//void engineInit();
void getTimeAndDate(struct tm &t) const;
@ -160,13 +160,12 @@ private:
#endif
static void private_sound_proc(void *param, byte *buf, int len);
static SoundProc _originalSoundProc;
bool update_scalers();
void create_toolbar();
void update_game_settings();
void check_mappings();
void get_sample_rate();
void compute_sample_rate();
void retrieve_mouse_location(int &x, int &y);

View file

@ -1,10 +0,0 @@
MODULE := backends/platform/x11
MODULE_OBJS := \
x11.o
MODULE_DIRS += \
backends/platform/x11/
# We don't use the rules.mk here on purpose
OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) $(OBJS)

File diff suppressed because it is too large Load diff

View file

@ -1,197 +0,0 @@
/* 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.
*
* $URL$
* $Id$
*
*/
class OSystem_X11:public OSystem {
public:
OSystem_X11();
~OSystem_X11();
void initBackend();
// Determine whether the backend supports the specified feature.
bool hasFeature(Feature f);
// En-/disable the specified feature.
void setFeatureState(Feature f, bool enable);
// Query the state of the specified feature.
bool getFeatureState(Feature f);
// Retrieve a list of all graphics modes supported by this backend.
const GraphicsMode *getSupportedGraphicsModes() const;
// Return the ID of the 'default' graphics mode.
int getDefaultGraphicsMode() const;
// Switch to the specified graphics mode.
bool setGraphicsMode(int mode);
// Determine which graphics mode is currently active.
int getGraphicsMode() const;
// Set colors of the palette
void setPalette(const byte *colors, uint start, uint num);
// Set the size of the video bitmap.
// Typically, 320x200
void initSize(uint w, uint h);
// Draw a bitmap to screen.
// The screen will not be updated to reflect the new bitmap
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
// Update the dirty areas of the screen
void updateScreen();
// Either show or hide the mouse cursor
bool showMouse(bool visible);
// Set the position of the mouse cursor
void set_mouse_pos(int x, int y);
// Warp the mouse cursor. Where set_mouse_pos() only informs the
// backend of the mouse cursor's current position, this function
// actually moves the cursor to the specified position.
void warpMouse(int x, int y);
// Set the bitmap that's used when drawing the cursor.
void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1);
// Shaking is used in SCUMM. Set current shake position.
void setShakePos(int shake_pos);
// Get the number of milliseconds since the program was started.
uint32 getMillis();
// Delay for a specified amount of milliseconds
void delayMillis(uint msecs);
// Get the next event.
// Returns true if an event was retrieved.
bool pollEvent(Common::Event &event);
// Set function that generates samples
bool setSoundCallback(SoundProc proc, void *param);
void clearSoundCallback();
// Determine the output sample rate. Audio data provided by the sound
// callback will be played using this rate.
int getOutputSampleRate() const;
// Quit
void quit();
// Add a callback timer
void setTimerCallback(TimerProc callback, int interval);
// Mutex handling
MutexRef createMutex();
void lockMutex(MutexRef mutex);
void unlockMutex(MutexRef mutex);
void deleteMutex(MutexRef mutex);
// Overlay handling for the new menu system
void showOverlay();
void hideOverlay();
void clearOverlay();
void grabOverlay(int16 *, int);
void copyRectToOverlay(const int16 *, int, int, int, int, int);
virtual int16 getHeight();
virtual int16 getWidth();
virtual void grabPalette(byte *colors, uint start, uint num);
// Set a window caption or any other comparable status display to the
// given value.
void setWindowCaption(const char *caption);
static OSystem *create(int gfx_mode, bool full_screen);
private:
typedef struct {
int x, y;
int w, h;
int hot_x, hot_y;
} MouseState;
typedef struct {
int x, y, w, h;
} DirtyRect;
enum {
MAX_NUMBER_OF_DIRTY_RECTS = 32
};
void create_empty_cursor();
void draw_mouse(DirtyRect *dout);
void undraw_mouse();
void updateScreen_helper(const DirtyRect *d, DirtyRect *dout);
void blit_convert(const DirtyRect *d, uint8 *dst, int pitch);
void blit(const DirtyRect *d, uint16 *dst, int pitch);
uint8 *_local_fb;
uint16 *_local_fb_overlay;
bool _overlay_visible;
int _window_width, _window_height;
int _fb_width, _fb_height;
int _scumm_x, _scumm_y;
uint16 *_palette16;
uint32 *_palette32;
bool _palette_changed;
Display *_display;
int _screen, _depth;
uint8 _bytesPerPixel;
Window _window;
GC _black_gc;
XImage *_image;
pthread_t _sound_thread;
struct timeval _start_time;
int _fake_right_mouse;
int _report_presses;
int _current_shake_pos;
int _new_shake_pos;
DirtyRect _ds[MAX_NUMBER_OF_DIRTY_RECTS];
int _num_of_dirty_rects;
MouseState _oldMouseState, _curMouseState;
byte *_ms_buf;
bool _mouse_visible;
bool _mouse_state_changed;
byte _mouseKeycolor;
uint32 _timer_duration, _timer_next_expiry;
bool _timer_active;
int (*_timer_callback) (int);
};
typedef struct {
OSystem::SoundProc sound_proc;
void *param;
} THREAD_PARAM;

View file

@ -120,7 +120,7 @@ Common::StringList DefaultSaveFileManager::listSavefiles(const char *pattern) {
Common::StringList results;
Common::String search(pattern);
if (savePath.lookupFile(savefiles, search, false, true)) {
if (savePath.lookupFile(savefiles, search, false, true, 0)) {
for (FSList::const_iterator file = savefiles.begin(); file != savefiles.end(); ++file) {
results.push_back(file->getName());
}

View file

@ -38,14 +38,15 @@ private:
void *_timerHandler;
TimerSlot *_head;
public:
DefaultTimerManager();
~DefaultTimerManager();
bool installTimerProc(TimerProc proc, int32 interval, void *refCon);
void removeTimerProc(TimerProc proc);
// Timer callback, to be invoked at regular time intervals by the backend.
/**
* Timer callback, to be invoked at regular time intervals by the backend.
*/
void handler();
};

View file

@ -229,7 +229,6 @@ static int runGame(const EnginePlugin *plugin, OSystem &system, const Common::St
// Reset the file/directory mappings
Common::File::resetDefaultDirectories();
// If result=1 return to the launcher, else quit ScummVM
return result;
}
@ -279,6 +278,7 @@ extern "C" int scummvm_main(int argc, char *argv[]) {
// Load the plugins.
PluginManager::instance().loadPlugins();
EngineMan.getPlugins();
// Process the remaining command line settings. Must be done after the
// config file and the plugins have been loaded.

View file

@ -54,6 +54,7 @@
#pragma warning( disable : 4505 ) // turn off "unreferenced local function has been removed"
#pragma warning( disable : 4510 ) // turn off "default constructor could not be generated"
#pragma warning( disable : 4610 ) // turn off "struct can never be instantiated - user defined constructor required"
#pragma warning( disable : 4800 ) // turn off "forcing value to bool 'true' or 'false' (performance warning)"
// vsnprintf is already defined in Visual Studio 2008
#if (_MSC_VER < 1500)

View file

@ -121,28 +121,3 @@ void OSystem::clearScreen() {
memset(screen->pixels, 0, screen->h * screen->pitch);
unlockScreen();
}
/*
* Include header files needed for the getFilesystemFactory() method.
*
* TODO: Remove these gradually and move the getFilesystemFactory() implementations
* to the respective backends. Then turn it into a pure virtual method of OSystem.
*/
#if defined(PALMOS_MODE)
#include "backends/fs/palmos/palmos-fs-factory.h"
#elif defined(__PLAYSTATION2__)
#include "backends/fs/ps2/ps2-fs-factory.h"
#endif
FilesystemFactory *OSystem::getFilesystemFactory() {
#if defined(__amigaos4__) || defined(__DC__) || defined(__SYMBIAN32__) || defined(UNIX) || defined(WIN32) || defined(__WII__) || defined(__PSP__) || defined(__DS__)
// These ports already implement this function, so it should never be called.
return 0;
#elif defined(PALMOS_MODE)
return &PalmOSFilesystemFactory::instance();
#elif defined(__PLAYSTATION2__)
return &Ps2FilesystemFactory::instance();
#else
#error Unknown and unsupported backend in OSystem::getFilesystemFactory
#endif
}

View file

@ -814,15 +814,6 @@ public:
*/
virtual Audio::Mixer *getMixer() = 0;
/**
* Determine the output sample rate. Audio data provided by the sound
* callback will be played using this rate.
* @note Client code other than the sound mixer should _not_ use this
* method. Instead, call Mixer::getOutputRate()!
* @return the output sample rate
*/
virtual int getOutputSampleRate() const = 0;
//@}
@ -911,7 +902,7 @@ public:
*
* @return FilesystemFactory* The specific factory for the current architecture.
*/
virtual FilesystemFactory *getFilesystemFactory();
virtual FilesystemFactory *getFilesystemFactory() = 0;
/**

6
configure vendored
View file

@ -127,7 +127,7 @@ _srcdir=`dirname $0`
# Determine a tmp file name, using mktemp(1) when available.
if type mktemp > /dev/null 2>&1 ; then
TMPO=`mktemp`
TMPO=`mktemp /tmp/scummvm-conf.XXXXXXXXXX`
else
TMPO=${_srcdir}/scummvm-conf
fi
@ -741,6 +741,10 @@ for ac_option in $@; do
--enable-release)
DEBFLAGS="-O2 -Wuninitialized"
;;
--enable-profiling)
CXXFLAGS="$CXXFLAGS -pg"
LDFLAGS="$LDFLAGS -pg"
;;
--with-sdl-prefix=*)
arg=`echo $ac_option | cut -d '=' -f 2`
_sdlpath="$arg:$arg/bin"

Binary file not shown.

View file

@ -96,6 +96,9 @@
</Configuration>
</Configurations>
<Files>
<File
RelativePath="..\..\engines\parallaction\balloons.cpp">
</File>
<File
RelativePath="..\..\engines\parallaction\callables_br.cpp">
</File>
@ -123,6 +126,9 @@
<File
RelativePath="..\..\engines\parallaction\disk_ns.cpp">
</File>
<File
RelativePath="..\..\engines\parallaction\exec.h">
</File>
<File
RelativePath="..\..\engines\parallaction\exec_br.cpp">
</File>

View file

@ -395,18 +395,15 @@
<File
RelativePath="..\..\sound\midiparser_xmidi.cpp">
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp">
</File>
<File
RelativePath="..\..\sound\musicplugin.h">
</File>
<File
RelativePath="..\..\sound\mixer.cpp">
</File>
<File
RelativePath="..\..\sound\mixer.h">
</File>
<File
RelativePath="..\..\sound\mixer_intern.h">
</File>
<File
RelativePath="..\..\sound\mp3.cpp">
</File>
@ -419,6 +416,12 @@
<File
RelativePath="..\..\sound\mpu401.h">
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp">
</File>
<File
RelativePath="..\..\sound\musicplugin.h">
</File>
<File
RelativePath="..\..\sound\null.cpp">
</File>

View file

@ -110,6 +110,9 @@
<References>
</References>
<Files>
<File
RelativePath="..\..\engines\parallaction\balloons.cpp">
</File>
<File
RelativePath="..\..\engines\parallaction\callables_br.cpp">
</File>
@ -137,6 +140,9 @@
<File
RelativePath="..\..\engines\parallaction\disk_ns.cpp">
</File>
<File
RelativePath="..\..\engines\parallaction\exec.h">
</File>
<File
RelativePath="..\..\engines\parallaction\exec_br.cpp">
</File>

View file

@ -409,18 +409,15 @@
<File
RelativePath="..\..\sound\midiparser_xmidi.cpp">
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp">
</File>
<File
RelativePath="..\..\sound\musicplugin.h">
</File>
<File
RelativePath="..\..\sound\mixer.cpp">
</File>
<File
RelativePath="..\..\sound\mixer.h">
</File>
<File
RelativePath="..\..\sound\mixer_intern.h">
</File>
<File
RelativePath="..\..\sound\mp3.cpp">
</File>
@ -433,6 +430,12 @@
<File
RelativePath="..\..\sound\mpu401.h">
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp">
</File>
<File
RelativePath="..\..\sound\musicplugin.h">
</File>
<File
RelativePath="..\..\sound\null.cpp">
</File>

View file

@ -160,6 +160,10 @@
<References>
</References>
<Files>
<File
RelativePath="..\..\engines\parallaction\balloons.cpp"
>
</File>
<File
RelativePath="..\..\engines\parallaction\callables_br.cpp"
>
@ -196,6 +200,10 @@
RelativePath="..\..\engines\parallaction\disk_ns.cpp"
>
</File>
<File
RelativePath="..\..\engines\parallaction\exec.h"
>
</File>
<File
RelativePath="..\..\engines\parallaction\exec_br.cpp"
>

View file

@ -564,14 +564,6 @@
RelativePath="..\..\sound\midiparser_xmidi.cpp"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.h"
>
</File>
<File
RelativePath="..\..\sound\mixer.cpp"
>
@ -580,6 +572,10 @@
RelativePath="..\..\sound\mixer.h"
>
</File>
<File
RelativePath="..\..\sound\mixer_intern.h"
>
</File>
<File
RelativePath="..\..\sound\mp3.cpp"
>
@ -596,6 +592,14 @@
RelativePath="..\..\sound\mpu401.h"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.h"
>
</File>
<File
RelativePath="..\..\sound\null.cpp"
>

View file

@ -161,6 +161,10 @@
<References>
</References>
<Files>
<File
RelativePath="..\..\engines\parallaction\balloons.cpp"
>
</File>
<File
RelativePath="..\..\engines\parallaction\callables_br.cpp"
>
@ -197,6 +201,10 @@
RelativePath="..\..\engines\parallaction\disk_ns.cpp"
>
</File>
<File
RelativePath="..\..\engines\parallaction\exec.h"
>
</File>
<File
RelativePath="..\..\engines\parallaction\exec_br.cpp"
>

View file

@ -569,14 +569,6 @@
RelativePath="..\..\sound\midiparser_xmidi.cpp"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.h"
>
</File>
<File
RelativePath="..\..\sound\mixer.cpp"
>
@ -585,6 +577,10 @@
RelativePath="..\..\sound\mixer.h"
>
</File>
<File
RelativePath="..\..\sound\mixer_intern.h"
>
</File>
<File
RelativePath="..\..\sound\mp3.cpp"
>
@ -601,6 +597,14 @@
RelativePath="..\..\sound\mpu401.h"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.cpp"
>
</File>
<File
RelativePath="..\..\sound\musicplugin.h"
>
</File>
<File
RelativePath="..\..\sound\null.cpp"
>

View file

@ -63,6 +63,7 @@ void addSpriteFilledToBGList(int16 objIdx) {
void createBgIncrustListElement(int16 objIdx, int16 param) {
BGIncrust tmp;
tmp.unkPtr = 0;
tmp.objIdx = objIdx;
tmp.param = param;
tmp.x = objectTable[objIdx].x;
@ -90,6 +91,7 @@ void loadBgIncrustFromSave(Common::InSaveFile &fHandle) {
fHandle.readUint32BE();
fHandle.readUint32BE();
tmp.unkPtr = 0;
tmp.objIdx = fHandle.readUint16BE();
tmp.param = fHandle.readUint16BE();
tmp.x = fHandle.readUint16BE();

View file

@ -969,6 +969,7 @@ void OSRenderer::drawBackground() {
/*! \brief Draw one overlay
* \param it Overlay info
* \todo Add handling of type 22 overlays
*/
void OSRenderer::renderOverlay(const Common::List<overlay>::iterator &it) {
int len;
@ -979,6 +980,9 @@ void OSRenderer::renderOverlay(const Common::List<overlay>::iterator &it) {
switch (it->type) {
// color sprite
case 0:
if (objectTable[it->objIdx].frame < 0) {
break;
}
sprite = animDataTable + objectTable[it->objIdx].frame;
len = sprite->_realWidth * sprite->_height;
mask = new byte[len];
@ -988,6 +992,13 @@ void OSRenderer::renderOverlay(const Common::List<overlay>::iterator &it) {
delete[] mask;
break;
// bitmap
case 4:
if (objectTable[it->objIdx].frame >= 0) {
FWRenderer::renderOverlay(it);
}
break;
// masked background
case 20:
assert(it->objIdx < NUM_MAX_OBJECT);

View file

@ -228,6 +228,13 @@ void CineEngine::mainLoop(int bootScriptIdx) {
stopMusicAfterFadeOut();
di = executePlayerInput();
// Clear the zoneQuery table (Operation Stealth specific)
if (g_cine->getGameType() == Cine::GType_OS) {
for (uint i = 0; i < NUM_MAX_ZONE; i++) {
zoneQuery[i] = 0;
}
}
processSeqList();
executeList1();
executeList0();

View file

@ -99,21 +99,36 @@ int removeOverlay(uint16 objIdx, uint16 param) {
/*! \brief Add new overlay sprite to the list
* \param objIdx Associate the overlay with this object
* \param param Type of new overlay
* \param type Type of new overlay
* \todo Why are x, y, width and color left uninitialized?
*/
void addOverlay(uint16 objIdx, uint16 param) {
void addOverlay(uint16 objIdx, uint16 type) {
Common::List<overlay>::iterator it;
overlay tmp;
for (it = overlayList.begin(); it != overlayList.end(); ++it) {
// This is done for both Future Wars and Operation Stealth
if (objectTable[it->objIdx].mask >= objectTable[objIdx].mask) {
break;
}
// There are additional checks in Operation Stealth's implementation
if (g_cine->getGameType() == Cine::GType_OS && (it->type == 2 || it->type == 3)) {
break;
}
}
// In Operation Stealth's implementation we might bail out early
if (g_cine->getGameType() == Cine::GType_OS && it != overlayList.end() && it->objIdx == objIdx && it->type == type) {
return;
}
tmp.objIdx = objIdx;
tmp.type = param;
tmp.type = type;
tmp.x = 0;
tmp.y = 0;
tmp.width = 0;
tmp.color = 0;
overlayList.insert(it, tmp);
}
@ -122,24 +137,22 @@ void addOverlay(uint16 objIdx, uint16 param) {
* \param objIdx Associate the overlay with this object
* \param param source background index
*/
void addGfxElementA0(int16 objIdx, int16 param) {
void addGfxElement(int16 objIdx, int16 param, int16 type) {
Common::List<overlay>::iterator it;
overlay tmp;
for (it = overlayList.begin(); it != overlayList.end(); ++it) {
// wtf?!
if (objectTable[it->objIdx].mask == objectTable[objIdx].mask &&
(it->type == 2 || it->type == 3)) {
if (objectTable[it->objIdx].mask >= objectTable[objIdx].mask || it->type == 2 || it->type == 3) {
break;
}
}
if (it != overlayList.end() && it->objIdx == objIdx && it->type == 20 && it->x == param) {
if (it != overlayList.end() && it->objIdx == objIdx && it->type == type && it->x == param) {
return;
}
tmp.objIdx = objIdx;
tmp.type = 20;
tmp.type = type;
tmp.x = param;
tmp.y = 0;
tmp.width = 0;
@ -153,11 +166,11 @@ void addGfxElementA0(int16 objIdx, int16 param) {
* \param param Remove overlay using this background
* \todo Check that it works
*/
void removeGfxElementA0(int16 objIdx, int16 param) {
void removeGfxElement(int16 objIdx, int16 param, int16 type) {
Common::List<overlay>::iterator it;
for (it = overlayList.begin(); it != overlayList.end(); ++it) {
if (it->objIdx == objIdx && it->type == 20 && it->x == param) {
if (it->objIdx == objIdx && it->type == type && it->x == param) {
overlayList.erase(it);
return;
}
@ -170,10 +183,14 @@ void setupObject(byte objIdx, uint16 param1, uint16 param2, uint16 param3, uint1
objectTable[objIdx].mask = param3;
objectTable[objIdx].frame = param4;
if (g_cine->getGameType() == Cine::GType_OS) {
resetGfxEntityEntry(objIdx);
} else { // Future Wars
if (removeOverlay(objIdx, 0)) {
addOverlay(objIdx, 0);
}
}
}
void subObjectParam(byte objIdx, byte paramIdx, int16 newValue) {
addObjectParam(objIdx, paramIdx, -newValue);
@ -199,10 +216,13 @@ void modifyObjectParam(byte objIdx, byte paramIdx, int16 newValue) {
case 3:
objectTable[objIdx].mask = newValue;
// TODO: Check this part against disassembly
if (g_cine->getGameType() == Cine::GType_OS) { // Operation Stealth specific
resetGfxEntityEntry(objIdx);
} else { // Future Wars specific
if (removeOverlay(objIdx, 0)) {
addOverlay(objIdx, 0);
}
}
break;
case 4:
objectTable[objIdx].frame = newValue;
@ -221,6 +241,29 @@ void modifyObjectParam(byte objIdx, byte paramIdx, int16 newValue) {
}
}
/**
* Check if at least one of the range B's endpoints is inside range A,
* not counting the starting and ending points of range A.
* Used at least by Operation Stealth's opcode 0x8D i.e. 141.
*/
bool compareRanges(uint16 aStart, uint16 aEnd, uint16 bStart, uint16 bEnd) {
return (bStart > aStart && bStart < aEnd) || (bEnd > aStart && bEnd < aEnd);
}
uint16 compareObjectParamRanges(uint16 objIdx1, uint16 xAdd1, uint16 yAdd1, uint16 maskAdd1, uint16 objIdx2, uint16 xAdd2, uint16 yAdd2, uint16 maskAdd2) {
assert(objIdx1 < NUM_MAX_OBJECT && objIdx2 < NUM_MAX_OBJECT);
const objectStruct &obj1 = objectTable[objIdx1];
const objectStruct &obj2 = objectTable[objIdx2];
if (compareRanges(obj1.x, obj1.x + xAdd1, obj2.x, obj2.x + xAdd2) &&
compareRanges(obj1.y, obj1.y + yAdd1, obj2.y, obj2.y + yAdd2) &&
compareRanges(obj1.mask, obj1.mask + maskAdd1, obj2.mask, obj2.mask + maskAdd2)) {
return kCmpEQ;
} else {
return 0;
}
}
uint16 compareObjectParam(byte objIdx, byte type, int16 value) {
uint16 compareResult = 0;
int16 objectParam = getObjectParam(objIdx, type);

View file

@ -60,15 +60,17 @@ void loadObject(char *pObjectName);
void setupObject(byte objIdx, uint16 param1, uint16 param2, uint16 param3, uint16 param4);
void modifyObjectParam(byte objIdx, byte paramIdx, int16 newValue);
void addOverlay(uint16 objIdx, uint16 param);
void addOverlay(uint16 objIdx, uint16 type);
int removeOverlay(uint16 objIdx, uint16 param);
void addGfxElementA0(int16 objIdx, int16 param);
void removeGfxElementA0(int16 objIdx, int16 param);
void addGfxElement(int16 objIdx, int16 param, int16 type);
void removeGfxElement(int16 objIdx, int16 param, int16 type);
int16 getObjectParam(uint16 objIdx, uint16 paramIdx);
void addObjectParam(byte objIdx, byte paramIdx, int16 newValue);
void subObjectParam(byte objIdx, byte paramIdx, int16 newValue);
bool compareRanges(uint16 aStart, uint16 aEnd, uint16 bStart, uint16 bEnd);
uint16 compareObjectParamRanges(uint16 objIdx1, uint16 xAdd1, uint16 yAdd1, uint16 maskAdd1, uint16 objIdx2, uint16 xAdd2, uint16 yAdd2, uint16 maskAdd2);
uint16 compareObjectParam(byte objIdx, byte param1, int16 param2);
} // End of namespace Cine

View file

@ -237,7 +237,7 @@ protected:
int o2_playSample();
int o2_playSampleAlt();
int o2_op81();
int o2_op82();
int o2_modifySeqListElement();
int o2_isSeqRunning();
int o2_gotoIfSupNearest();
int o2_gotoIfSupEquNearest();
@ -258,10 +258,10 @@ protected:
int o2_useBgScroll();
int o2_setAdditionalBgVScroll();
int o2_op9F();
int o2_addGfxElementA0();
int o2_removeGfxElementA0();
int o2_opA2();
int o2_opA3();
int o2_addGfxElementType20();
int o2_removeGfxElementType20();
int o2_addGfxElementType21();
int o2_removeGfxElementType21();
int o2_loadMask22();
int o2_unloadMask22();

View file

@ -1764,18 +1764,32 @@ int16 checkCollision(int16 objIdx, int16 x, int16 y, int16 numZones, int16 zoneI
int16 lx = objectTable[objIdx].x + x;
int16 ly = objectTable[objIdx].y + y;
int16 idx;
int16 result = 0;
for (int16 i = 0; i < numZones; i++) {
idx = getZoneFromPositionRaw(page3Raw, lx + i, ly, 320);
assert(idx >= 0 && idx <= NUM_MAX_ZONE);
assert(idx >= 0 && idx < NUM_MAX_ZONE);
// The zoneQuery table is updated here only in Operation Stealth
if (g_cine->getGameType() == Cine::GType_OS) {
if (zoneData[idx] < NUM_MAX_ZONE) {
zoneQuery[zoneData[idx]]++;
}
}
if (zoneData[idx] == zoneIdx) {
return 1;
result = 1;
// Future Wars breaks out early on the first match, but
// Operation Stealth doesn't because it needs to update
// the zoneQuery table for the whole loop's period.
if (g_cine->getGameType() == Cine::GType_FW) {
break;
}
}
}
return 0;
return result;
}
uint16 compareVars(int16 a, int16 b) {

View file

@ -202,7 +202,7 @@ const Opcode OSScript::_opcodeTable[] = {
/* 80 */
{ &FWScript::o2_removeSeq, "bb" },
{ &FWScript::o2_op81, "" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_op82, "bbwwb" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_modifySeqListElement, "bbwwb" },
{ &FWScript::o2_isSeqRunning, "bb" },
/* 84 */
{ &FWScript::o2_gotoIfSupNearest, "b" },
@ -240,10 +240,10 @@ const Opcode OSScript::_opcodeTable[] = {
{ &FWScript::o2_setAdditionalBgVScroll, "c" },
{ &FWScript::o2_op9F, "ww" }, /* TODO: Name this opcode properly. */
/* A0 */
{ &FWScript::o2_addGfxElementA0, "ww" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_removeGfxElementA0, "ww" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_opA2, "ww" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_opA3, "ww" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_addGfxElementType20, "ww" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_removeGfxElementType20, "ww" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_addGfxElementType21, "ww" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_removeGfxElementType21, "ww" }, /* TODO: Name this opcode properly. */
/* A4 */
{ &FWScript::o2_loadMask22, "b" }, /* TODO: Name this opcode properly. */
{ &FWScript::o2_unloadMask22, "b" }, /* TODO: Name this opcode properly. */
@ -442,6 +442,7 @@ int FWScript::o2_removeSeq() {
}
/*! \todo Implement this instruction
* \note According to the scripts' opcode usage comparison this opcode isn't used at all.
*/
int FWScript::o2_op81() {
warning("STUB: o2_op81()");
@ -449,23 +450,25 @@ int FWScript::o2_op81() {
return 0;
}
/*! \todo Implement this instruction
*/
int FWScript::o2_op82() {
int FWScript::o2_modifySeqListElement() {
byte a = getNextByte();
byte b = getNextByte();
uint16 c = getNextWord();
uint16 d = getNextWord();
byte e = getNextByte();
warning("STUB: o2_op82(%x, %x, %x, %x, %x)", a, b, c, d, e);
debugC(5, kCineDebugScript, "Line: %d: o2_modifySeqListElement(%d,%d,%d,%d,%d)", _line, a, b, c, d, e);
modifySeqListElement(a, 0, b, c, d, e);
return 0;
}
/*! \todo Check whether this opcode's name is backwards (i.e. should it be o2_isSeqNotRunning?)
*/
int FWScript::o2_isSeqRunning() {
byte a = getNextByte();
byte b = getNextByte();
debugC(5, kCineDebugScript, "Line: %d: OP83(%d,%d) -> TODO", _line, a, b);
debugC(5, kCineDebugScript, "Line: %d: o2_isSeqRunning(%d,%d)", _line, a, b);
if (isSeqRunning(a, 0, b)) {
_compare = 1;
@ -593,19 +596,18 @@ int FWScript::o2_stopObjectScript() {
return 0;
}
/*! \todo Implement this instruction
*/
int FWScript::o2_op8D() {
uint16 a = getNextWord();
uint16 b = getNextWord();
uint16 c = getNextWord();
uint16 d = getNextWord();
uint16 e = getNextWord();
uint16 f = getNextWord();
uint16 g = getNextWord();
uint16 h = getNextWord();
warning("STUB: o2_op8D(%x, %x, %x, %x, %x, %x, %x, %x)", a, b, c, d, e, f, g, h);
// _currentScriptElement->compareResult = ...
uint16 objIdx1 = getNextWord();
uint16 xAdd1 = getNextWord();
uint16 yAdd1 = getNextWord();
uint16 maskAdd1 = getNextWord();
uint16 objIdx2 = getNextWord();
uint16 xAdd2 = getNextWord();
uint16 yAdd2 = getNextWord();
uint16 maskAdd2 = getNextWord();
debugC(5, kCineDebugScript, "Line: %d: o2_op8D(%d, %d, %d, %d, %d, %d, %d, %d)", _line, objIdx1, xAdd1, yAdd1, maskAdd1, objIdx2, xAdd2, yAdd2, maskAdd2);
_compare = compareObjectParamRanges(objIdx1, xAdd1, yAdd1, maskAdd1, objIdx2, xAdd2, yAdd2, maskAdd2);
return 0;
}
@ -649,16 +651,15 @@ int FWScript::o2_loadBg() {
return 0;
}
/*! \todo Check the current implementation for correctness
*/
int FWScript::o2_wasZoneChecked() {
byte param = getNextByte();
_compare = (param < 16 && zoneData[param]);
_compare = (param < NUM_MAX_ZONE && zoneQuery[param]) ? 1 : 0;
debugC(5, kCineDebugScript, "Line: %d: o2_wasZoneChecked(%d)", _line, param);
return 0;
}
/*! \todo Implement this instruction
* \note According to the scripts' opcode usage comparison this opcode isn't used at all.
*/
int FWScript::o2_op9B() {
uint16 a = getNextWord();
@ -674,6 +675,7 @@ int FWScript::o2_op9B() {
}
/*! \todo Implement this instruction
* \note According to the scripts' opcode usage comparison this opcode isn't used at all.
*/
int FWScript::o2_op9C() {
uint16 a = getNextWord();
@ -713,6 +715,7 @@ int FWScript::o2_setAdditionalBgVScroll() {
}
/*! \todo Implement this instruction
* \note According to the scripts' opcode usage comparison this opcode isn't used at all.
*/
int FWScript::o2_op9F() {
warning("o2_op9F()");
@ -721,42 +724,36 @@ int FWScript::o2_op9F() {
return 0;
}
int FWScript::o2_addGfxElementA0() {
int FWScript::o2_addGfxElementType20() {
uint16 param1 = getNextWord();
uint16 param2 = getNextWord();
debugC(5, kCineDebugScript, "Line: %d: addGfxElementA0(%d,%d)", _line, param1, param2);
addGfxElementA0(param1, param2);
debugC(5, kCineDebugScript, "Line: %d: o2_addGfxElementType20(%d,%d)", _line, param1, param2);
addGfxElement(param1, param2, 20);
return 0;
}
/*! \todo Implement this instruction
*/
int FWScript::o2_removeGfxElementA0() {
int FWScript::o2_removeGfxElementType20() {
uint16 idx = getNextWord();
uint16 param = getNextWord();
warning("STUB? o2_removeGfxElementA0(%x, %x)", idx, param);
removeGfxElementA0(idx, param);
debugC(5, kCineDebugScript, "Line: %d: o2_removeGfxElementType20(%d,%d)", _line, idx, param);
removeGfxElement(idx, param, 20);
return 0;
}
/*! \todo Implement this instruction
*/
int FWScript::o2_opA2() {
int FWScript::o2_addGfxElementType21() {
uint16 a = getNextWord();
uint16 b = getNextWord();
warning("STUB: o2_opA2(%x, %x)", a, b);
// addGfxElementA2();
debugC(5, kCineDebugScript, "Line: %d: o2_addGfxElementType21(%d,%d)", _line, a, b);
addGfxElement(a, b, 21);
return 0;
}
/*! \todo Implement this instruction
*/
int FWScript::o2_opA3() {
int FWScript::o2_removeGfxElementType21() {
uint16 a = getNextWord();
uint16 b = getNextWord();
warning("STUB: o2_opA3(%x, %x)", a, b);
// removeGfxElementA2();
debugC(5, kCineDebugScript, "Line: %d: o2_removeGfxElementType21(%d,%d)", _line, a, b);
removeGfxElement(a, b, 21);
return 0;
}

View file

@ -94,6 +94,9 @@ int16 saveVar2;
byte isInPause = 0;
// TODO: Implement inputVar0's changes in the program
// Currently inputVar0 isn't updated anywhere even though it's used at least in processSeqListElement.
uint16 inputVar0 = 0;
byte inputVar1 = 0;
uint16 inputVar2 = 0, inputVar3 = 0;
@ -110,6 +113,7 @@ CommandeType objectListCommand[20];
int16 objListTab[20];
uint16 zoneData[NUM_MAX_ZONE];
uint16 zoneQuery[NUM_MAX_ZONE]; //!< Only exists in Operation Stealth
void stopMusicAfterFadeOut(void) {
@ -130,6 +134,7 @@ void runObjectScript(int16 entryIdx) {
*/
void addPlayerCommandMessage(int16 cmd) {
overlay tmp;
memset(&tmp, 0, sizeof(tmp));
tmp.objIdx = cmd;
tmp.type = 3;
@ -389,6 +394,7 @@ bool brokenSave(Common::InSaveFile &fHandle) {
}
/*! \todo Implement Operation Stealth loading, this is obviously Future Wars only
* \todo Add support for loading the zoneQuery table (Operation Stealth specific)
*/
bool CineEngine::makeLoad(char *saveName) {
int16 i;
@ -586,6 +592,8 @@ bool CineEngine::makeLoad(char *saveName) {
return true;
}
/*! \todo Add support for saving the zoneQuery table (Operation Stealth specific)
*/
void makeSave(char *saveFileName) {
int16 i;
Common::OutSaveFile *fHandle;
@ -1580,16 +1588,19 @@ void removeSeq(uint16 param1, uint16 param2, uint16 param3) {
}
}
uint16 isSeqRunning(uint16 param1, uint16 param2, uint16 param3) {
bool isSeqRunning(uint16 param1, uint16 param2, uint16 param3) {
Common::List<SeqListElement>::iterator it;
for (it = seqList.begin(); it != seqList.end(); ++it) {
if (it->objIdx == param1 && it->var4 == param2 && it->varE == param3) {
return 1;
// Just to be on the safe side there's a restriction of the
// addition's result to 16-bit arithmetic here like in the
// original. It's possible that it's not strictly needed.
return ((it->var14 + it->var16) & 0xFFFF) == 0;
}
}
return 0;
return true;
}
void addSeqListElement(uint16 objIdx, int16 param1, int16 param2, int16 frame, int16 param4, int16 param5, int16 param6, int16 param7, int16 param8) {
@ -1616,6 +1627,19 @@ void addSeqListElement(uint16 objIdx, int16 param1, int16 param2, int16 frame, i
seqList.insert(it, tmp);
}
void modifySeqListElement(uint16 objIdx, int16 var4Test, int16 param1, int16 param2, int16 param3, int16 param4) {
// Find a suitable list element and modify it
for (Common::List<SeqListElement>::iterator it = seqList.begin(); it != seqList.end(); ++it) {
if (it->objIdx == objIdx && it->var4 == var4Test) {
it->varC = param1;
it->var18 = param2;
it->var1A = param3;
it->var10 = it->var12 = param4;
break;
}
}
}
void computeMove1(SeqListElement &element, int16 x, int16 y, int16 param1,
int16 param2, int16 x2, int16 y2) {
element.var16 = 0;
@ -1660,105 +1684,48 @@ uint16 computeMove2(SeqListElement &element) {
return returnVar;
}
// sort all the gfx stuff...
void resetGfxEntityEntry(uint16 objIdx) {
#if 0
overlayHeadElement* tempHead = &overlayHead;
byte* var_16 = NULL;
uint16 var_10 = 0;
uint16 var_12 = 0;
overlayHeadElement* currentHead = tempHead->next;
byte* var_1A = NULL;
overlayHeadElement* var1E = &overlayHead;
while (currentHead) {
tempHead2 = currentHead->next;
if (currentHead->objIdx == objIdx && currentHead->type!=2 && currentHead->type!=3 && currentHead->type!=0x14) {
tempHead->next = tempHead2;
if (tempHead2) {
tempHead2->previous = currentHead->previous;
} else {
seqVar0 = currentHead->previous;
}
var_22 = var_16;
if (!var_22) {
// todo: goto?
}
var_22->previous = currentHead;
} else {
}
if (currentHead->type == 0x14) {
} else {
}
if (currentHead->type == 0x2 || currentHead->type == 0x3) {
si = 10000;
} else {
si = objectTable[currentHead->objIdx];
}
if (objectTable[objIdx]>si) {
var1E = currentHead;
}
tempHead = tempHead->next;
}
if (var_1A) {
currentHead = var_16;
var_22 = var_1E->next;
var_1E->next = currentHead;
var_1A->next = var_22;
if (var_1E != &gfxEntityHead) {
currentHead->previous = var_1E;
}
if (!var_22) {
seqVar0 = var_1A;
} else {
var_22->previous = var_1A;
}
}
#endif
}
uint16 addAni(uint16 param1, uint16 objIdx, const byte *ptr, SeqListElement &element, uint16 param3, int16 *param4) {
const byte *currentPtr = ptr;
const byte *ptrData;
const byte *ptr2;
uint16 addAni(uint16 param1, uint16 objIdx, const int8 *ptr, SeqListElement &element, uint16 param3, int16 *param4) {
const int8 *ptrData;
const int8 *ptr2;
int16 di;
// In the original an error string is set and 0 is returned if the following doesn't hold
assert(ptr);
assert(param4);
dummyU16 = READ_BE_UINT16((currentPtr + param1 * 2) + 8);
// We probably could just use a local variable here instead of the dummyU16 but
// haven't checked if this has any side-effects so keeping it this way still.
dummyU16 = READ_BE_UINT16(ptr + param1 * 2 + 8);
ptrData = ptr + dummyU16;
// In the original an error string is set and 0 is returned if the following doesn't hold
assert(*ptrData);
di = (objectTable[objIdx].costume + 1) % (*ptrData);
ptr2 = (ptrData + (di * 8)) + 1;
++ptrData; // Jump over the just read byte
// Here ptr2 seems to be indexing a table of structs (8 bytes per struct):
// struct {
// int8 x; // 0 (Used with checkCollision)
// int8 y; // 1 (Used with checkCollision)
// int8 numZones; // 2 (Used with checkCollision)
// int8 var3; // 3 (Not used in this function)
// int8 xAdd; // 4 (Used with an object)
// int8 yAdd; // 5 (Used with an object)
// int8 maskAdd; // 6 (Used with an object)
// int8 frameAdd; // 7 (Used with an object)
// };
ptr2 = ptrData + di * 8;
// We might probably safely discard the AND by 1 here because
// at least in the original checkCollision returns always 0 or 1.
if ((checkCollision(objIdx, ptr2[0], ptr2[1], ptr2[2], ptr[0]) & 1)) {
return 0;
}
objectTable[objIdx].x += (int8)ptr2[4];
objectTable[objIdx].y += (int8)ptr2[5];
objectTable[objIdx].mask += (int8)ptr2[6];
objectTable[objIdx].x += ptr2[4];
objectTable[objIdx].y += ptr2[5];
objectTable[objIdx].mask += ptr2[6];
if (objectTable[objIdx].frame) {
if (ptr2[6]) {
resetGfxEntityEntry(objIdx);
}
@ -1767,16 +1734,63 @@ uint16 addAni(uint16 param1, uint16 objIdx, const byte *ptr, SeqListElement &ele
if (param3 || !element.var14) {
objectTable[objIdx].costume = di;
} else {
assert(param4);
*param4 = di;
}
return 1;
}
/*!
* Permutates the overlay list into a different order according to some logic.
* \todo Check this function for correctness (Wasn't very easy to reverse engineer so there may be errors)
*/
void resetGfxEntityEntry(uint16 objIdx) {
Common::List<overlay>::iterator it, bObjsCutPoint;
Common::List<overlay> aReverseObjs, bObjs;
bool foundCutPoint = false;
// Go through the overlay list and partition the whole list into two categories (Type A and type B objects)
for (it = overlayList.begin(); it != overlayList.end(); ++it) {
if (it->objIdx == objIdx && it->type != 2 && it->type != 3) { // Type A object
aReverseObjs.push_front(*it);
} else { // Type B object
bObjs.push_back(*it);
uint16 objectMask;
if (it->type == 2 || it->type == 3) {
objectMask = 10000;
} else {
objectMask = objectTable[it->objIdx].mask;
}
if (objectTable[objIdx].mask > objectMask) { // Check for B objects' cut point
bObjsCutPoint = bObjs.reverse_begin();
foundCutPoint = true;
}
}
}
// Recreate the overlay list in a different order.
overlayList.clear();
if (foundCutPoint) {
// If a cut point was found the order is:
// B objects before the cut point, the cut point, A objects in reverse order, B objects after cut point.
++bObjsCutPoint; // Include the cut point in the first list insertion
overlayList.insert(overlayList.end(), bObjs.begin(), bObjsCutPoint);
overlayList.insert(overlayList.end(), aReverseObjs.begin(), aReverseObjs.end());
overlayList.insert(overlayList.end(), bObjsCutPoint, bObjs.end());
} else {
// If no cut point was found the order is:
// A objects in reverse order, B objects.
overlayList.insert(overlayList.end(), aReverseObjs.begin(), aReverseObjs.end());
overlayList.insert(overlayList.end(), bObjs.begin(), bObjs.end());
}
}
void processSeqListElement(SeqListElement &element) {
int16 x = objectTable[element.objIdx].x;
int16 y = objectTable[element.objIdx].y;
const byte *ptr1 = animDataTable[element.frame].data();
const int8 *ptr1 = (const int8 *) animDataTable[element.frame].data();
int16 var_10;
int16 var_4;
int16 var_2;
@ -1789,15 +1803,36 @@ void processSeqListElement(SeqListElement &element) {
element.var12 = 0;
if (ptr1) {
uint16 param1 = ptr1[1];
uint16 param2 = ptr1[2];
int16 param1 = ptr1[1];
int16 param2 = ptr1[2];
if (element.varC != 255) {
// FIXME: Why is this here? Fingolfin gets lots of these
// in his copy of Operation Stealth (value 0 or 236) under
// Mac OS X. Maybe it's a endian issue? At least the graphics
// in the copy protection screen are partially messed up.
warning("processSeqListElement: varC = %d", element.varC);
int16 x2 = element.var18;
int16 y2 = element.var1A;
if (element.varC) {
x2 += objectTable[element.varC].x;
y2 += objectTable[element.varC].y;
}
computeMove1(element, ptr1[4] + x, ptr1[5] + y, param1, param2, x2, y2);
} else {
if (inputVar0 && allowPlayerInput) {
int16 adder = param1 + 1;
if (inputVar0 != 1) {
adder = -adder;
}
// FIXME: In Operation Stealth's disassembly global variable 251 is used here
// but it's named as VAR_MOUSE_Y_MODE in ScummVM. Is it correct or a
// left over from Future Wars's reverse engineering?
globalVars[VAR_MOUSE_X_POS] = globalVars[251] = ptr1[4] + x + adder;
}
if (inputVar1 && allowPlayerInput) {
int16 adder = param2 + 1;
if (inputVar1 != 1) {
adder = -adder;
}
// TODO: Name currently unnamed global variable 252
globalVars[VAR_MOUSE_Y_POS] = globalVars[252] = ptr1[5] + y + adder;
}
if (globalVars[VAR_MOUSE_X_POS] || globalVars[VAR_MOUSE_Y_POS]) {
@ -1806,6 +1841,7 @@ void processSeqListElement(SeqListElement &element) {
element.var16 = 0;
element.var14 = 0;
}
}
var_10 = computeMove2(element);
@ -1845,14 +1881,14 @@ void processSeqListElement(SeqListElement &element) {
}
}
if (element.var16 + element.var14) {
if (element.var16 + element.var14 == 0) {
if (element.var1C) {
if (element.var1E) {
objectTable[element.objIdx].costume = 0;
element.var1E = 0;
}
addAni(element.var1C + 3, element.objIdx, ptr1, element, 1, (int16 *) & var2);
addAni(element.var1C + 3, element.objIdx, ptr1, element, 1, &var_2);
}
}

View file

@ -128,16 +128,20 @@ struct SelectedObjStruct {
#define NUM_MAX_ZONE 16
extern uint16 zoneData[NUM_MAX_ZONE];
extern uint16 zoneQuery[NUM_MAX_ZONE];
void addMessage(byte param1, int16 param2, int16 param3, int16 param4, int16 param5);
void removeMessages();
void removeSeq(uint16 param1, uint16 param2, uint16 param3);
uint16 isSeqRunning(uint16 param1, uint16 param2, uint16 param3);
bool isSeqRunning(uint16 param1, uint16 param2, uint16 param3);
void addSeqListElement(uint16 objIdx, int16 param1, int16 param2, int16 frame, int16 param4, int16 param5, int16 param6, int16 param7, int16 param8);
void modifySeqListElement(uint16 objIdx, int16 var4Test, int16 param1, int16 param2, int16 param3, int16 param4);
void processSeqList(void);
void resetGfxEntityEntry(uint16 objIdx);
bool makeTextEntryMenu(const char *caption, char *string, int strLen, int y);
} // End of namespace Cine

View file

@ -28,7 +28,7 @@
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <assert.h> // FIXME: WINCE: this is not needed/not portable (probably applies to all above includes)
#include "common/scummsys.h"

View file

@ -372,7 +372,11 @@ void DrasculaEngine::animation_1_1() {
break;
clearRoom();
if (_lang == kSpanish)
playMusic(31);
else
playMusic(2);
pause(5);
playFLI("intro.bin", 12);
term_int = 1;

View file

@ -328,7 +328,7 @@ public:
int curHeight, curWidth, feetHeight;
int talkHeight, talkWidth;
int floorX1, floorY1, floorX2, floorY2;
int near, far;
int lowerLimit, upperLimit;
int trackFinal, walkToObject;
int objExit;
int timeDiff, startTime;

View file

@ -1672,8 +1672,8 @@ void DrasculaEngine::enterRoom(int roomIndex) {
getIntFromLine(buffer, size, &floorY2);
if (currentChapter != 2) {
getIntFromLine(buffer, size, &far);
getIntFromLine(buffer, size, &near);
getIntFromLine(buffer, size, &upperLimit);
getIntFromLine(buffer, size, &lowerLimit);
}
_arj.close();
@ -1732,27 +1732,27 @@ void DrasculaEngine::enterRoom(int roomIndex) {
if (currentChapter != 2) {
for (l = 0; l <= floorY1; l++)
factor_red[l] = far;
factor_red[l] = upperLimit;
for (l = floorY1; l <= 201; l++)
factor_red[l] = near;
factor_red[l] = lowerLimit;
chiquez = (float)(near - far) / (float)(floorY2 - floorY1);
chiquez = (float)(lowerLimit - upperLimit) / (float)(floorY2 - floorY1);
for (l = floorY1; l <= floorY2; l++) {
factor_red[l] = (int)(far + pequegnez);
factor_red[l] = (int)(upperLimit + pequegnez);
pequegnez = pequegnez + chiquez;
}
}
if (roomNumber == 24) {
for (l = floorY1 - 1; l > 74; l--) {
factor_red[l] = (int)(far - pequegnez);
factor_red[l] = (int)(upperLimit - pequegnez);
pequegnez = pequegnez + chiquez;
}
}
if (currentChapter == 5 && roomNumber == 54) {
for (l = floorY1 - 1; l > 84; l--) {
factor_red[l] = (int)(far - pequegnez);
factor_red[l] = (int)(upperLimit - pequegnez);
pequegnez = pequegnez + chiquez;
}
}

View file

@ -60,7 +60,7 @@ void DrasculaEngine::talk_igor(int index, int talkerType) {
int x_talk1[8] = { 56, 86, 116, 146, 176, 206, 236, 266 };
int x_talk3[4] = { 80, 102, 124, 146 };
int x_talk4[4] = { 119, 158, 197, 236 };
int face;
int face = 0;
int length = strlen(said);
color_abc(kColorWhite);

View file

@ -277,6 +277,19 @@ static const GOBGameDescription gameDescriptions[] = {
kFeaturesNone,
"intro"
},
{ // Supplied by raina in the forums
{
"gob1",
"",
AD_ENTRY1s("intro.stk", "6d837c6380d8f4d984c9f6cc0026df4f", 192712),
EN_ANY,
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
kGameTypeGob1,
kFeaturesNone,
"intro"
},
{ // Supplied by paul66 in bug report #1652352
{
"gob1",

View file

@ -112,7 +112,7 @@ void VGAVideoDriver::drawSprite(SurfaceDesc *source, SurfaceDesc *dest,
if ((width < 1) || (height < 1))
return;
byte *srcPos = source->getVidMem() + (top * source->getWidth()) + left;
const byte *srcPos = source->getVidMem() + (top * source->getWidth()) + left;
byte *destPos = dest->getVidMem() + (y * dest->getWidth()) + x;
uint32 size = width * height;

View file

@ -78,58 +78,6 @@ Goblin::Goblin(GobEngine *vm) : _vm(vm) {
_pressedMapY = 0;
_pathExistence = 0;
_some0ValPtr = 0;
_gobRetVarPtr = 0;
_curGobVarPtr = 0;
_curGobXPosVarPtr = 0;
_curGobYPosVarPtr = 0;
_itemInPocketVarPtr = 0;
_curGobStateVarPtr = 0;
_curGobFrameVarPtr = 0;
_curGobMultStateVarPtr = 0;
_curGobNextStateVarPtr = 0;
_curGobScrXVarPtr = 0;
_curGobScrYVarPtr = 0;
_curGobLeftVarPtr = 0;
_curGobTopVarPtr = 0;
_curGobRightVarPtr = 0;
_curGobBottomVarPtr = 0;
_curGobDoAnimVarPtr = 0;
_curGobOrderVarPtr = 0;
_curGobNoTickVarPtr = 0;
_curGobTypeVarPtr = 0;
_curGobMaxTickVarPtr = 0;
_curGobTickVarPtr = 0;
_curGobActStartStateVarPtr = 0;
_curGobLookDirVarPtr = 0;
_curGobPickableVarPtr = 0;
_curGobRelaxVarPtr = 0;
_curGobMaxFrameVarPtr = 0;
_destItemStateVarPtr = 0;
_destItemFrameVarPtr = 0;
_destItemMultStateVarPtr = 0;
_destItemNextStateVarPtr = 0;
_destItemScrXVarPtr = 0;
_destItemScrYVarPtr = 0;
_destItemLeftVarPtr = 0;
_destItemTopVarPtr = 0;
_destItemRightVarPtr = 0;
_destItemBottomVarPtr = 0;
_destItemDoAnimVarPtr = 0;
_destItemOrderVarPtr = 0;
_destItemNoTickVarPtr = 0;
_destItemTypeVarPtr = 0;
_destItemMaxTickVarPtr = 0;
_destItemTickVarPtr = 0;
_destItemActStartStVarPtr = 0;
_destItemLookDirVarPtr = 0;
_destItemPickableVarPtr = 0;
_destItemRelaxVarPtr = 0;
_destItemMaxFrameVarPtr = 0;
_destItemType = 0;
_destItemState = 0;
for (int i = 0; i < 20; i++) {
@ -690,7 +638,7 @@ void Goblin::switchGoblin(int16 index) {
_gobDestY = tmp;
_vm->_map->_curGoblinY = tmp;
*_curGobVarPtr = _currentGoblin;
_curGobVarPtr = (uint32) _currentGoblin;
_pathExistence = 0;
_readyToAct = 0;
}
@ -1250,172 +1198,172 @@ void Goblin::loadObjects(const char *source) {
void Goblin::saveGobDataToVars(int16 xPos, int16 yPos, int16 someVal) {
Gob_Object *obj;
*_some0ValPtr = someVal;
*_curGobXPosVarPtr = xPos;
*_curGobYPosVarPtr = yPos;
*_itemInPocketVarPtr = _itemIndInPocket;
_some0ValPtr = (uint32) someVal;
_curGobXPosVarPtr = (uint32) xPos;
_curGobYPosVarPtr = (uint32) yPos;
_itemInPocketVarPtr = (uint32) _itemIndInPocket;
obj = _goblins[_currentGoblin];
*_curGobStateVarPtr = obj->state;
*_curGobFrameVarPtr = obj->curFrame;
*_curGobMultStateVarPtr = obj->multState;
*_curGobNextStateVarPtr = obj->nextState;
*_curGobScrXVarPtr = obj->xPos;
*_curGobScrYVarPtr = obj->yPos;
*_curGobLeftVarPtr = obj->left;
*_curGobTopVarPtr = obj->top;
*_curGobRightVarPtr = obj->right;
*_curGobBottomVarPtr = obj->bottom;
*_curGobDoAnimVarPtr = obj->doAnim;
*_curGobOrderVarPtr = obj->order;
*_curGobNoTickVarPtr = obj->noTick;
*_curGobTypeVarPtr = obj->type;
*_curGobMaxTickVarPtr = obj->maxTick;
*_curGobTickVarPtr = obj->tick;
*_curGobActStartStateVarPtr = obj->actionStartState;
*_curGobLookDirVarPtr = obj->curLookDir;
*_curGobPickableVarPtr = obj->pickable;
*_curGobRelaxVarPtr = obj->relaxTime;
*_curGobMaxFrameVarPtr = getObjMaxFrame(obj);
_curGobStateVarPtr = (uint32) obj->state;
_curGobFrameVarPtr = (uint32) obj->curFrame;
_curGobMultStateVarPtr = (uint32) obj->multState;
_curGobNextStateVarPtr = (uint32) obj->nextState;
_curGobScrXVarPtr = (uint32) obj->xPos;
_curGobScrYVarPtr = (uint32) obj->yPos;
_curGobLeftVarPtr = (uint32) obj->left;
_curGobTopVarPtr = (uint32) obj->top;
_curGobRightVarPtr = (uint32) obj->right;
_curGobBottomVarPtr = (uint32) obj->bottom;
_curGobDoAnimVarPtr = (uint32) obj->doAnim;
_curGobOrderVarPtr = (uint32) obj->order;
_curGobNoTickVarPtr = (uint32) obj->noTick;
_curGobTypeVarPtr = (uint32) obj->type;
_curGobMaxTickVarPtr = (uint32) obj->maxTick;
_curGobTickVarPtr = (uint32) obj->tick;
_curGobActStartStateVarPtr = (uint32) obj->actionStartState;
_curGobLookDirVarPtr = (uint32) obj->curLookDir;
_curGobPickableVarPtr = (uint32) obj->pickable;
_curGobRelaxVarPtr = (uint32) obj->relaxTime;
_curGobMaxFrameVarPtr = (uint32) getObjMaxFrame(obj);
if (_actDestItemDesc == 0)
return;
obj = _actDestItemDesc;
*_destItemStateVarPtr = obj->state;
*_destItemFrameVarPtr = obj->curFrame;
*_destItemMultStateVarPtr = obj->multState;
*_destItemNextStateVarPtr = obj->nextState;
*_destItemScrXVarPtr = obj->xPos;
*_destItemScrYVarPtr = obj->yPos;
*_destItemLeftVarPtr = obj->left;
*_destItemTopVarPtr = obj->top;
*_destItemRightVarPtr = obj->right;
*_destItemBottomVarPtr = obj->bottom;
*_destItemDoAnimVarPtr = obj->doAnim;
*_destItemOrderVarPtr = obj->order;
*_destItemNoTickVarPtr = obj->noTick;
*_destItemTypeVarPtr = obj->type;
*_destItemMaxTickVarPtr = obj->maxTick;
*_destItemTickVarPtr = obj->tick;
*_destItemActStartStVarPtr = obj->actionStartState;
*_destItemLookDirVarPtr = obj->curLookDir;
*_destItemPickableVarPtr = obj->pickable;
*_destItemRelaxVarPtr = obj->relaxTime;
*_destItemMaxFrameVarPtr = getObjMaxFrame(obj);
_destItemStateVarPtr = (uint32) obj->state;
_destItemFrameVarPtr = (uint32) obj->curFrame;
_destItemMultStateVarPtr = (uint32) obj->multState;
_destItemNextStateVarPtr = (uint32) obj->nextState;
_destItemScrXVarPtr = (uint32) obj->xPos;
_destItemScrYVarPtr = (uint32) obj->yPos;
_destItemLeftVarPtr = (uint32) obj->left;
_destItemTopVarPtr = (uint32) obj->top;
_destItemRightVarPtr = (uint32) obj->right;
_destItemBottomVarPtr = (uint32) obj->bottom;
_destItemDoAnimVarPtr = (uint32) obj->doAnim;
_destItemOrderVarPtr = (uint32) obj->order;
_destItemNoTickVarPtr = (uint32) obj->noTick;
_destItemTypeVarPtr = (uint32) obj->type;
_destItemMaxTickVarPtr = (uint32) obj->maxTick;
_destItemTickVarPtr = (uint32) obj->tick;
_destItemActStartStVarPtr = (uint32) obj->actionStartState;
_destItemLookDirVarPtr = (uint32) obj->curLookDir;
_destItemPickableVarPtr = (uint32) obj->pickable;
_destItemRelaxVarPtr = (uint32) obj->relaxTime;
_destItemMaxFrameVarPtr = (uint32) getObjMaxFrame(obj);
_destItemState = obj->state;
_destItemType = obj->type;
}
void Goblin::initVarPointers(void) {
_gobRetVarPtr = (int32 *)VAR_ADDRESS(59);
_curGobStateVarPtr = (int32 *)VAR_ADDRESS(60);
_curGobFrameVarPtr = (int32 *)VAR_ADDRESS(61);
_curGobMultStateVarPtr = (int32 *)VAR_ADDRESS(62);
_curGobNextStateVarPtr = (int32 *)VAR_ADDRESS(63);
_curGobScrXVarPtr = (int32 *)VAR_ADDRESS(64);
_curGobScrYVarPtr = (int32 *)VAR_ADDRESS(65);
_curGobLeftVarPtr = (int32 *)VAR_ADDRESS(66);
_curGobTopVarPtr = (int32 *)VAR_ADDRESS(67);
_curGobRightVarPtr = (int32 *)VAR_ADDRESS(68);
_curGobBottomVarPtr = (int32 *)VAR_ADDRESS(69);
_curGobDoAnimVarPtr = (int32 *)VAR_ADDRESS(70);
_curGobOrderVarPtr = (int32 *)VAR_ADDRESS(71);
_curGobNoTickVarPtr = (int32 *)VAR_ADDRESS(72);
_curGobTypeVarPtr = (int32 *)VAR_ADDRESS(73);
_curGobMaxTickVarPtr = (int32 *)VAR_ADDRESS(74);
_curGobTickVarPtr = (int32 *)VAR_ADDRESS(75);
_curGobActStartStateVarPtr = (int32 *)VAR_ADDRESS(76);
_curGobLookDirVarPtr = (int32 *)VAR_ADDRESS(77);
_curGobPickableVarPtr = (int32 *)VAR_ADDRESS(80);
_curGobRelaxVarPtr = (int32 *)VAR_ADDRESS(81);
_destItemStateVarPtr = (int32 *)VAR_ADDRESS(82);
_destItemFrameVarPtr = (int32 *)VAR_ADDRESS(83);
_destItemMultStateVarPtr = (int32 *)VAR_ADDRESS(84);
_destItemNextStateVarPtr = (int32 *)VAR_ADDRESS(85);
_destItemScrXVarPtr = (int32 *)VAR_ADDRESS(86);
_destItemScrYVarPtr = (int32 *)VAR_ADDRESS(87);
_destItemLeftVarPtr = (int32 *)VAR_ADDRESS(88);
_destItemTopVarPtr = (int32 *)VAR_ADDRESS(89);
_destItemRightVarPtr = (int32 *)VAR_ADDRESS(90);
_destItemBottomVarPtr = (int32 *)VAR_ADDRESS(91);
_destItemDoAnimVarPtr = (int32 *)VAR_ADDRESS(92);
_destItemOrderVarPtr = (int32 *)VAR_ADDRESS(93);
_destItemNoTickVarPtr = (int32 *)VAR_ADDRESS(94);
_destItemTypeVarPtr = (int32 *)VAR_ADDRESS(95);
_destItemMaxTickVarPtr = (int32 *)VAR_ADDRESS(96);
_destItemTickVarPtr = (int32 *)VAR_ADDRESS(97);
_destItemActStartStVarPtr = (int32 *)VAR_ADDRESS(98);
_destItemLookDirVarPtr = (int32 *)VAR_ADDRESS(99);
_destItemPickableVarPtr = (int32 *)VAR_ADDRESS(102);
_destItemRelaxVarPtr = (int32 *)VAR_ADDRESS(103);
_destItemMaxFrameVarPtr = (int32 *)VAR_ADDRESS(105);
_curGobVarPtr = (int32 *)VAR_ADDRESS(106);
_some0ValPtr = (int32 *)VAR_ADDRESS(107);
_curGobXPosVarPtr = (int32 *)VAR_ADDRESS(108);
_curGobYPosVarPtr = (int32 *)VAR_ADDRESS(109);
_curGobMaxFrameVarPtr = (int32 *)VAR_ADDRESS(110);
_gobRetVarPtr.set(*_vm->_inter->_variables, 236);
_curGobStateVarPtr.set(*_vm->_inter->_variables, 240);
_curGobFrameVarPtr.set(*_vm->_inter->_variables, 244);
_curGobMultStateVarPtr.set(*_vm->_inter->_variables, 248);
_curGobNextStateVarPtr.set(*_vm->_inter->_variables, 252);
_curGobScrXVarPtr.set(*_vm->_inter->_variables, 256);
_curGobScrYVarPtr.set(*_vm->_inter->_variables, 260);
_curGobLeftVarPtr.set(*_vm->_inter->_variables, 264);
_curGobTopVarPtr.set(*_vm->_inter->_variables, 268);
_curGobRightVarPtr.set(*_vm->_inter->_variables, 272);
_curGobBottomVarPtr.set(*_vm->_inter->_variables, 276);
_curGobDoAnimVarPtr.set(*_vm->_inter->_variables, 280);
_curGobOrderVarPtr.set(*_vm->_inter->_variables, 284);
_curGobNoTickVarPtr.set(*_vm->_inter->_variables, 288);
_curGobTypeVarPtr.set(*_vm->_inter->_variables, 292);
_curGobMaxTickVarPtr.set(*_vm->_inter->_variables, 296);
_curGobTickVarPtr.set(*_vm->_inter->_variables, 300);
_curGobActStartStateVarPtr.set(*_vm->_inter->_variables, 304);
_curGobLookDirVarPtr.set(*_vm->_inter->_variables, 308);
_curGobPickableVarPtr.set(*_vm->_inter->_variables, 320);
_curGobRelaxVarPtr.set(*_vm->_inter->_variables, 324);
_destItemStateVarPtr.set(*_vm->_inter->_variables, 328);
_destItemFrameVarPtr.set(*_vm->_inter->_variables, 332);
_destItemMultStateVarPtr.set(*_vm->_inter->_variables, 336);
_destItemNextStateVarPtr.set(*_vm->_inter->_variables, 340);
_destItemScrXVarPtr.set(*_vm->_inter->_variables, 344);
_destItemScrYVarPtr.set(*_vm->_inter->_variables, 348);
_destItemLeftVarPtr.set(*_vm->_inter->_variables, 352);
_destItemTopVarPtr.set(*_vm->_inter->_variables, 356);
_destItemRightVarPtr.set(*_vm->_inter->_variables, 360);
_destItemBottomVarPtr.set(*_vm->_inter->_variables, 364);
_destItemDoAnimVarPtr.set(*_vm->_inter->_variables, 368);
_destItemOrderVarPtr.set(*_vm->_inter->_variables, 372);
_destItemNoTickVarPtr.set(*_vm->_inter->_variables, 376);
_destItemTypeVarPtr.set(*_vm->_inter->_variables, 380);
_destItemMaxTickVarPtr.set(*_vm->_inter->_variables, 384);
_destItemTickVarPtr.set(*_vm->_inter->_variables, 388);
_destItemActStartStVarPtr.set(*_vm->_inter->_variables, 392);
_destItemLookDirVarPtr.set(*_vm->_inter->_variables, 396);
_destItemPickableVarPtr.set(*_vm->_inter->_variables, 408);
_destItemRelaxVarPtr.set(*_vm->_inter->_variables, 412);
_destItemMaxFrameVarPtr.set(*_vm->_inter->_variables, 420);
_curGobVarPtr.set(*_vm->_inter->_variables, 424);
_some0ValPtr.set(*_vm->_inter->_variables, 428);
_curGobXPosVarPtr.set(*_vm->_inter->_variables, 432);
_curGobYPosVarPtr.set(*_vm->_inter->_variables, 436);
_curGobMaxFrameVarPtr.set(*_vm->_inter->_variables, 440);
_itemInPocketVarPtr = (int32 *)VAR_ADDRESS(114);
_itemInPocketVarPtr.set(*_vm->_inter->_variables, 456);
*_itemInPocketVarPtr = -2;
_itemInPocketVarPtr = (uint32) -2;
}
void Goblin::loadGobDataFromVars(void) {
Gob_Object *obj;
_itemIndInPocket = *_itemInPocketVarPtr;
_itemIndInPocket = (int32) _itemInPocketVarPtr;
obj = _goblins[_currentGoblin];
obj->state = *_curGobStateVarPtr;
obj->curFrame = *_curGobFrameVarPtr;
obj->multState = *_curGobMultStateVarPtr;
obj->nextState = *_curGobNextStateVarPtr;
obj->xPos = *_curGobScrXVarPtr;
obj->yPos = *_curGobScrYVarPtr;
obj->left = *_curGobLeftVarPtr;
obj->top = *_curGobTopVarPtr;
obj->right = *_curGobRightVarPtr;
obj->bottom = *_curGobBottomVarPtr;
obj->doAnim = *_curGobDoAnimVarPtr;
obj->order = *_curGobOrderVarPtr;
obj->noTick = *_curGobNoTickVarPtr;
obj->type = *_curGobTypeVarPtr;
obj->maxTick = *_curGobMaxTickVarPtr;
obj->tick = *_curGobTickVarPtr;
obj->actionStartState = *_curGobActStartStateVarPtr;
obj->curLookDir = *_curGobLookDirVarPtr;
obj->pickable = *_curGobPickableVarPtr;
obj->relaxTime = *_curGobRelaxVarPtr;
obj->state = (int32) _curGobStateVarPtr;
obj->curFrame = (int32) _curGobFrameVarPtr;
obj->multState = (int32) _curGobMultStateVarPtr;
obj->nextState = (int32) _curGobNextStateVarPtr;
obj->xPos = (int32) _curGobScrXVarPtr;
obj->yPos = (int32) _curGobScrYVarPtr;
obj->left = (int32) _curGobLeftVarPtr;
obj->top = (int32) _curGobTopVarPtr;
obj->right = (int32) _curGobRightVarPtr;
obj->bottom = (int32) _curGobBottomVarPtr;
obj->doAnim = (int32) _curGobDoAnimVarPtr;
obj->order = (int32) _curGobOrderVarPtr;
obj->noTick = (int32) _curGobNoTickVarPtr;
obj->type = (int32) _curGobTypeVarPtr;
obj->maxTick = (int32) _curGobMaxTickVarPtr;
obj->tick = (int32) _curGobTickVarPtr;
obj->actionStartState = (int32) _curGobActStartStateVarPtr;
obj->curLookDir = (int32) _curGobLookDirVarPtr;
obj->pickable = (int32) _curGobPickableVarPtr;
obj->relaxTime = (int32) _curGobRelaxVarPtr;
if (_actDestItemDesc == 0)
return;
obj = _actDestItemDesc;
obj->state = *_destItemStateVarPtr;
obj->curFrame = *_destItemFrameVarPtr;
obj->multState = *_destItemMultStateVarPtr;
obj->nextState = *_destItemNextStateVarPtr;
obj->xPos = *_destItemScrXVarPtr;
obj->yPos = *_destItemScrYVarPtr;
obj->left = *_destItemLeftVarPtr;
obj->top = *_destItemTopVarPtr;
obj->right = *_destItemRightVarPtr;
obj->bottom = *_destItemBottomVarPtr;
obj->doAnim = *_destItemDoAnimVarPtr;
obj->order = *_destItemOrderVarPtr;
obj->noTick = *_destItemNoTickVarPtr;
obj->type = *_destItemTypeVarPtr;
obj->maxTick = *_destItemMaxTickVarPtr;
obj->tick = *_destItemTickVarPtr;
obj->actionStartState = *_destItemActStartStVarPtr;
obj->curLookDir = *_destItemLookDirVarPtr;
obj->pickable = *_destItemPickableVarPtr;
obj->relaxTime = *_destItemRelaxVarPtr;
obj->state = (int32) _destItemStateVarPtr;
obj->curFrame = (int32) _destItemFrameVarPtr;
obj->multState = (int32) _destItemMultStateVarPtr;
obj->nextState = (int32) _destItemNextStateVarPtr;
obj->xPos = (int32) _destItemScrXVarPtr;
obj->yPos = (int32) _destItemScrYVarPtr;
obj->left = (int32) _destItemLeftVarPtr;
obj->top = (int32) _destItemTopVarPtr;
obj->right = (int32) _destItemRightVarPtr;
obj->bottom = (int32) _destItemBottomVarPtr;
obj->doAnim = (int32) _destItemDoAnimVarPtr;
obj->order = (int32) _destItemOrderVarPtr;
obj->noTick = (int32) _destItemNoTickVarPtr;
obj->type = (int32) _destItemTypeVarPtr;
obj->maxTick = (int32) _destItemMaxTickVarPtr;
obj->tick = (int32) _destItemTickVarPtr;
obj->actionStartState = (int32) _destItemActStartStVarPtr;
obj->curLookDir = (int32) _destItemLookDirVarPtr;
obj->pickable = (int32) _destItemPickableVarPtr;
obj->relaxTime = (int32) _destItemRelaxVarPtr;
if (obj->type != _destItemType)
obj->toRedraw = 1;

Some files were not shown because too many files have changed in this diff Show more