• Add Review
  • Subscribe
  • Nominate
  • Submit Media
  • RSS

Game Design

Hey baby come a little closer

So I had a nebulous idea of having a Ranged vs Close mode for the Battledome battles (as suggested by LockeZ a few weeks ago), where certain weapons and skills could only be used close range and the battlers would move in and out of close combat. And I really liked it, so I jotted it down.

But that nebulous idea turned out to be somewhat unfeasible and convoluted once I got to thinking seriously about it. Mostly because my original concept for this game didn't envision it (it was suggested to me - it never occurred to me at the beginning), and my implementation was a bit rudimentary in regards to the "cost" of actions. Like, every turn you get to do one action, and that action "costs" just 1 turn, meaning that less important actions like "Move to close range" cost as much as "Do uber hyperbeam attack", turn-wise

The classic RPG dilemma.

Also, with drones acting independently, the concept of "close vs ranged" becomes exponentially more complex, because suddenly you could "close ranks" with a drone, or a drone could move away, or close ranks with a different target, and also does that mean you are no longer close range with the other main battler? Or if the drone moves to another drone, are you still close range? What about your drones - do they follow you?

So suddenly instead of simply tracking 'battle is now in CLOSE RANGE MODE', I have to dynamically track the positioning of every actor in the battle relative to every other. And build the AI to account for all of that in a fair and balanced and logical way.

So I was going to do away with it.

What to do instead?

I am still enamoured by the idea of "close vs ranged" battle modes. (and in fact the weapon designs have had a flag for 'isRanged' from the start)

I am reaching back into the classic RPG toolbox and taking a strong look at a Front Row and Back Row positioning concept. Not unlike your traditional sideview battle systems.

Battlers get a free move on their turn to toggle rows, if their strategy requires it. The limitations on each row would be basic, like, Ranged weapons/abilities only from the backrow, but melee attacks you receive are half damage. Or maybe a little more complexity, with backrow generating less aggro, or attacks targeting the backrow are less accurate. Something along the lines of "BACKROW = DEFENSIVE+RANGED and FRONTROW = OFFENSIVE"

I am also toying with the idea of also having a Middle Row, to add a bit more flavour.


Game Design

Weapons/Abilities/Drones/Equipment brainstorming

I am looking for ideas for weapons, equipment, abilities, and drones for the Battledome. As you read in the previous blog, upon leveling up, your Battler is granted a random powerup, which takes the form of a weapon, equipment (which can have an ability), a straight-up ability, or drone (up to 3 drones max).

Before you can really brainstorm, you'd probably need to know what makes up a battler stat-wise, and what options there are for weapons, equipment and drones.

Who am I?

Here is a break down of the pertinent attributes of a battler. A drone is also a battler (but with the restriction of having no drones of its own, and not getting powerups upon level up).


Damage boosts:

Defensive boosts**:


Secondary stats*: (base 10000)
accuracy (10000)
numberofattacks (1)

criticalMultiplier (0.4)
fumbleMultiplier (0.4)
retaliationMultiplier (0.5)

*a battler's ATK is translated into a PHYSICAL boost between 40% and 60%
**The effect of a defense boost is calculated by x=((100/100+defboost)*damage)
***percentages are stored as integers with a base of 10000, so a 2.94% chance translates to 294/10000. For example an evade=294 means a 2.94% chance to dodge.

