Make an Android Game in one month (outside working hours)

Started by inelokii, November 20, 2013, 01:34:11 PM

Previous topic - Next topic

inelokii

My biggest problem, I think most of you have already been confronted to, is the following:
in terms of project size, I always start something that I am not able to finish.

So I started a new challenge: create a video game in one month. A month to have a playable version on Google Play, and a second month to finish the big features and tweaking the gameplay.

If you are interested to take this challenge, please visit: https://www.facebook.com/pages/Space-Royals-Sound/232469776922019 and click "like" the page (French page, but I will write news in this thread in English).
Clicking to the "like" button is very important, cause I can estimate how many people are interested in, and if I have more people understanding english than french, I will translate this facebook page to english.

In particular you can find the presentation of the project in English. Another link for more convenient viewing this short presentation:
https://docs.google.com/presentation/d/1Yvxt-_Efk5s_sZjfKK-NbbaPB68Jj_oYLw88diD5QwE/edit?usp=sharing

Regarding the game to develop itself, here are some details.
Space Royals Sound is a shoot 'em up in landscape view, in which the player controls a spaceship. Its purpose is to arrive at its destination safely, exploding asteroids on its way.

Two features in relation to this game gender make it unique.
You can find them on the presentation schemes (link below), but here are short description.

On one hand, the music will affect the provision of asteroids. Like rhythm games, asteroids will be placed according to the tempo and tone of the music changes. To complete this specificity, the player can import the music stored on your smartphone / tablet, making game lifetime almost infinite.

On the other hand, some asteroids are not visible on the screen. How the player will be able to destroy them? It will have at its disposal a scanner mechanism, controlled by finger pressure on the screen. Low pressure will move the scanned area to the left, a bigger pressure to le right.
If you have any question or comment, do not hesitate!

inelokii

A lot of things have been achieved since November 20th, and I'd like to show you my work with a little technical video (without game sound, I haven't found any free software to record both image and sound)!
http://youtu.be/fRehPA-nQ8w

The first step is done : the development of the display and the basics of gameplay.

I'm not totally satisfied about the display and the demo store google play.
I intend to do:
- Create and animate a background ("stars sky")
- Send information on google play store (pictures, video, description) associated with the demo
- Create a support tool in order to allow you bug reporting (via a google form)


Technical point :
I made this video with a beta version of Bluestack (Android simulator) instead of emulators for 2 reasons:
- ARM emulators are very slow..
- INTEL x86 emulator (with the hardware accelerator tool) is fast enough, but display is totally wrong  (see picture in attachment) :'(

If someone have an idea to avoid display bug on INTEL emulator, it would be a pleasure to test it ;)!


[attachment deleted by admin]

inelokii

I found a solution to my problem by myself  ;D (It was my bad  :-[)!

In fact, I have a method loading automatically resources as Texture, by rescaling the Bitmap to the nearest power of 2. But for some devices, Android recommands to load a picture 512x512 as a 1024x1024 picture (when using Context.getResources().getDrawable(R.id.......)).
So I had to find another way to retrieve the real picture size instead of using Drawable methods. Which is done now by using the BitmapFactory!

Explanations through the code:

Wrong way to scale automatically pictures:

String resourceName = context.getResources().getResourceEntryName(resourceID);
Drawable drawable = context.getResources().getDrawable(resourceID);
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
// set to highest width that is a power of 2 (troncate)
int new_width = Integer.highestOneBit(width);
int new_height = Integer.highestOneBit(height);
// ..... (I removed code asserting that texture is not already loaded)
Texture tex = new Texture(BitmapHelper.rescale(
BitmapHelper.convert(drawable), new_width, new_height));

Warning : getIntrinsicWidth and getIntrinsicHeight (Drawable methods) returns only Android advise about width and height the texture should have. In my case, these methods return an integer (between 1024 and 2047) for a picture 512x512 for some devices only...

Better way to scale pictures:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(context.getResources(), resourceID, options);
int width = options.outWidth;
int height = options.outHeight;
// set to highest width that is a power of 2 (troncate)
int new_width = Integer.highestOneBit(width);
int new_height = Integer.highestOneBit(height);
// ..... (I removed code asserting that texture is not already loaded)
Texture tex = new Texture(BitmapHelper.rescale(
BitmapHelper.convert(context.getResources().getDrawable(resourceID)), new_width, new_height));

EgonOlsen

That's why i always say: Don't store your textures in drawable. Put them into raw or into assets, but not into drawable.