diff --git a/project/jni/application/opentyrian/AndroidAppSettings.cfg b/project/jni/application/opentyrian/AndroidAppSettings.cfg index 3dad2b6b2..69440660c 100644 --- a/project/jni/application/opentyrian/AndroidAppSettings.cfg +++ b/project/jni/application/opentyrian/AndroidAppSettings.cfg @@ -15,8 +15,8 @@ RedefinedKeys="SPACE RETURN LCTRL LALT SPACE" AppTouchscreenKeyboardKeysAmount=4 AppTouchscreenKeyboardKeysAmountAutoFire=1 MultiABI=n -AppVersionCode=2112 -AppVersionName="2.1.12 - Destruct minigame now accessible from OpenTyrian menu (it's a bit buggy), configurable auto-fire mode in the Keyboard menu, fixed ship unable to reach bottom of the screen when controlling it with touch" +AppVersionCode=2113 +AppVersionName="2.1.13 - more options for auto-fire and touchscreen controls in Keyboard menu" CompiledLibraries="sdl_net" CustomBuildScript=n AppCflags='-finline-functions -O2' diff --git a/project/jni/application/opentyrian/src/config.cpp b/project/jni/application/opentyrian/src/config.cpp index 3e0f49a3b..941120801 100644 --- a/project/jni/application/opentyrian/src/config.cpp +++ b/project/jni/application/opentyrian/src/config.cpp @@ -219,7 +219,7 @@ JE_SaveGameTemp saveTemp; JE_word editorLevel; /*Initial value 800*/ AutoFireMode_t autoFireMode = AUTOFIRE_TOUCHSCREEN; - +TouchscreenMode_t touchscreenMode = TOUCHSCREEN_SHIP_ABOVE_FINGER; cJSON *load_json( const char *filename ) { @@ -282,6 +282,9 @@ bool load_opentyrian_config( void ) if ((setting = cJSON_GetObjectItem(section, "autofire"))) autoFireMode = (AutoFireMode_t)setting->valueint; + + if ((setting = cJSON_GetObjectItem(section, "touchscreen"))) + touchscreenMode = (TouchscreenMode_t)setting->valueint; } cJSON_Delete(root); @@ -311,6 +314,9 @@ bool save_opentyrian_config( void ) setting = cJSON_CreateOrGetObjectItem(section, "autofire"); cJSON_SetNumber(setting, autoFireMode); + + setting = cJSON_CreateOrGetObjectItem(section, "touchscreen"); + cJSON_SetNumber(setting, touchscreenMode); } save_json(root, "opentyrian.conf"); diff --git a/project/jni/application/opentyrian/src/config.h b/project/jni/application/opentyrian/src/config.h index 2f8e05111..9d4633ea3 100644 --- a/project/jni/application/opentyrian/src/config.h +++ b/project/jni/application/opentyrian/src/config.h @@ -140,8 +140,16 @@ extern JE_byte processorType; extern JE_SaveFilesType saveFiles; extern JE_SaveGameTemp saveTemp; extern JE_word editorLevel; -enum AutoFireMode_t { AUTOFIRE_TOUCHSCREEN, AUTOFIRE_BUTTON, AUTOFIRE_NONE, AUTOFIRE_LAST }; +enum AutoFireMode_t { AUTOFIRE_TOUCHSCREEN, AUTOFIRE_BUTTON, AUTOFIRE_BUTTON_TOUCH, AUTOFIRE_NONE, AUTOFIRE_LAST }; extern AutoFireMode_t autoFireMode; +enum TouchscreenMode_t { + TOUCHSCREEN_SHIP_ABOVE_FINGER, + TOUCHSCREEN_SHIP_TO_THE_LEFT, + TOUCHSCREEN_SHIP_BELOW_FINGER, + TOUCHSCREEN_FIRE_ONLY, + TOUCHSCREEN_NONE, + TOUCHSCREEN_LAST }; +extern TouchscreenMode_t touchscreenMode; void JE_initProcessorType( void ); diff --git a/project/jni/application/opentyrian/src/game_menu.cpp b/project/jni/application/opentyrian/src/game_menu.cpp index c7193bcc5..6c6c9ff4e 100644 --- a/project/jni/application/opentyrian/src/game_menu.cpp +++ b/project/jni/application/opentyrian/src/game_menu.cpp @@ -82,7 +82,7 @@ static PlayerItems old_items[2]; // TODO: should not be global if possible static struct cube_struct cube[4]; -static const JE_MenuChoiceType menuChoicesDefault = { 7, 9, 8, 0, 0, 12, (SAVE_FILES_NUM / 2) + 2, 0, 0, 6, 4, 6, 7, 5 }; +static const JE_MenuChoiceType menuChoicesDefault = { 7, 9, 8, 0, 0, 13, (SAVE_FILES_NUM / 2) + 2, 0, 0, 6, 4, 6, 7, 5 }; static const JE_byte menuEsc[MAX_MENU] = { 0, 1, 1, 1, 2, 3, 3, 1, 8, 0, 0, 11, 3, 0 }; static const JE_byte itemAvailMap[7] = { 1, 2, 3, 9, 4, 6, 7 }; static const JE_word planetX[21] = { 200, 150, 240, 300, 270, 280, 320, 260, 220, 150, 160, 210, 80, 240, 220, 180, 310, 330, 150, 240, 200 }; @@ -380,7 +380,7 @@ void JE_itemScreen( void ) /* keyboard settings menu */ if (curMenu == 5) { - for (int x = 2; x <= 12; x++) + for (int x = 2; x <= 13; x++) { if (x == curSel[curMenu]) { @@ -395,9 +395,15 @@ void JE_itemScreen( void ) if( x == 12 ) { - char *AutoFireNames[] = { "Touchscreen", "Fire button", "None" }; + char *AutoFireNames[] = { "Touchscreen", "Fire button", "Touch and Button", "None" }; JE_textShade(VGAScreen, 166, 38 + (x - 2)*12, "Auto-Fire", temp2 / 16, temp2 % 16 - 8, DARKEN); - JE_textShade(VGAScreen, 236, 38 + (x - 2)*12, AutoFireNames[autoFireMode], temp2 / 16, temp2 % 16 - 8, DARKEN); + JE_textShade(VGAScreen, 230, 38 + (x - 2)*12, AutoFireNames[autoFireMode], temp2 / 16, temp2 % 16 - 8, DARKEN); + } + else if( x == 13 ) + { + char *TouchscreenNames[] = { "Ship above finger", "Ship to the left", "Ship below finger", "Fire only", "None" }; + JE_textShade(VGAScreen, 166, 38 + (x - 2)*12, "Touchscreen", temp2 / 16, temp2 % 16 - 8, DARKEN); + JE_textShade(VGAScreen, 230, 38 + (x - 2)*12, TouchscreenNames[touchscreenMode], temp2 / 16, temp2 % 16 - 8, DARKEN); } else JE_textShade(VGAScreen, 166, 38 + (x - 2)*12, menuInt[curMenu + 1][x-1], temp2 / 16, temp2 % 16 - 8, DARKEN); @@ -405,11 +411,11 @@ void JE_itemScreen( void ) if (x < 10) /* 10 = reset to defaults, 11 = done */ { temp2 = (x == curSel[curMenu]) ? 252 : 250; - JE_textShade(VGAScreen, 236, 38 + (x - 2)*12, SDL_GetKeyName(keySettings[x-2]), temp2 / 16, temp2 % 16 - 8, DARKEN); + JE_textShade(VGAScreen, 230, 38 + (x - 2)*12, SDL_GetKeyName(keySettings[x-2]), temp2 / 16, temp2 % 16 - 8, DARKEN); } } - menuChoices[5] = 12; + menuChoices[5] = 13; } /* Joystick settings menu */ @@ -2660,6 +2666,13 @@ void JE_menuFunction( JE_byte select ) autoFireMode = AUTOFIRE_TOUCHSCREEN; JE_saveConfiguration(); } + else if (curSelect == 13) /* Touchscreen mode */ + { + touchscreenMode = (TouchscreenMode_t)(touchscreenMode + 1); + if(touchscreenMode >= TOUCHSCREEN_LAST) + touchscreenMode = TOUCHSCREEN_SHIP_ABOVE_FINGER; + JE_saveConfiguration(); + } else if (curSelect == 10) /* reset to defaults */ { memcpy(keySettings, defaultKeySettings, sizeof(keySettings)); diff --git a/project/jni/application/opentyrian/src/mainint.cpp b/project/jni/application/opentyrian/src/mainint.cpp index 06d5190d6..8de49d98b 100644 --- a/project/jni/application/opentyrian/src/mainint.cpp +++ b/project/jni/application/opentyrian/src/mainint.cpp @@ -3089,7 +3089,7 @@ redo: { *mouseX_ = this_player->x; *mouseY_ = this_player->y; - if(autoFireMode != AUTOFIRE_BUTTON) + if(autoFireMode != AUTOFIRE_BUTTON && autoFireMode != AUTOFIRE_BUTTON_TOUCH) button[1-1] = false; button[2-1] = false; button[3-1] = false; @@ -3179,30 +3179,53 @@ redo: if ((inputDevice == 0 || inputDevice == 1 || inputDevice == 2) && !play_demo) { /* Move ship above user finger */ + int shifted_mouse_x = mouse_x + 15; int shifted_mouse_y = mouse_y; - if( shifted_mouse_y > 160 ) - shifted_mouse_y += shifted_mouse_y - 160; + if( touchscreenMode == TOUCHSCREEN_SHIP_ABOVE_FINGER ) + { + if( shifted_mouse_y > 160 ) + shifted_mouse_y += shifted_mouse_y - 160; + shifted_mouse_y -= 45; + } + if( touchscreenMode == TOUCHSCREEN_SHIP_TO_THE_LEFT ) + { + shifted_mouse_x -= 30; + } + if (keysactive[keySettings[0]] || - (has_mouse && mouse_pressed[0] && shifted_mouse_y < (this_player->y + 45))) + (has_mouse && mouse_pressed[0] && (shifted_mouse_y < this_player->y && touchscreenMode < TOUCHSCREEN_FIRE_ONLY))) this_player->y -= CURRENT_KEY_SPEED; if (keysactive[keySettings[1]] || - (has_mouse && mouse_pressed[0] && shifted_mouse_y > (this_player->y + 45))) + (has_mouse && mouse_pressed[0] && (shifted_mouse_y > this_player->y && touchscreenMode < TOUCHSCREEN_FIRE_ONLY))) this_player->y += CURRENT_KEY_SPEED; if (keysactive[keySettings[2]] || - (has_mouse && mouse_pressed[0] && mouse_x < (this_player->x - 15))) + (has_mouse && mouse_pressed[0] && (shifted_mouse_x < this_player->x && touchscreenMode < TOUCHSCREEN_FIRE_ONLY))) this_player->x -= CURRENT_KEY_SPEED; if (keysactive[keySettings[3]] || - (has_mouse && mouse_pressed[0] && mouse_x > (this_player->x - 15))) + (has_mouse && mouse_pressed[0] && (shifted_mouse_x > this_player->x && touchscreenMode < TOUCHSCREEN_FIRE_ONLY))) this_player->x += CURRENT_KEY_SPEED; - if(autoFireMode == AUTOFIRE_BUTTON) + if( autoFireMode == AUTOFIRE_BUTTON || autoFireMode == AUTOFIRE_BUTTON_TOUCH ) { if(newkey && keydown && lastkey_sym == keySettings[4]) button[0] = ! button[0]; + else if (autoFireMode == AUTOFIRE_BUTTON_TOUCH) + { + static int prevState = 0; + if( mouse_pressed[0] && prevState != button[0] ) + { + button[0] = ! button[0]; + prevState = button[0]; + } + else if( ! mouse_pressed[0] ) + prevState = ! button[0]; + } } else - button[0] = button[0] || keysactive[keySettings[4]] || ( mouse_pressed[0] && ( autoFireMode == AUTOFIRE_TOUCHSCREEN ) ); + { + button[0] = button[0] || keysactive[keySettings[4]] || ( mouse_pressed[0] && ( touchscreenMode != TOUCHSCREEN_NONE ) ); + } button[3] = button[3] || keysactive[keySettings[5]]; button[1] = button[1] || keysactive[keySettings[6]]; diff --git a/project/jni/application/opentyrian/src/opentyr.cpp b/project/jni/application/opentyrian/src/opentyr.cpp index 0f9f2d0d5..c36a57c07 100644 --- a/project/jni/application/opentyrian/src/opentyr.cpp +++ b/project/jni/application/opentyrian/src/opentyr.cpp @@ -52,6 +52,9 @@ #include #include #include +#ifdef ANDROID +#include +#endif const char *opentyrian_str = "OpenTyrian", *opentyrian_version = "Classic (" HG_REV ")"; @@ -246,6 +249,10 @@ void opentyrian_menu( void ) int main( int argc, char *argv[] ) { + #ifdef ANDROID + __android_log_print(ANDROID_LOG_INFO, "OpenTyrian", "SDL_main() called" ); + #endif + mt_srand(time(NULL)); printf("\nWelcome to... >> %s %s <<\n\n", opentyrian_str, opentyrian_version); diff --git a/project/jni/application/src b/project/jni/application/src index 706424f94..7fa7b8f4e 120000 --- a/project/jni/application/src +++ b/project/jni/application/src @@ -1 +1 @@ -sc2 \ No newline at end of file +opentyrian \ No newline at end of file