Monday, November 16, 2009

Major Warhead Game For Free

Hey Guys,

Softway Solutions - sister company -- Drillbit Studios, LLC -- is giving away its Major Warhead Game for free on the itunes store for a Limited time only.. Please do check it out.

Get Major Warhead for FREE on app store for a limited time by Drillbit Studios.


Major Warhead is a single player base defense game where you command various weaponry available at the remote military base to defend from oncoming hoard of enemies.



Gameplay Video

iTunes page link:

Get Major Warhead now for FREE. here.


What sets Major Warhead different than existing Base Defense games?

Unique Attack Waves: No enemy wave follows the same path, each of the attack wave you encounter is different.

Stunning graphics combined with great sound effects and background music

Fluid controls for each of the defensive units

Strategic element to use the money earned to repair the base.


Gameplay Video 

Screenshots:





*************************
* FREE for a limited time
*************************



Excerpts from the reviews on iTunes

Likes:

Gorgeous Graphics: one of the best graphics available for iPhone/iPod touch game. Decals for dead soldiers, wreckage for vehicles, smoke, trails, etc are well done. Comic style art is a cool touch.

Sound Effects: Funny voiceovers, ample SFXs to keep the action intense.

Controls: Fluid control system.

Pace: Easy to pick up, difficult to master.



Leave your replies and reviews.

Thanks !!

Tuesday, October 20, 2009

Verizon, Motorola, Google DROID Vs iPhone

I was watching this Ad the other day about an iPhone killer that Google, Motorolla and Verizon are pitcing. Check out the iDon't Ad


In my opinion, it will be very difficult to see an iPhone killer until a single company controls the OS and the Hardware, just like Apple does. We can help you develop mobile applications and game development for both iPhone and Android, so it would be a welcome addition.


check out more of the discussion on this subject here
Follow up answer on the discussion about Microsoft defying my logic below.

If that’s the case the same formula should have applied to windows mobile, but it has a market share of 0.04% according to marketshare.hitslink.com. This will take me off on a tangent, but Microsoft was smart in taking advantage of the market and provided their OS bundled with value PC's, but that’s what these PC's are, cheap. Do you think Mac and Linux, as they are today, would have survived, if a need did not exist. There was a requirement for a better operating system with fewer bugs and viruses. If you have not tried it yet, try running the Windows OS on a Mac, you will see the performance difference. Don’t get me wrong I am not a Apple fan boy in any way, in fact, I hate the fact that you have to purchase every small thing that you have come to expect free with a PC. I admit that I am running a windows OS because certain programs only run on windows, but the topic was iPhone killers. Droid although good, is no were near killing the iPhone. Microsoft might be closer to something good with Zune once they decide to push the device in the right direction.

Thursday, July 2, 2009

Onseeker Music Iphone Application

Softway Solutions, Inc. successfully completed their development of the Onseeker Music application for the Iphone last month. The app was developed by a team of 3 developers and took approximately 3 months to complete.

The Iphone application allows users to look for live music events based on their GPS location or by zipcode. It also allows the fans to follow artists and or venues and get regular updates from them. The app has other features such as playlists that can be customized by the app user. These are some of the very few rich features of the Iphone application.

Softway Solutions is currently in the process of developing the Onseeker music application for other smart phons such as the Google Android and Blacberry phones.

Softway Solutions is currently working on numerous Iphone applications and Iphone games that shall be released in the very near future. We shall keep you posted on our progress as we get close to launching them.

You can learn more about Onseeker Music by going to the url: www.onseekermusic.com

Iphone game development using Cocos2d

Iphone game development is a very attractive prospect for any company. We evaluated several engines oolong, unity and cocos2d. Out of the three cocos came out to be the most promising for a 2D platformer, side shooter or a tower defense game. In this blog we discuss how the engine is sturctured and how to get started with the development on cocos2D.

The engine is basically divided into a Director which looks over all of the resource management. It is a singleton class which ensures that only one instance of director is in use. It is the starting point of any application that use cocos2d. So first we create a windows based application in our Xcode project creation wizard. Then in the application delegate class of our iphone game project we add the following code.

UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[window setUserInteractionEnabled:YES];
[window setMultipleTouchEnabled:YES];
[[Director sharedDirector]setDeviceOrientation:CCDeviceOrientationLandscapeLeft];
[[Director sharedDirector] setDisplayFPS:YES];
[[Director sharedDirector] attachInWindow:window];

[window makeKeyAndVisible];

Scene *gamesScene = [Scene node];
[[Director sharedDirector] runWithScene:gamesScene];

We ensure that we include the file cocos2d.h to ensure there are no compilation errors. The next step is to ensure that we link our application to the cocos2d libraries. To do that we go to Project> Edit Project Settings > Linker Search paths and set the path of the cocos2d library for linking. Hit the build and ensure there are no linker errors. And you would have your first cocos2d starter app ready.

I will be posting the code and screenshots of the process very soon. Till then keep on reading.

