OpenTyrian: added utorial about on-screen buttons, fixed data files

This commit is contained in:
pelya
2014-06-10 00:46:18 +03:00
parent ddec13193f
commit 8bc7390029
11 changed files with 79 additions and 11 deletions

View File

@@ -18,7 +18,7 @@ AppVersionName="2.1.24"
# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir -
# these files are put inside .apk package by build system
# Also please avoid 'https://' URLs, many Android devices do not have trust certificates and will fail to connect to SF.net over HTTPS
AppDataDownloadUrl="Data files size is 11 Mb|tyrian21-data.zip|http://sourceforge.net/projects/libsdl-android/files/OpenTyrian/tyrian21-data.zip/download|http://sites.google.com/site/xpelyax/Home/tyrian21-data.zip?attredirects=0&d=1|http://sitesproxy.goapk.com/site/xpelyax/Home/tyrian21-data.zip"
AppDataDownloadUrl="!!Data files size is 11 Mb|tyrian21-data.zip^!!Tutorial|tutorial.zip"
# Reset SDL config when updating application to the new version (y) / (n)
ResetSdlConfigForThisVersion=y
@@ -144,7 +144,7 @@ AppUsesGyroscope=n
MoveMouseWithGyroscope=
# Application uses multitouch (y) or (n), multitouch events are passed as SDL_JOYBALLMOTION events for the joystick 0
AppUsesMultitouch=y
AppUsesMultitouch=n
# Application records audio (it will use any available source, such a s microphone)
# API is defined in file SDL_android.h: int SDL_ANDROID_OpenAudioRecording(SDL_AudioSpec *spec); void SDL_ANDROID_CloseAudioRecording(void);
@@ -208,7 +208,7 @@ FirstStartMenuOptions=''
# Specify architectures to compile, 'all' or 'y' to compile for all architectures.
# Available architectures: armeabi armeabi-v7a armeabi-v7a-hard x86 mips
MultiABI='armeabi-v7a'
MultiABI='all'
# Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower
AppMinimumRAM=0
@@ -216,7 +216,7 @@ AppMinimumRAM=0
# Optional shared libraries to compile - removing some of them will save space
# MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed
# Available libraries: mad (GPL-ed!) sdl_mixer sdl_image sdl_ttf sdl_net sdl_blitpool sdl_gfx sdl_sound intl xml2 lua jpeg png ogg flac tremor vorbis freetype xerces curl theora fluidsynth lzma lzo2 mikmod openal timidity zzip bzip2 yaml-cpp python boost_date_time boost_filesystem boost_iostreams boost_program_options boost_regex boost_signals boost_system boost_thread glu avcodec avdevice avfilter avformat avresample avutil swscale swresample bzip2
CompiledLibraries="sdl_net"
CompiledLibraries="sdl_net sdl_image"
# Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n)
CustomBuildScript=n

View File

