sources of the Android port
6
hydroid/README.md
Normal file
@ -0,0 +1,6 @@
|
||||
This directory contains the sources of the Android port of HyperRogue.
|
||||
|
||||
You should copy the sound and music files from HyperRogue's main directory to
|
||||
the directories here; this is done by the script `copy.sh`.
|
||||
|
||||
Note that the version in Google Play uses the 'low quality' versions of sounds.
|
49
hydroid/app/CMakeLists.txt
Normal file
@ -0,0 +1,49 @@
|
||||
# Sets the minimum version of CMake required to build your native library.
|
||||
# This ensures that a certain set of CMake features is available to
|
||||
# your build.
|
||||
|
||||
cmake_minimum_required(VERSION 3.4.1)
|
||||
|
||||
# Specifies a library name, specifies whether the library is STATIC or
|
||||
# SHARED, and provides relative paths to the source code. You can
|
||||
# define multiple libraries by adding multiple add.library() commands,
|
||||
# and CMake builds them for you. When you build your app, Gradle
|
||||
# automatically packages shared libraries with your APK.
|
||||
|
||||
add_library( # Specifies the name of the library.
|
||||
hyper
|
||||
|
||||
# Sets the library as a shared library.
|
||||
SHARED
|
||||
|
||||
# Provides a relative path to your source file(s).
|
||||
src/main/jni/hyper.cpp )
|
||||
|
||||
# GLESv2
|
||||
find_path(GLES2_INCLUDE_DIR GLES2/gl2.h
|
||||
HINTS ${ANDROID_NDK})
|
||||
find_library(GLES2_LIBRARY libGLESv1_CM.so
|
||||
HINTS ${GLES2_INCLUDE_DIR}/../lib)
|
||||
target_include_directories(hyper PUBLIC ${GLES2_INCLUDE_DIR})
|
||||
|
||||
|
||||
find_library( # Sets the name of the path variable.
|
||||
log-lib
|
||||
|
||||
# Specifies the name of the NDK library that
|
||||
# you want CMake to locate.
|
||||
log )
|
||||
|
||||
# Specifies libraries CMake should link to your target library. You
|
||||
# can link multiple libraries, such as libraries you define in the
|
||||
# build script, prebuilt third-party libraries, or system libraries.
|
||||
|
||||
target_link_libraries( # Specifies the target library.
|
||||
hyper
|
||||
|
||||
# Links the target library to the log library
|
||||
# included in the NDK.
|
||||
${log-lib}
|
||||
# ${GLES2_LIBRARY}
|
||||
GLESv1_CM
|
||||
)
|
85
hydroid/app/build.gradle
Normal file
@ -0,0 +1,85 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 25
|
||||
buildToolsVersion "25.0.2"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.roguetemple.hyperroid"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 15
|
||||
// multiDexEnabled true
|
||||
|
||||
//javaMaxHeapSize "4g"
|
||||
|
||||
externalNativeBuild {
|
||||
|
||||
// Encapsulates your CMake build configurations.
|
||||
cmake {
|
||||
|
||||
|
||||
// Provides a relative path to your CMake build script.
|
||||
// ldLibs "-lGLESv1_CM -llog"
|
||||
|
||||
cFlags "-no-integrated-as"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
ndk {
|
||||
moduleName "hyper"
|
||||
ldLibs "GLESv1_CM -llog"
|
||||
stl "stlport_static"
|
||||
// abiFilters 'armeabi', 'x86_64'
|
||||
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'
|
||||
// abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
storeFile System.getenv("KSTOREFILE")
|
||||
storePassword System.getenv("KSTOREPWD")
|
||||
keyAlias System.getenv("KEYALIAS")
|
||||
keyPassword System.getenv("KEYPWD")
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
|
||||
debug {
|
||||
ndk {
|
||||
// abiFilters.addAll(["armeabi"])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Encapsulates your external native build configurations.
|
||||
externalNativeBuild {
|
||||
|
||||
// Encapsulates your CMake build configurations.
|
||||
cmake {
|
||||
|
||||
// Provides a relative path to your CMake build script.
|
||||
path "CMakeLists.txt"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
compileOptions {
|
||||
// targetCompatibility 1.8
|
||||
// sourceCompatibility 1.8
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
checkReleaseBuilds false
|
||||
abortOnError false
|
||||
}
|
||||
}
|
35
hydroid/app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.roguetemple.hyperroid"
|
||||
android:versionCode="9403" android:versionName="9.4c"
|
||||
android:installLocation="auto">
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> -->
|
||||
<!-- <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="9" /> -->
|
||||
<application android:label="@string/app_name"
|
||||
android:icon="@drawable/icon"
|
||||
android:allowBackup="true">
|
||||
<activity android:label="@string/app_name"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:name=".HyperRogue"
|
||||
android:launchMode="singleTask" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:label="HyperRogue Settings"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:name=".HyperSettings">
|
||||
</activity>
|
||||
|
||||
<service android:name=".ForegroundService" >
|
||||
</service>
|
||||
|
||||
<provider
|
||||
android:name=".HyperProvider"
|
||||
android:authorities="com.roguetemple.hyperroid"
|
||||
android:exported="true"/>
|
||||
</application>
|
||||
</manifest>
|
420
hydroid/app/src/main/java/com/android/texample/GLText.java
Normal file
@ -0,0 +1,420 @@
|
||||
// taken from Texample,
|
||||
// http://fractiousg.blogspot.com/201/4/rendering-text-in-opengl-on-android.html
|
||||
|
||||
// Zeno Rogue's modifications (for HyperRogue 4.2):
|
||||
// * to provide a Typeface as an argument, instead of Assets
|
||||
// * drawAlign to provide alignment in HyperRogue-compatible fashion
|
||||
// For HyperRogue 5.3:
|
||||
// * Unicode characters
|
||||
|
||||
// This is a OpenGL ES 1.0 dynamic font rendering system. It loads actual font
|
||||
// files, generates a font map (texture) from them, and allows rendering of
|
||||
// text strings.
|
||||
//
|
||||
// NOTE: the rendering portions of this class uses a sprite batcher in order
|
||||
// provide decent speed rendering. Also, rendering assumes a BOTTOM-LEFT
|
||||
// origin, and the (x,y) positions are relative to that, as well as the
|
||||
// bottom-left of the string to render.
|
||||
|
||||
package com.android.texample;
|
||||
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
|
||||
import android.content.res.AssetManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Typeface;
|
||||
import android.opengl.GLUtils;
|
||||
|
||||
public class GLText {
|
||||
|
||||
//
|
||||
StringBuffer allchars;
|
||||
|
||||
void buildAllchars() {
|
||||
allchars = new StringBuffer();
|
||||
for(char c=32; c<=126; c++)
|
||||
allchars.append(c);
|
||||
allchars.append("°´ÁÄÇÉÍÎÖÚÜßáâäçèéìíîóöøùúüýąćČčĎďĘęĚěğİıŁłńňŘřŚśŞşŠšťůŹźŻżŽžϕЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё");
|
||||
}
|
||||
|
||||
int numChars() {
|
||||
return allchars.length() + 1;
|
||||
}
|
||||
|
||||
int charIndex(char c) {
|
||||
int l = allchars.length();
|
||||
for(int i=0; i<l; i++)
|
||||
if(allchars.charAt(i) == c)
|
||||
return i;
|
||||
return allchars.length();
|
||||
}
|
||||
|
||||
//--Constants--//
|
||||
public final static char CHAR_NONE = '?'; // Character to Use for Unknown (ASCII Code)
|
||||
|
||||
public final static int FONT_SIZE_MIN = 6; // Minumum Font Size (Pixels)
|
||||
public final static int FONT_SIZE_MAX = 180; // Maximum Font Size (Pixels)
|
||||
|
||||
public final static int CHAR_BATCH_SIZE = 100; // Number of Characters to Render Per Batch
|
||||
|
||||
//--Members--//
|
||||
GL10 gl; // GL10 Instance
|
||||
AssetManager assets; // Asset Manager
|
||||
SpriteBatch batch; // Batch Renderer
|
||||
|
||||
int fontPadX, fontPadY; // Font Padding (Pixels; On Each Side, ie. Doubled on Both X+Y Axis)
|
||||
|
||||
float fontHeight; // Font Height (Actual; Pixels)
|
||||
float fontAscent; // Font Ascent (Above Baseline; Pixels)
|
||||
float fontDescent; // Font Descent (Below Baseline; Pixels)
|
||||
|
||||
int textureId; // Font Texture ID [NOTE: Public for Testing Purposes Only!]
|
||||
int textureSize; // Texture Size for Font (Square) [NOTE: Public for Testing Purposes Only!]
|
||||
TextureRegion textureRgn; // Full Texture Region
|
||||
|
||||
float charWidthMax; // Character Width (Maximum; Pixels)
|
||||
float charHeight; // Character Height (Maximum; Pixels)
|
||||
final float[] charWidths; // Width of Each Character (Actual; Pixels)
|
||||
TextureRegion[] charRgn; // Region of Each Character (Texture Coordinates)
|
||||
int cellWidth, cellHeight; // Character Cell Width/Height
|
||||
int rowCnt, colCnt; // Number of Rows/Columns
|
||||
|
||||
float scaleX, scaleY; // Font Scale (X,Y Axis)
|
||||
float spaceX; // Additional (X,Y Axis) Spacing (Unscaled)
|
||||
|
||||
|
||||
//--Constructor--//
|
||||
// D: save GL instance + asset manager, create arrays, and initialize the members
|
||||
// A: gl - OpenGL ES 10 Instance
|
||||
public GLText(GL10 gl) {
|
||||
this.gl = gl; // Save the GL10 Instance
|
||||
|
||||
buildAllchars();
|
||||
|
||||
batch = new SpriteBatch( gl, CHAR_BATCH_SIZE ); // Create Sprite Batch (with Defined Size)
|
||||
|
||||
charWidths = new float[numChars()]; // Create the Array of Character Widths
|
||||
charRgn = new TextureRegion[numChars()]; // Create the Array of Character Regions
|
||||
|
||||
// initialize remaining members
|
||||
fontPadX = 0;
|
||||
fontPadY = 0;
|
||||
|
||||
fontHeight = 0.0f;
|
||||
fontAscent = 0.0f;
|
||||
fontDescent = 0.0f;
|
||||
|
||||
textureId = -1;
|
||||
textureSize = 0;
|
||||
|
||||
charWidthMax = 0;
|
||||
charHeight = 0;
|
||||
|
||||
cellWidth = 0;
|
||||
cellHeight = 0;
|
||||
rowCnt = 0;
|
||||
colCnt = 0;
|
||||
|
||||
scaleX = 1.0f; // Default Scale = 1 (Unscaled)
|
||||
scaleY = 1.0f; // Default Scale = 1 (Unscaled)
|
||||
spaceX = 0.0f;
|
||||
}
|
||||
|
||||
//--Load Font--//
|
||||
// description
|
||||
// this will load the specified font file, create a texture for the defined
|
||||
// character range, and setup all required values used to render with it.
|
||||
// arguments:
|
||||
// file - Filename of the font (.ttf, .otf) to use. In 'Assets' folder.
|
||||
// size - Requested pixel size of font (height)
|
||||
// padX, padY - Extra padding per character (X+Y Axis); to prevent overlapping characters.
|
||||
public boolean load(Typeface tf, int size, int padX, int padY) {
|
||||
|
||||
// setup requested values
|
||||
fontPadX = padX; // Set Requested X Axis Padding
|
||||
fontPadY = padY; // Set Requested Y Axis Padding
|
||||
|
||||
// load the font and setup paint instance for drawing
|
||||
// Typeface tf = Typeface.createFromAsset( assets, file ); // Create the Typeface from Font File
|
||||
Paint paint = new Paint(); // Create Android Paint Instance
|
||||
paint.setAntiAlias( true ); // Enable Anti Alias
|
||||
paint.setTextSize( size ); // Set Text Size
|
||||
paint.setColor( 0xffffffff ); // Set ARGB (White, Opaque)
|
||||
// paint.setTypeface( tf ); // Set Typeface
|
||||
paint.setTypeface(tf);
|
||||
|
||||
// get font metrics
|
||||
Paint.FontMetrics fm = paint.getFontMetrics(); // Get Font Metrics
|
||||
fontHeight = (float)Math.ceil( Math.abs( fm.bottom ) + Math.abs( fm.top ) ); // Calculate Font Height
|
||||
fontAscent = (float)Math.ceil( Math.abs( fm.ascent ) ); // Save Font Ascent
|
||||
fontDescent = (float)Math.ceil( Math.abs( fm.descent ) ); // Save Font Descent
|
||||
|
||||
// determine the width of each character (including unknown character)
|
||||
// also determine the maximum character width
|
||||
char[] s = new char[2]; // Create Character Array
|
||||
charWidthMax = charHeight = 0; // Reset Character Width/Height Maximums
|
||||
float[] w = new float[2]; // Working Width Value
|
||||
int cnt = 0; // Array Counter
|
||||
for ( int i=0; i<allchars.length(); i++ ) { // FOR Each Character
|
||||
s[0] = allchars.charAt(i); // Set Character
|
||||
paint.getTextWidths( s, 0, 1, w ); // Get Character Bounds
|
||||
charWidths[cnt] = w[0]; // Get Width
|
||||
if ( charWidths[cnt] > charWidthMax ) // IF Width Larger Than Max Width
|
||||
charWidthMax = charWidths[cnt]; // Save New Max Width
|
||||
cnt++; // Advance Array Counter
|
||||
}
|
||||
s[0] = CHAR_NONE; // Set Unknown Character
|
||||
paint.getTextWidths( s, 0, 1, w ); // Get Character Bounds
|
||||
charWidths[cnt] = w[0]; // Get Width
|
||||
if ( charWidths[cnt] > charWidthMax ) // IF Width Larger Than Max Width
|
||||
charWidthMax = charWidths[cnt]; // Save New Max Width
|
||||
cnt++; // Advance Array Counter
|
||||
|
||||
// set character height to font height
|
||||
charHeight = fontHeight; // Set Character Height
|
||||
|
||||
// find the maximum size, validate, and setup cell sizes
|
||||
cellWidth = (int)charWidthMax + ( 2 * fontPadX ); // Set Cell Width
|
||||
cellHeight = (int)charHeight + ( 2 * fontPadY ); // Set Cell Height
|
||||
int maxSize = cellWidth > cellHeight ? cellWidth : cellHeight; // Save Max Size (Width/Height)
|
||||
if ( maxSize < FONT_SIZE_MIN || maxSize > FONT_SIZE_MAX ) // IF Maximum Size Outside Valid Bounds
|
||||
return false; // Return Error
|
||||
|
||||
// set texture size based on max font size (width or height)
|
||||
// NOTE: these values are fixed, based on the defined characters. when
|
||||
// changing start/end characters (CHAR_START/CHAR_END) this will need adjustment too!
|
||||
if ( maxSize <= 24 ) // IF Max Size is 18 or Less
|
||||
textureSize = 256; // Set 256 Texture Size
|
||||
else if ( maxSize <= 40 ) // ELSE IF Max Size is 40 or Less
|
||||
textureSize = 512; // Set 512 Texture Size
|
||||
else if ( maxSize <= 80 ) // ELSE IF Max Size is 80 or Less
|
||||
textureSize = 1024; // Set 1024 Texture Size
|
||||
else // ELSE IF Max Size is Larger Than 80 (and Less than FONT_SIZE_MAX)
|
||||
textureSize = 2048; // Set 2048 Texture Size
|
||||
|
||||
// create an empty bitmap (alpha only)
|
||||
Bitmap bitmap = Bitmap.createBitmap( textureSize, textureSize, Bitmap.Config.ALPHA_8 ); // Create Bitmap
|
||||
Canvas canvas = new Canvas( bitmap ); // Create Canvas for Rendering to Bitmap
|
||||
bitmap.eraseColor( 0x00000000 ); // Set Transparent Background (ARGB)
|
||||
|
||||
// calculate rows/columns
|
||||
// NOTE: while not required for anything, these may be useful to have :)
|
||||
colCnt = textureSize / cellWidth; // Calculate Number of Columns
|
||||
rowCnt = (int)Math.ceil( (float)numChars() / (float)colCnt ); // Calculate Number of Rows
|
||||
|
||||
// render each of the characters to the canvas (ie. build the font map)
|
||||
float x = fontPadX; // Set Start Position (X)
|
||||
float y = ( cellHeight - 1 ) - fontDescent - fontPadY; // Set Start Position (Y)
|
||||
for (int i=0; i<allchars.length(); i++) { // FOR Each Character
|
||||
s[0] = allchars.charAt(i); // Set Character to Draw
|
||||
canvas.drawText( s, 0, 1, x, y, paint ); // Draw Character
|
||||
x += cellWidth; // Move to Next Character
|
||||
if ( ( x + cellWidth - fontPadX ) > textureSize ) { // IF End of Line Reached
|
||||
x = fontPadX; // Set X for New Row
|
||||
y += cellHeight; // Move Down a Row
|
||||
}
|
||||
}
|
||||
s[0] = CHAR_NONE; // Set Character to Use for NONE
|
||||
canvas.drawText( s, 0, 1, x, y, paint ); // Draw Character
|
||||
|
||||
// generate a new texture
|
||||
int[] textureIds = new int[1]; // Array to Get Texture Id
|
||||
gl.glGenTextures( 1, textureIds, 0 ); // Generate New Texture
|
||||
textureId = textureIds[0]; // Save Texture Id
|
||||
|
||||
// setup filters for texture
|
||||
gl.glBindTexture( GL10.GL_TEXTURE_2D, textureId ); // Bind Texture
|
||||
gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST ); // Set Minification Filter
|
||||
gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR ); // Set Magnification Filter
|
||||
gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE ); // Set U Wrapping
|
||||
gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE ); // Set V Wrapping
|
||||
|
||||
// load the generated bitmap onto the texture
|
||||
GLUtils.texImage2D( GL10.GL_TEXTURE_2D, 0, bitmap, 0 ); // Load Bitmap to Texture
|
||||
gl.glBindTexture( GL10.GL_TEXTURE_2D, 0 ); // Unbind Texture
|
||||
|
||||
// release the bitmap
|
||||
bitmap.recycle(); // Release the Bitmap
|
||||
|
||||
// setup the array of character texture regions
|
||||
x = 0; // Initialize X
|
||||
y = 0; // Initialize Y
|
||||
for ( int c = 0; c < numChars(); c++ ) { // FOR Each Character (On Texture)
|
||||
charRgn[c] = new TextureRegion( textureSize, textureSize, x, y, cellWidth-1, cellHeight-1 ); // Create Region for Character
|
||||
x += cellWidth; // Move to Next Char (Cell)
|
||||
if ( x + cellWidth > textureSize ) {
|
||||
x = 0; // Reset X Position to Start
|
||||
y += cellHeight; // Move to Next Row (Cell)
|
||||
}
|
||||
}
|
||||
|
||||
// create full texture region
|
||||
textureRgn = new TextureRegion( textureSize, textureSize, 0, 0, textureSize, textureSize ); // Create Full Texture Region
|
||||
|
||||
// return success
|
||||
return true; // Return Success
|
||||
}
|
||||
|
||||
//--Begin/End Text Drawing--//
|
||||
// D: call these methods before/after (respectively all draw() calls using a text instance
|
||||
// NOTE: color is set on a per-batch basis, and fonts should be 8-bit alpha only!!!
|
||||
// A: red, green, blue - RGB values for font (default = 1.0)
|
||||
// alpha - optional alpha value for font (default = 1.0)
|
||||
// R: [none]
|
||||
public void begin() {
|
||||
begin( 1.0f, 1.0f, 1.0f, 1.0f ); // Begin with White Opaque
|
||||
}
|
||||
public void begin(float alpha) {
|
||||
begin( 1.0f, 1.0f, 1.0f, alpha ); // Begin with White (Explicit Alpha)
|
||||
}
|
||||
public void begin(float red, float green, float blue, float alpha) {
|
||||
gl.glColor4f( red, green, blue, alpha ); // Set Color+Alpha
|
||||
gl.glBindTexture( GL10.GL_TEXTURE_2D, textureId ); // Bind the Texture
|
||||
batch.beginBatch(); // Begin Batch
|
||||
}
|
||||
public void end() {
|
||||
batch.endBatch(); // End Batch
|
||||
gl.glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); // Restore Default Color/Alpha
|
||||
}
|
||||
|
||||
//--Draw Text--//
|
||||
// D: draw text at the specified x,y position
|
||||
// A: text - the string to draw
|
||||
// x, y - the x,y position to draw text at (bottom left of text; including descent)
|
||||
// R: [none]
|
||||
public void draw(String text, float x, float y) {
|
||||
float chrHeight = cellHeight * scaleY; // Calculate Scaled Character Height
|
||||
float chrWidth = cellWidth * scaleX; // Calculate Scaled Character Width
|
||||
int len = text.length(); // Get String Length
|
||||
x += ( chrWidth / 2.0f ) - ( fontPadX * scaleX ); // Adjust Start X
|
||||
y += ( chrHeight / 2.0f ) - ( fontPadY * scaleY ); // Adjust Start Y
|
||||
for ( int i = 0; i < len; i++ ) { // FOR Each Character in String
|
||||
int c = charIndex(text.charAt( i )); // Calculate Character Index (Offset by First Char in Font)
|
||||
batch.drawSprite( x, y, chrWidth, chrHeight, charRgn[c] ); // Draw the Character
|
||||
x += ( charWidths[c] + spaceX ) * scaleX; // Advance X Position by Scaled Character Width
|
||||
}
|
||||
}
|
||||
|
||||
//--Draw Text Centered--//
|
||||
// D: draw text CENTERED at the specified x,y position
|
||||
// A: text - the string to draw
|
||||
// x, y - the x,y position to draw text at (bottom left of text)
|
||||
// R: the total width of the text that was drawn
|
||||
public float drawC(String text, float x, float y) {
|
||||
float len = getLength( text ); // Get Text Length
|
||||
draw( text, x - ( len / 2.0f ), y - ( getCharHeight() / 2.0f ) ); // Draw Text Centered
|
||||
return len; // Return Length
|
||||
}
|
||||
public float drawCX(String text, float x, float y) {
|
||||
float len = getLength( text ); // Get Text Length
|
||||
draw( text, x - ( len / 2.0f ), y ); // Draw Text Centered (X-Axis Only)
|
||||
return len; // Return Length
|
||||
}
|
||||
public void drawCY(String text, float x, float y) {
|
||||
draw( text, x, y - ( getCharHeight() / 2.0f ) ); // Draw Text Centered (Y-Axis Only)
|
||||
}
|
||||
|
||||
public void drawAlign(String text, float x, float y, int align) {
|
||||
float len = getLength( text ); // Get Text Length
|
||||
draw( text, x - len * (align / 16.0f), y - ( getCharHeight() / 2.0f ) ); // Draw Text Centered (Y-Axis Only)
|
||||
}
|
||||
|
||||
//--Set Scale--//
|
||||
// D: set the scaling to use for the font
|
||||
// A: scale - uniform scale for both x and y axis scaling
|
||||
// sx, sy - separate x and y axis scaling factors
|
||||
// R: [none]
|
||||
public void setScale(float scale) {
|
||||
scaleX = scaleY = scale; // Set Uniform Scale
|
||||
}
|
||||
public void setScale(float sx, float sy) {
|
||||
scaleX = sx; // Set X Scale
|
||||
scaleY = sy; // Set Y Scale
|
||||
}
|
||||
|
||||
//--Get Scale--//
|
||||
// D: get the current scaling used for the font
|
||||
// A: [none]
|
||||
// R: the x/y scale currently used for scale
|
||||
public float getScaleX() {
|
||||
return scaleX; // Return X Scale
|
||||
}
|
||||
public float getScaleY() {
|
||||
return scaleY; // Return Y Scale
|
||||
}
|
||||
|
||||
//--Set Space--//
|
||||
// D: set the spacing (unscaled; ie. pixel size) to use for the font
|
||||
// A: space - space for x axis spacing
|
||||
// R: [none]
|
||||
public void setSpace(float space) {
|
||||
spaceX = space; // Set Space
|
||||
}
|
||||
|
||||
//--Get Space--//
|
||||
// D: get the current spacing used for the font
|
||||
// A: [none]
|
||||
// R: the x/y space currently used for scale
|
||||
public float getSpace() {
|
||||
return spaceX; // Return X Space
|
||||
}
|
||||
|
||||
//--Get Length of a String--//
|
||||
// D: return the length of the specified string if rendered using current settings
|
||||
// A: text - the string to get length for
|
||||
// R: the length of the specified string (pixels)
|
||||
public float getLength(String text) {
|
||||
float len = 0.0f; // Working Length
|
||||
int strLen = text.length(); // Get String Length (Characters)
|
||||
for ( int i = 0; i < strLen; i++ ) { // For Each Character in String (Except Last
|
||||
int c = charIndex(text.charAt( i )); // Calculate Character Index (Offset by First Char in Font)
|
||||
len += ( charWidths[c] * scaleX ); // Add Scaled Character Width to Total Length
|
||||
}
|
||||
len += ( strLen > 1 ? ( ( strLen - 1 ) * spaceX ) * scaleX : 0 ); // Add Space Length
|
||||
return len; // Return Total Length
|
||||
}
|
||||
|
||||
//--Get Width/Height of Character--//
|
||||
// D: return the scaled width/height of a character, or max character width
|
||||
// NOTE: since all characters are the same height, no character index is required!
|
||||
// NOTE: excludes spacing!!
|
||||
// A: chr - the character to get width for
|
||||
// R: the requested character size (scaled)
|
||||
public float getCharWidth(char chr) {
|
||||
return ( charWidths[charIndex(chr)] * scaleX ); // Return Scaled Character Width
|
||||
}
|
||||
public float getCharWidthMax() {
|
||||
return ( charWidthMax * scaleX ); // Return Scaled Max Character Width
|
||||
}
|
||||
public float getCharHeight() {
|
||||
return ( charHeight * scaleY ); // Return Scaled Character Height
|
||||
}
|
||||
|
||||
//--Get Font Metrics--//
|
||||
// D: return the specified (scaled) font metric
|
||||
// A: [none]
|
||||
// R: the requested font metric (scaled)
|
||||
public float getAscent() {
|
||||
return ( fontAscent * scaleY ); // Return Font Ascent
|
||||
}
|
||||
public float getDescent() {
|
||||
return ( fontDescent * scaleY ); // Return Font Descent
|
||||
}
|
||||
public float getHeight() {
|
||||
return ( fontHeight * scaleY ); // Return Font Height (Actual)
|
||||
}
|
||||
|
||||
//--Draw Font Texture--//
|
||||
// D: draw the entire font texture (NOTE: for testing purposes only)
|
||||
// A: width, height - the width and height of the area to draw to. this is used
|
||||
// to draw the texture to the top-left corner.
|
||||
public void drawTexture(int width, int height) {
|
||||
batch.beginBatch( textureId ); // Begin Batch (Bind Texture)
|
||||
batch.drawSprite( textureSize / 2, height - ( textureSize / 2 ), textureSize, textureSize, textureRgn ); // Draw
|
||||
batch.endBatch(); // End Batch
|
||||
}
|
||||
|
||||
|
||||
}
|
125
hydroid/app/src/main/java/com/android/texample/SpriteBatch.java
Normal file
@ -0,0 +1,125 @@
|
||||
// taken from Texample,
|
||||
// http://fractiousg.blogspot.com/201/4/rendering-text-in-opengl-on-android.html
|
||||
|
||||
package com.android.texample;
|
||||
|
||||
// import android.util.FloatMath;
|
||||
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
|
||||
public class SpriteBatch {
|
||||
|
||||
//--Constants--//
|
||||
final static int VERTEX_SIZE = 4; // Vertex Size (in Components) ie. (X,Y,U,V)
|
||||
final static int VERTICES_PER_SPRITE = 4; // Vertices Per Sprite
|
||||
final static int INDICES_PER_SPRITE = 6; // Indices Per Sprite
|
||||
|
||||
//--Members--//
|
||||
GL10 gl; // GL Instance
|
||||
Vertices vertices; // Vertices Instance Used for Rendering
|
||||
float[] vertexBuffer; // Vertex Buffer
|
||||
int bufferIndex; // Vertex Buffer Start Index
|
||||
int maxSprites; // Maximum Sprites Allowed in Buffer
|
||||
int numSprites; // Number of Sprites Currently in Buffer
|
||||
|
||||
//--Constructor--//
|
||||
// D: prepare the sprite batcher for specified maximum number of sprites
|
||||
// A: gl - the gl instance to use for rendering
|
||||
// maxSprites - the maximum allowed sprites per batch
|
||||
public SpriteBatch(GL10 gl, int maxSprites) {
|
||||
this.gl = gl; // Save GL Instance
|
||||
this.vertexBuffer = new float[maxSprites * VERTICES_PER_SPRITE * VERTEX_SIZE]; // Create Vertex Buffer
|
||||
this.vertices = new Vertices( gl, maxSprites * VERTICES_PER_SPRITE, maxSprites * INDICES_PER_SPRITE, false, true, false ); // Create Rendering Vertices
|
||||
this.bufferIndex = 0; // Reset Buffer Index
|
||||
this.maxSprites = maxSprites; // Save Maximum Sprites
|
||||
this.numSprites = 0; // Clear Sprite Counter
|
||||
|
||||
short[] indices = new short[maxSprites * INDICES_PER_SPRITE]; // Create Temp Index Buffer
|
||||
int len = indices.length; // Get Index Buffer Length
|
||||
short j = 0; // Counter
|
||||
for ( int i = 0; i < len; i+= INDICES_PER_SPRITE, j += VERTICES_PER_SPRITE ) { // FOR Each Index Set (Per Sprite)
|
||||
indices[i + 0] = (short)( j + 0 ); // Calculate Index 0
|
||||
indices[i + 1] = (short)( j + 1 ); // Calculate Index 1
|
||||
indices[i + 2] = (short)( j + 2 ); // Calculate Index 2
|
||||
indices[i + 3] = (short)( j + 2 ); // Calculate Index 3
|
||||
indices[i + 4] = (short)( j + 3 ); // Calculate Index 4
|
||||
indices[i + 5] = (short)( j + 0 ); // Calculate Index 5
|
||||
}
|
||||
vertices.setIndices( indices, 0, len ); // Set Index Buffer for Rendering
|
||||
}
|
||||
|
||||
//--Begin Batch--//
|
||||
// D: signal the start of a batch. set the texture and clear buffer
|
||||
// NOTE: the overloaded (non-texture) version assumes that the texture is already bound!
|
||||
// A: textureId - the ID of the texture to use for the batch
|
||||
// R: [none]
|
||||
public void beginBatch(int textureId) {
|
||||
gl.glBindTexture( GL10.GL_TEXTURE_2D, textureId ); // Bind the Texture
|
||||
numSprites = 0; // Empty Sprite Counter
|
||||
bufferIndex = 0; // Reset Buffer Index (Empty)
|
||||
}
|
||||
public void beginBatch() {
|
||||
numSprites = 0; // Empty Sprite Counter
|
||||
bufferIndex = 0; // Reset Buffer Index (Empty)
|
||||
}
|
||||
|
||||
//--End Batch--//
|
||||
// D: signal the end of a batch. render the batched sprites
|
||||
// A: [none]
|
||||
// R: [none]
|
||||
public void endBatch() {
|
||||
if ( numSprites > 0 ) { // IF Any Sprites to Render
|
||||
vertices.setVertices( vertexBuffer, 0, bufferIndex ); // Set Vertices from Buffer
|
||||
vertices.bind(); // Bind Vertices
|
||||
vertices.draw( GL10.GL_TRIANGLES, 0, numSprites * INDICES_PER_SPRITE ); // Render Batched Sprites
|
||||
vertices.unbind(); // Unbind Vertices
|
||||
}
|
||||
}
|
||||
|
||||
//--Draw Sprite to Batch--//
|
||||
// D: batch specified sprite to batch. adds vertices for sprite to vertex buffer
|
||||
// NOTE: MUST be called after beginBatch(), and before endBatch()!
|
||||
// NOTE: if the batch overflows, this will render the current batch, restart it,
|
||||
// and then batch this sprite.
|
||||
// A: x, y - the x,y position of the sprite (center)
|
||||
// width, height - the width and height of the sprite
|
||||
// region - the texture region to use for sprite
|
||||
// R: [none]
|
||||
public void drawSprite(float x, float y, float width, float height, TextureRegion region) {
|
||||
if ( numSprites == maxSprites ) { // IF Sprite Buffer is Full
|
||||
endBatch(); // End Batch
|
||||
// NOTE: leave current texture bound!!
|
||||
numSprites = 0; // Empty Sprite Counter
|
||||
bufferIndex = 0; // Reset Buffer Index (Empty)
|
||||
}
|
||||
|
||||
float halfWidth = width / 2.0f; // Calculate Half Width
|
||||
float halfHeight = height / 2.0f; // Calculate Half Height
|
||||
float x1 = x - halfWidth; // Calculate Left X
|
||||
float y1 = y - halfHeight; // Calculate Bottom Y
|
||||
float x2 = x + halfWidth; // Calculate Right X
|
||||
float y2 = y + halfHeight; // Calculate Top Y
|
||||
|
||||
vertexBuffer[bufferIndex++] = x1; // Add X for Vertex 0
|
||||
vertexBuffer[bufferIndex++] = y1; // Add Y for Vertex 0
|
||||
vertexBuffer[bufferIndex++] = region.u1; // Add U for Vertex 0
|
||||
vertexBuffer[bufferIndex++] = region.v2; // Add V for Vertex 0
|
||||
|
||||
vertexBuffer[bufferIndex++] = x2; // Add X for Vertex 1
|
||||
vertexBuffer[bufferIndex++] = y1; // Add Y for Vertex 1
|
||||
vertexBuffer[bufferIndex++] = region.u2; // Add U for Vertex 1
|
||||
vertexBuffer[bufferIndex++] = region.v2; // Add V for Vertex 1
|
||||
|
||||
vertexBuffer[bufferIndex++] = x2; // Add X for Vertex 2
|
||||
vertexBuffer[bufferIndex++] = y2; // Add Y for Vertex 2
|
||||
vertexBuffer[bufferIndex++] = region.u2; // Add U for Vertex 2
|
||||
vertexBuffer[bufferIndex++] = region.v1; // Add V for Vertex 2
|
||||
|
||||
vertexBuffer[bufferIndex++] = x1; // Add X for Vertex 3
|
||||
vertexBuffer[bufferIndex++] = y2; // Add Y for Vertex 3
|
||||
vertexBuffer[bufferIndex++] = region.u1; // Add U for Vertex 3
|
||||
vertexBuffer[bufferIndex++] = region.v1; // Add V for Vertex 3
|
||||
|
||||
numSprites++; // Increment Sprite Count
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
// taken from Texample,
|
||||
// http://fractiousg.blogspot.com/201/4/rendering-text-in-opengl-on-android.html
|
||||
|
||||
package com.android.texample;
|
||||
|
||||
class TextureRegion {
|
||||
|
||||
//--Members--//
|
||||
public float u1, v1; // Top/Left U,V Coordinates
|
||||
public float u2, v2; // Bottom/Right U,V Coordinates
|
||||
|
||||
//--Constructor--//
|
||||
// D: calculate U,V coordinates from specified texture coordinates
|
||||
// A: texWidth, texHeight - the width and height of the texture the region is for
|
||||
// x, y - the top/left (x,y) of the region on the texture (in pixels)
|
||||
// width, height - the width and height of the region on the texture (in pixels)
|
||||
public TextureRegion(float texWidth, float texHeight, float x, float y, float width, float height) {
|
||||
this.u1 = x / texWidth; // Calculate U1
|
||||
this.v1 = y / texHeight; // Calculate V1
|
||||
this.u2 = this.u1 + ( width / texWidth ); // Calculate U2
|
||||
this.v2 = this.v1 + ( height / texHeight ); // Calculate V2
|
||||
}
|
||||
}
|
264
hydroid/app/src/main/java/com/android/texample/Vertices.java
Normal file
@ -0,0 +1,264 @@
|
||||
// taken from Texample,
|
||||
// http://fractiousg.blogspot.com/201/4/rendering-text-in-opengl-on-android.html
|
||||
|
||||
package com.android.texample;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
|
||||
public class Vertices {
|
||||
|
||||
//--Constants--//
|
||||
final static int POSITION_CNT_2D = 2; // Number of Components in Vertex Position for 2D
|
||||
final static int POSITION_CNT_3D = 3; // Number of Components in Vertex Position for 3D
|
||||
final static int COLOR_CNT = 4; // Number of Components in Vertex Color
|
||||
final static int TEXCOORD_CNT = 2; // Number of Components in Vertex Texture Coords
|
||||
final static int NORMAL_CNT = 3; // Number of Components in Vertex Normal
|
||||
|
||||
final static int INDEX_SIZE = Short.SIZE / 8; // Index Byte Size (Short.SIZE = bits)
|
||||
|
||||
//--Members--//
|
||||
// NOTE: all members are constant, and initialized in constructor!
|
||||
final GL10 gl; // GL Instance
|
||||
final boolean hasColor; // Use Color in Vertices
|
||||
final boolean hasTexCoords; // Use Texture Coords in Vertices
|
||||
final boolean hasNormals; // Use Normals in Vertices
|
||||
public final int positionCnt; // Number of Position Components (2=2D, 3=3D)
|
||||
public final int vertexStride; // Vertex Stride (Element Size of a Single Vertex)
|
||||
public final int vertexSize; // Bytesize of a Single Vertex
|
||||
final IntBuffer vertices; // Vertex Buffer
|
||||
final ShortBuffer indices; // Index Buffer
|
||||
public int numVertices; // Number of Vertices in Buffer
|
||||
public int numIndices; // Number of Indices in Buffer
|
||||
final int[] tmpBuffer; // Temp Buffer for Vertex Conversion
|
||||
|
||||
//--Constructor--//
|
||||
// D: create the vertices/indices as specified (for 2d/3d)
|
||||
// A: gl - the gl instance to use
|
||||
// maxVertices - maximum vertices allowed in buffer
|
||||
// maxIndices - maximum indices allowed in buffer
|
||||
// hasColor - use color values in vertices
|
||||
// hasTexCoords - use texture coordinates in vertices
|
||||
// hasNormals - use normals in vertices
|
||||
// use3D - (false, default) use 2d positions (ie. x/y only)
|
||||
// (true) use 3d positions (ie. x/y/z)
|
||||
public Vertices(GL10 gl, int maxVertices, int maxIndices, boolean hasColor, boolean hasTexCoords, boolean hasNormals) {
|
||||
this( gl, maxVertices, maxIndices, hasColor, hasTexCoords, hasNormals, false ); // Call Overloaded Constructor
|
||||
}
|
||||
public Vertices(GL10 gl, int maxVertices, int maxIndices, boolean hasColor, boolean hasTexCoords, boolean hasNormals, boolean use3D) {
|
||||
this.gl = gl; // Save GL Instance
|
||||
this.hasColor = hasColor; // Save Color Flag
|
||||
this.hasTexCoords = hasTexCoords; // Save Texture Coords Flag
|
||||
this.hasNormals = hasNormals; // Save Normals Flag
|
||||
this.positionCnt = use3D ? POSITION_CNT_3D : POSITION_CNT_2D; // Set Position Component Count
|
||||
this.vertexStride = this.positionCnt + ( hasColor ? COLOR_CNT : 0 ) + ( hasTexCoords ? TEXCOORD_CNT : 0 ) + ( hasNormals ? NORMAL_CNT : 0 ); // Calculate Vertex Stride
|
||||
this.vertexSize = this.vertexStride * 4; // Calculate Vertex Byte Size
|
||||
|
||||
ByteBuffer buffer = ByteBuffer.allocateDirect( maxVertices * vertexSize ); // Allocate Buffer for Vertices (Max)
|
||||
buffer.order( ByteOrder.nativeOrder() ); // Set Native Byte Order
|
||||
this.vertices = buffer.asIntBuffer(); // Save Vertex Buffer
|
||||
|
||||
if ( maxIndices > 0 ) { // IF Indices Required
|
||||
buffer = ByteBuffer.allocateDirect( maxIndices * INDEX_SIZE ); // Allocate Buffer for Indices (MAX)
|
||||
buffer.order( ByteOrder.nativeOrder() ); // Set Native Byte Order
|
||||
this.indices = buffer.asShortBuffer(); // Save Index Buffer
|
||||
}
|
||||
else // ELSE Indices Not Required
|
||||
indices = null; // No Index Buffer
|
||||
|
||||
numVertices = 0; // Zero Vertices in Buffer
|
||||
numIndices = 0; // Zero Indices in Buffer
|
||||
|
||||
this.tmpBuffer = new int[maxVertices * vertexSize / 4]; // Create Temp Buffer
|
||||
}
|
||||
|
||||
//--Set Vertices--//
|
||||
// D: set the specified vertices in the vertex buffer
|
||||
// NOTE: optimized to use integer buffer!
|
||||
// A: vertices - array of vertices (floats) to set
|
||||
// offset - offset to first vertex in array
|
||||
// length - number of floats in the vertex array (total)
|
||||
// for easy setting use: vtx_cnt * (this.vertexSize / 4)
|
||||
// R: [none]
|
||||
public void setVertices(float[] vertices, int offset, int length) {
|
||||
this.vertices.clear(); // Remove Existing Vertices
|
||||
int last = offset + length; // Calculate Last Element
|
||||
for ( int i = offset, j = 0; i < last; i++, j++ ) // FOR Each Specified Vertex
|
||||
tmpBuffer[j] = Float.floatToRawIntBits( vertices[i] ); // Set Vertex as Raw Integer Bits in Buffer
|
||||
this.vertices.put( tmpBuffer, 0, length ); // Set New Vertices
|
||||
this.vertices.flip(); // Flip Vertex Buffer
|
||||
this.numVertices = length / this.vertexStride; // Save Number of Vertices
|
||||
//this.numVertices = length / ( this.vertexSize / 4 ); // Save Number of Vertices
|
||||
}
|
||||
|
||||
//--Set Indices--//
|
||||
// D: set the specified indices in the index buffer
|
||||
// A: indices - array of indices (shorts) to set
|
||||
// offset - offset to first index in array
|
||||
// length - number of indices in array (from offset)
|
||||
// R: [none]
|
||||
public void setIndices(short[] indices, int offset, int length) {
|
||||
this.indices.clear(); // Clear Existing Indices
|
||||
this.indices.put( indices, offset, length ); // Set New Indices
|
||||
this.indices.flip(); // Flip Index Buffer
|
||||
this.numIndices = length; // Save Number of Indices
|
||||
}
|
||||
|
||||
//--Bind--//
|
||||
// D: perform all required binding/state changes before rendering batches.
|
||||
// USAGE: call once before calling draw() multiple times for this buffer.
|
||||
// A: [none]
|
||||
// R: [none]
|
||||
public void bind() {
|
||||
gl.glEnableClientState( GL10.GL_VERTEX_ARRAY ); // Enable Position in Vertices
|
||||
vertices.position( 0 ); // Set Vertex Buffer to Position
|
||||
gl.glVertexPointer( positionCnt, GL10.GL_FLOAT, vertexSize, vertices ); // Set Vertex Pointer
|
||||
|
||||
if ( hasColor ) { // IF Vertices Have Color
|
||||
gl.glEnableClientState( GL10.GL_COLOR_ARRAY ); // Enable Color in Vertices
|
||||
vertices.position( positionCnt ); // Set Vertex Buffer to Color
|
||||
gl.glColorPointer( COLOR_CNT, GL10.GL_FLOAT, vertexSize, vertices ); // Set Color Pointer
|
||||
}
|
||||
|
||||
if ( hasTexCoords ) { // IF Vertices Have Texture Coords
|
||||
gl.glEnableClientState( GL10.GL_TEXTURE_COORD_ARRAY ); // Enable Texture Coords in Vertices
|
||||
vertices.position( positionCnt + ( hasColor ? COLOR_CNT : 0 ) ); // Set Vertex Buffer to Texture Coords (NOTE: position based on whether color is also specified)
|
||||
gl.glTexCoordPointer( TEXCOORD_CNT, GL10.GL_FLOAT, vertexSize, vertices ); // Set Texture Coords Pointer
|
||||
}
|
||||
|
||||
if ( hasNormals ) {
|
||||
gl.glEnableClientState( GL10.GL_NORMAL_ARRAY ); // Enable Normals in Vertices
|
||||
vertices.position( positionCnt + ( hasColor ? COLOR_CNT : 0 ) + ( hasTexCoords ? TEXCOORD_CNT : 0 ) ); // Set Vertex Buffer to Normals (NOTE: position based on whether color/texcoords is also specified)
|
||||
gl.glNormalPointer( GL10.GL_FLOAT, vertexSize, vertices ); // Set Normals Pointer
|
||||
}
|
||||
}
|
||||
|
||||
//--Draw--//
|
||||
// D: draw the currently bound vertices in the vertex/index buffers
|
||||
// USAGE: can only be called after calling bind() for this buffer.
|
||||
// A: primitiveType - the type of primitive to draw
|
||||
// offset - the offset in the vertex/index buffer to start at
|
||||
// numVertices - the number of vertices (indices) to draw
|
||||
// R: [none]
|
||||
public void draw(int primitiveType, int offset, int numVertices) {
|
||||
if ( indices != null ) { // IF Indices Exist
|
||||
indices.position( offset ); // Set Index Buffer to Specified Offset
|
||||
gl.glDrawElements( primitiveType, numVertices, GL10.GL_UNSIGNED_SHORT, indices ); // Draw Indexed
|
||||
}
|
||||
else { // ELSE No Indices Exist
|
||||
gl.glDrawArrays( primitiveType, offset, numVertices ); // Draw Direct (Array)
|
||||
}
|
||||
}
|
||||
|
||||
//--Unbind--//
|
||||
// D: clear binding states when done rendering batches.
|
||||
// USAGE: call once before calling draw() multiple times for this buffer.
|
||||
// A: [none]
|
||||
// R: [none]
|
||||
public void unbind() {
|
||||
gl.glDisableClientState( GL10.GL_VERTEX_ARRAY ); // Clear Vertex Array State
|
||||
|
||||
if ( hasColor ) // IF Vertices Have Color
|
||||
gl.glDisableClientState( GL10.GL_COLOR_ARRAY ); // Clear Color State
|
||||
|
||||
if ( hasTexCoords ) // IF Vertices Have Texture Coords
|
||||
gl.glDisableClientState( GL10.GL_TEXTURE_COORD_ARRAY ); // Clear Texture Coords State
|
||||
|
||||
if ( hasNormals ) // IF Vertices Have Normals
|
||||
gl.glDisableClientState( GL10.GL_NORMAL_ARRAY ); // Clear Normals State
|
||||
}
|
||||
|
||||
//--Draw Full--//
|
||||
// D: draw the vertices in the vertex/index buffers
|
||||
// NOTE: unoptimized version! use bind()/draw()/unbind() for batches
|
||||
// A: primitiveType - the type of primitive to draw
|
||||
// offset - the offset in the vertex/index buffer to start at
|
||||
// numVertices - the number of vertices (indices) to draw
|
||||
// R: [none]
|
||||
public void drawFull(int primitiveType, int offset, int numVertices) {
|
||||
gl.glEnableClientState( GL10.GL_VERTEX_ARRAY ); // Enable Position in Vertices
|
||||
vertices.position( 0 ); // Set Vertex Buffer to Position
|
||||
gl.glVertexPointer( positionCnt, GL10.GL_FLOAT, vertexSize, vertices ); // Set Vertex Pointer
|
||||
|
||||
if ( hasColor ) { // IF Vertices Have Color
|
||||
gl.glEnableClientState( GL10.GL_COLOR_ARRAY ); // Enable Color in Vertices
|
||||
vertices.position( positionCnt ); // Set Vertex Buffer to Color
|
||||
gl.glColorPointer( COLOR_CNT, GL10.GL_FLOAT, vertexSize, vertices ); // Set Color Pointer
|
||||
}
|
||||
|
||||
if ( hasTexCoords ) { // IF Vertices Have Texture Coords
|
||||
gl.glEnableClientState( GL10.GL_TEXTURE_COORD_ARRAY ); // Enable Texture Coords in Vertices
|
||||
vertices.position( positionCnt + ( hasColor ? COLOR_CNT : 0 ) ); // Set Vertex Buffer to Texture Coords (NOTE: position based on whether color is also specified)
|
||||
gl.glTexCoordPointer( TEXCOORD_CNT, GL10.GL_FLOAT, vertexSize, vertices ); // Set Texture Coords Pointer
|
||||
}
|
||||
|
||||
if ( indices != null ) { // IF Indices Exist
|
||||
indices.position( offset ); // Set Index Buffer to Specified Offset
|
||||
gl.glDrawElements( primitiveType, numVertices, GL10.GL_UNSIGNED_SHORT, indices ); // Draw Indexed
|
||||
}
|
||||
else { // ELSE No Indices Exist
|
||||
gl.glDrawArrays( primitiveType, offset, numVertices ); // Draw Direct (Array)
|
||||
}
|
||||
|
||||
if ( hasTexCoords ) // IF Vertices Have Texture Coords
|
||||
gl.glDisableClientState( GL10.GL_TEXTURE_COORD_ARRAY ); // Clear Texture Coords State
|
||||
|
||||
if ( hasColor ) // IF Vertices Have Color
|
||||
gl.glDisableClientState( GL10.GL_COLOR_ARRAY ); // Clear Color State
|
||||
|
||||
gl.glDisableClientState( GL10.GL_VERTEX_ARRAY ); // Clear Vertex Array State
|
||||
}
|
||||
|
||||
//--Set Vertex Elements--//
|
||||
// D: use these methods to alter the values (position, color, textcoords, normals) for vertices
|
||||
// WARNING: these do NOT validate any values, ensure that the index AND specified
|
||||
// elements EXIST before using!!
|
||||
// A: x, y, z - the x,y,z position to set in buffer
|
||||
// r, g, b, a - the r,g,b,a color to set in buffer
|
||||
// u, v - the u,v texture coords to set in buffer
|
||||
// nx, ny, nz - the x,y,z normal to set in buffer
|
||||
// R: [none]
|
||||
void setVtxPosition(int vtxIdx, float x, float y) {
|
||||
int index = vtxIdx * vertexStride; // Calculate Actual Index
|
||||
vertices.put( index + 0, Float.floatToRawIntBits( x ) ); // Set X
|
||||
vertices.put( index + 1, Float.floatToRawIntBits( y ) ); // Set Y
|
||||
}
|
||||
void setVtxPosition(int vtxIdx, float x, float y, float z) {
|
||||
int index = vtxIdx * vertexStride; // Calculate Actual Index
|
||||
vertices.put( index + 0, Float.floatToRawIntBits( x ) ); // Set X
|
||||
vertices.put( index + 1, Float.floatToRawIntBits( y ) ); // Set Y
|
||||
vertices.put( index + 2, Float.floatToRawIntBits( z ) ); // Set Z
|
||||
}
|
||||
void setVtxColor(int vtxIdx, float r, float g, float b, float a) {
|
||||
int index = ( vtxIdx * vertexStride ) + positionCnt; // Calculate Actual Index
|
||||
vertices.put( index + 0, Float.floatToRawIntBits( r ) ); // Set Red
|
||||
vertices.put( index + 1, Float.floatToRawIntBits( g ) ); // Set Green
|
||||
vertices.put( index + 2, Float.floatToRawIntBits( b ) ); // Set Blue
|
||||
vertices.put( index + 3, Float.floatToRawIntBits( a ) ); // Set Alpha
|
||||
}
|
||||
void setVtxColor(int vtxIdx, float r, float g, float b) {
|
||||
int index = ( vtxIdx * vertexStride ) + positionCnt; // Calculate Actual Index
|
||||
vertices.put( index + 0, Float.floatToRawIntBits( r ) ); // Set Red
|
||||
vertices.put( index + 1, Float.floatToRawIntBits( g ) ); // Set Green
|
||||
vertices.put( index + 2, Float.floatToRawIntBits( b ) ); // Set Blue
|
||||
}
|
||||
void setVtxColor(int vtxIdx, float a) {
|
||||
int index = ( vtxIdx * vertexStride ) + positionCnt; // Calculate Actual Index
|
||||
vertices.put( index + 3, Float.floatToRawIntBits( a ) ); // Set Alpha
|
||||
}
|
||||
void setVtxTexCoords(int vtxIdx, float u, float v) {
|
||||
int index = ( vtxIdx * vertexStride ) + positionCnt + ( hasColor ? COLOR_CNT : 0 ); // Calculate Actual Index
|
||||
vertices.put( index + 0, Float.floatToRawIntBits( u ) ); // Set U
|
||||
vertices.put( index + 1, Float.floatToRawIntBits( v ) ); // Set V
|
||||
}
|
||||
void setVtxNormal(int vtxIdx, float x, float y, float z) {
|
||||
int index = ( vtxIdx * vertexStride ) + positionCnt + ( hasColor ? COLOR_CNT : 0 ) + ( hasTexCoords ? TEXCOORD_CNT : 0 ); // Calculate Actual Index
|
||||
vertices.put( index + 0, Float.floatToRawIntBits( x ) ); // Set X
|
||||
vertices.put( index + 1, Float.floatToRawIntBits( y ) ); // Set Y
|
||||
vertices.put( index + 2, Float.floatToRawIntBits( z ) ); // Set Z
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package com.roguetemple.hyperroid;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.IBinder;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class ForegroundService extends Service {
|
||||
|
||||
public static String MAIN_ACTION = "com.roguetemple.hyperroid.action.main";
|
||||
public static String STARTFOREGROUND_ACTION = "com.roguetemple.hyperroid.action.startforeground";
|
||||
public static String STOPFOREGROUND_ACTION = "com.roguetemple.hyperroid.action.stopforeground";
|
||||
public static int FOREGROUND_SERVICE = 101;
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
if (intent.getAction().equals(STARTFOREGROUND_ACTION)) {
|
||||
|
||||
Intent notificationIntent = new Intent(this, HyperRogue.class);
|
||||
|
||||
notificationIntent.setAction(MAIN_ACTION);
|
||||
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
|
||||
notificationIntent, 0);
|
||||
|
||||
Notification notification = new NotificationCompat.Builder(this)
|
||||
.setContentTitle("HyperRogue")
|
||||
.setContentText("Game in progress.")
|
||||
.setTicker("Game in progress. Game in progress. Game in progress.")
|
||||
.setContentIntent(pendingIntent)
|
||||
.setSmallIcon(R.drawable.icon)
|
||||
.setOngoing(true)
|
||||
.build();
|
||||
|
||||
startForeground(FOREGROUND_SERVICE, notification);
|
||||
|
||||
}
|
||||
else if (intent.getAction().equals(STOPFOREGROUND_ACTION)) {
|
||||
stopForeground(true);
|
||||
stopSelf();
|
||||
}
|
||||
return START_STICKY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
// Used only in case of bound services.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,69 @@
|
||||
package com.roguetemple.hyperroid;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
|
||||
public class HyperProvider extends ContentProvider {
|
||||
public static final Uri CONTENT_URI=Uri.parse("content://com.roguetemple.hyperroid/");
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
File f=new File(getContext().getCacheDir(), "cache.jpg");
|
||||
return f.exists();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType(Uri uri) {
|
||||
return "image/jpeg";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
|
||||
File f=new File(getContext().getCacheDir(), "cache.jpg");
|
||||
return ParcelFileDescriptor.open(f,
|
||||
ParcelFileDescriptor.MODE_READ_ONLY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor query(Uri url, String[] projection, String selection,
|
||||
String[] selectionArgs, String sort) {
|
||||
throw new RuntimeException("Operation not supported");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Uri insert(Uri uri, ContentValues initialValues) {
|
||||
throw new RuntimeException("Operation not supported");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {
|
||||
throw new RuntimeException("Operation not supported");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(Uri uri, String where, String[] whereArgs) {
|
||||
throw new RuntimeException("Operation not supported");
|
||||
}
|
||||
|
||||
static public void copy(InputStream in, File dst) throws IOException {
|
||||
FileOutputStream out=new FileOutputStream(dst);
|
||||
byte[] buf=new byte[1024];
|
||||
int len;
|
||||
|
||||
while((len=in.read(buf))>0) {
|
||||
out.write(buf, 0, len);
|
||||
}
|
||||
|
||||
in.close();
|
||||
out.close();
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package com.roguetemple.hyperroid;
|
||||
|
||||
import javax.microedition.khronos.egl.EGLConfig;
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
|
||||
// import android.graphics.Paint;
|
||||
// import android.graphics.Path;
|
||||
import android.graphics.Typeface;
|
||||
import android.opengl.GLSurfaceView;
|
||||
// bimport android.widget.Toast;
|
||||
|
||||
import com.android.texample.GLText;
|
||||
|
||||
public class HyperRenderer implements GLSurfaceView.Renderer {
|
||||
|
||||
int width, height;
|
||||
|
||||
HyperRogue game;
|
||||
|
||||
private GLText glText; // A GLText Instance
|
||||
|
||||
int [] graphdata;
|
||||
int gdpos;
|
||||
int gdpop() { return graphdata[gdpos++]; }
|
||||
|
||||
public void onDrawFrame(GL10 gl) {
|
||||
if(game.forceCanvas) return;
|
||||
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
|
||||
synchronized(game) {
|
||||
game.hv.updateGame();
|
||||
game.draw();
|
||||
graphdata = game.loadMap();
|
||||
}
|
||||
|
||||
if(graphdata == null) return;
|
||||
|
||||
// Set to ModelView mode
|
||||
gl.glMatrixMode( GL10.GL_MODELVIEW ); // Activate Model View Matrix
|
||||
gl.glLoadIdentity(); // Load Identity Matrix
|
||||
|
||||
// enable texture + alpha blending
|
||||
// NOTE: this is required for text rendering! we could incorporate it into
|
||||
// the GLText class, but then it would be called multiple times (which impacts performance).
|
||||
gl.glEnable( GL10.GL_TEXTURE_2D ); // Enable Texture Mapping
|
||||
gl.glEnable( GL10.GL_BLEND ); // Enable Alpha Blend
|
||||
gl.glBlendFunc( GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA ); // Set Alpha Blend Function
|
||||
|
||||
gl.glMatrixMode( GL10.GL_PROJECTION ); // Activate Projection Matrix
|
||||
gl.glLoadIdentity(); // Load Identity Matrix
|
||||
gl.glOrthof( // Set Ortho Projection (Left,Right,Bottom,Top,Front,Back)
|
||||
0, width,
|
||||
0, height,
|
||||
1.0f, -1.0f
|
||||
);
|
||||
|
||||
gdpos = 0;
|
||||
while(gdpos < graphdata.length) {
|
||||
switch(gdpop()) {
|
||||
case 2: {
|
||||
int x = gdpop();
|
||||
int y = gdpop();
|
||||
int al = gdpop();
|
||||
int col = gdpop() + 0xFF000000;
|
||||
int size = gdpop();
|
||||
int b = gdpop();
|
||||
int n = gdpop();
|
||||
StringBuffer ss = new StringBuffer();
|
||||
for(int i=0; i<n; i++) {
|
||||
char c = (char) gdpop();
|
||||
ss.append(c);
|
||||
}
|
||||
|
||||
String s = ss.toString();
|
||||
|
||||
y = height - y;
|
||||
glText.setScale(size / 48.0f);
|
||||
|
||||
if(b > 0) {
|
||||
glText.begin(0f, 0f, 0f, 1f);
|
||||
glText.drawAlign(s, (float)(x-1), (float)y, al);
|
||||
glText.drawAlign(s, (float)(x+1), (float)y, al);
|
||||
glText.drawAlign(s, (float)x, (float)(y-1), al);
|
||||
glText.drawAlign(s, (float)x, (float)(y+1), al);
|
||||
glText.end();
|
||||
}
|
||||
|
||||
glText.begin(
|
||||
(col & 0xFF0000) / (float)0xFF0000,
|
||||
(col & 0xFF00) / (float)0xFF00,
|
||||
(col & 0xFF) / (float)0xFF,
|
||||
1.0f );
|
||||
glText.drawAlign(s, (float) x, (float) y, al);
|
||||
glText.end();
|
||||
}
|
||||
break;
|
||||
|
||||
}}
|
||||
|
||||
// disable texture + alpha
|
||||
gl.glDisable( GL10.GL_BLEND ); // Disable Alpha Blend
|
||||
gl.glDisable( GL10.GL_TEXTURE_2D ); // Disable Texture Mapping
|
||||
|
||||
}
|
||||
|
||||
public void onSurfaceChanged(GL10 gl, int width, int height) {
|
||||
gl.glViewport(0, 0, width, height);
|
||||
|
||||
// Save width and height
|
||||
this.width = width; // Save Current Width
|
||||
this.height = height; // Save Current Height
|
||||
}
|
||||
|
||||
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
|
||||
|
||||
glText = new GLText( gl );
|
||||
glText.load(Typeface.DEFAULT_BOLD, 48, 2, 2 ); // Create Font (Height: 48 Pixels / X+Y Padding 2 Pixels)
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,650 @@
|
||||
package com.roguetemple.hyperroid;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import javax.microedition.khronos.egl.EGL10;
|
||||
import javax.microedition.khronos.egl.EGLConfig;
|
||||
import javax.microedition.khronos.egl.EGLDisplay;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.AssetFileDescriptor;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Typeface;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.opengl.GLSurfaceView;
|
||||
import android.opengl.GLSurfaceView.EGLConfigChooser;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.ClipboardManager;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.FrameLayout.LayoutParams;
|
||||
import android.widget.Toast;
|
||||
import android.util.Log;
|
||||
|
||||
public class HyperRogue extends Activity {
|
||||
|
||||
private static final int RESULT_SETTINGS = 1;
|
||||
private static final boolean isGold = false;
|
||||
|
||||
final int SAVESIZE = 261;
|
||||
private static final int YENDOR_SIZE = 30;
|
||||
static final int NUMLEADER = 57;
|
||||
|
||||
int yendor[];
|
||||
int scoretable[];
|
||||
int savedgame[];
|
||||
|
||||
HyperView hv;
|
||||
GLSurfaceView glview;
|
||||
FrameLayout fl;
|
||||
|
||||
public void showHelp(String s) {
|
||||
final HyperRogue game = this;
|
||||
final String helptext = s;
|
||||
|
||||
if(Looper.myLooper() != Looper.getMainLooper()) {
|
||||
runOnUiThread(new Runnable() { public void run() { game.showHelp(helptext); }});
|
||||
return;
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
AlertDialog ad = builder.create();
|
||||
ad.setButton("OK", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
/* builder.setNeutralButton("Share", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
// (HyperRogue)(getApplicationContext())
|
||||
game.shareScore(helptext);
|
||||
dialog.dismiss();
|
||||
}
|
||||
}); */
|
||||
ad.setMessage(s);
|
||||
ad.setOwnerActivity(this);
|
||||
ad.show();
|
||||
// help = s;
|
||||
// showDialog(1);
|
||||
}
|
||||
|
||||
String sharescore;
|
||||
|
||||
public void shareScore(String s) {
|
||||
final HyperRogue game = this;
|
||||
sharescore = s;
|
||||
|
||||
String[] items = {
|
||||
getResources().getString(R.string.sharesam),
|
||||
getResources().getString(R.string.sharemsg),
|
||||
getResources().getString(R.string.copymsg)
|
||||
};
|
||||
|
||||
if(Looper.myLooper() != Looper.getMainLooper()) {
|
||||
runOnUiThread(
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
game.shareScore(sharescore);
|
||||
}
|
||||
}
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(getResources().getText(R.string.sharehow));
|
||||
builder.setItems(items, new DialogInterface.OnClickListener() {
|
||||
|
||||
public void onClick(DialogInterface dialog, int item) {
|
||||
if(item == 2) {
|
||||
ClipboardManager man = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
|
||||
if(man != null) man.setText(sharescore);
|
||||
Toast.makeText(getApplicationContext(), getResources().getText(R.string.copied), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else {
|
||||
Intent intent=new Intent(android.content.Intent.ACTION_SEND);
|
||||
intent.setType("text/plain");
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, "HyperRogue");
|
||||
intent.putExtra(Intent.EXTRA_TEXT, sharescore);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
|
||||
if(item == 0) {
|
||||
try {
|
||||
String path = getCacheDir().toString() + "/cache.jpg";
|
||||
FileOutputStream fout = new FileOutputStream(path);
|
||||
Bitmap bitmap = hv.screenshot();
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
|
||||
fout.flush();
|
||||
fout.close();
|
||||
intent.setType("image/jpeg");
|
||||
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(HyperProvider.CONTENT_URI + "hyperrogue.jpg"));
|
||||
} catch (Exception e) {
|
||||
Toast.makeText(getApplicationContext(), "Error with the image file", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
startActivity(Intent.createChooser(intent, getResources().getText(R.string.sharevia)));
|
||||
}
|
||||
}
|
||||
});
|
||||
AlertDialog ad = builder.create();
|
||||
ad.setOwnerActivity(this);
|
||||
ad.show();
|
||||
}
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
|
||||
File f = getFilesDir();
|
||||
|
||||
setFilesDir(f.getAbsolutePath());
|
||||
initGame();
|
||||
|
||||
immersive = getImmersive();
|
||||
if(immersive) requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
setContentView(R.layout.main);
|
||||
|
||||
forceCanvas = false;
|
||||
|
||||
hv = (HyperView) findViewById(R.id.ascv);
|
||||
hv.game = this;
|
||||
hv.invalidate();
|
||||
|
||||
fl = (FrameLayout) findViewById(R.id.framelayout);
|
||||
|
||||
applyUserSettings();
|
||||
|
||||
UiChangeListener();
|
||||
}
|
||||
|
||||
public native int initGame();
|
||||
public native int getland();
|
||||
public native void update(int xres, int yres, int ticks, int mousex, int mousey, boolean clicked);
|
||||
public native void draw();
|
||||
public native void drawScreenshot();
|
||||
public native int[] loadMap();
|
||||
public native boolean captureBack();
|
||||
public native boolean keepinmemory();
|
||||
public native boolean getImmersive();
|
||||
public native boolean getGL();
|
||||
public native int getMusicVolume();
|
||||
public native int getEffVolume();
|
||||
public native int getLanguage();
|
||||
public native void syncScore(int id, int val);
|
||||
public native void setFilesDir(String s);
|
||||
public native boolean getGoogleConnection();
|
||||
public native void setGoogleSignin(boolean issigned, boolean isconnecting);
|
||||
public native void handleKey(int keyCode);
|
||||
|
||||
static {
|
||||
System.loadLibrary("hyper");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
|
||||
synchronized(this) { if(captureBack()) return true; }
|
||||
}
|
||||
|
||||
int unicode = 0;
|
||||
if(keyCode == KeyEvent.KEYCODE_F1) unicode = (123001);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F2) unicode = (123002);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F3) unicode = (123003);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F4) unicode = (123004);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F5) unicode = (123005);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F6) unicode = (123006);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F7) unicode = (123007);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F10) unicode = (123010);
|
||||
else if(keyCode == KeyEvent.KEYCODE_ESCAPE) unicode = (123099);
|
||||
else if(keyCode == KeyEvent.KEYCODE_F12) unicode = (123012);
|
||||
else if(keyCode == KeyEvent.KEYCODE_HOME) unicode = (123013);
|
||||
else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT) unicode = (123014);
|
||||
else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) unicode = (123015);
|
||||
else if(keyCode == KeyEvent.KEYCODE_DPAD_UP) unicode = (123021);
|
||||
else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN) unicode = (123022);
|
||||
else if(keyCode == KeyEvent.KEYCODE_PAGE_UP) unicode = (123023);
|
||||
else if(keyCode == KeyEvent.KEYCODE_PAGE_DOWN) unicode = (123024);
|
||||
else if(keyCode == KeyEvent.KEYCODE_ENTER) unicode = (123025);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_1) unicode = (123031);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_2) unicode = (123032);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_3) unicode = (123033);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_4) unicode = (123034);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_5) unicode = (123035);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_6) unicode = (123036);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_7) unicode = (123037);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_8) unicode = (123038);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_9) unicode = (123039);
|
||||
else if(keyCode == KeyEvent.KEYCODE_NUMPAD_DOT) unicode = (123051);
|
||||
else if(keyCode == KeyEvent.KEYCODE_DEL) unicode = (123052);
|
||||
else unicode = event.getUnicodeChar();
|
||||
|
||||
if(unicode != 0) synchronized(this) { handleKey(unicode); }
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
||||
void openWebsite() {
|
||||
Runnable r = new Runnable() {
|
||||
public void run() {
|
||||
String url = "http://roguetemple.com/z/hyper.php";
|
||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||
i.setData(Uri.parse(url));
|
||||
startActivity(i);
|
||||
}
|
||||
};
|
||||
runOnUiThread(r);
|
||||
}
|
||||
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if(requestCode == RESULT_SETTINGS)
|
||||
applyUserSettings();
|
||||
}
|
||||
|
||||
public boolean forceCanvas;
|
||||
int musicvolume, effvolume;
|
||||
|
||||
// returns 'true' iff the activity is refreshed
|
||||
|
||||
public boolean setLocale(String lang) {
|
||||
Locale myLocale = new Locale(lang);
|
||||
Resources res = getResources();
|
||||
DisplayMetrics dm = res.getDisplayMetrics();
|
||||
Configuration conf = res.getConfiguration();
|
||||
String oldlang = conf.locale.getLanguage();
|
||||
conf.locale = myLocale;
|
||||
res.updateConfiguration(conf, dm);
|
||||
if(lang != oldlang) {
|
||||
// Intent refresh = new Intent(this, HyperRogue.class);
|
||||
// startActivity(refresh);
|
||||
// return true;
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean immersive;
|
||||
|
||||
void applyUserSettings() {
|
||||
|
||||
if (Looper.myLooper() != Looper.getMainLooper()) {
|
||||
runOnUiThread(new Runnable() {
|
||||
public void run() {
|
||||
applyUserSettings();
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
int lang = getLanguage();
|
||||
boolean usegl = getGL();
|
||||
musicvolume = getMusicVolume();
|
||||
changevol = true;
|
||||
effvolume = getEffVolume();
|
||||
immersive = getImmersive();
|
||||
|
||||
boolean reset = false;
|
||||
if(lang == 0) reset = setLocale("en");
|
||||
if(lang == 1) reset = setLocale("pl");
|
||||
if(lang == 2) reset = setLocale("tr");
|
||||
if(lang == 3) reset = setLocale("cz");
|
||||
if(lang == 4) reset = setLocale("ru");
|
||||
|
||||
if(reset) return; // no point in doing the following twice
|
||||
|
||||
if(glview != null && !usegl) {
|
||||
fl.removeView(glview);
|
||||
glview = null;
|
||||
hv.invalidate();
|
||||
}
|
||||
|
||||
if(usegl && glview == null) {
|
||||
glview = new GLSurfaceView(this);
|
||||
HyperRenderer hr =new HyperRenderer();
|
||||
hr.game = this;
|
||||
glview.setEGLConfigChooser(new HRConfigChooser());
|
||||
glview.setRenderer(hr);
|
||||
glview.setZOrderMediaOverlay(true);
|
||||
LayoutParams lp =new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
|
||||
fl.addView(glview, lp);
|
||||
}
|
||||
|
||||
if(running) connectGames();
|
||||
}
|
||||
|
||||
MediaPlayer backgroundmusic;
|
||||
boolean changevol = false;
|
||||
int lastland;
|
||||
int curpos[];
|
||||
float curvol;
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
|
||||
boolean keep;
|
||||
|
||||
synchronized (this) {
|
||||
// recordscore();
|
||||
keep = keepinmemory();
|
||||
}
|
||||
|
||||
if (keep) {
|
||||
Intent startIntent = new Intent(HyperRogue.this, ForegroundService.class);
|
||||
startIntent.setAction(ForegroundService.STARTFOREGROUND_ACTION);
|
||||
startService(startIntent);
|
||||
} else {
|
||||
Intent stopIntent = new Intent(HyperRogue.this, ForegroundService.class);
|
||||
stopIntent.setAction(ForegroundService.STOPFOREGROUND_ACTION);
|
||||
startService(stopIntent);
|
||||
}
|
||||
|
||||
if (backgroundmusic != null) backgroundmusic.stop();
|
||||
}
|
||||
|
||||
// remove for the lite version START
|
||||
|
||||
public void UiChangeListener()
|
||||
{
|
||||
int currentApiVersion = android.os.Build.VERSION.SDK_INT;
|
||||
if(currentApiVersion >= 19) {
|
||||
final View decorView = getWindow().getDecorView();
|
||||
final int flags =
|
||||
immersive ?
|
||||
View.SYSTEM_UI_FLAG_FULLSCREEN |
|
||||
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
|
||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION :
|
||||
0;
|
||||
|
||||
decorView.setSystemUiVisibility(flags);
|
||||
|
||||
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
|
||||
@Override
|
||||
public void onSystemUiVisibilityChange(int visibility) {
|
||||
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
|
||||
decorView.setSystemUiVisibility(flags);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if(backgroundmusic != null) {
|
||||
try {backgroundmusic.prepare(); } catch(Exception e) {}
|
||||
backgroundmusic.start();
|
||||
}
|
||||
UiChangeListener();
|
||||
}
|
||||
|
||||
long lastclock;
|
||||
|
||||
MediaPlayer sounds[];
|
||||
private static final int CHANNELS = 4;
|
||||
|
||||
protected void playSound(String s, int vol) {
|
||||
if(effvolume == 0) return;
|
||||
if (Looper.myLooper() != Looper.getMainLooper()) {
|
||||
final String final_s = s;
|
||||
final int final_vol = vol;
|
||||
runOnUiThread(new Runnable() {
|
||||
public void run() {
|
||||
playSound(final_s, final_vol);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if(sounds == null) sounds = new MediaPlayer[CHANNELS];
|
||||
AssetFileDescriptor afd = getAssets().openFd("sounds/" + s + ".ogg");
|
||||
|
||||
int i;
|
||||
for(i=0; i<CHANNELS; i++)
|
||||
if(sounds[i] == null || !sounds[i].isPlaying())
|
||||
break;
|
||||
|
||||
if(i == CHANNELS) return;
|
||||
if(sounds[i] == null) {
|
||||
sounds[i] = new MediaPlayer();
|
||||
sounds[i].setOnErrorListener(new MediaPlayer.OnErrorListener()
|
||||
{
|
||||
@Override
|
||||
public boolean onError(MediaPlayer mp, int what, int extra)
|
||||
{
|
||||
/* Toast.makeText(getApplicationContext(), String.format("Error(%s%s)", what, extra),
|
||||
Toast.LENGTH_SHORT).show(); */
|
||||
return true;
|
||||
}
|
||||
});
|
||||
/* sounds[i].setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
||||
public void onCompletion(MediaPlayer mp) {
|
||||
mp.release();
|
||||
|
||||
};
|
||||
}); */
|
||||
} else sounds[i].reset();
|
||||
sounds[i].setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
|
||||
afd.close();
|
||||
sounds[i].prepare();
|
||||
sounds[i].setVolume((float)(vol * effvolume / 12800.), (float)(vol * effvolume / 12800.));
|
||||
sounds[i].start();
|
||||
/* Toast.makeText(getApplicationContext(), "playing " + s
|
||||
+ " on "+Integer.toString(i)+ " vol "+Integer.toString(vol), Toast.LENGTH_SHORT).show(); */
|
||||
|
||||
}
|
||||
catch(IOException ex) {
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkMusic() {
|
||||
if(musicvolume == 0) {
|
||||
if(backgroundmusic != null) {
|
||||
backgroundmusic.stop();
|
||||
backgroundmusic.release();
|
||||
backgroundmusic = null;
|
||||
curvol = 0; changevol = true;
|
||||
lastland = -1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
int curland = getland();
|
||||
|
||||
long curclock = System.currentTimeMillis();
|
||||
float delta = (curclock - lastclock) / 1000.0f;
|
||||
lastclock = curclock;
|
||||
|
||||
if(lastland == curland) {
|
||||
if(curvol < 1 || changevol) {
|
||||
curvol += delta;
|
||||
if(curvol > 1) curvol = 1;
|
||||
if(backgroundmusic != null)
|
||||
backgroundmusic.setVolume(curvol * musicvolume / 128, curvol * musicvolume / 128);
|
||||
}
|
||||
}
|
||||
else if(backgroundmusic == null) {
|
||||
int id = R.raw.crossroads;
|
||||
|
||||
if(curland == 2) id = R.raw.crossroads; // Crossroads
|
||||
if(curland == 3) id = R.raw.desert; // Desert
|
||||
if(curland == 4) id = R.raw.icyland; // Icy Land
|
||||
if(curland == 5) id = R.raw.caves; // Living Cave
|
||||
if(curland == 6) id = R.raw.jungle; // Jungle
|
||||
if(curland == 7) id = R.raw.laboratory; // Alchemist Lab
|
||||
if(curland == 8) id = R.raw.mirror; // Mirror Land
|
||||
if(curland == 9) id = R.raw.graveyard; // Graveyard
|
||||
if(curland == 10) id = R.raw.rlyeh; // R'Lyeh
|
||||
if(curland == 11) id = R.raw.hell; // Hell
|
||||
if(curland == 12) id = R.raw.icyland; // Cocytus
|
||||
if(curland == 13) id = R.raw.motion; // Land of Eternal Motion
|
||||
if(curland == 14) id = R.raw.jungle; // Dry Forest
|
||||
if(curland == 15) id = R.raw.caves; // Emerald Mine
|
||||
if(curland == 16) id = R.raw.laboratory; // Vineyard
|
||||
if(curland == 17) id = R.raw.graveyard; // Dead Cave
|
||||
if(curland == 18) id = R.raw.motion; // Hive
|
||||
if(curland == 19) id = R.raw.mirror; // Land of Power
|
||||
if(curland == 20) id = R.raw.hell; // Camelot
|
||||
if(curland == 21) id = R.raw.rlyeh; // Temple of Cthulhu
|
||||
if(curland == 22) id = R.raw.crossroads; // Crossroads II
|
||||
if(curland == 23) id = R.raw.crossroads; // Caribbean
|
||||
if(curland == 24) id = R.raw.desert; // Red Rock Valley
|
||||
if(curland == 25) id = R.raw.hell; // Minefield
|
||||
if(curland == 26) id = R.raw.caves; // Ocean
|
||||
if(curland == 27) id = R.raw.rlyeh; // Whirlpool
|
||||
if(curland == 28) id = R.raw.crossroads; // Palace
|
||||
if(curland == 29) id = R.raw.caves; // Living Fjord
|
||||
if(curland == 30) id = R.raw.hell; // Ivory Tower
|
||||
if(curland == 31) id = R.raw.motion; // Zebra
|
||||
if(curland == 32) id = R.raw.hell; // Plane of Fire
|
||||
if(curland == 33) id = R.raw.motion; // Plane of Air
|
||||
if(curland == 34) id = R.raw.caves; // Plane of Earth
|
||||
if(curland == 35) id = R.raw.crossroads; // Plane of Water
|
||||
if(curland == 36) id = R.raw.crossroads; // Crossroads III
|
||||
if(curland == 39) id = R.raw.laboratory; // Canvas
|
||||
if(curland == 41) id = R.raw.caves; // Wild West
|
||||
if(curland == 42) id = R.raw.laboratory; // Land of Storms
|
||||
if(curland == 43) id = R.raw.jungle; // Overgrown Woods
|
||||
if(curland == 44) id = R.raw.jungle; // Clearing
|
||||
if(curland == 45) id = R.raw.graveyard; // Haunted Woods
|
||||
if(curland == 48) id = R.raw.laboratory; // Windy Plains
|
||||
if(curland == 49) id = R.raw.hell; // Rose Garden
|
||||
if(curland == 50) id = R.raw.caves; // Warped Coast
|
||||
if(curland == 52) id = R.raw.crossroads; // Crossroads IV
|
||||
if(curland == 53) id = R.raw.laboratory; // Yendorian Forest
|
||||
if(curland == 54) id = R.raw.crossroads; // Gal<EFBFBD>pagos
|
||||
if(curland == 55) id = R.raw.caves; // Dragon Chasms
|
||||
if(curland == 56) id = R.raw.rlyeh; // Kraken Depths
|
||||
if(curland == 57) id = R.raw.graveyard; // Burial Grounds
|
||||
if(curland == 58) id = R.raw.desert; // Trollheim
|
||||
if(curland == 56) id = R.raw.rlyeh; // Kraken Depths
|
||||
if(curland == 57) id = R.raw.graveyard; // Burial Grounds
|
||||
if(curland == 58) id = R.raw.desert; // Trollheim
|
||||
if(curland == 59) id = R.raw.graveyard; // Halloween
|
||||
if(curland == 60) id = R.raw.desert; // Dungeon
|
||||
if(curland == 61) id = R.raw.rlyeh; // Lost Mountain
|
||||
if(curland == 62) id = R.raw.mirror; // Reptiles
|
||||
if(curland == 63) id = R.raw.rlyeh; // Prairie
|
||||
if(curland == 64) id = R.raw.mirror; // Bull Dash
|
||||
if(curland == 65) id = R.raw.mirror; // Crossroads V
|
||||
if(curland == 66) id = R.raw.laboratory; // CA land
|
||||
|
||||
if(id > 0) backgroundmusic = MediaPlayer.create(this, id);
|
||||
if(backgroundmusic != null) {
|
||||
backgroundmusic.setLooping(true);
|
||||
curvol = 0;
|
||||
backgroundmusic.setVolume(curvol, curvol);
|
||||
if(curpos != null)
|
||||
backgroundmusic.seekTo(curpos[curland]);
|
||||
backgroundmusic.start();
|
||||
lastland = curland;
|
||||
}
|
||||
else curland = 0;
|
||||
}
|
||||
else if(curvol <= delta) {
|
||||
if(curpos == null) curpos = new int[128];
|
||||
curpos[lastland] = backgroundmusic.getCurrentPosition();
|
||||
if(backgroundmusic != null) backgroundmusic.stop();
|
||||
backgroundmusic = null;
|
||||
}
|
||||
else {
|
||||
curvol -= delta;
|
||||
backgroundmusic.setVolume(curvol * musicvolume / 128, curvol * musicvolume / 128);
|
||||
}
|
||||
}
|
||||
|
||||
public int getTextWidth(String s, int size) {
|
||||
Rect bounds = new Rect();
|
||||
Paint pon = new Paint();
|
||||
pon.setAntiAlias(true);
|
||||
pon.setTextSize(size);
|
||||
pon.setTextAlign(Paint.Align.LEFT);
|
||||
pon.setTypeface(Typeface.DEFAULT_BOLD);
|
||||
pon.getTextBounds(s,0,s.length(),bounds);
|
||||
return bounds.width();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class HRConfigChooser implements EGLConfigChooser {
|
||||
|
||||
private int getValue(EGL10 egl, EGLDisplay display, EGLConfig config, int attr) {
|
||||
int[] mValue = new int[1];
|
||||
if (egl.eglGetConfigAttrib(display, config, attr, mValue))
|
||||
return mValue[0];
|
||||
return 0;
|
||||
}
|
||||
|
||||
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
|
||||
|
||||
int[] num_config = new int[1];
|
||||
|
||||
int[] basic = new int[]{
|
||||
EGL10.EGL_RED_SIZE, 5,
|
||||
EGL10.EGL_GREEN_SIZE, 6,
|
||||
EGL10.EGL_BLUE_SIZE, 5,
|
||||
EGL10.EGL_STENCIL_SIZE, 1,
|
||||
EGL10.EGL_NONE
|
||||
};
|
||||
|
||||
egl.eglChooseConfig(display, basic, null, 0, num_config);
|
||||
if (num_config[0] <= 0) {
|
||||
basic = new int[]{EGL10.EGL_NONE};
|
||||
egl.eglChooseConfig(display, basic, null, 0, num_config);
|
||||
}
|
||||
|
||||
if (num_config[0] <= 0) throw new IllegalArgumentException("no config available");
|
||||
|
||||
EGLConfig[] configs = new EGLConfig[num_config[0]];
|
||||
egl.eglChooseConfig(display, basic, configs, num_config[0], num_config);
|
||||
|
||||
EGLConfig best = null;
|
||||
int bestscore = 0;
|
||||
|
||||
for (EGLConfig config : configs) {
|
||||
int d = getValue(egl, display, config, EGL10.EGL_DEPTH_SIZE);
|
||||
int s = getValue(egl, display, config, EGL10.EGL_STENCIL_SIZE);
|
||||
int r = getValue(egl, display, config, EGL10.EGL_RED_SIZE);
|
||||
int g = getValue(egl, display, config, EGL10.EGL_GREEN_SIZE);
|
||||
int b = getValue(egl, display, config, EGL10.EGL_BLUE_SIZE);
|
||||
int a = getValue(egl, display, config, EGL10.EGL_ALPHA_SIZE);
|
||||
int score = 10000;
|
||||
if (s == 0) score -= 1000;
|
||||
score -= s;
|
||||
score -= d;
|
||||
score -= a;
|
||||
int all = r + g + b;
|
||||
if (all < 24) score -= 10 * (24 - all);
|
||||
score -= 10 * (all - 24);
|
||||
if (score > bestscore) {
|
||||
bestscore = score;
|
||||
best = config;
|
||||
}
|
||||
}
|
||||
|
||||
return best;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.roguetemple.hyperroid;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
|
||||
public class HyperSettings extends PreferenceActivity {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
}
|
||||
}
|
@ -0,0 +1,247 @@
|
||||
package com.roguetemple.hyperroid;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffXfermode;
|
||||
import android.graphics.Typeface;
|
||||
import android.os.PowerManager;
|
||||
import android.os.SystemClock;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
public class HyperView extends View {
|
||||
|
||||
HyperRogue game;
|
||||
|
||||
public HyperView(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
initView();
|
||||
}
|
||||
|
||||
public HyperView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initView();
|
||||
}
|
||||
|
||||
int width, height, mousex, mousey;
|
||||
boolean clicked;
|
||||
int clickcnt = 0;
|
||||
Canvas dc;
|
||||
|
||||
int[] graphdata;
|
||||
int gdpos;
|
||||
int gdpop() { return graphdata[gdpos++]; }
|
||||
|
||||
int lasttick, curtick;
|
||||
|
||||
int realpha(int col) {
|
||||
return ((col >> 8) & 0xFFFFFF) + ((col & 0xFF) << 24);
|
||||
}
|
||||
|
||||
public void drawScreen(PorterDuff.Mode mode) {
|
||||
Paint pon = new Paint();
|
||||
pon.setXfermode(new PorterDuffXfermode(mode));
|
||||
|
||||
pon.setColor(0xC0C0C0C0);
|
||||
pon.setAntiAlias(true);
|
||||
|
||||
pon.setTextSize(8);
|
||||
pon.setTextAlign(Paint.Align.RIGHT);
|
||||
pon.setTypeface(Typeface.DEFAULT_BOLD);
|
||||
|
||||
// String s = "D " + Integer.toString(graphdata.length) + " T " + Integer.toString(curtick-lasttick);
|
||||
// dc.drawText(s, width*11/12, height*1/12, pon);
|
||||
|
||||
gdpos = 0;
|
||||
while(gdpos < graphdata.length) {
|
||||
switch(gdpop()) {
|
||||
case 2: {
|
||||
int x = gdpop();
|
||||
int y = gdpop();
|
||||
int al = gdpop();
|
||||
int col = gdpop() + 0xFF000000;
|
||||
int size = gdpop();
|
||||
y = y + size/2;
|
||||
int b = gdpop();
|
||||
int n = gdpop();
|
||||
StringBuffer ss = new StringBuffer();
|
||||
for(int i=0; i<n; i++) {
|
||||
char c = (char)gdpop();
|
||||
ss.append(c);
|
||||
}
|
||||
pon.setStyle(Paint.Style.FILL);
|
||||
pon.setColor(col);
|
||||
pon.setTextSize(size);
|
||||
pon.setTextAlign(
|
||||
al == 0 ? Paint.Align.LEFT :
|
||||
al == 8 ? Paint.Align.CENTER :
|
||||
Paint.Align.RIGHT);
|
||||
if(b>0) {
|
||||
pon.setColor(0xFF000000);
|
||||
dc.drawText(ss.toString(), x-b, y, pon);
|
||||
dc.drawText(ss.toString(), x+b, y, pon);
|
||||
dc.drawText(ss.toString(), x, y-b, pon);
|
||||
dc.drawText(ss.toString(), x, y+b, pon);
|
||||
}
|
||||
pon.setColor(col);
|
||||
dc.drawText(ss.toString(), x, y, pon);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: {
|
||||
int col = gdpop();
|
||||
int otl = gdpop();
|
||||
int num = gdpop();
|
||||
|
||||
pon.setColor(realpha(col));
|
||||
|
||||
/* for(int i=0; i<num; i++) {
|
||||
int x2 = gdpop();
|
||||
int y2 = gdpop();
|
||||
dc.drawText("x", x2, y2, pon);
|
||||
} */
|
||||
|
||||
Path p = new Path();
|
||||
|
||||
int x = gdpop();
|
||||
int y = gdpop();
|
||||
|
||||
p.moveTo(x, y);
|
||||
|
||||
for(int i=1; i<num; i++) {
|
||||
int x2 = gdpop();
|
||||
int y2 = gdpop();
|
||||
p.lineTo(x2, y2);
|
||||
}
|
||||
p.lineTo(x, y);
|
||||
|
||||
pon.setStyle(Paint.Style.FILL);
|
||||
dc.drawPath(p, pon);
|
||||
|
||||
pon.setStyle(Paint.Style.STROKE);
|
||||
pon.setColor(realpha(otl));
|
||||
dc.drawPath(p, pon);
|
||||
break;
|
||||
}
|
||||
|
||||
case 3: {
|
||||
int col = gdpop();
|
||||
int num = gdpop();
|
||||
|
||||
pon.setColor(realpha(col));
|
||||
|
||||
int x = gdpop();
|
||||
int y = gdpop();
|
||||
|
||||
for(int i=1; i<num; i++) {
|
||||
int x2 = gdpop();
|
||||
int y2 = gdpop();
|
||||
dc.drawLine(x, y, x2, y2, pon);
|
||||
x = x2; y = y2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 4: {
|
||||
int col = gdpop();
|
||||
int x = gdpop();
|
||||
int y = gdpop();
|
||||
int rad = gdpop();
|
||||
|
||||
col += 0xFF000000;
|
||||
pon.setColor(col);
|
||||
pon.setStyle(Paint.Style.STROKE);
|
||||
|
||||
dc.drawCircle(x, y, rad, pon);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}}
|
||||
}
|
||||
|
||||
public void updateGame() {
|
||||
lasttick = curtick;
|
||||
curtick = (int)SystemClock.elapsedRealtime();
|
||||
|
||||
if(clickcnt > 0) clickcnt--;
|
||||
|
||||
game.update(width, height, curtick, mousex, mousey, clicked | ((clickcnt & 1) > 0));
|
||||
|
||||
final HyperRogue fgame = game;
|
||||
game.runOnUiThread(new Runnable() { public void run() { fgame.checkMusic(); }});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDraw(final Canvas canvas) {
|
||||
|
||||
super.onDraw(canvas);
|
||||
|
||||
PowerManager pm = (PowerManager) game.getSystemService(Context.POWER_SERVICE);
|
||||
boolean isScreenOn = pm.isScreenOn();
|
||||
if(!isScreenOn) return;
|
||||
|
||||
dc = canvas;
|
||||
width = getWidth();
|
||||
height = getHeight();
|
||||
|
||||
if(game != null && game.glview == null) {
|
||||
updateGame();
|
||||
game.draw();
|
||||
graphdata = game.loadMap();
|
||||
drawScreen(PorterDuff.Mode.SRC_ATOP);
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public Bitmap screenshot() {
|
||||
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
Canvas old = dc;
|
||||
dc = new Canvas(b);
|
||||
synchronized(game) {
|
||||
game.forceCanvas = true;
|
||||
game.drawScreenshot();
|
||||
graphdata = game.loadMap();
|
||||
game.forceCanvas = false;
|
||||
}
|
||||
dc.setDensity(old.getDensity());
|
||||
drawScreen(PorterDuff.Mode.SRC_OVER);
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent (MotionEvent event) {
|
||||
if(event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
mousex = (int) event.getX();
|
||||
mousey = (int) event.getY();
|
||||
clickcnt += 2;
|
||||
clicked = true;
|
||||
}
|
||||
|
||||
if(event.getAction() == MotionEvent.ACTION_UP) {
|
||||
clicked = false;
|
||||
}
|
||||
|
||||
if(event.getAction() == MotionEvent.ACTION_MOVE) {
|
||||
mousex = (int) event.getX();
|
||||
mousey = (int) event.getY();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void initView() {
|
||||
setFocusable(true);
|
||||
setFocusableInTouchMode(true);
|
||||
mousex = 0; mousey = 0; clicked = false;
|
||||
}
|
||||
|
||||
}
|
304
hydroid/app/src/main/jni/hyper.cpp
Normal file
@ -0,0 +1,304 @@
|
||||
// Hyperbolic Rogue for Android
|
||||
// Copyright (C) 2012-2016 Zeno Rogue
|
||||
// number of times compiled since Oct 30: LOTS+5
|
||||
// Wed Mar 8, 23:16:40
|
||||
// Wed Mar 9, 01:14:57
|
||||
// Web Mar 9, ~12:30
|
||||
// Web Mar 10, 16:43:30
|
||||
// it took 20 minutes to compile. Now it takes just 5 minutes for an unknown reason!
|
||||
|
||||
// This program 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 2
|
||||
// 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, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#define MOBILE
|
||||
#define ISMOBILE 1
|
||||
#define ISANDROID 1
|
||||
#define ISIOS 0
|
||||
#define GL_ES
|
||||
|
||||
#ifndef ANDROID
|
||||
#define ANDROID
|
||||
#endif
|
||||
|
||||
#define MOBPAR_FORMAL JNIEnv *env, jobject thiz
|
||||
#define MOBPAR_ACTUAL env, thiz
|
||||
|
||||
void gdpush(int t);
|
||||
|
||||
#include <jni.h>
|
||||
void shareScore(MOBPAR_FORMAL);
|
||||
|
||||
const char *scorefile, *conffile;
|
||||
|
||||
bool settingsChanged = false;
|
||||
|
||||
#include "/home/eryx/proj/rogue/hyper/init.cpp"
|
||||
|
||||
JNIEnv *whatever;
|
||||
|
||||
// #define delref env->DeleteLocalRef(_thiz)
|
||||
|
||||
int semaphore = 0;
|
||||
bool crash = false;
|
||||
|
||||
|
||||
#include <android/log.h>
|
||||
|
||||
#define LOCK(s, x) \
|
||||
semaphore++; const char *xs = x; if(semaphore > 1) { crash = true; \
|
||||
__android_log_print(ANDROID_LOG_WARN, "HyperRogue", "concurrency crash in %s\n", x); semaphore--; fflush(stdout); return s; }
|
||||
#define UNLOCK semaphore--; if(crash) { crash = false; __android_log_print(ANDROID_LOG_WARN, "HyperRogue", "concurrency crashed with %s\n", xs); fflush(stdout); }
|
||||
|
||||
|
||||
extern "C" jintArray
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_loadMap
|
||||
( MOBPAR_FORMAL)
|
||||
{
|
||||
// if(debfile) fprintf(debfile, "loadmap started.\n"), fflush(debfile);
|
||||
LOCK(NULL, "loadMap")
|
||||
|
||||
jintArray result;
|
||||
result = env->NewIntArray(size(graphdata));
|
||||
if(result == NULL) return NULL;
|
||||
|
||||
env->SetIntArrayRegion(result, 0, size(graphdata), &*graphdata.begin());
|
||||
// delref;
|
||||
// env->DeleteLocalRef(result);
|
||||
// if(debfile) fprintf(debfile, "loadmap finished.\n"), fflush(debfile);
|
||||
|
||||
UNLOCK
|
||||
return result;
|
||||
}
|
||||
|
||||
extern "C" bool
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_captureBack
|
||||
( MOBPAR_FORMAL) {
|
||||
if(cmode == emNormal || cmode == emQuit)
|
||||
return false;
|
||||
cmode = emNormal; return true;
|
||||
}
|
||||
|
||||
void uploadAll(MOBPAR_FORMAL);
|
||||
|
||||
extern "C" bool
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_keepinmemory
|
||||
( MOBPAR_FORMAL) {
|
||||
saveStats(true);
|
||||
uploadAll(MOBPAR_ACTUAL);
|
||||
if(!canmove) return false;
|
||||
if(items[itOrbSafety]) return false;
|
||||
return gold() >= 10 || tkills() >= 50;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_getland
|
||||
( MOBPAR_FORMAL)
|
||||
{
|
||||
return getCurrentLandForMusic();
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_getLanguage
|
||||
( MOBPAR_FORMAL)
|
||||
{
|
||||
return vid.language;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_getMusicVolume
|
||||
( MOBPAR_FORMAL)
|
||||
{
|
||||
return musicvolume;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_getEffVolume
|
||||
( MOBPAR_FORMAL)
|
||||
{
|
||||
return effvolume;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_getImmersive(MOBPAR_FORMAL)
|
||||
{
|
||||
return vid.full;
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_getGL(MOBPAR_FORMAL)
|
||||
{
|
||||
return vid.usingGL;
|
||||
}
|
||||
|
||||
string sscorefile, sconffile, scachefile;
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
extern "C" void
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_setFilesDir(MOBPAR_FORMAL, jstring dir)
|
||||
{
|
||||
const char *nativeString = env->GetStringUTFChars(dir, 0);
|
||||
sscorefile = nativeString; sscorefile += "/hyperrogue.log";
|
||||
sconffile = nativeString; sconffile += "/hyperrogue.ini";
|
||||
scachefile = nativeString; scachefile += "/scorecache.txt";
|
||||
scorefile = sscorefile.c_str();
|
||||
conffile = sconffile.c_str();
|
||||
chmod(scorefile, 0777);
|
||||
chmod(conffile, 0777);
|
||||
chmod(nativeString, 0777);
|
||||
env->ReleaseStringUTFChars(dir, nativeString);
|
||||
}
|
||||
|
||||
bool gamerunning;
|
||||
|
||||
extern "C"
|
||||
jint
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_initGame(MOBPAR_FORMAL) {
|
||||
|
||||
// debfile = fopen("/sdcard/hyperdebug.txt", "wt");
|
||||
// if(!debfile) debfile = fopen("/storage/simulated/0/hyperdebug.txt", "wt");
|
||||
|
||||
// if(debfile) fprintf(debfile, "initgame started.\n"), fflush(debfile);
|
||||
|
||||
|
||||
__android_log_print(ANDROID_LOG_VERBOSE, "HyperRogue", "Initializing game, gamerunning = %d\n", gamerunning);
|
||||
fflush(stdout);
|
||||
if(gamerunning) return 1;
|
||||
gamerunning = true;
|
||||
initAll();
|
||||
uploadAll(MOBPAR_ACTUAL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
JNIEnv *tw_env; jobject tw_thiz;
|
||||
|
||||
int textwidth(int siz, const string &str) {
|
||||
jclass cls = tw_env->GetObjectClass(tw_thiz);
|
||||
jmethodID mid = tw_env->GetMethodID(cls, "getTextWidth", "(Ljava/lang/String;I)I");
|
||||
jobject jstr = tw_env->NewStringUTF(str.c_str());
|
||||
int res = tw_env->CallIntMethod(tw_thiz, mid, jstr, siz);
|
||||
tw_env->DeleteLocalRef(jstr);
|
||||
tw_env->DeleteLocalRef(cls);
|
||||
return res;
|
||||
}
|
||||
|
||||
bool doOpenURL;
|
||||
|
||||
bool currentlyConnecting() { return false; }
|
||||
bool currentlyConnected() { return false; }
|
||||
|
||||
vector<pair<string, int> > soundsToPlay;
|
||||
|
||||
void openURL() {
|
||||
doOpenURL = true;
|
||||
}
|
||||
|
||||
void shareScore(MOBPAR_FORMAL) {
|
||||
string s = buildScoreDescription();
|
||||
jclass cls = env->GetObjectClass(thiz);
|
||||
jmethodID mid = env->GetMethodID(cls, "shareScore", "(Ljava/lang/String;)V");
|
||||
jobject str = env->NewStringUTF(s.c_str());
|
||||
env->CallVoidMethod(thiz, mid, str);
|
||||
env->DeleteLocalRef(str);
|
||||
env->DeleteLocalRef(cls);
|
||||
}
|
||||
|
||||
int nticks; int getticks() { return nticks; }
|
||||
|
||||
extern "C" void Java_com_roguetemple_hyperroid_HyperRogue_draw(MOBPAR_FORMAL) {
|
||||
// if(debfile) fprintf(debfile, "draw started.\n"), fflush(debfile);
|
||||
|
||||
LOCK(, "draw")
|
||||
/* static int infoticks;
|
||||
if(getticks() - infoticks > 10000 && !timerghost) {
|
||||
addMessage("ticks: " + its(getticks()));
|
||||
infoticks = getticks();
|
||||
} */
|
||||
tw_thiz = thiz; tw_env = env;
|
||||
mobile_draw(MOBPAR_ACTUAL);
|
||||
uploadAll(MOBPAR_ACTUAL);
|
||||
UNLOCK
|
||||
}
|
||||
|
||||
extern "C" void Java_com_roguetemple_hyperroid_HyperRogue_drawScreenshot(MOBPAR_FORMAL) {
|
||||
dynamicval<bool> d(vid.usingGL, false);
|
||||
Java_com_roguetemple_hyperroid_HyperRogue_draw(MOBPAR_ACTUAL);
|
||||
}
|
||||
|
||||
extern "C" void Java_com_roguetemple_hyperroid_HyperRogue_handleKey(MOBPAR_FORMAL, jint keycode) {
|
||||
extra ex;
|
||||
flashMessages(); mousing = false;
|
||||
handlekey(keycode, keycode, ex);
|
||||
}
|
||||
|
||||
extern "C" void Java_com_roguetemple_hyperroid_HyperRogue_update
|
||||
( MOBPAR_FORMAL,
|
||||
jint xres, jint yres, jint _ticks,
|
||||
jint _mousex, jint _mousey, jboolean _clicked) {
|
||||
|
||||
LOCK(, "update")
|
||||
|
||||
// if(debfile) fprintf(debfile, "update started.\n"), fflush(debfile);
|
||||
|
||||
if(xres != vid.xres || yres != vid.yres)
|
||||
vid.killreduction = 0;
|
||||
|
||||
vid.xres = xres;
|
||||
vid.yres = yres;
|
||||
vid.fsize = (min(vid.xres, vid.yres) * fontscale + 50) / 3200;
|
||||
|
||||
mousex = _mousex;
|
||||
mousey = _mousey;
|
||||
clicked = _clicked;
|
||||
nticks = _ticks;
|
||||
uploadAll(MOBPAR_ACTUAL);
|
||||
UNLOCK
|
||||
// delref;
|
||||
// if(debfile) fprintf(debfile, "update stopped.\n"), fflush(debfile);
|
||||
}
|
||||
|
||||
void playSound(cell *c, const string& fname, int vol) {
|
||||
soundsToPlay.push_back(make_pair(fname, vol));
|
||||
}
|
||||
|
||||
void uploadAll(JNIEnv *env, jobject thiz) {
|
||||
|
||||
jclass cls = env->GetObjectClass(thiz);
|
||||
|
||||
for(int i=0; i<size(soundsToPlay); i++) {
|
||||
jmethodID mid = env->GetMethodID(cls, "playSound", "(Ljava/lang/String;I)V");
|
||||
jobject str = env->NewStringUTF(soundsToPlay[i].first.c_str());
|
||||
env->CallVoidMethod(thiz, mid, str, soundsToPlay[i].second);
|
||||
env->DeleteLocalRef(str);
|
||||
}
|
||||
soundsToPlay.clear();
|
||||
|
||||
if(settingsChanged) {
|
||||
jmethodID mid = env->GetMethodID(cls, "applyUserSettings", "()V");
|
||||
env->CallVoidMethod(thiz, mid);
|
||||
settingsChanged = false;
|
||||
}
|
||||
|
||||
if(doOpenURL) {
|
||||
jmethodID mid = env->GetMethodID(cls, "openWebsite", "()V");
|
||||
env->CallVoidMethod(thiz, mid);
|
||||
doOpenURL = false;
|
||||
}
|
||||
|
||||
env->DeleteLocalRef(cls);
|
||||
}
|
||||
|
||||
|
||||
#include <unistd.h>
|
||||
|
BIN
hydroid/app/src/main/res/drawable-hdpi/icon.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
hydroid/app/src/main/res/drawable-ldpi/icon.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
hydroid/app/src/main/res/drawable-mdpi/icon.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
hydroid/app/src/main/res/drawable-xhdpi/icon.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
hydroid/app/src/main/res/drawable-xxhdpi/icon.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
hydroid/app/src/main/res/drawable-xxxhdpi/icon.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
hydroid/app/src/main/res/drawable/icon.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
11
hydroid/app/src/main/res/layout/main.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent" android:orientation="vertical"
|
||||
android:id="@+id/framelayout">
|
||||
<com.roguetemple.hyperroid.HyperView
|
||||
android:id="@+id/ascv"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
></com.roguetemple.hyperroid.HyperView>
|
||||
</FrameLayout>
|
17
hydroid/app/src/main/res/menu/menugame.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/settings"
|
||||
android:title="@string/title_settings"/>
|
||||
<item android:id="@+id/log"
|
||||
android:title="@string/title_log"/>
|
||||
<item android:id="@+id/help"
|
||||
android:title="@string/title_help"/>
|
||||
<item android:id="@+id/achieve"
|
||||
android:title="@string/array_cheat_actionsa"/>
|
||||
<item android:id="@+id/leader"
|
||||
android:title="@string/array_cheat_actionsl"/>
|
||||
<item android:id="@+id/share"
|
||||
android:title="@string/title_share"/>
|
||||
<item android:id="@+id/overview"
|
||||
android:title="@string/title_overview"/>
|
||||
</menu>
|
BIN
hydroid/app/src/main/res/raw/caves.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/crossroads.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/desert.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/graveyard.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/hell.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/icyland.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/jungle.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/laboratory.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/mirror.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/motion.ogg
Normal file
BIN
hydroid/app/src/main/res/raw/rlyeh.ogg
Normal file
12
hydroid/app/src/main/res/raw/t
Normal file
@ -0,0 +1,12 @@
|
||||
caves.ogg
|
||||
crossroads.ogg
|
||||
desert.ogg
|
||||
graveyard.ogg
|
||||
hell.ogg
|
||||
icyland.ogg
|
||||
jungle.ogg
|
||||
laboratory.ogg
|
||||
mirror.ogg
|
||||
motion.ogg
|
||||
rlyeh.ogg
|
||||
t
|
182
hydroid/app/src/main/res/values-cz/strings.xml
Normal file
@ -0,0 +1,182 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="langcode">CZ</string>
|
||||
<string name="app_name">HyperRogue</string>
|
||||
<string name="signinother">Chyba pÅ™i pÅ™ihlášenÃ</string>
|
||||
<string name="app_id">480859409970</string>
|
||||
<string name="signin_other_error">DoÅ¡lo k problému s pÅ™ihlášenÃm, prosÃm, zkuste to pozdÄ›ji.</string>
|
||||
<string name="sharesam">sdÃlet snÃmek obrazovky a zprávu</string>
|
||||
<string name="sharemsg">sdÃlet pouze zprávu</string>
|
||||
<string name="copymsg">zkopÃrovat zprávu</string>
|
||||
<string name="sharehow">Co a jak sdÃlet?</string>
|
||||
<string name="sharevia">SdÃlet skrze:</string>
|
||||
<string name="copied">ZkopÃrováno do schránky</string>
|
||||
<string name="yourwish">Co si pÅ™ejeÅ¡, lupiÄ<69>i?</string>
|
||||
<string name="notconnected">Nepřipojeno!</string>
|
||||
<string name="aboutgold">o HyperRogue Gold</string>
|
||||
<string name="buy">koupit</string>
|
||||
<string name="info">informace</string>
|
||||
<string name="nothanks">ne, děkuji</string>
|
||||
<string name="goldfeatures">
|
||||
Koupà HyperRogue Gold zÃskáš následujÃcà výhody:\n\
|
||||
- achievementy a žebÅ™ÃÄ<C2AD>ky\n\
|
||||
- Ä<>astÄ›jÅ¡Ã aktualizace (plánujà se nové kraje!)\n\
|
||||
- eukleidovský mód, abys vidÄ›l, proÄ<6F> záležà na geometrii\n\
|
||||
- cheaty\n\
|
||||
</string>
|
||||
|
||||
<string name="title_settings">NastavenÃ</string>
|
||||
<string name="title_log">ZáznamnÃk hry</string>
|
||||
<string name="title_help">Obrazovka s nápovědou</string>
|
||||
<string name="title_quest">ZáznamnÃk úkolů/restart</string>
|
||||
<string name="title_cheat">HyperRogue Gold</string>
|
||||
<string name="title_share">SdÃlenà skóre/snÃmku obrazovky</string>
|
||||
<string name="title_overview">přehled krajů</string>
|
||||
|
||||
<string name="title_gameservices">Připojit ke Google Game Services</string>
|
||||
<string name="summary_gameservices">Online achievementy a žebÅ™ÃÄ<C2AD>ky</string>
|
||||
<string name="title_language">Jazyk</string>
|
||||
<string name="summary_language">Vyber jazyk (language)</string>
|
||||
<string name="title_character">Postava</string>
|
||||
<string name="summary_character">Muž/žena</string>
|
||||
<string name="title_hsightrange">Viditelnost</string>
|
||||
<string name="summary_hsightrange">Ä<EFBFBD>Ãm nižšà hodnota, tÃm rychleji hra poběžÃ</string>
|
||||
<string name="title_hwallmode">Zdi</string>
|
||||
<string name="summary_hwallmode">Jak zobrazovat zdi?</string>
|
||||
<string name="title_hmonmode">Netvoři</string>
|
||||
<string name="summary_hmonmode">Jak zobrazovat netvory a předměty?</string>
|
||||
<string name="title_hypermode">Model hyperbolické roviny (pohled)</string>
|
||||
<string name="summary_hypermode">Kleinův, Poincarého, ...</string>
|
||||
<string name="title_fontsize">Velikost fontu</string>
|
||||
<string name="title_flashtime">Délka zobrazenÃ</string>
|
||||
<string name="summary_flashtime">jak dlouho by měly být zobrazeny zprávy</string>
|
||||
<string name="title_revmove">Obrácený pohyb</string>
|
||||
<string name="summary_revmove">tlaÄ<EFBFBD> postavu zezadu</string>
|
||||
<string name="title_nomusic">Hraj bez hudby</string>
|
||||
<string name="summary_nomusic">do not play any music</string>
|
||||
<string name="title_immersive">Fullscreen mode</string>
|
||||
<string name="summary_immersive">swipe inward to display system bars</string>
|
||||
<string name="title_usegl">Použità OpenGL</string>
|
||||
<string name="summary_usegl">OpenGL funguje někdy lépe a někdy zase hůře</string>
|
||||
<string name="title_website">Běž na webovou stránku HyperRogue</string>
|
||||
<string name="summary_website">zahraj si i rychlejšà desktopovou verzi!</string>
|
||||
|
||||
<string name="array_visionRange4">4 (velmi omezená)</string>
|
||||
<string name="array_visionRange5">5 (omezená)</string>
|
||||
<string name="array_visionRange6">6 (o nÄ›co rychlejÅ¡Ã)</string>
|
||||
<string name="array_visionRange7">7 (úplná)</string>
|
||||
<string name="array_wallMode0">ASCII (rychlé)</string>
|
||||
<string name="array_wallMode1">Ä<EFBFBD>erné</string>
|
||||
<string name="array_wallMode2">obyÄ<EFBFBD>ejné</string>
|
||||
<string name="array_wallMode3">escherovské (pomalé)</string>
|
||||
<string name="array_monsterMode0">ASCII (rychlé)</string>
|
||||
<string name="array_monsterMode1">pouze předměty</string>
|
||||
<string name="array_monsterMode2">předměty a netvoři</string>
|
||||
<string name="array_monsterMode3">vysoký kontrast</string>
|
||||
<string name="array_hyperMode0">Kleinův (0)</string>
|
||||
<string name="array_hyperMode5">Střednà (0,5)</string>
|
||||
<string name="array_hyperMode10">Poincarého (1)</string>
|
||||
<string name="array_hyperMode20">vzdálený (2)</string>
|
||||
<string name="array_fontSize25">Drobná (25%)</string>
|
||||
<string name="array_fontSize50">Malá (50%)</string>
|
||||
<string name="array_fontSize75">Menšà (75%)</string>
|
||||
<string name="array_fontSize100">Normálnà (100%)</string>
|
||||
<string name="array_fontSize150">Většà (150%)</string>
|
||||
<string name="array_fontSize200">Velká (200%)</string>
|
||||
<string name="array_fontSize300">Hodně velká (300%)</string>
|
||||
<string name="array_fontSize400">Obrovská (400%)</string>
|
||||
<string name="array_flashTime0">žádné zprávy</string>
|
||||
<string name="array_flashTime2">extrémně krátce (25%)</string>
|
||||
<string name="array_flashTime4">velmi krátce (50%)</string>
|
||||
<string name="array_flashTime6">krátce (75%)</string>
|
||||
<string name="array_flashTime8">poměrně krátce (100%)</string>
|
||||
<string name="array_flashTime12">normálně (150%)</string>
|
||||
<string name="array_flashTime16">poměrně dlouho (2x)</string>
|
||||
<string name="array_flashTime24">dlouho (3x)</string>
|
||||
<string name="array_flashTime32">velmi dlouho (4x)</string>
|
||||
<string name="array_flashTime48">hodnÄ› dlouho (6x)</string>
|
||||
<string name="array_flashTime64">extrémně dlouho (8x)</string>
|
||||
<string name="array_cheat_actionse">Eukleidovský mód</string>
|
||||
<string name="array_cheat_actionsa">Achievementy</string>
|
||||
<string name="array_cheat_actionsl">ŽebÅ™ÃÄ<EFBFBD>ky</string>
|
||||
<string name="array_cheat_actionsb">** cheats are below **</string>
|
||||
<string name="array_cheat_actionsS">BezpeÄ<EFBFBD>nost (rychlé uloženÃ)</string>
|
||||
<string name="array_cheat_actionsL">Vyber si kraj ---</string>
|
||||
<string name="array_cheat_actionsU">--- a teleportuj se tam</string>
|
||||
<string name="array_cheat_actionsF">zÃskej moc sféry</string>
|
||||
<string name="array_cheat_actionsC">hyperkamový úkol</string>
|
||||
<string name="array_cheat_actionsM">vyvolej Mimiky</string>
|
||||
<string name="array_cheat_actionsG">vyvolej golema</string>
|
||||
<string name="array_cheat_actionsZ">otoÄ<EFBFBD> postavu</string>
|
||||
<string name="array_cheat_actionsJ">zbav se všech pokladů</string>
|
||||
<string name="array_cheat_actionsP">zruš moc sféry</string>
|
||||
<string name="array_cheat_actionsO">vyvolej sféry</string>
|
||||
<string name="array_cheat_actionsD">vyvolej mrtvé sféry</string>
|
||||
<string name="array_cheat_actionsY">vyvolej Yendorskou sféru</string>
|
||||
<string name="array_cheat_actionsT">vyvolej poklad</string>
|
||||
<string name="array_cheat_actionsTx">vyvolej spoustu pokladů</string>
|
||||
<string name="array_cheat_actionsW">vyvolej PÃseÄ<65>ného Ä<>erva</string>
|
||||
<string name="array_cheat_actionsI">vyvolej BÅ™eÄ<65>Å¥an</string>
|
||||
<string name="array_cheat_actionsE">vyvolej netvora</string>
|
||||
<string name="array_cheat_actionsH">vyvolej Tlouky</string>
|
||||
<string name="array_cheat_actionsB">vyvolej ohniště</string>
|
||||
<string name="array_cheat_actionsK">zÃskej zabité netvory</string>
|
||||
<string name="array_character0">muž</string>
|
||||
<string name="array_character1">žena</string>
|
||||
<string name="array_leaderboardNames0">Skóre</string>
|
||||
<string name="array_leaderboardNames1">Diamanty</string>
|
||||
<string name="array_leaderboardNames3">KoÅ™enÃ</string>
|
||||
<string name="array_leaderboardNames2">Zlato</string>
|
||||
<string name="array_leaderboardNames4">RubÃny</string>
|
||||
<string name="array_leaderboardNames6">Střepiny</string>
|
||||
<string name="array_leaderboardNames10">PÃrka</string>
|
||||
<string name="array_leaderboardNames5">ElixÃry</string>
|
||||
<string name="array_leaderboardNames31">Vejce BombarÄ<72>áka</string>
|
||||
<string name="array_leaderboardNames32">Jantary</string>
|
||||
<string name="array_leaderboardNames33">Perly</string>
|
||||
<string name="array_leaderboardNames34">Hyperské koberce</string>
|
||||
<string name="array_leaderboardNames35">Granáty</string>
|
||||
<string name="array_leaderboardNames9">Sošky</string>
|
||||
<string name="array_leaderboardNames18">Kapradinové květy</string>
|
||||
<string name="array_leaderboardNames26">Červené drahokamy</string>
|
||||
<string name="array_leaderboardNames27">Pirátské poklady</string>
|
||||
<string name="array_leaderboardNames7">Totemy</string>
|
||||
<string name="array_leaderboardNames22">Lahve vÃna</string>
|
||||
<string name="array_leaderboardNames23">Smaragdy</string>
|
||||
<string name="array_leaderboardNames21">Kusy stÅ™Ãbra</string>
|
||||
<string name="array_leaderboardNames19">Mateřà kaÅ¡iÄ<69>ky</string>
|
||||
<string name="array_leaderboardNames8">KvÃtka</string>
|
||||
<string name="array_leaderboardNames11">SafÃry</string>
|
||||
<string name="array_leaderboardNames20">Mocikamy</string>
|
||||
<string name="array_leaderboardNames12">Hyperkamy</string>
|
||||
<string name="array_leaderboardNames14">Hlavnà úkol: poÄ<6F>et kol</string>
|
||||
<string name="array_leaderboardNames13">Hlavnà úkol: reálný Ä<>as</string>
|
||||
<string name="array_leaderboardNames16">Hyperkamový úkol: poÄ<6F>et kol</string>
|
||||
<string name="array_leaderboardNames15">Hyperkamový úkol: reálný Ä<>as</string>
|
||||
<string name="array_leaderboardNames17">Yendorské sféry</string>
|
||||
<string name="array_leaderboardNames24">Grimoáry</string>
|
||||
<string name="array_leaderboardNames25">Svaté grály</string>
|
||||
|
||||
<string name="array_leaderboardNames39">Onyxy</string>
|
||||
<string name="array_leaderboardNames38">Elementálnà drahokamy</string>
|
||||
<string name="array_leaderboardNames37">Figurky</string>
|
||||
<string name="array_leaderboardNames42">Mutantnà semenáÄ<C2A1>ky</string>
|
||||
<string name="array_leaderboardNames43">Fulgurity</string>
|
||||
|
||||
<string name="title_princess">koho zachrauje</string>
|
||||
<string name="array_prince0">Princ</string>
|
||||
<string name="array_prince1">Princezna</string>
|
||||
|
||||
<string name="array_cheat_actions7">sedmiúhelníkový mód</string>
|
||||
<string name="array_cheat_actionsy">Mise: Yendor</string>
|
||||
<string name="array_cheat_actionsc">chaotický mód</string>
|
||||
<string name="array_leaderboardNames46">Èerné lotosy</string>
|
||||
<string name="array_leaderboardNames47">Mutantní ovoce</string>
|
||||
<string name="array_leaderboardNames48">Holubièí pera</string>
|
||||
<string name="array_leaderboardNames51">Korály</string>
|
||||
<string name="array_leaderboardNames52">Rùže bez trnù</string>
|
||||
<string name="array_leaderboardNames53">chaotický mód</string>
|
||||
<string name="array_leaderboardNames54">Želvièky</string>
|
||||
<string name="array_leaderboardNames55">Draèí šupiny</string>
|
||||
<string name="array_leaderboardNames56">Jablka</string>
|
||||
</resources>
|
183
hydroid/app/src/main/res/values-pl/strings.xml
Normal file
@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="langcode">PL</string>
|
||||
<string name="app_name">HyperRogue</string>
|
||||
<string name="signinother">Porażka logowania</string>
|
||||
<string name="app_id">480859409970</string>
|
||||
<string name="signin_other_error">Był problem z logowaniem, spróbuj później.</string>
|
||||
<string name="sharesam">udostępnij ekran i opis</string>
|
||||
<string name="sharemsg">udostępnij sam opis</string>
|
||||
<string name="copymsg">skopiuj opis</string>
|
||||
<string name="sharehow">Co i jak udostępnić</string>
|
||||
<string name="sharevia">Udsostępnij poprzez:</string>
|
||||
<string name="copied">Skopiowano do Schowka</string>
|
||||
<string name="yourwish">Twoje życzenie?</string>
|
||||
<string name="notconnected">Nie podłączone!</string>
|
||||
<string name="aboutgold">o HyperRogue Gold</string>
|
||||
<string name="buy">kup</string>
|
||||
<string name="info">info</string>
|
||||
<string name="nothanks">nie dzięki</string>
|
||||
<string name="goldfeatures">
|
||||
Kup HyperRogue Gold, by dostać następujące dodatkowe funkcje:\n\
|
||||
- osiągnięcia i rankingi\n\
|
||||
- częstsze aktualizacje (nowe krainy w planach!)\n\
|
||||
- tryb euklidesowy, by zobaczyć, dlaczego geometria ma znaczenie\n\
|
||||
- oszustwa\n\
|
||||
</string>
|
||||
|
||||
<string name="title_settings">Ustawienia</string>
|
||||
<string name="title_log">Dziennik</string>
|
||||
<string name="title_help">Pomoc</string>
|
||||
<string name="title_quest">Misja/restart</string>
|
||||
<string name="title_cheat">HyperRogue Gold</string>
|
||||
<string name="title_share">Udostępnij wynik/ekran</string>
|
||||
<string name="title_overview">przegląd krain</string>
|
||||
|
||||
<string name="title_gameservices">Połącz z Google Game Services</string>
|
||||
<string name="summary_gameservices">Osiągnięcia i rankingi online</string>
|
||||
<string name="title_language">Język</string>
|
||||
<string name="summary_language">Wybierz język (language)</string>
|
||||
<string name="title_character">Postać gracza</string>
|
||||
<string name="summary_character">Mężczyzna albo kobieta</string>
|
||||
<string name="title_hsightrange">Widoczność</string>
|
||||
<string name="summary_hsightrange">mniejsza wartość = szybsza gra</string>
|
||||
<string name="title_hwallmode">Tryb ścian</string>
|
||||
<string name="summary_hwallmode">Jak pokazywać ściany?</string>
|
||||
<string name="title_hmonmode">Tryb potworów</string>
|
||||
<string name="summary_hmonmode">Jak pokazywać potwory i przedmioty?</string>
|
||||
<string name="title_hypermode">model płaszczyzny hiperbolicznej</string>
|
||||
<string name="summary_hypermode">Klein, Poincaré, ...</string>
|
||||
<string name="title_fontsize">Wielkość czcionki</string>
|
||||
<string name="title_flashtime">Szybkość tekstu</string>
|
||||
<string name="summary_flashtime">jak długo pokazywać wiadomości</string>
|
||||
<string name="title_revmove">Ruch odwrócony</string>
|
||||
<string name="summary_revmove">klikaj za postacią</string>
|
||||
<string name="title_nomusic">Graj bez muzyki</string>
|
||||
<string name="summary_nomusic">wyłącz muzykę</string>
|
||||
<string name="title_immersive">Fullscreen mode</string>
|
||||
<string name="summary_immersive">swipe inward to display system bars</string>
|
||||
<string name="title_usegl">Użyj OpenGL</string>
|
||||
<string name="summary_usegl">OpenGL zazwyczaj działa lepiej</string>
|
||||
<string name="title_website">Idź na stronę HyperRogue</string>
|
||||
<string name="summary_website">zagraj również w szybką wersję na komputer!</string>
|
||||
|
||||
<string name="array_visionRange4">4 (bardzo ograniczona)</string>
|
||||
<string name="array_visionRange5">5 (ograniczona)</string>
|
||||
<string name="array_visionRange6">6 (trochę szybciej)</string>
|
||||
<string name="array_visionRange7">7 (pełna)</string>
|
||||
<string name="array_wallMode0">ASCII (szybkie)</string>
|
||||
<string name="array_wallMode1">czarna</string>
|
||||
<string name="array_wallMode2">prosta</string>
|
||||
<string name="array_wallMode3">Escher (wolne)</string>
|
||||
<string name="array_monsterMode0">ASCII (szybkie)</string>
|
||||
<string name="array_monsterMode1">tylko przedmioty</string>
|
||||
<string name="array_monsterMode2">przedmioty i potwory</string>
|
||||
<string name="array_monsterMode3">wysoki kontrast</string>
|
||||
<string name="array_hyperMode0">Klein (0)</string>
|
||||
<string name="array_hyperMode5">pośredni (0.5)</string>
|
||||
<string name="array_hyperMode10">Poincaré (1)</string>
|
||||
<string name="array_hyperMode20">odległy (2)</string>
|
||||
<string name="array_fontSize25">Malutka (25%)</string>
|
||||
<string name="array_fontSize50">Mała (50%)</string>
|
||||
<string name="array_fontSize75">Maława (75%)</string>
|
||||
<string name="array_fontSize100">Normalna (100%)</string>
|
||||
<string name="array_fontSize150">Duża (150%)</string>
|
||||
<string name="array_fontSize200">Bardzo duża (200%)</string>
|
||||
<string name="array_fontSize300">Wielka (300%)</string>
|
||||
<string name="array_fontSize400">Ogromna (400%)</string>
|
||||
<string name="array_flashTime0">natychmiastowy</string>
|
||||
<string name="array_flashTime2">strasznie szybki (25%)</string>
|
||||
<string name="array_flashTime4">bardzo szybki (50%)</string>
|
||||
<string name="array_flashTime6">szybki (75%)</string>
|
||||
<string name="array_flashTime8">dość szybki (100%)</string>
|
||||
<string name="array_flashTime12">normalny (150%)</string>
|
||||
<string name="array_flashTime16">raczej wolny (2x)</string>
|
||||
<string name="array_flashTime24">wolny (3x)</string>
|
||||
<string name="array_flashTime32">bardzo wolny (4x)</string>
|
||||
<string name="array_flashTime48">naprawdę wolny (6x)</string>
|
||||
<string name="array_flashTime64">strasznie wolny (8x)</string>
|
||||
<string name="array_cheat_actionse">Tryb euklidesowy</string>
|
||||
<string name="array_cheat_actionsa">Osiągnięcia</string>
|
||||
<string name="array_cheat_actionsl">Rankingi</string>
|
||||
<string name="array_cheat_actionsb">** oszustwa poniżej **</string>
|
||||
<string name="array_cheat_actionsS">Bezpieczeństwo (szybki save)</string>
|
||||
<string name="array_cheat_actionsL">Wybierz krainę ---</string>
|
||||
<string name="array_cheat_actionsU">--- i się teleportuj</string>
|
||||
<string name="array_cheat_actionsF">Moce sfer</string>
|
||||
<string name="array_cheat_actionsC">Misja Hiperkamień</string>
|
||||
<string name="array_cheat_actionsM">przywołaj Mimiki</string>
|
||||
<string name="array_cheat_actionsG">przywołaj Golema</string>
|
||||
<string name="array_cheat_actionsZ">obróć postać</string>
|
||||
<string name="array_cheat_actionsJ">utrata skarbów</string>
|
||||
<string name="array_cheat_actionsP">utrata mocy</string>
|
||||
<string name="array_cheat_actionsO">przwołaj sfery</string>
|
||||
<string name="array_cheat_actionsD">przywołaj martwe sfery</string>
|
||||
<string name="array_cheat_actionsY">przywołaj sferę Yendoru</string>
|
||||
<string name="array_cheat_actionsT">przywołaj skarby</string>
|
||||
<string name="array_cheat_actionsTx">przywołaj dużo skarbów</string>
|
||||
<string name="array_cheat_actionsW">przywołaj Czerwia</string>
|
||||
<string name="array_cheat_actionsI">przywołaj Bluszcz</string>
|
||||
<string name="array_cheat_actionsE">przywołaj potwora</string>
|
||||
<string name="array_cheat_actionsH">przywołaj dudniki</string>
|
||||
<string name="array_cheat_actionsB">przywołaj ognisko</string>
|
||||
<string name="array_cheat_actionsK">zdobądź zabicia</string>
|
||||
<string name="array_character0">mężczyzna</string>
|
||||
<string name="array_character1">kobieta</string>
|
||||
<string name="array_leaderboardNames0">Wynik</string>
|
||||
<string name="array_leaderboardNames1">Diamenty</string>
|
||||
<string name="array_leaderboardNames3">Przyprawa</string>
|
||||
<string name="array_leaderboardNames2">Złoto</string>
|
||||
<string name="array_leaderboardNames4">Rubiny</string>
|
||||
<string name="array_leaderboardNames6">Odłamki</string>
|
||||
<string name="array_leaderboardNames10">Pióra</string>
|
||||
<string name="array_leaderboardNames5">Eliksiry</string>
|
||||
<string name="array_leaderboardNames31">Jaja Bombardiera</string>
|
||||
<string name="array_leaderboardNames32">Bursztyny</string>
|
||||
<string name="array_leaderboardNames33">Perły</string>
|
||||
<string name="array_leaderboardNames34">Hiperskie Dywany</string>
|
||||
<string name="array_leaderboardNames35">Granaty</string>
|
||||
<string name="array_leaderboardNames9">Statuetki</string>
|
||||
<string name="array_leaderboardNames18">Kwiaty Paproci</string>
|
||||
<string name="array_leaderboardNames26">Czerwone Kamienie</string>
|
||||
<string name="array_leaderboardNames27">Skarby Piratów</string>
|
||||
<string name="array_leaderboardNames7">Totemy</string>
|
||||
<string name="array_leaderboardNames22">Wino</string>
|
||||
<string name="array_leaderboardNames23">Szmaragdy</string>
|
||||
<string name="array_leaderboardNames21">Srebro</string>
|
||||
<string name="array_leaderboardNames19">Królewskie Mleczko</string>
|
||||
<string name="array_leaderboardNames8">Czarcie Ziele</string>
|
||||
<string name="array_leaderboardNames11">Szafiry</string>
|
||||
<string name="array_leaderboardNames20">Kamienie Mocy</string>
|
||||
<string name="array_leaderboardNames12">Hiperkamienie</string>
|
||||
<string name="array_leaderboardNames14">Misja główna: liczba kolejek</string>
|
||||
<string name="array_leaderboardNames13">Misja główna: czas rzeczywisty</string>
|
||||
<string name="array_leaderboardNames16">Misja Hiperkamień: liczba kolejek</string>
|
||||
<string name="array_leaderboardNames15">Misja Hiperkamień: czas rzeczywisty</string>
|
||||
<string name="array_leaderboardNames17">Sfery Yendoru</string>
|
||||
<string name="array_leaderboardNames24">Księgi</string>
|
||||
<string name="array_leaderboardNames25">Święte Graale</string>
|
||||
|
||||
<string name="array_leaderboardNames39">Onyksy</string>
|
||||
<string name="array_leaderboardNames38">Kamienie ywiow</string>
|
||||
<string name="array_leaderboardNames37">Figurki</string>
|
||||
<string name="array_leaderboardNames42">Zmutowane sadzonki</string>
|
||||
<string name="array_leaderboardNames43">Fulguryty</string>
|
||||
|
||||
<string name="title_princess">kogo ratujemy</string>
|
||||
<string name="array_prince0">Książę</string>
|
||||
<string name="array_prince1">Księżniczka</string>
|
||||
|
||||
<string name="array_cheat_actions7">tryb siedmiokątów</string>
|
||||
<string name="array_cheat_actionsy">Misja Yendor</string>
|
||||
<string name="array_cheat_actionsc">tryb Chaosu</string>
|
||||
<string name="array_leaderboardNames46">Czarne Lotosy</string>
|
||||
<string name="array_leaderboardNames47">Zmutowane Owoce</string>
|
||||
<string name="array_leaderboardNames48">Gołębie Pióra</string>
|
||||
<string name="array_leaderboardNames51">Korale</string>
|
||||
<string name="array_leaderboardNames52">Róże bez Kolców</string>
|
||||
<string name="array_leaderboardNames53">tryb Chaosu</string>
|
||||
<string name="array_leaderboardNames54">Żółwie Punkty</string>
|
||||
<string name="array_leaderboardNames55">Smocze Łuski</string>
|
||||
<string name="array_leaderboardNames56">Jabłka</string>
|
||||
|
||||
</resources>
|
177
hydroid/app/src/main/res/values-ru/strings.xml
Normal file
@ -0,0 +1,177 @@
|
||||
<resources>
|
||||
<string name="langcode">RU</string>
|
||||
<string name="app_name">HyperRogue</string>
|
||||
<string name="signinother">Ошибка входа</string>
|
||||
<string name="app_id">480859409970</string>
|
||||
<string name="signin_other_error">
|
||||
Возникла проблема со входом; пожалуйста, повторите попытку позже.
|
||||
</string>
|
||||
<string name="sharesam">поделитесь скриншотом и сообщением</string>
|
||||
<string name="sharemsg">поделитесь сообщением</string>
|
||||
<string name="copymsg">копировать сообщение</string>
|
||||
<string name="sharehow">Поделитесь, что и как?</string>
|
||||
<string name="sharevia">Поделиться через:</string>
|
||||
<string name="copied">копировать в буфер</string>
|
||||
<string name="yourwish">Чего хочешь, жулик?</string>
|
||||
<string name="notconnected">Нет соединения!</string>
|
||||
<string name="aboutgold">про HyperRogue Gold</string>
|
||||
<string name="buy">купить</string>
|
||||
<string name="info">инфо</string>
|
||||
<string name="nothanks">нет, спасибо</string>
|
||||
<string name="goldfeatures">
|
||||
Купите HyperRogue Gold, чтобы получить доступ к:\n\ - достижениям и таблице рекордов\n\ - более частым обновлениям (скоро новые земли!)\n\ - Евклидов режим, чтобы увидеть, почему геометрия так важна\n\ - читы\n\
|
||||
</string>
|
||||
<string name="title_settings">Настройки</string>
|
||||
<string name="title_log">Лог игры</string>
|
||||
<string name="title_help">Помощь</string>
|
||||
<string name="title_quest">Миссия/начать с начала</string>
|
||||
<string name="title_cheat">особенности HyperRogue Gold</string>
|
||||
<string name="title_share">Поделиться счётом/скриншотом</string>
|
||||
<string name="title_overview">обзор мира</string>
|
||||
<string name="title_gameservices">Подключено к сервисам Google</string>
|
||||
<string name="summary_gameservices">Онлайн достижения и таблицы рекордов</string>
|
||||
<string name="title_language">Язык</string>
|
||||
<string name="summary_language">Выберите язык</string>
|
||||
<string name="title_character">Персонаж</string>
|
||||
<string name="summary_character">Мужской или женский</string>
|
||||
<string name="title_hsightrange">Радиус видимости</string>
|
||||
<string name="summary_hsightrange">чем меньше, тем быстрее игра</string>
|
||||
<string name="title_hwallmode">Режим для стен</string>
|
||||
<string name="summary_hwallmode">Как отображать стены?</string>
|
||||
<string name="title_hmonmode">Режим для монстров</string>
|
||||
<string name="summary_hmonmode">Как отображать монстров и предметы?</string>
|
||||
<string name="title_hypermode">Модель гиперболической плоскости (вид)</string>
|
||||
<string name="summary_hypermode">Клейна, Пуанкаре, ...</string>
|
||||
<string name="title_fontsize">Размер шрифта</string>
|
||||
<string name="title_flashtime">Время показа сообщений</string>
|
||||
<string name="summary_flashtime">как долга отображаются сообщения</string>
|
||||
<string name="title_revmove">Обратить движения</string>
|
||||
<string name="summary_revmove">нажимайте за персонажем</string>
|
||||
<string name="title_nomusic">выключить музыку</string>
|
||||
<string name="summary_nomusic">не играть музыку</string>
|
||||
<string name="title_immersive">Fullscreen mode</string>
|
||||
<string name="summary_immersive">swipe inward to display system bars</string>
|
||||
<string name="title_usegl">Использовать OpenGL</string>
|
||||
<string name="summary_usegl">OpenGL иногда работает лучше, иногда хуже</string>
|
||||
<string name="title_website">Перейти на сайт HyperRogue</string>
|
||||
<string name="summary_website">Играйте не только в мобильную версию!</string>
|
||||
<string name="array_visionRange4">4 (очень ограничено)</string>
|
||||
<string name="array_visionRange5">5 (ограничено)</string>
|
||||
<string name="array_visionRange6">6 (средний)</string>
|
||||
<string name="array_visionRange7">7 (полный)</string>
|
||||
<string name="array_wallMode0">ASCII (быстрый)</string>
|
||||
<string name="array_wallMode1">чёрный</string>
|
||||
<string name="array_wallMode2">простой</string>
|
||||
<string name="array_wallMode3">Эшер(медленный)</string>
|
||||
<string name="array_monsterMode0">ASCII (быстрый)</string>
|
||||
<string name="array_monsterMode1">только предметы</string>
|
||||
<string name="array_monsterMode2">предметы и монстры</string>
|
||||
<string name="array_monsterMode3">высокий контраст</string>
|
||||
<string name="array_hyperMode0">Клейн (0)</string>
|
||||
<string name="array_hyperMode5">Средний (0.5)</string>
|
||||
<string name="array_hyperMode10">Пуанкаре (1)</string>
|
||||
<string name="array_hyperMode20">Отдалённый (2)</string>
|
||||
<string name="array_fontSize25">Крохотный (25%)</string>
|
||||
<string name="array_fontSize50">Маленький (50%)</string>
|
||||
<string name="array_fontSize75">Уменьшенный (75%)</string>
|
||||
<string name="array_fontSize100">Обычный (100%)</string>
|
||||
<string name="array_fontSize150">Увеличенный (150%)</string>
|
||||
<string name="array_fontSize200">Большой (200%)</string>
|
||||
<string name="array_fontSize300">Очень большой (300%)</string>
|
||||
<string name="array_fontSize400">Огромный (400%)</string>
|
||||
<string name="array_flashTime0">без сообщений</string>
|
||||
<string name="array_flashTime2">предельно быстро (25%)</string>
|
||||
<string name="array_flashTime4">очень быстро (50%)</string>
|
||||
<string name="array_flashTime6">быстро (75%)</string>
|
||||
<string name="array_flashTime8">довольно быстро (100%)</string>
|
||||
<string name="array_flashTime12">нормально (150%)</string>
|
||||
<string name="array_flashTime16">довольно медленно (2x)</string>
|
||||
<string name="array_flashTime24">медленно (3x)</string>
|
||||
<string name="array_flashTime32">очень медленно (4x)</string>
|
||||
<string name="array_flashTime48">совсем медленно (6x)</string>
|
||||
<string name="array_flashTime64">предельно медленно (8x)</string>
|
||||
<string name="array_cheat_actionse">Евклидовый режим</string>
|
||||
<string name="array_cheat_actionsa">Достижения</string>
|
||||
<string name="array_cheat_actionsl">Таблицы рекордов</string>
|
||||
<string name="array_cheat_actionsb">** cheats are below **</string>
|
||||
<string name="array_cheat_actionsS">Сохраниться</string>
|
||||
<string name="array_cheat_actionsL">Выбрать землю ---</string>
|
||||
<string name="array_cheat_actionsU">--- и телепортироваться туда</string>
|
||||
<string name="array_cheat_actionsF">получить силу сфер</string>
|
||||
<string name="array_cheat_actionsC">Миссия Гиперкамней</string>
|
||||
<string name="array_cheat_actionsM">призвать двойников</string>
|
||||
<string name="array_cheat_actionsG">призвать Голема</string>
|
||||
<string name="array_cheat_actionsZ">повернуться</string>
|
||||
<string name="array_cheat_actionsJ">потерять все сокровища</string>
|
||||
<string name="array_cheat_actionsP">потерять силы сфер</string>
|
||||
<string name="array_cheat_actionsO">призвать сферы</string>
|
||||
<string name="array_cheat_actionsD">призвать мёртвые сферы</string>
|
||||
<string name="array_cheat_actionsY">призвать сферы Йендора</string>
|
||||
<string name="array_cheat_actionsT">призвать сокровища</string>
|
||||
<string name="array_cheat_actionsTx">призвать много сокровищ</string>
|
||||
<string name="array_cheat_actionsW">призвать Песчаного червя</string>
|
||||
<string name="array_cheat_actionsI">призвать Плющ</string>
|
||||
<string name="array_cheat_actionsE">призвать монстра</string>
|
||||
<string name="array_cheat_actionsH">призвать Тамперы</string>
|
||||
<string name="array_cheat_actionsB">призвать Костры</string>
|
||||
<string name="array_cheat_actionsK">получить убийства</string>
|
||||
<string name="array_character0">мужской</string>
|
||||
<string name="array_character1">женский</string>
|
||||
<string name="array_leaderboardNames0">Очки</string>
|
||||
<string name="array_leaderboardNames1">Алмазы</string>
|
||||
<string name="array_leaderboardNames3">Специи</string>
|
||||
<string name="array_leaderboardNames2">Золото</string>
|
||||
<string name="array_leaderboardNames4">Рубины</string>
|
||||
<string name="array_leaderboardNames6">Осколки</string>
|
||||
<string name="array_leaderboardNames10">Перья</string>
|
||||
<string name="array_leaderboardNames5">Эликсиры</string>
|
||||
<string name="array_leaderboardNames31">Яйца бомбардира</string>
|
||||
<string name="array_leaderboardNames32">Янтари</string>
|
||||
<string name="array_leaderboardNames33">Жемчужины</string>
|
||||
<string name="array_leaderboardNames34">Гиперсидские ковры</string>
|
||||
<string name="array_leaderboardNames35">Гранаты</string>
|
||||
<string name="array_leaderboardNames9">Статуи</string>
|
||||
<string name="array_leaderboardNames24">Гримуары</string>
|
||||
<string name="array_leaderboardNames18">Папоротник</string>
|
||||
<string name="array_leaderboardNames26">Красные камни</string>
|
||||
<string name="array_leaderboardNames27">Сокровища пиратов</string>
|
||||
<string name="array_leaderboardNames7">Тотемы</string>
|
||||
<string name="array_leaderboardNames22">Вино</string>
|
||||
<string name="array_leaderboardNames23">Изумруды</string>
|
||||
<string name="array_leaderboardNames21">Серебро</string>
|
||||
<string name="array_leaderboardNames19">Молочко</string>
|
||||
<string name="array_leaderboardNames8">Ромашки</string>
|
||||
<string name="array_leaderboardNames11">Сапфиры</string>
|
||||
<string name="array_leaderboardNames20">Камни силы</string>
|
||||
<string name="array_leaderboardNames12">Гиперкамни</string>
|
||||
<string name="array_leaderboardNames14">Главная миссия: число ходов</string>
|
||||
<string name="array_leaderboardNames13">Главная миссия: время</string>
|
||||
<string name="array_leaderboardNames16">Миссия гиперкамней: число ходов</string>
|
||||
<string name="array_leaderboardNames15">Миссия гиперкамней: время</string>
|
||||
<string name="array_leaderboardNames25">Святые Граали</string>
|
||||
<string name="array_leaderboardNames17">Сферы Йендора</string>
|
||||
|
||||
<string name="array_leaderboardNames39">Ониксы</string>
|
||||
<string name="array_leaderboardNames38">Камни стихий</string>
|
||||
<string name="array_leaderboardNames37">Фигурки</string>
|
||||
<string name="array_leaderboardNames42">Саженцы-мутанты</string>
|
||||
<string name="array_leaderboardNames43">Фульгурити</string>
|
||||
|
||||
<string name="title_princess">Принц/Принцесса</string>
|
||||
<string name="array_prince0">Принц</string>
|
||||
<string name="array_prince1">Принцесса</string>
|
||||
|
||||
<string name="array_cheat_actions7">режим семиугольников</string>
|
||||
<string name="array_cheat_actionsy">Миссия Йендора</string>
|
||||
<string name="array_cheat_actionsc">режим Хаоса</string>
|
||||
<string name="array_leaderboardNames46">Чёрные лотосы</string>
|
||||
<string name="array_leaderboardNames47">Фрукты-мутанты</string>
|
||||
<string name="array_leaderboardNames48">Голубиные перья</string>
|
||||
<string name="array_leaderboardNames51">Кораллы</string>
|
||||
<string name="array_leaderboardNames52">розы без шипов</string>
|
||||
<string name="array_leaderboardNames53">режим Хаоса</string>
|
||||
<string name="array_leaderboardNames54">Tortoise Points</string>
|
||||
<string name="array_leaderboardNames55">чешуи дракона</string>
|
||||
<string name="array_leaderboardNames56">Яблоки</string>
|
||||
|
||||
</resources>
|
181
hydroid/app/src/main/res/values-tr/strings.xml
Normal file
@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="langcode">TR</string>
|
||||
<string name="app_name">HyperRogue</string>
|
||||
<string name="signinother">Giriţ hatasý</string>
|
||||
<string name="app_id">480859409970</string>
|
||||
<string name="signin_other_error">Giriţte bir hata gerçekleţti, lütfen daha sonra tekrar dene.</string>
|
||||
<string name="sharesam">ekraný ve mesajý paylaţ</string>
|
||||
<string name="sharemsg">sadece mesajý paylaţ</string>
|
||||
<string name="copymsg">mesajý kopyala</string>
|
||||
<string name="sharehow">Neyi nasýl paylaţacaksýn?</string>
|
||||
<string name="sharevia">Ţunun aracýlýđýyla paylaţ:</string>
|
||||
<string name="copied">Panoya kopyalandý.</string>
|
||||
<string name="yourwish">Ã<EFBFBD>steÄ‘in nedir Seyyah?</string>
|
||||
<string name="notconnected">Bađlý deđil!</string>
|
||||
<string name="aboutgold">HyperRogue Gold hakkýnda</string>
|
||||
<string name="buy">satýn al</string>
|
||||
<string name="info">bilgi</string>
|
||||
<string name="nothanks">istemiyorum</string>
|
||||
<string name="goldfeatures">Hyperrogue Gold\'u aţađýdaki özelliklere kavuţmak için al:\n\
|
||||
- baţarýmlar ve listeler\n\
|
||||
- daha sýk güncellemeler (yeni diyarlar planda!)\n\
|
||||
- geometrinin neden önemli olduđunu anlamak için bir Öklid modu\n\
|
||||
- hile özellikleri\n\
|
||||
</string>
|
||||
|
||||
<string name="title_settings">Ayarlar</string>
|
||||
<string name="title_log">Oyun geçmiţi</string>
|
||||
<string name="title_help">Yardýmý görüntüle</string>
|
||||
<string name="title_quest">görev bilgisi/yeniden baţlat</string>
|
||||
<string name="title_cheat">HyperRogue Gold özellikleri</string>
|
||||
<string name="title_share">Ekran görüntüsü veya puan paylaţ</string>
|
||||
<string name="title_overview">dünya önizlemesi</string>
|
||||
|
||||
<string name="title_gameservices">Google Oyun Servislerine baÄŸlan.</string>
|
||||
<string name="summary_gameservices">Çevrimiçi başarımlar ve listeler.</string>
|
||||
<string name="title_language">Dil</string>
|
||||
<string name="summary_language">Dilini Seç (language)</string>
|
||||
<string name="title_character">Oyuncu karakteri</string>
|
||||
<string name="summary_character">Erkek veya kadın</string>
|
||||
<string name="title_hsightrange">görüş uzaklığı</string>
|
||||
<string name="summary_hsightrange">oyunun daha hızlı çalışması için düşük bir değer seç.</string>
|
||||
<string name="title_hwallmode">Duvar modu</string>
|
||||
<string name="summary_hwallmode">Duvarlar nasıl gözüksün?</string>
|
||||
<string name="title_hmonmode">Canavar modu</string>
|
||||
<string name="summary_hmonmode">Canavarlar ve eşyalar nasıl gözüksün?</string>
|
||||
<string name="title_hypermode">Hiperbolik düzlem görünümü</string>
|
||||
<string name="summary_hypermode">Klein, Poincaré, ...</string>
|
||||
<string name="title_fontsize">Font büyüklüğü</string>
|
||||
<string name="title_flashtime">Görüntü beklemesi</string>
|
||||
<string name="summary_flashtime">mesajların ne kadar gösterileceğini seç.</string>
|
||||
<string name="title_revmove">ters hareket</string>
|
||||
<string name="summary_revmove">karakteri arkadan ittir</string>
|
||||
<string name="title_nomusic">Müziği kapat</string>
|
||||
<string name="summary_nomusic">hiçbir müziği çalma</string>
|
||||
<string name="title_immersive">Fullscreen mode</string>
|
||||
<string name="summary_immersive">swipe inward to display system bars</string>
|
||||
<string name="title_usegl">OpenGL kullan.</string>
|
||||
<string name="summary_usegl">OpenGL bazen daha iyi, bazen daha kötü çalışır.</string>
|
||||
<string name="title_website">HyperRogue websitesine git.</string>
|
||||
<string name="summary_website">daha hızlı olan masaüstü versiyonunu da oyna!</string>
|
||||
|
||||
<string name="array_visionRange4">4 (çok sınırlı)</string>
|
||||
<string name="array_visionRange5">5 (sınırlı)</string>
|
||||
<string name="array_visionRange6">6 (biraz hızlı)</string>
|
||||
<string name="array_visionRange7">7 (tam)</string>
|
||||
<string name="array_wallMode0">ASCII (hızlı)</string>
|
||||
<string name="array_wallMode1">Siyah</string>
|
||||
<string name="array_wallMode2">düz</string>
|
||||
<string name="array_wallMode3">Escher (slow)</string>
|
||||
<string name="array_monsterMode0">ASCII (hızlı)</string>
|
||||
<string name="array_monsterMode1">sadece eÅŸyalar</string>
|
||||
<string name="array_monsterMode2">eÅŸyalar ve canavarlar</string>
|
||||
<string name="array_monsterMode3">yüksek kontrast</string>
|
||||
<string name="array_hyperMode0">Klein (0)</string>
|
||||
<string name="array_hyperMode5">Orta (0.5)</string>
|
||||
<string name="array_hyperMode10">Poincaré (1)</string>
|
||||
<string name="array_hyperMode20">uzak (2)</string>
|
||||
<string name="array_fontSize25">Çok Küçük (25%)</string>
|
||||
<string name="array_fontSize50">Ufak (50%)</string>
|
||||
<string name="array_fontSize75">Küçük (75%)</string>
|
||||
<string name="array_fontSize100">Normal (100%)</string>
|
||||
<string name="array_fontSize150">Ä°ri (150%)</string>
|
||||
<string name="array_fontSize200">Büyük (200%)</string>
|
||||
<string name="array_fontSize300">Çok Büyük (300%)</string>
|
||||
<string name="array_fontSize400">Devasa (400%)</string>
|
||||
<string name="array_flashTime0">mesaj yok</string>
|
||||
<string name="array_flashTime2">aşırı çabuk (25%)</string>
|
||||
<string name="array_flashTime4">çok çabuk (50%)</string>
|
||||
<string name="array_flashTime6">çabuk (75%)</string>
|
||||
<string name="array_flashTime8">biraz çabuk (100%)</string>
|
||||
<string name="array_flashTime12">normal (150%)</string>
|
||||
<string name="array_flashTime16">biraz yavaÅŸ (2x)</string>
|
||||
<string name="array_flashTime24">yavaÅŸ (3x)</string>
|
||||
<string name="array_flashTime32">çok yavaş (4x)</string>
|
||||
<string name="array_flashTime48">epey yavaÅŸ (6x)</string>
|
||||
<string name="array_flashTime64">aşırı yavaş (8x)</string>
|
||||
<string name="array_cheat_actionse">Öklid Modu</string>
|
||||
<string name="array_cheat_actionsa">Başarımlar</string>
|
||||
<string name="array_cheat_actionsl">listeler</string>
|
||||
<string name="array_cheat_actionsb">** cheats are below **</string>
|
||||
<string name="array_cheat_actionsS">Güvenlik (hızlı kayıt)</string>
|
||||
<string name="array_cheat_actionsL">Diyar seç ---</string>
|
||||
<string name="array_cheat_actionsU">--- ve oraya ışınlan.</string>
|
||||
<string name="array_cheat_actionsF">küre güçleri kazan</string>
|
||||
<string name="array_cheat_actionsC">Aşkıntaş Görevi</string>
|
||||
<string name="array_cheat_actionsM">Taklitçiler çıkar</string>
|
||||
<string name="array_cheat_actionsG">Golem çıkar</string>
|
||||
<string name="array_cheat_actionsZ">karakteri döndür</string>
|
||||
<string name="array_cheat_actionsJ">tüm hazineyi kaybet</string>
|
||||
<string name="array_cheat_actionsP">küre güçlerini tüket</string>
|
||||
<string name="array_cheat_actionsO">küre çıkar</string>
|
||||
<string name="array_cheat_actionsD">ölü küre çıkar</string>
|
||||
<string name="array_cheat_actionsY">Yendorun Küresini çıkar</string>
|
||||
<string name="array_cheat_actionsT">hazine çıkar</string>
|
||||
<string name="array_cheat_actionsTx">çok hazine çıkar</string>
|
||||
<string name="array_cheat_actionsW">Kumkurdu çıkar</string>
|
||||
<string name="array_cheat_actionsI">Sarmaşık çıkar</string>
|
||||
<string name="array_cheat_actionsE">Bir canavar çıkar</string>
|
||||
<string name="array_cheat_actionsH">Gümleyen çıkar</string>
|
||||
<string name="array_cheat_actionsB">Kampateşi çıkar</string>
|
||||
<string name="array_cheat_actionsK">leÅŸler kazan.</string>
|
||||
<string name="array_character0">erkek</string>
|
||||
<string name="array_character1">kadın</string>
|
||||
<string name="array_leaderboardNames0">Puan</string>
|
||||
<string name="array_leaderboardNames1">Elmas</string>
|
||||
<string name="array_leaderboardNames3">Baharat</string>
|
||||
<string name="array_leaderboardNames2">Altın</string>
|
||||
<string name="array_leaderboardNames4">Yakut</string>
|
||||
<string name="array_leaderboardNames6">Parça</string>
|
||||
<string name="array_leaderboardNames10">Telek</string>
|
||||
<string name="array_leaderboardNames5">Ä°ksir</string>
|
||||
<string name="array_leaderboardNames31">Bombacıkuş Yumurtaları</string>
|
||||
<string name="array_leaderboardNames32">Kehribarlar</string>
|
||||
<string name="array_leaderboardNames33">Ä°nciler</string>
|
||||
<string name="array_leaderboardNames34">Hypersian Carpets</string>
|
||||
<string name="array_leaderboardNames35">Garnets</string>
|
||||
<string name="array_leaderboardNames9">Heykel</string>
|
||||
<string name="array_leaderboardNames18">EÄŸrelti</string>
|
||||
<string name="array_leaderboardNames26">Kızıl Mücevherler</string>
|
||||
<string name="array_leaderboardNames27">Korsan Hazineleri</string>
|
||||
<string name="array_leaderboardNames7">Totem</string>
|
||||
<string name="array_leaderboardNames22">Wine</string>
|
||||
<string name="array_leaderboardNames23">Emeralds</string>
|
||||
<string name="array_leaderboardNames21">Silver</string>
|
||||
<string name="array_leaderboardNames19">Royal Jellies</string>
|
||||
<string name="array_leaderboardNames8">Papatya</string>
|
||||
<string name="array_leaderboardNames11">Zümrüt</string>
|
||||
<string name="array_leaderboardNames20">Powerstones</string>
|
||||
<string name="array_leaderboardNames12">Aşkıntaş</string>
|
||||
<string name="array_leaderboardNames14">Ana Görev: tur sayısı</string>
|
||||
<string name="array_leaderboardNames13">Ana Görev: gerçek zaman</string>
|
||||
<string name="array_leaderboardNames16">Aşkıntaş Görevi: tur sayısı</string>
|
||||
<string name="array_leaderboardNames15">Hyperstone Quest: gerçek zaman</string>
|
||||
<string name="array_leaderboardNames17">Yendor Küresi</string>
|
||||
<string name="array_leaderboardNames24">Kara Kitaplar</string>
|
||||
<string name="array_leaderboardNames25">Kutsal Kâseler</string>
|
||||
|
||||
<string name="array_leaderboardNames39">Akikler</string>
|
||||
<string name="array_leaderboardNames38">Unsurtaşları</string>
|
||||
<string name="array_leaderboardNames37">FildiÅŸi Kuleler</string>
|
||||
<string name="array_leaderboardNames42">Mutant Saplings</string>
|
||||
<string name="array_leaderboardNames43">Fulgurites</string>
|
||||
|
||||
<string name="title_princess">Save whom</string>
|
||||
<string name="array_prince0">Prince</string>
|
||||
<string name="array_prince1">Princess</string>
|
||||
|
||||
<string name="array_cheat_actions7">heptagonal mode</string>
|
||||
<string name="array_cheat_actionsy">Yendor Ek Görevi</string>
|
||||
<string name="array_cheat_actionsc">Chaos mode</string>
|
||||
<string name="array_leaderboardNames46">Black Lotuses</string>
|
||||
<string name="array_leaderboardNames47">Mutant Fruits</string>
|
||||
<string name="array_leaderboardNames48">White Dove Feathers</string>
|
||||
<string name="array_leaderboardNames51">Corals</string>
|
||||
<string name="array_leaderboardNames52">Thornless Roses</string>
|
||||
<string name="array_leaderboardNames53">Chaos Mode</string>
|
||||
<string name="array_leaderboardNames54">Tortoise Points</string>
|
||||
<string name="array_leaderboardNames55">Dragon Scales</string>
|
||||
<string name="array_leaderboardNames56">Apples</string>
|
||||
</resources>
|
293
hydroid/app/src/main/res/values/arrays.xml
Normal file
@ -0,0 +1,293 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="visionRange">
|
||||
<item name="4">@string/array_visionRange4</item>
|
||||
<item name="5">@string/array_visionRange5</item>
|
||||
<item name="6">@string/array_visionRange6</item>
|
||||
<item name="7">@string/array_visionRange7</item>
|
||||
</string-array>
|
||||
<string-array name="wallMode">
|
||||
<item name="0">@string/array_wallMode0</item>
|
||||
<item name="1">@string/array_wallMode1</item>
|
||||
<item name="2">@string/array_wallMode2</item>
|
||||
<item name="3">@string/array_wallMode3</item>
|
||||
</string-array>
|
||||
<string-array name="monsterMode">
|
||||
<item name="0">@string/array_monsterMode0</item>
|
||||
<item name="1">@string/array_monsterMode1</item>
|
||||
<item name="2">@string/array_monsterMode2</item>
|
||||
<item name="3">@string/array_monsterMode3</item>
|
||||
</string-array>
|
||||
<string-array name="visionRangeValues" translatable="false">
|
||||
<item name="4">4</item>
|
||||
<item name="5">5</item>
|
||||
<item name="6">6</item>
|
||||
<item name="7">7</item>
|
||||
</string-array>
|
||||
<string-array name="flashTimeValues" translatable="false">
|
||||
<item name="0">0</item>
|
||||
<item name="2">2</item>
|
||||
<item name="4">4</item>
|
||||
<item name="6">6</item>
|
||||
<item name="8">8</item>
|
||||
<item name="12">12</item>
|
||||
<item name="16">16</item>
|
||||
<item name="24">24</item>
|
||||
<item name="32">32</item>
|
||||
<item name="48">48</item>
|
||||
<item name="64">64</item>
|
||||
</string-array>
|
||||
<string-array name="monsterModeValues" translatable="false">
|
||||
<item name="0">0</item>
|
||||
<item name="1">1</item>
|
||||
<item name="2">2</item>
|
||||
<item name="3">3</item>
|
||||
</string-array>
|
||||
<string-array name="wallModeValues" translatable="false">
|
||||
<item name="0">0</item>
|
||||
<item name="1">1</item>
|
||||
<item name="2">2</item>
|
||||
<item name="3">3</item>
|
||||
</string-array>
|
||||
<string-array name="hyperMode">
|
||||
<item name="0">@string/array_hyperMode0</item>
|
||||
<item name="5">@string/array_hyperMode5</item>
|
||||
<item name="10">@string/array_hyperMode10</item>
|
||||
<item name="20">@string/array_hyperMode20</item>
|
||||
</string-array>
|
||||
<string-array name="hyperModeValues" translatable="false">
|
||||
<item name="0">0</item>
|
||||
<item name="5">0.5</item>
|
||||
<item name="10">1</item>
|
||||
<item name="20">2</item>
|
||||
</string-array>
|
||||
<string-array name="fontSize">
|
||||
<item name="25">@string/array_fontSize25</item>
|
||||
<item name="50">@string/array_fontSize50</item>
|
||||
<item name="75">@string/array_fontSize75</item>
|
||||
<item name="100">@string/array_fontSize100</item>
|
||||
<item name="150">@string/array_fontSize150</item>
|
||||
<item name="200">@string/array_fontSize200</item>
|
||||
<item name="300">@string/array_fontSize300</item>
|
||||
<item name="400">@string/array_fontSize400</item>
|
||||
</string-array>
|
||||
<string-array name="flashTime">
|
||||
<item name="0">@string/array_flashTime0</item>
|
||||
<item name="2">@string/array_flashTime2</item>
|
||||
<item name="4">@string/array_flashTime4</item>
|
||||
<item name="6">@string/array_flashTime6</item>
|
||||
<item name="8">@string/array_flashTime8</item>
|
||||
<item name="12">@string/array_flashTime12</item>
|
||||
<item name="16">@string/array_flashTime16</item>
|
||||
<item name="24">@string/array_flashTime24</item>
|
||||
<item name="32">@string/array_flashTime32</item>
|
||||
<item name="48">@string/array_flashTime48</item>
|
||||
<item name="64">@string/array_flashTime64</item>
|
||||
</string-array>
|
||||
<string-array name="fontSizeValues" translatable="false">
|
||||
<item name="25">25</item>
|
||||
<item name="50">50</item>
|
||||
<item name="75">75</item>
|
||||
<item name="100">100</item>
|
||||
<item name="150">150</item>
|
||||
<item name="200">200</item>
|
||||
<item name="300">300</item>
|
||||
<item name="400">400</item>
|
||||
</string-array>
|
||||
<string-array name="cheat_actions">
|
||||
<item name="e">@string/array_cheat_actionse</item>
|
||||
<item name="c">@string/array_cheat_actionsc</item>
|
||||
<item name="7">@string/array_cheat_actions7</item>
|
||||
<item name="y">@string/array_cheat_actionsy</item>
|
||||
<item name="a">@string/array_cheat_actionsa</item>
|
||||
<item name="l">@string/array_cheat_actionsl</item>
|
||||
<item name=".">@string/array_cheat_actionsb</item>
|
||||
<item name="S">@string/array_cheat_actionsS</item>
|
||||
<item name="L">@string/array_cheat_actionsL</item>
|
||||
<item name="U">@string/array_cheat_actionsU</item>
|
||||
<item name="F">@string/array_cheat_actionsF</item>
|
||||
<item name="C">@string/array_cheat_actionsC</item>
|
||||
<item name="M">@string/array_cheat_actionsM</item>
|
||||
<item name="G">@string/array_cheat_actionsG</item>
|
||||
<item name="Z">@string/array_cheat_actionsZ</item>
|
||||
<item name="J">@string/array_cheat_actionsJ</item>
|
||||
<item name="P">@string/array_cheat_actionsP</item>
|
||||
<item name="O">@string/array_cheat_actionsO</item>
|
||||
<item name="D">@string/array_cheat_actionsD</item>
|
||||
<item name="Y">@string/array_cheat_actionsY</item>
|
||||
<item name="T">@string/array_cheat_actionsT</item>
|
||||
<item name="Tx">@string/array_cheat_actionsTx</item>
|
||||
<item name="W">@string/array_cheat_actionsW</item>
|
||||
<item name="I">@string/array_cheat_actionsI</item>
|
||||
<item name="E">@string/array_cheat_actionsE</item>
|
||||
<item name="H">@string/array_cheat_actionsH</item>
|
||||
<item name="B">@string/array_cheat_actionsB</item>
|
||||
<item name="K">@string/array_cheat_actionsK</item>
|
||||
</string-array>
|
||||
<string-array name="cheat_action_values" translatable="false">
|
||||
<item name="e">e</item>
|
||||
<item name="c">c</item>
|
||||
<item name="7">7</item>
|
||||
<item name="y">y</item>
|
||||
<item name="a">a</item>
|
||||
<item name="l">l</item>
|
||||
<item name=".">.</item>
|
||||
<item name="S">S</item>
|
||||
<item name="L">L</item>
|
||||
<item name="U">U</item>
|
||||
<item name="F">F</item>
|
||||
<item name="C">C</item>
|
||||
<item name="M">M</item>
|
||||
<item name="G">G</item>
|
||||
<item name="Z">Z</item>
|
||||
<item name="J">J</item>
|
||||
<item name="P">P</item>
|
||||
<item name="O">O</item>
|
||||
<item name="D">D</item>
|
||||
<item name="Y">Y</item>
|
||||
<item name="T">T</item>
|
||||
<item name="Tx">Tx</item>
|
||||
<item name="W">W</item>
|
||||
<item name="I">I</item>
|
||||
<item name="E">E</item>
|
||||
<item name="H">H</item>
|
||||
<item name="B">B</item>
|
||||
<item name="K">K</item>
|
||||
</string-array>
|
||||
<string-array name="languageValues" translatable="false">
|
||||
<item name="0">0</item>
|
||||
<item name="1">1</item>
|
||||
<item name="2">2</item>
|
||||
<item name="3">3</item>
|
||||
<item name="4">4</item>
|
||||
<item name="5">5</item>
|
||||
</string-array>
|
||||
<string-array name="language" translatable="false">
|
||||
<item name="0">EN</item>
|
||||
<item name="1">PL</item>
|
||||
<item name="2">TR (7.1)</item>
|
||||
<item name="3">CZ</item>
|
||||
<item name="4">RU</item>
|
||||
<item name="5">DE (7.1, kein UI)</item>
|
||||
</string-array>
|
||||
<string-array name="characterValues" translatable="false">
|
||||
<item name="0">male</item>
|
||||
<item name="1">female</item>
|
||||
</string-array>
|
||||
<string-array name="character">
|
||||
<item name="0">@string/array_character0</item>
|
||||
<item name="1">@string/array_character1</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="princessValues" translatable="false">
|
||||
<item name="0">prince</item>
|
||||
<item name="1">princess</item>
|
||||
</string-array>
|
||||
<string-array name="princess">
|
||||
<item name="0">@string/array_prince0</item>
|
||||
<item name="1">@string/array_prince1</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="leaderboardNames">
|
||||
<item name="0">@string/array_leaderboardNames0</item>
|
||||
<item name="1">@string/array_leaderboardNames1</item>
|
||||
<item name="3">@string/array_leaderboardNames3</item>
|
||||
<item name="2">@string/array_leaderboardNames2</item>
|
||||
<item name="4">@string/array_leaderboardNames4</item>
|
||||
<item name="10">@string/array_leaderboardNames10</item>
|
||||
<item name="6">@string/array_leaderboardNames6</item>
|
||||
<item name="5">@string/array_leaderboardNames5</item>
|
||||
<item name="31">@string/array_leaderboardNames31</item>
|
||||
<item name="32">@string/array_leaderboardNames32</item>
|
||||
<item name="33">@string/array_leaderboardNames33</item>
|
||||
<item name="39">@string/array_leaderboardNames39</item>
|
||||
<item name="34">@string/array_leaderboardNames34</item>
|
||||
<item name="35">@string/array_leaderboardNames35</item>
|
||||
<item name="9">@string/array_leaderboardNames9</item>
|
||||
<item name="24">@string/array_leaderboardNames24</item>
|
||||
<item name="18">@string/array_leaderboardNames18</item>
|
||||
<item name="26">@string/array_leaderboardNames26</item>
|
||||
<item name="27">@string/array_leaderboardNames27</item>
|
||||
<item name="38">@string/array_leaderboardNames38</item>
|
||||
<item name="37">@string/array_leaderboardNames37</item>
|
||||
<item name="42">@string/array_leaderboardNames42</item>
|
||||
<item name="43">@string/array_leaderboardNames43</item>
|
||||
<item name="7">@string/array_leaderboardNames7</item>
|
||||
<item name="22">@string/array_leaderboardNames22</item>
|
||||
<item name="23">@string/array_leaderboardNames23</item>
|
||||
<item name="21">@string/array_leaderboardNames21</item>
|
||||
<item name="19">@string/array_leaderboardNames19</item>
|
||||
<item name="8">@string/array_leaderboardNames8</item>
|
||||
<item name="11">@string/array_leaderboardNames11</item>
|
||||
<item name="20">@string/array_leaderboardNames20</item>
|
||||
<item name="12">@string/array_leaderboardNames12</item>
|
||||
<item name="14">@string/array_leaderboardNames14</item>
|
||||
<item name="13">@string/array_leaderboardNames13</item>
|
||||
<item name="16">@string/array_leaderboardNames16</item>
|
||||
<item name="15">@string/array_leaderboardNames15</item>
|
||||
<item name="25">@string/array_leaderboardNames25</item>
|
||||
<item name="17">@string/array_leaderboardNames17</item>
|
||||
<item name="46">@string/array_leaderboardNames46</item>
|
||||
<item name="47">@string/array_leaderboardNames47</item>
|
||||
<item name="48">@string/array_leaderboardNames48</item>
|
||||
<item name="51">@string/array_leaderboardNames51</item>
|
||||
<item name="52">@string/array_leaderboardNames52</item>
|
||||
<item name="53">@string/array_leaderboardNames53</item>
|
||||
<item name="54">@string/array_leaderboardNames54</item>
|
||||
<item name="55">@string/array_leaderboardNames55</item>
|
||||
<item name="56">@string/array_leaderboardNames56</item>
|
||||
<item name="40">@string/array_cheat_actionsy</item>
|
||||
|
||||
</string-array>
|
||||
|
||||
<string-array name="leaderboardNamesOrder" translatable="false">
|
||||
<item name="0">0</item>
|
||||
<item name="1">1</item>
|
||||
<item name="3">3</item>
|
||||
<item name="2">2</item>
|
||||
<item name="4">4</item>
|
||||
<item name="10">10</item>
|
||||
<item name="6">6</item>
|
||||
<item name="5">5</item>
|
||||
<item name="31">31</item>
|
||||
<item name="32">32</item>
|
||||
<item name="33">33</item>
|
||||
<item name="39">39</item>
|
||||
<item name="34">34</item>
|
||||
<item name="35">35</item>
|
||||
<item name="9">9</item>
|
||||
<item name="24">24</item>
|
||||
<item name="18">18</item>
|
||||
<item name="26">26</item>
|
||||
<item name="27">27</item>
|
||||
<item name="38">38</item>
|
||||
<item name="37">37</item>
|
||||
<item name="42">42</item>
|
||||
<item name="43">43</item>
|
||||
<item name="7">7</item>
|
||||
<item name="22">22</item>
|
||||
<item name="23">23</item>
|
||||
<item name="21">21</item>
|
||||
<item name="19">19</item>
|
||||
<item name="8">8</item>
|
||||
<item name="11">11</item>
|
||||
<item name="20">20</item>
|
||||
<item name="12">12</item>
|
||||
<item name="14">14</item>
|
||||
<item name="13">13</item>
|
||||
<item name="16">16</item>
|
||||
<item name="15">15</item>
|
||||
<item name="25">25</item>
|
||||
<item name="17">17</item>
|
||||
<item name="46">46</item>
|
||||
<item name="47">47</item>
|
||||
<item name="48">48</item>
|
||||
<item name="51">51</item>
|
||||
<item name="52">52</item>
|
||||
<item name="53">53</item>
|
||||
<item name="54">54</item>
|
||||
<item name="55">55</item>
|
||||
<item name="56">56</item>
|
||||
<item name="40">40</item>
|
||||
</string-array>
|
||||
</resources>
|
182
hydroid/app/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,182 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="langcode">EN</string>
|
||||
<string name="app_name">HyperRogue</string>
|
||||
<string name="signinother">Signin failure</string>
|
||||
<string name="app_id">480859409970</string>
|
||||
<string name="signin_other_error">There was an issue with sign in, please try again later.</string>
|
||||
<string name="sharesam">share screenshot and message</string>
|
||||
<string name="sharemsg">share message only</string>
|
||||
<string name="copymsg">copy message</string>
|
||||
<string name="sharehow">Share what and how?</string>
|
||||
<string name="sharevia">Share via:</string>
|
||||
<string name="copied">Copied to Clipboard</string>
|
||||
<string name="yourwish">Your wish, Rogue?</string>
|
||||
<string name="notconnected">Not connected!</string>
|
||||
<string name="aboutgold">about HyperRogue Gold</string>
|
||||
<string name="buy">buy</string>
|
||||
<string name="info">info</string>
|
||||
<string name="nothanks">no thanks</string>
|
||||
<string name="goldfeatures">
|
||||
Buy HyperRogue Gold to get the following additional features:\n\
|
||||
- achievements and leaderboards\n\
|
||||
- more frequent updates (new lands planned!)\n\
|
||||
- an Euclidean mode, to see why the geometry matters\n\
|
||||
- cheating features\n\
|
||||
</string>
|
||||
|
||||
<string name="title_settings">Settings</string>
|
||||
<string name="title_log">Game log</string>
|
||||
<string name="title_help">View the help screen</string>
|
||||
<string name="title_quest">Quest log/restart</string>
|
||||
<string name="title_cheat">HyperRogue Gold features</string>
|
||||
<string name="title_share">Share score/screenshot</string>
|
||||
<string name="title_overview">World Overview</string>
|
||||
|
||||
<string name="title_gameservices">Connect to Google Game Services</string>
|
||||
<string name="summary_gameservices">Online achievements and leaderboards</string>
|
||||
<string name="title_language">Language</string>
|
||||
<string name="summary_language">Select your language</string>
|
||||
<string name="title_character">Player character</string>
|
||||
<string name="summary_character">Male or female</string>
|
||||
<string name="title_hsightrange">Sight range</string>
|
||||
<string name="summary_hsightrange">use a lower value to make the game run faster</string>
|
||||
<string name="title_hwallmode">Wall mode</string>
|
||||
<string name="summary_hwallmode">How to display walls?</string>
|
||||
<string name="title_hmonmode">Monster mode</string>
|
||||
<string name="summary_hmonmode">How to display monsters and items?</string>
|
||||
<string name="title_hypermode">Hyperbolic plane model (view)</string>
|
||||
<string name="summary_hypermode">Klein, Poincaré, ...</string>
|
||||
<string name="title_fontsize">Font size</string>
|
||||
<string name="title_flashtime">Flash time</string>
|
||||
<string name="summary_flashtime">for how long should the messages be shown</string>
|
||||
<string name="title_revmove">Reverse movement</string>
|
||||
<string name="summary_revmove">push the character from behind</string>
|
||||
<string name="title_nomusic">Play without music</string>
|
||||
<string name="summary_nomusic">do not play any music</string>
|
||||
<string name="title_immersive">Fullscreen mode</string>
|
||||
<string name="summary_immersive">swipe inward to display system bars</string>
|
||||
<string name="title_usegl">Use OpenGL</string>
|
||||
<string name="summary_usegl">OpenGL sometimes works better, sometimes worse</string>
|
||||
<string name="title_website">Go to the HyperRogue website</string>
|
||||
<string name="summary_website">play the faster desktop version too!</string>
|
||||
|
||||
<string name="array_visionRange4">4 (very restricted)</string>
|
||||
<string name="array_visionRange5">5 (restricted)</string>
|
||||
<string name="array_visionRange6">6 (slightly faster)</string>
|
||||
<string name="array_visionRange7">7 (full)</string>
|
||||
<string name="array_wallMode0">ASCII (fast)</string>
|
||||
<string name="array_wallMode1">Black</string>
|
||||
<string name="array_wallMode2">plain</string>
|
||||
<string name="array_wallMode3">Escher (slow)</string>
|
||||
<string name="array_monsterMode0">ASCII (fast)</string>
|
||||
<string name="array_monsterMode1">items only</string>
|
||||
<string name="array_monsterMode2">items and monsters</string>
|
||||
<string name="array_monsterMode3">high contrast</string>
|
||||
<string name="array_hyperMode0">Klein (0)</string>
|
||||
<string name="array_hyperMode5">Middle (0.5)</string>
|
||||
<string name="array_hyperMode10">Poincaré (1)</string>
|
||||
<string name="array_hyperMode20">distant (2)</string>
|
||||
<string name="array_fontSize25">Tiny (25%)</string>
|
||||
<string name="array_fontSize50">Small (50%)</string>
|
||||
<string name="array_fontSize75">Smallish (75%)</string>
|
||||
<string name="array_fontSize100">Normal (100%)</string>
|
||||
<string name="array_fontSize150">Large (150%)</string>
|
||||
<string name="array_fontSize200">Big (200%)</string>
|
||||
<string name="array_fontSize300">Very big (300%)</string>
|
||||
<string name="array_fontSize400">Huge (400%)</string>
|
||||
<string name="array_flashTime0">no messages</string>
|
||||
<string name="array_flashTime2">extremely quick (25%)</string>
|
||||
<string name="array_flashTime4">very quick (50%)</string>
|
||||
<string name="array_flashTime6">quick (75%)</string>
|
||||
<string name="array_flashTime8">rather quick (100%)</string>
|
||||
<string name="array_flashTime12">normal (150%)</string>
|
||||
<string name="array_flashTime16">rather slow (2x)</string>
|
||||
<string name="array_flashTime24">slow (3x)</string>
|
||||
<string name="array_flashTime32">very slow (4x)</string>
|
||||
<string name="array_flashTime48">really slow (6x)</string>
|
||||
<string name="array_flashTime64">extremely slow (8x)</string>
|
||||
<string name="array_cheat_actionse">Euclidean mode</string>
|
||||
<string name="array_cheat_actionsa">Achievements</string>
|
||||
<string name="array_cheat_actionsl">Leaderboards</string>
|
||||
<string name="array_cheat_actionsb">** cheats are below **</string>
|
||||
<string name="array_cheat_actionsS">Safety (quick save)</string>
|
||||
<string name="array_cheat_actionsL">Select the land ---</string>
|
||||
<string name="array_cheat_actionsU">--- and teleport there</string>
|
||||
<string name="array_cheat_actionsF">gain orb powers</string>
|
||||
<string name="array_cheat_actionsC">Hyperstone Quest</string>
|
||||
<string name="array_cheat_actionsM">summon Mimics</string>
|
||||
<string name="array_cheat_actionsG">summon a Golem</string>
|
||||
<string name="array_cheat_actionsZ">rotate the character</string>
|
||||
<string name="array_cheat_actionsJ">lose all treasure</string>
|
||||
<string name="array_cheat_actionsP">deplete orb powers</string>
|
||||
<string name="array_cheat_actionsO">summon orbs</string>
|
||||
<string name="array_cheat_actionsD">summon dead orbs</string>
|
||||
<string name="array_cheat_actionsY">summon Orb of Yendor</string>
|
||||
<string name="array_cheat_actionsT">summon treasure</string>
|
||||
<string name="array_cheat_actionsTx">summon lots of treasure</string>
|
||||
<string name="array_cheat_actionsW">summon Sand Worm</string>
|
||||
<string name="array_cheat_actionsI">summon Ivy</string>
|
||||
<string name="array_cheat_actionsE">summon a Monster</string>
|
||||
<string name="array_cheat_actionsH">summon Thumpers</string>
|
||||
<string name="array_cheat_actionsB">summon Bonfire</string>
|
||||
<string name="array_cheat_actionsK">gain kills</string>
|
||||
<string name="array_character0">male</string>
|
||||
<string name="array_character1">female</string>
|
||||
<string name="array_leaderboardNames0">Score</string>
|
||||
<string name="array_leaderboardNames1">Diamonds</string>
|
||||
<string name="array_leaderboardNames3">Spice</string>
|
||||
<string name="array_leaderboardNames2">Gold</string>
|
||||
<string name="array_leaderboardNames4">Rubies</string>
|
||||
<string name="array_leaderboardNames10">Feathers</string>
|
||||
<string name="array_leaderboardNames6">Shards</string>
|
||||
<string name="array_leaderboardNames5">Elixirs</string>
|
||||
<string name="array_leaderboardNames31">Bomberbird Eggs</string>
|
||||
<string name="array_leaderboardNames32">Ambers</string>
|
||||
<string name="array_leaderboardNames33">Pearls</string>
|
||||
<string name="array_leaderboardNames39">Onyxes</string>
|
||||
<string name="array_leaderboardNames34">Hypersian Rugs</string>
|
||||
<string name="array_leaderboardNames35">Garnets</string>
|
||||
<string name="array_leaderboardNames9">Statues</string>
|
||||
<string name="array_leaderboardNames24">Grimoires</string>
|
||||
<string name="array_leaderboardNames18">Fern Flowers</string>
|
||||
<string name="array_leaderboardNames26">Red Gems</string>
|
||||
<string name="array_leaderboardNames27">Pirate Treasures</string>
|
||||
<string name="array_leaderboardNames38">Elemental Gems</string>
|
||||
<string name="array_leaderboardNames37">Ivory Figurines</string>
|
||||
<string name="array_leaderboardNames42">Mutant Saplings</string>
|
||||
<string name="array_leaderboardNames43">Fulgurites</string>
|
||||
<string name="array_leaderboardNames7">Totems</string>
|
||||
<string name="array_leaderboardNames22">Wine</string>
|
||||
<string name="array_leaderboardNames23">Emeralds</string>
|
||||
<string name="array_leaderboardNames21">Silver</string>
|
||||
<string name="array_leaderboardNames19">Royal Jellies</string>
|
||||
<string name="array_leaderboardNames8">Daisies</string>
|
||||
<string name="array_leaderboardNames11">Sapphires</string>
|
||||
<string name="array_leaderboardNames20">Powerstones</string>
|
||||
<string name="array_leaderboardNames12">Hyperstones</string>
|
||||
<string name="array_leaderboardNames14">Main Quest: number of turns</string>
|
||||
<string name="array_leaderboardNames13">Main Quest: real time</string>
|
||||
<string name="array_leaderboardNames16">Hyperstone Quest: number of turns</string>
|
||||
<string name="array_leaderboardNames15">Hyperstone Quest: real time</string>
|
||||
<string name="array_leaderboardNames25">Holy Grails</string>
|
||||
<string name="array_leaderboardNames17">Orbs of Yendor</string>
|
||||
|
||||
|
||||
<string name="title_princess">Save whom</string>
|
||||
<string name="array_prince0">Prince</string>
|
||||
<string name="array_prince1">Princess</string>
|
||||
|
||||
<string name="array_cheat_actions7">heptagonal mode</string>
|
||||
<string name="array_cheat_actionsy">Yendor Challenge</string>
|
||||
<string name="array_cheat_actionsc">Chaos mode</string>
|
||||
<string name="array_leaderboardNames46">Black Lotuses</string>
|
||||
<string name="array_leaderboardNames47">Mutant Fruits</string>
|
||||
<string name="array_leaderboardNames48">White Dove Feathers</string>
|
||||
<string name="array_leaderboardNames51">Corals</string>
|
||||
<string name="array_leaderboardNames52">Thornless Roses</string>
|
||||
<string name="array_leaderboardNames53">Chaos Mode</string>
|
||||
<string name="array_leaderboardNames54">Tortoise Points</string>
|
||||
<string name="array_leaderboardNames55">Dragon Scales</string>
|
||||
<string name="array_leaderboardNames56">Apples</string>
|
||||
</resources>
|
113
hydroid/app/src/main/res/xml/preferences.xml
Normal file
@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<CheckBoxPreference
|
||||
android:key="gameservices"
|
||||
android:title="@string/title_gameservices"
|
||||
android:summary="@string/summary_gameservices"
|
||||
android:defaultValue="false"
|
||||
></CheckBoxPreference>
|
||||
<ListPreference
|
||||
android:key="language"
|
||||
android:title="@string/title_language"
|
||||
android:summary="@string/summary_language"
|
||||
android:defaultValue="0"
|
||||
android:entries="@array/language"
|
||||
android:entryValues="@array/languageValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="character"
|
||||
android:title="@string/title_character"
|
||||
android:summary="@string/summary_character"
|
||||
android:defaultValue="male"
|
||||
android:entries="@array/character"
|
||||
android:entryValues="@array/characterValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="princess"
|
||||
android:title="@string/title_princess"
|
||||
android:defaultValue="princess"
|
||||
android:entries="@array/princess"
|
||||
android:entryValues="@array/princessValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="hsightrange"
|
||||
android:title="@string/title_hsightrange"
|
||||
android:summary="@string/summary_hsightrange"
|
||||
android:defaultValue="7"
|
||||
android:entries="@array/visionRange"
|
||||
android:entryValues="@array/visionRangeValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="hwallmode"
|
||||
android:title="@string/title_hwallmode"
|
||||
android:summary="@string/summary_hwallmode"
|
||||
android:defaultValue="3"
|
||||
android:entries="@array/wallMode"
|
||||
android:entryValues="@array/wallModeValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="hmonmode"
|
||||
android:title="@string/title_hmonmode"
|
||||
android:summary="@string/summary_hmonmode"
|
||||
android:defaultValue="2"
|
||||
android:entries="@array/monsterMode"
|
||||
android:entryValues="@array/monsterModeValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="hypermode"
|
||||
android:title="@string/title_hypermode"
|
||||
android:summary="@string/summary_hypermode"
|
||||
android:defaultValue="1"
|
||||
android:entries="@array/hyperMode"
|
||||
android:entryValues="@array/hyperModeValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="fontsize"
|
||||
android:title="@string/title_fontsize"
|
||||
android:defaultValue="100"
|
||||
android:entries="@array/fontSize"
|
||||
android:entryValues="@array/fontSizeValues"
|
||||
></ListPreference>
|
||||
<ListPreference
|
||||
android:key="flashtime"
|
||||
android:title="@string/title_flashtime"
|
||||
android:summary="@string/summary_flashtime"
|
||||
android:defaultValue="12"
|
||||
android:entries="@array/flashTime"
|
||||
android:entryValues="@array/flashTimeValues"
|
||||
></ListPreference>
|
||||
<CheckBoxPreference
|
||||
android:key="revmove"
|
||||
android:title="@string/title_revmove"
|
||||
android:summary="@string/summary_revmove"
|
||||
android:defaultValue="false"
|
||||
></CheckBoxPreference>
|
||||
<CheckBoxPreference
|
||||
android:key="nomusic"
|
||||
android:title="@string/title_nomusic"
|
||||
android:summary="@string/summary_nomusic"
|
||||
android:defaultValue="false"
|
||||
></CheckBoxPreference>
|
||||
<CheckBoxPreference
|
||||
android:key="immersive"
|
||||
android:title="@string/title_immersive"
|
||||
android:summary="@string/summary_immersive"
|
||||
android:defaultValue="false"
|
||||
></CheckBoxPreference>
|
||||
<CheckBoxPreference
|
||||
android:key="usegl"
|
||||
android:title="@string/title_usegl"
|
||||
android:summary="@string/summary_usegl"
|
||||
android:defaultValue="true"
|
||||
></CheckBoxPreference>
|
||||
<Preference
|
||||
android:title="@string/title_website"
|
||||
android:summary="@string/summary_website"
|
||||
>
|
||||
<intent android:action="android.intent.action.VIEW"
|
||||
android:data="http://www.roguetemple.com/z/hyper.php"
|
||||
/>
|
||||
|
||||
</Preference>
|
||||
|
||||
</PreferenceScreen>
|
15
hydroid/build.gradle
Normal file
@ -0,0 +1,15 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.3.0'
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
}
|
7
hydroid/copy.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
mkdir app/src/main/assets/sounds
|
||||
cp ../sounds/* app/src/main/assets/sounds/
|
||||
mkdir app/src/main/res/raw/
|
||||
for x in caves crossroads desert graveyard hell icyland jungle laboratory mirror rlyeh
|
||||
do cp ../music/hr3-$x.ogg app/src/main/res/raw/$x.ogg
|
||||
done
|
BIN
hydroid/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
6
hydroid/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
#Thu Feb 09 18:36:08 CET 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
|
164
hydroid/gradlew
vendored
Normal file
@ -0,0 +1,164 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
||||
if $cygwin ; then
|
||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
fi
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >&-
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >&-
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
}
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
90
hydroid/gradlew.bat
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
19
hydroid/hyperroid.iml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="hyperroid" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="java-gradle" name="Java-Gradle">
|
||||
<configuration>
|
||||
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
|
||||
<option name="BUILDABLE" value="false" />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
1
hydroid/settings.gradle
Normal file
@ -0,0 +1 @@
|
||||
include ':app'
|
21
hydroid/work.iml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="java-gradle" name="Java-Gradle">
|
||||
<configuration>
|
||||
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
||||
<output url="file://$MODULE_DIR$/build/classes/main" />
|
||||
<output-test url="file://$MODULE_DIR$/build/classes/test" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
|