Merge pull request #1938 from janisozaur/remove-windows

Remove windows
This commit is contained in:
Ted John 2015-09-18 17:25:47 +01:00
commit 105ff7472b
21 changed files with 362 additions and 50 deletions

View File

@ -16,8 +16,11 @@ cache:
apt: true
env:
- OPENRCT2_CMAKE_OPTS=
- OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON"
- OPENRCT2_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt"
- OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt"
- OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt"
- OPENRCT2_CMAKE_OPTS="-DDISABLE_HTTP_TWITCH=ON -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt"
- OPENRCT2_CMAKE_OPTS="-DDISABLE_NETWORK=ON -DDISABLE_HTTP_TWITCH=ON -DCMAKE_C_COMPILER=gcc-4.8 -DCMAKE_CXX_COMPILER=g++-4.8"
sudo: required

View File

@ -26,8 +26,10 @@ project(${PROJECT})
add_definitions(-DORCT2_RESOURCE_DIR="${ORCT2_RESOURCE_DIR}")
add_definitions(-DHAVE_CONFIG_H)
add_definitions(-DCURL_STATICLIB)
#uncomment the line bellow if you don't want to build openrct2 with twitch integration
#add_definitions(-DDISABLE_HTTP -DDISABLE_TWITCH)
option(DISABLE_HTTP_TWITCH "Disable HTTP and Twitch support.")
if (DISABLE_HTTP_TWITCH)
add_definitions(-DDISABLE_HTTP -DDISABLE_TWITCH)
endif (DISABLE_HTTP_TWITCH)
option(DISABLE_NETWORK "Disable multiplayer functionality. Mainly for testing.")
if (DISABLE_NETWORK)
@ -37,7 +39,7 @@ endif (DISABLE_NETWORK)
set(ORCTLIBS_INCLUDE /usr/local/cross-tools/orctlibs/include)
set(JANSSON_INCLUDE /usr/local/cross-tools/orctlibs/include/jansson)
set(ORCTLIBS_LIB_DIR /usr/local/cross-tools/orctlibs/lib)
set(ORCTLIBS_LIB jansson curl ssl crypto ws2_32)
set(ORCTLIBS_LIB jansson curl ssl crypto)
# include lib
include_directories("lib/")
@ -75,6 +77,6 @@ set_target_properties(${PROJECT} PROPERTIES PREFIX "")
TARGET_LINK_LIBRARIES(${PROJECT} ${SDL2_LIBRARIES} ${ORCTLIBS_LIB})
if (WIN32)
target_link_libraries(${PROJECT} winmm.lib -limm32 -lversion -ldsound)
target_link_libraries(${PROJECT} winmm.lib -limm32 -lversion -ldsound ws2_32)
endif (WIN32)

View File

@ -1,43 +1,60 @@
FROM nfnty/arch-mini
MAINTAINER s0r00t
ENV DISPLAY :0
RUN pacman -Syyu --noconfirm
RUN pacman -S --noconfirm git yajl cmake wget unzip wine
RUN pacman -S --noconfirm git curl jshon expac
RUN pacman -S --noconfirm --needed base-devel
RUN pacman -S --noconfirm yajl
RUN useradd -mg root travis
RUN usermod -aG wheel travis
RUN sed -i 's/# %wheel ALL=(ALL) NOPASSWD: ALL/%wheel ALL=(ALL) NOPASSWD: ALL/g' /etc/sudoers
USER travis
WORKDIR /tmp
RUN curl -sL https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=package-query -o PKGBUILD
USER travis
RUN curl -sLO https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=package-query
RUN mv PKGBUILD?h=package-query PKGBUILD
RUN makepkg
USER root
RUN pacman --noconfirm -U *.pkg.tar.xz
USER travis
RUN curl -sL https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=yaourt -o PKGBUILD
RUN curl -sLO https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=yaourt
RUN mv PKGBUILD?h=yaourt PKGBUILD
RUN makepkg
USER root
RUN pacman --noconfirm -U *.pkg.tar.xz
RUN pacman -R --noconfirm gcc
RUN yes | pacman -S gcc-libs-multilib
RUN pacman -S --noconfirm gcc-multilib cmake
RUN pacman -S --noconfirm cmake
USER travis
RUN yaourt -S --noconfirm mingw-w64-headers
RUN yaourt -S --noconfirm mingw-w64-gcc
RUN yaourt -S --noconfirm wine
RUN yaourt -S --noconfirm mingw-w64-zlib mingw-w64-pkg-config
RUN gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys D9C4D26D0E604491 BB5869F064EA74AB 9D5EAAF69013B842 D605848ED7E69871 4DE8FF2A63C7CC90
RUN yaourt -S --noconfirm mingw-w64-gcc mingw-w64-zlib mingw-w64-pkg-config mingw-w64-openssl mingw-w64-jansson mingw-w64-libtasn1 mingw-w64-gmp mingw-w64-nettle mingw-w64-libffi mingw-w64-p11-kit mingw-w64-readline mingw-w64-gnutls mingw-w64-libunistring mingw-w64-termcap mingw-w64-libidn mingw-w64-curl mingw-w64-expat mingw-w64-libdbus mingw-w64-sdl2 mingw-w64-sdl2_ttf mingw-w64-configure
USER root
RUN pacman --noconfirm -Rns $(pacman -Qttdq)
RUN pacman -Scc --noconfirm
WORKDIR /tmp
RUN rm -r *
WORKDIR /home/travis
USER travis
RUN git clone https://github.com/OpenRCT2/OpenRCT2
WORKDIR OpenRCT2
RUN ln -s /usr/i686-w64-mingw32/bin/libfreetype-6.dll
RUN ln -s /usr/i686-w64-mingw32/bin/libwinpthread-1.dll
RUN ln -s /usr/i686-w64-mingw32/bin/SDL2_ttf.dll
RUN ln -s /usr/i686-w64-mingw32/bin/SDL2.dll
RUN ln -s /usr/i686-w64-mingw32/bin/libbz2-1.dll
RUN ./install.sh
RUN ./build.sh
RUN yaourt -S --noconfirm mingw-w64-openssl
RUN yaourt -S --noconfirm mingw-w64-jansson
RUN yaourt -S --noconfirm mingw-w64-libtasn1
RUN yaourt -S --noconfirm mingw-w64-gmp
RUN yaourt -S --noconfirm mingw-w64-nettle
RUN yaourt -S --noconfirm mingw-w64-libffi
RUN yaourt -S --noconfirm mingw-w64-p11-kit
RUN yaourt -S --noconfirm mingw-w64-readline
RUN yaourt -S --noconfirm mingw-w64-gnutls
RUN yaourt -S --noconfirm mingw-w64-libunistring
RUN yaourt -S --noconfirm mingw-w64-termcap
RUN yaourt -S --noconfirm mingw-w64-gettext
RUN yaourt -S --noconfirm mingw-w64-libidn
RUN yaourt -S --noconfirm mingw-w64-curl
RUN yaourt -S --noconfirm mingw-w64-expat
RUN yaourt -S --noconfirm mingw-w64-libdbus
RUN yaourt -S --noconfirm mingw-w64-sdl2
RUN yaourt -S --noconfirm mingw-w64-sdl2_ttf
RUN yaourt -S --noconfirm wget unzip
RUN yaourt -S --noconfirm lib32-jansson lib32-curl lib32-sdl2 lib32-sdl2_ttf
RUN yaourt -S --noconfirm lib32-speex
#RUN git clone https://github.com/OpenRCT2/OpenRCT2
#WORKDIR /tmp/OpenRCT2
#RUN ./install.sh
#RUN ./build.sh

