Contact Info / Websites

AS3 Console

2012-05-05 03:52:20 by ASSHOLELA

Hi guys,
I've made an actionscript console for you to control your flash games directly! (kinda like the cheat console that pops up when you press some key in half Life or halo)
You type your actionscript commands into the line, and you can tell your game objects to do whatever functions, set whatever property on your game objects or even create new instances of objects!
This makes your debugging a whole lot easier

Here, download and try out this swf to see what I mean:
http://www.newgrounds.com/dump/item/b711afda7494 d702e843324e6f3f9aff

In the swf file, there is a Console. Press the ` key to make it appear or dissapear.
Type your commands into the line below the top rectangle. where it says "root::". press enter to execute.

Below the console, there is a box. You can experiment with it by typing:
root.box. x = someNumber;
root.box.rotation = someDegrees;
root.box.graphics.LineStyle(someThickness);
root.box.graphics.lineTo(someX, someY);
root.removeChild(root.box)
etc etc...

You can also spawn stickMen by typing:
root.manX = new Man('name'); e.g "jon";
root.addChild(root.manX); will add the man to the stage.

Now you can make your man do stuff by typing:
root.manX. jump(); //man jumps
root.manX.kill();//kills the man
root.manX.say ('whatever you want');// makes the man wave and say whatever you want
you can also create a variable and store 'whatever you want anywhere', and then have your man say the variable.
root.manX.sayStuff = 'whatever you want';
root.manX.say(root.manX.sayStuff);
or
var manSays = 'whatever you want'
root.manX.say(manSays);

Finally, if you are game, you can try typing this:
import flash.events.Event;
root.manX.addEventListener(Event.ENTER_FRAME,roo t.manX.walk);

and the man will walk left every frame!

You can also access the Man class and perform its static functions:
Man.listMen();//traces to the console the names of the men you have created
Man.allJump();//causes all the men on the stage to jump

Try whatever you want and let me know what you think!

You can download the fla file for the console here CS5.5:
http://www.newgrounds.com/dump/item/d538261f3c0c e35ff5f1f74c06da574b

You can download the code that makes the console work here:

http://www.newgrounds.com/dump/item/c4aee0c09097 b65241470ec1e8a598d0.

Its in a folder called Pasv2. The folder has the documentation telling what you can do with the code files.basically, the AS files allow you to execute and load Actionscript variables from a string containing actionScript, and you can also save your game objects into actionScript as well!

To include the files into your project, paste the folder into your project folder and then type :
import Pasv2.* into your game code. And follow the instructions in the documentation.

Cheers!



It has been a year since my last post.....oh well.

I'm still working on my latest grand project, a massive flash RTS modelled after CNC featuring almost every feature from the series' earlier 2.5D RTS version. It will be released on NG somewhere around late 2010. (It was orignially meant to be late 2009, oh well, the Ai was harder than I thought...)

Anyway, I've uploaded a beta version of a sample Skirmish game of the Debug version of the game. It is located at

Upload Location

. The map features 3 players, you, 1 allied AI and 1 Communist AI. Press H to find your home base.
The allied enemy is somewhere to the northwest of your base and the communist enemy is to the west.
Controls are exactly the same as in CNC. Use your mouse to play the game. Alternateively, you may defeat yourself by selling your conyard and to watch the 2 Ai's slug it out to the death!

Feel free no notify me of any things you dont like or any bugs. I need your comments as much as possible because I need to fix any bugs present before I proceed to create the Main Menu and Scenerio Creator

Cheers!

COMMAND AND CONQUER : Flash BETA TEST RELEASE


Object Duplication (Code)

2009-04-12 05:06:57 by ASSHOLELA

Here's the code for Object duplication, as well as the Supporting Functions.Note that theFunction you should access to duplicate your object is _global.duplicateObject and not Object.prototype.duplicate
(its written in AS2 for those who havent have flash 9 or later)

String.prototype.decompileIntoReferenc e = function(thisobj:Object) {
var string = this.valueOf();
if (string.indexOf("_global") == -1) {
if (string.indexOf("_root") != -1) {
string = string.removeString("_root.");
var refsarray = string.split(".");
var reference = _root;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
}
if (string.indexOf("_root") == -1) {
if (string.indexOf("_global") == -1) {
if (thisobj != undefined) {
string = string.removeString("this.");
var refsarray = string.split(".");
var reference = thisobj;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
}
}
if (string.indexOf("_global") != -1) {
string = string.removeString("_global.");
var refsarray = string.split(".");
var reference = _global;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
};
String.prototype.removeString = function(string:String) {
var index = this.indexOf(string);
if (index != -1) {
var lastindex = index+string.length;
var newstring = "";
for (var i = 0; i<this.length; i++) {
if (i<index || i>=lastindex) {
var char = this.charAt(i);
newstring += char;
}
}
} else {
newstring = this.valueOf();
}
return newstring;
};
String.prototype.decompileIntoReferenc eParent = function(thisobj:Object) {
var string = this.valueOf();
if (string.indexOf("_root") != -1) {
if (string.indexOf("_global") == -1) {
string = string.removeString("_root.");
var refsarray = string.split(".");
var reference = _root;
var index = 0;
refsarray.pop();
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
}
if (string.indexOf("_root") == -1) {
if (string.indexOf("_global") == -1) {
if (thisobj != undefined) {
string = string.removeString("this.");
var refsarray = string.split(".");
refsarray.pop();
var reference = thisobj;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
}
}
if (string.indexOf("_global") != -1) {
string = string.removeString("_global.");
var refsarray = string.split(".");
refsarray.pop();
var reference = _global;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
};
String.prototype.popDot = function() {
var string = this.valueOf();
var stringarray = string.split(".");
var lastref = stringarray.pop();
lastref = "."+lastref;
string = string.removeString(lastref);
return string;
};
String.prototype.remove = function(char) {
var chararray = this.split("");
var newstring = "";
for (var u = 0; u<chararray.length; u++) {
if (chararray[u] != char) {
newstring += chararray[u];
}
}
return newstring;
};
String.prototype.decompileIntoReferenc e = function(thisobj:Object) {
var string = this.valueOf();
if (string.indexOf("_global") == -1) {
if (string.indexOf("_root") != -1) {
string = string.removeString("_root.");
var refsarray = string.split(".");
var reference = _root;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
}
if (string.indexOf("_root") == -1) {
if (string.indexOf("_global") == -1) {
if (thisobj != undefined) {
string = string.removeString("this.");
var refsarray = string.split(".");
var reference = thisobj;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
}
}
if (string.indexOf("_global") != -1) {
string = string.removeString("_global.");
var refsarray = string.split(".");
var reference = _global;
var index = 0;
while (refsarray[index] != undefined) {
var childname = refsarray[index];
reference = reference[childname];
index++;
}
trace(typeof (reference)+reference);
return reference;
}
};
String.prototype.decompileIntoName = function() {
var string = this.valueOf();
var stringarray = string.split(".");
var name = stringarray[stringarray.length-1];
return name;
};
Object.prototype.createNewThisClass = function() {
if (this.constructor != undefined && this.classname == undefined) {
var constructors = this.constructor;
var newobject = new constructors();
}
if (this.classname != undefined) {
var classname:String = this.classname;
var param:Array = this.param;
var p = param;
var constructorfunction:Function = _global[classname];
var newobject = new constructorfunction(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13]);
}
return newobject;
};
_global.duplicateObject = function(object:Object, objectpath:String, newpath:String) {
if (_global.locals == undefined) {
_global.locals = {};
}
var local = _global.locals;
local.pathsarray = [];
local.objectduplicated = {};
local.objectduplicated.originalobject = object;
local.objectduplicated.path = objectpath;
var newobj = object.duplicate(objectpath);
for (var i = local.pathsarray.length-1; i>-1; i--) {
var obj = local.pathsarray[i];
var objduplicate = obj.duplicateobject;
if (objduplicate.path != undefined) {
var pat = objduplicate.path;
pat = pat.removeString(objectpath);
objduplicate.path = newpath+pat;
}
}
_global.locals = {};
return newobj;
};
Object.prototype.duplicate = function(thispath:String) {
if (thispath == undefined) {
var thispath2 = "this";
} else {
var thispath2 = thispath;
}
var local = _global.locals;
var newobject = this.createNewThisClass();
var newpathobj = {};
newpathobj.path = thispath2;
newpathobj.duplicateobject = newobject;
newpathobj.originalobject = this;
local.pathsarray.push(newpathobj);
for (var prop in this) {
var propvalue = this[prop];
var pat = propvalue.path;
var parents = pat.decompileIntoReferenceParent();
var createdalready = false;
if (this[prop] instanceof MovieClip) {
continue;
}
//see if the object the Function is trying to duplicate exists already asa result of duplication by reference
for (var o = local.pathsarray.length-1; o>-1; o--) {
var obj = local.pathsarray[o];
if (obj.originalobject == this[prop]) {
createdalready = true;
dupparentobj = obj.duplicateobject;
break;
}
}
if ((propvalue.path == undefined || parents == this) && createdalready == false) {
b;
var newpaths = thispath2+"."+prop;
//trace(prop+":"+typeof (propvalue));
if (propvalue.classname != undefined && typeof (propvalue) != "function") {
newobject[prop] = propvalue.duplicate(newpaths);
} else if (propvalue instanceof Object && typeof (propvalue) != "function") {
newobject[prop] = propvalue.duplicate(newpaths);
} else if (typeof (propvalue) == "function") {
newobject[prop] = this[prop];
} else if (typeof (propvalue) != "function") {
newobject[prop] = this[prop];
}
} else {
var path = propvalue.path;
var path2 = propvalue.path;
//determine whether the reference is from outside the Original Object or inside
var pathwork = path;
var insidefound:Boolean = false;
var localobjectduplicatedpath = local.objectduplicated.path;
while (insidefound != true) {
if (pathwork == localobjectduplicatedpath) {
insidefound = true;
break;
}
if (pathwork.indexOf(".") == -1) {
break;
}
pathwork = pathwork.popDot();
}
if (insidefound != true) {
//the object reference is outside the original object
var ref = path.decompileIntoReference();
var name = path.decompileIntoName();
var parent = path.decompileIntoReferenceParent();
var rootparent:Object;
if (ref != undefined) {
newobject[prop] = ref;
}
}
if (insidefound == true) {
//the object reference is insideteh original object
var parentpath = path.popDot();
//var parentfound = false;
var newnestedobjects:Array = [];
var indexof:Boolean = false;
var dupparentobj:Object;
//loop through the list of newly created objects in the Original Object's hierachy to determine if a duplicated reference object exists
for (var o = local.pathsarray.length-1; o>-1; o--) {
var obj = local.pathsarray[o];
if (obj.originalobject == this[prop]) {
indexof = true;
dupparentobj = obj.duplicateobject;
break;
}
}
// if the object being referenced is already created, pass a reference to the property
if (indexof == true) {
var name = path.decompileIntoName();
newobject[prop] = dupparentobj;
//ref = dupparentobj;
}
// if the object does not exist,create a new object and pass the reference as the duplicate object's property
if (indexof != true) {
//if the object being referenced's parent's duplicate doesnt exist,create it too and so on...
var newnestedobjects:Array = [];
var localpath = path;
var parentfound:Boolean = false;
while (parentfound != true) {
if (localpath == local.objectduplicated.path) {
var rootobject:Object = {};
rootobject.originalobject = objectref;
rootobject.path = local.objectduplicated.path;
rootobject._name = local.objectduplicated.path.decompileI ntoName();
break;
}
if (localpath.indexOf(".") == -1) {
break;
}
var localobjectduplicatedlocalpath = local.objectduplicated.path;
var objectref:Object = localpath.decompileIntoReference(local objectduplicatedlocalpath);
for (var o = local.pathsarray.length-1; o>-1; o--) {
var obj = local.pathsarray[o];
if (obj.originalobject == objectref) {
var rootobject:Object = {};
rootobject.originalobject = objectref;
rootobject.path = localpath;
rootobject._name = localpath.decompileIntoName();
parentfound = true;
break;
}
}
var objecttocreate:Object = {};
objecttocreate.originalobject = objectref;
objecttocreate.path = localpath;
objecttocreate._name = localpath.decompileIntoName();
newnestedobjects.unshift(objecttocreat e);
localpath = localpath.popDot();
}
//loop through newnestedobjects array to create the objects that are nested
//var rootpath = rootparentpath.removeString(thispath);
var parentobject = rootobject;
for (var c = 0; c<newnestedobjects.length; c++) {
var objecttocreate:Object = newnestedobjects[c];
var newname = objecttocreate._name;
parentobject[newname] = objecttocreate.originalobject.duplicat e(objecttocreate.path);
parentobject = parentobject[newname];
/*var nestpath:Object = String(newnestedobjects[c]);
nestpath = nestpath.removeString(thispath);
var refobj = nestpath.decompileIntoReference(this);
var newobj:Object = refobj.createNewThisClass();
newobject.assignprop(nestpath, newobj);*/
}
newobject[prop] = parentobject;
}
}
}
}
return newobject;
};


Pics of the ships

2009-04-05 07:10:32 by ASSHOLELA

Here are the pics of the ships:

Pics of the ships


New Flash RTS Update 4(AI)

2009-04-05 07:05:06 by ASSHOLELA

Note:For those who have been watching this spot, I apologise for the delay. Beacuse of certain unforseen circumstances, this game will be released at a much later date, which I have not confirmed.
(possibly by July)

Ok,I admit, I was a little overconfident. I have finsihed all the graphics and scripts for each and every single one of the 89 units and structures, but the Ai proved a more daunting task than I expected.

Firstly, the Ai's gotta be adaptable.No matter which map its played on(mind you, this isnt like Tank Wars or Keith Kong's Renegade Commanders (Newgrounds game);where you simply choose the map to play on, in this RTS, the player has the oppotunity to create his own to play on as well; the Ai's got to know where to place its buildings. It cant just place them on any predesignated spot on the map.This made Ai base building a lot harder!The same goes for attacking. I've heard of instances in RedAlert 2 or Tiberian Sun where the enemy just simply sends its attacking troops right through the player's base to gather on the far side( the side of the base furthest from the enemy's base) and only then,attack from there(by then, most of them are dead).Of course, if this was to happen the Ai would be pretty dumb and not worth playing against.The Ai's got to know which is the "front" side of the player's base (even on a map with cliffs, and other obstacles), if it is gonna attack properly.This made it hard to program as well.

Secondly,there are these annoying bugs. In a really complex game such as this, the Ai's got to be very complex as well, and the real chore is just finding out what among the tens of thousands of lines of Ai code that went wrong.(even the debugger is no help.There are just too many variables,making it crash,so its down to trace()).Worse still, suppose the error only came out late in the game(i.e when the Ai has already built its tech centre, for those who play Command and Conquer, but simply won't(for some reason), build superweapons).You've got to retest the entire game until that part ,taking hours, to see if your debug remedy has worked.That consumes a hell lot of time.

Finally, I've put in a series of SNs(strategic numbers) which determines the Ai 's personality and how it functions.For exmaple, an Ai with a large sn_BaseStructureSpreadFactor will tend to build structures sparsely, in contrast to one with a low StructureSpreadFactor.Again, only certain "right" combinations of SNs produce a competent Ai.For example, once i set the Money Spending SN too high and the Ai build a lot of infantry, but then, It won't(or cant),build war factories because it has no money left!Determining just the right values for the Sns seems to take forever.

Nonetheless, I've managed to program only one Ai version (called the Default Ai) which behaves in a very very predictable way(e.g it always builds the structures in the same order and fashion),but is quite competent. I could simply randomize the Sns for diffrent personalities before the game starts, but then again, they might not work.For those who want greater Ai flexibility, I'm thinking of including an Ai editor as well, where users can Create an Ai for themselves.This not only goes for changing the values of those SNs alone,but reconfiguring the Entire AI script using the Trigger Class I've created myself.

Meanwhile, here are screenshots of the graphics to be used in the final version.Hope you like them =).

The pic of the ships is in the subsequent "Empty" Post.

New Flash RTS Update 4(AI)


New Flash RTS update 3

2009-01-08 07:56:41 by ASSHOLELA

This is the third news post about my (and Newground's) first Command and Conquer style Real Time Strategy Game.

For those who haven't seen my first few news post, here's the lowdown on the game:

If you've played Command and Conquer red alert 2 or tiberian sun before, this game is basically it. Your objective is to build a base,harvest oil for money, create troops to defend it and them send them to destroy the enemy. The game will feature almost everything from the command and conquer series, including garrisonable buildings,aircraft and ships as well as 60 different kinds of units from 2 warring factions (the G7 nations and the rest of the poorer nations around the world who've juz turned communist;but of course, these are kinda lame names so i wount be calling them that in the final game), which you can choose to represent in the campaign.The game can also support multiple players, either free for all style or allied in teams, and possibly multiplayer if I have the time.

you can read on if you're interested...

Each side has its own special characteristics:The communists,being poor, do not hav access to superior technology.Hence, they build their buildings usng dozers, while the G7 can easily pop them up using conyards.The G7 relies heavily on upgrades and it's arsenal includes superior air and naval power, lasers and superweapons.The communists resort to using primitive little dirty tricks such as nuclear radiation(irradiated tiles damage the units which step on it), fire(which can spread until it becomes an immense inferno), chemical sprays and biological agents(which spread among your infantry like an epidermic and eventually kills them all)., and concrete to build their structures (which makes them stronger than the shape memory alloys the G7 uses)

as of now, I am halfway done, with 42 units and structures done up.Here is a list of them:

G7:
Infantry:
Ranger: Basic infantry with a rapid fire machine gun.Can be deployed which reduces their attack power but makes them a lot harder to kill,much like the GI of Red Alert 2
Rocket INfantry: Armed with bazookas.Good against tanks and air units
Sniper: Used to kill infantry from a distance
Navy Seal : Pulverises enemy buildings and tanks with c4 charges.
Medic:Heals wounded friendly soldiers.
Rocketeer: Floats in the air and shoots at enemies from above

Tanks:
Oil Truck: Used to gather oil from oil wells and transport them back to refineries.Faster than communist variant, but less capacious and ligher armoured.
grizzly tank: Basic battle tank
Humvee: Agile and fast troop transporter.5 infantry squads can garrison inside it
Scout drone: has a larger line of sight them all other uints.used for scouting adn detecting radiation.Stealthed.
Artillery: Used to barrage targets from a distance must be deployed to fire.

Aircraft:
the g7 builds aircraft from airfields. Each airfield has a single runway and 4 pads which support aircraft by repairing,refuelling and recharging ther ammo.Each aircraft wait for its turn to takeoff before attackng.Should there be more aircraft than pads available, the excess aircraft without pads simply die.
Raptor: Basic aircraft used in dogfights.Shoots enemies with sidewinder missiles
Aurora Bomber: Used to bomb spot targets. Area of effect attack makes it very good aganst buildings.Fast but with little armor
Stealth Fighter:Basically a stealthed version of a raptor, but slower and more powerful
Chinook: transports vehicles and infantry via the air
Communists:
Infantry:

Conscript: less powerful than ranger but a lot cheaper. cannot be deployed.
Grenadier: Throws grenades at enemy. Hgh firepower but often misses.Unexploded grenades can damage friendly troops.
Engineer:while the g7 is more humane and chooses to heal its own infantry, the communists build engineers to repair their own vehicles instead.
Attack Dog: Used in packs to kill infantry.Jumps on them and kills them in one bite just lke the one in red alert.
Commando: Equivalent of navy seal from the G7.Instead of c4ing buildings, it uses a chain gun to mow them down.

Tanks :
Construction Dozer: Builds the communists buildings
Oil Truck: Gathers a lot of oil at once but slow and lumbering.
Tick Tank: much like grizzly tank, but tick tanks have more armour and can deploy to make them even harder to destroy still.
V3 Launcher: Lanches rockets to kill buildings from afar. Like the v3 launcher in red alert2
Attack cycle: Like scout drone, used for scouting,but is not stealthed and has less line of sight.However, it is faster.
APC: Used to transport masses of infanrty nto the heat of battle. Very slow and unarmed, but heavily armoured.
Battle Fortress: An APC which has been modfied so that infantry can shoot out of its gun ports.

Aircraft:
the communists build aircraft from helipads. A helipad can support only one aircraft, but the communists aircraft can easily take off vertically into the air without using a runway.The aircraft also won't die if their helipad is destroyed.
Orca fighter: Slower than the g7 aircraft, but can hover.fire rockets at ground troops
Orca Bomber: Carpet bombs long stretches of ground
Harpy: A helicopter with a lot of ammo. Uses chan guns to wipe out enemies.

And Much more is to come,including Prism Tanks which fire lasers which diffract off many targets, EmP tanks which short circuit enemy tanks and make them cease to function, Demo trucks ,terrorists and hunter seeker drones which plow into enemies and self destructs, klling the enemy with it, Stealth Tanks and the heavily armoured and armed Apocalypse Tank, the star of red alert 2, for the communists, of course.

Stay in touch for updates.

Below is a production pict of my base playing the G7.

New Flash RTS update 3


Flash RTS update 2

2008-12-24 10:21:03 by ASSHOLELA

Hi,welcome to my second update instalment on the latest C and C themed flash RTS to be posted by March on NG!
Have been making progress on my new flash RTS game.A slew of new units have been added, as well as the oil gathering (harvesting) and build process.

here's another 2 production pics (n.b the graphics are for testing purposes only and are not necessary the ones in the final product)
If you are interested, you can read the intro below:

The game has been made to resemble command and conquer and if you are an avid fan,you would notice the "grizzly tanks","navy seals" and "v3 rocket launcher" from red alert 2, and "disc throwers" from tiberian sun. The game will feature a mix of over 60 different kinds of units taken out from the 3 universes of C&C the First Decade,Red Alert,Tiberian and Generals ,including air and naval units,nukes, ion cannons and the lot.

There will be 2 factions (like GDI and Nod) with its own specific strengths and weaknesses (e.g the good guyz(havent thought of names for the sides yet,plz suggest...) build buildings directly using conyards while the baddies utilize construction dozers to build theirs.

I'm not bragging, but the game engine can support multitudes of units at once ( had 100 units and the fps still read av 16), way more than what perhalps you have played in Keth Kong's renegade commanders (a similar Flash RTS;10 unit pop limit;most probly due to lag),as well as maps sizes comparable to the ones on Red alert 2.(200 x 200 tiles).It has the potential to support multiple players from multiple teams consisting of players allied together if your comp is powerful enough.In short,the gameplay's gonna be little short of what you'll be getting in the original C&C games.However the downside's that the screen size has to be quite small 400px square for reasonable smooth gameplay on my ages old 1.5GHZ comp (dunno bout urs)

Flash RTS update 2


New Flash RTS

2008-12-10 05:07:41 by ASSHOLELA

For those who've played either Keith Kong's Renegade Commanders or my Tank Wars RTS, or fellow command and conquer fans out there, here's something for you. A brand new flash RTS is in the works and it will feature virtually everything Command and Conquer Red Alert 2 has ,tons of different units from 2 conflicting sides, the oppotunity to build naval units and aircraft ,and lots lots more. Scheduled to be posted latest by March 2009, this brand new RTS would redefine what has been achieved in the creation of flash RTSes around the world!

Heres a production pic (note: The graphics are meant for testing purposes only and are not the ones used in the final product)

New Flash RTS


Tank Wars RTS

2008-01-10 06:51:45 by ASSHOLELA

Tank Wars RTS, the first ever RTS game like Command and Conquer on Newgrounds!More complex, more features, more ways to win and more aspects than any other RTS game ever made in flash.Build bases, collect oil, create your units, send then and destroy the enemy.

VErsion 2.5 is coming up in two weeks so brace yourself.

Tank Wars 2 had a major bug infestation (so for it to even make it to the front page was very very lucky)
. I've taken note of them in your reviews and they will be fixed when I release VErsion 2.5.

Version 2.5 will include new aspect and better graphics, especially how the textures blend in on the background.

Till then, have fun playing games on NG!

Tank Wars RTS


Tank Wars 2.0

2007-12-20 09:06:18 by ASSHOLELA

Tank Wars RTS 2.0 is under construction. It will contain everything the original has (except conquest campaign (too laggy)) plus computer-aided lieutennant voices, unit voices, better graphics and highier FPS (-=less lag)Tank Wars RTS 1.5

Tank Wars 2.0