What are all these things?
-HP: health. If this is zero, you lose.
-NRG: energy. If this is zero, you are stunned.
-ATK: attack. Base physical bonus damage.
-AGL: agility. Your turn speed.
-PHYSICAL, ENERGY, FIRE, COLD, ELECTRIC, SONIC, CORROSIVE are the different damage types. I can add more (if they make sense). Each battler, weapon, equipment, drone can have any combination of damage type and min/max damage amount. IE- a sword could have 1-6 PHYSICAL damage + 1-3 COLD damage.
-Damage types have a minimum and maximum range.
-Evade is chance to dodge an attack, resulting in no damage being done.
-Block is chance to block an attack, resulting in no damage being done.
-Pierce is chance to get through a block, resulting in a block being ignored
-Parry is chance to block an attack with a weapon, resulting in no damage being done.
-Intercept is like a preemptive counterattack. IE- while you are attacking, the enemy intercepts the attack before it lands, and counterattacks immediately.
-Accuracy (default 10000, IE- never miss) is chance to miss an attack.
-Critical is chance to do extra damage, based on critical multiplier
-Fumble is chance to do less damage, base on fumble multiplier
-Disarm is chance to destroy the enemy's weapon when you do an attack
-Stun is chance to disable an enemy for 1 turn
-Numberofattacks is the number of attacks.
-Lifesteal is a percentage of life stolen during an attack
-Energysteal is a percentage of energy stolen during an attack

Stat Growth
These are the numbers I have used in the latest demo, as a base. They give an idea of the scale of numbers I want to use....for now.


*All battlers start at level 0 with a set of base values. Each build has its own tweaks to the starting values


Each level up results in a fixed increase in stats. Each build has its own small fixed increments to each stat.

Here is the increases by growth type. Eventually, I want the user to be able to choose which kind of growth they want each level up.


Weapons are used to increase your battler's damage output. Battlers start a battle with a cache of weapons, and can deploy them in battle. Only 1 weapon can be deployed at any given time. A weapon does not have to be deployed. Weapons can be deployed, undeployed, discarded, disarmed, or stolen. Weapons never run out of ammo or energy.



Damage Modifier** (this is how much a battler's base stats influence a weapon's damage output):

Secondary stat modifiers: (base 10000)(can be negative)
extraAttacks*** (how many extra times a battler can attack using this weapon)
bonusAttacksMax (variable number of bnous attacks on top of what the battler can attack naturally and what extra attacks the weapon has)

Multiplier modifiers:


*given as a damage type and a min value and max value
**This is a double value between 0.0 and 2.0; So say if I had a laser rifle, I wouldn't expect a battler's PHYSICAL strength to contribute to how much damage it would do, so I would set its PHYSICAL damage modifier to 0.0. However, it might be super efficient at converting ENERGY bonuses, so I'd set the ENERGY damage modifier to 1.5
***how many attacks a battler makes in his turn is based on his Numberofattacks + his equipped weapon's extraattacks + random number between 0 and the weapon's bonusAttacksMax.
****I have not implemented any Close Range or Long Range battlemode logic yet. I am considering making this an enum of CLOSERANGE, LONGRANGE, BOTH instead of just a true/false.

Here is what I have so far. Keep in mind I am just pulling these numbers out of my ass.
As a general rule for damage modifiers, I made melee weapons inherit 1.0 damage modifiers for all damage types, and ranged weapons inherit 0.0 damage modifiers except for that weapon's type, which I set the damage modifier to 1.5. So the Firevolt would have a 1.5 FIRE and 0.0 everything else.

WEAPONDamage TypeDamageNotes
Crab HandsPHYSICAL4-8high intercept, high fumble, x2
Stun BatonPHYS, ENERGY1-6,1-4chance to stun
PropeloPHYSICAL2-5multistrike, up to x10 attacks
VibrocutterPHYSICAL2-6small knife, high retaliate, multistrike
VibrobladePHYSICAL4-16basic sword
Electric MacePHYS, ELEC3-18,1-18heavy damage, low accuracy
Quarium WhipPHYSICAL1-15high disarm, intercept, critical
Sabre of LightENERGY2-20pure energy attack
Thunder KatanaELECTRIC1-25pure electric
Charge BladePHYS, ENERGY2-6energy steal
Discharge BladePHYS, ENERGY2-6uses energy to inflict criticals
Stun-o-rangPHYSICAL1-8multi target
Plasma StaffENERGY5-15high intercept, disarm, chance for 2x attacks
Drill SpikePHYSICAL8-28high pierce, disarm
Nintendium SpikePHYSICAL12-15pierce
Impact HammerPHYS, SONIC1-36,4-6high crit
Energon AxeENERGY8-21pure energy
Toxic DaggerPHYS, CORRO1-4,0-25can inflict periodic damage
Frozen FistsPHYS, COLD7-9,3-4cold damage, x2 strike
Sonic DisruptorSONIC2-7target all
ChaingunPHYSICAL2-4multistrike (x4 to x10 attacks)
Repeating BlasterENERGY2-8x3 to x5 attacks
BFG-9000ENERGY15-65highly inaccurate
Sniper RiflePHYSICAL12-24high crit, highly accurate, piercing
Bio RifleCORROSIVE3-30periodic damage
Flak CannonPHYSICAL6-24heavy damage, target all
ShotgunPHYSICAL18-24heavy damage
Shock RifleELECTRIC1-10v.high crit, can stun
Laser RifleENERGY2-12high accuracy
Missile PodPHYS, FIRE5-15,5-10x4 missiles, low accuracy
FirevoltFIRE5-20Jet of piercing fire

