Index: src/video/sdl_v.cpp =================================================================== --- src/video/sdl_v.cpp (revision 22532) +++ src/video/sdl_v.cpp (working copy) @@ -353,6 +353,8 @@ if (sym->scancode == 49) key = WKC_BACKSPACE; #elif defined(__sgi__) if (sym->scancode == 22) key = WKC_BACKQUOTE; +#elif defined(ANDROID) + if (sym->scancode == SDLK_BACKQUOTE) key = WKC_BACKQUOTE; #else if (sym->scancode == 49) key = WKC_BACKQUOTE; #endif @@ -484,6 +486,9 @@ SDL_CALL SDL_EnableUNICODE(1); _draw_threaded = GetDriverParam(parm, "no_threads") == NULL && GetDriverParam(parm, "no_thread") == NULL; +#ifdef ANDROID + _draw_threaded = false; +#endif return NULL; } Index: src/sound/sdl_s.cpp =================================================================== --- src/sound/sdl_s.cpp (revision 22532) +++ src/sound/sdl_s.cpp (working copy) @@ -20,9 +20,16 @@ static FSoundDriver_SDL iFSoundDriver_SDL; +#ifdef ANDROID +extern void Android_MidiMixMusic(Sint16 *stream, int len); +#endif + static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len) { MxMixSamples(stream, len / 4); +#if defined(ANDROID) && defined(LIBTIMIDITY) + Android_MidiMixMusic((Sint16 *)stream, len / 2); +#endif } const char *SoundDriver_SDL::Start(const char * const *parm) Index: src/music/libtimidity.cpp =================================================================== --- src/music/libtimidity.cpp (revision 22532) +++ src/music/libtimidity.cpp (working copy) @@ -22,10 +22,13 @@ #include #include #include +#include + #if defined(PSP) #include #endif /* PSP */ + enum MidiState { MIDI_STOPPED = 0, MIDI_PLAYING = 1, @@ -50,6 +53,24 @@ } } #endif /* PSP */ +#ifdef ANDROID +#define MIN(X ,Y) ((X) < (Y) ? (X) : (Y)) +void Android_MidiMixMusic(Sint16 *stream, int len) +{ + if (_midi.status == MIDI_PLAYING) { + Sint16 buf[16384]; + while( len > 0 ) + { + int minlen = MIN(sizeof(buf), len); + mid_song_read_wave(_midi.song, stream, MIN(sizeof(buf), len*2)); + for( Uint16 i = 0; i < minlen; i++ ) + stream[i] += buf[i]; + stream += minlen; + len -= minlen; + } + } +} +#endif static FMusicDriver_LibTimidity iFMusicDriver_LibTimidity; Index: src/table/settings.h =================================================================== --- src/table/settings.h (revision 22532) +++ src/table/settings.h (working copy) @@ -270,9 +270,15 @@ SDTG_STR("savegame_format", SLE_STRB, S, 0, _savegame_format, NULL, STR_NULL, NULL), SDTG_BOOL("rightclick_emulate", S, 0, _rightclick_emulate, false, STR_NULL, NULL), #ifdef WITH_FREETYPE +#ifdef ANDROID + SDTG_STR("small_font", SLE_STRB, S, 0, _freetype.small_font, "fonts/FreeSans.ttf", STR_NULL, NULL), + SDTG_STR("medium_font", SLE_STRB, S, 0, _freetype.medium_font, "fonts/FreeSans.ttf", STR_NULL, NULL), + SDTG_STR("large_font", SLE_STRB, S, 0, _freetype.large_font, "fonts/FreeSerif.ttf", STR_NULL, NULL), +#else SDTG_STR("small_font", SLE_STRB, S, 0, _freetype.small_font, NULL, STR_NULL, NULL), SDTG_STR("medium_font", SLE_STRB, S, 0, _freetype.medium_font, NULL, STR_NULL, NULL), SDTG_STR("large_font", SLE_STRB, S, 0, _freetype.large_font, NULL, STR_NULL, NULL), +#endif SDTG_VAR("small_size", SLE_UINT, S, 0, _freetype.small_size, 8, 0, 72, 0, STR_NULL, NULL), SDTG_VAR("medium_size", SLE_UINT, S, 0, _freetype.medium_size, 10, 0, 72, 0, STR_NULL, NULL), SDTG_VAR("large_size", SLE_UINT, S, 0, _freetype.large_size, 16, 0, 72, 0, STR_NULL, NULL), Index: src/os/unix/unix.cpp =================================================================== --- src/os/unix/unix.cpp (revision 22532) +++ src/os/unix/unix.cpp (working copy) @@ -24,7 +24,7 @@ #ifdef __APPLE__ #include -#elif (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__) +#elif ((defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__)) && !defined(ANDROID) #define HAS_STATVFS #endif @@ -245,6 +245,11 @@ void cocoaReleaseAutoreleasePool(); #endif +#ifdef ANDROID +#define main SDL_main +extern "C" int CDECL main(int, char *[]); +#endif + int CDECL main(int argc, char *argv[]) { int ret; Index: src/os/unix/crashlog_unix.cpp =================================================================== --- src/os/unix/crashlog_unix.cpp (revision 22532) +++ src/os/unix/crashlog_unix.cpp (working copy) @@ -141,7 +141,11 @@ }; /** The signals we want our crash handler to handle. */ +#ifdef ANDROID +static const int _signals_to_handle[] = { }; // Default Android signal handler will give us stack trace +#else static const int _signals_to_handle[] = { SIGSEGV, SIGABRT, SIGFPE, SIGBUS, SIGILL }; +#endif /** * Entry point for the crash handler. Index: src/window.cpp =================================================================== --- src/window.cpp (revision 22532) +++ src/window.cpp (working copy) @@ -2159,6 +2159,10 @@ * But there is no company related window open anyway, so _current_company is not used. */ assert(IsGeneratingWorld() || IsLocalCompany()); +#ifdef ANDROID + _settings_client.gui.left_mouse_btn_scrolling = true; +#endif + HandlePlacePresize(); UpdateTileSelection(); Index: src/network/core/os_abstraction.h =================================================================== --- src/network/core/os_abstraction.h (revision 22532) +++ src/network/core/os_abstraction.h (working copy) @@ -161,7 +161,7 @@ # include /* According to glibc/NEWS, appeared in glibc-2.3. */ # if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \ - && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) + && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) && !defined(ANDROID) /* If for any reason ifaddrs.h does not exist on your system, comment out * the following two lines and an alternative way will be used to fetch * the list of IPs from the system. */ Index: src/debug.cpp =================================================================== --- src/debug.cpp (revision 22532) +++ src/debug.cpp (working copy) @@ -16,6 +16,9 @@ #include "string_func.h" #include "fileio_func.h" #include "settings_type.h" +#ifdef ANDROID +#include +#endif #include @@ -76,6 +79,9 @@ */ static void debug_print(const char *dbg, const char *buf) { +#ifdef ANDROID + __android_log_print(ANDROID_LOG_INFO, "OpenTTD", "[%s] %s", dbg, buf); +#endif #if defined(ENABLE_NETWORK) if (_debug_socket != INVALID_SOCKET) { char buf2[1024 + 32]; Index: src/main_gui.cpp =================================================================== --- src/main_gui.cpp (revision 22532) +++ src/main_gui.cpp (working copy) @@ -462,7 +462,11 @@ Hotkey('C', "center", GHK_CENTER), Hotkey('Z', "center_zoom", GHK_CENTER_ZOOM), Hotkey(WKC_ESC, "reset_object_to_place", GHK_RESET_OBJECT_TO_PLACE), +#ifdef ANDROID + Hotkey(WKC_DELETE, "delete_windows", GHK_DELETE_NONVITAL_WINDOWS), +#else Hotkey(WKC_DELETE, "delete_windows", GHK_DELETE_WINDOWS), +#endif Hotkey(WKC_DELETE | WKC_SHIFT, "delete_all_windows", GHK_DELETE_NONVITAL_WINDOWS), Hotkey('R' | WKC_CTRL, "refresh_screen", GHK_REFRESH_SCREEN), #if defined(_DEBUG)