@@ -16,7 +16,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <SDL_video.h>
#include <SDL_image.h>
#include <SDL_screenkeyboard.h>
#include <android/log.h>
#include "config.h"
#include "episodes.h"
#include "fonthand.h"
@@ -55,7 +60,7 @@ select_menuitem_by_touch(int menu_top, int menu_spacing, int menu_item_count, in
return true;
}
void android_setup_screen_keys()
void android_setup_screen_keys( void )
{
int W = SDL_ListModes(NULL, 0)[0]->w;
int H = SDL_ListModes(NULL, 0)[0]->h;
@@ -88,7 +93,7 @@ void android_setup_screen_keys()
SDL_ANDROID_SetScreenKeyboardTransparency(SDL_ALPHA_TRANSPARENT);
}
void android_cleanup_screen_keys()
void android_cleanup_screen_keys( void )
{
if (!screen_button_pos_destruct_initialized)
{
@@ -109,7 +114,7 @@ void android_cleanup_screen_keys()
SDL_ANDROID_SetScreenKeyboardTransparency(192); // Text input button should not be totally transparent
}
void android_setup_screen_keys_destruct()
void android_setup_screen_keys_destruct( void )
{
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &screen_button_pos_destruct[SDL_ANDROID_SCREENKEYBOARD_BUTTON_0]);
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &screen_button_pos_destruct[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1]);
@@ -120,6 +125,67 @@ void android_setup_screen_keys_destruct()
SDL_ANDROID_SetScreenKeyboardTransparency(192); // Text input button should not be totally transparent
}
void android_show_tutorial( void )
{
static const char *tutorial_flag_file = "tutorial-shown.flag";
FILE *shown = fopen(tutorial_flag_file, "r");
__android_log_print(ANDROID_LOG_INFO, "Tyrian", "android_show_tutorial: %s: %s", tutorial_flag_file, shown ? "already shown" : "not shown");
if (shown)
{
fclose(shown);
return;
}
__android_log_print(ANDROID_LOG_INFO, "Tyrian", "android_show_tutorial: creating %s", tutorial_flag_file);
shown = fopen(tutorial_flag_file, "w");
if (!shown)
return;
fprintf(shown, "Tutorial was shown - remove this file to show it again\n");
fclose(shown);
static const char *tutorial_files[] = { "tutorial1.png", "tutorial2.png" };
for (int f = 0; f < 2; f++)
{
SDL_Surface *img = IMG_Load(tutorial_files[f]);
__android_log_print(ANDROID_LOG_INFO, "Tyrian", "android_show_tutorial: %s: %p", tutorial_files[f], img);
if (!img)
return;
SDL_Surface *img2 = SDL_ConvertSurface(img, SDL_GetVideoSurface()->format, SDL_SWSURFACE);
SDL_FreeSurface(img);
img = img2;
for (int i = 7; i <= 255; i += 8)
{
SDL_FillRect(SDL_GetVideoSurface(), NULL, SDL_MapRGB(SDL_GetVideoSurface()->format, 0, 0, 0));
SDL_SetAlpha(img, SDL_SRCALPHA, i);
SDL_BlitSurface(img, NULL, SDL_GetVideoSurface(), NULL);
__android_log_print(ANDROID_LOG_INFO, "Tyrian", "android_show_tutorial: blitting with alpha %d", i);
SDL_Flip(SDL_GetVideoSurface());
SDL_Delay(60);
service_SDL_events(false);
}
while (!mousedown)
{
service_SDL_events(false);
SDL_Flip(SDL_GetVideoSurface());
SDL_Delay(40);
}
for (int i = 255; i > 8; i -= 8)
{
SDL_FillRect(SDL_GetVideoSurface(), NULL, 0);
SDL_SetAlpha(img, SDL_SRCALPHA, i);
SDL_BlitSurface(img, NULL, SDL_GetVideoSurface(), NULL);
__android_log_print(ANDROID_LOG_INFO, "Tyrian", "android_show_tutorial: blitting with alpha %d", i);
SDL_Flip(SDL_GetVideoSurface());
SDL_Delay(60);
service_SDL_events(false);
}
SDL_FreeSurface(img);
}
}
bool select_gameplay( void )
{
JE_loadPic(VGAScreen, 2, false);

View File

@@ -33,9 +33,10 @@ bool select_episode( void );
bool select_difficulty( void );
bool select_menuitem_by_touch(int menu_top, int menu_spacing, int menu_item_count, int *current_item);
void android_setup_screen_keys();
void android_cleanup_screen_keys();
void android_setup_screen_keys_destruct();
void android_setup_screen_keys( void );
void android_cleanup_screen_keys( void );
void android_setup_screen_keys_destruct( void );
void android_show_tutorial( void );
#endif /* MENUS_H */

View File

@@ -734,6 +734,8 @@ start_level_first:
android_setup_screen_keys();
android_show_tutorial();
fade_song();
for (uint i = 0; i < COUNTOF(player); ++i)
@@ -3442,7 +3444,6 @@ bool JE_titleScreen( JE_boolean animate )
arcade_code_i[i]++;
else if(lastkey_char != '\0')
arcade_code_i[i] = 0;
//__android_log_print(ANDROID_LOG_INFO, "Tyrian", "Got key: %d = '%c' = '%c', code[%d] = '%s', matched %d", (int)lastkey_char, lastkey_char, toupper(lastkey_char), i, specialName[i], arcade_code_i[i]);
if (arcade_code_i[i] > 0 && arcade_code_i[i] == strlen(specialName[i]))
{