Abilities are special attacks that consume energy on use. Abilities can be granted by certain equipment, or just learned on their own.

The logic behind abilities are underdeveloped, and would be open to expanding their stats/modifiers/etc... to accomodate neat ideas.

An abilility can have completely custom logic in a battle, unrelated to any of the stats below. For example, Rust Gel (in this game) just automatically stuns enemy battlers AND completely disables their drones.



Power Modifier** (this is how much a battler's base stats influence an ability's power output):

nrgCost - energy cost

Secondary stat modifiers: (base 10000)(can be negative)
extraAttacks*** (how many extra times the ability is used)
bonusAttacksMax (variable number of bonus attacks this ability can do)


*given as a damage type and a min value and max value
**This is a double value between 0.0 and 2.0; So say if I had a laser rifle, I wouldn't expect a battler's PHYSICAL strength to contribute to how much damage it would do, so I would set its PHYSICAL damage modifier to 0.0. However, it might be super efficient at converting ENERGY bonuses, so I'd set the ENERGY damage modifier to 1.5
***how many attacks a battler makes in his turn is based on his Numberofattacks + his equipped weapon's extraattacks + random number between 0 and the weapon's bonusAttacksMax.
****I have not implemented any Close Range or Long Range battlemode logic yet. I am considering making this an enum of CLOSERANGE, LONGRANGE, BOTH instead of just a true/false.
*****Can only be used once per battle.

I only have a few abilities implemented, more as a proof of concept than anything else. These numbers were especially pulled out of my ass last minute, and definitely need refinement.
As a general rule, I made abilities non-parryable and non-interceptable. Damage modifiers were 0.0 except for their damage type, which was 1.5.

ABILITYDamage TypeDamageEnergy CostTargetsNotes
Beam CannonENERGY15-4015Random Enemyone time use, reduced accuracy
FlamerFIRE5-204All Enemies
Rocket PunchPHYSICAL10-202Random Enemysmall accuracy boost
Rust GelPHYSICALn/a5All Enemiesdisables all enemy drones instantly, and stuns enemy battler.
Flash Freeze BombCOLD5-108All Enemieshigh chance to stun, high accuracy
Shock-KickELECTRIC1-5012Random Enemyalso inherits PHYSICAL damage modifier at 1.5
Shockwave PulseSONIC5-108All Enemiesv.high accuracy, chance to disarm weapons
FlashbangSONIC02All Enemiesv.high accuracy, v.high chance to stun

FULL DISCLOSURE: I have not fully implemented equipment in the game yet. So it's the perfect time for your input!
I have a list of equipment I that I brainstormed from actual Battledomes we've held (plus a few extras). I put in parentheses the associated ability the equipment would grant.