Alok Rao
Softway Solutions, Inc
Chief Software Architect
www.softwaysolutions.com

Tuesday, June 2, 2009

3D Animation and Illustration for Accident scene recreation

We were asked to work on a litigation animation showing the environment that this accident occurred. Since actual enactment of the accident scene in not permitted to be shown to the jury, we were asked to recreate the conditions and the actual accident scene. This is a very intense process since each small detail matters in the litigation in assisting the case. We recreated the accident scene from client photographs and blueprints of the area. Once the initial model is created we provide several illustrations for the each of the camera angles. The final product ends up being a smooth 3D Animation with detail lighting and textures closer to reality. We are in the final steps of the 3D Animation process and the litigation team is happy with our capabilities and what we can do with the resources and information that were disclosed to us.
Some other services that we provide for Multimedia projects are
3D Graphics
Models
3D Character
3D Illustrations
Video Production with Special Effects
3D Animation videos
Voice Over Services
Character Design and Animation
Architectural walkthrough animation

Interesting Flex website project

We are currently working on a very unique and interesting project that will allow you to take the very popular landmark and customize it according to your needs. The customized product can be used as a gift or keepsake memorabilia. The website is built using Flex and web 2.0 technology in combination with a ecommerce shopping cart and its functionality. We are extensively using imagemagik to manipulate the images on the banners for the end users. The banners are customized in a small low resolution version suited for the web, once the customization is completed by the end user the high resolutions full size banner is processed allowing the administrators to print the banner or use it on their other products. One of the challenges that we faced in the project was skewing an image in a 3d environment. This was resolved through imagemagik and manipulating the image set. we plan on expanding the functionality of this site and making it more robust and user friendly once the site is released in beta. The project is currently in developer beta and expected to be made public beta in early June.

Some other commonly used web 2.0 rich application technology that we are familiar with and have worked on in the past
Ruby On Rails
Cake Php
Flex
SilverLight
J Query
Java Fx
Google Webkit

Thursday, May 28, 2009

Subscription Based Ecommerce Solutions

Some of the most successfull ecommerce websites are subscribtion based ecommerce websites. There are numerous subscription model ecommerce websites sprouting up quite recently and are also quite successful.

The trick is to provide a service that will help in incurring a recurring income. The advantages are that once an effort is made to sell a subscription, that one time sale guarantees a residual income through the life of the account. Over a period of time the revenue could grow and the ecommerce site / solution can become very lucrative.

Before you decide to design and build a subscription based Ecommerce website. Keep the followin things in mind.

1) Provide / Render a service through the site that is of value and useful to the customer
2) Keep the cost of the subscription reasonably priced with amounts such as $ 4.95, $9.95 or such to help keep the subscription amount being noticable on the credit card statements of the customer.
3) Keep upgrading the services and add new features regularly to keep the subscriptions alive and attract new users.
4) Use Viral Marketing techniques to promote your subscription service and enable the users to virally spread your service by enabling shares to popular networking platforms.

These are just some good points to keep in mind to help you create your next Subscription based ecommerce website. If you would like to learn more about services that Softway Solutions offers with respect to ecommerce services you can visit our Ecommerce website design page and or visit www.softwaysolutions.com to learn more about the different services that our team can help you with.

Friday, January 23, 2009

OpenGL Texture from a non-local source on Android.

I started working on the Android platform a few days ago and there were things I liked already. Few clients from around Houston approached Softway Solutions to get some mobile application development done on the IPhone and Android. The application had some 3D aspects. At Softway Solutions we had started prototyping on Android since the early days. So I started working on a prototype that utilizes the OpenGL ES framework. This example is built upon the OpenGL ES samples that come with the Android SDK. So let us begin.

First we start off by creating an opengl texture class. Lets call it GLTexture.java.

[code lang="java"]

public class GLTexture implements ITexture {
/*
* OpenGL ES context for drawing etc....
*/
GL10 mGl;
/*
* ID of the texture created. Its used for OpenGL internal texture binding function.
*/
int mTextureID;
/*
* Name of the texture to identify it if its is placed in a texture cache.
* Helps in reusing a certain texture.
*/
String mName;
/*
* Constructor for creating the texture. Parameters are the Opengl handle, Application Context
* and Android resource id. This is if we want to load the texture from an android application resource.
*/

public GLTexture(GL10 gl, Context context, int resource){
mGl = gl;
surfaceCreated(context, resource);
}
/*
* Constructor for creating the texture. Parameters are the Opengl handle, Application Context
* and the URl of the texture. This is if we want to load the texture from a url on the internet.
*/

public GLTexture(GL10 gl, Context context, String url){
mGl = gl;
createTextureFromUrl(context, url);
}
/*
* Constructor for creating the texture. Parameters are the Opengl handle, Application Context
* and the Bitmap Object. This is if we want to load the texture from an already exisiting bitmap object.
*/

public GLTexture(GL10 gl, Context context, Bitmap bmp) {
setGLParams();
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);

}