View File

@ -56,7 +56,7 @@ fi
pushd build
echo OPENRCT2_CMAKE_OPTS = $OPENRCT_CMAKE_OPTS
cmake -DCMAKE_TOOLCHAIN_FILE=../CMakeLists_mingw.txt -DCMAKE_BUILD_TYPE=Debug $OPENRCT2_CMAKE_OPTS ..
cmake -DCMAKE_BUILD_TYPE=Debug $OPENRCT2_CMAKE_OPTS ..
make
popd

View File

@ -74,6 +74,9 @@ if [[ `uname` == "Darwin" ]]; then
popd
fi
elif [[ `uname` == "Linux" ]]; then
if [[ ! -z "$TRAVIS" ]]; then
sudo dpkg --add-architecture i386
fi
sudo apt-get update
if [[ -z "$TRAVIS" ]]; then
sudo apt-get install -y binutils-mingw-w64-i686 gcc-mingw-w64-i686 g++-mingw-w64-i686 cmake
@ -81,7 +84,12 @@ elif [[ `uname` == "Linux" ]]; then
sudo apt-get install -y wine
fi
else
sudo apt-get install -y --force-yes binutils-mingw-w64-i686 gcc-mingw-w64-i686 g++-mingw-w64-i686 cmake
apt-cache search libsdl2
apt-cache policy libsdl2-dev:i386
apt-cache policy libsdl2-dev
sudo apt-get install -y --force-yes binutils-mingw-w64-i686 gcc-mingw-w64-i686 g++-mingw-w64-i686 cmake libsdl2-dev:i386 libsdl2-ttf-dev:i386 gcc-4.8 pkg-config:i386 g++-4.8-multilib gcc-4.8-multilib libjansson-dev:i386 libspeex-dev:i386 libspeexdsp-dev:i386
export CC=gcc-4.8
export CXX=g++-4.8
fi
fi
@ -144,6 +152,11 @@ if [[ ! -f $cachedir/i686-w64-mingw32-pkg-config ]]; then
echo -e "#!/bin/sh\nexport PKG_CONFIG_LIBDIR=/usr/local/cross-tools/i686-w64-mingw32/lib/pkgconfig\npkg-config \$@" > $cachedir/i686-w64-mingw32-pkg-config;
fi
set -x
dpkg -L libsdl2-dev
dpkg -L libsdl2-ttf-dev
set +x
chmod +x $cachedir/i686-w64-mingw32-pkg-config
sudo cp $cachedir/i686-w64-mingw32-pkg-config /usr/local/bin/

View File