Scorpion Tail (Rocket Stinger)
Whetanium Arm Shield - physical shield to start battle? block?
Tower Shield - physical shield to start battle? block?
Buzz Saw Arm (Buzz Saw Attack)
Tracking Sensor - accuracy boost
Energy Stealer (Energy Drain)
Flamethrower (Flamer)
Water Cannon (Water Blast)
Corrosive Spray (Corrosion)
Beam Cannon (Particle Beam)
Guass Cannon (High Velocity Projectile)
Crustacean Plate - defense boost
Jaws of Death (Crush of Death)
WeatherGuard - cold, fire, corrosion boost
Nanothread (Entangle)
Energy Shield (Deploy Energy Shield)
Rocketboots (Rocketboost)
Anti-Theft Device - just something passive that would disable energy stealing attempts
Quarium Mesh Cannon (Mesh Entangle)
Dispersal Array - energy boost
Nintendium Plating - defense boost
Stealth Underlay - evade boost
Teflonium - evade boost, speed boost
Synthweave - defense boost
Magnetotron (Magnet Well)
Amplifier - damage (physical?, energy)
Power Cell - health boost
E-Tank - energy boost
Quantum Co-Processor - speed boost
Black Belt - counterattack
Gyrostabilizers - stun defense?
Kinetic energy recovery system/Hybrid Synergy Drive- periodic energy recovery

QUESTION: can a battler have duplicate equipment? or maybe some of them could be duplicate? Having 10 E-Tanks could be cool.

Drones are special-case battlers. They level up to the same level as their host, but do no get powerups, and have their own custom builds and growth.

My thinking on them is that each drone would have either a single ability or weapon, and then just use that every time their turn comes up. They would have significantly less HP than real battlers (except for maybe a damage-sponge drone?). They would be very limited and focused in what they do.

A battler would be limited to 3 deployed drones in a battle. Right now, battlers are limited to at most 3 drones total. I might change it such that you get to pick which 3 drones to take into a battle from your stable.

I have made a Minibot, Turret, and Hoverdrone archtypes, but they don't do anything special yet. They don't even have abilities or weapons yet - they just mindlessly attack.

Ideas please!

So there you have it - all of my ideas and their implementations laid bare. The interplay of weapons, battlers, abilities, and drones is what will make this game fun. So help me make Battledome fun!

Progress Report

Battledome something something

The latest build (v0.3) is up, just (almost) in time for Release Something! Day. This build is much farther along the gamification path than the past releases - there's actually a game here! A very randomized non-persistent game, but a game nonetheless.

Progress Report
The game right now has you entering your Battler Robot's name, choosing a build (Fighter, Lithe, Brute, Crawler, Johnny5), and choosing it's growth path (Balanced, Brawler, Tank, and Specialist). As of right now, this only influences your stat growth - there are no restrictions on weapons or equipment based on build (yet).

I've implemented a rudimentary leveling system (2XP for a win, 1 XP for a loss). Your initial stats are based on your build, and each level up is based (a bit) on your build and (moreso) growth-type. Right now the growth type is fixed, but I am considering giving control at each level up to the player, so that one time you can be BALANCED, the next level up BRAWLER, etc... Upon leveling up, you are awarded a random powerup: a weapon, ability, or a drone (maximum of 3 drones). I have a good selection of weapons so far, but only a handful of abilities and only the most basic of drones. Equipment wasn't ready yet for this release.

Weapons: your bot can deploy weapons in battle for extra damage or special effects
Ability: your bot can enact a special ability (sometimes One Time Use), but costs Energy
Drone: a minibot that fights alongside you (eventually with its own weapons and abilities)
Equipment: static boosts to your stats (attack, defense, shields etc...), or grants special abilities, or a combination of both - NOT YET IMPLEMENTED.

I have added an endless battle arena mode for the game - six random bots are chosen from my stockpile, leveled up to the same level as your bot, and then you get to choose one to battle. You might recognize some of the names. The endless battle arena is how I envisioned the final game to work (at a high level). At least, that's how MyBrute works. The limiting factor in MyBrute is that you can only fight 3 battles per day. I haven't thought deeply about any other battle modes, so feel free to suggest alternatives.

Stay tuned for brainstorming threads for Weapons, Abilities, Equipment and Drones!

