ALL: Synced with ScummVM

This commit is contained in:
Pawel Kolodziejski 2015-12-22 00:24:01 +01:00
parent d4b7b14c09
commit 2fadf2e466
77 changed files with 2030 additions and 1020 deletions

View file

@ -46,6 +46,16 @@ namespace Audio {
*/
#define INTERMEDIATE_BUFFER_SIZE 512
/**
* The default fractional type in frac.h (with 16 fractional bits) limits
* the rate conversion code to 65536Hz audio: we need to able to handle
* 96kHz audio, so we use fewer fractional bits in this code.
*/
enum {
FRAC_BITS_LOW = 15,
FRAC_ONE_LOW = (1L << FRAC_BITS_LOW),
FRAC_HALF_LOW = (1L << (FRAC_BITS_LOW-1))
};
/**
* Audio rate converter based on simple resampling. Used when no
@ -187,18 +197,18 @@ public:
*/
template<bool stereo, bool reverseStereo>
LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate, st_rate_t outrate) {
if (inrate >= 65536 || outrate >= 65536) {
error("rate effect can only handle rates < 65536");
if (inrate >= 131072 || outrate >= 131072) {
error("rate effect can only handle rates < 131072");
}
opos = FRAC_ONE;
opos = FRAC_ONE_LOW;
// Compute the linear interpolation increment.
// This will overflow if inrate >= 2^16, and underflow if outrate >= 2^16.
// This will overflow if inrate >= 2^17, and underflow if outrate >= 2^17.
// Also, if the quotient of the two rate becomes too small / too big, that
// would cause problems, but since we rarely scale from 1 to 65536 Hz or vice
// versa, I think we can live with that limitation ;-).
opos_inc = (inrate << FRAC_BITS) / outrate;
opos_inc = (inrate << FRAC_BITS_LOW) / outrate;
ilast0 = ilast1 = 0;
icur0 = icur1 = 0;
@ -220,7 +230,7 @@ int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_samp
while (obuf < oend) {
// read enough input samples so that opos < 0
while ((frac_t)FRAC_ONE <= opos) {
while ((frac_t)FRAC_ONE_LOW <= opos) {
// Check if we have to refill the buffer
if (inLen == 0) {
inPtr = inBuf;
@ -235,17 +245,17 @@ int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_samp
ilast1 = icur1;
icur1 = *inPtr++;
}
opos -= FRAC_ONE;
opos -= FRAC_ONE_LOW;
}
// Loop as long as the outpos trails behind, and as long as there is
// still space in the output buffer.
while (opos < (frac_t)FRAC_ONE && obuf < oend) {
while (opos < (frac_t)FRAC_ONE_LOW && obuf < oend) {
// interpolate
st_sample_t out0, out1;
out0 = (st_sample_t)(ilast0 + (((icur0 - ilast0) * opos + FRAC_HALF) >> FRAC_BITS));
out0 = (st_sample_t)(ilast0 + (((icur0 - ilast0) * opos + FRAC_HALF_LOW) >> FRAC_BITS_LOW));
out1 = (stereo ?
(st_sample_t)(ilast1 + (((icur1 - ilast1) * opos + FRAC_HALF) >> FRAC_BITS)) :
(st_sample_t)(ilast1 + (((icur1 - ilast1) * opos + FRAC_HALF_LOW) >> FRAC_BITS_LOW)) :
out0);
// output left channel
@ -333,7 +343,7 @@ public:
template<bool stereo, bool reverseStereo>
RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate) {
if (inrate != outrate) {
if ((inrate % outrate) == 0) {
if ((inrate % outrate) == 0 && (inrate < 65536)) {
return new SimpleRateConverter<stereo, reverseStereo>(inrate, outrate);
} else {
return new LinearRateConverter<stereo, reverseStereo>(inrate, outrate);

View file

@ -68,6 +68,16 @@ namespace Audio {
*/
#define INTERMEDIATE_BUFFER_SIZE 512
/**
* The default fractional type in frac.h (with 16 fractional bits) limits
* the rate conversion code to 65536Hz audio: we need to able to handle
* 96kHz audio, so we use fewer fractional bits in this code.
*/
enum {
FRAC_BITS_LOW = 15,
FRAC_ONE_LOW = (1L << FRAC_BITS_LOW),
FRAC_HALF_LOW = (1L << (FRAC_BITS_LOW-1))
};
/**
* Audio rate converter based on simple resampling. Used when no
@ -287,17 +297,18 @@ LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate
error("Input and Output rates must be different to use rate effect");
}
if (inrate >= 65536 || outrate >= 65536) {
error("rate effect can only handle rates < 65536");
if (inrate >= 131072 || outrate >= 131072) {
error("rate effect can only handle rates < 131072");
}
lr.opos = FRAC_ONE;
lr.opos = FRAC_ONE_LOW;
/* increment */
incr = (inrate << FRAC_BITS) / outrate;
incr = (inrate << FRAC_BITS_LOW) / outrate;
lr.opos_inc = incr;
// FIXME: Does 32768 here need changing to 65536 or 0? Compare to rate.cpp code...
lr.ilast[0] = lr.ilast[1] = 32768;
lr.icur[0] = lr.icur[1] = 0;
@ -438,7 +449,7 @@ public:
*/
RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate, bool stereo, bool reverseStereo) {
if (inrate != outrate) {
if ((inrate % outrate) == 0) {
if ((inrate % outrate) == 0 && (inrate < 65536)) {
if (stereo) {
if (reverseStereo)
return new SimpleRateConverter<true, true>(inrate, outrate);

View file

@ -441,17 +441,17 @@ LinearRate_M_part2:
LDRSH r4, [r3] @ r4 = obuf[0]
LDRSH r5, [r3,#2] @ r5 = obuf[1]
MOV r6, r6, ASR #16 @ r6 = tmp0 = tmp1 >>= 16
MOV r6, r6, ASR #15 @ r6 = tmp0 = tmp1 >>= 15
MUL r7, r12,r6 @ r7 = tmp0*vol_l
MUL r6, r14,r6 @ r6 = tmp1*vol_r
ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
ADDS r7, r7, r4, LSL #15 @ r7 = obuf[0]<<15 + tmp0*vol_l
RSCVS r7, r10, #0x80000000 @ Clamp r7
ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
ADDS r6, r6, r5, LSL #15 @ r6 = obuf[1]<<15 + tmp1*vol_r
RSCVS r6, r10, #0x80000000 @ Clamp r6
MOV r7, r7, LSR #16 @ Shift back to halfword
MOV r6, r6, LSR #16 @ Shift back to halfword
MOV r7, r7, LSR #15 @ Shift back to halfword
MOV r6, r6, LSR #15 @ Shift back to halfword
LDR r5, [r2,#12] @ r5 = opos_inc
STRH r7, [r3],#2 @ Store output value
@ -538,23 +538,23 @@ LinearRate_S_part2:
LDR r7, [r2,#24] @ r7 = ilast[1]<<16 + 32768
LDRSH r5, [r2,#18] @ r5 = icur[1]
LDRSH r10,[r3] @ r10= obuf[0]
MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
MOV r6, r6, ASR #15 @ r6 = tmp1 >>= 15
SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
MLA r7, r4, r5, r7 @ r7 = (icur[1]-ilast[1])*opos_frac+ilast[1]
LDRSH r5, [r3,#2] @ r5 = obuf[1]
MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
MOV r7, r7, ASR #15 @ r7 = tmp0 >>= 15
MUL r7, r12,r7 @ r7 = tmp0*vol_l
MUL r6, r14,r6 @ r6 = tmp1*vol_r
ADDS r7, r7, r10, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
ADDS r7, r7, r10, LSL #15 @ r7 = obuf[0]<<15 + tmp0*vol_l
MOV r4, #0
RSCVS r7, r4, #0x80000000 @ Clamp r7
ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
ADDS r6, r6, r5, LSL #15 @ r6 = obuf[1]<<15 + tmp1*vol_r
RSCVS r6, r4, #0x80000000 @ Clamp r6
MOV r7, r7, LSR #16 @ Shift back to halfword
MOV r6, r6, LSR #16 @ Shift back to halfword
MOV r7, r7, LSR #15 @ Shift back to halfword
MOV r6, r6, LSR #15 @ Shift back to halfword
LDR r5, [r2,#12] @ r5 = opos_inc
STRH r7, [r3],#2 @ Store output value
@ -641,23 +641,23 @@ LinearRate_R_part2:
LDR r7, [r2,#24] @ r7 = ilast[1]<<16 + 32768
LDRSH r5, [r2,#18] @ r5 = icur[1]
LDRSH r10,[r3,#2] @ r10= obuf[1]
MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
MOV r6, r6, ASR #15 @ r6 = tmp1 >>= 15
SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
MLA r7, r4, r5, r7 @ r7 = (icur[1]-ilast[1])*opos_frac+ilast[1]
LDRSH r5, [r3] @ r5 = obuf[0]
MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
MOV r7, r7, ASR #15 @ r7 = tmp0 >>= 15
MUL r7, r12,r7 @ r7 = tmp0*vol_l
MUL r6, r14,r6 @ r6 = tmp1*vol_r
ADDS r7, r7, r10, LSL #16 @ r7 = obuf[1]<<16 + tmp0*vol_l
ADDS r7, r7, r10, LSL #15 @ r7 = obuf[1]<<15 + tmp0*vol_l
MOV r4, #0
RSCVS r7, r4, #0x80000000 @ Clamp r7
ADDS r6, r6, r5, LSL #16 @ r6 = obuf[0]<<16 + tmp1*vol_r
ADDS r6, r6, r5, LSL #15 @ r6 = obuf[0]<<15 + tmp1*vol_r
RSCVS r6, r4, #0x80000000 @ Clamp r6
MOV r7, r7, LSR #16 @ Shift back to halfword
MOV r6, r6, LSR #16 @ Shift back to halfword
MOV r7, r7, LSR #15 @ Shift back to halfword
MOV r6, r6, LSR #15 @ Shift back to halfword
LDR r5, [r2,#12] @ r5 = opos_inc
STRH r6, [r3],#2 @ Store output value

View file

@ -26,7 +26,7 @@
#include "backends/audiocd/sdl/sdl-audiocd.h"
#if !SDL_VERSION_ATLEAST(1, 3, 0)
#if !SDL_VERSION_ATLEAST(2, 0, 0)
#include "common/textconsole.h"
@ -136,6 +136,6 @@ void SdlAudioCDManager::updateCD() {
}
}
#endif // !SDL_VERSION_ATLEAST(1, 3, 0)
#endif // !SDL_VERSION_ATLEAST(2, 0, 0)
#endif

View file

@ -27,7 +27,7 @@
#include "backends/platform/sdl/sdl-sys.h"
#if !SDL_VERSION_ATLEAST(1, 3, 0)
#if !SDL_VERSION_ATLEAST(2, 0, 0)
/**
* The SDL audio cd manager. Implements real audio cd playback.
@ -49,6 +49,6 @@ protected:
uint32 _cdEndTime, _cdStopTime;
};
#endif // !SDL_VERSION_ATLEAST(1, 3, 0)
#endif // !SDL_VERSION_ATLEAST(2, 0, 0)
#endif

View file

@ -126,8 +126,8 @@ bool PS3SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
* This pauses execution and keeps redrawing the screen until the XMB is closed.
*/
void PS3SdlEventSource::preprocessEvents(SDL_Event *event) {
if (event->type == SDL_ACTIVEEVENT) {
if (event->active.state == SDL_APPMOUSEFOCUS && !event->active.gain) {
if (event->type == SDL_WINDOWEVENT) {
if (event->window.event == SDL_WINDOWEVENT_LEAVE) {
// XMB opened
if (g_engine)
g_engine->pauseEngine(true);
@ -145,9 +145,9 @@ void PS3SdlEventSource::preprocessEvents(SDL_Event *event) {
}
if (event->type == SDL_QUIT)
return;
if (event->type != SDL_ACTIVEEVENT)
if (event->type != SDL_WINDOWEVENT)
continue;
if (event->active.state == SDL_APPMOUSEFOCUS && event->active.gain) {
if (event->window.event == SDL_WINDOWEVENT_ENTER) {
// XMB closed
if (g_engine)
g_engine->pauseEngine(false);

View file

@ -328,7 +328,7 @@ Common::KeyCode SdlEventSource::SDLToOSystemKeycode(const SDLKey key) {
case SDLK_y: return Common::KEYCODE_y;
case SDLK_z: return Common::KEYCODE_z;
case SDLK_DELETE: return Common::KEYCODE_DELETE;
#if SDL_VERSION_ATLEAST(1, 3, 0)
#if SDL_VERSION_ATLEAST(2, 0, 0)
case SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_GRAVE): return Common::KEYCODE_TILDE;
#else
case SDLK_WORLD_16: return Common::KEYCODE_TILDE;
@ -751,16 +751,16 @@ bool SdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) {
bool SdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) {
int axis = ev.jaxis.value;
if ( axis > JOY_DEADZONE) {
if (axis > JOY_DEADZONE) {
axis -= JOY_DEADZONE;
event.type = Common::EVENT_MOUSEMOVE;
} else if ( axis < -JOY_DEADZONE ) {
} else if (axis < -JOY_DEADZONE) {
axis += JOY_DEADZONE;
event.type = Common::EVENT_MOUSEMOVE;
} else
axis = 0;
if ( ev.jaxis.axis == JOY_XAXIS) {
if (ev.jaxis.axis == JOY_XAXIS) {
#ifdef JOY_ANALOG
_km.x_vel = axis / 2000;
_km.x_down_count = 0;
@ -773,7 +773,6 @@ bool SdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) {
_km.x_down_count = 0;
}
#endif
} else if (ev.jaxis.axis == JOY_YAXIS) {
#ifndef JOY_INVERT_Y
axis = -axis;

View file

@ -316,6 +316,7 @@ int MidiDriver_TIMIDITY::connect_to_server(const char* hostname, unsigned short
if (connect(fd, (struct sockaddr *)&in, sizeof(in)) < 0) {
warning("TiMidity: connect(): %s", strerror(errno));
::close(fd);
return -1;
}

View file

@ -30,8 +30,10 @@
#include "common/config-manager.h"
#include "common/textconsole.h"
#ifdef GP2X
#if defined(GP2X)
#define SAMPLES_PER_SEC 11025
#elif defined(PLAYSTATION3)
#define SAMPLES_PER_SEC 48000
#else
#define SAMPLES_PER_SEC 44100
#endif
@ -78,34 +80,49 @@ void SdlMixerManager::init() {
if (SDL_OpenAudio(&fmt, &_obtained) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
// The mixer is not marked as ready
_mixer = new Audio::MixerImpl(g_system, desired.freq);
assert(_mixer);
_mixer->setReady(false);
} else {
debug(1, "Output sample rate: %d Hz", _obtained.freq);
if (_obtained.freq != desired.freq)
warning("SDL mixer output sample rate: %d differs from desired: %d", _obtained.freq, desired.freq);
return;
}
debug(1, "Output buffer size: %d samples", _obtained.samples);
if (_obtained.samples != desired.samples)
warning("SDL mixer output buffer size: %d differs from desired: %d", _obtained.samples, desired.samples);
// The obtained sample format is not supported by the mixer, call
// SDL_OpenAudio again with NULL as the second argument to force
// SDL to do resampling to the desired audio spec.
if (_obtained.format != desired.format) {
debug(1, "SDL mixer sound format: %d differs from desired: %d", _obtained.format, desired.format);
SDL_CloseAudio();
if (_obtained.format != desired.format)
warning("SDL mixer sound format: %d differs from desired: %d", _obtained.format, desired.format);
if (SDL_OpenAudio(&fmt, NULL) != 0) {
warning("Could not open audio device: %s", SDL_GetError());
// The mixer is not marked as ready
_mixer = new Audio::MixerImpl(g_system, desired.freq);
return;
}
_obtained = desired;
}
debug(1, "Output sample rate: %d Hz", _obtained.freq);
if (_obtained.freq != desired.freq)
warning("SDL mixer output sample rate: %d differs from desired: %d", _obtained.freq, desired.freq);
debug(1, "Output buffer size: %d samples", _obtained.samples);
if (_obtained.samples != desired.samples)
warning("SDL mixer output buffer size: %d differs from desired: %d", _obtained.samples, desired.samples);
#ifndef __SYMBIAN32__
// The SymbianSdlMixerManager does stereo->mono downmixing,
// but otherwise we require stereo output.
if (_obtained.channels != 2)
error("SDL mixer output requires stereo output device");
// The SymbianSdlMixerManager does stereo->mono downmixing,
// but otherwise we require stereo output.
if (_obtained.channels != 2)
error("SDL mixer output requires stereo output device");
#endif
_mixer = new Audio::MixerImpl(g_system, _obtained.freq);
assert(_mixer);
_mixer->setReady(true);
_mixer = new Audio::MixerImpl(g_system, _obtained.freq);
assert(_mixer);
_mixer->setReady(true);
startAudio();
}
startAudio();
}
SDL_AudioSpec SdlMixerManager::getAudioSpec(uint32 outputRate) {

View file

@ -1,108 +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.
*
*/
#include "common/scummsys.h"
#if defined(SDL_BACKEND)
#include "backends/mixer/sdl13/sdl13-mixer.h"
#include "common/debug.h"
#include "common/system.h"
#include "common/config-manager.h"
#include "common/textconsole.h"
#ifdef GP2X
#define SAMPLES_PER_SEC 11025
#else
#define SAMPLES_PER_SEC 44100
#endif
Sdl13MixerManager::Sdl13MixerManager()
:
SdlMixerManager(),
_device(0) {
}
Sdl13MixerManager::~Sdl13MixerManager() {
_mixer->setReady(false);
SDL_CloseAudioDevice(_device);
delete _mixer;
}
void Sdl13MixerManager::init() {
// Start SDL Audio subsystem
if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) {
error("Could not initialize SDL: %s", SDL_GetError());
}
// Get the desired audio specs
SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC);
// Start SDL audio with the desired specs
_device = SDL_OpenAudioDevice(NULL, 0, &desired, &_obtained,
SDL_AUDIO_ALLOW_FREQUENCY_CHANGE);
if (_device <= 0) {
warning("Could not open audio device: %s", SDL_GetError());
_mixer = new Audio::MixerImpl(g_system, desired.freq);
assert(_mixer);
_mixer->setReady(false);
} else {
debug(1, "Output sample rate: %d Hz", _obtained.freq);
_mixer = new Audio::MixerImpl(g_system, _obtained.freq);
assert(_mixer);
_mixer->setReady(true);
startAudio();
}
}
void Sdl13MixerManager::startAudio() {
// Start the sound system
SDL_PauseAudioDevice(_device, 0);
}
void Sdl13MixerManager::suspendAudio() {
SDL_CloseAudioDevice(_device);
_audioSuspended = true;
}
int Sdl13MixerManager::resumeAudio() {
if (!_audioSuspended)
return -2;
_device = SDL_OpenAudioDevice(NULL, 0, &_obtained, NULL, 0);
if (_device <= 0) {
return -1;
}
SDL_PauseAudioDevice(_device, 0);
_audioSuspended = false;
return 0;
}
#endif

View file

@ -64,14 +64,12 @@ MODULE_OBJS += \
plugins/sdl/sdl-provider.o \
timer/sdl/sdl-timer.o
# SDL 1.3 removed audio CD support
ifndef USE_SDL13
# SDL 2 removed audio CD support
ifndef USE_SDL2
MODULE_OBJS += \
audiocd/sdl/sdl-audiocd.o
endif
endif
endif
ifdef POSIX
MODULE_OBJS += \
@ -112,8 +110,7 @@ MODULE_OBJS += \
fs/posix/posix-fs.o \
fs/posix/posix-fs-factory.o \
fs/ps3/ps3-fs-factory.o \
events/ps3sdl/ps3sdl-events.o \
mixer/sdl13/sdl13-mixer.o
events/ps3sdl/ps3sdl-events.o
endif
ifeq ($(BACKEND),tizen)

View file

@ -28,12 +28,22 @@
#include <Cocoa/Cocoa.h>
// Apple removed setAppleMenu from the header files in 10.4,
// but as the method still exists we declare it ourselves here.
// Apple added setAppleMenu in 10.5 and removed it in 10.6.
// But as the method still exists we declare it ourselves here.
// Yes, this works :)
@interface NSApplication(MissingFunction)
- (void)setAppleMenu:(NSMenu *)menu;
@end
// However maybe we should conditionally use it depending on the system on which we run ScummVM (and not
// the one on which we compile) to only do it on OS X 10.5.
// Here is the relevant bit from the release notes for 10.6:
// In Leopard and earlier, apps that tried to construct a menu bar without a nib would get an undesirable
// stubby application menu that could not be removed. To work around this problem on Leopard, you can call
// the undocumented setAppleMenu: method and pass it the application menu, like so:
// [NSApp setAppleMenu:[[[NSApp mainMenu] itemAtIndex:0] submenu]];
// In SnowLeopard, this workaround is unnecessary and should not be used. Under SnowLeopard, the first menu
// is always identified as the application menu.
NSString *constructNSStringFromCString(const char *rawCString, CFStringEncoding stringEncoding) {
return (NSString *)CFStringCreateWithCString(NULL, rawCString, stringEncoding);
@ -46,13 +56,14 @@ void replaceApplicationMenuItems() {
NSMenu *windowMenu;
NSMenuItem *menuItem;
// For some reason [[NSApp mainMenu] removeAllItems] doesn't work and crashes, so we need
// to remove the SDL generated menus one by one
[[NSApp mainMenu] removeItemAtIndex:0]; // Remove application menu
[[NSApp mainMenu] removeItemAtIndex:0]; // Remove "Windows" menu
// We cannot use [[NSApp mainMenu] removeAllItems] as removeAllItems was added in OS X 10.6
// So remove the SDL generated menus one by one instead.
while ([[NSApp mainMenu] numberOfItems] > 0) {
[[NSApp mainMenu] removeItemAtIndex:0];
}
// Create new application menu
appleMenu = [[NSMenu alloc] initWithTitle:@""];
appleMenu = [[NSMenu alloc] initWithTitle:@"ResidualVM"];
NSString *nsString = NULL;

View file

@ -31,7 +31,6 @@
#include "backends/saves/default/default-saves.h"
#include "backends/fs/ps3/ps3-fs-factory.h"
#include "backends/events/ps3sdl/ps3sdl-events.h"
#include "backends/mixer/sdl13/sdl13-mixer.h"
#include <dirent.h>
#include <sys/stat.h>
@ -68,14 +67,6 @@ void OSystem_PS3::initBackend() {
if (_savefileManager == 0)
_savefileManager = new DefaultSaveFileManager(PREFIX "/saves");
// Create the mixer manager
if (_mixer == 0) {
_mixerManager = new Sdl13MixerManager();
// Setup and start mixer
_mixerManager->init();
}
// Event source
if (_eventSource == 0)
_eventSource = new PS3SdlEventSource();

View file

@ -36,8 +36,8 @@
#include "backends/saves/default/default-saves.h"
// Audio CD support was removed with SDL 1.3
#if SDL_VERSION_ATLEAST(1, 3, 0)
// Audio CD support was removed with SDL 2.0
#if SDL_VERSION_ATLEAST(2, 0, 0)
#include "backends/audiocd/default/default-audiocd.h"
#else
#include "backends/audiocd/sdl/sdl-audiocd.h"
@ -194,8 +194,8 @@ void OSystem_SDL::initBackend() {
#endif
if (_audiocdManager == 0) {
// Audio CD support was removed with SDL 1.3
#if SDL_VERSION_ATLEAST(1, 3, 0)
// Audio CD support was removed with SDL 2.0
#if SDL_VERSION_ATLEAST(2, 0, 0)
_audiocdManager = new DefaultAudioCDManager();
#else
_audiocdManager = new SdlAudioCDManager();

View file

@ -43,7 +43,12 @@ int __stdcall WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpC
#if !SDL_VERSION_ATLEAST(2, 0, 0)
SDL_SetModuleHandle(GetModuleHandle(NULL));
#endif
// HACK: __argc, __argv are broken and return zero when using mingwrt 4.0+ on MinGW
#if defined(__GNUC__) && defined(__MINGW32__) && !defined(__MINGW64__)
return main(_argc, _argv);
#else
return main(__argc, __argv);
#endif
}
int main(int argc, char *argv[]) {

View file

@ -32,6 +32,21 @@
#if defined(__GNUC__) && defined(__MINGW32__) && !defined(__MINGW64__)
#include "backends/taskbar/win32/mingw-compat.h"
#else
// We use functionality introduced with Win7 in this file.
// To assure that including the respective system headers gives us all
// required definitions we set Win7 as minimum version we target.
// See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx#macros_for_conditional_declarations
#undef _WIN32_WINNT
#define _WIN32_WINNT _WIN32_WINNT_WIN7
// TODO: We might not need to include this file, the MSDN docs are
// not really helpful to decide whether we require it or not.
//
// Casing of the name is a bit of a mess. MinGW64 seems to use all
// lowercase, while MSDN docs suggest "SdkDdkVer.h". We are stuck with
// what MinGW64 uses...
#include <sdkddkver.h>
// We need certain functions that are excluded by default
#undef NONLS
#undef NOICONS
@ -39,11 +54,6 @@
#if defined(ARRAYSIZE)
#undef ARRAYSIZE
#endif
#if defined(_MSC_VER)
// Default MSVC headers for ITaskbarList3 and IShellLink
#include <SDKDDKVer.h>
#endif
#endif
#include <shlobj.h>

View file

@ -177,7 +177,8 @@ T sortChoosePivot(T first, T last) {
template<typename T, class StrictWeakOrdering>
T sortPartition(T first, T last, T pivot, StrictWeakOrdering &comp) {
--last;
SWAP(*pivot, *last);
if (pivot != last)
SWAP(*pivot, *last);
T sorted;
for (sorted = first; first != last; ++first) {
@ -188,7 +189,8 @@ T sortPartition(T first, T last, T pivot, StrictWeakOrdering &comp) {
}
}
SWAP(*last, *sorted);
if (last != sorted)
SWAP(*last, *sorted);
return sorted;
}

View file

@ -449,6 +449,8 @@ bool DecompressorDCL::unpack(SeekableReadStream *sourceStream, WriteStream *targ
}
if (_targetFixedSize) {
if (_bytesWritten != _targetSize)
warning("DCL-INFLATE Error: Inconsistent bytes written (%d) and target buffer size (%d)", _bytesWritten, _targetSize);
return _bytesWritten == _targetSize;
}
return true; // For targets featuring dynamic size we always succeed

View file

@ -25,6 +25,7 @@
* PKWARE DCL ("explode") ("PKWARE data compression library") decompressor used in engines:
* - agos (exclusively for Simon 2 setup.shr file)
* - mohawk
* - neverhood
* - sci
*/

View file

@ -23,8 +23,8 @@
#ifndef COMMON_SCUMMSYS_H
#define COMMON_SCUMMSYS_H
#ifndef __has_feature // Optional of course.
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#ifndef __has_feature // Optional of course.
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#endif
// This is a convenience macro to test whether the compiler used is a GCC
@ -46,7 +46,7 @@
#if defined(WIN32)
#ifdef _MSC_VER
#if defined(_MSC_VER) && _MSC_VER <= 1800
// FIXME: The placement of the workaround functions for MSVC below
// require us to include stdio.h and stdarg.h for MSVC here. This
@ -367,11 +367,11 @@
#endif
#ifndef STRINGBUFLEN
#if defined(__N64__) || defined(__DS__)
#define STRINGBUFLEN 256
#else
#define STRINGBUFLEN 1024
#endif
#if defined(__N64__) || defined(__DS__)
#define STRINGBUFLEN 256
#else
#define STRINGBUFLEN 1024
#endif
#endif
// ResidualVM specific:

View file

@ -97,36 +97,38 @@ bool XMLParser::parserError(const String &errStr) {
assert(_stream->pos() == startPosition);
currentPosition = startPosition;
int keyOpening = 0;
int keyClosing = 0;
while (currentPosition-- && keyOpening == 0) {
_stream->seek(-2, SEEK_CUR);
c = _stream->readByte();
if (c == '<')
keyOpening = currentPosition - 1;
else if (c == '>')
keyClosing = currentPosition;
}
_stream->seek(startPosition, SEEK_SET);
currentPosition = startPosition;
while (keyClosing == 0 && c && currentPosition++) {
c = _stream->readByte();
if (c == '>')
keyClosing = currentPosition;
}
Common::String errorMessage = Common::String::format("\n File <%s>, line %d:\n", _fileName.c_str(), lineCount);
currentPosition = (keyClosing - keyOpening);
_stream->seek(keyOpening, SEEK_SET);
if (startPosition > 1) {
int keyOpening = 0;
int keyClosing = 0;
while (currentPosition--)
errorMessage += (char)_stream->readByte();
while (currentPosition-- && keyOpening == 0) {
_stream->seek(-2, SEEK_CUR);
c = _stream->readByte();
if (c == '<')
keyOpening = currentPosition - 1;
else if (c == '>')
keyClosing = currentPosition;
}
_stream->seek(startPosition, SEEK_SET);
currentPosition = startPosition;
while (keyClosing == 0 && c && currentPosition++) {
c = _stream->readByte();
if (c == '>')
keyClosing = currentPosition;
}
currentPosition = (keyClosing - keyOpening);
_stream->seek(keyOpening, SEEK_SET);
while (currentPosition--)
errorMessage += (char)_stream->readByte();
}
errorMessage += "\n\nParser error: ";
errorMessage += errStr;
errorMessage += "\n\n";

44
configure vendored
View file

@ -1304,6 +1304,13 @@ arm-riscos)
_host_os=riscos
_host_cpu=arm
;;
raspberrypi)
_host_os=linux
_host_cpu=arm
# This tuple is the one used by the official Rpi toolchain.
# It may change in the future.
_host_alias=bcm2708hardfp
;;
caanoo)
_host_os=gph-linux
_host_cpu=arm
@ -2039,7 +2046,12 @@ case $_host_cpu in
arm*)
echo "ARM"
define_in_config_if_yes yes 'USE_ARM_SCALER_ASM'
define_in_config_if_yes yes 'USE_ARM_SOUND_ASM'
# FIXME: The following feature exhibits a bug. It produces distorted
# sound since 9003ce517ff9906b0288f9f7c02197fd091d4554. The ARM
# assembly will need to be properly adapted to the changes to the C
# code in 8f5a7cde2f99de9fef849b0ff688906f05f4643e.
# See bug #6957: "AUDIO: ARM ASM sound code causes distorted audio on 32 bit armv6"
#define_in_config_if_yes yes 'USE_ARM_SOUND_ASM'
define_in_config_if_yes yes 'USE_ARM_SMUSH_ASM'
define_in_config_if_yes yes 'USE_ARM_GFX_ASM'
# FIXME: The following feature exhibits a bug during the intro scene of Indy 4
@ -2407,6 +2419,7 @@ case $_host_os in
;;
ps3)
# Force use of SDL and freetype from the ps3 toolchain
_sdlconfig=sdl2-config
_sdlpath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin"
_freetypepath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin"
@ -2560,6 +2573,30 @@ if test -n "$_host"; then
_seq_midi=no
_port_mk="backends/platform/dingux/dingux.mk"
;;
raspberrypi)
# This is needed because the official cross compiler doesn't have multiarch enabled
# but Raspbian does.
# Be careful as it's the linker (LDFLAGS) which must know about sysroot.
# These are needed to build against Raspbian's libSDL.
append_var LDFLAGS "--sysroot=$RPI_ROOT"
append_var LDFLAGS "-B$RPI_ROOT/usr/lib/arm-linux-gnueabihf"
append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf"
append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/lib/arm-linux-gnueabihf"
append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/opt/vc/lib"
append_var LDFLAGS "-L$RPI_ROOT/opt/vc/lib"
# This is so optional OpenGL ES includes are found.
append_var CXXFLAGS "-I$RPI_ROOT/opt/vc/include"
_savegame_timestamp=no
_eventrec=no
_build_scalers=no
_build_hq_scalers=no
# We prefer SDL2 on the Raspberry Pi: acceleration now depends on it
# since SDL2 manages dispmanx/GLES2 very well internally.
# SDL1 is bit-rotten on this platform.
_sdlconfig=sdl2-config
# We should add _opengles=yes later here if we wanted the GLES renderer.
# For now, we use plain SDL2 only, which in turn uses GLES2 by default.
;;
dreamcast)
append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER"
append_var DEFINES "-DDISABLE_TEXT_CONSOLE"
@ -3077,9 +3114,6 @@ case $_backend in
_sdlversion=`$_sdlconfig --version`
case $_sdlversion in
1.3.*)
add_line_to_config_mk "USE_SDL13 = 1"
;;
2.0.*)
add_line_to_config_mk "USE_SDL2 = 1"
;;
@ -3140,7 +3174,6 @@ case $_backend in
;;
esac
#
# Determine whether host is POSIX compliant, or at least POSIX
# compatible enough to support our POSIX code (including dlsym(),
@ -4227,7 +4260,6 @@ define_in_config_if_yes "$_opengles2" "USE_GLES2"
define_in_config_if_yes "$_opengl_shaders" "USE_OPENGL_SHADERS"
# ResidualVM specific ends here <-
#
# Check for nasm
#

View file

@ -124,7 +124,7 @@ int main(int argc, char *argv[]) {
setup.features = getAllFeatures();
ProjectType projectType = kProjectNone;
int msvcVersion = 9;
int msvcVersion = 12;
bool useSDL2 = false;
// Parse command line arguments
@ -176,7 +176,7 @@ int main(int argc, char *argv[]) {
msvcVersion = atoi(argv[++i]);
if (msvcVersion != 9 && msvcVersion != 10 && msvcVersion != 11 && msvcVersion != 12) {
if (msvcVersion != 9 && msvcVersion != 10 && msvcVersion != 11 && msvcVersion != 12 && msvcVersion != 14) {
std::cerr << "ERROR: Unsupported version: \"" << msvcVersion << "\" passed to \"--msvc-version\"!\n";
return -1;
}
@ -453,6 +453,9 @@ int main(int argc, char *argv[]) {
// 4250 ('class1' : inherits 'class2::member' via dominance)
// two or more members have the same name. Should be harmless
//
// 4267 ('var' : conversion from 'size_t' to 'type', possible loss of data)
// throws tons and tons of warnings (no immediate plan to fix all usages)
//
// 4310 (cast truncates constant value)
// used in some engines
//
@ -468,6 +471,8 @@ int main(int argc, char *argv[]) {
// 4512 ('class' : assignment operator could not be generated)
// some classes use const items and the default assignment operator cannot be generated
//
// 4577 ('noexcept' used with no exception handling mode specified)
//
// 4702 (unreachable code)
// mostly thrown after error() calls (marked as NORETURN)
//
@ -523,6 +528,11 @@ int main(int argc, char *argv[]) {
globalWarnings.push_back("6385");
globalWarnings.push_back("6386");
if (msvcVersion == 14) {
globalWarnings.push_back("4267");
globalWarnings.push_back("4577");
}
projectWarnings["agi"].push_back("4510");
projectWarnings["agi"].push_back("4610");
@ -636,6 +646,7 @@ void displayHelp(const char *exe) {
" 10 stands for \"Visual Studio 2010\"\n"
" 11 stands for \"Visual Studio 2012\"\n"
" 12 stands for \"Visual Studio 2013\"\n"
" 14 stands for \"Visual Studio 2015\"\n"
" The default is \"9\", thus \"Visual Studio 2008\"\n"
" --build-events Run custom build events as part of the build\n"
" (default: false)\n"
@ -658,9 +669,9 @@ void displayHelp(const char *exe) {
"Optional features settings:\n"
" --enable-<name> enable inclusion of the feature \"name\"\n"
" --disable-<name> disable inclusion of the feature \"name\"\n"
"\n"
"SDL settings:\n"
" --sdl2 link to SDL 2.0, instead of SDL 1.2\n"
"\n"
"SDL settings:\n"
" --sdl2 link to SDL 2.0, instead of SDL 1.2\n"
"\n"
" There are the following features available:\n"
"\n";
@ -921,7 +932,7 @@ const Feature s_features[] = {
{ "libz", "USE_ZLIB", "zlib", true, "zlib (compression) support" },
{ "mad", "USE_MAD", "libmad", true, "libmad (MP3) support" },
{ "vorbis", "USE_VORBIS", "libvorbisfile_static libvorbis_static libogg_static", false, "Ogg Vorbis support" },
{ "flac", "USE_FLAC", "libFLAC_static", false, "FLAC support" },
{ "flac", "USE_FLAC", "libFLAC_static win_utf8_io_static", false, "FLAC support" },
{ "png", "USE_PNG", "libpng", false, "libpng support" },
{ "faad", "USE_FAAD", "libfaad", false, "AAC support" },
{ "mpeg2", "USE_MPEG2", "libmpeg2", true, "MPEG-2 support" },
@ -1050,7 +1061,7 @@ bool producesObjectFile(const std::string &fileName) {
}
std::string toString(int num) {
return static_cast<std::ostringstream*>(&(std::ostringstream() << num))->str();
return static_cast<std::ostringstream*>(&(std::ostringstream() << num))->str();
}
/**

View file

@ -23,8 +23,8 @@
#ifndef TOOLS_CREATE_PROJECT_H
#define TOOLS_CREATE_PROJECT_H
#ifndef __has_feature // Optional of course.
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#ifndef __has_feature // Optional of course.
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#endif
#include <map>

View file

@ -55,9 +55,16 @@ int MSBuildProvider::getVisualStudioVersion() {
if (_version == 12)
return 2013;
if (_version == 14)
return 14;
error("Unsupported version passed to getVisualStudioVersion");
}
int MSBuildProvider::getSolutionVersion() {
return (_version < 14) ? _version + 1 : _version;
}
namespace {
inline void outputConfiguration(std::ostream &project, const std::string &config, const std::string &platform) {
@ -116,7 +123,7 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
// Shared configuration
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n";
std::string version = "v" + toString(_version) + "0";
std::string version = "v" + toString(_version) + "0";
std::string llvm = "LLVM-vs" + toString(getVisualStudioVersion());
outputConfigurationType(setup, project, name, "Release|Win32", version);
@ -177,6 +184,13 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
project << "\t</ItemGroup>\n";
}
// Visual Studio 2015 automatically imports natvis files that are part of the project
if (name == PROJECT_NAME && _version == 14) {
project << "\t<ItemGroup>\n";
project << "\t\t<None Include=\"" << setup.srcDir << "/devtools/create_project/scripts/residualvm.natvis\" />\n";
project << "\t</ItemGroup>\n";
}
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n"
"\t<ImportGroup Label=\"ExtensionTargets\">\n"
"\t</ImportGroup>\n";
@ -185,7 +199,7 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
// We override the normal target to ignore the exit code (this allows us to have a clean output and not message about the command exit code)
project << "\t\t<Target Name=\"PostBuildEvent\">\n"
<< "\t\t\t<Message Text=\"Description: Run tests\" />\n"
<< "\t\t\t<Exec Command=\"$(TargetPath)\" IgnoreExitCode=\"true\" />\n"
<< "\t\t\t<Exec Command=\"$(TargetPath)\" IgnoreExitCode=\"true\" />\n"
<< "\t\t</Target>\n";
}
@ -305,6 +319,12 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i)
libraries += *i + ".lib;";
if (_version == 14) {
std::string debug = isRelease ? "" : "d";
libraries += "libvcruntime" + debug + ".lib;";
libraries += "libucrt" + debug + ".lib;";
}
project << "\t\t<Link>\n"
"\t\t\t<OutputFile>$(OutDir)" << ((setup.devTools || setup.tests) ? name : setup.projectName) << ".exe</OutputFile>\n"
"\t\t\t<AdditionalDependencies>" << libraries << "%(AdditionalDependencies)</AdditionalDependencies>\n"

View file

@ -49,6 +49,7 @@ protected:
const char *getProjectExtension();
const char *getPropertiesExtension();
int getVisualStudioVersion();
int getSolutionVersion();
private:
struct FileEntry {

View file

@ -52,7 +52,7 @@ void MSVCProvider::createWorkspace(const BuildSetup &setup) {
if (!solution)
error("Could not open \"" + setup.outputDir + '/' + setup.projectName + ".sln\" for writing");
solution << "Microsoft Visual Studio Solution File, Format Version " << _version + 1 << ".00\n";
solution << "Microsoft Visual Studio Solution File, Format Version " << getSolutionVersion() << ".00\n";
solution << "# Visual Studio " << getVisualStudioVersion() << "\n";
// Write main project
@ -157,13 +157,17 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) {
outputGlobalPropFile(setup, properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
}
int MSVCProvider::getSolutionVersion() {
return _version + 1;
}
std::string MSVCProvider::getPreBuildEvent() const {
std::string cmdLine = "";
cmdLine = "@echo off\n"
"echo Executing Pre-Build script...\n"
"echo.\n"
"@call &quot;$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd&quot; &quot;$(SolutionDir)/../..&quot; &quot;$(TargetDir)&quot;\n"
"echo.\n"
"@call &quot;$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd&quot; &quot;$(SolutionDir)/../..&quot; &quot;$(TargetDir)&quot;\n"
"EXIT /B0";
return cmdLine;

View file

@ -82,6 +82,11 @@ protected:
*/
virtual int getVisualStudioVersion() = 0;
/**
* Get the Solution version (used in the sln file header)
*/
virtual int getSolutionVersion();
/**
* Get the command line for the revision tool (shared between all Visual Studio based providers)
*/

View file

@ -230,7 +230,7 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
"\t\tDisableSpecificWarnings=\"" << warnings << "\"\n"
"\t\tAdditionalIncludeDirectories=\".\\;" << prefix << ";" << prefix << "\\engines;$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\SDL;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "$(TargetDir)\"\n"
"\t\tPreprocessorDefinitions=\"" << definesList << "\"\n"
"\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests) ? "1" : "0") << "\"\n";
"\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests || _version == 14) ? "1" : "0") << "\"\n";
#if NEEDS_RTTI
properties << "\t\tRuntimeTypeInfo=\"true\"\n";

View file

@ -42,42 +42,31 @@ namespace CreateProjectTool {
defines.push_back(name);
#define ADD_SETTING(config, key, value) \
config.settings[key] = Setting(value, "", SettingsNoQuote);
config._settings[key] = Setting(value, "", kSettingsNoQuote);
#define ADD_SETTING_ORDER(config, key, value, order) \
config.settings[key] = Setting(value, "", SettingsNoQuote, 0, order);
config._settings[key] = Setting(value, "", kSettingsNoQuote, 0, order);
#define ADD_SETTING_ORDER_NOVALUE(config, key, comment, order) \
config.settings[key] = Setting("", comment, SettingsNoValue, 0, order);
config._settings[key] = Setting("", comment, kSettingsNoValue, 0, order);
#define ADD_SETTING_QUOTE(config, key, value) \
config.settings[key] = Setting(value);
config._settings[key] = Setting(value);
#define ADD_SETTING_QUOTE_VAR(config, key, value) \
config.settings[key] = Setting(value, "", SettingsQuoteVariable);
config._settings[key] = Setting(value, "", kSettingsQuoteVariable);
#define ADD_SETTING_LIST(config, key, values, flags, indent) \
config.settings[key] = Setting(values, flags, indent);
config._settings[key] = Setting(values, flags, indent);
#define REMOVE_SETTING(config, key) \
config.settings.erase(key);
config._settings.erase(key);
#define ADD_BUILD_FILE(id, name, fileRefId, comment) { \
Object *buildFile = new Object(this, id, name, "PBXBuildFile", "PBXBuildFile", comment); \
buildFile->addProperty("fileRef", fileRefId, name, SettingsNoValue); \
buildFile->addProperty("fileRef", fileRefId, name, kSettingsNoValue); \
_buildFile.add(buildFile); \
_buildFile.flags = SettingsSingleItem; \
}
#define ADD_FILE_REFERENCE(id, name, properties) { \
Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name); \
if (!properties.fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties.fileEncoding, "", SettingsNoValue); \
if (!properties.lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties.lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable); \
if (!properties.fileName.empty()) fileRef->addProperty("name", properties.fileName, "", SettingsNoValue|SettingsQuoteVariable); \
if (!properties.filePath.empty()) fileRef->addProperty("path", properties.filePath, "", SettingsNoValue|SettingsQuoteVariable); \
if (!properties.sourceTree.empty()) fileRef->addProperty("sourceTree", properties.sourceTree, "", SettingsNoValue); \
_fileReference.add(fileRef); \
_fileReference.flags = SettingsSingleItem; \
_buildFile._flags = kSettingsSingleItem; \
}
bool producesObjectFileOnOSX(const std::string &fileName) {
@ -93,56 +82,56 @@ bool producesObjectFileOnOSX(const std::string &fileName) {
}
XcodeProvider::Group::Group(XcodeProvider *objectParent, const std::string &groupName, const std::string &uniqueName, const std::string &path) : Object(objectParent, uniqueName, groupName, "PBXGroup", "", groupName) {
addProperty("name", name, "", SettingsNoValue|SettingsQuoteVariable);
addProperty("sourceTree", "<group>", "", SettingsNoValue|SettingsQuoteVariable);
addProperty("name", _name, "", kSettingsNoValue | kSettingsQuoteVariable);
addProperty("sourceTree", "<group>", "", kSettingsNoValue | kSettingsQuoteVariable);
if (path != "") {
addProperty("path", path, "", SettingsNoValue|SettingsQuoteVariable);
addProperty("path", path, "", kSettingsNoValue | kSettingsQuoteVariable);
}
_childOrder = 0;
_treeName = uniqueName;
}
void XcodeProvider::Group::ensureChildExists(const std::string &name) {
std::map<std::string, Group*>::iterator it = _childGroups.find(name);
std::map<std::string, Group *>::iterator it = _childGroups.find(name);
if (it == _childGroups.end()) {
Group *child = new Group(parent, name, this->_treeName + '/' + name, name);
Group *child = new Group(_parent, name, this->_treeName + '/' + name, name);
_childGroups[name] = child;
addChildGroup(child);
parent->_groups.add(child);
_parent->_groups.add(child);
}
}
void XcodeProvider::Group::addChildInternal(const std::string &id, const std::string &comment) {
if (properties.find("children") == properties.end()) {
if (_properties.find("children") == _properties.end()) {
Property children;
children.hasOrder = true;
children.flags = SettingsAsList;
properties["children"] = children;
children._hasOrder = true;
children._flags = kSettingsAsList;
_properties["children"] = children;
}
properties["children"].settings[id] = Setting("", comment + " in Sources", SettingsNoValue, 0, _childOrder++);
_properties["children"]._settings[id] = Setting("", comment + " in Sources", kSettingsNoValue, 0, _childOrder++);
if (_childOrder == 1) {
// Force children to use () even when there is only 1 child.
// Also this enforces the use of "," after the single item, instead of ; (see writeProperty)
properties["children"].flags |= SettingsSingleItem;
_properties["children"]._flags |= kSettingsSingleItem;
} else {
properties["children"].flags ^= SettingsSingleItem;
_properties["children"]._flags ^= kSettingsSingleItem;
}
}
void XcodeProvider::Group::addChildGroup(const Group* group) {
addChildInternal(parent->getHash(group->_treeName), group->_treeName);
void XcodeProvider::Group::addChildGroup(const Group *group) {
addChildInternal(_parent->getHash(group->_treeName), group->_treeName);
}
void XcodeProvider::Group::addChildFile(const std::string &name) {
std::string id = "FileReference_" + _treeName + "/" + name;
addChildInternal(parent->getHash(id), name);
addChildInternal(_parent->getHash(id), name);
FileProperty property = FileProperty(name, name, name, "\"<group>\"");
parent->addFileReference(id, name, property);
_parent->addFileReference(id, name, property);
if (producesObjectFileOnOSX(name)) {
parent->addBuildFile(_treeName + "/" + name, name, parent->getHash(id), name + " in Sources");
_parent->addBuildFile(_treeName + "/" + name, name, _parent->getHash(id), name + " in Sources");
}
}
@ -151,14 +140,14 @@ void XcodeProvider::Group::addChildByHash(const std::string &hash, const std::st
}
XcodeProvider::Group *XcodeProvider::Group::getChildGroup(const std::string &name) {
std::map<std::string, Group*>::iterator it = _childGroups.find(name);
std::map<std::string, Group *>::iterator it = _childGroups.find(name);
assert(it != _childGroups.end());
return it->second;
}
XcodeProvider::Group *XcodeProvider::touchGroupsForPath(const std::string &path) {
if (_rootSourceGroup == NULL) {
assert (path == _projectRoot);
assert(path == _projectRoot);
_rootSourceGroup = new Group(this, "Sources", path, path);
_groups.add(_rootSourceGroup);
return _rootSourceGroup;
@ -180,31 +169,31 @@ XcodeProvider::Group *XcodeProvider::touchGroupsForPath(const std::string &path)
void XcodeProvider::addFileReference(const std::string &id, const std::string &name, FileProperty properties) {
Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name);
if (!properties.fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties.fileEncoding, "", SettingsNoValue);
if (!properties.lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties.lastKnownFileType, "", SettingsNoValue|SettingsQuoteVariable);
if (!properties.fileName.empty()) fileRef->addProperty("name", properties.fileName, "", SettingsNoValue|SettingsQuoteVariable);
if (!properties.filePath.empty()) fileRef->addProperty("path", properties.filePath, "", SettingsNoValue|SettingsQuoteVariable);
if (!properties.sourceTree.empty()) fileRef->addProperty("sourceTree", properties.sourceTree, "", SettingsNoValue);
if (!properties._fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties._fileEncoding, "", kSettingsNoValue);
if (!properties._lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties._lastKnownFileType, "", kSettingsNoValue | kSettingsQuoteVariable);
if (!properties._fileName.empty()) fileRef->addProperty("name", properties._fileName, "", kSettingsNoValue | kSettingsQuoteVariable);
if (!properties._filePath.empty()) fileRef->addProperty("path", properties._filePath, "", kSettingsNoValue | kSettingsQuoteVariable);
if (!properties._sourceTree.empty()) fileRef->addProperty("sourceTree", properties._sourceTree, "", kSettingsNoValue);
_fileReference.add(fileRef);
_fileReference.flags = SettingsSingleItem;
_fileReference._flags = kSettingsSingleItem;
}
void XcodeProvider::addProductFileReference(const std::string &id, const std::string &name) {
Object *fileRef = new Object(this, id, name, "PBXFileReference", "PBXFileReference", name);
fileRef->addProperty("explicitFileType", "compiled.mach-o.executable", "", SettingsNoValue|SettingsQuoteVariable);
fileRef->addProperty("includeInIndex", "0", "", SettingsNoValue);
fileRef->addProperty("path", name, "", SettingsNoValue|SettingsQuoteVariable);
fileRef->addProperty("sourceTree", "BUILT_PRODUCTS_DIR", "", SettingsNoValue);
fileRef->addProperty("explicitFileType", "compiled.mach-o.executable", "", kSettingsNoValue | kSettingsQuoteVariable);
fileRef->addProperty("includeInIndex", "0", "", kSettingsNoValue);
fileRef->addProperty("path", name, "", kSettingsNoValue | kSettingsQuoteVariable);
fileRef->addProperty("sourceTree", "BUILT_PRODUCTS_DIR", "", kSettingsNoValue);
_fileReference.add(fileRef);
_fileReference.flags = SettingsSingleItem;
_fileReference._flags = kSettingsSingleItem;
}
void XcodeProvider::addBuildFile(const std::string &id, const std::string &name, const std::string &fileRefId, const std::string &comment) {
Object *buildFile = new Object(this, id, name, "PBXBuildFile", "PBXBuildFile", comment);
buildFile->addProperty("fileRef", fileRefId, name, SettingsNoValue);
buildFile->addProperty("fileRef", fileRefId, name, kSettingsNoValue);
_buildFile.add(buildFile);
_buildFile.flags = SettingsSingleItem;
_buildFile._flags = kSettingsSingleItem;
}
XcodeProvider::XcodeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version)
@ -218,7 +207,7 @@ void XcodeProvider::createWorkspace(const BuildSetup &setup) {
createDirectory(workspace);
_projectRoot = setup.srcDir;
touchGroupsForPath(_projectRoot);
// Setup global objects
setupDefines(setup);
#ifdef ENABLE_IOS
@ -274,10 +263,10 @@ void XcodeProvider::ouputMainProjectFile(const BuildSetup &setup) {
// Header
project << "// !$*UTF8*$!\n"
"{\n"
"\t" << writeSetting("archiveVersion", "1", "", SettingsNoQuote) << ";\n"
"\t" << writeSetting("archiveVersion", "1", "", kSettingsNoQuote) << ";\n"
"\tclasses = {\n"
"\t};\n"
"\t" << writeSetting("objectVersion", "46", "", SettingsNoQuote) << ";\n"
"\t" << writeSetting("objectVersion", "46", "", kSettingsNoQuote) << ";\n"
"\tobjects = {\n";
//////////////////////////////////////////////////////////////////////////
@ -297,7 +286,7 @@ void XcodeProvider::ouputMainProjectFile(const BuildSetup &setup) {
//////////////////////////////////////////////////////////////////////////
// Footer
project << "\t};\n"
"\t" << writeSetting("rootObject", getHash("PBXProject"), "Project object", SettingsNoQuote) << ";\n"
"\t" << writeSetting("rootObject", getHash("PBXProject"), "Project object", kSettingsNoQuote) << ";\n"
"}\n";
}
@ -333,7 +322,7 @@ void XcodeProvider::setupCopyFilesBuildPhase() {
#define DEF_SYSFRAMEWORK(framework) properties[framework".framework"] = FileProperty("wrapper.framework", framework".framework", "System/Library/Frameworks/" framework ".framework", "SDKROOT"); \
ADD_SETTING_ORDER_NOVALUE(children, getHash(framework".framework"), framework".framework", fwOrder++);
#define DEF_LOCALLIB_STATIC(lib) properties[lib".a"] = FileProperty("archive.ar", lib".a", "/opt/local/lib/" lib ".a", "\"<group>\""); \
ADD_SETTING_ORDER_NOVALUE(children, getHash(lib".a"), lib".a", fwOrder++);
@ -343,14 +332,14 @@ void XcodeProvider::setupCopyFilesBuildPhase() {
* (each native target has different build rules)
*/
void XcodeProvider::setupFrameworksBuildPhase() {
_frameworksBuildPhase.comment = "PBXFrameworksBuildPhase";
_frameworksBuildPhase._comment = "PBXFrameworksBuildPhase";
// Just use a hardcoded id for the Frameworks-group
Group *frameworksGroup = new Group(this, "Frameworks", "PBXGroup_CustomTemplate_Frameworks_", "");
Property children;
children.hasOrder = true;
children.flags = SettingsAsList;
children._hasOrder = true;
children._flags = kSettingsAsList;
// Setup framework file properties
std::map<std::string, FileProperty> properties;
@ -380,7 +369,7 @@ void XcodeProvider::setupFrameworksBuildPhase() {
DEF_LOCALLIB_STATIC("libfreetype");
// DEF_LOCALLIB_STATIC("libmpeg2");
frameworksGroup->properties["children"] = children;
frameworksGroup->_properties["children"] = children;
_groups.add(frameworksGroup);
// Force this to be added as a sub-group in the root.
_rootSourceGroup->addChildGroup(frameworksGroup);
@ -393,13 +382,13 @@ void XcodeProvider::setupFrameworksBuildPhase() {
// iPhone
Object *framework_iPhone = new Object(this, "PBXFrameworksBuildPhase_" + _targets[IOS_TARGET], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks");
framework_iPhone->addProperty("buildActionMask", "2147483647", "", SettingsNoValue);
framework_iPhone->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue);
framework_iPhone->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue);
framework_iPhone->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue);
// List of frameworks
Property iPhone_files;
iPhone_files.hasOrder = true;
iPhone_files.flags = SettingsAsList;
iPhone_files._hasOrder = true;
iPhone_files._flags = kSettingsAsList;
ValueList frameworks_iPhone;
frameworks_iPhone.push_back("CoreAudio.framework");
@ -420,10 +409,10 @@ void XcodeProvider::setupFrameworksBuildPhase() {
ADD_SETTING_ORDER_NOVALUE(iPhone_files, getHash(id), comment, order++);
ADD_BUILD_FILE(id, *framework, getHash(*framework), comment);
ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]);
addFileReference(*framework, *framework, properties[*framework]);
}
framework_iPhone->properties["files"] = iPhone_files;
framework_iPhone->_properties["files"] = iPhone_files;
_frameworksBuildPhase.add(framework_iPhone);
#endif
@ -431,13 +420,13 @@ void XcodeProvider::setupFrameworksBuildPhase() {
// ScummVM-OS X
Object *framework_OSX = new Object(this, "PBXFrameworksBuildPhase_" + _targets[OSX_TARGET], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks");
framework_OSX->addProperty("buildActionMask", "2147483647", "", SettingsNoValue);
framework_OSX->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue);
framework_OSX->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue);
framework_OSX->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue);
// List of frameworks
Property osx_files;
osx_files.hasOrder = true;
osx_files.flags = SettingsAsList;
osx_files._hasOrder = true;
osx_files._flags = kSettingsAsList;
ValueList frameworks_osx;
frameworks_osx.push_back("CoreFoundation.framework");
@ -462,10 +451,10 @@ void XcodeProvider::setupFrameworksBuildPhase() {
ADD_SETTING_ORDER_NOVALUE(osx_files, getHash(id), comment, order++);
ADD_BUILD_FILE(id, *framework, getHash(*framework), comment);
ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]);
addFileReference(*framework, *framework, properties[*framework]);
}
framework_OSX->properties["files"] = osx_files;
framework_OSX->_properties["files"] = osx_files;
_frameworksBuildPhase.add(framework_OSX);
#ifdef ENABLE_IOS
@ -473,13 +462,13 @@ void XcodeProvider::setupFrameworksBuildPhase() {
// Simulator
Object *framework_simulator = new Object(this, "PBXFrameworksBuildPhase_" + _targets[SIM_TARGET], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks");
framework_simulator->addProperty("buildActionMask", "2147483647", "", SettingsNoValue);
framework_simulator->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue);
framework_simulator->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue);
framework_simulator->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue);
// List of frameworks
Property simulator_files;
simulator_files.hasOrder = true;
simulator_files.flags = SettingsAsList;
simulator_files._hasOrder = true;
simulator_files._flags = kSettingsAsList;
ValueList frameworks_simulator;
frameworks_simulator.push_back("CoreAudio.framework");
@ -497,17 +486,17 @@ void XcodeProvider::setupFrameworksBuildPhase() {
ADD_SETTING_ORDER_NOVALUE(simulator_files, getHash(id), comment, order++);
ADD_BUILD_FILE(id, *framework, getHash(*framework), comment);
ADD_FILE_REFERENCE(*framework, *framework, properties[*framework]);
addFileReference(*framework, *framework, properties[*framework]);
}
framework_simulator->properties["files"] = simulator_files;
framework_simulator->_properties["files"] = simulator_files;
_frameworksBuildPhase.add(framework_simulator);
#endif
}
void XcodeProvider::setupNativeTarget() {
_nativeTarget.comment = "PBXNativeTarget";
_nativeTarget._comment = "PBXNativeTarget";
// Just use a hardcoded id for the Products-group
Group *productsGroup = new Group(this, "Products", "PBXGroup_CustomTemplate_Products_" , "");
@ -520,26 +509,26 @@ void XcodeProvider::setupNativeTarget() {
#endif
Object *target = new Object(this, "PBXNativeTarget_" + _targets[i], "PBXNativeTarget", "PBXNativeTarget", "", _targets[i]);
target->addProperty("buildConfigurationList", getHash("XCConfigurationList_" + _targets[i]), "Build configuration list for PBXNativeTarget \"" + _targets[i] + "\"", SettingsNoValue);
target->addProperty("buildConfigurationList", getHash("XCConfigurationList_" + _targets[i]), "Build configuration list for PBXNativeTarget \"" + _targets[i] + "\"", kSettingsNoValue);
Property buildPhases;
buildPhases.hasOrder = true;
buildPhases.flags = SettingsAsList;
buildPhases.settings[getHash("PBXResourcesBuildPhase_" + _targets[i])] = Setting("", "Resources", SettingsNoValue, 0, 0);
buildPhases.settings[getHash("PBXSourcesBuildPhase_" + _targets[i])] = Setting("", "Sources", SettingsNoValue, 0, 1);
buildPhases.settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", SettingsNoValue, 0, 2);
target->properties["buildPhases"] = buildPhases;
buildPhases._hasOrder = true;
buildPhases._flags = kSettingsAsList;
buildPhases._settings[getHash("PBXResourcesBuildPhase_" + _targets[i])] = Setting("", "Resources", kSettingsNoValue, 0, 0);
buildPhases._settings[getHash("PBXSourcesBuildPhase_" + _targets[i])] = Setting("", "Sources", kSettingsNoValue, 0, 1);
buildPhases._settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", kSettingsNoValue, 0, 2);
target->_properties["buildPhases"] = buildPhases;
target->addProperty("buildRules", "", "", SettingsNoValue|SettingsAsList);
target->addProperty("buildRules", "", "", kSettingsNoValue | kSettingsAsList);
target->addProperty("dependencies", "", "", SettingsNoValue|SettingsAsList);
target->addProperty("dependencies", "", "", kSettingsNoValue | kSettingsAsList);
target->addProperty("name", _targets[i], "", SettingsNoValue|SettingsQuoteVariable);
target->addProperty("productName", PROJECT_NAME, "", SettingsNoValue);
target->addProperty("name", _targets[i], "", kSettingsNoValue | kSettingsQuoteVariable);
target->addProperty("productName", PROJECT_NAME, "", kSettingsNoValue);
addProductFileReference("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i], PROJECT_DESCRIPTION ".app");
productsGroup->addChildByHash(getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app");
target->addProperty("productReference", getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app", SettingsNoValue);
target->addProperty("productType", "com.apple.product-type.application", "", SettingsNoValue|SettingsQuoteVariable);
target->addProperty("productReference", getHash("PBXFileReference_" PROJECT_DESCRIPTION ".app_" + _targets[i]), PROJECT_DESCRIPTION ".app", kSettingsNoValue);
target->addProperty("productType", "com.apple.product-type.application", "", kSettingsNoValue | kSettingsQuoteVariable);
_nativeTarget.add(target);
}
@ -548,49 +537,49 @@ void XcodeProvider::setupNativeTarget() {
}
void XcodeProvider::setupProject() {
_project.comment = "PBXProject";
_project._comment = "PBXProject";
Object *project = new Object(this, "PBXProject", "PBXProject", "PBXProject", "", "Project object");
project->addProperty("buildConfigurationList", getHash("XCConfigurationList_scummvm"), "Build configuration list for PBXProject \"" PROJECT_NAME "\"", SettingsNoValue);
project->addProperty("compatibilityVersion", "Xcode 3.2", "", SettingsNoValue|SettingsQuoteVariable);
project->addProperty("developmentRegion", "English", "", SettingsNoValue);
project->addProperty("hasScannedForEncodings", "1", "", SettingsNoValue);
project->addProperty("buildConfigurationList", getHash("XCConfigurationList_scummvm"), "Build configuration list for PBXProject \"" PROJECT_NAME "\"", kSettingsNoValue);
project->addProperty("compatibilityVersion", "Xcode 3.2", "", kSettingsNoValue | kSettingsQuoteVariable);
project->addProperty("developmentRegion", "English", "", kSettingsNoValue);
project->addProperty("hasScannedForEncodings", "1", "", kSettingsNoValue);
// List of known regions
Property regions;
regions.flags = SettingsAsList;
regions._flags = kSettingsAsList;
ADD_SETTING_ORDER_NOVALUE(regions, "English", "", 0);
ADD_SETTING_ORDER_NOVALUE(regions, "Japanese", "", 1);
ADD_SETTING_ORDER_NOVALUE(regions, "French", "", 2);
ADD_SETTING_ORDER_NOVALUE(regions, "German", "", 3);
project->properties["knownRegions"] = regions;
project->_properties["knownRegions"] = regions;
project->addProperty("mainGroup", _rootSourceGroup->getHashRef(), "CustomTemplate", SettingsNoValue);
project->addProperty("projectDirPath", _projectRoot, "", SettingsNoValue|SettingsQuoteVariable);
project->addProperty("projectRoot", "", "", SettingsNoValue|SettingsQuoteVariable);
project->addProperty("mainGroup", _rootSourceGroup->getHashRef(), "CustomTemplate", kSettingsNoValue);
project->addProperty("projectDirPath", _projectRoot, "", kSettingsNoValue | kSettingsQuoteVariable);
project->addProperty("projectRoot", "", "", kSettingsNoValue | kSettingsQuoteVariable);
// List of targets
Property targets;
targets.flags = SettingsAsList;
targets._flags = kSettingsAsList;
#ifdef ENABLE_IOS
targets.settings[getHash("PBXNativeTarget_" + _targets[IOS_TARGET])] = Setting("", _targets[IOS_TARGET], SettingsNoValue, 0, 0);
targets._settings[getHash("PBXNativeTarget_" + _targets[IOS_TARGET])] = Setting("", _targets[IOS_TARGET], kSettingsNoValue, 0, 0);
#endif
targets.settings[getHash("PBXNativeTarget_" + _targets[OSX_TARGET])] = Setting("", _targets[OSX_TARGET], SettingsNoValue, 0, 1);
targets._settings[getHash("PBXNativeTarget_" + _targets[OSX_TARGET])] = Setting("", _targets[OSX_TARGET], kSettingsNoValue, 0, 1);
#ifdef ENABLE_IOS
targets.settings[getHash("PBXNativeTarget_" + _targets[SIM_TARGET])] = Setting("", _targets[SIM_TARGET], SettingsNoValue, 0, 2);
targets._settings[getHash("PBXNativeTarget_" + _targets[SIM_TARGET])] = Setting("", _targets[SIM_TARGET], kSettingsNoValue, 0, 2);
#endif
project->properties["targets"] = targets;
project->_properties["targets"] = targets;
#ifndef ENABLE_IOS
// Force list even when there is only a single target
project->properties["targets"].flags |= SettingsSingleItem;
project->_properties["targets"]._flags |= kSettingsSingleItem;
#endif
_project.add(project);
}
void XcodeProvider::setupResourcesBuildPhase() {
_resourcesBuildPhase.comment = "PBXResourcesBuildPhase";
_resourcesBuildPhase._comment = "PBXResourcesBuildPhase";
// Setup resource file properties
std::map<std::string, FileProperty> properties;
@ -615,12 +604,12 @@ void XcodeProvider::setupResourcesBuildPhase() {
for (unsigned int i = 0; i < _targets.size(); i++) {
Object *resource = new Object(this, "PBXResourcesBuildPhase_" + _targets[i], "PBXResourcesBuildPhase", "PBXResourcesBuildPhase", "", "Resources");
resource->addProperty("buildActionMask", "2147483647", "", SettingsNoValue);
resource->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue);
// Add default files
Property files;
files.hasOrder = true;
files.flags = SettingsAsList;
files._hasOrder = true;
files._flags = kSettingsAsList;
ValueList files_list;
files_list.push_back("scummclassic.zip");
@ -646,28 +635,28 @@ void XcodeProvider::setupResourcesBuildPhase() {
ADD_SETTING_ORDER_NOVALUE(files, getHash(id), comment, order++);
// TODO Fix crash when adding build file for data
//ADD_BUILD_FILE(id, *file, comment);
ADD_FILE_REFERENCE(*file, *file, properties[*file]);
addFileReference(*file, *file, properties[*file]);
}
// Add custom files depending on the target
if (_targets[i] == PROJECT_DESCRIPTION "-OS X") {
files.settings[getHash("PBXResources_" PROJECT_NAME ".icns")] = Setting("", PROJECT_NAME ".icns in Resources", SettingsNoValue, 0, 6);
files._settings[getHash("PBXResources_" PROJECT_NAME ".icns")] = Setting("", PROJECT_NAME ".icns in Resources", kSettingsNoValue, 0, 6);
// Remove 2 iphone icon files
files.settings.erase(getHash("PBXResources_Default.png"));
files.settings.erase(getHash("PBXResources_icon.png"));
files._settings.erase(getHash("PBXResources_Default.png"));
files._settings.erase(getHash("PBXResources_icon.png"));
}
resource->properties["files"] = files;
resource->_properties["files"] = files;
resource->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue);
resource->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue);
_resourcesBuildPhase.add(resource);
}
}
void XcodeProvider::setupSourcesBuildPhase() {
_sourcesBuildPhase.comment = "PBXSourcesBuildPhase";
_sourcesBuildPhase._comment = "PBXSourcesBuildPhase";
// Setup source file properties
std::map<std::string, FileProperty> properties;
@ -676,24 +665,24 @@ void XcodeProvider::setupSourcesBuildPhase() {
for (unsigned int i = 0; i < _targets.size(); i++) {
Object *source = new Object(this, "PBXSourcesBuildPhase_" + _targets[i], "PBXSourcesBuildPhase", "PBXSourcesBuildPhase", "", "Sources");
source->addProperty("buildActionMask", "2147483647", "", SettingsNoValue);
source->addProperty("buildActionMask", "2147483647", "", kSettingsNoValue);
Property files;
files.hasOrder = true;
files.flags = SettingsAsList;
files._hasOrder = true;
files._flags = kSettingsAsList;
int order = 0;
for (std::vector<Object*>::iterator file = _buildFile.objects.begin(); file !=_buildFile.objects.end(); ++file) {
if (!producesObjectFileOnOSX((*file)->name)) {
for (std::vector<Object *>::iterator file = _buildFile._objects.begin(); file != _buildFile._objects.end(); ++file) {
if (!producesObjectFileOnOSX((*file)->_name)) {
continue;
}
std::string comment = (*file)->name + " in Sources";
ADD_SETTING_ORDER_NOVALUE(files, getHash((*file)->id), comment, order++);
std::string comment = (*file)->_name + " in Sources";
ADD_SETTING_ORDER_NOVALUE(files, getHash((*file)->_id), comment, order++);
}
source->properties["files"] = files;
source->_properties["files"] = files;
source->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue);
source->addProperty("runOnlyForDeploymentPostprocessing", "0", "", kSettingsNoValue);
_sourcesBuildPhase.add(source);
}
@ -702,8 +691,8 @@ void XcodeProvider::setupSourcesBuildPhase() {
// Setup all build configurations
void XcodeProvider::setupBuildConfiguration() {
_buildConfiguration.comment = "XCBuildConfiguration";
_buildConfiguration.flags = SettingsAsList;
_buildConfiguration._comment = "XCBuildConfiguration";
_buildConfiguration._flags = kSettingsAsList;
///****************************************
// * iPhone
@ -721,7 +710,7 @@ void XcodeProvider::setupBuildConfiguration() {
ValueList iPhone_FrameworkSearchPaths;
iPhone_FrameworkSearchPaths.push_back("$(inherited)");
iPhone_FrameworkSearchPaths.push_back("\"$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\"");
ADD_SETTING_LIST(iPhone_Debug, "FRAMEWORK_SEARCH_PATHS", iPhone_FrameworkSearchPaths, SettingsAsList, 5);
ADD_SETTING_LIST(iPhone_Debug, "FRAMEWORK_SEARCH_PATHS", iPhone_FrameworkSearchPaths, kSettingsAsList, 5);
ADD_SETTING(iPhone_Debug, "GCC_DYNAMIC_NO_PIC", "NO");
ADD_SETTING(iPhone_Debug, "GCC_ENABLE_CPP_EXCEPTIONS", "NO");
ADD_SETTING(iPhone_Debug, "GCC_ENABLE_FIX_AND_CONTINUE", "NO");
@ -734,12 +723,12 @@ void XcodeProvider::setupBuildConfiguration() {
iPhone_HeaderSearchPaths.push_back("$(SRCROOT)/engines/");
iPhone_HeaderSearchPaths.push_back("$(SRCROOT)");
iPhone_HeaderSearchPaths.push_back("include/");
ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, SettingsAsList|SettingsQuoteVariable, 5);
ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, kSettingsAsList | kSettingsQuoteVariable, 5);
ADD_SETTING(iPhone_Debug, "INFOPLIST_FILE", "Info.plist");
ValueList iPhone_LibPaths;
iPhone_LibPaths.push_back("$(inherited)");
iPhone_LibPaths.push_back("\"$(SRCROOT)/lib\"");
ADD_SETTING_LIST(iPhone_Debug, "LIBRARY_SEARCH_PATHS", iPhone_LibPaths, SettingsAsList, 5);
ADD_SETTING_LIST(iPhone_Debug, "LIBRARY_SEARCH_PATHS", iPhone_LibPaths, kSettingsAsList, 5);
ADD_SETTING(iPhone_Debug, "ONLY_ACTIVE_ARCH", "YES");
ADD_SETTING(iPhone_Debug, "PREBINDING", "NO");
ADD_SETTING(iPhone_Debug, "PRODUCT_NAME", PROJECT_DESCRIPTION);
@ -748,8 +737,8 @@ void XcodeProvider::setupBuildConfiguration() {
ADD_SETTING(iPhone_Debug, "SDKROOT", "iphoneos4.0");
ADD_SETTING_QUOTE(iPhone_Debug, "TARGETED_DEVICE_FAMILY", "1,2");
iPhone_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue);
iPhone_Debug_Object->properties["buildSettings"] = iPhone_Debug;
iPhone_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue);
iPhone_Debug_Object->_properties["buildSettings"] = iPhone_Debug;
// Release
Object *iPhone_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-iPhone_Release", _targets[IOS_TARGET] /* ScummVM-iPhone */, "XCBuildConfiguration", "PBXNativeTarget", "Release");
@ -759,8 +748,8 @@ void XcodeProvider::setupBuildConfiguration() {
REMOVE_SETTING(iPhone_Release, "GCC_DYNAMIC_NO_PIC");
ADD_SETTING(iPhone_Release, "WRAPPER_EXTENSION", "app");
iPhone_Release_Object->addProperty("name", "Release", "", SettingsNoValue);
iPhone_Release_Object->properties["buildSettings"] = iPhone_Release;
iPhone_Release_Object->addProperty("name", "Release", "", kSettingsNoValue);
iPhone_Release_Object->_properties["buildSettings"] = iPhone_Release;
_buildConfiguration.add(iPhone_Debug_Object);
_buildConfiguration.add(iPhone_Release_Object);
@ -787,7 +776,7 @@ void XcodeProvider::setupBuildConfiguration() {
ADD_DEFINE(scummvm_defines, "IPHONE");
ADD_DEFINE(scummvm_defines, "XCODE");
ADD_DEFINE(scummvm_defines, "IPHONE_OFFICIAL");
ADD_SETTING_LIST(scummvm_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote|SettingsAsList, 5);
ADD_SETTING_LIST(scummvm_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, kSettingsNoQuote | kSettingsAsList, 5);
ADD_SETTING(scummvm_Debug, "GCC_THUMB_SUPPORT", "NO");
ADD_SETTING(scummvm_Debug, "GCC_USE_GCC3_PFE_SUPPORT", "NO");
ADD_SETTING(scummvm_Debug, "GCC_WARN_ABOUT_RETURN_TYPE", "YES");
@ -796,7 +785,7 @@ void XcodeProvider::setupBuildConfiguration() {
scummvm_HeaderPaths.push_back("include/");
scummvm_HeaderPaths.push_back("$(SRCROOT)/engines/");
scummvm_HeaderPaths.push_back("$(SRCROOT)");
ADD_SETTING_LIST(scummvm_Debug, "HEADER_SEARCH_PATHS", scummvm_HeaderPaths, SettingsQuoteVariable|SettingsAsList, 5);
ADD_SETTING_LIST(scummvm_Debug, "HEADER_SEARCH_PATHS", scummvm_HeaderPaths, kSettingsQuoteVariable | kSettingsAsList, 5);
ADD_SETTING_QUOTE(scummvm_Debug, "LIBRARY_SEARCH_PATHS", "");
ADD_SETTING(scummvm_Debug, "ONLY_ACTIVE_ARCH", "YES");
ADD_SETTING_QUOTE(scummvm_Debug, "OTHER_CFLAGS", "");
@ -804,8 +793,8 @@ void XcodeProvider::setupBuildConfiguration() {
ADD_SETTING(scummvm_Debug, "PREBINDING", "NO");
ADD_SETTING(scummvm_Debug, "SDKROOT", "macosx");
scummvm_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue);
scummvm_Debug_Object->properties["buildSettings"] = scummvm_Debug;
scummvm_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue);
scummvm_Debug_Object->_properties["buildSettings"] = scummvm_Debug;
// Release
Object *scummvm_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_NAME "_Release", PROJECT_NAME, "XCBuildConfiguration", "PBXProject", "Release");
@ -815,8 +804,8 @@ void XcodeProvider::setupBuildConfiguration() {
REMOVE_SETTING(scummvm_Release, "GCC_WARN_UNUSED_VARIABLE");
REMOVE_SETTING(scummvm_Release, "ONLY_ACTIVE_ARCH");
scummvm_Release_Object->addProperty("name", "Release", "", SettingsNoValue);
scummvm_Release_Object->properties["buildSettings"] = scummvm_Release;
scummvm_Release_Object->addProperty("name", "Release", "", kSettingsNoValue);
scummvm_Release_Object->_properties["buildSettings"] = scummvm_Release;
_buildConfiguration.add(scummvm_Debug_Object);
_buildConfiguration.add(scummvm_Release_Object);
@ -844,7 +833,7 @@ void XcodeProvider::setupBuildConfiguration() {
ValueList scummvmOSX_defines(_defines);
ADD_DEFINE(scummvmOSX_defines, "SDL_BACKEND");
ADD_DEFINE(scummvmOSX_defines, "MACOSX");
ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, SettingsNoQuote|SettingsAsList, 5);
ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, kSettingsNoQuote | kSettingsAsList, 5);
ADD_SETTING_QUOTE(scummvmOSX_Debug, "GCC_VERSION", "");
ValueList scummvmOSX_HeaderPaths;
scummvmOSX_HeaderPaths.push_back("/opt/local/include/SDL");
@ -853,14 +842,14 @@ void XcodeProvider::setupBuildConfiguration() {
scummvmOSX_HeaderPaths.push_back("include/");
scummvmOSX_HeaderPaths.push_back("$(SRCROOT)/engines/");
scummvmOSX_HeaderPaths.push_back("$(SRCROOT)");
ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, SettingsQuoteVariable|SettingsAsList, 5);
ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, kSettingsQuoteVariable | kSettingsAsList, 5);
ADD_SETTING_QUOTE(scummvmOSX_Debug, "INFOPLIST_FILE", "$(SRCROOT)/dists/macosx/Info.plist");
ValueList scummvmOSX_LibPaths;
scummvmOSX_LibPaths.push_back("/sw/lib");
scummvmOSX_LibPaths.push_back("/opt/local/lib");
scummvmOSX_LibPaths.push_back("\"$(inherited)\"");
scummvmOSX_LibPaths.push_back("\"\\\\\\\"$(SRCROOT)/lib\\\\\\\"\""); // mmmh, all those slashes, it's almost Christmas \o/
ADD_SETTING_LIST(scummvmOSX_Debug, "LIBRARY_SEARCH_PATHS", scummvmOSX_LibPaths, SettingsNoQuote|SettingsAsList, 5);
ADD_SETTING_LIST(scummvmOSX_Debug, "LIBRARY_SEARCH_PATHS", scummvmOSX_LibPaths, kSettingsNoQuote | kSettingsAsList, 5);
ADD_SETTING_QUOTE(scummvmOSX_Debug, "OTHER_CFLAGS", "");
ValueList scummvmOSX_LdFlags;
scummvmOSX_LdFlags.push_back("-lSDLmain");
@ -875,12 +864,12 @@ void XcodeProvider::setupBuildConfiguration() {
scummvmOSX_LdFlags.push_back("-lFLAC");
scummvmOSX_LdFlags.push_back("-lSDL");
scummvmOSX_LdFlags.push_back("-lz");
ADD_SETTING_LIST(scummvmOSX_Debug, "OTHER_LDFLAGS", scummvmOSX_LdFlags, SettingsAsList, 5);
ADD_SETTING_LIST(scummvmOSX_Debug, "OTHER_LDFLAGS", scummvmOSX_LdFlags, kSettingsAsList, 5);
ADD_SETTING(scummvmOSX_Debug, "PREBINDING", "NO");
ADD_SETTING(scummvmOSX_Debug, "PRODUCT_NAME", PROJECT_DESCRIPTION);
scummvmOSX_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue);
scummvmOSX_Debug_Object->properties["buildSettings"] = scummvmOSX_Debug;
scummvmOSX_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue);
scummvmOSX_Debug_Object->_properties["buildSettings"] = scummvmOSX_Debug;
// Release
Object *scummvmOSX_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-OSX_Release", _targets[OSX_TARGET] /* ScummVM-OS X */, "XCBuildConfiguration", "PBXNativeTarget", "Release");
@ -890,8 +879,8 @@ void XcodeProvider::setupBuildConfiguration() {
REMOVE_SETTING(scummvmOSX_Release, "GCC_OPTIMIZATION_LEVEL");
ADD_SETTING(scummvmOSX_Release, "WRAPPER_EXTENSION", "app");
scummvmOSX_Release_Object->addProperty("name", "Release", "", SettingsNoValue);
scummvmOSX_Release_Object->properties["buildSettings"] = scummvmOSX_Release;
scummvmOSX_Release_Object->addProperty("name", "Release", "", kSettingsNoValue);
scummvmOSX_Release_Object->_properties["buildSettings"] = scummvmOSX_Release;
_buildConfiguration.add(scummvmOSX_Debug_Object);
_buildConfiguration.add(scummvmOSX_Release_Object);
@ -904,13 +893,13 @@ void XcodeProvider::setupBuildConfiguration() {
Object *scummvmSimulator_Debug_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-Simulator_Debug", _targets[SIM_TARGET] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Debug");
Property scummvmSimulator_Debug(iPhone_Debug);
ADD_SETTING_QUOTE(scummvmSimulator_Debug, "FRAMEWORK_SEARCH_PATHS", "$(inherited)");
ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote|SettingsAsList, 5);
ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, kSettingsNoQuote | kSettingsAsList, 5);
ADD_SETTING(scummvmSimulator_Debug, "SDKROOT", "iphonesimulator3.2");
ADD_SETTING_QUOTE(scummvmSimulator_Debug, "VALID_ARCHS", "i386 x86_64");
REMOVE_SETTING(scummvmSimulator_Debug, "TARGETED_DEVICE_FAMILY");
scummvmSimulator_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue);
scummvmSimulator_Debug_Object->properties["buildSettings"] = scummvmSimulator_Debug;
scummvmSimulator_Debug_Object->addProperty("name", "Debug", "", kSettingsNoValue);
scummvmSimulator_Debug_Object->_properties["buildSettings"] = scummvmSimulator_Debug;
// Release
Object *scummvmSimulator_Release_Object = new Object(this, "XCBuildConfiguration_" PROJECT_DESCRIPTION "-Simulator_Release", _targets[SIM_TARGET] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Release");
@ -920,32 +909,32 @@ void XcodeProvider::setupBuildConfiguration() {
REMOVE_SETTING(scummvmSimulator_Release, "GCC_DYNAMIC_NO_PIC");
ADD_SETTING(scummvmSimulator_Release, "WRAPPER_EXTENSION", "app");
scummvmSimulator_Release_Object->addProperty("name", "Release", "", SettingsNoValue);
scummvmSimulator_Release_Object->properties["buildSettings"] = scummvmSimulator_Release;
scummvmSimulator_Release_Object->addProperty("name", "Release", "", kSettingsNoValue);
scummvmSimulator_Release_Object->_properties["buildSettings"] = scummvmSimulator_Release;
_buildConfiguration.add(scummvmSimulator_Debug_Object);
_buildConfiguration.add(scummvmSimulator_Release_Object);
//////////////////////////////////////////////////////////////////////////
// Configuration List
_configurationList.comment = "XCConfigurationList";
_configurationList.flags = SettingsAsList;
_configurationList._comment = "XCConfigurationList";
_configurationList._flags = kSettingsAsList;
#endif
// Warning: This assumes we have all configurations with a Debug & Release pair
for (std::vector<Object *>::iterator config = _buildConfiguration.objects.begin(); config != _buildConfiguration.objects.end(); config++) {
for (std::vector<Object *>::iterator config = _buildConfiguration._objects.begin(); config != _buildConfiguration._objects.end(); config++) {
Object *configList = new Object(this, "XCConfigurationList_" + (*config)->name, (*config)->name, "XCConfigurationList", "", "Build configuration list for " + (*config)->refType + " \"" + (*config)->name + "\"");
Object *configList = new Object(this, "XCConfigurationList_" + (*config)->_name, (*config)->_name, "XCConfigurationList", "", "Build configuration list for " + (*config)->_refType + " \"" + (*config)->_name + "\"");
Property buildConfigs;
buildConfigs.flags = SettingsAsList;
buildConfigs._flags = kSettingsAsList;
buildConfigs.settings[getHash((*config)->id)] = Setting("", "Debug", SettingsNoValue, 0, 0);
buildConfigs.settings[getHash((*(++config))->id)] = Setting("", "Release", SettingsNoValue, 0, 1);
buildConfigs._settings[getHash((*config)->_id)] = Setting("", "Debug", kSettingsNoValue, 0, 0);
buildConfigs._settings[getHash((*(++config))->_id)] = Setting("", "Release", kSettingsNoValue, 0, 1);
configList->properties["buildConfigurations"] = buildConfigs;
configList->_properties["buildConfigurations"] = buildConfigs;
configList->addProperty("defaultConfigurationIsVisible", "0", "", SettingsNoValue);
configList->addProperty("defaultConfigurationName", "Release", "", SettingsNoValue);
configList->addProperty("defaultConfigurationIsVisible", "0", "", kSettingsNoValue);
configList->addProperty("defaultConfigurationName", "Release", "", kSettingsNoValue);
_configurationList.add(configList);
}
@ -959,7 +948,7 @@ void XcodeProvider::setupBuildConfiguration() {
void XcodeProvider::setupDefines(const BuildSetup &setup) {
for (StringList::const_iterator i = setup.defines.begin(); i != setup.defines.end(); ++i) {
if (*i == "HAVE_NASM") // Not supported on Mac (TODO: change how it's handled in main class or add it only in MSVC/CodeBlocks providers?)
if (*i == "HAVE_NASM") // Not supported on Mac (TODO: change how it's handled in main class or add it only in MSVC/CodeBlocks providers?)
continue;
ADD_DEFINE(_defines, *i);
@ -995,7 +984,7 @@ std::string XcodeProvider::getHash(std::string key) {
#endif
}
bool isSeparator (char s) { return (s == '-'); }
bool isSeparator(char s) { return (s == '-'); }
std::string XcodeProvider::newHash() const {
std::string hash = createUUID();
@ -1018,10 +1007,10 @@ std::string replace(std::string input, const std::string find, std::string repla
std::string::size_type findLen = find.length();
std::string::size_type replaceLen = replaceStr.length();
if (findLen == 0 )
if (findLen == 0)
return input;
for (;(pos = input.find(find, pos)) != std::string::npos;) {
for (; (pos = input.find(find, pos)) != std::string::npos;) {
input.replace(pos, findLen, replaceStr);
pos += replaceLen;
}
@ -1032,30 +1021,30 @@ std::string replace(std::string input, const std::string find, std::string repla
std::string XcodeProvider::writeProperty(const std::string &variable, Property &prop, int flags) const {
std::string output;
output += (flags & SettingsSingleItem ? "" : "\t\t\t") + variable + " = ";
output += (flags & kSettingsSingleItem ? "" : "\t\t\t") + variable + " = ";
if (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem))
output += (prop.flags & SettingsAsList) ? "(\n" : "{\n";
if (prop._settings.size() > 1 || (prop._flags & kSettingsSingleItem))
output += (prop._flags & kSettingsAsList) ? "(\n" : "{\n";
OrderedSettingList settings = prop.getOrderedSettingList();
for (OrderedSettingList::const_iterator setting = settings.begin(); setting != settings.end(); ++setting) {
if (settings.size() > 1 || (prop.flags & SettingsSingleItem))
output += (flags & SettingsSingleItem ? " " : "\t\t\t\t");
if (settings.size() > 1 || (prop._flags & kSettingsSingleItem))
output += (flags & kSettingsSingleItem ? " " : "\t\t\t\t");
output += writeSetting((*setting).first, (*setting).second);
output += writeSetting(setting->first, setting->second);
// The combination of SettingsAsList, and SettingsSingleItem should use "," and not ";" (i.e children
// The combination of kSettingsAsList, and kSettingsSingleItem should use "," and not ";" (i.e children
// in PBXGroup, so we special case that case here.
if ((prop.flags & SettingsAsList) && (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem))) {
output += (prop.settings.size() > 0) ? ",\n" : "\n";
if ((prop._flags & kSettingsAsList) && (prop._settings.size() > 1 || (prop._flags & kSettingsSingleItem))) {
output += (prop._settings.size() > 0) ? ",\n" : "\n";
} else {
output += ";";
output += (flags & SettingsSingleItem ? " " : "\n");
output += (flags & kSettingsSingleItem ? " " : "\n");
}
}
if (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem))
output += (prop.flags & SettingsAsList) ? "\t\t\t);\n" : "\t\t\t};\n";
if (prop._settings.size() > 1 || (prop._flags & kSettingsSingleItem))
output += (prop._flags & kSettingsAsList) ? "\t\t\t);\n" : "\t\t\t};\n";
return output;
}
@ -1068,32 +1057,32 @@ std::string XcodeProvider::writeSetting(const std::string &variable, std::string
// XCode project generator pbuilder_pbx.cpp, writeSettings() (under LGPL 2.1)
std::string XcodeProvider::writeSetting(const std::string &variable, const Setting &setting) const {
std::string output;
const std::string quote = (setting.flags & SettingsNoQuote) ? "" : "\"";
const std::string quote = (setting._flags & kSettingsNoQuote) ? "" : "\"";
const std::string escape_quote = quote.empty() ? "" : "\\" + quote;
std::string newline = "\n";
// Get indent level
for (int i = 0; i < setting.indent; ++i)
for (int i = 0; i < setting._indent; ++i)
newline += "\t";
// Setup variable
std::string var = (setting.flags & SettingsQuoteVariable) ? "\"" + variable + "\"" : variable;
std::string var = (setting._flags & kSettingsQuoteVariable) ? "\"" + variable + "\"" : variable;
// Output a list
if (setting.flags & SettingsAsList) {
if (setting._flags & kSettingsAsList) {
output += var + ((setting.flags & SettingsNoValue) ? "(" : " = (") + newline;
output += var + ((setting._flags & kSettingsNoValue) ? "(" : " = (") + newline;
for (unsigned int i = 0, count = 0; i < setting.entries.size(); ++i) {
for (unsigned int i = 0, count = 0; i < setting._entries.size(); ++i) {
std::string value = setting.entries.at(i).value;
std::string value = setting._entries.at(i)._value;
if (!value.empty()) {
if (count++ > 0)
output += "," + newline;
output += quote + replace(value, quote, escape_quote) + quote;
std::string comment = setting.entries.at(i).comment;
std::string comment = setting._entries.at(i)._comment;
if (!comment.empty())
output += " /* " + comment + " */";
}
@ -1101,24 +1090,24 @@ std::string XcodeProvider::writeSetting(const std::string &variable, const Setti
}
// Add closing ")" on new line
newline.resize(newline.size() - 1);
output += (setting.flags & SettingsNoValue) ? "\t\t\t)" : "," + newline + ")";
output += (setting._flags & kSettingsNoValue) ? "\t\t\t)" : "," + newline + ")";
} else {
output += var;
output += (setting.flags & SettingsNoValue) ? "" : " = " + quote;
output += (setting._flags & kSettingsNoValue) ? "" : " = " + quote;
for(unsigned int i = 0; i < setting.entries.size(); ++i) {
std::string value = setting.entries.at(i).value;
if(i)
for (unsigned int i = 0; i < setting._entries.size(); ++i) {
std::string value = setting._entries.at(i)._value;
if (i)
output += " ";
output += value;
std::string comment = setting.entries.at(i).comment;
std::string comment = setting._entries.at(i)._comment;
if (!comment.empty())
output += " /* " + comment + " */";
}
output += (setting.flags & SettingsNoValue) ? "" : quote;
output += (setting._flags & kSettingsNoValue) ? "" : quote;
}
return output;
}

View file

@ -47,24 +47,23 @@ protected:
const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix);
private:
enum {
SettingsAsList = 0x01,
SettingsSingleItem = 0x02,
SettingsNoQuote = 0x04,
SettingsQuoteVariable = 0x08,
SettingsNoValue = 0x10
kSettingsAsList = 0x01,
kSettingsSingleItem = 0x02,
kSettingsNoQuote = 0x04,
kSettingsQuoteVariable = 0x08,
kSettingsNoValue = 0x10
};
// File properties
struct FileProperty {
std::string fileEncoding;
std::string lastKnownFileType;
std::string fileName;
std::string filePath;
std::string sourceTree;
std::string _fileEncoding;
std::string _lastKnownFileType;
std::string _fileName;
std::string _filePath;
std::string _sourceTree;
FileProperty(std::string fileType = "", std::string name = "", std::string path = "", std::string source = "") :
fileEncoding(""), lastKnownFileType(fileType), fileName(name), filePath(path), sourceTree(source)
{
FileProperty(std::string fileType = "", std::string name = "", std::string path = "", std::string source = "")
: _fileEncoding(""), _lastKnownFileType(fileType), _fileName(name), _filePath(path), _sourceTree(source) {
}
};
@ -73,33 +72,33 @@ private:
typedef std::vector<std::string> ValueList;
struct Entry {
std::string value;
std::string comment;
std::string _value;
std::string _comment;
Entry(std::string val, std::string cmt) : value(val), comment(cmt) {}
Entry(std::string val, std::string cmt) : _value(val), _comment(cmt) {}
};
typedef std::vector<Entry> EntryList;
struct Setting {
EntryList entries;
int flags;
int indent;
int order;
EntryList _entries;
int _flags;
int _indent;
int _order;
explicit Setting(std::string value = "", std::string comment = "", int flgs = 0, int idt = 0, int ord = -1) : flags(flgs), indent(idt), order(ord) {
entries.push_back(Entry(value, comment));
Setting(std::string value = "", std::string comment = "", int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) {
_entries.push_back(Entry(value, comment));
}
explicit Setting(ValueList values, int flgs = 0, int idt = 0, int ord = -1) : flags(flgs), indent(idt), order(ord) {
Setting(ValueList values, int flgs = 0, int idt = 0, int ord = -1) : _flags(flgs), _indent(idt), _order(ord) {
for (unsigned int i = 0; i < values.size(); i++)
entries.push_back(Entry(values[i], ""));
_entries.push_back(Entry(values[i], ""));
}
explicit Setting(EntryList ents, int flgs = 0, int idt = 0, int ord = -1) : entries(ents), flags(flgs), indent(idt), order(ord) {}
Setting(EntryList ents, int flgs = 0, int idt = 0, int ord = -1) : _entries(ents), _flags(flgs), _indent(idt), _order(ord) {}
void addEntry(std::string value, std::string comment = "") {
entries.push_back(Entry(value, comment));
_entries.push_back(Entry(value, comment));
}
};
@ -107,46 +106,36 @@ private:
typedef std::pair<std::string, Setting> SettingPair;
typedef std::vector<SettingPair> OrderedSettingList;
static bool OrderSortPredicate(const SettingPair& s1, const SettingPair& s2) {
return s1.second.order < s2.second.order;
static bool OrderSortPredicate(const SettingPair &s1, const SettingPair &s2) {
return s1.second._order < s2.second._order;
}
struct Property {
public:
SettingList settings;
int flags;
bool hasOrder;
SettingList _settings;
int _flags;
bool _hasOrder;
Property() : flags(0), hasOrder(false) {}
Property() : _flags(0), _hasOrder(false) {}
// Constructs a simple Property
explicit Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : flags(flgs), hasOrder(order) {
Setting setting(value, comment, flags, indent);
settings[name] = setting;
Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) {
_settings[name] = Setting(value, comment, _flags, indent);
}
Property(std::string name, ValueList values, int flgs = 0, int indent = 0, bool order = false) : flags(flgs), hasOrder(order) {
Setting setting(values, flags, indent);
settings[name] = setting;
}
// Copy constructor
Property(const Property &rhs) {
settings = rhs.settings;
flags = rhs.flags;
Property(std::string name, ValueList values, int flgs = 0, int indent = 0, bool order = false) : _flags(flgs), _hasOrder(order) {
_settings[name] = Setting(values, _flags, indent);
}
OrderedSettingList getOrderedSettingList() {
OrderedSettingList list;
// Prepare vector to sort
for (SettingList::const_iterator setting = settings.begin(); setting != settings.end(); ++setting)
for (SettingList::const_iterator setting = _settings.begin(); setting != _settings.end(); ++setting)
list.push_back(SettingPair(setting->first, setting->second));
// Sort vector using setting order
if (hasOrder)
if (_hasOrder)
std::sort(list.begin(), list.end(), OrderSortPredicate);
return list;
@ -160,48 +149,48 @@ private:
// be overkill since we only have to generate a single project
struct Object {
public:
std::string id; // Unique identifier for this object
std::string name; // Name (may not be unique - for ex. configuration entries)
std::string refType; // Type of object this references (if any)
std::string comment; // Main comment (empty for no comment)
std::string _id; // Unique identifier for this object
std::string _name; // Name (may not be unique - for ex. configuration entries)
std::string _refType; // Type of object this references (if any)
std::string _comment; // Main comment (empty for no comment)
PropertyList properties; // List of object properties, including output configuration
PropertyList _properties; // List of object properties, including output configuration
// Constructs an object and add a default type property
Object(XcodeProvider *objectParent, std::string objectId, std::string objectName, std::string objectType, std::string objectRefType = "", std::string objectComment = "")
: id(objectId), name(objectName), refType(objectRefType), comment(objectComment), parent(objectParent) {
: _id(objectId), _name(objectName), _refType(objectRefType), _comment(objectComment), _parent(objectParent) {
assert(objectParent);
assert(!objectId.empty());
assert(!objectName.empty());
assert(!objectType.empty());
addProperty("isa", objectType, "", SettingsNoQuote|SettingsNoValue);
addProperty("isa", objectType, "", kSettingsNoQuote | kSettingsNoValue);
}
// Add a simple Property with just a name and a value
void addProperty(std::string propName, std::string propValue, std::string propComment = "", int propFlags = 0, int propIndent = 0) {
properties[propName] = Property(propValue, "", propComment, propFlags, propIndent);
_properties[propName] = Property(propValue, "", propComment, propFlags, propIndent);
}
std::string toString(int flags = 0) {
std::string output;
output = "\t\t" + parent->getHash(id) + (comment.empty() ? "" : " /* " + comment + " */") + " = {";
output = "\t\t" + _parent->getHash(_id) + (_comment.empty() ? "" : " /* " + _comment + " */") + " = {";
if (flags & SettingsAsList)
if (flags & kSettingsAsList)
output += "\n";
// Special case: always output the isa property first
output += parent->writeProperty("isa", properties["isa"], flags);
output += _parent->writeProperty("isa", _properties["isa"], flags);
// Write each property
for (PropertyList::iterator property = properties.begin(); property != properties.end(); ++property) {
if ((*property).first == "isa")
for (PropertyList::iterator property = _properties.begin(); property != _properties.end(); ++property) {
if (property->first == "isa")
continue;
output += parent->writeProperty((*property).first, (*property).second, flags);
output += _parent->writeProperty(property->first, property->second, flags);
}
if (flags & SettingsAsList)
if (flags & kSettingsAsList)
output += "\t\t";
output += "};\n";
@ -209,50 +198,49 @@ private:
return output;
}
// Slight hack, to allow Group access to parent.
// Slight hack, to allow Group access to parent.
protected:
XcodeProvider *parent;
XcodeProvider *_parent;
private:
// Returns the type property (should always be the first in the properties map)
std::string getType() {
assert(!properties.empty());
assert(!properties["isa"].settings.empty());
assert(!_properties.empty());
assert(!_properties["isa"]._settings.empty());
SettingList::iterator it = properties["isa"].settings.begin();
return (*it).first;
SettingList::iterator it = _properties["isa"]._settings.begin();
return it->first;
}
};
struct ObjectList {
private:
std::map<std::string, bool> objectMap;
std::map<std::string, bool> _objectMap;
public:
std::vector<Object *> objects;
std::string comment;
int flags;
std::vector<Object *> _objects;
std::string _comment;
int _flags;
void add(Object *obj) {
std::map<std::string, bool>::iterator it = objectMap.find(obj->id);
if (it != objectMap.end() && it->second == true)
std::map<std::string, bool>::iterator it = _objectMap.find(obj->_id);
if (it != _objectMap.end() && it->second == true)
return;
objects.push_back(obj);
objectMap[obj->id] = true;
_objects.push_back(obj);
_objectMap[obj->_id] = true;
}
std::string toString() {
std::string output;
if (!comment.empty())
output = "\n/* Begin " + comment + " section */\n";
if (!_comment.empty())
output = "\n/* Begin " + _comment + " section */\n";
for (std::vector<Object *>::iterator object = objects.begin(); object != objects.end(); ++object)
output += (*object)->toString(flags);
for (std::vector<Object *>::iterator object = _objects.begin(); object != _objects.end(); ++object)
output += (*object)->toString(_flags);
if (!comment.empty())
output += "/* End " + comment + " section */\n";
if (!_comment.empty())
output += "/* End " + _comment + " section */\n";
return output;
}
@ -271,10 +259,10 @@ private:
void addChildFile(const std::string &name);
void addChildByHash(const std::string &hash, const std::string &name);
// Should be passed the hash for the entry
void addChildGroup(const Group* group);
void addChildGroup(const Group *group);
void ensureChildExists(const std::string &name);
Group *getChildGroup(const std::string &name);
std::string getHashRef() const { return parent->getHash(id); }
std::string getHashRef() const { return _parent->getHash(_id); }
};
// The path used by the root-source group

View file

@ -26,10 +26,10 @@
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
typedef signed short int16;
typedef signed short int16;
#ifndef __has_feature // Optional of course.
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#ifndef __has_feature // Optional of course.
#define __has_feature(x) 0 // Compatibility with non-clang compilers.
#endif
#endif /* CREATE_TRANSLATIONS_H */

View file

@ -35,12 +35,12 @@ Unauthorized distribution of an installable package with non freeware games incl
Building from source
====================
This port of ResidualVM to the PS3 is based on SDL. It uses the open source SDK PSL1GHT.
This port of ResidualVM to the PS3 is based on SDL2. It uses the open source SDK PSL1GHT.
The dependencies needed to build it are :
- The toolchain from https://github.com/ps3dev/ps3toolchain
- SDL from https://github.com/zeldin/SDL_PSL1GHT
- SDL from https://bitbucket.org/bgK/sdl_psl1ght
- ResidualVM from https://github.com/residualvm/residualvm
Once all the dependencies are correctly setup, an installable package can be obtained from source by issuing the following command :

View file

@ -40,7 +40,6 @@ Name: {group}\KnownBugs; Filename: {app}\KNOWN_BUGS.txt; WorkingDir: {app}; Comm
;NEWS
Name: {group}\News; Filename: {app}\NEWS.txt; WorkingDir: {app}; Comment: NEWS; Flags: createonlyiffileexists
;QUICKSTART
Name: {group}\QuickStart; Filename: {app}\QUICKSTART.txt; WorkingDir: {app}; Comment: QUICKSTART; Flags: createonlyiffileexists
;README
Name: {group}\Readme; Filename: {app}\README.txt; WorkingDir: {app}; Comment: README; Flags: createonlyiffileexists
@ -71,7 +70,6 @@ Source: KNOWN_BUGS.txt; DestDir: {app}; Flags: ignoreversion
;NEWS
Source: NEWS.txt; DestDir: {app}; Flags: ignoreversion
;QUICKSTART
Source: doc/QUICKSTART.txt; DestDir: {app}; Flags: ignoreversion isreadme
;README
Source: README.txt; DestDir: {app}; Flags: ignoreversion isreadme
Source: README-SDL.txt; DestDir: {app}; Flags: ignoreversion

View file

@ -33,11 +33,15 @@
#include "common/singleton.h"
#include "common/stream.h"
#include "common/memstream.h"
#include "common/hashmap.h"
#include "common/ptr.h"
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include FT_TRUETYPE_TABLES_H
#include FT_TRUETYPE_TAGS_H
namespace Graphics {
@ -47,6 +51,10 @@ inline int ftCeil26_6(FT_Pos x) {
return (x + 63) / 64;
}
inline int divRoundToNearest(int dividend, int divisor) {
return (dividend + (divisor / 2)) / divisor;
}
} // End of anonymous namespace
class TTFLibrary : public Common::Singleton<TTFLibrary> {
@ -101,7 +109,7 @@ public:
TTFFont();
virtual ~TTFFont();
bool load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping);
bool load(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping);
virtual int getFontHeight() const;
@ -137,6 +145,12 @@ private:
bool _allowLateCaching;
void assureCached(uint32 chr) const;
Common::SeekableReadStream *readTTFTable(FT_ULong tag) const;
int computePointSize(int size, TTFSizeMode sizeMode) const;
int readPointSizeFromVDMXTable(int height) const;
int computePointSizeFromHeaders(int height) const;
FT_Int32 _loadFlags;
FT_Render_Mode _renderMode;
bool _hasKerning;
@ -162,7 +176,7 @@ TTFFont::~TTFFont() {
}
}
bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
bool TTFFont::load(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
if (!g_ttf.isInitialized())
return false;
@ -200,7 +214,7 @@ bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRe
// Check whether we have kerning support
_hasKerning = (FT_HAS_KERNING(_face) != 0);
if (FT_Set_Char_Size(_face, 0, size * 64, dpi, dpi)) {
if (FT_Set_Char_Size(_face, 0, computePointSize(size, sizeMode) * 64, dpi, dpi)) {
delete[] _ttfFile;
_ttfFile = 0;
@ -262,6 +276,126 @@ bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRe
return _initialized;
}
int TTFFont::computePointSize(int size, TTFSizeMode sizeMode) const {
int ptSize;
switch (sizeMode) {
case kTTFSizeModeCell: {
ptSize = readPointSizeFromVDMXTable(size);
if (ptSize == 0) {
ptSize = computePointSizeFromHeaders(size);
}
if (ptSize == 0) {
warning("Unable to compute point size for font '%s'", _face->family_name);
ptSize = 1;
}
break;
}
case kTTFSizeModeCharacter:
ptSize = size;
break;
}
return ptSize;
}
Common::SeekableReadStream *TTFFont::readTTFTable(FT_ULong tag) const {
// Find the required buffer size by calling the load function with nullptr
FT_ULong size = 0;
FT_Error err = FT_Load_Sfnt_Table(_face, tag, 0, nullptr, &size);
if (err) {
return nullptr;
}
byte *buf = (byte *)malloc(size);
if (!buf) {
return nullptr;
}
err = FT_Load_Sfnt_Table(_face, tag, 0, buf, &size);
if (err) {
free(buf);
return nullptr;
}
return new Common::MemoryReadStream(buf, size, DisposeAfterUse::YES);
}
int TTFFont::readPointSizeFromVDMXTable(int height) const {
// The Vertical Device Metrics table matches font heights with point sizes.
// FreeType does not expose it, we have to parse it ourselves.
// See https://www.microsoft.com/typography/otspec/vdmx.htm
Common::ScopedPtr<Common::SeekableReadStream> vdmxBuf(readTTFTable(TTAG_VDMX));
if (!vdmxBuf) {
return 0;
}
// Read the main header
vdmxBuf->skip(4); // Skip the version
uint16 numRatios = vdmxBuf->readUint16BE();
// Compute the starting position for the group table positions table
int32 offsetTableStart = vdmxBuf->pos() + 4 * numRatios;
// Search the ratio table for the 1:1 ratio, or the default record (0, 0, 0)
int32 selectedRatio = -1;
for (uint16 i = 0; i < numRatios; i++) {
vdmxBuf->skip(1); // Skip the charset subset
uint8 xRatio = vdmxBuf->readByte();
uint8 yRatio1 = vdmxBuf->readByte();
uint8 yRatio2 = vdmxBuf->readByte();
if ((xRatio == 1 && yRatio1 <= 1 && yRatio2 >= 1)
|| (xRatio == 0 && yRatio1 == 0 && yRatio2 == 0)) {
selectedRatio = i;
break;
}
}
if (selectedRatio < 0) {
return 0;
}
// Read from group table positions table to get the group table offset
vdmxBuf->seek(offsetTableStart + sizeof(uint16) * selectedRatio);
uint16 groupOffset = vdmxBuf->readUint16BE();
// Read the group table header
vdmxBuf->seek(groupOffset);
uint16 numRecords = vdmxBuf->readUint16BE();
vdmxBuf->skip(2); // Skip the table bounds
// Search a record matching the required height
for (uint16 i = 0; i < numRecords; i++) {
uint16 pointSize = vdmxBuf->readUint16BE();
int16 yMax = vdmxBuf->readSint16BE();
int16 yMin = vdmxBuf->readSint16BE();
if (yMax + -yMin > height) {
return 0;
}
if (yMax + -yMin == height) {
return pointSize;
}
}
return 0;
}
int TTFFont::computePointSizeFromHeaders(int height) const {
TT_OS2 *os2Header = (TT_OS2 *)FT_Get_Sfnt_Table(_face, ft_sfnt_os2);
TT_HoriHeader *horiHeader = (TT_HoriHeader *)FT_Get_Sfnt_Table(_face, ft_sfnt_hhea);
if (os2Header && (os2Header->usWinAscent + os2Header->usWinDescent != 0)) {
return divRoundToNearest(_face->units_per_EM * height, os2Header->usWinAscent + os2Header->usWinDescent);
} else if (horiHeader && (horiHeader->Ascender + horiHeader->Descender != 0)) {
return divRoundToNearest(_face->units_per_EM * height, horiHeader->Ascender + horiHeader->Descender);
}
return 0;
}
int TTFFont::getFontHeight() const {
return _height;
}
@ -521,10 +655,10 @@ void TTFFont::assureCached(uint32 chr) const {
}
}
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
TTFFont *font = new TTFFont();
if (!font->load(stream, size, dpi, renderMode, mapping)) {
if (!font->load(stream, size, sizeMode, dpi, renderMode, mapping)) {
delete font;
return 0;
}

View file

@ -55,11 +55,33 @@ enum TTFRenderMode {
kTTFRenderModeMonochrome
};
/**
* This specifies how the font size is defined.
*/
enum TTFSizeMode {
/**
* Character height only.
*
* This matches rendering obtained when calling
* CreateFont in Windows with negative height values.
*/
kTTFSizeModeCharacter,
/**
* Full cell height.
*
* This matches rendering obtained when calling
* CreateFont in Windows with positive height values.
*/
kTTFSizeModeCell
};
/**
* Loads a TTF font file from a given data stream object.
*
* @param stream Stream object to load font data from.
* @param size The point size to load.
* @param sizeMode The point size definition used for the size parameter.
* @param dpi The dpi to use for size calculations, by default 72dpi
* are used.
* @param renderMode FreeType2 mode used to render glyphs. @see TTFRenderMode
@ -71,7 +93,7 @@ enum TTFRenderMode {
* supported.
* @return 0 in case loading fails, otherwise a pointer to the Font object.
*/
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi = 0, TTFRenderMode renderMode = kTTFRenderModeLight, const uint32 *mapping = 0);
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode = kTTFSizeModeCharacter, uint dpi = 0, TTFRenderMode renderMode = kTTFRenderModeLight, const uint32 *mapping = 0);
void shutdownTTF();

View file

@ -12,6 +12,7 @@ MODULE_OBJS := \
fonts/ttf.o \
fonts/winfont.o \
maccursor.o \
pixelformat.o \
primitives.o \
sjis.o \
surface.o \

64
graphics/pixelformat.cpp Normal file
View file

@ -0,0 +1,64 @@
/* 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.
*
*/
#include "graphics/pixelformat.h"
#include "common/algorithm.h"
namespace Graphics {
Common::String PixelFormat::toString() const {
if (bytesPerPixel == 1)
return "CLUT8";
// We apply a trick to simplify the code here. We encode all the shift,
// loss, and component name in the component entry. By having the shift as
// highest entry we can sort according to shift.
// This works because in valid RGB PixelFormats shift values needs to be
// distinct except when the loss is 8. However, components with loss value
// of 8 are not printed, thus their position does not matter.
int component[4];
component[0] = (rShift << 16) | (rLoss << 8) | 'R';
component[1] = (gShift << 16) | (gLoss << 8) | 'G';
component[2] = (bShift << 16) | (bLoss << 8) | 'B';
component[3] = (aShift << 16) | (aLoss << 8) | 'A';
// Sort components according to descending shift value.
Common::sort(component, component + ARRAYSIZE(component), Common::Greater<int>());
Common::String letters, digits;
for (int i = 0; i < ARRAYSIZE(component); ++i) {
const int componentLoss = (component[i] >> 8) & 0xFF;
// A loss of 8 means that the component does not exist.
if (componentLoss == 8) {
continue;
}
const char componentName = component[i] & 0xFF;
letters += componentName;
digits += '0' + 8 - componentLoss;
}
return letters + digits;
}
} // End of namespace Graphics

View file

@ -24,6 +24,7 @@
#define GRAPHICS_PIXELFORMAT_H
#include "common/scummsys.h"
#include "common/str.h"
namespace Graphics {
@ -260,6 +261,8 @@ struct PixelFormat {
// Unsupported
return 0;
}
Common::String toString() const;
};
} // End of namespace Graphics

View file

@ -41,8 +41,6 @@
namespace Graphics {
static const int kAShift = 0;//img->format.aShift;
static const int kBModShift = 0;//img->format.bShift;
static const int kGModShift = 8;//img->format.gShift;
static const int kRModShift = 16;//img->format.rShift;
@ -118,7 +116,7 @@ void doBlitBinaryFast(byte *ino, byte *outo, uint32 width, uint32 height, uint32
in = ino;
for (uint32 j = 0; j < width; j++) {
uint32 pix = *(uint32 *)in;
int a = (pix >> kAShift) & 0xff;
int a = in[kAIndex];
if (a != 0) { // Full opacity (Any value not exactly 0 is Opaque here)
*(uint32 *)out = pix;
@ -338,7 +336,7 @@ Common::Rect TransparentSurface::blit(Graphics::Surface &target, int posX, int p
retSize.setWidth(0);
retSize.setHeight(0);
// Check if we need to draw anything at all
int ca = (color >> 24) & 0xff;
int ca = (color >> kAModShift) & 0xff;
if (ca == 0) {
return retSize;

View file

@ -50,22 +50,22 @@ namespace Graphics {
@brief The possible flipping parameters for the blit method.
*/
enum FLIP_FLAGS {
/// The image will not be flipped.
FLIP_NONE = 0,
/// The image will be flipped at the horizontal axis.
FLIP_H = 1,
/// The image will be flipped at the vertical axis.
FLIP_V = 2,
/// The image will be flipped at the horizontal and vertical axis.
FLIP_HV = FLIP_H | FLIP_V,
/// The image will be flipped at the horizontal and vertical axis.
FLIP_VH = FLIP_H | FLIP_V
/// The image will not be flipped.
FLIP_NONE = 0,
/// The image will be flipped at the horizontal axis.
FLIP_H = 1,
/// The image will be flipped at the vertical axis.
FLIP_V = 2,
/// The image will be flipped at the horizontal and vertical axis.
FLIP_HV = FLIP_H | FLIP_V,
/// The image will be flipped at the horizontal and vertical axis.
FLIP_VH = FLIP_H | FLIP_V
};
enum AlphaType {
ALPHA_OPAQUE = 0,
ALPHA_BINARY = 1,
ALPHA_FULL = 2
ALPHA_OPAQUE = 0,
ALPHA_BINARY = 1,
ALPHA_FULL = 2
};
/**
@ -75,6 +75,18 @@ struct TransparentSurface : public Graphics::Surface {
TransparentSurface();
TransparentSurface(const Graphics::Surface &surf, bool copyData = false);
/**
* Returns the pixel format all operations of TransparentSurface support.
*
* Unlike Surface TransparentSurface only works with a fixed pixel format.
* This format can be queried using this static function.
*
* @return Supported pixel format.
*/
static PixelFormat getSupportedPixelFormat() {
return PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
}
void setColorKey(char r, char g, char b);
void disableColorKey();

View file

@ -739,12 +739,23 @@ bool ThemeEngine::loadDefaultXML() {
// Use the Python script "makedeftheme.py" to convert a normal XML theme
// into the "default.inc" file, which is ready to be included in the code.
#ifndef DISABLE_GUI_BUILTIN_THEME
const char *defaultXML =
#include "themes/default.inc"
;
int xmllen = 0;
for (int i = 0; i < ARRAYSIZE(defaultXML); i++)
xmllen += strlen(defaultXML[i]);
byte *tmpXML = (byte *)malloc(xmllen + 1);
tmpXML[0] = '\0';
for (int i = 0; i < ARRAYSIZE(defaultXML); i++)
strncat((char *)tmpXML, defaultXML[i], xmllen);
if (!_parser->loadBuffer(tmpXML, xmllen)) {
free(tmpXML);
if (!_parser->loadBuffer((const byte *)defaultXML, strlen(defaultXML)))
return false;
}
_themeName = "ResidualVM Classic Theme (Builtin Version)";
_themeId = "builtin";
@ -753,6 +764,8 @@ bool ThemeEngine::loadDefaultXML() {
bool result = _parser->parse();
_parser->close();
free(tmpXML);
return result;
#else
warning("The built-in theme is not enabled in the current build. Please load an external theme");
@ -1446,7 +1459,7 @@ const Graphics::Font *ThemeEngine::loadScalableFont(const Common::String &filena
for (Common::ArchiveMemberList::const_iterator i = members.begin(), end = members.end(); i != end; ++i) {
Common::SeekableReadStream *stream = (*i)->createReadStream();
if (stream) {
font = Graphics::loadTTFFont(*stream, pointsize, 0, Graphics::kTTFRenderModeLight,
font = Graphics::loadTTFFont(*stream, pointsize, Graphics::kTTFSizeModeCharacter, 0, Graphics::kTTFRenderModeLight,
#ifdef USE_TRANSLATION
TransMan.getCharsetMapping()
#else

160
gui/filebrowser-dialog.cpp Normal file
View file

@ -0,0 +1,160 @@
/* 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.
*
*/
#include "gui/filebrowser-dialog.h"
#include "common/system.h"
#include "common/algorithm.h"
#include "common/savefile.h"
#include "common/str-array.h"
#include "common/translation.h"
#include "gui/widgets/list.h"
#include "gui/message.h"
namespace GUI {
enum {
kChooseCmd = 'Chos'
};
FileBrowserDialog::FileBrowserDialog(const char *title, const char *fileExtension, int mode)
: Dialog("FileBrowser"), _mode(mode), _fileExt(fileExtension) {
_fileMask = "*.";
_fileMask += fileExtension;
_fileList = NULL;
new StaticTextWidget(this, "FileBrowser.Headline", title ? title :
mode == kFBModeLoad ? _("Choose file for loading") : _("Enter filename for saving"));
_fileName = new EditTextWidget(this, "FileBrowser.Filename", "");
if (mode == kFBModeLoad)
_fileName->setEnabled(false);
// Add file list
_fileList = new ListWidget(this, "FileBrowser.List");
_fileList->setNumberingMode(kListNumberingOff);
_fileList->setEditable(false);
_backgroundType = GUI::ThemeEngine::kDialogBackgroundPlain;
// Buttons
new ButtonWidget(this, "FileBrowser.Cancel", _("Cancel"), 0, kCloseCmd);
new ButtonWidget(this, "FileBrowser.Choose", _("Choose"), 0, kChooseCmd);
}
void FileBrowserDialog::open() {
// Call super implementation
Dialog::open();
updateListing();
}
void FileBrowserDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
switch (cmd) {
case kChooseCmd:
if (_fileName->getEditString().empty())
break;
normalieFileName();
if (!isProceedSave())
break;
setResult(1);
close();
break;
case kListSelectionChangedCmd:
_fileName->setEditString(_fileList->getList().operator[](_fileList->getSelected()).c_str());
_fileName->draw();
break;
case kListItemActivatedCmd:
case kListItemDoubleClickedCmd:
normalieFileName();
if (!isProceedSave())
break;
setResult(1);
close();
break;
default:
Dialog::handleCommand(sender, cmd, data);
}
}
void FileBrowserDialog::normalieFileName() {
Common::String filename = _fileName->getEditString();
if (filename.matchString(_fileMask))
return;
_fileName->setEditString(filename + "." + _fileExt);
}
bool FileBrowserDialog::isProceedSave() {
bool matched = false;
if (_mode == kFBModeLoad)
return true;
for (ListWidget::StringArray::const_iterator file = _fileList->getList().begin(); file != _fileList->getList().end(); ++file) {
if (*file == _fileName->getEditString()) {
matched = true;
break;
}
}
if (matched) {
GUI::MessageDialog alert(_("Do you really want to overwrite the file?"), _("Yes"), _("No"));
if (alert.runModal() != GUI::kMessageOK)
return false;
}
return true;
}
void FileBrowserDialog::updateListing() {
Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
ListWidget::StringArray list;
Common::StringArray filenames = saveFileMan->listSavefiles(_fileMask);
Common::sort(filenames.begin(), filenames.end());
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
list.push_back(file->c_str());
}
_fileList->setList(list);
_fileList->scrollTo(0);
// Finally, redraw
draw();
}
} // End of namespace GUI

View file

@ -20,48 +20,45 @@
*
*/
#ifndef BACKENDS_MIXER_SDL13_H
#define BACKENDS_MIXER_SDL13_H
#ifndef FILEBROWSER_DIALOG_H
#define FILEBROWSER_DIALOG_H
#include "backends/mixer/sdl/sdl-mixer.h"
#include "gui/dialog.h"
#include "gui/widgets/edittext.h"
/**
* SDL mixer manager. It wraps the actual implementation
* of the Audio:Mixer used by the engine, and setups
* the SDL audio subsystem and the callback for the
* audio mixer implementation.
*/
class Sdl13MixerManager : public SdlMixerManager {
public:
Sdl13MixerManager();
virtual ~Sdl13MixerManager();
namespace GUI {
/**
* Initialize and setups the mixer
*/
virtual void init();
class ListWidget;
class EditTextWidget;
class CommandSender;
/**
* Pauses the audio system
*/
virtual void suspendAudio();
/**
* Resumes the audio system
*/
virtual int resumeAudio();
protected:
/**
* The opened SDL audio device
*/
SDL_AudioDeviceID _device;
/**
* Starts SDL audio
*/
virtual void startAudio();
enum {
kFBModeLoad = 0,
kFBModeSave
};
class FileBrowserDialog : public Dialog {
public:
FileBrowserDialog(const char *title, const char *fileExtension, int mode);
virtual void open();
virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
const char *getResult() { return Dialog::getResult() ? _fileName->getEditString().c_str() : NULL; }
protected:
EditTextWidget *_fileName;
ListWidget *_fileList;
Common::String _fileMask;
Common::String _fileExt;
int _mode;
void updateListing();
void normalieFileName();
bool isProceedSave();
};
} // End of namespace GUI
#endif

View file

@ -8,6 +8,7 @@ MODULE_OBJS := \
dialog.o \
error.o \
EventRecorder.o \
filebrowser-dialog.o \
gui-manager.o \
launcher.o \
massadd.o \

View file

@ -171,7 +171,7 @@ void RecorderDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
const EnginePlugin *plugin = 0;
GameDescriptor desc = EngineMan.findGame(gameId, &plugin);
g_system->getTimeAndDate(t);
EditRecordDialog editDlg("Unknown Author", Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), "");
EditRecordDialog editDlg(_("Unknown Author"), Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), "");
if (editDlg.runModal() != kOKCmd) {
return;
}

View file

@ -1,5 +1,6 @@
"<?xml version = '1.0'?>"
"<render_info>"
const char *defaultXML1 = "<?xml version = '1.0'?>"
;
const char *defaultXML2 = "<render_info>"
"<palette>"
"<color name='black' "
"rgb='0,0,0' "
@ -610,7 +611,8 @@
"/>"
"</drawdata>"
"</render_info>"
"<layout_info resolution='y>399'>"
;
const char *defaultXML3 = "<layout_info resolution='y>399'>"
"<globals>"
"<def var='Line.Height' value='16' />"
"<def var='Font.Height' value='16' />"
@ -771,6 +773,28 @@
"</layout>"
"</layout>"
"</dialog>"
"<dialog name='FileBrowser' overlays='screen' inset='32' shading='dim'>"
"<layout type='vertical' padding='16,16,16,16'>"
"<widget name='Headline' "
"height='Globals.Line.Height' "
"/>"
"<widget name='Filename' "
"height='Globals.Line.Height' "
"/>"
"<space size='10' />"
"<widget name='List'/>"
"<layout type='vertical' padding='0,0,16,0'>"
"<layout type='horizontal' padding='0,0,0,0'>"
"<widget name='Cancel' "
"type='Button' "
"/>"
"<widget name='Choose' "
"type='Button' "
"/>"
"</layout>"
"</layout>"
"</layout>"
"</dialog>"
"<dialog name='GlobalOptions' overlays='Dialog.Launcher.GameList' shading='dim'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='TabWidget'/>"
@ -1876,7 +1900,8 @@
"</layout>"
"</dialog>"
"</layout_info>"
"<layout_info resolution='y<400'>"
;
const char *defaultXML4 = "<layout_info resolution='y<400'>"
"<globals>"
"<def var='Line.Height' value='12' />"
"<def var='Font.Height' value='10' />"
@ -2034,6 +2059,28 @@
"</layout>"
"</layout>"
"</dialog>"
"<dialog name='FileBrowser' overlays='screen' inset='16' shading='dim'>"
"<layout type='vertical' padding='16,16,16,16'>"
"<widget name='Headline' "
"height='Globals.Line.Height' "
"/>"
"<widget name='Filename' "
"height='Globals.Line.Height' "
"/>"
"<space size='5' />"
"<widget name='List'/>"
"<layout type='vertical' padding='0,0,16,0'>"
"<layout type='horizontal' padding='0,0,0,0'>"
"<widget name='Cancel' "
"type='Button' "
"/>"
"<widget name='Choose' "
"type='Button' "
"/>"
"</layout>"
"</layout>"
"</layout>"
"</dialog>"
"<dialog name='GlobalOptions' overlays='screen' inset='16' shading='dim'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='TabWidget'/>"
@ -3111,3 +3158,5 @@
"</layout>"
"</dialog>"
"</layout_info>"
;
const char *defaultXML[] = { defaultXML1, defaultXML2, defaultXML3, defaultXML4 };

Binary file not shown.

View file

@ -67,7 +67,7 @@
<widget name = 'Button'
size = '108, 24'
/>
/>
<widget name = 'Slider'
size = '128, 18'
@ -210,6 +210,29 @@
</layout>
</dialog>
<dialog name = 'FileBrowser' overlays = 'screen' inset = '32' shading = 'dim'>
<layout type = 'vertical' padding = '16, 16, 16, 16'>
<widget name = 'Headline'
height = 'Globals.Line.Height'
/>
<widget name = 'Filename'
height = 'Globals.Line.Height'
/>
<space size = '10' />
<widget name = 'List'/>
<layout type = 'vertical' padding = '0, 0, 16, 0'>
<layout type = 'horizontal' padding = '0, 0, 0, 0'>
<widget name = 'Cancel'
type = 'Button'
/>
<widget name = 'Choose'
type = 'Button'
/>
</layout>
</layout>
</layout>
</dialog>
<dialog name = 'GlobalOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/>
@ -690,7 +713,7 @@
/>
</layout>
</dialog>
<dialog name = 'GlobalMenu' overlays = 'screen_center'>
<layout type = 'vertical' padding = '16, 16, 16, 16' center = 'true'>
<widget name = 'Logo'
@ -1057,7 +1080,7 @@
width = '180'
height = '170'
/>
<layout type = 'horizontal' padding = '0, 0, 0, 0'>
<layout type = 'horizontal' padding = '0, 0, 0, 0'>
<widget name = 'NextScreenShotButton'
width = '25'
height = '25'
@ -1133,15 +1156,15 @@
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'AuthorLabel'
type = 'EditRecordLabel'
/>
/>
<widget name = 'AuthorEdit'
type = 'EditRecord'
/>
/>
</layout>
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'NameLabel'
type = 'EditRecordLabel'
/>
/>
<widget name = 'NameEdit'
type = 'EditRecord'
/>
@ -1160,11 +1183,11 @@
/>
<widget name = 'OK'
type = 'Button'
/>
/>
</layout>
</layout>
</dialog>
<dialog name = 'ScummHelp' overlays = 'screen_center'>
<layout type = 'vertical' padding = '8, 8, 8, 8' center = 'true'>
<widget name = 'Title'
@ -1255,7 +1278,7 @@
type = 'Button'
/>
</layout>
</dialog>
</dialog>
<dialog name = 'Predictive' overlays = 'screen_center'>
<layout type = 'vertical' padding = '5, 5, 5, 5' center = 'true'>
<widget name = 'Headline'
@ -1267,7 +1290,7 @@
<layout type = 'horizontal' padding = '5, 5, 5, 5'>
<widget name = 'Word'
width = '190'
height = 'Globals.Button.Height'
height = 'Globals.Button.Height'
/>
<widget name = 'Delete'
width = '20'

View file

@ -191,6 +191,29 @@
</layout>
</dialog>
<dialog name = 'FileBrowser' overlays = 'screen' inset = '16' shading = 'dim'>
<layout type = 'vertical' padding = '16, 16, 16, 16'>
<widget name = 'Headline'
height = 'Globals.Line.Height'
/>
<widget name = 'Filename'
height = 'Globals.Line.Height'
/>
<space size = '5' />
<widget name = 'List'/>
<layout type = 'vertical' padding = '0, 0, 16, 0'>
<layout type = 'horizontal' padding = '0, 0, 0, 0'>
<widget name = 'Cancel'
type = 'Button'
/>
<widget name = 'Choose'
type = 'Button'
/>
</layout>
</layout>
</layout>
</dialog>
<dialog name = 'GlobalOptions' overlays = 'screen' inset = '16' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/>
@ -686,7 +709,7 @@
/>
</layout>
</dialog>
<dialog name = 'GlobalMenu' overlays = 'screen_center'>
<layout type = 'vertical' padding = '4, 4, 4, 4' center = 'true' spacing='2'>
<widget name = 'Title'
@ -1108,15 +1131,15 @@
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'AuthorLabel'
type = 'EditRecordLabel'
/>
/>
<widget name = 'AuthorEdit'
type = 'EditRecord'
/>
/>
</layout>
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'NameLabel'
type = 'EditRecordLabel'
/>
/>
<widget name = 'NameEdit'
type = 'EditRecord'
/>
@ -1135,11 +1158,11 @@
/>
<widget name = 'OK'
type = 'Button'
/>
/>
</layout>
</layout>
</dialog>
<dialog name = 'ScummHelp' overlays = 'screen' inset = '8'>
<layout type = 'vertical' padding = '8, 8, 8, 8'>
<widget name = 'Title'
@ -1240,7 +1263,7 @@
<layout type = 'horizontal' padding = '0, 0, 2, 2'>
<widget name = 'Word'
width = '120'
height = 'Globals.Button.Height'
height = 'Globals.Button.Height'
/>
<widget name = 'Delete'
width = '20'

View file

@ -79,7 +79,7 @@ bool EditableWidget::tryInsertChar(byte c, int pos) {
void EditableWidget::handleTickle() {
uint32 time = g_system->getMillis();
if (_caretTime < time) {
if (_caretTime < time && isEnabled()) {
_caretTime = time + kCaretBlinkTime;
drawCaret(_caretVisible);
}
@ -90,6 +90,9 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
bool dirty = false;
bool forcecaret = false;
if (!isEnabled())
return false;
// First remove caret
if (_caretVisible)
drawCaret(true);

View file

@ -62,6 +62,9 @@ void EditTextWidget::reflowLayout() {
void EditTextWidget::handleMouseDown(int x, int y, int button, int clickCount) {
if (!isEnabled())
return;
// First remove caret
if (_caretVisible)
drawCaret(true);

View file

@ -30,14 +30,15 @@ namespace Image {
#define CHECK_STREAM_PTR(n) \
if ((stream.pos() + n) > stream.size() ) { \
warning ("MS Video-1: Stream out of bounds (%d >= %d)", stream.pos() + n, stream.size()); \
warning ("MS Video-1: Stream out of bounds (%d >= %d) d%d", stream.pos() + n, stream.size(), n); \
return; \
}
MSVideo1Decoder::MSVideo1Decoder(uint16 width, uint16 height, byte bitsPerPixel) : Codec() {
_surface = new Graphics::Surface();
// TODO: Specify the correct pixel format for 2Bpp mode.
_surface->create(width, height, (bitsPerPixel == 8) ? Graphics::PixelFormat::createFormatCLUT8() : Graphics::PixelFormat(2, 0, 0, 0, 0, 0, 0, 0, 0));
_surface->create(width, height, (bitsPerPixel == 8) ? Graphics::PixelFormat::createFormatCLUT8() :
Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
_bitsPerPixel = bitsPerPixel;
}
@ -125,13 +126,98 @@ void MSVideo1Decoder::decode8(Common::SeekableReadStream &stream) {
}
}
void MSVideo1Decoder::decode16(Common::SeekableReadStream &stream) {
/* decoding parameters */
uint16 colors[8];
uint16 *pixels = (uint16 *)_surface->getPixels();
int32 stride = _surface->w;
int32 skip_blocks = 0;
int32 blocks_wide = _surface->w / 4;
int32 blocks_high = _surface->h / 4;
int32 total_blocks = blocks_wide * blocks_high;
int32 block_inc = 4;
int32 row_dec = stride + 4;
for (int32 block_y = blocks_high; block_y > 0; block_y--) {
int32 block_ptr = ((block_y * 4) - 1) * stride;
for (int32 block_x = blocks_wide; block_x > 0; block_x--) {
/* check if this block should be skipped */
if (skip_blocks) {
block_ptr += block_inc;
skip_blocks--;
total_blocks--;
continue;
}
int32 pixel_ptr = block_ptr;
/* get the next two bytes in the encoded data stream */
CHECK_STREAM_PTR(2);
byte byte_a = stream.readByte();
byte byte_b = stream.readByte();
/* check if the decode is finished */
if ((byte_a == 0) && (byte_b == 0) && (total_blocks == 0)) {
return;
} else if ((byte_b & 0xFC) == 0x84) {
/* skip code, but don't count the current block */
skip_blocks = ((byte_b - 0x84) << 8) + byte_a - 1;
} else if (byte_b < 0x80) {
/* 2- or 8-color encoding modes */
uint16 flags = (byte_b << 8) | byte_a;
CHECK_STREAM_PTR(4);
colors[0] = stream.readUint16LE();
colors[1] = stream.readUint16LE();
if (colors[0] & 0x8000) {
/* 8-color encoding */
CHECK_STREAM_PTR(12);
colors[2] = stream.readUint16LE();
colors[3] = stream.readUint16LE();
colors[4] = stream.readUint16LE();
colors[5] = stream.readUint16LE();
colors[6] = stream.readUint16LE();
colors[7] = stream.readUint16LE();
for (int pixel_y = 0; pixel_y < 4; pixel_y++) {
for (int pixel_x = 0; pixel_x < 4; pixel_x++, flags >>= 1)
pixels[pixel_ptr++] =
colors[((pixel_y & 0x2) << 1) +
(pixel_x & 0x2) + ((flags & 0x1) ^ 1)];
pixel_ptr -= row_dec;
}
} else {
/* 2-color encoding */
for (int pixel_y = 0; pixel_y < 4; pixel_y++) {
for (int pixel_x = 0; pixel_x < 4; pixel_x++, flags >>= 1)
pixels[pixel_ptr++] = colors[(flags & 0x1) ^ 1];
pixel_ptr -= row_dec;
}
}
} else {
/* otherwise, it's a 1-color block */
colors[0] = (byte_b << 8) | byte_a;
for (int pixel_y = 0; pixel_y < 4; pixel_y++) {
for (int pixel_x = 0; pixel_x < 4; pixel_x++)
pixels[pixel_ptr++] = colors[0];
pixel_ptr -= row_dec;
}
}
block_ptr += block_inc;
total_blocks--;
}
}
}
const Graphics::Surface *MSVideo1Decoder::decodeFrame(Common::SeekableReadStream &stream) {
if (_bitsPerPixel == 8)
decode8(stream);
else {
// decode16(stream);
error ("Unhandled MS Video-1 16bpp encoding");
}
else
decode16(stream);
return _surface;
}

View file

@ -38,7 +38,7 @@ public:
~MSVideo1Decoder();
const Graphics::Surface *decodeFrame(Common::SeekableReadStream &stream);
Graphics::PixelFormat getPixelFormat() const { return Graphics::PixelFormat::createFormatCLUT8(); }
Graphics::PixelFormat getPixelFormat() const { return _surface->format; }
private:
byte _bitsPerPixel;
@ -46,7 +46,7 @@ private:
Graphics::Surface *_surface;
void decode8(Common::SeekableReadStream &stream);
//void decode16(Common::SeekableReadStream &stream);
void decode16(Common::SeekableReadStream &stream);
};
} // End of namespace Image

View file

@ -6,6 +6,7 @@ gui/browser_osx.mm
gui/chooser.cpp
gui/editrecorddialog.cpp
gui/error.cpp
gui/filebrowser-dialog.cpp
gui/gui-manager.cpp
gui/KeysDialog.h
gui/KeysDialog.cpp

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 17:22+0300\n"
"Last-Translator: Ivan Lukyanov <greencis@mail.ru>\n"
"Language-Team: Ivan Lukyanov <greencis@mail.ru>\n"
@ -1044,6 +1044,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "²ë áÐßàÐþÔë ÖÐÔÐÕæÕ ÒëÔÐÛöæì ÓíâÐ ×ÐåÐÒÐÝÝÕ?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "½ÕÒïÔÞÜÐï ßÐÜëÛÚÐ"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "²ëÓÛïÔ áßöáã"
@ -1827,8 +1832,9 @@ msgstr "
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "²ëåÐÔ"
@ -3333,6 +3339,25 @@ msgstr "
msgid "Fly to lower right"
msgstr "»ïæÕæì ÝÐßàÐÒÐ-þÝö×"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "¿ÛëþÝÐï ßàÐÓÞàâÚÐ"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "³ãçÝ. Üã×ëÚö:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "ÅãâÚÐáæì âëâàÐþ:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2013-05-05 14:16+0100\n"
"Last-Translator: Jordi Vilalta Prat <jvprat@jvprat.com>\n"
"Language-Team: Catalan <scummvm-devel@lists.sf.net>\n"
@ -1047,6 +1047,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Realment voleu suprimir aquesta partida?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Error desconegut"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Vista de llistat"
@ -1832,8 +1837,9 @@ msgstr "Mode r
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Surt"
@ -3338,6 +3344,25 @@ msgstr "Vola a la dreta"
msgid "Fly to lower right"
msgstr "Vola avall i a la dreta"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Desplaçament suau"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Volum de música:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Velocitat de subt.:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2015-07-26 18:51+0200\n"
"Last-Translator: Zbynìk Schwarz <zbynek.schwarz@gmail.com>\n"
"Language-Team: \n"
@ -1039,6 +1039,11 @@ msgstr "Pozn
msgid "Do you really want to delete this record?"
msgstr "Opravdu chcete tento záznam smazat?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Neznámá chyba"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Seznam"
@ -1820,8 +1825,9 @@ msgstr "Rychl
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Ukonèit"
@ -3332,6 +3338,25 @@ msgstr "Let
msgid "Fly to lower right"
msgstr "Letìt doprava dolù"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Plynulé posunování"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Hlasitost hudby"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Rychlost titulkù:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-09 17:34+0100\n"
"Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n"
"Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n"
@ -1038,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du virkelig slette denne gemmer?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Ukendt fejl"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Liste visning"
@ -1820,8 +1825,9 @@ msgstr "Hurtig tilstand"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Afslut"
@ -3323,6 +3329,25 @@ msgstr "Flyv til h
msgid "Fly to lower right"
msgstr "Flyv nederst til højre"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Jævn bevægelse"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Musik lydstyrke:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Tekst hastighed:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.4.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-06 20:39+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -1045,6 +1045,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "¿Seguro que quieres borrar esta partida?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Error desconocido"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Modo lista"
@ -1828,8 +1833,9 @@ msgstr "Modo r
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Salir"
@ -3335,6 +3341,25 @@ msgstr "Volar a la derecha"
msgid "Fly to lower right"
msgstr "Volar abajo y a la derecha"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Desplazamiento suave"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Música:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Vel. de subtítulos:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2011-12-15 14:53+0100\n"
"Last-Translator: Mikel Iturbe Urretxa <mikel@hamahiru.org>\n"
"Language-Team: Librezale <librezale@librezale.org>\n"
@ -1045,6 +1045,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Ezabatu partida gorde hau?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Errore ezezaguna"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@ -1834,8 +1839,9 @@ msgstr "Modu bizkorra"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Irten"
@ -3340,6 +3346,25 @@ msgstr "Eskuinera hegan egin"
msgid "Fly to lower right"
msgstr "Behera eta eskuinera hegan egin"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Behera"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Musika:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Azpitit. abiadura:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2012-12-01 19:37+0200\n"
"Last-Translator: Toni Saarela <saarela@gmail.com>\n"
"Language-Team: Finnish\n"
@ -1046,6 +1046,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Haluatko varmasti poistaa tämän pelitallennuksen?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Tuntematon virhe"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listanäkymä"
@ -1834,8 +1839,9 @@ msgstr "Nopea moodi"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Lopeta"
@ -3334,6 +3340,25 @@ msgstr "Lenn
msgid "Fly to lower right"
msgstr "Lennä alas oikealle"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Pehmeä vieritys"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Musiikki:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Tekstin nopeus:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-05 13:49-0000\n"
"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
"Language-Team: French <scummvm-devel@lists.sf.net>\n"
@ -1051,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Erreur inconnue"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Vue en liste"
@ -1833,8 +1838,9 @@ msgstr "Mode rapide"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Quitter"
@ -3342,6 +3348,25 @@ msgstr "Voler vers la droite"
msgid "Fly to lower right"
msgstr "Voler vers la bas à droite"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Défilement régulier"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Volume Musique:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Vitesse des ST:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 09:51+0100\n"
"Last-Translator: Santiago G. Sanz <s.sanz@uvigo.es>\n"
"Language-Team: Santiago G. Sanz <s.sanz@uvigo.es>\n"
@ -1038,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Seguro que queres eliminar esta partida?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Erro descoñecido"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Lista"
@ -1820,8 +1825,9 @@ msgstr "Modo r
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Saír"
@ -3325,6 +3331,25 @@ msgstr "Voar
msgid "Fly to lower right"
msgstr "Voar á dereita abaixo"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Desprazamento suave"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Volume de música:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Velocidade dos subtítulos:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"PO-Revision-Date: 2014-02-18 06:30+0100\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2015-10-12 11:10+0200\n"
"Last-Translator: George Kormendi <grubycza@hotmail.com>\n"
"Language-Team: Hungarian\n"
"Language: Magyar\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: iso-8859-1\n"
"X-Generator: Poedit 1.6.4\n"
"X-Generator: Poedit 1.8.5\n"
#: gui/about.cpp:94
#, c-format
@ -75,7 +75,7 @@ msgstr "V
#: gui/editrecorddialog.cpp:58
msgid "Author:"
msgstr ""
msgstr "Szerző:"
#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
msgid "Name:"
@ -83,11 +83,11 @@ msgstr "N
#: gui/editrecorddialog.cpp:60
msgid "Notes:"
msgstr ""
msgstr "Megjegyzés:"
#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
msgid "Ok"
msgstr ""
msgstr "Ok"
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
@ -414,7 +414,7 @@ msgstr "A v
#: gui/launcher.cpp:633
msgid "~L~oad..."
msgstr "Betöltés"
msgstr "~B~etölt..."
#: gui/launcher.cpp:633
msgid "Load saved game for selected game"
@ -545,7 +545,7 @@ msgstr "Massz
#: gui/launcher.cpp:1161
msgid "Record..."
msgstr ""
msgstr "Felvétel..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@ -572,21 +572,19 @@ msgstr "%d
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
msgstr ""
msgstr "Állj"
#: gui/onscreendialog.cpp:106
msgid "Edit record description"
msgstr ""
msgstr "Felvétel leírás szerkesztése"
#: gui/onscreendialog.cpp:108
#, fuzzy
msgid "Switch to Game"
msgstr "Kapcsol"
msgstr "Átvált játékra"
#: gui/onscreendialog.cpp:110
#, fuzzy
msgid "Fast replay"
msgstr "Gyors mód"
msgstr "Gyors visszajátszás"
#: gui/options.cpp:85
msgid "Never"
@ -980,29 +978,28 @@ msgstr ""
#. I18N: You must leave "#" as is, only word 'next' is translatable
#: gui/predictivedialog.cpp:87
msgid "# next"
msgstr ""
msgstr "# következő"
#: gui/predictivedialog.cpp:88
msgid "add"
msgstr ""
msgstr "hozzáad"
#: gui/predictivedialog.cpp:92
#, fuzzy
msgid "Delete char"
msgstr "Töröl"
msgstr "Karakter törlés"
#: gui/predictivedialog.cpp:96
msgid "<"
msgstr ""
msgstr "<"
#. I18N: Pre means 'Predictive', leave '*' as is
#: gui/predictivedialog.cpp:98
msgid "* Pre"
msgstr ""
msgstr "* Előző"
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
msgstr "Játékmenet felvétel vagy lejátszás"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@ -1011,31 +1008,33 @@ msgstr "T
#: gui/recorderdialog.cpp:71
msgid "Record"
msgstr ""
msgstr "Felvétel"
#: gui/recorderdialog.cpp:72
#, fuzzy
msgid "Playback"
msgstr "Játék"
msgstr "Visszajátszás"
#: gui/recorderdialog.cpp:74
msgid "Edit"
msgstr ""
msgstr "Javít"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
msgstr ""
msgstr "Szerző:"
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
msgstr ""
msgstr "Megjegyzés:"
#: gui/recorderdialog.cpp:155
#, fuzzy
msgid "Do you really want to delete this record?"
msgstr "Biztos hogy törölni akarod ezt a játékállást?"
msgstr "Biztos hogy törölni akarod ezt a felvételt?"
#: gui/recorderdialog.cpp:174
msgid "Unknown Author"
msgstr "Ismeretlen Szerző"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@ -1336,7 +1335,7 @@ msgstr "Folytat
#: engines/dialogs.cpp:87
msgid "~L~oad"
msgstr "Betöltés"
msgstr "~B~etöltés"
#: engines/dialogs.cpp:91
msgid "~S~ave"
@ -1410,7 +1409,7 @@ msgstr "~O~K"
#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:110
#: engines/mohawk/dialogs.cpp:171 engines/tsage/dialogs.cpp:107
msgid "~C~ancel"
msgstr "Mégse"
msgstr "~M~égse"
#: engines/dialogs.cpp:311
msgid "~K~eys"
@ -1493,7 +1492,7 @@ msgstr "DOSBox OPL emul
#: audio/fmopl.cpp:67
msgid "ALSA Direct FM"
msgstr ""
msgstr "ALSA Direct FM"
#: audio/mididrv.cpp:209
#, c-format
@ -1609,7 +1608,7 @@ msgstr "ScummVM F
#: backends/platform/ds/arm9/source/dsoptions.cpp:63
msgid "~L~eft handed mode"
msgstr "Balkezes mód:"
msgstr "~B~alkezes mód"
#: backends/platform/ds/arm9/source/dsoptions.cpp:64
msgid "~I~ndy fight controls"
@ -1814,8 +1813,9 @@ msgstr "Gyors m
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Kilépés"
@ -2069,7 +2069,7 @@ msgstr "V
#: backends/platform/wince/wince-sdl.cpp:542
msgid "Map Zoom Up action (optional)"
msgstr "Nagyítás művelet (opcionális)"
msgstr "Térkép nagyítás művelet (opcionális)"
#: backends/platform/wince/wince-sdl.cpp:545
msgid "Map Zoom Down action (optional)"
@ -2182,25 +2182,27 @@ msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Az eredeti mentés/betöltés képernyõ használata a ScummVM képek helyett"
#: engines/agi/detection.cpp:157
#, fuzzy
msgid "Use an alternative palette"
msgstr "Alternatív játékintro használata (csak CD verziónál)"
msgstr "Alternatív paletta használat"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
"Alternatív paletta használat, közös minden Amiga játéknál. Ez egy régi "
"megoldás"
#: engines/agi/detection.cpp:167
#, fuzzy
msgid "Mouse support"
msgstr "Átugrás támogatás"
msgstr "Egér támogatás"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
"Egérmód engélyezve. Lehetővé teszi az egérrel mozgatást játékban és "
"játékmenükben."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
@ -2253,13 +2255,12 @@ msgid "Cutscene file '%s' not found!"
msgstr "'%s' átvezetõ fájl nem található"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
#, fuzzy
msgid "Color Blind Mode"
msgstr "Kattintás Mód"
msgstr "Színvak Mód"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
msgstr ""
msgstr "Szinvak mód engedélyezve alapértelmezett"
#: engines/drascula/saveload.cpp:47
msgid ""
@ -2314,11 +2315,11 @@ msgstr "J
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
msgstr ""
msgstr "Gore Mód"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
msgstr ""
msgstr "Gore mód engedélyezés ha elérhető"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@ -2450,6 +2451,12 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
"A következő eredeti játékmentés fájlt találtam a játékkönyvtárban:\n"
"\n"
"%s %s\n"
"\n"
"Akarod hogy ezt a játékmentés fájlt használja a ScummVM?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@ -2457,6 +2464,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
"Játékmentés található a választott %d slotban. Felülírjam?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@ -2468,6 +2477,11 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
"%d eredeti játékmentés fájlt sikeresen importálta a\n"
"ScummVM. Ha később manuálisan akarod importálni az eredeti játékmentéseket\n"
"meg kell nyitnod a ScummVM debug konzolt és használd az 'import_savefile' "
"utasítást.\n"
"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@ -2476,7 +2490,7 @@ msgstr "~Z~ip M
#: engines/mohawk/dialogs.cpp:93
msgid "~T~ransitions Enabled"
msgstr "Átmenetek engedélyezve"
msgstr "~Á~tmenetek engedélyezve"
#. I18N: Drop book page
#: engines/mohawk/dialogs.cpp:95
@ -2607,11 +2621,12 @@ msgstr "Alternat
#: engines/sci/detection.cpp:374
msgid "Skip EGA dithering pass (full color backgrounds)"
msgstr ""
msgstr "EGA színmoduláció átugrása (Színes háttereknél)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
msgstr ""
"Színmoduláció átugrása EGA játékoknál, grafikák teljes színben láthatók"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
@ -2682,15 +2697,13 @@ msgstr "J
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
msgstr "Biztos hogy újra akarod indítani? (Y/N)"
msgstr "Biztos hogy újra akarod indítani? (I/N)I"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:185
#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
msgstr "Biztos hogy ki akarsz lépni? (Y/N)"
msgstr "Biztos hogy ki akarsz lépni? (I/N)I"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
@ -2737,7 +2750,7 @@ msgstr "J
#. I18N: Previous page button
#: engines/scumm/dialogs.cpp:288
msgid "~P~revious"
msgstr "Előző"
msgstr "~E~lőző"
#. I18N: Next page button
#: engines/scumm/dialogs.cpp:290
@ -3198,25 +3211,24 @@ msgid "Third kid"
msgstr "Harmadik gyerek"
#: engines/scumm/help.cpp:292
#, fuzzy
msgid "Toggle Inventory/IQ Points display"
msgstr "Adatképernyő kapcsoló"
msgstr "Leltár/IQ pont kijelző kapcsoló"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
msgstr ""
msgstr "Billentyűzet/Egér harc kapcsoló (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
msgstr ""
msgstr "* Harc billentyűzetről mindíg aktív,"
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
msgstr ""
msgstr " so despite the in-game message this"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
msgstr ""
msgstr " egérrel harcolás mód átkapcsolás Be/Ki"
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@ -3253,7 +3265,7 @@ msgstr "Als
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
msgstr ""
msgstr "Váratlan ütés"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@ -3311,6 +3323,22 @@ msgstr "Jobbra rep
msgid "Fly to lower right"
msgstr "Jobbra le repülés"
#: engines/scumm/input.cpp:572
msgid "Snap scroll on"
msgstr "Finomgörgetés be"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr "Finomgörgetés ki"
#: engines/scumm/input.cpp:587
msgid "Music volume: "
msgstr "Zene hangereje:"
#: engines/scumm/input.cpp:604
msgid "Subtitle speed: "
msgstr "Felirat sebesség:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@ -3321,27 +3349,30 @@ msgstr ""
"a %s hiányzik. AdLib-ot használok helyette."
#: engines/scumm/scumm.cpp:2644
#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
"Általában a Maniac Mansion indulna itt. De a ScummVM most nem indítja el. Ha "
"játszani akarsz vele menj a ScummVM főmenüben a 'Játék hozzáadás' ra és "
"válaszd a 'Maniac' mappát a 'Tentacle' könyvtárában."
"Általában a Maniac Mansion indulna most. De a működéshez a Maniac Mansion "
"fájljainak, a 'Maniac' mappában kell lenni a Tentacle játékmappáján belül, "
"és a játékot így adja hozzá a ScummVM a listához."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
"Nem található a 'Loom' Macintosh futtató állomány, hogy \n"
"beolvassa a hangszereket. Zene le lessz tiltva."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
"Nem található a 'Monkey Island' Macintosh futtató állomány, hogy \n"
"beolvassa a hangszereket. Zene le lessz tiltva."
#: engines/sky/compact.cpp:130
msgid ""
@ -3457,51 +3488,48 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
msgstr ""
msgstr "FPS számláló látszik"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
"A jelenlegi másodpercenkénti képkocka szám kijelzése a bal felső sarokban"
#: engines/zvision/detection_tables.h:52
#, fuzzy
msgid "Use the original save/load screens instead of the ScummVM interface"
msgstr "Az eredeti mentés/betöltés képernyő használata a ScummVM képek helyett"
msgstr "Használd az eredeti mentés/töltés képet a ScummVM felület helyett"
#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
msgstr "Dupla FPS"
#: engines/zvision/detection_tables.h:62
msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
msgstr "Növeli a képfrissítést 30 ról 60 FPS-re"
#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Helium mód engedélyezve"
msgstr "Venus engedélyezve"
#: engines/zvision/detection_tables.h:72
#, fuzzy
msgid "Enable the Venus help system"
msgstr "Helium mód engedélyezve"
msgstr "Venus súgórendszer engedélyezve"
#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
msgstr "Animáció tiltás bekapcsolás közben"
#: engines/zvision/detection_tables.h:82
msgid "Disable animation while turning in panorama mode"
msgstr ""
msgstr "Animáció tiltása panoráma mód bekapcsolása közben"
#: engines/zvision/detection_tables.h:91
msgid "Use high resolution MPEG video"
msgstr ""
msgstr "Nagyfelbontású MPEG videó használat"
#: engines/zvision/detection_tables.h:92
#, fuzzy
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr "Alternatív ezüst kurzorszett használata, a normál arany helyett"
msgstr "MPEG videót használ DVD verziónál, a kisebb felbontású AVI helyett"
#~ msgid "EGA undithering"
#~ msgstr "EGA szinjavítás"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-03 17:59-0600\n"
"Last-Translator: Matteo 'Maff' Angelino <matteo.maff at gmail dot com>\n"
"Language-Team: Italian\n"
@ -1042,6 +1042,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Sei sicuro di voler eliminare questo salvataggio?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Errore sconosciuto"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Elenco"
@ -1827,8 +1832,9 @@ msgstr "Modalit
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Esci"
@ -3332,6 +3338,25 @@ msgstr "Vola a destra"
msgid "Fly to lower right"
msgstr "Vola in basso a destra"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Scorrimento morbido"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Volume musica:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Velocità testo:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-11 00:02+0100\n"
"Last-Translator: Einar Johan Trøan Sømåen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@ -1039,6 +1039,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du virkelig slette dette lagrede spillet?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Ukjent feil"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listevisning"
@ -1820,8 +1825,9 @@ msgstr "Rask modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Avslutt"
@ -3322,6 +3328,25 @@ msgstr "Fly til h
msgid "Fly to lower right"
msgstr "Fly til nedre høyre"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Myk scrolling"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Musikkvolum:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Teksthastighet:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-11-25 20:46+0100\n"
"Last-Translator: Ben Castricum <scummvm@bencastricum.nl>\n"
"Language-Team: Ben Castricum <scummvm@bencastricum.nl>\n"
@ -1051,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Wilt u dit opgeslagen spel echt verwijderen?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Onbekende fout"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Lijstopmaak"
@ -1837,8 +1842,9 @@ msgstr "Snelle modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Stoppen"
@ -3358,6 +3364,25 @@ msgstr "Vlieg naar rechts"
msgid "Fly to lower right"
msgstr "Vlieg naar rechts omlaag"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Vloeiend scrollen"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Muziek volume:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Snelheid tekst:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-11 00:04+0100\n"
"Last-Translator: Einar Johan Trøan Sømåen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@ -1038,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du verkeleg slette det lagra spelet?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Ukjend feil"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listevisning"
@ -1802,8 +1807,9 @@ msgstr "Rask modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Avslutt"
@ -3304,6 +3310,25 @@ msgstr "Fly til h
msgid "Fly to lower right"
msgstr "Fly til nedre høgre"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Bla liste ned"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Musikkvolum:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Undertekstfart:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 12:28+0100\n"
"Last-Translator: Micha³ Zi±bkowski <mziab@o2.pl>\n"
"Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n"
@ -1039,6 +1039,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Na pewno chcesz skasowaæ ten zapis?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Nieznany b³±d"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Widok listy"
@ -1815,8 +1820,9 @@ msgstr "Tryb szybki"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Zakoñcz"
@ -3312,6 +3318,25 @@ msgstr "Le
msgid "Fly to lower right"
msgstr "Leæ w dó³, w prawo"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "P³ynne przewijanie"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "G³o¶no¶æ muzyki:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Prêd. napisów:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2011-10-21 21:30-0300\n"
"Last-Translator: Saulo Benigno <saulobenigno@gmail.com>\n"
"Language-Team: ScummBR (www.scummbr.com) <scummbr@yahoo.com.br>\n"
@ -1051,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Você realmente quer excluir este jogo salvo?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Erro desconhecido"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@ -1849,8 +1854,9 @@ msgstr "Modo r
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Sair"
@ -3366,6 +3372,25 @@ msgstr "Voar para direita"
msgid "Fly to lower right"
msgstr "Voar para direita inferior"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Descer na lista"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Volume da Música:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Rapidez legendas:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -1,22 +1,21 @@
# Russian translation for ScummVM.
# Copyright (C) 2010-2015 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Eugene Sandulenko <sev@scummvm.org>, 2010-2014
# Eugene Sandulenko <sev@scummvm.org>, 2010-2015
#
msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Project-Id-Version: ScummVM 1.8.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"PO-Revision-Date: 2014-07-02 17:20+0300\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2015-11-06 09:23+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Russian\n"
"Language: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Poedit 1.5.5\n"
#: gui/about.cpp:94
@ -75,7 +74,7 @@ msgstr "
#: gui/editrecorddialog.cpp:58
msgid "Author:"
msgstr ""
msgstr "Автор:"
#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
msgid "Name:"
@ -83,11 +82,11 @@ msgstr "
#: gui/editrecorddialog.cpp:60
msgid "Notes:"
msgstr ""
msgstr "Заметки:"
#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
msgid "Ok"
msgstr ""
msgstr "Ok"
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
@ -545,7 +544,7 @@ msgstr "
#: gui/launcher.cpp:1161
msgid "Record..."
msgstr ""
msgstr "Запись..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@ -572,21 +571,19 @@ msgstr "
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
msgstr ""
msgstr "Стоп"
#: gui/onscreendialog.cpp:106
msgid "Edit record description"
msgstr ""
msgstr "Редактировать описание записи"
#: gui/onscreendialog.cpp:108
#, fuzzy
msgid "Switch to Game"
msgstr "Переключить"
msgstr "Переключиться в игру"
#: gui/onscreendialog.cpp:110
#, fuzzy
msgid "Fast replay"
msgstr "Быстрый режим"
msgstr "Быстрое воспроизведение"
#: gui/options.cpp:85
msgid "Never"
@ -987,29 +984,28 @@ msgstr ""
#. I18N: You must leave "#" as is, only word 'next' is translatable
#: gui/predictivedialog.cpp:87
msgid "# next"
msgstr ""
msgstr "# след"
#: gui/predictivedialog.cpp:88
msgid "add"
msgstr ""
msgstr "доб"
#: gui/predictivedialog.cpp:92
#, fuzzy
msgid "Delete char"
msgstr "Удалить"
msgstr "Удалить символ"
#: gui/predictivedialog.cpp:96
msgid "<"
msgstr ""
msgstr "<"
#. I18N: Pre means 'Predictive', leave '*' as is
#: gui/predictivedialog.cpp:98
msgid "* Pre"
msgstr ""
msgstr "* Pre"
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
msgstr "Воспроизвести или записать игровой процесс"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@ -1018,31 +1014,33 @@ msgstr "
#: gui/recorderdialog.cpp:71
msgid "Record"
msgstr ""
msgstr "Записать"
#: gui/recorderdialog.cpp:72
#, fuzzy
msgid "Playback"
msgstr "Играть"
msgstr "Воспроизвести"
#: gui/recorderdialog.cpp:74
msgid "Edit"
msgstr ""
msgstr "Редактировать"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
msgstr ""
msgstr "Автор: "
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
msgstr ""
msgstr "Заметки: "
#: gui/recorderdialog.cpp:155
#, fuzzy
msgid "Do you really want to delete this record?"
msgstr "Вы действительно хотите удалить это сохранение?"
msgstr "Вы действительно хотите удалить эту запись?"
#: gui/recorderdialog.cpp:174
msgid "Unknown Author"
msgstr "Неизвестный автор"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@ -1506,7 +1504,7 @@ msgstr "
#: audio/fmopl.cpp:67
msgid "ALSA Direct FM"
msgstr ""
msgstr "Прямой FM ALSA"
#: audio/mididrv.cpp:209
#, c-format
@ -1829,8 +1827,9 @@ msgstr "
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "²ëåÞÔ"
@ -2199,25 +2198,25 @@ msgstr ""
"ScummVM"
#: engines/agi/detection.cpp:157
#, fuzzy
msgid "Use an alternative palette"
msgstr "Использовать альтернативное вступление (только для CD версии игры)"
msgstr "Использовать альтернативную палитру"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
"Использовать альтернативную палитру для всех игр Amiga. Это было старое поведение"
#: engines/agi/detection.cpp:167
#, fuzzy
msgid "Mouse support"
msgstr "Поддержка пропусков"
msgstr "Поддержка мыши"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
"Включает поддержку мыши. Позволяет использовать мышь для перемещения и в меню игры."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
@ -2270,13 +2269,12 @@ msgid "Cutscene file '%s' not found!"
msgstr "ÄÐÙÛ ×ÐáâÐÒÚØ '%s' ÝÕ ÝÐÙÔÕÝ!"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
#, fuzzy
msgid "Color Blind Mode"
msgstr "Режим щелчка"
msgstr "Режим без цвета"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
msgstr ""
msgstr "Включить режим для людей со слабым восприятием цвета"
#: engines/drascula/saveload.cpp:47
msgid ""
@ -2332,11 +2330,11 @@ msgstr "
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
msgstr ""
msgstr "Режим с кровью"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
msgstr ""
msgstr "Включает режим с изображением крови, если доступно"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@ -2469,6 +2467,12 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
"Нижеследующий файл сохранения из оригинальной игры был найден в вашей игровой директории:\n"
"\n"
"%s %s\n"
"\n"
"Не желаете ли использовать это сохранение в ScummVM?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@ -2476,6 +2480,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
"В указанном слоте %d уже есть сохранение игры. Перезаписать?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@ -2487,6 +2493,10 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
"%d оригинальных файлов сохранения были успешно импортированы в ScummVM.\n"
"Если вы захотите импортировать оригинпльные сохранения, вам нужно будет\n"
"открыть отладочную консоль ScummVM и ввести команду 'import_savefile'.\n"
"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@ -2625,11 +2635,11 @@ msgstr "
#: engines/sci/detection.cpp:374
msgid "Skip EGA dithering pass (full color backgrounds)"
msgstr ""
msgstr "Не делать аппроксимацию цветов EGA (полноцветные фоны)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
msgstr ""
msgstr "Пропускает проход аппроксимации цветов EGA, графика будет показана со всеми цветами"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
@ -2706,15 +2716,13 @@ msgstr "
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
msgstr "Вы уверены, что хотите начать снова? (Y/N)"
msgstr "Вы уверены, что хотите начать снова? (Y/N)Y"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:185
#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
msgstr "Вы уверены, что хотите выйти? (Y/N)"
msgstr "Вы уверены, что хотите выйти? (Y/N)Y"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
@ -3222,25 +3230,24 @@ msgid "Third kid"
msgstr "ÂàÕâØÙ ÓÕàÞÙ"
#: engines/scumm/help.cpp:292
#, fuzzy
msgid "Toggle Inventory/IQ Points display"
msgstr "Включить показ данных в центре экрана"
msgstr "Переключить показ инвентаря/очков IQ"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
msgstr ""
msgstr "Переключить управление боями Клввиатурой/Мышью (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
msgstr ""
msgstr "* Управление клавиатурой всегда включено,"
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
msgstr ""
msgstr " твк что несмотря на сообщение игры,"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
msgstr ""
msgstr " на самом деле это вкл/выкл управление мышью"
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@ -3277,7 +3284,7 @@ msgstr "
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
msgstr ""
msgstr "Удар сзади"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@ -3335,6 +3342,22 @@ msgstr "
msgid "Fly to lower right"
msgstr "»ÕâÕâì ÒßàÐÒÞ-ÒÝØ×"
#: engines/scumm/input.cpp:572
msgid "Snap scroll on"
msgstr "Прокрутка скачками включена"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr "Прокрутка скачками выкл"
#: engines/scumm/input.cpp:587
msgid "Music volume: "
msgstr "Громк. музыки: "
#: engines/scumm/input.cpp:604
msgid "Subtitle speed: "
msgstr "Скорость титров: "
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@ -3345,27 +3368,30 @@ msgstr ""
"LucasArts, ÝÞ ÝÕ åÒÐâÐÕâ %s. ¿ÕàÕÚÛîçÐîáì ÝÐ AdLib."
#: engines/scumm/scumm.cpp:2644
#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
"Сейчас должна запуститься игра Maniac Mansion. Но ScummVM пока этого не "
"умеет. Чтобы сыграть, нажмите 'Новая игра' в стартовом меню ScummVM, а затем "
"выберите директорию Maniac внутри директории с игрой Tentacle."
"Сейчас должна запуститься игра Maniac Mansion. Но чтобы это работало, файлы "
"игры Maniac Mansion должны быть скопированы в директорию 'Maniac' внутри "
"директории игры Tentacle, и сама игра должна быть добавлена в ScummVM."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
"Не удалось найти исполнимый файл 'Loom' Macintosh, чтобы прочитать\n"
"данные об инструментах. Музыка будет выключена."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
"Не удалось найти исполнимый файл 'Monkey Island' Macintosh, чтобы прочитать\n"
"данные об инструментах. Музыка будет выключена."
#: engines/sky/compact.cpp:130
msgid ""
@ -3481,14 +3507,13 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
msgstr ""
msgstr "Показать счётчик кадров в секунду"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
msgstr "Показать в верхнем левом углу текущее количество кадров в секунду"
#: engines/zvision/detection_tables.h:52
#, fuzzy
msgid "Use the original save/load screens instead of the ScummVM interface"
msgstr ""
"¸áßÞÛì×ÞÒÐâì ÞàØÓØÝÐÛìÝëÕ íÚàÐÝë ×ÐßØáØ Ø áÞåàÐÝÕÝØï ØÓàë ÒÜÕáâÞ áÔÕÛÐÝÝëå Ò "
@ -3496,39 +3521,36 @@ msgstr ""
#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
msgstr "Двойноq FPS"
#: engines/zvision/detection_tables.h:62
msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
msgstr "Увеличить частоту кадров с 30 до 60 Гц"
#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Включить режим гелия"
msgstr "Включить Venus"
#: engines/zvision/detection_tables.h:72
#, fuzzy
msgid "Enable the Venus help system"
msgstr "Включить режим гелия"
msgstr "Включить систему помощи Venus"
#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
msgstr "Выключить анимацию во время поворотов"
#: engines/zvision/detection_tables.h:82
msgid "Disable animation while turning in panorama mode"
msgstr ""
msgstr "Выключить анимацию во время поворотов в режиме панормаы"
#: engines/zvision/detection_tables.h:91
msgid "Use high resolution MPEG video"
msgstr ""
msgstr "Использовать видео MPEG высокого разрешения"
#: engines/zvision/detection_tables.h:92
#, fuzzy
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Использовать альтернативный набор серебряных курсоров вместо обычных золотых"
"Использовать MPEG видео из DVD версии, вместо видео низкого разрешения в формате AVI"
#~ msgid "EGA undithering"
#~ msgstr "EGA ÑÕ× àÐáâàÐ"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -1017,6 +1017,10 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr ""
#: gui/recorderdialog.cpp:174
msgid "Unknown Author"
msgstr ""
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@ -1768,8 +1772,9 @@ msgstr ""
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr ""
@ -3222,6 +3227,22 @@ msgstr ""
msgid "Fly to lower right"
msgstr ""
#: engines/scumm/input.cpp:572
msgid "Snap scroll on"
msgstr ""
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
msgid "Music volume: "
msgstr ""
#: engines/scumm/input.cpp:604
msgid "Subtitle speed: "
msgstr ""
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 16:30+0100\n"
"Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n"
"Language-Team: \n"
@ -1042,6 +1042,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vill du verkligen radera den här spardatan?"
#: gui/recorderdialog.cpp:174
#, fuzzy
msgid "Unknown Author"
msgstr "Okänt fel"
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Visa som lista"
@ -1825,8 +1830,9 @@ msgstr "Snabbl
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Avsluta"
@ -3328,6 +3334,25 @@ msgstr "Flyg
msgid "Fly to lower right"
msgstr "Flyg åt nedre höger"
#: engines/scumm/input.cpp:572
#, fuzzy
msgid "Snap scroll on"
msgstr "Mjuk rullning"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr ""
#: engines/scumm/input.cpp:587
#, fuzzy
msgid "Music volume: "
msgstr "Musikvolym:"
#: engines/scumm/input.cpp:604
#, fuzzy
msgid "Subtitle speed: "
msgstr "Texthastighet:"
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""

View file

@ -2,22 +2,21 @@
# Copyright (C) 2010-2015 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Lubomyr Lisen, 2010.
# Eugene Sandulenko <sev@scummvm.org>, 2010-2014
# Eugene Sandulenko <sev@scummvm.org>, 2010-2015
#
msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
"POT-Creation-Date: 2015-09-06 15:14+0200\n"
"PO-Revision-Date: 2014-07-01 02:34+0300\n"
"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2015-11-06 10:07+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Ukrainian\n"
"Language: Ukrainian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: gui/about.cpp:94
#, c-format
@ -75,7 +74,7 @@ msgstr "
#: gui/editrecorddialog.cpp:58
msgid "Author:"
msgstr ""
msgstr "Автор:"
#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
msgid "Name:"
@ -83,11 +82,11 @@ msgstr "
#: gui/editrecorddialog.cpp:60
msgid "Notes:"
msgstr ""
msgstr "Примітки:"
#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
msgid "Ok"
msgstr ""
msgstr "Гаразд"
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
@ -529,9 +528,8 @@ msgid "Do you really want to remove this game configuration?"
msgstr "²Ø ÔöÙáÝÞ åÞçÕâÕ ÒØÔÐ󯉯 ãáâÐÝÞÒÚØ ÔÛï æöô÷ ÓàØ?"
#: gui/launcher.cpp:999
#, fuzzy
msgid "Do you want to load saved game?"
msgstr "²Ø åÞçÕâÕ ×ÐÒÐÝâÐÖØâØ Óàã?"
msgstr "Ви хочете завантажити збережену гру?"
#: gui/launcher.cpp:1048
msgid "This game does not support loading games from the launcher."
@ -547,7 +545,7 @@ msgstr "
#: gui/launcher.cpp:1161
msgid "Record..."
msgstr ""
msgstr "Запис..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@ -574,21 +572,19 @@ msgstr "
#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
msgid "Stop"
msgstr ""
msgstr "Стоп"
#: gui/onscreendialog.cpp:106
msgid "Edit record description"
msgstr ""
msgstr "Редагвати опис запису"
#: gui/onscreendialog.cpp:108
#, fuzzy
msgid "Switch to Game"
msgstr "¿ÕàÕÜÚÝãâØ"
msgstr "Переключитися на гру"
#: gui/onscreendialog.cpp:110
#, fuzzy
msgid "Fast replay"
msgstr "ÈÒØÔÚØÙ àÕÖØÜ"
msgstr "Швидке відтворення"
#: gui/options.cpp:85
msgid "Never"
@ -987,29 +983,28 @@ msgstr ""
#. I18N: You must leave "#" as is, only word 'next' is translatable
#: gui/predictivedialog.cpp:87
msgid "# next"
msgstr ""
msgstr "# наст"
#: gui/predictivedialog.cpp:88
msgid "add"
msgstr ""
msgstr "дод"
#: gui/predictivedialog.cpp:92
#, fuzzy
msgid "Delete char"
msgstr "²ØÔÐÛØâØ"
msgstr "Видалити сммвол"
#: gui/predictivedialog.cpp:96
msgid "<"
msgstr ""
msgstr "<"
#. I18N: Pre means 'Predictive', leave '*' as is
#: gui/predictivedialog.cpp:98
msgid "* Pre"
msgstr ""
msgstr "* Pre"
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
msgstr "Записувати або відтворити процес гри"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@ -1018,31 +1013,33 @@ msgstr "
#: gui/recorderdialog.cpp:71
msgid "Record"
msgstr ""
msgstr "Записати"
#: gui/recorderdialog.cpp:72
#, fuzzy
msgid "Playback"
msgstr "³àÐâØ"
msgstr "Відтворити"
#: gui/recorderdialog.cpp:74
msgid "Edit"
msgstr ""
msgstr "Редагувати"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
msgstr ""
msgstr "Автор: "
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
msgstr ""
msgstr "Примітки: "
#: gui/recorderdialog.cpp:155
#, fuzzy
msgid "Do you really want to delete this record?"
msgstr "²Ø ÔöÙáÝÞ åÞçÕâÕ ÒØÔÐ󯉯 æÕ ×ÑÕàÕÖÕÝÝï?"
msgstr "Ви дійсно хочете видалити цей запис?"
#: gui/recorderdialog.cpp:174
msgid "Unknown Author"
msgstr "Невідомий автор"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@ -1502,7 +1499,7 @@ msgstr "
#: audio/fmopl.cpp:67
msgid "ALSA Direct FM"
msgstr ""
msgstr "Беспосередній ALSA FM"
#: audio/mididrv.cpp:209
#, c-format
@ -1825,8 +1822,9 @@ msgstr "
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
#: backends/events/default/default-events.cpp:218
#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "²ØåöÔ"
@ -2196,25 +2194,25 @@ msgstr ""
"²ØÚÞàØáâÞÒãÒÐâØ ÞàØÓöÝÐÛìÝö ×ÑÕàÕÖÕÝÝï/×ÐÒÐÝâÐÖÕÝÝï ÕÚàÐÝØ, ×ÐÜöáâì ScummVM"
#: engines/agi/detection.cpp:157
#, fuzzy
msgid "Use an alternative palette"
msgstr "²ØÚÞàØáâÞÒãÒÐâØ ÐÛìâÕàÝÐâØÒÝØÙ Òáâãß ÓàØ (âöÛìÚØ CD ÒÕàáöï)"
msgstr "Використовувати альтернативну палітру"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
"Використовувати альтернативну палітру, звичайну для ігор з Amiga. Це була стара поведінка."
#: engines/agi/detection.cpp:167
#, fuzzy
msgid "Mouse support"
msgstr "¿öÔâàØÜãÒÐâØ ¿àÞßãáâØâØ"
msgstr "Підтримка миші"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
"Включає підтримку миші. Дозволяє використовувати мишу для пересування та управління меню."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
@ -2267,13 +2265,12 @@ msgid "Cutscene file '%s' not found!"
msgstr "ÄÐÙÛ àÞÛØÚã '%s' ÝÕ ×ÝÐÙÔÕÝÞ!"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
#, fuzzy
msgid "Color Blind Mode"
msgstr "ÀÕÖØÜ ÚÛöÚöÒ"
msgstr "Режим без кольору"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
msgstr ""
msgstr "Включає режим для людей з погіршенним сприяттям кольору"
#: engines/drascula/saveload.cpp:47
msgid ""
@ -2328,11 +2325,11 @@ msgstr "
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
msgstr ""
msgstr "Режим з кров'ю"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
msgstr ""
msgstr "Увімкнути режим з кров'ю, якщо є доступний"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@ -2464,6 +2461,12 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
"Наступний оригінальний файл стану гри було знайдено у вашій папці з грою:\n"
"\n"
"%s %s\n"
"\n"
"Чи ви бажаєте використовувати цей стан гри зі ScummVM?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@ -2471,6 +2474,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
"Файл стану гри було знайдено у вказаній позиції %d. Перетерти?\n"
"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@ -2482,6 +2487,10 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
"%d оригінальних файлів зі станом гри було успішно імпортовано у\n"
"ScummVM. Якщо ви захочете пізніше імпортувати оригінальні файли зі станом гри, вам потрібно\n"
"відкрити консоль відладчика і ввести команду 'import_savefile'.\n"
"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@ -2697,15 +2706,13 @@ msgstr "
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
msgstr "²Ø ãßÕÒÝÕÝö, éÞ åÞçÕâÕ àÞ×ßÞçÐâØ áßÞçÐâÚã? (Y/N)"
msgstr "Ви упевнені, що хочете розпочати спочатку? (Y/N)Y"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:185
#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
msgstr "²Ø ãßÕÒÝÕÝö, éÞ åÞçÕâÕ ÒØÙâØ? (Y/N)"
msgstr "Ви упевнені, що хочете вийти? (Y/N)Y"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
@ -3213,25 +3220,24 @@ msgid "Third kid"
msgstr "ÂàÕâï ÔØâØÝÐ"
#: engines/scumm/help.cpp:292
#, fuzzy
msgid "Toggle Inventory/IQ Points display"
msgstr "¿ÕàÕÜÚÝãâØ ßÞÚÐ×ãÒÐÝÝï Ò æÕÝâàö ÕÚàÐÝã"
msgstr "Перемкнути показування інвентарю або значення IQ"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
msgstr ""
msgstr "Перемкнути керування бійкою Клавіатура/Миша (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
msgstr ""
msgstr "* Управління клавіатурою завжди влючене, тому, "
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
msgstr ""
msgstr " незважаючи на повідомлення гри, це налаштування"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
msgstr ""
msgstr " насправді включає та виключає управління мишею."
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@ -3268,7 +3274,7 @@ msgstr "
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
msgstr ""
msgstr "Бити ззаду"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@ -3326,6 +3332,22 @@ msgstr "
msgid "Fly to lower right"
msgstr "»ÕâöâØ ÔÞÝØ×ã ÝÐßàÐÒÞ"
#: engines/scumm/input.cpp:572
msgid "Snap scroll on"
msgstr "Прокрутка стрибками"
#: engines/scumm/input.cpp:574
msgid "Snap scroll off"
msgstr "Вмикає прокрутку стрибками"
#: engines/scumm/input.cpp:587
msgid "Music volume: "
msgstr "Гучність музики: "
#: engines/scumm/input.cpp:604
msgid "Subtitle speed: "
msgstr "Швид. субтитрів: "
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@ -3336,27 +3358,30 @@ msgstr ""
"LucasArts, ßàÞâÕ %s ÒöÔáãâÝöÙ. ¿ÕàÕÜØÚÐîáì ÝÐ AdLib."
#: engines/scumm/scumm.cpp:2644
#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
"·Ð×ÒØçÐÙ, ×ÐàÐ× ÑØ ×ÐßãáâØÒáï Maniac Mansion. ¿àÞâÕ ScummVM éÕ æìÞÓÞ ÝÕ "
"ÒÜöô. ÉÞÑ ÓàÐâØ ã ÝìÞÓÞ, ÞÑÕàöâì '´ÞÔÐâØ Óàã' ã ßÞçÐâÚÞÒÞÜã ÜÕÝî ScummVM, ö "
"ÒØÑÕàöâì ßÐßÚã Maniac ÒáÕàÕÔÕÝö ßÒßÚØ × ÓàÞî Tentacle."
"Зазвичай, зараз би запустився Maniac Mansion. Але, щоб це могло працювати, "
"вам потрібно переписати файли гри Maniac Manssion у папку Maniac всередині "
"пвпки з грою Tentacle, а також додати саму гру у ScummVM."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
"Не вадлося знайти файл програми 'Loom' Macintosh аби прочитати\n"
"з нього інструменти. Музику було вимкнено."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
"Не вадлося знайти файл програми 'Monkey Island' Macintosh аби прочитати\n"
"з нього інструменти. Музику було вимкнено."
#: engines/sky/compact.cpp:130
msgid ""
@ -3470,136 +3495,46 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
msgstr ""
msgstr "Показати лічильник кадріи"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
msgstr "Показує у верньому лівому куті поточну кількість кадрів на секунду"
#: engines/zvision/detection_tables.h:52
#, fuzzy
msgid "Use the original save/load screens instead of the ScummVM interface"
msgstr ""
"²ØÚÞàØáâÞÒãÒÐâØ ÞàØÓöÝÐÛìÝö ×ÑÕàÕÖÕÝÝï/×ÐÒÐÝâÐÖÕÝÝï ÕÚàÐÝØ, ×ÐÜöáâì ScummVM"
"Використовувати оригінальні екрани збереження/завантаження замість ScummVM"
#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
msgstr "Подвійна FPS"
#: engines/zvision/detection_tables.h:62
msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
msgstr "Підвищити кількість кадрів на секунду з 30 до 60"
#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "ÃÒöÜÚÝãâØ àÕÖØÜ ³ÕÛöãÜ"
msgstr "Увімкнути Venus"
#: engines/zvision/detection_tables.h:72
#, fuzzy
msgid "Enable the Venus help system"
msgstr "ÃÒöÜÚÝãâØ àÕÖØÜ ³ÕÛöãÜ"
msgstr "Увімкнути допоміжну систему Venus"
#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
msgstr "Виключити анімацію під час поворотів"
#: engines/zvision/detection_tables.h:82
msgid "Disable animation while turning in panorama mode"
msgstr ""
msgstr "Виключає анімацію під ча поворотів у режимі панорами"
#: engines/zvision/detection_tables.h:91
msgid "Use high resolution MPEG video"
msgstr ""
msgstr "Використовувати відео MPEG з підвищеною роздільністю"
#: engines/zvision/detection_tables.h:92
#, fuzzy
msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"²ØÚÞàØáâÞÒãÒÐâØ ÐÛìâÕàÝÐâØÒÝØÙ ÝÐÑöà áàöÑÝØå ÚãàáÞàöÒ, ×ÐÜöáâì ×ÒØçÐÙÝØå "
"×ÞÛÞâØå"
#~ msgid "EGA undithering"
#~ msgstr "EGA ÑÕ× àÐáâàãÒÐÝÝï"
#~ msgid "Enable undithering in EGA games"
#~ msgstr "ÃÒöÜÚÝãâØ ÐÝâØ-×ÓÛÐÔÖãÒÐÝÝï Ò EGA öÓàÐå"
#~ msgid "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2"
#~ msgstr ""
#~ "·ÝÐÙÔÕÝö àÞÛØÚØ MPEG-2, ÐÛÕ ScummVM ÑãÒ ×öÑàÐÝØÙ ÑÕ× ßöÔâàØÜÚØ MPEG-2"
#~ msgctxt "lowres"
#~ msgid "Mass Add..."
#~ msgstr "´ÞÔ. ÑÐÓÐâÞ..."
#~ msgid ""
#~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
#~ msgstr ""
#~ "²ØÜØÚÐô ÜÐßöÝÓ General MIDI ÔÛï öÓÞà ×ö ×ÒãÚÞÒÞî ÔÞàöÖÚÞî ÔÛï Roland MT-32"
#~ msgid "Standard (16bpp)"
#~ msgstr "ÁâÐÝÔÐàâÝØÙ àÐáâÕàØ×ÐâÞà (16bpp)"
#~ msgid "MPEG2 cutscenes are no longer supported"
#~ msgstr "ÀÞÛØÚØ MPEG2 ÑöÛìèÕ ÝÕ ßöÔâàØÜãîâìáï"
#~ msgid "OpenGL Normal"
#~ msgstr "OpenGL ÝÞàÜÐÛìÝØÙ"
#~ msgid "OpenGL Conserve"
#~ msgstr "OpenGL ·ÑÕàÕÖÕÝØÙ"
#~ msgid "OpenGL Original"
#~ msgstr "OpenGL ¾àØÓöÝÐÛìÝØÙ"
#~ msgid "Current display mode"
#~ msgstr "¿ÞâÞçÝØÙ ÒöÔÕÞàÕÖØÜ"
#~ msgid "Current scale"
#~ msgstr "¿ÞâÞçÝØÙ ÜÐáèâÐÑ"
#~ msgid "Active filter mode: Linear"
#~ msgstr "°ÚâØÒÝØÙ àÕÖØÜ äöÛìâàÐæö÷: »öÝöÙÝØÙ"
#~ msgid "Active filter mode: Nearest"
#~ msgstr "°ÚâØÒÝØÙ àÕÖØÜ äöÛìâàÐæö÷: ½ÐÙÑÛØÖçÕ"
#~ msgid "Enable Roland GS Mode"
#~ msgstr "ÃÒöÜÚÝãâØ àÕÖØÜ Roland GS"
#~ msgid "Hercules Green"
#~ msgstr "Hercules ·ÕÛÕÝØÙ"
#~ msgid "Hercules Amber"
#~ msgstr "Hercules ±ãàèâØÝÝØÙ"
#~ msgctxt "lowres"
#~ msgid "Hercules Green"
#~ msgstr "Hercules ·ÕÛÕÝØÙ"
#~ msgctxt "lowres"
#~ msgid "Hercules Amber"
#~ msgstr "Hercules ±ãàèâØÝÝØÙ"
#~ msgid "Save game failed!"
#~ msgstr "½Õ ÒÔÐÛÞáï ×ÑÕàÕÓâØ Óàã!"
#~ msgctxt "lowres"
#~ msgid "Add Game..."
#~ msgstr "´ÞÔÐâØ Óàã..."
#~ msgid "Add Game..."
#~ msgstr "´ÞÔÐâØ Óàã..."
#~ msgid "Discovered %d new games."
#~ msgstr "·ÝÐÙÔÕÝÞ %d ÝÞÒØå öÓÞà."
#~ msgid "Command line argument not processed"
#~ msgstr "°àÓãÜÕÝâØ ÚÞÜÐÝÔÝÞÓÞ àïÔÚã ÝÕ ÞÑàÞÑÛÕÝö"
#~ msgid "FM Towns Emulator"
#~ msgstr "µÜãÛïâÞà FM Towns"
#~ msgid "Invalid Path"
#~ msgstr "½ÕßàÐÒØÛìÝØÙ èÛïå"
"Використовувати відео MPEG з DVD-версії, замість файлів AVI з ніжчою роздільною здатністю"

View file

@ -115,12 +115,6 @@ endif
cp $(srcdir)/dists/iphone/icon.png $(bundle_name)/
cp $(srcdir)/dists/iphone/icon-72.png $(bundle_name)/
cp $(srcdir)/dists/iphone/Default.png $(bundle_name)/
# Binary patch workaround for Iphone 5/IPad 4 "Illegal instruction: 4" toolchain issue (http://code.google.com/p/iphone-gcc-full/issues/detail?id=6)
cp residualvm residualvm-iph5
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' residualvm-iph5
ldid -S residualvm-iph5
chmod 755 residualvm-iph5
cp residualvm-iph5 $(bundle_name)/ResidualVM-iph5
# Location of static libs for the iPhone
ifneq ($(BACKEND), iphone)

View file

@ -46,11 +46,29 @@ public:
}
void test_pod_sort() {
{
int dummy;
Common::sort(&dummy, &dummy);
TS_ASSERT_EQUALS(checkSort(&dummy, &dummy, Common::Less<int>()), true);
}
{
int array[] = { 12 };
Common::sort(array, ARRAYEND(array));
TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);
// already sorted
Common::sort(array, ARRAYEND(array));
TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);
}
{
int array[] = { 63, 11, 31, 72, 1, 48, 32, 69, 38, 31 };
Common::sort(array, ARRAYEND(array));
TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);
int sortedArray[] = { 1, 11, 31, 31, 32, 38, 48, 63, 69, 72 };
for (size_t i = 0; i < 10; ++i)
TS_ASSERT_EQUALS(array[i], sortedArray[i]);
// already sorted
Common::sort(array, ARRAYEND(array));
TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);