@ -18,7 +18,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifdef _WIN32
#include <dsound.h>
#endif // _WIN32
#include "../addresses.h"
#include "../config.h"
@ -41,11 +43,13 @@ typedef struct {
uint32 var_110;
uint32 var_114;
uint32 var_118;
#ifdef _WIN32
HGLOBAL hmem; // 0x11C
HMMIO hmmio; // 0x120
MMCKINFO mmckinfo1; // 0x124
MMCKINFO mmckinfo2; // 0x138
LPDIRECTSOUNDBUFFER dsbuffer; // 0x14C
#endif // _WIN32
uint32 bufsize; // 0x150
uint32 playpos; // 0x154
uint32 var_158;
@ -57,7 +61,9 @@ typedef struct {
struct rct_sound_effect {
uint32 size;
#ifdef _WIN32
WAVEFORMATEX format;
#endif // _WIN32
uint8* data;
};
@ -73,6 +79,7 @@ void *gCrowdSoundChannel = 0;
void *gTitleMusicChannel = 0;
bool gGameSoundsOff = false;
#ifdef _WIN32
void audio_timefunc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2, int channel);
int sound_effect_loadvars(struct rct_sound_effect* sound_effect, LPWAVEFORMATEX* waveformat, char** data, DWORD* buffersize);
MMRESULT mmio_open(const char* filename, HMMIO* hmmio, HGLOBAL* hmem, LPMMCKINFO mmckinfo);
@ -86,6 +93,7 @@ int sound_fill_buffer(LPDIRECTSOUNDBUFFER dsbuffer, char* src, DWORD size);
void sound_channel_free(HMMIO* hmmio, HGLOBAL* hmem);
LPVOID map_file(LPCWSTR lpFileName, DWORD dwCreationDisposition, DWORD dwNumberOfBytesToMap);
int unmap_file(LPCVOID base);
#endif // _WIN32
void audio_init(int i)
{
@ -126,6 +134,7 @@ void audio_get_devices()
}
}
#ifdef _WIN32
/**
*
* rct2: 0x00401000
@ -329,6 +338,7 @@ int CALLBACK audio_timer_callback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DW
}
return 0;
}
#endif // _WIN32
/**
*
@ -336,6 +346,7 @@ int CALLBACK audio_timer_callback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DW
*/
int sub_40153B(int channel)
{
#ifdef _WIN32
rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel];
if (sound_channel->var_4) {
if (sound_channel->hmmio) {
@ -354,6 +365,9 @@ int sub_40153B(int channel)
return 0;
}
}
#else
STUB();
#endif // _WIN32
return 1;
}
@ -369,6 +383,7 @@ int sub_4015E7(int channel)
int buf2size;
int read;
int zero = 0;
#ifdef _WIN32
rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel];
LPDIRECTSOUNDBUFFER dsbuffer = RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel];
int result = dsbuffer->lpVtbl->Lock(dsbuffer, 0, sound_channel->bufsize, (LPVOID*)&buf1, (LPDWORD)&buf1size, (LPVOID*)&buf2, (LPDWORD)&buf2size, 0);
@ -401,6 +416,10 @@ int sub_4015E7(int channel)
sound_channel->playpos = 0;
}
return result;
#else
STUB();
return 0;
#endif // _WIN32
}
/**
@ -409,6 +428,7 @@ int sub_4015E7(int channel)
*/
int sound_channel_load_file(int channel, const char* filename, int offset)
{
#ifdef _WIN32
rct_sound_channel* sound_channel = &RCT2_ADDRESS(0x014262E0, rct_sound_channel)[channel];
sound_channel->hmem;
sound_channel->hmmio;
@ -441,9 +461,13 @@ int sound_channel_load_file(int channel, const char* filename, int offset)
sub_4015E7(channel);
sound_channel->var_158 = offset;
sound_channel->stopped = 0;
#else
STUB();
#endif // _WIN32
return 0;
}
#ifdef _WIN32
/**
*
* rct2: 0x00401822
@ -467,6 +491,7 @@ int mmio_open_channel(int channel, char* filename, LONG offset)
sound_channel->var_158 = offset;
return 0;
}
#endif // _WIN32
/**
*
@ -474,6 +499,7 @@ int mmio_open_channel(int channel, char* filename, LONG offset)
*/
int audio_create_timer()
{
#ifdef _WIN32
if (RCT2_GLOBAL(0x009E1AA4, int)) {
return 0;
}
@ -485,6 +511,9 @@ int audio_create_timer()
if (!RCT2_GLOBAL(0x009E1AA0, MMRESULT)) {
return 0;
}
#else
STUB();
#endif // _WIN32
RCT2_GLOBAL(0x009E1AA4, int) = 1;
return 1;
}
@ -498,6 +527,7 @@ int audio_remove_timer()
for (int i = 0; i < 4; i++) {
sound_channel_stop(i);
}
#ifdef _WIN32
if (RCT2_GLOBAL(0x009E1AA4, int)) {
timeKillEvent(RCT2_GLOBAL(0x009E1AA0, MMRESULT));
timeEndPeriod(50);
@ -508,6 +538,9 @@ int audio_remove_timer()
RCT2_GLOBAL(0x009E1AA4, int) = 0;
return result;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -536,6 +569,7 @@ int sound_channel_load_file2(int channel, const char* filename, int offset)
*/
int sound_channel_play(int channel, int a2, int volume, int pan, int frequency)
{
#ifdef _WIN32
rct_sound_channel* sound_channel = &RCT2_ADDRESS(RCT2_ADDRESS_SOUND_CHANNEL_LIST, rct_sound_channel)[channel];
sound_channel->var_164 = a2;
sound_channel_set_frequency(channel, frequency);
@ -545,6 +579,9 @@ int sound_channel_play(int channel, int a2, int volume, int pan, int frequency)
dsbuffer->lpVtbl->SetCurrentPosition(dsbuffer, 0);
dsbuffer->lpVtbl->Play(dsbuffer, 0, 0, DSBPLAY_LOOPING);
sound_channel->playing = 1;
#else
STUB();
#endif // _WIN32
return 1;
}
@ -554,6 +591,7 @@ int sound_channel_play(int channel, int a2, int volume, int pan, int frequency)
*/
int sound_channel_stop(int channel)
{
#ifdef _WIN32
rct_sound_channel* sound_channel = &RCT2_ADDRESS(RCT2_ADDRESS_SOUND_CHANNEL_LIST, rct_sound_channel)[channel];
sound_channel->playing = 0;
sound_channel->stopped = 1;
@ -571,6 +609,9 @@ int sound_channel_stop(int channel)
RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel] = 0;
}
_InterlockedExchange(&RCT2_GLOBAL(0x009E1AAC, LONG), 0);
#else
STUB();
#endif // _WIN32
return 1;
}
@ -580,12 +621,16 @@ int sound_channel_stop(int channel)
*/
int sound_channel_set_frequency(int channel, int frequency)
{
#ifdef _WIN32
LPDIRECTSOUNDBUFFER dsbuffer = RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel];
if (dsbuffer) {
if (SUCCEEDED(dsbuffer->lpVtbl->SetFrequency(dsbuffer, frequency)))
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -595,12 +640,16 @@ int sound_channel_set_frequency(int channel, int frequency)
*/
int sound_channel_set_pan(int channel, int pan)
{
#ifdef _WIN32
LPDIRECTSOUNDBUFFER dsbuffer = RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel];
if (dsbuffer) {
if (SUCCEEDED(dsbuffer->lpVtbl->SetPan(dsbuffer, pan)))
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -610,12 +659,16 @@ int sound_channel_set_pan(int channel, int pan)
*/
int sound_channel_set_volume(int channel, int volume)
{
#ifdef _WIN32
LPDIRECTSOUNDBUFFER dsbuffer = RCT2_ADDRESS(RCT2_ADDRESS_DSOUND_BUFFERS, LPDIRECTSOUNDBUFFER)[channel];
if (dsbuffer) {
if (SUCCEEDED(dsbuffer->lpVtbl->SetVolume(dsbuffer, volume)))
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -668,6 +721,7 @@ int sound_channel_is_playing(int channel)
int audio_release()
{
sound_stop_all();
#ifdef _WIN32
if (RCT2_GLOBAL(0x009E2BA4, LPDIRECTSOUND3DBUFFER)) {
RCT2_GLOBAL(0x009E2BA4, LPDIRECTSOUND3DBUFFER)->lpVtbl->Release(RCT2_GLOBAL(0x009E2BA4, LPDIRECTSOUND3DBUFFER));
RCT2_GLOBAL(0x009E2BA4, LPDIRECTSOUND3DBUFFER) = 0;
@ -682,6 +736,10 @@ int audio_release()
RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND) = 0;
}
return result;
#else
STUB();
return 0;
#endif // _WIN32
}
/**
@ -690,6 +748,7 @@ int audio_release()
*/
int map_sound_effects(const char* filename)
{
#ifdef _WIN32
if (RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, LPVOID)) {
return 0;
} else {
@ -698,6 +757,10 @@ int map_sound_effects(const char* filename)
free(wcFilename);
return RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, LPVOID) != 0;
}
#else
STUB();
return 0;
#endif // _WIN32
}
/**
@ -706,12 +769,16 @@ int map_sound_effects(const char* filename)
*/
int unmap_sound_effects()
{
#ifdef _WIN32
if (RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, LPVOID)) {
sound_stop_all();
unmap_file(RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, LPVOID));
RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, LPVOID) = 0;
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -721,6 +788,7 @@ int unmap_sound_effects()
*/
int sound_prepare(int sound_id, rct_sound *sound, int channels, int software)
{
#ifdef _WIN32
DSBUFFERDESC bufferdesc;
char* buffer = 0;
memset(&bufferdesc, 0, sizeof(bufferdesc));
@ -772,6 +840,9 @@ int sound_prepare(int sound_id, rct_sound *sound, int channels, int software)
sound->dsbuffer = 0;
}
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -781,6 +852,7 @@ int sound_prepare(int sound_id, rct_sound *sound, int channels, int software)
*/
int sound_duplicate(rct_sound* newsound, rct_sound* sound)
{
#ifdef _WIN32
if (FAILED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->DuplicateSoundBuffer(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), sound->dsbuffer, &newsound->dsbuffer))) {
return 0;
} else {
@ -790,6 +862,10 @@ int sound_duplicate(rct_sound* newsound, rct_sound* sound)
sound_add(newsound);
return 1;
}
#else
STUB();
return 1;
#endif // _WIN32
}
/**
@ -798,11 +874,15 @@ int sound_duplicate(rct_sound* newsound, rct_sound* sound)
*/
int sound_stop(rct_sound* sound)
{
#ifdef _WIN32
if (sound->dsbuffer) {
sound->dsbuffer->lpVtbl->Release(sound->dsbuffer);
sound->dsbuffer = 0;
return sound_remove(sound) ? 1 : 0;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -825,6 +905,7 @@ int sound_stop_all()
*/
void sound_bufferlost_check()
{
#ifdef _WIN32
rct_sound* sound = RCT2_GLOBAL(RCT2_ADDRESS_SOUNDLIST_BEGIN, rct_sound*);
while (sound && sound != RCT2_GLOBAL(RCT2_ADDRESS_SOUNDLIST_END, rct_sound*)) {
DWORD status;
@ -835,6 +916,9 @@ void sound_bufferlost_check()
}
sound = sound->next;
}
#else
STUB();
#endif // _WIN32
}
/**
@ -842,6 +926,7 @@ void sound_bufferlost_check()
* rct2: 0x00404E53
*/
int sound_is_playing(rct_sound* sound){
#ifdef _WIN32
if (sound->dsbuffer) {
DWORD status;
if (SUCCEEDED(sound->dsbuffer->lpVtbl->GetStatus(sound->dsbuffer, &status))) {
@ -850,6 +935,9 @@ int sound_is_playing(rct_sound* sound){
}
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -859,6 +947,7 @@ int sound_is_playing(rct_sound* sound){
*/
int sound_play(rct_sound* sound, int looping, int volume, int pan, int frequency)
{
#ifdef _WIN32
if (sound->dsbuffer) {
sound_set_frequency(sound, frequency);
sound_set_pan(sound, pan);
@ -876,6 +965,9 @@ int sound_play(rct_sound* sound, int looping, int volume, int pan, int frequency
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -885,11 +977,15 @@ int sound_play(rct_sound* sound, int looping, int volume, int pan, int frequency
*/
int sound_set_frequency(rct_sound* sound, int frequency)
{
#ifdef _WIN32
if (sound->dsbuffer) {
if (SUCCEEDED(sound->dsbuffer->lpVtbl->SetFrequency(sound->dsbuffer, frequency)))
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -899,11 +995,15 @@ int sound_set_frequency(rct_sound* sound, int frequency)
*/
int sound_set_pan(rct_sound* sound, int pan)
{
#ifdef _WIN32
if (sound->dsbuffer) {
if (SUCCEEDED(sound->dsbuffer->lpVtbl->SetPan(sound->dsbuffer, pan)))
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -913,11 +1013,15 @@ int sound_set_pan(rct_sound* sound, int pan)
*/
int sound_set_volume(rct_sound* sound, int volume)
{
#ifdef _WIN32
if (sound->dsbuffer) {
if (SUCCEEDED(sound->dsbuffer->lpVtbl->SetVolume(sound->dsbuffer, volume)))
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -927,9 +1031,13 @@ int sound_set_volume(rct_sound* sound, int volume)
*/
int sound_load3dparameters()
{
#ifdef _WIN32
if (SUCCEEDED(RCT2_GLOBAL(0x009E2BA4, LPDIRECTSOUND3DBUFFER)->lpVtbl->GetAllParameters(RCT2_GLOBAL(0x009E2BA4, LPDIRECTSOUND3DBUFFER), &RCT2_GLOBAL(0x009A6084, DS3DBUFFER)))) {
return 1;
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -945,6 +1053,7 @@ int sound_load3dposition()
return 0;
}
#ifdef _WIN32
/**
*
* rct2: 0x00404F85
@ -1017,6 +1126,7 @@ int sound_fill_buffer(LPDIRECTSOUNDBUFFER dsbuffer, char* src, DWORD size)
}
return 0;
}
#endif // _WIN32
/**
*
@ -1091,6 +1201,7 @@ rct_sound* sound_remove(rct_sound* sound)
*/
int sound_bufferlost_restore(rct_sound* sound)
{
#ifdef _WIN32
DWORD buffersize = 0;
LPWAVEFORMATEX waveformat = 0;
char* data = 0;
@ -1102,6 +1213,9 @@ int sound_bufferlost_restore(rct_sound* sound)
}
}
}
#else
STUB();
#endif // _WIN32
return 0;
}
@ -1111,12 +1225,17 @@ int sound_bufferlost_restore(rct_sound* sound)
*/
struct rct_sound_effect* sound_get_effect(uint16 sound_id)
{
#ifdef _WIN32
if (RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, LPVOID) && sound_id < RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, uint32*)[0]) {
return (struct rct_sound_effect*)(RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, int) + RCT2_GLOBAL(RCT2_ADDRESS_SOUND_EFFECTS_MAPPING, uint32*)[sound_id + 1]);
}
#else
STUB();
#endif // _WIN32
return 0;
}
#ifdef _WIN32
/**
*
* rct2: 0x00405222
@ -1458,6 +1577,7 @@ int get_dsound_devices()
}
return 0;
}
#endif // _WIN32
/**
*
@ -1734,6 +1854,7 @@ void stop_title_music()
void audio_init1()
{
int devicenum = 0;
#ifdef _WIN32
if (RCT2_GLOBAL(0x009AAC5C, uint8)) {
rct_dsdevice* dsdevice = &RCT2_GLOBAL(RCT2_ADDRESS_DSOUND_DEVICES, rct_dsdevice*)[0];
while (dsdevice->guid.Data1 != RCT2_GLOBAL(RCT2_ADDRESS_DSOUND_GUID, GUID).Data1 ||
@ -1763,6 +1884,9 @@ void audio_init1()
}
}
}
#else
STUB();
#endif // _WIN32
}
/**
@ -1782,7 +1906,12 @@ void audio_init2(int device)
other_sound->id = 0xFFFF;
}
RCT2_GLOBAL(0x014241BC, uint32) = 1;
#ifdef _WIN32
int successdsound = dsound_create_primary_buffer(0, device, 2, 22050, 16);
#else
int successdsound = 0;
STUB();
#endif // _WIN32
RCT2_GLOBAL(0x014241BC, uint32) = 0;
if (!successdsound) {
return;
@ -1799,7 +1928,11 @@ void audio_init2(int device)
}
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SOUND_DEVICE, uint32) = device;
rct_dsdevice dsdevice = RCT2_GLOBAL(RCT2_ADDRESS_DSOUND_DEVICES, rct_dsdevice*)[device];
#ifdef _WIN32
RCT2_GLOBAL(RCT2_ADDRESS_DSOUND_GUID, GUID) = dsdevice.guid;
#else
STUB();
#endif // _WIN32
RCT2_GLOBAL(0x009AAC5C, uint8) = 1;
config_save_default();
RCT2_GLOBAL(0x014241BC, uint32) = 1;

View File

@ -8,12 +8,12 @@
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
@ -21,7 +21,9 @@
#ifndef _AUDIO_H_
#define _AUDIO_H_
#ifdef _WIN32
#include <guiddef.h>
#endif // _WIN32
#include "../common.h"
#include "../world/sprite.h"
@ -44,16 +46,24 @@ void audio_get_devices();
* Represents a single directsound device.
*/
typedef struct {
#ifdef _WIN32
GUID guid;
char desc[256];
char drvname[256];
#else
uint8 padding[16+256+256];
#endif // _WIN32
} rct_dsdevice;
/**
* Represents a prepared sound.
*/
typedef struct rct_sound {
#ifdef _WIN32
struct IDirectSoundBuffer *dsbuffer;
#else
void *padding;
#endif // _WIN32
uint16 id;
uint16 var_8;
int has_caps;
@ -162,15 +172,19 @@ int sound_set_pan(rct_sound* sound, int pan);
int sound_set_volume(rct_sound* sound, int volume);
int sound_load3dparameters();
int sound_load3dposition();
#ifdef _WIN32
int dsound_count_devices();
#endif // _WIN32
rct_sound* sound_begin();
rct_sound* sound_next(rct_sound* sound);
rct_sound* sound_add(rct_sound* sound);
rct_sound* sound_remove(rct_sound* sound);
int sound_bufferlost_restore(rct_sound* sound);
struct rct_sound_effect* sound_get_effect(uint16 sound_id);
#ifdef _WIN32
int dsound_create_primary_buffer(int a, int device, int channels, int samples, int bits);
int get_dsound_devices();
#endif // _WIN32
int sound_play_panned(int sound_id, int ebx, sint16 x, sint16 y, sint16 z);
void stop_completed_sounds();
void start_title_music();

View File

@ -18,7 +18,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifdef _WIN32
#include <dsound.h>
#endif // _WIN32
extern "C" {
#include "../config.h"
@ -103,7 +105,11 @@ bool Source_Sample::LoadWAV(const char* filename)
if (spec != NULL) {
format.freq = spec->freq;
#ifdef _WIN32
format.format = spec->format;
#else
STUB();
#endif // _WIN32
format.channels = spec->channels;
issdlwav = true;
} else {
@ -138,11 +144,15 @@ bool Source_Sample::LoadCSS1(const char *filename, unsigned int offset)
Uint32 soundsize;
SDL_RWread(rw, &soundsize, sizeof(soundsize), 1);
length = soundsize;
#ifdef _WIN32
WAVEFORMATEX waveformat;
SDL_RWread(rw, &waveformat, sizeof(waveformat), 1);
format.freq = waveformat.nSamplesPerSec;
format.format = AUDIO_S16LSB;
format.channels = waveformat.nChannels;
#else
STUB();
#endif // _WIN32
data = new (std::nothrow) uint8[length];
if (!data) {
log_verbose("Unable to allocate data");
@ -170,6 +180,7 @@ void Source_Sample::Unload()
bool Source_Sample::Convert(AudioFormat format)
{
#ifdef _WIN32
if(Source_Sample::format.format != format.format || Source_Sample::format.channels != format.channels || Source_Sample::format.freq != format.freq){
SDL_AudioCVT cvt;
if (SDL_BuildAudioCVT(&cvt, Source_Sample::format.format, Source_Sample::format.channels, Source_Sample::format.freq, format.format, format.channels, format.freq) < 0) {
@ -188,6 +199,9 @@ bool Source_Sample::Convert(AudioFormat format)
Source_Sample::format = format;
return true;
}
#else
STUB();
#endif // _WIN32
return false;
}
@ -262,6 +276,7 @@ bool Source_SampleStream::LoadWAV(SDL_RWops* rw)
return false;
}
Uint64 chunkstart = SDL_RWtell(rw);
#ifdef _WIN32
PCMWAVEFORMAT waveformat;
SDL_RWread(rw, &waveformat, sizeof(waveformat), 1);
SDL_RWseek(rw, chunkstart + fmtchunk_size, RW_SEEK_SET);
@ -283,6 +298,9 @@ bool Source_SampleStream::LoadWAV(SDL_RWops* rw)
break;
}
format.channels = waveformat.wf.nChannels;
#else
STUB();
#endif // _WIN32
const Uint32 DATA = 0x61746164;
Uint32 datachunk_size = FindChunk(rw, DATA);
if (!datachunk_size) {
@ -444,6 +462,7 @@ void Mixer::Init(const char* device)
{
Close();
SDL_AudioSpec want, have;
#ifdef _WIN32
SDL_zero(want);
want.freq = 44100;
want.format = AUDIO_S16SYS;
@ -455,6 +474,9 @@ void Mixer::Init(const char* device)
format.format = have.format;
format.channels = have.channels;
format.freq = have.freq;
#else
STUB();
#endif // _WIN32
const char* filename = get_file_path(PATH_ID_CSS1);
for (int i = 0; i < countof(css1sources); i++) {
Source_Sample* source_sample = new Source_Sample;
@ -567,6 +589,7 @@ void SDLCALL Mixer::Callback(void* arg, uint8* stream, int length)
void Mixer::MixChannel(Channel& channel, uint8* data, int length)
{
#ifdef _WIN32
if (channel.source && channel.source->Length() > 0 && !channel.done && gConfigSound.sound) {
AudioFormat streamformat = channel.source->Format();
int loaded = 0;
@ -710,6 +733,9 @@ void Mixer::MixChannel(Channel& channel, uint8* data, int length)
channel.done = true;
}
}
#else
STUB();
#endif // _WIN32
}
void Mixer::EffectPanS16(Channel& channel, sint16* data, int length)
@ -752,10 +778,14 @@ void Mixer::EffectFadeU8(uint8* data, int length, int startvolume, int endvolume
bool Mixer::MustConvert(Source& source)
{
#ifdef _WIN32
const AudioFormat sourceformat = source.Format();
if (sourceformat.format != format.format || sourceformat.channels != format.channels || sourceformat.freq != format.freq) {
return true;
}
#else
STUB();
#endif // _WIN32
return false;
}
@ -880,4 +910,4 @@ void* Mixer_Play_Music(int pathid, int loop, int streaming)
}
}
return 0;
}
}

View File

@ -21,8 +21,15 @@
#ifndef _MIXER_H_
#define _MIXER_H_
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#include "../common.h"
#include <SDL.h>
#include "../platform/platform.h"
#ifdef __cplusplus
}
#endif // __cplusplus
#define USE_MIXER
@ -206,11 +213,15 @@ void Mixer_Channel_SetGroup(void* channel, int group);
void* Mixer_Play_Music(int pathid, int loop, int streaming);
static int DStoMixerVolume(int volume) { return (int)(SDL_MIX_MAXVOLUME * (SDL_pow(10, (float)volume / 2000))); };
#ifdef _WIN32
static float DStoMixerPan(int pan) { return (((float)pan + -DSBPAN_LEFT) / DSBPAN_RIGHT) / 2; };
#else
static float DStoMixerPan(int pan) { STUB(); return ((float)pan) / 2; };
#endif // _WIN32
static double DStoMixerRate(int frequency) { return (double)frequency / 22050; };
#ifdef __cplusplus
}
#endif
#endif
#endif

View File

@ -21,6 +21,7 @@
#include "../addresses.h"
#include "../common.h"
#include "drawing.h"
#include "../platform/platform.h"
/**
*
@ -324,4 +325,4 @@ void gfx_fill_rect_inset(rct_drawpixelinfo* dpi, short left, short top, short ri
}
}
}
}
}

View File

@ -18,13 +18,17 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifdef _WIN32
#include <windows.h>
#endif // _WIN32
#include "hook.h"
#include "platform/platform.h"
void* g_hooktableaddress = 0;
int g_hooktableoffset = 0;
int g_maxhooks = 1000;
#ifdef _WIN32
void hookfunc(int address, int newaddress, int stacksize, int registerargs[], int registersreturned, int eaxDestinationRegister)
{
int i = 0;
@ -211,9 +215,11 @@ void hookfunc(int address, int newaddress, int stacksize, int registerargs[], in
WriteProcessMemory(GetCurrentProcess(), (LPVOID)address, data, i, 0);
}
#endif // _WIN32
void addhook(int address, int newaddress, int stacksize, int registerargs[], int registersreturned, int eaxDestinationRegister)
{
#ifdef _WIN32
if (!g_hooktableaddress) {
g_hooktableaddress = VirtualAllocEx(GetCurrentProcess(), NULL, g_maxhooks * 100, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
}
@ -229,4 +235,7 @@ void addhook(int address, int newaddress, int stacksize, int registerargs[], int
WriteProcessMemory(GetCurrentProcess(), (LPVOID)address, data, i, 0);
hookfunc(hookaddress, newaddress, stacksize, registerargs, registersreturned, eaxDestinationRegister);
g_hooktableoffset++;
}
#else
STUB();
#endif // _WIN32
}

View File

@ -2,6 +2,7 @@ extern "C" {
#include "../common.h"
#include "../util/util.h"
#include "localisation.h"
#include "../platform/platform.h"
}
#include "../core/FileStream.hpp"

View File

@ -18,6 +18,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifdef _WIN32
#include <windows.h>
#endif // _WIN32
#include "../addresses.h"
#include "../config.h"
#include "../game.h"
@ -848,8 +851,13 @@ int win1252_to_utf8(utf8string dst, const char *src, int maxBufferLength)
}
}
#ifdef _WIN32
MultiByteToWideChar(CP_ACP, 0, src, -1, intermediateBuffer, bufferCount);
int result = WideCharToMultiByte(CP_UTF8, 0, intermediateBuffer, -1, dst, maxBufferLength, NULL, NULL);
#else
STUB();
int result = 0;
#endif // _WIN32
if (heapBuffer != NULL) {
free(heapBuffer);

View File

@ -1,6 +1,7 @@
#ifndef _HTTP_H_
#define _HTTP_H_
#ifndef DISABLE_HTTP
#include <jansson/jansson.h>
#include "../common.h"
@ -9,10 +10,13 @@ typedef struct {
json_t *root;
} http_json_response;
void http_init();
void http_dispose();
http_json_response *http_request_json(const char *url);
void http_request_json_async(const char *url, void (*callback)(http_json_response*));
void http_request_json_dispose(http_json_response *response);
#endif // DISABLE_HTTP
// These callbacks are defined anyway, but are dummy if HTTP is disabled
void http_init();
void http_dispose();
#endif

View File

@ -18,7 +18,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#include <windows.h>
extern "C" {
#include "../platform/platform.h"
}
#include "network.h"

View File

@ -44,6 +44,10 @@ extern "C" {
#ifndef DISABLE_NETWORK
#ifdef _WIN32
#include <winsock2.h>
#endif // _WIN32
enum {
NETWORK_AUTH_NONE,
NETWORK_AUTH_REQUESTED,

View File

@ -8,12 +8,12 @@
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
@ -62,7 +62,7 @@ static void openrct2_copy_files_over(const utf8 *originalDirectory, const utf8 *
utf8 *ch, filter[MAX_PATH], oldPath[MAX_PATH], newPath[MAX_PATH];
int fileEnumHandle;
file_info fileInfo;
if (!platform_ensure_directory_exists(newDirectory)) {
log_error("Could not create directory %s.", newDirectory);
return;
@ -80,7 +80,7 @@ static void openrct2_copy_files_over(const utf8 *originalDirectory, const utf8 *
while (platform_enumerate_files_next(fileEnumHandle, &fileInfo)) {
strcpy(newPath, newDirectory);
strcat(newPath, fileInfo.path);
strcpy(oldPath, originalDirectory);
ch = strchr(oldPath, '*');
if (ch != NULL)
@ -115,6 +115,7 @@ static void openrct2_copy_files_over(const utf8 *originalDirectory, const utf8 *
// TODO move to platform
static void openrct2_set_exe_path()
{
#ifdef _WIN32
wchar_t exePath[MAX_PATH];
wchar_t tempPath[MAX_PATH];
wchar_t *exeDelimiter;
@ -127,6 +128,16 @@ static void openrct2_set_exe_path()
tempPath[exeDelimiterIndex] = L'\0';
_wfullpath(exePath, tempPath, MAX_PATH);
WideCharToMultiByte(CP_UTF8, 0, exePath, countof(exePath), gExePath, countof(gExePath), NULL, NULL);
#else
char exePath[MAX_PATH];
ssize_t bytesRead;
bytesRead = readlink("/proc/self/exe", exePath, MAX_PATH);
if (bytesRead == -1) {
log_fatal("failed to read /proc/self/exe");
}
exePath[MAX_PATH - 1] = '\0';
strncpy(gExePath, exePath, MAX_PATH);
#endif // _WIN32
}
/**
@ -179,7 +190,11 @@ bool openrct2_initialise()
if (!gOpenRCT2Headless) {
audio_init();
audio_get_devices();
#ifdef _WIN32
get_dsound_devices();
#else
STUB();
#endif // _WIN32
}
language_open(gConfigGeneral.language);
http_init();
@ -331,7 +346,7 @@ static void openrct2_loop()
_spritelocations1[i].y = g_sprite_list[i].unknown.y;
_spritelocations1[i].z = g_sprite_list[i].unknown.z;
}
// Update the game so the sprite positions update
rct2_update();

View File

@ -1,9 +1,9 @@
/*****************************************************************************
* Copyright (c) 2014 Ted John
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
*
* This file is part of OpenRCT2.
*
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@ -17,11 +17,13 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifndef _PLATFORM_H_
#define _PLATFORM_H_
#ifdef _WIN32
#define HAVE_MATH_H
#endif // _WIN32
#include <SDL.h>
@ -136,6 +138,26 @@ uint8 platform_get_locale_temperature_format();
int windows_get_registry_install_info(rct2_install_info *installInfo, char *source, char *font, uint8 charset);
HWND windows_get_window_handle();
#endif
#endif // _WIN32
#endif
#ifdef __linux__
#include <unistd.h>
#include <limits.h>
#define STUB() log_warning("Function %s at %s:%d is a stub.\n", __PRETTY_FUNCTION__, __FILE__, __LINE__)
#define _strcmpi _stricmp
#define _stricmp(x, y) strcasecmp((x), (y))
#define _strnicmp(x, y, n) strncasecmp((x), (y), (n))
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define RCT2_ENDIANESS __ORDER_LITTLE_ENDIAN__
#define LOBYTE(w) ((uint8_t)(w))
#define HIBYTE(w) ((uint8_t)(((uint16_t)(w)>>8)&0xFF))
#endif // __BYTE_ORDER__
#ifndef RCT2_ENDIANESS
#error Unknown endianess!
#endif // RCT2_ENDIANESS
#endif // __linux__
#endif

View File

@ -736,6 +736,7 @@ void platform_set_cursor(char cursor)
static void platform_load_cursors()
{
RCT2_GLOBAL(0x14241BC, uint32) = 2;
#ifdef _WIN32
HINSTANCE hInst = RCT2_GLOBAL(RCT2_ADDRESS_HINSTANCE, HINSTANCE);
RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ARROW, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x74));
RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_BLANK, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA1));
@ -764,6 +765,9 @@ static void platform_load_cursors()
RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ENTRANCE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x9F));
RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_OPEN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA6));
RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_CLOSED, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA5));
#else
STUB();
#endif // _WIN32
_cursors[0] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
_cursors[1] = SDL_CreateCursor(blank_cursor_data, blank_cursor_mask, 32, 32, BLANK_CURSOR_HOTX, BLANK_CURSOR_HOTY);

View File

@ -333,6 +333,7 @@ int check_files_integrity()
{
int i;
const char *path;
#ifdef _WIN32
HANDLE file;
WIN32_FIND_DATA find_data;
@ -350,6 +351,9 @@ int check_files_integrity()
FindClose(file);
}
#else
STUB();
#endif // _WIN32
return 1;
}
@ -439,6 +443,7 @@ const utf8 *get_file_path(int pathId)
*/
void get_system_info()
{
#ifdef _WIN32
OSVERSIONINFO versionInfo;
SYSTEM_INFO sysInfo;
MEMORYSTATUS memInfo;
@ -450,10 +455,12 @@ void get_system_info()
RCT2_GLOBAL(RCT2_ADDRESS_OS_MINOR_VERSION, uint32) = versionInfo.dwMinorVersion;
RCT2_GLOBAL(RCT2_ADDRESS_OS_BUILD_NUMBER, uint32) = versionInfo.dwBuildNumber;
} else {
#endif // _WIN32
RCT2_GLOBAL(RCT2_ADDRESS_OS_PLATFORM_ID, uint32) = -1;
RCT2_GLOBAL(RCT2_ADDRESS_OS_MAJOR_VERSION, uint32) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_OS_MINOR_VERSION, uint32) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_OS_BUILD_NUMBER, uint32) = 0;
#ifdef _WIN32
}
GetSystemInfo(&sysInfo);
@ -494,6 +501,9 @@ void get_system_info()
RCT2_GLOBAL(0x1423C18, sint32) = 1;
RCT2_GLOBAL(0x01423C20, uint32) = (SDL_HasMMX() == SDL_TRUE);
#else
STUB();
#endif // _WIN32
}
@ -503,6 +513,7 @@ void get_system_info()
*/
void get_system_time()
{
#ifdef _WIN32
SYSTEMTIME systime;
GetSystemTime(&systime);
@ -510,6 +521,9 @@ void get_system_time()
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_MONTH, sint16) = systime.wMonth;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_YEAR, sint16) = systime.wYear;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_DAYOFWEEK, sint16) = systime.wDayOfWeek;
#else
STUB();
#endif // _WIN32
}
/**
@ -518,11 +532,15 @@ void get_system_time()
*/
void get_local_time()
{
#ifdef _WIN32
SYSTEMTIME systime;
GetLocalTime(&systime);
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_HOUR, sint16) = systime.wHour;
RCT2_GLOBAL(RCT2_ADDRESS_OS_TIME_MINUTE, sint16) = systime.wMinute;
#else
STUB();
#endif // _WIN32
}
/**

View File

@ -20,6 +20,7 @@
#include "util.h"
#include <SDL.h>
#include "../platform/platform.h"
int squaredmetres_to_squaredfeet(int squaredMetres)
{