Game Design

Which Beat Should I Choose? (Battle Plans)

I haven't thought deeply on the subject of battle plans - that is, when it is his turn, how does a battler choose his action from his list of available actions?

I have (for the purpose of testing other system) implemented a rudimentary system that assigns a static priority to an action, and then using a random number, choose an action based on the relative proportions of the priorities of all of that battler's actions.

if a battler has 3 actions in his repitiore:
ATTACK := 40 priority points
DEPLOYATTACK := 60 priority points
DEFEND := 20 priority points

I will then choose a random number between 0 and 120, and then iteratively check
if rand < 40, do ATTACK
if rand < 100, do DEPLOYATTACK
if rand < 120, do DEFEND

That's it, and I am only telling you this just so you know where I currently stand. I need some brainstorming ideas because I am kind of drawing a blank on how to go about this, and in particular struggling with an effective way to change the prioritization of the moves based on the current state of the battle (like, if I already have a weapon deployed, I should lower my priority of DEPLOYATTACK, but if I don't, deploying a weapon should be a higher priority)

LockeZ already started pondering on this on my behalf
I was imagining the pre-planned strategies being done like setting your party's AI in Dragon Age: Origins or Final Fantasy 12. The player would create a set of conditions for different actions to be used, in order of preference, like:

1. If opponent's HP is below 20%, and beam cannon is not out of ammo, and energy is above 25%, attack with beam cannon.
2. If battle is long range, and own HP is above 90%, attempt to close to short range.
3. If energy is below 25%, attack with energy stealer.
4. If battle is long range, activate energy shield.
5. If minibots are present, attack with flamethrower.
6. If battle is long range, attempt to close to short range.
7. If shotgun is out of ammo, and minibots are not present, attack with martial arts.
8. If shotgun is not out of ammo, attack with shotgun.
9. Attack with martial arts.

This was just the first way my mind jumped to, and so I was suggesting the short and long range thinking that it would be easily possible in a system like this. Were you thinking of doing battle plans a different way? This way wouldn't really limit what kinds of actions you can add to the game; as long as the outcomes of those actions are also possible conditions, there's no limit to what the player can choose to do. After all, in FF12 the entire game was played this way.

I didn't consider letting the end user tweak their battleplan to such a great degree (I was toying with the idea of a more generalized instructions like "Fight Wisely", "Show No Mercy", "Play It Safe", "Be Erratic", and building out strategies automagically from there). But I do like LockeZ's idea. It's kind of like building out AI rule in RM2k3's monster database. It is a little more complex than I was anticipating, but maybe that's a good thing.

What are your thoughts on this?

Game Design

How hard do I punch?

I want to chat about my damage algorithm because right now it is so basic. My algorithm is so basic it wears Ugg boots. My algorithm is so basic that it exclusively drinks Starbucks pumpkin spice lattes.

A battler's damage is randomly chosen between 80% to 120% of their base attack power.
If they have a weapon equipped, choose a random value between the weapon's min and max damage range and add it to the battler's damage.
Set the damage element to the weapon's element (or default to PHYSICAL)

Actual code
//just hardcode range for now
double atkrange = 0.8 + ((1.2 - 0.8) * rand.nextDouble());
damage = (int) (this.getAtk() * atkrange);