[/code]

Then the next step is to add the necessary functions to create the Opengl Texture


/*
* This functions sets the basic state for an opengl texture to be created.
*/
private void setGLParams() {
/*
* By default, OpenGL enables features that improve quality
* but reduce performance. One might want to tweak that
* especially on software renderer.
*/
mGl.glDisable(GL10.GL_DITHER);

/*
* Some one-time OpenGL initialization can be made here
* probably based on features of this particular context
*/
mGl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
GL10.GL_FASTEST);

mGl.glClearColor(.5f, .5f, .5f, 1);
mGl.glShadeModel(GL10.GL_SMOOTH);
mGl.glEnable(GL10.GL_DEPTH_TEST);
mGl.glEnable(GL10.GL_TEXTURE_2D);

/*
* Create our texture. This has to be done each time the
* surface is created.
*/
int[] textures = new int[1];

mGl.glGenTextures(1, textures, 0);

mTextureID = textures[0];

mGl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);
mGl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_NEAREST);
mGl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);

mGl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_CLAMP_TO_EDGE);
mGl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_CLAMP_TO_EDGE);

mGl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_REPLACE);
}


This sets up the OpenGL pipeline to create and bind the texture. Next step would be to have a function which allows us to load the texture data from different sources. Lets first get the texture loaded from a resource.


/*
* This function is called to create a texture from a resource file.
*/

protected void surfaceCreated(Context context, int resource) {
// Sets the OpenGL parameteres

setGLParams();

// Fetches the input stream from the context to get the data from the packed Android resources

InputStream is = context.getResources()
.openRawResource(resource);

Bitmap bitmap;
try {

// Decodes the bitmap stream to give us the final bitmap data. This function also takes care of the filetype for the resource

bitmap = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch(IOException e) {
// Ignore.
}
}
// Creates the acutal texture.

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

// Free the memory used by the bitmap object. The texture data has now been passed to the opengl pipeline.

bitmap.recycle();
}


Now we shall create a texture from an internet resource i.e. a texture from a URL.


/*
* This function takes the context and the string address of the texture.
*/

protected void createTextureFromUrl(Context context, String address) {
// Sets the OpenGL parameteres

setGLParams();
Bitmap bitmap = null;
try{
// Creates the URL object to load up the data from the internet.

URL url = new URL(address);
try{

// This function gets the content of the URL. We typecast it to an InputStream Object as that is what will be returned. If the file is missing it will throw an exception which will be caught in the try catch block.

InputStream is = (InputStream)url.getContent();
// Decodes the bitmap stream to give us the final bitmap data. This function also takes care of the filetype for the resource

bitmap = BitmapFactory.decodeStream(is);

}catch(IOException e){
Log.e("Bitmap streaming failed", "failed");
}
}
catch(MalformedURLException e) {
Log.e("malformed url", "failed");
}

// Create the texture

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
// Clean up and release memory used by bitmap object.

bitmap.recycle();
}


Now we shall implement the texture setting function which will apply this texture tothe primitive objects we want to draw.

[code lang="java"]

/*
* This function sets the texture just before drawing a set of primitives.
* This helps in applying textures to certain objects only.
*/

public void setTexture(){
mGl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);
mGl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

mGl.glActiveTexture(GL10.GL_TEXTURE0);
mGl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);
mGl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_REPEAT);
mGl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_REPEAT);
}

[/code]

Now that our class is created. Lets test it in our test bed application derived from the API Demos from the Android SDK.

public class GLTestBed implements GLSurfaceView.Renderer{

private Context mContext;
private Triangle mTriangle;

// We declare our texture object.

private GLTexture mTexture;

Now we instantiate the texture object in the callback for the OpenGL intialization gets completed.

public void surfaceCreated(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
// We create the texture and pass it the url address of the image we want as the texture.

mTexture = new GLTexture(gl, mContext, "http://farm1.static.flickr.com/168/373377433_da7194d612.jpg?v=0");
mTriangle = new Triangle();
}

We set the texture and call the draw method of our primitive.

public void drawFrame(GL10 gl) {
/*
* By default, OpenGL enables features that improve quality
* but reduce performance. One might want to tweak that
* especially on software renderer.
*/
gl.glDisable(GL10.GL_DITHER);

gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_MODULATE);

/*
* Usually, the first thing one might want to do is to clear
* the screen. The most efficient way of doing this is to use
* glClear().
*/

gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT);

/*
* Now we're ready to draw some 3D objects
*/
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 90.0f, 0.7f, -5, 100);

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
// Set the current texture unit to the texture we want to apply
mTexture.setTexture();

// Do some object animation
long upTime = SystemClock.uptimeMillis();

long time = upTime% 4000L;
float angle = 0.090f * ((int) time);

gl.glRotatef(angle, 0, 1.0f, 1.0f);

// Draw the primitive with the texture.

mTriangle.draw(gl);

}

You can find the code for this tutorial here.