diff --git a/ChangeAppSettings.sh b/ChangeAppSettings.sh index a299e45b2..3519e712d 100755 --- a/ChangeAppSettings.sh +++ b/ChangeAppSettings.sh @@ -1,6 +1,6 @@ #!/bin/sh -CHANGE_APP_SETTINGS_VERSION=10 +CHANGE_APP_SETTINGS_VERSION=11 AUTO= if [ "X$1" = "X-a" ]; then @@ -72,6 +72,13 @@ if [ -n "$var" ] ; then SdlVideoResize="$var" fi +echo -n "\nApplication resizing should preserve the aspect ratio, creating black bars (y) or (n) ($SdlVideoResizeKeepAspect): " +read var +if [ -n "$var" ] ; then + SdlVideoResizeKeepAspect="$var" +fi + + echo -n "\nEnable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n) ($NeedDepthBuffer): " read var if [ -n "$var" ] ; then @@ -110,6 +117,13 @@ if [ -n "$var" ] ; then NonBlockingSwapBuffers="$var" fi +echo -n "\nPrevent device from going to suspend mode while application is running (y/n) ($InhibitSuspend): " +read var +if [ -n "$var" ] ; then + InhibitSuspend="$var" +fi + + echo -n "\nRedefine common keys to SDL keysyms: TOUCHSCREEN SEARCH/CALL/DPAD_CENTER VOLUMEUP VOLUMEDOWN MENU BACK CAMERA ENTER DEL" echo -n "\nMENU and BACK hardware keys and TOUCHSCREEN virtual 'key' are available on all devices, other keys may be absent" echo -n "\nThe same key values are used if touchscreen keyboard is enabled, except for MENU and BACK\n($RedefinedKeys)\n: " @@ -217,8 +231,10 @@ echo LibSdlVersion=$LibSdlVersion >> AndroidAppSettings.cfg echo AppName=\"$AppName\" >> AndroidAppSettings.cfg echo AppFullName=$AppFullName >> AndroidAppSettings.cfg echo ScreenOrientation=$ScreenOrientation >> AndroidAppSettings.cfg +echo InhibitSuspend=$InhibitSuspend >> AndroidAppSettings.cfg echo AppDataDownloadUrl=\"$AppDataDownloadUrl\" >> AndroidAppSettings.cfg echo SdlVideoResize=$SdlVideoResize >> AndroidAppSettings.cfg +echo SdlVideoResizeKeepAspect=$SdlVideoResizeKeepAspect >> AndroidAppSettings.cfg echo NeedDepthBuffer=$NeedDepthBuffer >> AndroidAppSettings.cfg echo AppUsesMouse=$AppUsesMouse >> AndroidAppSettings.cfg echo AppNeedsArrowKeys=$AppNeedsArrowKeys >> AndroidAppSettings.cfg @@ -245,21 +261,38 @@ AppFullNameUnderscored=`echo $AppFullName | sed 's/[.]/_/g'` AppSharedLibrariesPath=/data/data/$AppFullName/lib ScreenOrientation1=portrait HorizontalOrientation=false + if [ "$ScreenOrientation" = "h" ] ; then ScreenOrientation1=landscape HorizontalOrientation=true fi + AppDataDownloadUrl1="`echo $AppDataDownloadUrl | sed 's/[&]/%26/g'`" + if [ "$SdlVideoResize" = "y" ] ; then SdlVideoResize=1 else SdlVideoResize=0 fi + +if [ "$SdlVideoResizeKeepAspect" = "y" ] ; then + SdlVideoResizeKeepAspect=1 +else + SdlVideoResizeKeepAspect=0 +fi + +if [ "$InhibitSuspend" = "y" ] ; then + InhibitSuspend=true +else + InhibitSuspend=false +fi + if [ "$NeedDepthBuffer" = "y" ] ; then NeedDepthBuffer=true else NeedDepthBuffer=false fi + MouseKeycode=UNKNOWN if [ "$AppUsesMouse" = "y" ] ; then AppUsesMouse=true @@ -269,16 +302,19 @@ else MouseKeycode=$AppUsesMouse AppUsesMouse=false fi + if [ "$AppNeedsArrowKeys" = "y" ] ; then AppNeedsArrowKeys=true else AppNeedsArrowKeys=false fi + if [ "$AppUsesJoystick" = "y" ] ; then AppUsesJoystick=true else AppUsesJoystick=false fi + if [ "$AppUsesMultitouch" = "y" ] ; then AppUsesMultitouch=true else @@ -337,6 +373,7 @@ cat project/src/Globals.java | \ sed "s@public static String DataDownloadUrl = .*@public static String DataDownloadUrl = \"$AppDataDownloadUrl1\";@" | \ sed "s/public static boolean NeedDepthBuffer = .*;/public static boolean NeedDepthBuffer = $NeedDepthBuffer;/" | \ sed "s/public static boolean HorizontalOrientation = .*;/public static boolean HorizontalOrientation = $HorizontalOrientation;/" | \ + sed "s/public static boolean InhibitSuspend = .*;/public static boolean InhibitSuspend = $InhibitSuspend;/" | \ sed "s/public static boolean AppUsesMouse = .*;/public static boolean AppUsesMouse = $AppUsesMouse;/" | \ sed "s/public static boolean AppNeedsArrowKeys = .*;/public static boolean AppNeedsArrowKeys = $AppNeedsArrowKeys;/" | \ sed "s/public static boolean AppUsesJoystick = .*;/public static boolean AppUsesJoystick = $AppUsesJoystick;/" | \ @@ -354,6 +391,7 @@ cat project/jni/Android.mk | \ sed "s/SDL_JAVA_PACKAGE_PATH := .*/SDL_JAVA_PACKAGE_PATH := $AppFullNameUnderscored/" | \ sed "s^SDL_CURDIR_PATH := .*^SDL_CURDIR_PATH := $DataPath^" | \ sed "s^SDL_VIDEO_RENDER_RESIZE := .*^SDL_VIDEO_RENDER_RESIZE := $SdlVideoResize^" | \ + sed "s^SDL_VIDEO_RENDER_RESIZE_KEEP_ASPECT := .*^SDL_VIDEO_RENDER_RESIZE_KEEP_ASPECT := $SdlVideoResizeKeepAspect^" | \ sed "s^COMPILED_LIBRARIES := .*^COMPILED_LIBRARIES := $CompiledLibraries^" | \ sed "s^APPLICATION_ADDITIONAL_CFLAGS :=.*^APPLICATION_ADDITIONAL_CFLAGS := $AppCflags^" | \ sed "s^APPLICATION_ADDITIONAL_LDFLAGS :=.*^APPLICATION_ADDITIONAL_LDFLAGS := $AppLdflags^" | \ diff --git a/project/AndroidManifest.xml b/project/AndroidManifest.xml index bf765cd4e..34529bd51 100644 --- a/project/AndroidManifest.xml +++ b/project/AndroidManifest.xml @@ -1,8 +1,8 @@ midY + dy*2 ) @@ -389,9 +389,12 @@ void updateOrientation ( float accX, float accY, float accZ ) midZ = accZ + dz*2; if( accZ > midZ + dz*2 ) midZ = accZ - dz*2; - return; + } + if(isJoystickUsed) + return; + if( accX < midX - dx ) { @@ -643,7 +646,7 @@ void SDL_ANDROID_processAndroidTrackballDampening() int SDL_SYS_JoystickInit(void) { SDL_numjoysticks = MAX_MULTITOUCH_POINTERS+1; - return(0); + return(SDL_numjoysticks); } /* Function to get the device-dependent name of a joystick */ diff --git a/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c b/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c index 668ce48f6..44f92936b 100644 --- a/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c +++ b/project/jni/sdl-1.3/src/video/android/SDL_androidvideo.c @@ -94,8 +94,19 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeResize) ( JNIEnv* env, jobject thiz, jint { if( SDL_ANDROID_sWindowWidth == 0 ) { + #if SDL_VIDEO_RENDER_RESIZE_KEEP_ASPECT + // TODO: tweak that parameters when app calls SetVideoMode(), not here - app may request something else than 640x480, it's okay for most apps though + // Also this should be user-configurable setting, not compiler option + SDL_ANDROID_sWindowWidth = (SDL_ANDROID_sFakeWindowWidth*h)/SDL_ANDROID_sFakeWindowHeight; + SDL_ANDROID_sWindowHeight = h; + if(SDL_ANDROID_sWindowWidth > w) { + SDL_ANDROID_sWindowWidth = w; + SDL_ANDROID_sWindowHeight = (SDL_ANDROID_sFakeWindowHeight*w)/SDL_ANDROID_sFakeWindowWidth; + } + #else SDL_ANDROID_sWindowWidth = w; SDL_ANDROID_sWindowHeight = h; + #endif __android_log_print(ANDROID_LOG_INFO, "libSDL", "Physical screen resolution is %dx%d", w, h); } } diff --git a/project/res/values/strings.xml b/project/res/values/strings.xml index b0908ee46..9c2df44d8 100644 --- a/project/res/values/strings.xml +++ b/project/res/values/strings.xml @@ -1,6 +1,6 @@ - Alien Blaster + enigma Initializing @@ -54,9 +54,10 @@ Slow Accelerometer sensitivity - Small (fast devices, less lag) + Very small (fast devices, less lag) + Small Medium - Large (if sound is choppy) + Large (older devices, if sound is choppy) Size of audio buffer diff --git a/project/src/Accelerometer.java b/project/src/Accelerometer.java index 8218593d2..b84f9dc0c 100644 --- a/project/src/Accelerometer.java +++ b/project/src/Accelerometer.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import android.app.Activity; import android.content.Context; @@ -52,16 +52,19 @@ class AccelerometerReader implements SensorEventListener { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { if( Globals.HorizontalOrientation ) - nativeAccelerometer(event.values[1], -event.values[0], event.values[2]); + // TODO: it feels better for me to use tilt as X value instead of intuitive horizontal phone orientation + // because then I can hold device comfortably, we need another user-configurable option for that + // nativeOrientation(event.values[1], -event.values[2], event.values[0]); // Comfortable setting + nativeAccelerometer(event.values[1], -event.values[0], event.values[2]); // Intuitive setting else nativeAccelerometer(event.values[0], event.values[1], event.values[2]); } else { if( Globals.HorizontalOrientation ) - nativeOrientation(event.values[1], -event.values[0], event.values[2]); + nativeOrientation(event.values[1], -event.values[2], event.values[0]); else - nativeOrientation(event.values[0], event.values[1], event.values[2]); + nativeOrientation(event.values[2], event.values[1], event.values[0]); } } diff --git a/project/src/AssetExtract.java b/project/src/AssetExtract.java index 72f535f7e..91623c035 100644 --- a/project/src/AssetExtract.java +++ b/project/src/AssetExtract.java @@ -1,6 +1,6 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change // spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import java.util.zip.*; import java.io.*; diff --git a/project/src/Audio.java b/project/src/Audio.java index a7a3bf744..aa297b09c 100644 --- a/project/src/Audio.java +++ b/project/src/Audio.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import android.app.Activity; @@ -23,6 +23,7 @@ class AudioThread { private Activity mParent; private AudioTrack mAudio; private byte[] mAudioBuffer; + private int mVirtualBufSize; public AudioThread(Activity parent) { @@ -34,7 +35,7 @@ class AudioThread { public int fillBuffer() { - mAudio.write( mAudioBuffer, 0, mAudioBuffer.length ); + mAudio.write( mAudioBuffer, 0, mVirtualBufSize ); return 1; } @@ -47,11 +48,15 @@ class AudioThread { encoding = ( encoding == 1 ) ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT; + mVirtualBufSize = bufSize; + if( AudioTrack.getMinBufferSize( rate, channels, encoding ) > bufSize ) bufSize = AudioTrack.getMinBufferSize( rate, channels, encoding ); - bufSize = (int)((float)bufSize * (((float)Globals.AudioBufferConfig * 2.5f) + 1.0f)); - + if(Globals.AudioBufferConfig != 0) { // application's choice - use minimal buffer + bufSize = (int)((float)bufSize * (((float)(Globals.AudioBufferConfig - 1) * 2.5f) + 1.0f)); + mVirtualBufSize = bufSize; + } mAudioBuffer = new byte[bufSize]; mAudio = new AudioTrack(AudioManager.STREAM_MUSIC, @@ -62,7 +67,7 @@ class AudioThread { AudioTrack.MODE_STREAM ); mAudio.play(); } - return mAudioBuffer.length; + return mVirtualBufSize; } public byte[] getBuffer() diff --git a/project/src/DataDownloader.java b/project/src/DataDownloader.java index 422b07b1d..1510b32d4 100644 --- a/project/src/DataDownloader.java +++ b/project/src/DataDownloader.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import android.app.Activity; import android.content.Context; diff --git a/project/src/GLSurfaceView_SDL.java b/project/src/GLSurfaceView_SDL.java index ecb423fcf..613821999 100644 --- a/project/src/GLSurfaceView_SDL.java +++ b/project/src/GLSurfaceView_SDL.java @@ -18,7 +18,7 @@ fixed with a hammer and rasp to work with libSDL port */ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import java.io.Writer; import java.util.ArrayList; diff --git a/project/src/Globals.java b/project/src/Globals.java index 49a30d819..1165619ed 100644 --- a/project/src/Globals.java +++ b/project/src/Globals.java @@ -1,37 +1,40 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount anywhere -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import android.app.Activity; import android.content.Context; class Globals { - public static String ApplicationName = "AlienBlaster"; + public static String ApplicationName = "enigma"; // Should be zip file - public static String DataDownloadUrl = "Data size is 2 Mb|alienblaster110_data.zip|http://sites.google.com/site/xpelyax/Home/alienblaster110_data.zip?attredirects=0%26d=1|http://sitesproxy.goapk.com/site/xpelyax/Home/alienblaster110_data.zip"; + public static String DataDownloadUrl = "Enigma Game Data (6.5 MiB)|http://sites.google.com/site/droidsdl/data/enigma-data32.zip?attredirects=0%26d=1"; // Set this value to true if you're planning to render 3D using OpenGL - it eats some GFX resources, so disabled for 2D public static boolean NeedDepthBuffer = false; // Set this value to true if you're planning to render 3D using OpenGL - it eats some GFX resources, so disabled for 2D public static boolean HorizontalOrientation = true; + + // prevent device from going to suspend mode + public static boolean InhibitSuspend = true; // Readme text to be shown on download page - public static String ReadmeText = "^You can press \"Home\" now - the data will be downloaded in background^In game press \"Menu\" for secondary fire, \"Volume Up/Down\" to cycle weapons".replace("^","\n"); + public static String ReadmeText = "^You can press \"Home\" now - the data will be downloaded in background^Have fun playing enigma!^".replace("^","\n"); - public static boolean AppUsesMouse = false; + public static boolean AppUsesMouse = true; - public static boolean AppNeedsArrowKeys = true; + public static boolean AppNeedsArrowKeys = false; - public static boolean AppUsesJoystick = false; + public static boolean AppUsesJoystick = true; public static boolean AppUsesMultitouch = false; public static boolean NonBlockingSwapBuffers = false; - public static int AppTouchscreenKeyboardKeysAmount = 4; + public static int AppTouchscreenKeyboardKeysAmount = 0; - public static int AppTouchscreenKeyboardKeysAmountAutoFire = 1; + public static int AppTouchscreenKeyboardKeysAmountAutoFire = 0; // Phone-specific config // It will download app data to /sdcard/alienblaster if set to true, @@ -50,5 +53,5 @@ class Globals { } class LoadLibrary { - public LoadLibrary() { System.loadLibrary("sdl-1.3"); System.loadLibrary("sdl_mixer"); System.loadLibrary("sdl_image"); }; + public LoadLibrary() { System.loadLibrary("sdl-1.2"); System.loadLibrary("sdl_mixer"); System.loadLibrary("sdl_image"); System.loadLibrary("sdl_ttf"); System.loadLibrary("intl"); System.loadLibrary("lua"); }; } diff --git a/project/src/MainActivity.java b/project/src/MainActivity.java index be53b5dd9..a6c7d999c 100644 --- a/project/src/MainActivity.java +++ b/project/src/MainActivity.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import android.app.Activity; import android.content.Context; @@ -21,6 +21,11 @@ public class MainActivity extends Activity { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + if(Globals.InhibitSuspend) + getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + _tv = new TextView(this); _tv.setText(R.string.init); diff --git a/project/src/Settings.java b/project/src/Settings.java index 5901ea8ae..1e662672a 100644 --- a/project/src/Settings.java +++ b/project/src/Settings.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import android.app.Activity; import android.content.Context; @@ -433,7 +433,8 @@ class Settings static void showAudioConfig(final MainActivity p) { - final CharSequence[] items = { p.getResources().getString(R.string.audiobuf_small), + final CharSequence[] items = { p.getResources().getString(R.string.audiobuf_verysmall), + p.getResources().getString(R.string.audiobuf_small), p.getResources().getString(R.string.audiobuf_medium), p.getResources().getString(R.string.audiobuf_large) }; diff --git a/project/src/Video.java b/project/src/Video.java index b70c5f7ea..29a2789bb 100644 --- a/project/src/Video.java +++ b/project/src/Video.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package de.schwardtnet.alienblaster; +package org.enigmagame.enigma; import javax.microedition.khronos.opengles.GL10;