//get weapon range
if (this.getEquippedWeapon() != null) {
	int weaprange = rand.nextInt(this.getEquippedWeapon().getRange() + 1) + this.getEquippedWeapon().getMinDamage();
	damage += weaprange;

that's some basic shit

But I don't really have any better ideas. All the creativity for attacks and damage are built into weapons - min and max ranges, damage types, critical rates, lifesteal, etc... And I don't currently have a concept of "defense" built into the game (yet).

However, right now "damage" is passed around as a mapping between Damage_Type and an integer, so the potential is there to have a damage that does: like 16 PHYSICAL, 3 ICE, 10 ELECTRIC damage, Diablo 2 style.

For defense, I am inclined to go down the "resistances" route - ie: 15% resist PHYSICAL, 30% resist FIRE, etc... with a hard cap of 75% (also Diablo 2 style).

...maybe I should look up Diablo 2's damage algorithm?

I am really looking for ideas and brainstorming here on how to approach damage and defense.

Game Design

Battledome Turn Order discussion

Actors: battlers and drones in the current arena battle

Pseudo code
Set a 'threshold' variable equal to the sum of all of the actors 'agility'
Each actor has a 'readiness' variable, called turnpoints/TP, initialized to a random range of their 'agility' (50% to 150%)
Every cycle, add each actor's 'agility' (plus/minus 10%) to their 'readiness'
For any actor whose 'readiness' is greater than the 'threshold', add them to the 'turn queue', sorted descending from their 'readiness', and decrease their 'readiness' by the 'threshold' value
If there are any actors in the 'turn queue', pop them off the front of the queue and do their turn actions
Repeat the cycle until one of the battlers die

Actual code
int turnId = 0;
PriorityQueue<Battler> turnQueue = new PriorityQueue<Battler>(8, queueComparator);	//turn queue
int turnThreshold = 0;
turnThreshold = battler1.getAgl();	//don't have drones yet, so just do main battlers AGL
turnThreshold += battler2.getAgl();
System.out.println("Turnpoints threshold is " + turnThreshold);

//turn logic
battler1.initTurnCounter();	//this initializes to their AGL +/- 50%

//main game occurs here
while (!battler1.isDead() && !battler2.isDead()) {
	System.out.println("Turn " + turnId + " -----------------------------------");

	while (turnQueue.isEmpty()) {
		battler1.incrementTurnCounter();	//AGL +/- 10%
		if (battler1.getTurnCounter() > turnThreshold) {

		battler2.incrementTurnCounter();	//AGL +/- 10%
		if (battler2.getTurnCounter() > turnThreshold) {

	//do turns
	while (!turnQueue.isEmpty() && !battler1.isDead() && !battler2.isDead()) {
		currBattler = turnQueue.remove();
		// do their turns etc...

You can test out the algorithm here: http://rpgmaker.net/games/5000/downloads/6676/


I think the underlying logic of this turn determination algorithm is pretty solid. It allows for faster battlers to get extra attacks in versus slower opponents, and it will scale well for battles with multiple drones and battlers. There is no waiting for cycles to increment (beyond the time it takes for the computer to do some simple addition and comparisons) before an actor is ready (like in an ATB system). But maybe there are issues with it that I don't foresee?

I think the main issues the demo is encountering has more to do with the base stats of my predefined battlers and the range of my randomization. And also the value I set the threshold to - I made it the sum of the agilities so that it is scaleable to the relative agilities of the actors, but perhaps that was a bad idea? What else could it be other than a fixed value, or a multiple of the sum (like 2x or 3x)?

I think that tightening up the relative values of the battlers's agilities would help even things out, turn order-wise.

Are the random ranges I use for initialization and for each cycle a good thing to have? Are they too high or too low?

For reference, here are the base stats:
	this.hp = 155;
	this.maxhp = 155;
	this.nrg = 60;
	this.maxnrg = 60;
	this.atk = 30;
	this.agl = 25;
case LITHE:
	this.hp = 115;
	this.maxhp = 115;
	this.nrg = 52;
	this.maxnrg = 52;
	this.atk = 20;
	this.agl = 35;
case BRUTE:
	this.hp = 220;
	this.maxhp = 220;
	this.nrg = 75;
	this.maxnrg = 75;
	this.atk = 24;
	this.agl = 11;
	this.hp = 195;
	this.maxhp = 195;
	this.nrg = 90;
	this.maxnrg = 90;
	this.atk = 16;
	this.agl = 17;
case JOHNNY5:
	this.hp = 150;
	this.maxhp = 150;
	this.nrg = 120;
	this.maxnrg = 120;
	this.atk = 13;
	this.agl = 20;

Pages: 1