Bigosaur blog
Get My Mom is a Witch on Steam

MMiaW: PvP arena and new bows

A new version will be released on January 20th most probably with player vs player mode for 2-4 players. There will be about 15 different arenas - just like regular forest, battlements, castle levels, but without enemies. Items and weapons drop randomly on the ground or pedestals while the players are fighting each other until only one is left alive.

To make it more interesting, a Bushido will spawn at a pre-set sudden death time, and chase the players around. Players can just battle it out with the starting HP they've got, or you can set up multiple lives for everyone if you prefer the rounds to be longer.

You will be able to select one of the unlocked heroes or a Goblin Berserker (the one with the axe).

This update will also bring in a bunch of new bow weapons with different effects:

Feedback & Share Bigosaur, 2017-01-18

MMiaW: Chapter 3 is live

This update brings the castle level, with new graphics and music theme. The goblins and guards are fighting each other while you are trying to reach the dungeon.

Features:

- a new boss
- Big Orc enemy
- the Royal Sorcerer enemy
- 4 new pets with new effects
- 3 new weapons
- 15 new items
- lightning based damage
- fire and lightning damage can be upgraded with the new items
- duration of freezing for ice based weapons can be upgraded
- pendants for ice, poison, fire, petrify immunity
- overdose random potion replaced with beer
- orbs can now be upgraded to bounce off the walls
- various reusable items: Magic Map, Magic Chest, Bottomless Bag of Bombs, etc.
- balancing of different weapons, spells, potions, prices
- fixes to enemy AI
- cut scene between chapter 2 and 3 can be interrupted
- other minor tweaks and improvements

Feedback & Share Bigosaur, 2017-01-05

MMiaW: Thunderstriker

A new sword is added to the game:

It's called Thunderstriker currently. If you have an idea for a better name, please tell me.

It has regular swing and overhead strike attacks and the special rage attack is to shoot a lighting bolt. The bolt doesn't knock down enemies, and does 25 damage/hit, so it can deal anywhere between 50 damage to lesser enemies to 125 damage to a boss. The shorter range of the special attack is compensated by the longer range of the sword (currently it's the weapon with the farthest reach in the game), decent damage and ability to shoot lightning through obstacles.

Get an Infinite rage potion and have some fun.

. Feedback & Share Bigosaur, 2016-12-27

MMiaW: New items

There will be some new items in the next update:

There's a reusable map, bottomless bag of bombs, and a magic chest that turns mana into gold.

Beside those, there will be a bunch of pendants granting you immunity to fire, ice, poison and petrifying. The Run Like the Wind potion is removed from the pool because it was OP - a new amulet is introduced instead which gives you a permanent speed upgrade.

The Overdose potion is going to be replaced with a Beer item, so that drinking unknown potions isn't so punishing.

. Feedback & Share Bigosaur, 2016-12-25

MMiaW: Chapter 3 coming soon

The goblins are storming into the castle. While the guards are fighting back, you are trying to get to the dungeon. You need to go through the keep while the goblins and guards are both attacking each other and you as well. This gives you some interesting tactical options. Do you just evade them and let them battle it out before attacking the winner, or you try to help the weaker side to even out the balance of power.

The next update will feature a new area with different graphics, background music and environment (traps, destructable items). And a couple of new enemies and a new boss.

Feedback & Share Bigosaur, 2016-12-17

MMiaW: MacOSX

The version for MacOSX is available for download.

It features cross-platform compatibility, so you can play online multiplayer games with your friends on Windows.

Feedback & Share Bigosaur, 2016-12-05

MMiaW: Archer's ready

The Archer character is in the game. He shows up randomly in the forest as an NPC and gives you a quest. Once you complete the quest, he will be unlocked and you can select him.

The game is on Steam: http://store.steampowered.com/app/539400

Feedback & Share Bigosaur, 2016-11-27

MMiaW: Almost there

I spent the last two weeks preparing for the Steam Early Access release. There were some bugs in the netcode, mostly edge cases that happen once in 100 games. I did A LOT of play testing, and got some really fun runs, like this one with a bunch of pet animals and melee skill buffed to 250%. Unbeatable.

I balanced some weapons and enemies, and added some play statistics. Some of the though rooms no longer show on the first few runs. Beside that, there are some potions and scrolls that also unlock after a couple of games. The game is roguelike, but I don't want the players to be hammered by too challenging world on their first play. After you play 20+ games, you'll get the full sets of enemies, scrolls, potions, room layouts, etc.

The game's coming out on November 10th as planned. Get ready for Thursday...

Feedback & Share Bigosaur, 2016-11-05

MMiaW: Blood is optional

Based on some player feedback, blood effects are optional now:

The possible settings are:

  • No blood at all
  • Only stains on the ground
  • Only flying particles when some enemy or player is hit
  • Full blood effects (both stains and particles)

Having stains makes the levels look nicer, especially the boss rooms. However it's permanent, so I think some players might want to turn it off. The splash when you hit an enemy is temporary, but I understand it could be over the top for some players, so I made that optional as well.

It took some testing to get netcode working right, because blood effects use RNG to set up and it would mean that the same seed now generates different levels based on the blood setting. I fixed blood to use a separate RNG and not mess with level generator.

Only 10 more days until Steam release...

Feedback & Share Bigosaur, 2016-10-31

MMiaW: Enemy health bars

I have been quiet with adding new features to the game as I was preparing for the Steam release. Many bugs were fixed, netcode works properly again, and I made some changes to enable full controller support. That's right, now you can lean back and play it all with a controller, even stuff like entering player names and password codes for online multiplayer.

The Glacier has been nerfed a little bit - the special Freeze All Enemies power is now magic based instead of rage based. It needs 2 mana bars to activate. It's still very powerful, but not game breaking anymore.

I also added health bars to enemies:

I was a little bit conflicted about this change. Neither Castle Crashers nor The Binding of Isaac have those. But Rampage Knights has, and the combat feels better. You would rarely look at the health bar for enemy, but sometimes it gets important, esp. when you're dealing with bigger crowds - it makes it easier to pick those you can one-shot and remove from the battle. I understand some players might not like it, so it's optional. You can turn it off in the Graphics settings.

Feedback & Share Bigosaur, 2016-10-20

MMiaW: Celestial Smasher

Here's a run showing first two levels. The game is procedurally generated on every new play, so you get to use different weapons. The video shows what you can do with the Celestial Smasher hammer.

The game's Steam page is up: store.steampowered.com/app/539400

Feedback & Share Bigosaur, 2016-10-09

MMiaW: Greenlit

My Mom is a Witch has passed the Steam Greenlight process. Expect to find the game in Early Access soon.

Why Early Access? Well, the game is far from my full vision. We have all the character graphics, but we still need a lot of backgrounds, props and animations. I want to get the game into player hands, so we can get some cool ideas on mechanics for future monsters and items. There are about 50 different items and weapons in the game currently, but I want the final release to have over 100. I already have a lot of ideas in my notepad, and I want to refine that with player feedback.

The plan is to go into Early Access by the end of the year. I will release updates with new features every two months until we reach version 1.0 which will contain: 7 playable heroes, 44 enemies, 20 bosses, 100 items/weapons and 7 different areas.

Feedback & Share Bigosaur, 2016-10-05

MMiaW: EGX 2016

I just got back from Birmingham UK where I demoed My Mom is a Witch on EGX. I had a double stand setup with two computers running the game. Four players could play on the left one, and two on the right one. The laptop in the middle just looped through the trailers all the time.

EGX is awesome for playtesting. The game logged the play stats in the background: 1682 player-sessions were played. We shared about 800 flyers to people who played the game, so everyone played about two games on average. Having two computers and multiplayer allowed a lot of people to try it. The event ran for four days, Saturday being the most crowded:

EGX was open a hour longer during the weekend days, but that additional hour didn't bring in many players. Here's the breakdown by the hour:

There were different categories of passes. From 10am to 11am only members of the press and players with super pass would come in, but they were mostly interested in AAA games, so it was rather quiet on all indie stands during that time. At 2pm there would be a huge influx of new visitors who had the afternoon pass, and when they browsed around and determined which games they want to play the interest for My Mom is a Witch would peak around 3pm.

Playing sessions

My Mom is a Witch can be hard for beginners, so the average playing session took only 3 minutes and 21 seconds. Most of the players started a new game if they died quickly. Here's the breakdown of the sessions:

Action rougelikes are great for event like this because of the short lenght of a single game. Since play sessions are short many people can try the game. Contrast this to an RPG that might take 30-40 minutes to try out and get to the core. In total, we had about 49 hours of playing time spread across two computers and four days, making it an average of six hours of play time per computer per day.

I also tracked how far into the game would the players progress:

90% of the play sessions were long enough to experience the game properly. Almost half of games went deep enough to discover some of the cool content like the item/potion/pet shop, treasure room or the boss fight. Since most of the players played twice it means that everyone has seen at least something. Of course, the game is roguelike and you only get to try a subset of weapons, items and mechanics on each playthrough.

One of the goals for EGX was to get My Mom is a Witch through Greenlight. It was a failure in that regard.

For the first three days, we only got nine Greenlight votes. Saturday evening I did some major changes to the game. I added a revival timer for multiplayer games, which made the game more fun. Also, I changed some of the controls to make it more intuitive to the players. This resulted in many happy faces and we got 30 votes that day. Still, going all the way to Birmingham to get 40 greenlight votes (or even 120 if we had a better build ready from the start) isn't really a good deal.

TL;DR: Greenlight marketing has to be done some other way.

Feedback & Share Bigosaur, 2016-09-29

MMiaW: The Red Dragon

The Red Dragon is one of the toughest bosses in the game. He can spit fire and smash the heroes from above.

For this fight I had a really cool combination of buffs: Appetite +2 and Gold Diet +2 which restored 11 HP for each gold coin I ate. My co-op partner died while beating up more than half of dragon's HP. Funny enough, the final two blows were dealt my a Bat, one of our pets.

Feedback & Share Bigosaur, 2016-09-10

MMiaW: The King's Guard

The second level will have new unique enemies. First there are guards:

The guards are quick and deadly. They can throw spears from the distance, or stab you when too close:

Their spears have great range, longer than all standard swords, so melee combat against them is very challenging.

Feedback & Share Bigosaur, 2016-09-03

IndieCade Europe 2016

IndieCade Europe

It's official! I'm delighted to inform you that My Mom is a Witch has become one of the games selected for IndieCade Europe 2016:

http://europe.indiecade.com/?p=339&lang=en

If you want to see the game live, come to Paris on November 18-19, 2016. Here's a list of all the games that will be featured:

http://europe.indiecade.com/?page_id=42&lang=en

See you in Paris!

Feedback & Share Bigosaur, 2016-08-28

MMiaW: Spitfire and damage types

I'm adding some screens without enemies, but with traps instead. It creates an interesting variety. Instead of just plowing through the piles of enemies, sometimes you have to stop and carefully thread across the screen. Of course, some screens will combine enemies with hazards, which you can use to your benefit.

These spitters shoot fireballs. Fire is one of the most dangerous types of damage. Here's a breakdown of the types of damage the game has so far:

Petrify
Turns into stone within 10 seconds. Counter with Life Staff or Dragon Fire Potion.

Fire
Burning drains health really fast. Regular fireballs, walking onto a campfire or getting hit by a spitter drains 50-60 health in a couple of seconds.

Ice
Doesn't do any damage, but prevents movement/attacking for a couple of seconds.

Poison
Slowly drains health. Can only be stopped with Dragon Fire Potion or Antidote.

Hunger
Very slowly drains health. Can be stopped by eating any type of food, including gold coins if you have the Gold Diet buff.

Feedback & Share Bigosaur, 2016-08-27

MMiaW: Battlements

It's time for the second level. As our heroes launch themselves with a catapult into the castle, they land on the top of the battlements:

As the goblin invasion is in progress, the battlements are filled with dangerous war machinery. The castle guards are defending a siege and have prepared various weapons and traps for the invaders. You are intruding here, so prepare to deal with the guards and the hazards at the same time.

The second level is meant to be more dangerous, but possibly shorter than the forest area playwise. You're walking around the battlements looking for a way to enter the castle insides.

Feedback & Share Bigosaur, 2016-08-21

MMiaW: First gameplay trailer

Here's a video showing the some gameplay of the first level:

Feedback & Share Bigosaur, 2016-08-21

MMiaW: Launch into the castle

The forest level ends like this:

I'm drawing the Castle Battlements (roof area) now and soon I'll start animating enemies for the Castle levels.

Feedback & Share Bigosaur, 2016-08-07

MMiaW: The Knight

The Knight is fully animated, programmed and ready to go:

Compared to the mage, he has a couple of extra melee animations. The weak attack has three animations instead of just two and there's a special smash animation which activates when the last enemy in the area is lying on the ground:

Feedback & Share Bigosaur, 2016-08-06

MMiaW: Potion shop

Sometimes a special kind of room will be created in the maze: a potion shop, pet shop or a quest room. More on quest rooms later, but here's the potion room:

Feedback & Share Bigosaur, 2016-07-23

MMiaW: Voodoo Magic

If you snatch a voodoo doll from the Goblin Shaman, you can use it yourself once per area. You first bind it to a target and then drop it. Any damage dealt to the doll is channeled to the target. For example, if you stomp the doll, the target takes damage and falls on the ground. If you hit it with a sword, the target gets stunned and takes damage. If you hit it with a poisoned sword, the target gets poisoned. If you toss the doll into a fire, the target starts to burn:

It took me some time to make this work properly for all the effects, but it's a really cool mechanics now. If you get bound to the doll, wait for Shaman to throw it down and then quickly pick it up and activate it to remove the binding from yourself and bind it to some enemy.

Feedback & Share Bigosaur, 2016-07-17

MMiaW: Hammers and freezing effect

Hammers are often an interesting combination of melee and magic weapon. The standard attack is a melee attack, but special attacks can be varied:

The freeze graphics is generated dynamically at run-time. Because of this the enemies really instantly freeze in place.

And here's the ice hammer:

Ice Hammer's special attack is freezing all enemies on the screen at once.

Feedback & Share Bigosaur, 2016-07-15

MMiaW: The story

I have some cut-scenes planned for the final game, but currently a couple of placeholder images will do the job of showing the game plot:

Feedback & Share Bigosaur, 2016-07-14

MMiaW: The first screen

The first game screen features 5 different NPC characters that teach you the basic game mechanics:

Some dialogs show up only if you have an appropriate type of weapon. You can hit anyone. Some of the NPCs will bare it until they die, while others might run away. At first I wanted to make everyone change their dialog when you hit them, but this is a tutorial screen and you might hit someone accidentally and miss an important part of the dialog that way.

The archery is not covered. The idea is that bows are locked down and don't drop until you unlock the Archer. Once you rescue the Archer, he explains how bows and arrows are used.

Feedback & Share Bigosaur, 2016-07-12

MMiaW: Archery

There are three main skills in the game: Melee, Magic and Archery. Finally, all animations for the mage character are now complete:

There will be a great assortment of bows and arrows available with different damage and special effects like fire, poison, freezing, petrifying, slowing, etc.

Feedback & Share Bigosaur, 2016-07-11

MMiaW: Bushido

If you attack a shop keeper, you can snatch any item for free. However, he has a bodyguard:

There are various ways you can defeat him though, but it's often very risky:

Feedback & Share Bigosaur, 2016-06-01

MMiaW: Goblin Bomber

Here's the first purely ranged enemy. He still gives you enough time to escape the bombs:

He sometimes hits other goblins, so you can use that to your advantage:

Feedback & Share Bigosaur, 2016-05-24

MMiaW: Meteor shower

The goblin shaman's main weapon is the Meteor Staff. I'm testing how the meteors work:

Looks like I forgot to limit the meteor count ;)

Feedback & Share Bigosaur, 2016-05-18

MMiaW: Goblin Shaman dance

Here's the first magic caster enemy. It's a goblin shaman. He does a magic ritual dance before attacking you from the distance:

Feedback & Share Bigosaur, 2016-05-14

MMiaW: Updating character selection screen

The character selection screen has some basic stats like Archery, Melee and Magic proficiency:

Those numbers are percentages. For example, if a Sword does 12 damage, a hero with 100 Melee will deal 12 damage when he hits, while a Hero with 50 Melee will only deal 6 damage. Those skill numbers can increase and decrease during game with various potions and artifacts.

The character on this screenshot has both Magic and Melee at 100 for testing purposes, but there won't be any such character in the game... Actually, one class (Paladin) will be close, but it will have something like 100/70/30 for Melee/Magic/Archery.

Feedback & Share Bigosaur, 2016-05-13

MMiaW: Spiked balls

Here's another environmental hazard:

I call them SpikeBalls. Does anyone know the real name?

Feedback & Share Bigosaur, 2016-05-12

MMiaW: Death animation

Is this cute, silly, or ?

Feedback & Share Bigosaur, 2016-05-10

MMiaW: Rings

You might discover rings that give you special powers of the second sight. For example, the blue one allows you to see inside locked chests.

Feedback & Share Bigosaur, 2016-05-09

MMiaW: Treasure

On every level there will be some areas that are behind locked doors or simply blocked paths. If you manage to find keys or blast your way through (or teleport across, or ...) you can get inside and loot all the chests. Well, maybe not all. Some chests are locked and you need a key to open those.

This beautiful gold chest is a drawing by George Alexopoulos who will be contributing some more art to the game in the future.

Feedback & Share Bigosaur, 2016-05-08

MMiaW: Weapon Upgrades

During the adventure, you will be able to upgrade your weapons as well. The upgrade material are the runestones, magic stones of unknown origin that can be used to improve damage and range of your weapons. There are different runestones for melee, magic and ranged weapons.

The upgrade animation is still work in progress, but I'm getting there:

Feedback & Share Bigosaur, 2016-05-07

MMiaW: Teleport

So many ways to escape when things go south: blast a door with a bomb, use a scroll to open doors, use a key if some of the doors is locked... but now there's one more. A magic scroll that teleports you to a random location somewhere else in the forest:

It never teleports you into a boss fight, but anything else is possible.

Feedback & Share Bigosaur, 2016-04-30

MMiaW: Bombs

Bombs have three different purposes in the game: 1. blast the rocks to find some items hidden underneath and to open some blocked passages. 2. blast doors to escape tough battles or locked doors when you don't have a key. 3. blast your enemies. This 3rd use is hard to do because the enemies are constantly on the move, but it's great for bosses because most of them will be stunned for a couple of seconds if the bomb hits them.

Yeah, those exploding barrels are really in the game, but they have a special role. It's secret you will have to discover while playing.

Feedback & Share Bigosaur, 2016-04-25

MMiaW: Where there's smoke, there's (camp)fire

Campfires are the first hazard in the game. If you step on it, you are set on fire for a couple of seconds, which is enough to deplete 80% of fully healed hero. At least, until you buff your hit points. The fire does not kill you ever, but it can lower your HP to just one point and then a single enemy hit will bring you down.

Enemies try to stay away from it, but with some skill you might be able to push them into fire by a well placed sweeping attack.

P.S. unlike this .gif, the animation doesn't skip frames in the real game ;)

Feedback & Share Bigosaur, 2016-04-23

MMiaW: Green Flame

Yes, I like Acquisitions Incorporated ;)

Here's a cool combo. If you get both the Snake Staff (poison) and the Fireball Staff (fire), you can buff the Fireball Staff with poison to shoot poisonous fireballs:

Enemies that get hit will be set on fire and poisoned at the same time. Somehow the burning animation is missing here, I need to fix that.

Feedback & Share Bigosaur, 2016-04-21

MMiaW: Pyromancies

It's time to play with fire. One of the playable characters will be a fire mage, so I decided to play with various fire effects. Wands can shoot fireballs which explode and enemies can players can be set on fire and lose a lot of health while burning:

Here's some animated action. The mage is still using the Snake Staff to fire fireballs, but there will be a special Fire Staff in the final game:

Feedback & Share Bigosaur, 2016-04-19

MMiaW: More levels

I got so many new elements, I guess it's time to build some variety of levels. Currently there are 15 different level layouts for the forest, but I plan to have at least 60 for the first alpha version:

Feedback & Share Bigosaur, 2016-04-17

MMiaW: Shop

There will be shops on each level, where you can buy various items like potions, bombs, scrolls, weapons, etc.

I plan to have a special potion shop that only sells potions and a pet shop that sells... well, pets.

Feedback & Share Bigosaur, 2016-04-14

MMiaW: Catapult

The first level ends when you catapult yourself into the King's Castle:

Feedback & Share Bigosaur, 2016-04-13

MMiaW: Sneaking behind Ogre Mom

If you try to pass behind her back, you might get smacked in the back:

I'm also planning an arena for the boss fight. There will be a small building for goblin warriors to come out and help the Ogre and there's a catapult that you can use when the battle is over

The boss room will have a distinct door which cannot be blasted with bombs:

Feedback & Share Bigosaur, 2016-04-12

MMiaW: Ogre Mom

Here's the gruelsome animation. I still need to work on some dust effects on the ground where the club hits:

Feedback & Share Bigosaur, 2016-04-11

MMiaW: The first Boss

Here's the first boss: Ogre Mom:

She can be challenging, especially for beginners. She will have several different attacks, the main one hitting you with that huge club:

It shows zero damage, because the player is invunerable during testing ;)

Feedback & Share Bigosaur, 2016-04-09

MMiaW: Time for some magic scrolls

Here are the magic scrolls. Of course, first comes the less interesting part, like picking them up, storing in inventory, etc.:

And then comes the fun part, i.e. using them:

Feedback & Share Bigosaur, 2016-04-08

MMiaW: Throwin' that Axe

As promised, you can pick up enemy weapons and use them. Goblin axe has a simple overhead strike attack mapped to fast attack button. Pressing Strong attack button throws it:

When your rage meter is full, you can use the sweeping mega throw attack:

Feedback & Share Bigosaur, 2016-04-07

MMiaW: Mayhem

I'm testing my game engine to see how it behaves in big battles:

Two players, 15 enemies and it works as smooth as with an empty screen. The game will run on a 10-year-old Core2Duo CPU with integrated Intel graphics card at 60fps with smaller resolutions like 1366x768. For HD screens it pushes about 53 fps on that config, but if you have just a little bit stronger CPU or dedicated GPU like nVidia or AMD it will work just fine. It only requires OpenGL 1.1, so even some really old hardware will be able to run the game.

Feedback & Share Bigosaur, 2016-04-06

MMiaW: Magic Multishot

I got the multiple shots working. Reminder, it's an effect of one of the potions:

You get more shots, but each orb is weaker. When you start a game with mage you make 6 damage per orb. When split, each orb does 5 damage, but you fire two orbs at once, so that's 10 damage, a nice increase. Of course there are other ways to increase damage back up:

A good combo is when you add poison to it. You can easily poison multiple enemies at once:

Feedback & Share Bigosaur, 2016-04-05

MMiaW: Some bugs are funny

Due to my mistake parts of two goblins got mixed up:

This looks so funny, I just had to post it. Anyway, the axe throwing works now:

Feedback & Share Bigosaur, 2016-04-04

MMiaW: Goblin Berserker

Presenting Goblin Berseker:

This goblin combines ranged and melee into a single unit. His rage increases even without hitting an enemy and when the rage is full, he throws the axe towards the player. When up-close we uses the axe to fight in classic melee strikes.

Goblin Axe is a very desired weapon for warriors. It can be thrown from a distance. If your rage meter is full, the thrown axe is unstoppable and flies across the screen knocking everyone down.

Feedback & Share Bigosaur, 2016-04-03

MMiaW: Locked doors and keys

Each level in will have one or more locked rooms with treasures.

You can unlock the rooms with keys or blast the doors open with bombs. Or you can use magic scrolls that open doors magically.

Unlocked doors are not controlled by monsters, so you can use them to escape from tight battles.

Feedback & Share Bigosaur, 2016-04-02

MMiaW: Barrels and boxes

Every game has some elements that are boring and unexcited to make but still important for player experience. Here are the boxes and barrels.

You can break barrels and boxes and find some items inside. Usually it's food and coins, but sometimes you may find keys, bombs, arrows, potions and other consumable items.

Feedback & Share Bigosaur, 2016-04-01

MMiaW: More potions

Here are some other mysterious potion effects. Some are positive, some negative, and some balanced. For example, this one reduces your hit points but increases magic. Magic skill determines the damage and size of magic projectiles, and effectiveness of magic caused effects like using magic to buff weapons with poison. The game will also feature magic scrolls and the player would need to have a certain magic skill threshold to be able to understand what the scroll does before using it. Of course, if you are a warrior, you could still read the scroll and activate its magic, but some of the scrolls have really bad effects.

Potions can also increase your base skills, even to the point where it would make sense to switch class. For example, if you buffed up archery skill and range a lot, it would be a good strategy to start using bows and arrows.

Feedback & Share Bigosaur, 2016-03-31

MMiaW: Telepathy

On your adventure, you will find different magic potions. These potions are colored differently on each playthrough. For example, blue potion can mean stronger magic in one game, and faster speed in the next game. You can discover their effect with an Identify scroll, or you can take a chance, drink and see what happens.

This one allows you to see the enemies in adjacent areas. (1B) means that the effect will wear of after one battle.

Feedback & Share Bigosaur, 2016-03-29

MMiaW: Drops

Enemies drop some loot when they die:

Feedback & Share Bigosaur, 2016-03-27

MMiaW: Mega Strike

Every melee weapon in the game has a special rage attack. Swords mostly have some kind of dashing, axes can be thrown, hammers will be able to call on help from the gods and clubs become 3 times bigger than usual and smash down the enemies

Here's the animation:

Feedback & Share Bigosaur, 2016-03-26

MMiaW: Dashing attack

Most swords have dashing as special rage attack:

Feedback & Share Bigosaur, 2016-03-26

MMiaW: Stomp complete

Here's the final version of the stomp animation:

Feedback & Share Bigosaur, 2016-03-25

MMiaW: Stomp

When enemies are knocked down, you can stomp them or smash your weapon to the ground to hit them real hard. Of course, when an enemy is on the ground, the hitbox is different, so I'm fine tuning that now.

You will be able to run and jump from a short distance. Unlike the knight, the mage jumps because he's too light to do ground smashing attack.

This looks so cool, I might add a long-jump competition to the game.

Feedback & Share Bigosaur, 2016-03-23

MMiaW: Approaching from the back and switching weapons

Goblins with shields cannot be attacked when they raise the shield, so you have to got around and attack from back:

When you defeat them, you can pick up their sword and use it:

Feedback & Share Bigosaur, 2016-03-22

MMiaW: It's hack and slash time

I'll let the animation speak for itself:

Feedback & Share Bigosaur, 2016-03-21

MMiaW: Preparing the sword swing attack

I just made this nice swoosh in Gimp for the sword swing attack.

It can also be used partially (on the first strike frame):

If you press attack button during the up-swing, the hero also does the return-swing to get back to initial position:

Feedback & Share Bigosaur, 2016-03-20

MMiaW: Healing animation complete

It's simple. You drink a health potion and regain hit points.

I added some particle effects to make it interesting:

Feedback & Share Bigosaur, 2016-03-19

MMiaW: Buffing weapons with posion

Poison buff animation complete:

Hope you like the bubbles.

Feedback & Share Bigosaur, 2016-03-18

MMiaW: Drinking

While toying with a nice pose to drink potions...

...I figured I need to remove the cork (plug) from the vial. Looks pretty good now:

Added a small emotional touch to it ;)

Feedback & Share Bigosaur, 2016-03-17

MMiaW: Small health potion

You can find various potions in the world. Some are dropped from fallen enemies, some are found in chests, some are stored in barrels and boxes, some even hidden under the rocks which you will be able to destroy with bombs. And you will be able to buy some in shops as well.

Here's a small health potion. At the top, you can see what it looks like in player's inventory, and underneath is how you pick it up.

It heals 20 hit points, which is equal to one red bar. You can stack multiple potions of the same kind, so they only take one inventory slot.

I made a spearate magic particle effect animation for smaller items like this one.

Feedback & Share Bigosaur, 2016-03-16

MMiaW: Special magic powers

One of the characters available at the start of the game is a mage who has a Snake Staff as the primary weapon. The Snake Staff fires basic blue magic orbs and has a special ability to imbue poison to weapons. It can imbue poison to itself as well, so you get to fire poisoned orbs.

The amount of poison damage depends on the player's magic proficiency. At 100% it's going to be 3 poison damage every 1.5 seconds (it only shows 2 in the screenshot, because I messed around with player stats and it wasn't at 100%). If a player is not very good with magic (say, a knight has only 30%), it will only do one poison damage in the same interval.

The poison does not kill, but it can completely drain the health points, and then it only takes one hit to finish off the enemy. The same goes for player characters.

It can be also used to make swords poisonous, or even some more deadly combinations: for example, if you find a fireball staff, you can make it poisonous as well, and it will shoot fireballs that set enemy on fire and poison him at the same time.

Feedback & Share Bigosaur, 2016-03-15

MMiaW: Magic orbs hit and explode animation

Magic orbs break apart when they hit an enemy, some obstacle or lose velocity and fall to the ground

In the actual game, the goblin gets knocked back a little bit further after each hit, but this .gif loops, so it looks like he's just shaking a little.

Feedback & Share Bigosaur, 2016-03-14

MMiaW: Weapon pickup

You can pick up weapons of fallen enemies:

You will also be able to pick up weapons that drop from chests, barrels, boxes, etc. I spent a couple of hours experimenting until I got this cool magic hovering effect:

The .gif doesn't loop perfectly, but you can still see it.

Feedback & Share Bigosaur, 2016-03-13

MMiaW: Crowd control

Add a bunch of goblins and the action becomes intense. I have improved the AI, so now they don't walk over each other anymore. They are trying to surround the player from all sides.

Using melee weapons really feels like playing a true brawler game like Castle Crashers.

Feedback & Share Bigosaur, 2016-03-12

MMiaW: Dual stick shooting

The basic magic staffs fire magic orb projectiles. Some other staffs will be able to launch fireballs, ice bolts, etc. Here's the ice projectile:

When wielding a magic staff, the player can walk in one direction and independently shoot in a different direction. It's very useful when you are retreating:

If you are using a controller, one stick controls the movement and other the shooting direction. Because of the way the game is played, only left and right directions are available for shooting. Although, with some upgrades, you can get diagonal and homing projectiles as well. If you play on keyboard, there are two keys assigned to shoot left or right.

Feedback & Share Bigosaur, 2016-03-11

MMiaW: A third (and final) iteration on UI

I believe I finally nailed the design for the player info overlay:

Here's the explanation how it works:

Feedback & Share Bigosaur, 2016-03-10

MMiaW: A second stab at user interface

I tried playing the game with the previous UI idea which had a horizontal bar for Health, Mana and Rage. However, it's quite unclear that Mana and Rage are tied to the weapons and items. So, now I'm changing the layout: there's only one Health bar at the top - the Mana and Rage bars will be shown alongside of weapons and items that require them.

Don't be confused with the portrait image - I'm currently controlling a goblin instead of hero, because he has complete animation set.

I think this layout will work, but I'm not really happy with the graphics. Need to experiment with some other designs....

Feedback & Share Bigosaur, 2016-03-09

MMiaW: Dead goblins and weapon drops

One of the ideas in MMiaW is that you can pick up any weapon from a defeated enemy. Here's what the goblin looks like when he's dead:

You can then pick up his club and use it to attack.

Feedback & Share Bigosaur, 2016-03-09

MMiaW: Animations and basic AI

Not much to show on the screenshot, but the Goblin Clubber and Goblin Shielder are fully animated and the basic AI works: collision detection, avoiding obstacles, moving towards the player and attacking.

The hitboxes mostly work ok, although there are some subtle bugs (see the club tip for example) that I need to fix.

Feedback & Share Bigosaur, 2016-03-08

MMiaW: UI overlay

Here's the user interface. I'm still not 100% sure whether to show the player stats on top or bottom. The game can be played by 4 players, so maybe I can show two players up and two down, or something like that.

The red bar is health, the blue is mana, and the green on is Rage. The rage fills up when you hit enemies with melee weapons and when you get hit. When the rage bar is full, you can use a special melee attack which will depend on the weapon type (sword, axe, spear, hammer, club).

You can see the two weapon slots, but I plan to allow players to carry some items as well. Not sure where I will show those.

If you wonder what's that blue ball: the magic staff shoots magic orbs that resemble tears in The Binding of Isaac. This is the most basic projectile. Other wands will fire different ones. For example the Staff of Fire will shoot fireballs that set enemies on fire; the Staff of Ice will shoot ice bolts that freeze the enemies, etc.

The map

In the meantime I gave up on the smaller screen idea. 1366x768 sized rooms are too small for big 1920x1080 monitors. Although you can see multiple rooms at the same time, it would still mean that 40% of sceen is unused. I tested and there's just too much empty black space on the screen. So, I decided to make the rooms wider. The room size is now 1920x720. Players with smaller screens will scroll left to right, just like Castle Crashers. There is no vertical scrolling. If you have more than 720p high screen you will be able to see more of the beautiful backgrounds that extend at the top of the screen.

Because the rooms are rather wide (or should I say: long?) now having a single entrance vertically doesn't work well. Because of this, I'm changing the maze layout to hexagonal rooms. Each room can have 6 different exits. The new maze generator already works, and here's the minimap:

This one shows small rooms and it's optimized for 720p screens (768px, 800px, etc.) If you have 900+ it starts showing a bigger minimap. Once I add all the different room types I will add markers for different rooms and perhaps if you left some important items somewhere. And there will be magic spells to discover the whole map.

The white rectangle is the current room, light ones were visited and dark ones you know about (have seen the door to it) but haven't been inside.

Feedback & Share Bigosaur, 2016-03-07

MMiaW: Action

This character is a mage, but I decided to animate him first. Mages can pick up melee weapons and attack too - they just deal less damage than knights. You can pick up any weapon that the enemies drop when they die. In this shot, the mage is using a goblin club :)

The font for damage numbers is bad, I'm experimenting with some others. Sorry about the small yellow crosses - I'm using those to determine the hitbox using some basic trigonometry. The cross should represent the location of the weapon's tip.

Feedback & Share Bigosaur, 2016-03-06

MMiaW: Goblin Defender

Here's the second goblin. Once you attack him, he raises his shield and then he's only vunerable to very strong attacks. However, you can sneak behind his back and hit him.

I built a custom animation engine. I make animations in Anime Studio Pro and then export them into JSON. Then I massage this JSON format into C++ code that I include directly into my project. Since I don't have a player character yet, I'm using the keyboard controls to move the goblin around:

P.S. This .gif animation has slower framerate than the game. The goblin actually moves a little bit faster. The game runs at constant 60 fps all the time.

Feedback & Share Bigosaur, 2016-03-05

MMiaW: Doors

Here are the doors between forest areas in open, closed and blocked state. You can blast the blocked doors with bombs to discover secret stash of treasure chests. The regular doors close when there are monsters on the screen, so you have to beat them to go further. Or, you can blast the door open with a bomb and escape the battle. Beside this, there will be a magic spell that opens doors.

I also plan to add a special Boss door for the boss room, and locked doors for which you'll need a key to unlock. I'm not sure if the shop needs a special door as well?

Feedback & Share Bigosaur, 2016-03-04

MMiaW: Character selection screen

The character selection screen works now:

The game can be played with 1-4 players. So far the local co-op works, but I plan to make the online multiplayer as well.

Feedback & Share Bigosaur, 2016-03-04

MMiaW: Main menu and forest background

The main menu is fully functional now. I'm reusing the custom engine from my previous game, so all I needed was a good font and some nice graphics to make it work:

I plan to add some goblins who would walk across the screen down in the forest. Just need to animate them first.

This will also be the base background for the forest levels.

Feedback & Share Bigosaur, 2016-03-04

MMiaw: The Story

You mom is a witch. Together with your brother, the three of you live in a forest. One day, the king's soldiers show up at your home and take her away without any explanation. As a player, you can choose one (or both in co-op) of her sons to go on a rescue mission. One of the sons is a young sorcerer and the other one is a warrior.

In the meantime, someone has stolen a powerful ancient artifact from the goblins who live in the nearby forest. Angry goblin patrols are searching the forest for the thief.

You need to avoid or fight the goblins to reach the castle, and then find a way to get inside. On your adventure, you can rescue or recruit other heroes to help you on your quest. (up to 4 players will be able to play in co-op mode, with 12 different playable characters).

Once inside the castle, you try to reach the dungeon hoping that the mom is locked up and alive. Meanwhile, the goblins track the thief to the king's castle gate, and they demand their artifact back. The king soldiers cannot find the thief and aren't able to produce the artifact. The goblins demand to come inside and find it themselves, but the king refuses. The goblin siege begins and soon they manage to break down the defenses and come inside... now you need to fight both the goblins and the guards. They fight against each other too.

But the real reason why your mother was taken away remains a mystery until you find her...

(rest of the story in game)

Feedback & Share Bigosaur, 2016-03-04

MMiaw: The first enemy

Here's the first enemy for the My Mom is a Witch game. I'm still playing with different poses in Anime Studio Pro:

The forest will feature 4 enemy factions: goblins, bandits, skeletons, and various animals: bees, bears, etc. This is the most basic goblin melee unit with short range, but powerful strike that deals a lot of damage. He's slow and heavy, so make sure you don't get hit.

I need to put some work in that swoosh effect to make it look better...

Feedback & Share Bigosaur, 2016-03-03

Room layout for a game like the Binding of Isaac

My Mom is a Witch will feature dungeon crawling with rooms, similar to what Binding of Isaac game does. Unlike Isaac, I want graphics in MMiaW to be pixel-perfect, without stretching artifacts.

The target platform for MMiaW is PC. I looked at the Steam hardware surveys, and it seems that two resolutions dominate: 1366x768 for laptops and 1920x1080 for desktops. I plan to design the game rooms to fit perfectly into the smaller, 1366x768 resolution. Players who have even smaller screens won't be able to see the whole room at once, it will scroll. Players who have biggers screens will be able to see multiple rooms at once. This way the graphics will always be sharp.

I also contemplated on making the room size different based on player's screen resolution, but I want the game to have online multiplayer as well and for that reason the rooms have to be the same size on all computers.

Feedback & Share Bigosaur, 2016-03-02

Witch fonts and graphics

Finding a good font for the game logo takes some time and experimenting...

Here are some trees, bushes and flowers for the forest levels where the story starts.

Feedback & Share Bigosaur, 2016-03-01

My Mom's a Witch

In the past 7 months I have been planning a new game to make. It will be a multiplayer action brawler like Castle Crashers with cartoony graphics. The main problem I have with CC is that once you complete it, there's no incentive to play more. So, I decided to combine the brawler mechanics with roguelike elements: permadeath, procedural generation of levels, items, enemies, etc. and non-modal gameplay (esp. important if you have 4 players playing).

I have most of the concepts on paper and spreadsheets and some 60% of the graphics is ready (still need to work on animations and special effects a lot). Current plan includes: 12 heroes, 44 monsters, 16 bosses and 6 different environments (forest, battlements, castle, dungeon, catacombs and a special ice level). Additionally, 50+ different weapons and items will be available to loot and use for the first version, and more planned later.

There will be 3 distinct play styles available, focusing on melee, ranged or magic combat. The player's starting class would determine the proficiency (i.e. base damage and effect modifiers) but the player can upgrade during the game and become multi-class if desired (and RNG does not get in the way). Melee combat is going to work similar to Castle Crashers with additional "rage" mechanics, which is a meter that fills up and you can use a special attack then.

The levels will be laid out like rooms in the Binding of Isaac with boss fight at the end of each level. The mana system and magic items will work like batteries in Isaac (i.e. you need to complete a couple of rooms before reusing the special magic) and the regular magic users can constantly shoot various weak projectiles similar to tears in Isaac.

I plan to post my progress every day, so stay tuned

Feedback & Share Bigosaur, 2016-03-01

Seeders (was The Final Jump)

I finally got the whole game story in place. A group of skaters learns that their playground is going to be demolished and turned into a mall. They consider all their options and the only possible way would be to steal the permits and other documents fromt the construction company (not, really, but in their teenage minds that should do it). One of them decides to steal them, but goes missing. You are his friend, determined to find him.

But, that's not all. The real story actually starts 10000 years ago when an alien Von Neumann colonization ship lands on Earth. It's task is to seed the Earth with plants that would convert the atmosphere and also to eliminate any intelligent life that could oppose the colonization. However, something goes wrong and hibernated aliens aboard the ship never wake up.

Until a construction company starts digging around, accidentally turns on the ship's systems and aliens take it over. The aliens learn about humans and decide they need to build a robot army to exterminate us. The Mall location is perfect facade to build an underground factory without raising any alarms.

I'm currently preparing a demo of the game, which will include most of the first chapter. It won't feature any aliens, only the puzzles that lead to the construction company headquarters. So, don't worry about spoilers, the real story starts unveiling after the demo.

Feedback & Share Bigosaur, 2015-03-10

Seeders: The First Encounter

Here are some images from the game. Checkpoints:

Elevators

I'm currently preparing a demo of the game, featuring the first chapter which won't feature any aliens, only the puzzles that lead to the construction company headquarters. So, don't worry about spoilers, the real story starts unveiling after the demo.

Feedback & Share Bigosaur, 2015-03-10

The Final Jump: pixel art

I'm ditching the dark-art idea. The game should be fun and bright. I wanted to draw a game with pixel art for some time, and I guess the time is now. Here's my idea for the lead protagonist:

His passions are driving a spaceship and listening to heavy metal music. I need to work on his legs and...

...well, everything below the head. :)

If you got some suggestions, let me know.

Feedback & Share Bigosaur, 2014-11-20

The Final Jump: dark art

I'm experimenting with different art for the game. Here's the dark version.

The light version does not look that good, but plays much better because brick types are distinct enough and it's clear what you can do. Maybe I should look for a third art style, something like Braid?

I'm not sure what to do next. I got a lot of puzzles prepared but don't want to waste time making the, just to have to redo everything if I decide to change the art style.

Feedback & Share Bigosaur, 2014-11-19

The Final Jump: puzzle platformer

Starting this year I wanted to develop some applications for iPhone and iPad, so I got a Mac Mini. My other computers are 7+ years old, so I couldn't run any recent games. Over the years I accumulated games via Humble Indie Bundles and I finally got to play them. I'm very impressed with Braid, VVVVVV and Limbo.

A few days ago I realized that I wanted to play more puzzle platformers like those, but there aren't many around. So I decided to build one. The idea is to take from each game the element I like:

  • Braid: briliant puzzles
  • VVVVVV: old school graphics
  • Limbo: continuous camera, puzzles with box2D physics and scripted enemies

The main gripe I have with all of those games is that they were too short (ok, Braid maybe not so, because puzzles were hard). I plan to make A LOT of levels in my game AND I will make a level editor with “cloud save”, so you'll be able to upload and share levels on game's website. Other players will be able download and rate the levels. If players really start contributing a lot of levels, I'll pick the best ones, pack them together to continue the main games story in a nice way and release as DLC package.

Because of this, editing levels should be fun. My plan is to mix editing and play mode, so you can play the level as you edit it. Just drag the player, walls, boxes around. You will be able to freeze the enemies and such, but editing should be as fun as playing.

Also, my kids are begging me for multiplayer mode, so it might have separate local co-op puzzles for 2-3 players. Joystick/Controller support is also a must as I plan this to run on desktop computers (Windows, Linux, Mac).

Feedback & Share Bigosaur, 2014-11-05

Gods of Sparta: final release + video

It's all done. Here's a video showing gameplay. It has a mouse pointer because I recorded it on a desktop computer, but it looks exactly the same on Android tablets:

Grab it in Google Play Store:

https://play.google.com/store/apps/details?id=com.bigosaur.gos.android

Feedback & Share Bigosaur, 2014-10-28

Gods of Sparta: second release

The second beta version is ready for testing. Everything should work, except that it lacks music in the main menu screen (should be coming soon). Please test and tell me how you like it and if you think something needs to be improved.

If you installed the first beta, please remove it from your Android. The application package name has changed, so Google is treating this new one as a separate application and won't update the game. You have to install this one as if it was a completely different game. Sorry for the inconvenience.

Feedback & Share Bigosaur, 2014-10-23

Progress report: writing AI, setting up Eclipse and libGDX on Ubuntu

Well, it turns out creating AI wasn't simple at all, but I finally finished it. In the meantime, Voyna created a great music piece to play in the background during the battle. I also had to switch to latest libGDX because I couldn't get the AdMob to work on the old one. Of course, that would be too simple. The new libGDX wouldn't work on my old Slackware, so I installed Ubuntu 14.04 and set up everything there. There was a problem with my old Intel i915 graphic card which supports OpenGL 2.0, but Eclipse/libGDX failed to recognize that. I fixed that with by setting env. variable:

MESA_GL_VERSION_OVERRIDE=2.0 ./eclipse

I also got some weird problems like Eclipse crashing whenever I used autocomplete. I fixed that by adding this to eclipse.ini:

-Dorg.eclipse.swt.browser.DefaultType=mozilla

The tooltips were also completely invisible (black text on black background). Apparently Eclipse only honors the system background color. I fixed that with gnome-color-chooser. At first I changed the color to a bright one, but then tooltips became unreadable in Firefox (while text on white background). Go figure. One would expect that there are some Ubuntu developers who use both Eclipse and Firefox. In the end I used a shade of gray to get some contrast against both white and black text.

I need to do a lot of testing now. First beta should be out tomorrow.

Feedback & Share Bigosaur, 2014-10-22

Gods of Sparta: gameplay works fully

I finished conversion to landscape mode and implemented the attack icons and animations. For most attacks the cards just move and shake a little bit. Ranged units have special animations, Zeus fires thunderbolts and Catapult throws rocks at enemies. I added the damage numbers to attack icons and it's now visible which type of attack deals the most damage.

I also created some nice icons for unit Energy (heart) and also Attack (sword) and Defense (shield). Those show up when the default unit values are modified (by artifact or an ally that stands next to them). This makes the game fluid to play, as you don't have to keep do the calculations manually all the time.

What's left to do: Turn indicator graphics, Sound effects, Music (I'm going to get help from a musician), AdMob integration. Initially the game was supposed to be only a two-player game, but now I'm thinking about single player mode as well. Writing good AI for this strategy might get complicated, but it's worth a shot. There's still enough time before the end of October.

Feedback & Share Bigosaur, 2014-10-16

Reducing .apk size of my Android game by 88%

As I switched to landscape mode, I started to create mirror-flipped images of unit cards using the -flop option in ImageMagic in one of the card-generating steps. As the script rolled on for some time, it hit me that this would increase the amount of graphics a lot. I got worried about the size of the final .apk file. First time since I started the project I decided to check.

I created a package containing only the lowest (800x480) and highest (2560x1600) resolution images. It's 106MB!

I need to add 4 intermediate resolutions, so I'm looking at 300+ MB for the final .apk. I searched the docs and found that the limit is 50MB and rest has to be provided as a separate package. Or, you can distribute two different .apk files. I didn't like any of those. I hate when you download an Android game, and then you have to wait for it to download hundreds of megabytes more. I needed a new approach.

I searched the Internet. Most advices are about packing your code using compressor/obfuscator programs. But the gains are really negligible. Then one thing caught my eye: using JPEG for textures. I'm using TextureAtlas to pack everything automatically, but I could separate the images with and those without transparent areas and pack them separately as PNG or JPG.

The problem is that 90% or the graphics need transparency. In this particular case the main problem are the card images, which have rounded corners. And then I got this great idea: separate the card image into frame and contents. There are only four card types in the game (one for each faction and gold one for the items), and all cards of the same type share the same frame. The inside of the card is different for each one, but it does not require transparency. Instead of packing 126 cards into PNG texture, I would pack 126 cards into JPG texture plus 4 frames into PNG.

As I tried this, I got some weird clipping artifacts in the JPG texture, probably because I turned off the 2-pixel padding. So, instead of pixel precise cropping, I increased part of the graphics that gets copied to JPG so that there is some overlap. When staging the images, make sure the jpg one is drawn first and PNG frame over it. The part that overlays will covers the bad edge pixels.

BTW, by “staging” I mean placing the Images into libGDX Stage. To make the code simpler, I created a nice CardImage class (descended from Group) to handle drawing transparently. This Group contains the center of the card from JPG texture and then positions the frame from PNG texture over that.

This saved A LOT, but I got so concerned about the size that I wanted to do something about flipping as well. I researched if I could only flip a part of the image. It's possible using AtlasRegion.flip() function. But I also had the problem that I didn't want to flip the whole image. The textual part should remain the same and only the unit graphics should be mirrored. To do this, after calling flip(true,false) I used setRegionY and setRegionHeight to reduce the flipped region size. Using the flipped region I created another Image and added it to the CardImage group. At runtime, I simply show or hide this image when I need to unit to face left or right.

Result

New .apk file with the same content is now only 12MB. A 88% save. Once I add all the other resolutions, I estimate the final .apk to be about 40MB if all goes as planned. Compare this with 300MB+ I expected at the beginning.

TL;DR Summary

Beside all the other advice you might find on the web (compressing the code, etc.), add these three:

  1. use JPG wherever possible
  2. if you use PNG only for semi-transparent border, cut the image into frame + content. Store the frame in PNG and content in JPG Of course, if your frame is not reusable on multiple images and has complex colors this my have the opposite effect. However, there's a solution to that as well: cut the frame into four pieces (left,right,up,down) and assemble it at runtime. No more empty space in the middle of the frame in PNG.
  3. If you have images that are flipped or rotated, store only the original and flip/rotate at runtime.

UPDATE Oct 28: The final .apk with all the graphics, music and sound effects is 42MB:

https://play.google.com/store/apps/details?id=com.bigosaur.gos.android

Mission accomplished :)

Feedback & Share Bigosaur, 2014-10-14

Use the Landscape, Luke

Just like the last time, I decided that I have to change the screen orientation mid-project. This time from portrait into landscape. Here are the reasons:

  • attack graphics looks odd upside down
  • I want to provide hints how damage is calculated, awkward since all the enemy cards are upside down.
  • Thumbnails used to pick units from your deck are too small on phones.
  • YouTube videos are landscape.
  • Desktop version of the game (if I ever release any) can use larger resolution.
  • I can test larger resolutions on my monitor instead of having to run it on the Android devices.
  • Players will sit next to each other, so they won't have to put the device down on a table to play. You can play it with a friend in a bus or on a train.
  • Much more available screen space for unit stack and enough space for additional user interface. See how everything is crammed currently and a lot of space is wasted sideways:

Cons:

  • I have to redraw some of the graphics
  • I now need horizontally flipped unit graphics which will almost double the memory consumption of the game (I cannot simply flip the whole card, as it contains pregenerated text as well)
  • The drafting screen cannot use the rotations to indicate current player

To conclude: unless the game is meant to be played like Flappy Bird (using the same hand that holds the phone and having only one command: “tap anywhere”) use the LANDSCAPE orientation.

Feedback & Share Bigosaur, 2014-10-12

Battlefield

If got a lot done in the past two days. The main battle mechanics work. You can place and move units, and attack. There is still no attack animation. As you can see on the screenshot, some units are turned upside-down. This is because it's a two player game. The idea is that you put the phone/tablet down and sit across each other and play.

Flying units like dragons can reach any field, while others have to move one step at the time. Each turn, a player can move and attack, or attack only. Once you attack, it's the other player's turn.

I'm currently drawing some attack icons. When you select your unit in the field, those circles would rotate over the adjacent enemies and you can pick which one to attack.

Depending on the attacker, a different circle would be used. Olympus units would get a blue round one. Humans get the yellow square (at least I tried to make it resemble a cross). Underworld units have the hexagram. I drew all these in Inkscape.

Feedback & Share Bigosaur, 2014-10-11

Picking cards and explaining how they work

I know players hate reading complex rules, so I tried to make a screen that would explain how the cards work without getting too complicated. Here are the basic rules:

At the start of each game, the players are presented with a deck of 20 cards and they take turns picking one by one until each has 10 in their hand. After that the battle starts.

When the first player picks the card, all the other cards rotate 180 degrees to face the player sitting across. It's a two-player local duel game.

Feedback & Share Bigosaur, 2014-10-10

Understanding relations between setOrigin, setScale and setPosition in libGdx

For card animations in Gods of Sparta I'm using the largest card graphics all around. The cards get scaled and rotated as they move. To rotate the image around it's center, you need to setOrigin to (width/2, height/2). However, the origin is also used for scaling, so if you scale the image it will no longer stay at the same (x,y) position you set with setPosition.

To get the scaled image in some particular position, you need to offset the coordinates. See the image below for the exact math:

We want to position the scaled image to (60,70), but since it has setOrigin, it shows up in a different spot. To place it properly, we need to move it half of the difference between full and scaled image.

Now that we know how it works, it all makes sense. I hope this saves other developers some time.

Feedback & Share Bigosaur, 2014-10-10

How to draw a ring with Inkscape

On of the artifacts in my game is the mythical Ring of Gyges. I decided to improve my graphics skills and learn Inkscape better. Rings and other metal surfaces are rather simple to draw, you just need to combine proper gradients.

I started with basic eclipse, duplicated the shape multiple times and then created unions and intersections needed to assemble the ring. I used a brown-gold-white-gold-brown gradient (it's easy to make a custom gradient like this in Inkscape). To get the proper gradient (straightforward or reverse) I put a real ring on my desk and watched the colors.

This is the basic ring. But lets make it look really good. First I rotated it about 180 degrees and then added a gem to it:

As you can see the gem has multiple layers. On the bottom we have a black circle with white border. Border is not the same everywhere, it has a gray-white gradient stretching from left to right. Outside it, there's another border, with black-to-transparent gradient. This is used to create a 3D effect on the ring's metal surface. Over that, we have a half-circle with another gradient. This time the gradient is radial, extending from the bottom-left corner which has a white point. That point looks like a point where the light enters the gem. This is the base. Now we will add color. You can pick any color. I choose blue.

First, we create the dark blue overlay (one the the right in the image above). Note that is also has a slight gradient going from left to right. The light blue layer on the top is used to complement the bottom-left white point in the black and white base. As the light enters in the bottom-left corner it goes through the gem and exits in it's top-right part. There is no sharp point there, although you could put one if you want to achieve a different effect.

Finally, here's the artifact's card in my Gods of Sparta game:

Feedback & Share Bigosaur, 2014-10-08

Gods of Sparta factions

The game is based on 4 card types. There's 3 unit factions: Olymups (Zeus, Athena and some creatures), Underworld (Hades, Cerberus, Minotaur...) and Humans (Achilles, Hercules, etc.) and some items that the units can equip.

Olympus will have bonus when fighting against Humans. In mythology the gods of Olympus always had control over human fate.

Humans will have bonus against the Underworld units. In myths, greek heroes often defeated the monsters and some even went into the world of dead to do some quests.

Underworld unit will have bonus against Olympus. This will make the game fairly balanced. A single unit can be extremely deadly against one opponent and completely useless against the other.

The units will have a single number for attack, defense and energy. But there will be different special abilites that can increase or decrease that during battle. There will also be items (artifacts) that modify attack and defense. For example, here's a sword I drew in InkScape:

Feedback & Share Bigosaur, 2014-10-08

How to pick artists on Fiverr

I'm still learning how to draw well, and I'll make all the artifacts images. But for units, I need some good artists to make nice pictures. I searched the fiverr.com and found some really good ones. Here are some pictures I commisioned for Gods of Sparta game.

Most artists on Fiverr are only good with a particular style, so make sure you look at their portfolio before ordering. For example, an artist from South Africa with username seatongrey has a great style that would fit Underworld units in Gods of Sparta. But I wouldn't use him for Human faction. He made the Dragon above, and here's the Hades:

For Human units, I hired glass84 and johannan. Here's Achilles from glass84:

The turnaround is usually a couple of days. You can see the average in the artist's profile. Now, be prepared that some artists might be busy and won't get back to you quickly (or ever). If that happens, just cancel the gig and hire another one.

Be prepared that some designs might fail. For Olympus units I had to combine different artists. flannery is good with horses, so I got Pegasus and Unicorn:

Medusa was a tough nut. I hired four different artists and in the end had to use one who is really expensive. But he's a pro:

I had to edit each of the images a little bit. The dragon was completely ok, but it had a big belly, so I had to crop the image to focus on the head and fire. I had to change or add the background to Achilles, Unicorn and Medusa. I also increased the contrast, added a drop shadow or glow where needed, etc. The only picture I did not touch at all is Hades. So, don't expect to get a perfect image served on a silver platter. Remember that Fiverr is meant to be the cheapest service while still having a decent quality.

I'm pretty satisfied the way all this turned out. Still, I think that for my next project I will learn how to draw myself.

Feedback & Share Bigosaur, 2014-10-07

ImageMagic scripts to scale graphics for different Android screens

Battlefield is the screen players will see all the time. At first I thought about building it from tiles, but I changed my mind. It's going to be fullscreen graphics, in all it's HD glory. I found some free wood, sand and stone textures and played with them in Gimp for almost two days now. Here's the end result:

Looks kind of lame on this thumbnail size, but I assure you it's much better on an Android device. The shaded part is the background used to fill the space on wider devices. It isn't really shaded in the actual file.

I created this screen at 2134x2733 pixels, so that it covers all possible Android devices. Now, I need to scale it to sizes appropriate for 800, 1024, 1280, 1536 and 1920 screens. To avoid doing this manually, I created a simple script that calls the imagemagick tool to do the scaling. Here's the script:

#!/bin/bash
convert images/2560/$1 -resize 31.25% images/800/$1
convert images/2560/$1 -resize 37.5%  -gravity center -crop 1024x1024+0+0 +repage images/1024/$1
convert images/2560/$1 -resize 50%    images/1280/$1
convert images/2560/$1 -resize 60%    images/1536/$1
convert images/2560/$1 -resize 75%    -gravity center -crop 2048x2048+0+0 +repage images/1920/$1

You need to create directories named 800, 1024, 1280, 1536 and 1920. You should create all images in directory named 2560 and then just run the script to create the others:

./generate.sh background.png

If you don't like the default blurry edges, you can use -adaptive-resize instead of just -resize. The difference is similar to using Cubic vs Lanczos algorithm when scaling in Gimp.

I guess I should explain the gravity/crop/repage options. To ensure that the large images load on devices with less RAM or older graphics cards, I'm making sure that the whole background image can fit into one texture. On older devices, textures are limited to 1024x1024 pixels. Then there's a middle ground of 2048x2048 pixels and the newest devices that support 4096x4096 pixel texutres. If the device screen is less than 1024x1024 it's a safe bet to allow 1024x1024 pixel textures on it.

The resize script sometimes overflows the texture size but a pixel or two. For example, 2733x2134 picture would be resized to 1025x800 or similar. To work around that, we simply crop the image to 1024x800, or whatever is the maximum allowed texture size. We crop using the center of the image, thus the -gravity option. By default, imagemagick script would create multiple files in this case, and we only want one. That's why +0+0 and +repage are needed. Those options simply discard the second file.

To create the texture atlases, I use the following code in libGDX:

Settings settings1024 = new Settings();
settings1024.minHeight = 1024;
settings1024.minWidth = 1024;
settings1024.maxWidth = 1024;
settings1024.maxHeight = 1024;
settings1024.paddingX = 0;
settings1024.paddingY = 0;
settings1024.combineSubdirectories = true;

Settings settings2048 = new Settings();
settings2048.minHeight = 1024;
settings2048.minWidth = 1024;
settings2048.maxWidth = 2048;
settings2048.maxHeight = 2048;
settings2048.paddingX = 0;
settings2048.paddingY = 0;
settings2048.combineSubdirectories = true;

Settings settings4096 = new Settings();
settings4096.minHeight = 1024;
settings4096.minWidth = 1024;
settings4096.maxWidth = 4096;
settings4096.maxHeight = 4096;
settings4096.paddingX = 0;
settings4096.paddingY = 0;
settings4096.combineSubdirectories = true;

TexturePacker2.process(settings1024, "../images/800", "../GoS-android/assets", "800");
TexturePacker2.process(settings1024, "../images/1024", "../GoS-android/assets", "1024");

TexturePacker2.process(settings2048, "../images/1280", "../GoS-android/assets", "1280");
TexturePacker2.process(settings2048, "../images/1536", "../GoS-android/assets", "1536");
TexturePacker2.process(settings2048, "../images/1920", "../GoS-android/assets", "1920");

TexturePacker2.process(settings4096, "../images/2560", "../GoS-android/assets", "2560");
    

Note how the different texture size is used depending on the device screen resolution. I placed this code in main() function of Main() class of the desktop version of the game. I keep it commented out until I change the graphics.

Important note: the default TexturePacker settings use the 2px padding to avoid any artifacts when your graphics have semi-transparent pixels on the edges (alpha between 0 and 1). I noticed those artifacts in my Drone Invaders game where I did not use the texture packer. When a moon gets rotated, sometimes a few orange dots would show up.

The code above sets the padding to zero to allow 1024 and 2048 pixel backgrounds to fit into a single texture. I recommend using this code for backgrounds and other rectangular graphics. For the rest, there are two options:

  1. create a separate set of directories and settings
  2. add 2-pixel transparent border to all the graphics

The first one complicates the loading code a little bit. The second one is easier, but you have to account for those 2 pixels whenever you want to position something on the screen at the exact coordinates. Both approaches work if you start to do it from the beginnning, so just pick one and stick with it all the time.

Feedback & Share Bigosaur, 2014-10-06

How to properly handle fullscreen immersive move in Android KitKat

I noticed that on newer devices, the resolutions from my previous post are not always fully available. After some investigation, it turned out that a part of screen is used for Android interface buttons (back, home, menu) which are hardware buttons on some devices and virtual buttons on other.

To get the full screen and still have the resolution math from my previous post functional, we need to enter the immersive mode. This a feature available since KitKat (Android 4.4). I experimented with various devices and finally arrived to this code:

public class MainActivity extends AndroidApplication {

    private Handler mHandler = new Handler();
    private Runnable decor_view_settings;
    private int viewFlags = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        if (Build.VERSION.SDK_INT >= 19)    // KitKat
        {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setupBars19();
        }

        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useGL20 = false;

        initialize(new GosGame(), cfg);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus)
    {
        if (Build.VERSION.SDK_INT < 19)	// KitKat
            return;

        if (hasFocus)
            mHandler.postDelayed(decor_view_settings, 5000);
        else
            mHandler.removeCallbacks(decor_view_settings);
    }

    @TargetApi(19)
    public void setupBars19()
    {
        viewFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_FULLSCREEN;

        decor_view_settings = new Runnable()
        {
            public void run()
            {
                getWindow().getDecorView().setSystemUiVisibility(viewFlags);
            }
        };

        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(viewFlags);

        decorView.setOnSystemUiVisibilityChangeListener
        (new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == 0) {
                    mHandler.postDelayed(decor_view_settings, 5000);
                }
            }
        });
    }
}

The code compiles on all versions, but only does stuff when the system is KitKat. As I wrote, I tested various devices (Nexus 7 and 10, Galaxy S3 and S4, etc.). It seems to work perfectly.

Feedback & Share Bigosaur, 2014-10-04

Supporting multiple resolutions in 2D games on Android in 2014

Supporting various Android devices for your game can be confusing. For 3D games it's easy, because conversion to 2D space is done constantly at run-time. Players of 3D games don't mind if the result is blocky, blurred or sharp at edges. However, for 2D games, every pixel matters. You could use built-in scaling, but the image is not crisp and your game doesn't look as good as it deserves. All the hard effort you put into making great graphics would go to waste.

To make your game look good, you want to use the device native resolution. Because of this, you need to produce all graphics in different sizes. But there are a myriad of screen sizes and resolutions on Android, with different width/height ratio. Here are some hard and fast rules you can use to support all the devices that currently (2014) make 99% of the market.

First thing to remember is that all resolutions on most modern (made since 2009 forward) devices should have an aspect ratio between 4:3 and 16:9. The solution would be to draw the graphics that would span both ratios (and thus everything in between). The central part would be visible on all devices, while the background would show different areas (top and bottom on wide devices and left and right side on the more square ones).

But this isn't just pure math. We need to take note of market share of different devices, so that we don't sacrifice the way game looks on the more common ones just to please some outliers.

One picture is worth a thousand words, so here are some diagrams to make it all simple and easy to understand. The lowest resoltions used today are 800x480 and 854x480. There are also some tablets using 800x600. So, we'll set the base at 800:

This would mean that you should draw all the background graphics to cover 854x600 pixels. The central part where all the action takes place is 800x450.

There is no device with 450 pixel on the market, but we still use that as the baseline, so that we can simply scale everything to devices with 1024, 1280 and 1920 base width. Those devices currently make most of the market and have 16:9 aspect ratio. We want the game to look best on them.

The next step is a based on 1024 pixels. The most common resolutions are 1024x600, 1024x768 and 1024x800. The problem is 1024x800 which is even more square than 4:3. Those are some cheap tablets from asian manufacturers. Still if we decide to support them, we get this:

Now, there are some devices using 960x540 and 960x640 pixels. Those make less than 1% of the market, so we could use scaling in that case. Or we could sacrifice a little bit of 1024 screen space and allow it to fit.

Luckily the higher resolution screens are more expenisive, so we don't have that many variants. It's actually pretty straightforward. The next step is 1280x720, 1280x768, 1280x800 and 1280x960. Again, there are some outliers, more square than 4:3, most notably 1280x1024.

Next, we have 1536x1152. I haven't found any other variants with 1536 base. Still, we want everything to scale, so the play area has to be smaller:

1920x1080 is used in some very popular devices, but also 1920x1152 and 1920x1200 are common. 4:3 ratio would be 1920x1440, but I haven't found any devices using that resolution:

However, there are some 2048x1536 devices out there. The next resolution that follows is 2560x1600 which is much larger, so we don't want to clamp them together. Creating a special set of assets for 2048 would only give us 6-7% larger images. Therefore, it would be best to merge 2048 into 1920 base:

The current top devices (say Nexus 10) use 2560 as the base. I have only seen 2560x1600 devices, which is 16:10 and found 2560x1536 mentioned on the web without a device name. If we wanted to accomodate future 4:3 devices, we would have to produce 2560x1920 assets.

I used the wider 16:9 ratio as the base, because more mainstream devices use it (Samsung, Google, Sony, etc.). Square ones approaching 4:3 (and beyond) are produced by cheaper brands and don't have the market share. We still support all those devices, but 5-30% of screen real estate is just showing background filler picture.

Here's the whole table:

Typical resolution Play area Background Scale
800x480 800x450 854x600 100%
1024x600 960x540 1024x800 120%
1280x800 1280x720 1280x1024 160%
1536x1152 1536x864 1536x1152 192%
1920x1200 1920x1080 2048x1536 240%
2560x1600 2560x1440 2560x1600 320%

It turns out you'd need 6 different sets of assets for a game. To do all this in libGDX, I use separate bundles for different resolutions, so devices with low specs (low resolution, not much memory) do not try to load the large images.

When designing backgrounds, you might want to create a common huge background picture and scale it down. However, 2560x1920 would not suffice in this case because when you scale that to 1280 pixels, the other dimension would be only 960 pixels. Some tablets are 1280x1024, so you would have to create a separate background for them. This might be desirable if you want to have different assets adapted for each resolution, but if you have pictures or other graphics that don't lose quality when scaled in some drawing program (Gimp, Photoshop), you might want to simplify the process. In that case, we would need to use the source image of 2560x2048 pixels to be sure. But, the problem can also happen with the other dimension. Calculating the relations in the table above, we end up with 2733x2134 pixels.

Conclusion: if you want to draw a huge picture and just scale it down for each resolution without having to consider different aspect ratios later, make sure your source picture is at least 2733x2134 pixels.

With that out of the way, I'm starting to create the title screen. I commisioned some images on fiverr. For $5-$30 you can get some real quality if you take some time to investigate who are good designers.

As you can see, the game will use the portrait mode. I created the title using Diogenes font and Gimp.

Feedback & Share Bigosaur, 2014-10-03

Ludum Dare October Challenge 2014. I'm in!

Being a busy father of two never leaves enough time to do regular LudumDares. It's almost impossible for me to dedicate 48 hours straight to anything. That's why I love the October Challenge. Last year in October I participated in my first LudumDare OC. I made an Android Game called Drone Invaders, released it on Google Play, got about 3000 players and earned some trivial money (about $140). But I learned a lot, especially all about Android development.

This year I plan to build another Android game. Some (say, 60%) of the graphics will be outsourced to artists on Fiverr. Rest of the gfx, programming and sound effect I plan to do myself. I'm still not sure about music. I depends how much time is left when everything else is done.

Last time I used libGDX as bare-bones graphics library, only utilizing Sprite and BitmapFontCache classes. This time I plan to use Scene2D with Stages and Actors. Another big change is that I will make sure that devices with higher screen resolutions are properly supported and all the graphics are crisp clear.

As for the $1 goal, I will stay away from IAP this time. Google Wallet accounts are still not available in my country, and doing it through some friend abroad just complicates things and slows me down. I decided to try AdMod instead. It's linked with my AdSense account, so there should be no problems with the payments.

As for the game itself, I plan to revamp my Gods of Sparta strategy game. The main focus will now be local, hot-seat game for two players on Android devices. It will be completely free to play, supported by ads. I will reuse some old graphics, but more need to be drawn, especially higher resolution stuff for Nexus10 (2560x1600 pixel screen) I got recently. Also, UI needs to be drastically improved and game rules have to be simplified. To cut the long story short, I need to improve the player experience and make it feel more like computer strategy game and less like paper card game. Here's some teaser graphics that will be included in the game...

Feedback & Share Bigosaur, 2014-10-02

Taking a break

I have this sci-fi story in my head for about three years now and I decided it is time to write it down. I love sci-fi genre and like to see good movies. But there haven't been many epic sci-fi movies lately. You know, the Star Wars type of thing. But I'm not that into fantasy, my story is more to the ground, and is pure science fiction.

The story is really two-part. First part is a end-of-the-world thriller involving hackers, rogue military and top scientists. It all starts with a mysterious message coming from the outer space.

The second part is... well... “Spoilers” as River Song would say. No, I'm not going to reveal it. All I can promise is that there will be aliens.

Anyway, I'm not a native English speaker and the number of sci-fi readers in my country is miniscule. So I undertook this hard task of improving my English to sci-fi writer level, so that I could reach a wider audience. Apparently some popular writers have done it before. At the same time, I started to learn how it is to write a novel. I still haven't decided whether making the draft or editing it afterwards is harder, but I do enjoy the end result.

I'm currently done with editing the Chapter I. Please take a look and tell me if the story is interesting and if you want to read it to the end. Or it's pure crap and I should just forget about that and go back to making games.

The book title is: After Doomsday

Feedback & Share Bigosaur, 2014-09-15

Using Facebook Ads to reach Android Game players

Some time ago I decided to spend $100 on advertizing my Drone Invaders game on Facebook. Facebook ads have some really nice features, like picking only people from certain countries who like certain things. So I selected people from English speaking countries, who have an Android phone and like Space Invaders or Galaga.

The campaign ran for 18 days and got 839 clicks, which is around 46 clicks per day. On the other hand, I was monitoring players that played the game. Unlike Google Play which monitors installs, I'm monitoring how many people play the game and get to the Game Over screen. During the campaign I had about 40-45 new players coming in each day. Since the campaing has ended, I have about 10 new players coming in each day. So, the campaign effect was about 30 new players per day or 540 total. Thats 540 players for $100, or $0.185 per player. It's nice to know this figure before doing some ads, but spending $100 to learn this is also not a big deal. During this campaign the game earned about $25, so it's a net loss, but the game is not about making much money anyway. It's free to play with completely optional in-game purchases.

To conclude: I find Facebook ads useful and would use it in the future if I create some game that I feel can bring in some real money. Especially if I make a non-free game, this seems like a good way to attract more players. It's great that you can target people who like similar games and have a device it runs on.

Feedback & Share Bigosaur, 2013-11-29

Marketing your Android game - start early

Three weeks ago I released Drone Invaders. After the initial hype, the number of daily downloads has slowely but surely went down, and now sits stable at around 40 per day. But I want to talk about this initial hype in hope other beginner game developers might find it useful.

As I wrote before, I posted about my game to multiple sites. I posted daily updates to LudumDare, and important milestones to Java-gaming. I posted twice to HackerNews, and Reddit. I posted once or twice to other sites listed in the linked blog post above. In this case numbers speak more than words, so here are the top sources of traffic to my blog posts about Drone Invaders:

Top traffic sources for Android game blog

Conclusion: do not wait to market your game. The main site I missed is TIGSource. It's a high-traffic site with a lot of posts every day. If you just post when your game is completed, not many people would see your post. I wish I posted my progress daily, or at least as often as on Java-gaming. It would build more interest as the game was built, and surely would result in more installs after the release. If you know some more sites like those listed, where developers can post about the game development progress, please send me a tweet about it.

Feedback & Share Bigosaur, 2013-11-14

October Challenge Complete!

In the last two days, I got a couple of new orders for in-game coins, coming from Denmark, Australia and USA. Thank you.

That's $21.81 of income, of which about $5 was me testing if the payments work, and there's Google's cut as well. In the end, I earned about $11. Since October Challenge was to earn $1, I succeeded. However, I still have a net-loss of about $14, since I invested $25 in Google Play developer license.

Now that I see there is some interest in in-app currency, I'll try to do some paying forms of marketing, to see if that brings in some new players. When you publish an Android game, a lot of marketing companies e-mail you with their offers. I'm going to try some of those. I'll write about the results in a week or so, after I have some data.

Feedback & Share Bigosaur, 2013-11-04

Success or failure?

I released my game Drone Invaders about a week ago. It's a free to play shooter game for Android with optional in-app purchases. I did successful promotion on LudumDare, Java-gaming and HN websites, which got me to about 1000 installs so far. I'll soon post more stats about user retention, games played, etc.

I also posted in Shoot 'em up forums, TIG forums, IndieGameMag and added info to IndieDB. All those did not bring in much interest. Judging from player feedback, the main source of interest was HN post, where some people were more excited that I created the game in just 23 days, than in the game itself.

All this got me $0.69 profit so far (if you ignore the $25 fee to open a developer account on Google Play) as one person bought one in-game pack of coins. LudumDare challenge is to earn $1, so I need only one more purchase. But, it seems that will be a huge challenge to get it.

I also tried promoting the game on Twitter, but from my 200 followers I had prior to launching, only 3 tried the game. I guess you really have to engage daily with a lot of people to even get them to read your tweets. After the launch I got about 180 new followers. BTW, using bit.ly to track how many clicks came from which source (Twitter, forums, etc.) is a great idea, I'm sorry I did not apply it everywhere.

I posted several posts on Reddit and I noticed someone from HN crowd also posted. While mine posts to /r/gaming, /r/gamedev were barely voted up, that other one in /r/Android got some +187 votes and got some attention.

I wrote an e-mail to eleven journalists who do cover mobile games and I thought would be interested about the game. No reviews came out of that. In fact, nobody replied except for one guy who was decent enough to tell me that he thinks that the game is not worth covering on his main website, but I could try the forums. I guess it's hard to get through with retro graphics.

To be honest, I'm a little bit tired of banging my head against the wall with the marketing. The user reviews on Google Play are great, but the game is not very attractive when you look at screenshots or video, it only shines when you play it yourself. I have no idea how to get some journalist that covers Android to try the game?

Feedback & Share Bigosaur, 2013-10-31

Day 23: Release!

My game is ready and available for download on Google Play:

https://play.google.com/store/apps/details?id=com.bigosaur.backyardpanic

Please try it out, let me know if you find any bugs. The game is free, but if you like it, please tell your friends to try it and rate it in the Google Play. Hopefully, someone would like it enough to buy some in-game coins and I'll complete the $1 challenge :)

Even if you're not going to buy anything, please tweet about the game to your followers on Twitter. Thanks.

Feedback & Share Bigosaur, 2013-10-22

Day 22: Sound effects

Although I have a wast library of wav sfx files I accumulated over the years, I've seen other game devs use Bfxr to create their own effects, so I decided to give it a try.

This is nice, because you own the effect 100% and you don't need to prove where did you get the audio file. Some of the sites I used to download my sfx in the past are no longer online, and tracking people who made those is impossible. For example, my favorite mod music is Aspirating Milk which I found on modarchive. I tried to contact the author via e-mail in the tracker file, but got no reply. It was probably his address at university or something.

Bfxr requires Windows or Mac, while I prefer doing my development on Linux. I thought about running it on Wine, but didn't even bother to try because I found this:

http://www.superflashbros.net/as3sfxr/

It's a super easy to use and simple Flash app you can run in your browser. I highly recommend it.

These sfx programs produce various simple sound effects. Some complex sound effect can be created by mixing a couple of simple effects in a program like Audacity. I used it to create sfx for Atomic Bomb powerup:

Mixing sound effects from as3sfxr in Audacity

BTW, I basically completed the game, I'm now testing on various Android devices. I'll probably do the release on Google Play store tomorrow.

Feedback & Share Bigosaur, 2013-10-21

Day 21: Monetization of Android game

I'm making this game as an experiment, so I don't expect to earn much money. This game is going to be free to play, with option to buy coins in the game if you want. I like the way it's done in games like Pudding Monsters where players can play everything without paying at all. Drone Invaders will be completely playable without paying a dime, so it is not a kind of "pay to win" types. However, I still want to enable players who can't wait to have fully powered up weapons right away.

Buy coins for Android game

I opened the Google Play account without problems. It was $25, which is fine. I just read some blog post where a solution to saturation of Google Play was suggested - it proposed to have $5000 registration fee, so only developers who are serious would apply. I'm not sure if I would apply for $5000, it seems so me that only big studios who are already making money on other platforms would participate.

However, opening a Google Merchant Account is mission impossible from my country. So, what are the options. Well, you can still add payments with services like Fortumo or Centili, but this has two problems: 1. it goes against Google Play terms of use, so you either risk getting your account suspended or you only publish to other Android app stores (there are some 30+ as far as I can tell, and some stats say they make up about 30% of the market, although this seems too high to me). 2. to enable payment via SMS, your game needs to ask for two system permissions which users probably won't like: send and receive SMS. Although this is the only way to enable monetization in some countries, if you aim for US market, it's a bad idea.

Third option is to start a company in USA and register account that way. This is of course the right thing to do if you expect to earn some substantial amount of money from your game, but having an US company brings in some costs. There are specialized agencies that can register you a company in Delaware. Delaware is a USA state and a tax-haven. Of course, you can always tranfer the earned money from there to yourself, and then pay the taxes locally on that transfer. I'm not ready for this step yet, as this is my first game and I have no clue if I will make any money of it.

Luckily, I have a friend who lives in US, so we opened an account under his name, and the game will be released under that account. At least merchant account is available for US individuals. I still don't understand why Google won't allow merchant accounts from my country, when I'm receiving money from their AdSense directly, without any problems. I guess not all departments of Google have the same policy.

Feedback & Share Bigosaur, 2013-10-20

Day 20: Weekly challenge. Persistent player data. Java date woes.

Weekly challenge will be to collect some amount of stars during a week and get some nice reward, like 8 atomic bombs, 5 shields or similar. I made a nice gold star in Gimp. I tried different particle effects on it and also some diffused star-light, but it did not look really good. So I went back to the particle effect used for powerups and tweaked that until I got something distinct for the star. Stars show up on their own pacing, so you can have both a star and a powerup on the screen at the same time.

Weekly Challenge

I also worked on loading and saving player data. It was much easier than I expected. I expected to have to learn some Android data storage API, but for simple key-value storage, libGDX provides the Preferences class. Just init with:

Preferences prefs = Gdx.app.getPreferences("DroneInvaders");

and then use get("key", defaultValute) and set(key, value) to read and write the values.

The only thing I had problems with are the dates. To keep track of daily and weekly challenges, the game stores the date of last play. When player launches the game, it compares that and resets some counters. Theoretically, I could prevent players from changing the system's calendar to past date, but I don't want to. What I am doing, is setting new set of daily and weekly challenges when day rolls over and resetting the counters for number of stars and letters picked up.

To make that work, I had to get the day difference between the previous play and current date. It matters whether it's the same day, exactly one day apart or more than one day. Googling got me to various websites and StackOverflow questions. Answers are funny. Many programmers simply calculate difference in seconds and then divide by 60 * 60 * 24 to get the days, completely ignorant about issues with daylight savings and leap seconds. One could argue that it does not matter that much for a game, but still getting many bug reports twice a year doesn't sound like fun to me. Some other guys simply count the days by adding one-by-one from start until they reach the end. While those loops might look correct, they still miss sometimes as they do not take the time out of the calculation. If one object stored 01.Jan at 5am, and you calculate it vs 02.Jan at 23pm, adding one day to first object is still less than the second, so they add two and get 2 day difference.

One of the tricks I use in this situation is to always set the time of the earlier Date to be something like 10am, and set the time for the later Date object to 5pm. Since daylight changes always happen at night, this is safe. And we also have 7 hours in between, just in case someone in future decides to do daylight saving changes in the middle of the day.

Feedback & Share Bigosaur, 2013-10-19

Day 19: Daily Challenge and Missions

Daily challenge is to collect 5 letter which fly like powerups do. Once you collect them all, you get some coins to buy powerups. This is a way to get easy free coins just by playing the game. I was inspired by Subway Surfers when creating this.

Missions are various tasks for player to complete to earn coins. Coins are used to buy upgrades and expendable items like shields, bombs, etc. Missions come in sets of three, and you need to complete all three tasks to earn the reward.

Daily challenge, collect letters

For the missions I figured that it would be easiest to use the builtin multiline text wrapping. However, the line height is too big, and I could'n find a way to reduce it. At least, not from code. Then I edited the .fnt file generated by BMFont and just changed

lineHeight=33

to

lineHeight=23

I added 5 pixels of drop shadow around all letters after the bitmap was generated initially, so I'm now reducing height by ten (5 pixels above, and 5 below the glyph).

While searching the docs for this, I found something else I missed before: Depending on the font you choose for the game, numbers might not look very nice as glyph for digit "one" can we very slim, and numbers like 11 look odd. To solve this, you can fix some of the glyphs in the font to use fixed width:

font.setFixedWidthGlyphs("0123456789");

This looks really good, but I already did some design decisions that used the slim-glyphs "feature", so I'm not going to use this.

Feedback & Share Bigosaur, 2013-10-18

Day 18: Sprite collisions with circle shape. Pixel-perfect bullet trajectory.

Today I got fed up with the "moon hit" bug. Sometimes aliens would not get hit even if they are visible on the screen. I set up a bunch of tests with screen filled with aliens and semi-transparent moon to see what's going on. My coordinates for hit-test area were a bit off, but even when I fixed that it was not good. Box simply cannot cover the circled area well. You either miss aliens when you should hit them, or you shoot some that are completely hidden.

Shooting the moon

So I decided to switch to circle based checks. Since the moon in much larger than aliens, it would be enough to check whether all the 4 points of alien's bounding box are inside the moon's circle or not. To test this visually, I used libGDX builtin ShapeRenderer, like this:

    shapeRenderer.setProjectionMatrix(camera.combined);
    shapeRenderer.begin(ShapeType.Circle);
    shapeRenderer.setColor(1, 1, 1, 1);
    shapeRenderer.circle(sMoon.getX() + 119, sMoon.getY() + 116, 167);
    shapeRenderer.end();

This code comes after SpriteBatch is complete. The white circle is drawn over the scene. I also draw all the bounding boxes of aliens using ShapeType.Box.

An efficient way to test whether point is inside the circle is not to use square root (slow) and just compare sqared distances instead. libGDX builting function Circle.contains(x, y) does that properly, so I'm using that for checks. This works really nice. I extended the radius by a few pixels, because all the sprites have some padding and I'm really satisfied with the result:

After Shooting

Pixel-perfect bullet trajectory

In this game, bullets are fired some 50px below the bottom of the screen. I'm using atan2 function to rotate the bullet and hit the mark, but there were a couple of errors in my code, especially when you miss the target. To understand the rest of this post, please note that the game uses HitScan for all the shots in the game.

When player misses the target, the code extrapolates the trajectory to the end of the screen. Previous code that did this set the end point too far. Since the bullet is using tween engine to fly, this results in large jumps and bullet is only seen in 2-3 positions on the screen before it flies out. I fixed this code to set the end point at the edge of the screen, so now you can actually see the bullet flying.

This revealed another problem: the bullet sprite was sometimes 10-20 pixels off from the point where player touched the screen. There are three causes of this problem. First, I was using X and Y coordinates of the bullet sprite, which is the lower-bottom corner. I fixed this to use the bullet sprite center by adding half of width and height. But it was still off on some shots. Second problem was that I forgot to set the origin, so bullet was rotated around the bottom-left corner. I fixed that as well, but still some shots going to the left side of the screen were bad.

Then I realized that, when bullet rotates, width and height of the sprite changes, so the bullet center needs to be calculated after the rotation. With that fix, the bullet flies right through the point where player touched. The code looks like this:

    // fly the bullet
    LaserBullet lb = new LaserBullet(tUI, 65, 64, 20, 40);
    lb.setPosition(0, -450);
    lb.setOrigin(10, 20);
    lb.setRotation( (float)(Math.atan2(-x, 450f+y) * 180f / Math.PI) );
    Rectangle r = lb.getBoundingRectangle();
    x = (int)(x - r.width * 0.5f);
    y = (int)(y - r.height * 0.5f);
    lb.target.set(x, y);
    bullets.add(lb);
    Tween.to(lb, SpriteTweenAccessor.POSITION_XY, delay)
        .target(x, y).start(tweenManager);
Feedback & Share Bigosaur, 2013-10-17

Day 17: Android icons. Powerups completed.

I like that Android allows (even recommends) that icons are not rounded rectangle. It can give your game some style. At first I thought about creating a special icon for the game, but I really, really like this shield with pixelated alien drone on it. And I have made this in Inkscape, so I can create any size I want (unlike some other graphics I created in Gimp). I'm presenting you the official Drone Invaders icon:

Drone Invaders Icon

Powerups galore

Here's a video showing all the collectible powerups:

There's Atomic Bomb. I'm not sure about the name, maybe Nuke or Plutonium Bomb or Smart Bomb or something completely different. It damages everything on the screen. Bosses survive one or two, but 3 bombs destroy them too. Internally, each boss has 20 energy and bomb has 8 damage. Regular shot is 1 damage, until you upgrade lasers.

Second, there's 3-Way Shooting. You still lose one round of bullets for each 3-shot. This is a very powerful powerup as you can clean up waves and bosses just like that.

Third, there's Auto-Reload. As the name says, your lasers reload automatically, so you're free to shoot, shoot, shoot and shoot.

Fourth, there's Slowdown. It only slows down aliens, everything else moves normally. It's quite useless on first 20 waves, but gets really, really useful later.

Fifth, there's Double-Score. While this powerup lasts, all the points you earn are doubled. I'm still not sure if something will be awared for some point treshold, but it's still cool to beat the hiscore.

Feedback & Share Bigosaur, 2013-10-16

Day 16: Recording a movie from libGDX game

I thought about posting a YouTube video of the gameplay. I used recordmydesktop program to record videos in the past, but the problem is that libGDX and rmd do not sync so I get a lot of artifacts on the screen, sprites are cut in half, etc. I searched and found some useful articles about it. Basically, one would record each frame to a PNG file and then create a video out of it. Of course, this requires a lot of disk space, but that's not an issue. I found this page really helpful:

http://www.wendytech.de/2012/07/opengl-screen-capture-in-real-time/

However, their code has some weak points. For some reason, when I overlay background with sprites with semi-transparent pixels, the resulting PNG file has semi-transparent pixels in that area. Producing a video from it yields some really ugly artifacts. I tried different settings, even changed my render code, but the problem remained. Now, a simple post-processing step using ImageMagick (adding black background) fixes the problem, so I figured if I'm going to post-process it anyway, I might do the vertical flip in ImageMagick as well. So I turned off the y-flip in the code. This makes it more efficient: there is no need to allocate w*h*4 bytes of memory on each frame. On 800x480 screen, that's about 1.5MB allocate on each frame!

Also, the code that deals with framerate (skipping frames) is really sub-optimal. It skips the file numbers, which is not a big deal, but it also creates a new ScreenShot object each frame, which is completely not needed. For example, if you are recording at 30fps and game runs at 60fps, you're creating new object 50% of the time.

Finally, the code seems to forget to dispose of pixmap, so if you run it for a really long time, if would eat all your RAM.

So, I yanked out the whole FPS code out of ScreenShot class, and leave that to the class that sets up countinous screenshots instead. I also noted that some of the variables are initialized but never used. My ScreenShot class is much simpler and straightforward:

public class ScreenShot implements Runnable
{
    private static int fileCounter = 0;
    private Pixmap pixmap;

    @Override
    public void run()
    {
        saveScreenshot();
    }

    public void prepare()
    {
        getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
    }

    public void saveScreenshot()
    {
        FileHandle file = new FileHandle("/tmp/shot_"+ String.format("%06d",  fileCounter++) + ".png");
        PixmapIO.writePNG(file, pixmap);
        pixmap.dispose();
    }

    public void getScreenshot(int x, int y, int w, int h, boolean flipY)
    {
        Gdx.gl.glPixelStorei(GL10.GL_PACK_ALIGNMENT, 1);
        pixmap = new Pixmap(w, h, Pixmap.Format.RGBA8888);
        Gdx.gl.glReadPixels(x, y, w, h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixmap.getPixels());
    }
}

Yep, that's all. In render loop I use this at and of each render:

ScreenShot worker = new ScreenShot();
worker.prepare();			// grab screenshot
executor.execute(worker);	// delayed save in other thread

For completeness, executor added to my Screen subclass:

private ExecutorService executor;
...
executor = Executors.newFixedThreadPool(25);

Now, on my Core2Duo it has a hard time keeping up frame rate. On one hand, it's good, because gameplay slows down and I'm able to play a nice, partly scripted video. On the other hand, it would be nicer to just record and later cut out what you need. So I added a hotkey for screenshots. It only records shots while S is pressed on the keyboard. When you record a few interesting seconds, just release S and let the PNG writer catch up. When it does, and CPU load goes back to normal, you can record again.

Videos created like this are super easy to edit. Just remove the unneeded PNG files and compress video without them. It's also easy to sync with music, because you can add/remove frames at will.

Turning screenshots into YouTube video

Since Android screen I'm using by default is 480x800 pixels, the closest fit is YouTube's 1280x720 format. We need to scale the image to 432x720 to maintain aspect ratio. This leaves us with a lot of unused area. You can put your logo there, or even show 2 videos running side-by-side ;) I decided to put the video inside another rectangle, that resembles a handheld device, so it's even smaller, it's 372x620.

Anyway, I created a 1280x720 static image with my logo and now I'm blending the gameplay into it, and also flipping it vertically. On Linux, I'm using a command like this:

for i in shot*png; do echo $i; convert $i -flip -filter Lanczos -resize 372x620 temp1.png; composite temp1.png back.png -geometry +126+56 $i; done

Once all the images are ready, we can run mencoder to produce the video. YouTube recommends using H.264 format and bitrate up to 5000 for 720p videos. They also recommend two B-frames. Here's my command:

mencoder mf://shot*.png -mf w=1080:h=720:fps=25:type=png -ovc x264 -audiofile music.mp3 -oac copy -o movie.avi -x264encopts bitrate=5000:bframes=2:subq=6:frameref=3:pass=1:nr=2000

This yields a solid quality YT video of your gameplay. You can see the result at the start of this post. As for the audio, I just slapped over the game's soundtrack. I'm not capturing the audio of the actual game.

UPDATE Jun 2016: Guys from Lifemakers Studio tried my method and made some improvements to solve the transparency problem and make it run faster. Please read their analysis

Feedback & Share Bigosaur, 2013-10-15

Day 15: Android Back button, Main menu screen, fixed bug with coordinates

Remember that problem from Day 11 about screen coordinates and mouse clicks missing the aliens? Well, it was all my fault. Good thing I discovered it now and not when the game got downloaded by a bunch of Android users not using 800x480 screens. I was naive and translated the touch coordinates to world coordinates like this:

float x = Gdx.input.getX() - 240f;
float y = 400 - Gdx.input.getY();

That's not the way to do it. The proper and easiest way is to ask Gdx to translate it for you:

Vector3 touchPos;
touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(touchPos);

Handling Back button on Android

Most examples on the net about handling Back button talk about overriding keyDown method. Unfortunately, this requires that you use the Stage, which I do not. I understand now that I'm replicating a lot of Actor and Stage stuff in my own code, but nevermind. I'll use the Stage for the next project.

Luckily, I found the solution. Just add this to your Game subclass in create() function:

Gdx.input.setCatchBackKey(true);

And then in render(), check if it's pressed:

if (Gdx.input.isKeyPressed(Keys.BACK))
{
    Gdx.app.exit();
}

Now, watch out, you probably want a boolean flag variable to detect when it is released, as render() calls go many times per second.

if (backReleased && Gdx.input.isKeyPressed(Keys.BACK))
{
    backReleased = false;
    Gdx.app.exit();
}
else
{
    backReleased = true;
}

Now you can enter the game, the shop menu and go back to main menu. Of course, menus just display items, but none of it works yet.

Use 9-patch for dynamic sized buttons and boxes

I also learned how to use NinePatch to create nice buttons. One moment I realized I'd have to draw like 10 sizes of various option buttons, that basically look the same, only with different content inside. I even looked at Gdx buttons, but decided I still use the DIY approach. Buttons in my game have special needs, some of them combine 2 images and 4 text labels with 2 different fonts, all inside a single button.

Anyway, I have drawn a small 46x46 9-patch that covers all button sizes and I'm drawing other stuff over that with some custom code. I used the constructor with TextureRegion to extract the 9-patch graphics from my large texture that contains everything else. One less texture switch.

Creating this allowed me to populate main menu screen with various options, and I also added a scrolling marquee giving some tips about the gameplay. I really like that concept, but games rarely use it. Some games display just one tip at start. Maybe they do not want to distract players with scroll in main menu.

And here's the shop menu to buy some powerups:

Buy powerups

Powerups

Here are some new ideas for powerups. One can be temporary slowdown of aliens. Another one would be 5x score for a limited time. I'm thinking to eliminate the "double score" improvement which was to be available in the shop. Some players might be really competitive about the hiscore, so this is probably a bad idea.

On the other hand, a powerup to increase number of shots before reloading would probably be welcome by everyone, so I'm adding that.

I was hoping to keep the shop at 7 items tops, so that it all fits a single screen. But now I'm not sure with all the possible upgrades... we'll see.

Feedback & Share Bigosaur, 2013-10-14

Day 14: Completed all basic alien graphics

All 7 basic alien types are complete, I just finished Catcher, while Humaniod and Scorpio was done yesterday evening. I also created some basic graphics for the shop, where you can buy upgrades.

Alien types in Drone Invaders

I got some new ideas for boss aliens. One of them is a snake-like alien, and you body is composed of multiple parts, which you need to destroy separately.

The second one is alien boss creating alien bosses. Basically, if you don't destroy it on time, it will create another boss. This second boss spits regular aliens and moves downwards (to free the space for the next one).

Third boss is a special creature, able to multiply by division. When you shoot it, you get two identical aliens, each having half energy of the parent one. This division happens until you split them into 1-energy ones and shoot those.

Fourth boss is... well, let's leave some surprizes for when you play the game. I'm sure fourth boss will be very annoying to some players, until they figure out how it's behaving.

Snake boss

Allocate time for music

I spent rest of the day browsing for some free music. There are many sites, but listening to hundreds of tracks is really not fun. Most of the free stuff out there is junk. I found links to various sites recommended on /r/gamedev on Reddit and also in gamedev.stackexhange.com site and some indie sites. Except for Jamendo which is expensive, most of the free stuff is really bad.

I usually compose my own music, using MilkyTracker or some other tracker program. I got this habit from Amiga 500 and I feel at home when making .it or .s3m modules. But this time I decided I do not have time for that. It usually takes me about 3-4 weeks to create a decent track. I though about re-using some of my old tracks, but I already have used all of them in previous games - and none would really fit to be honest. I did find some good tunes by Kevin MacLeod, so I'm going to use those.

It looks like it really comes down to your own estimation. Whether you spend hours listening to different free tunes or you focus and make your own.

Feedback & Share Bigosaur, 2013-10-13

Day 13: Shields, new Boss

I added a new boss and now I have two of them. Here are the alien names so far: Worker, Eater, Hairy, Glider. Bosses are called Worker Boss (it looks like big Worker and spits small Workers) and Borg (it's cube-shaped and destructs into big cubes).

Second level boss

I also added the shield. I have drawn this nice shield icon before. I drew it using Inkscape and got inspiration from a some YT tutorial. I tried to follow the tutorial (it was for Adobe Illustrator, not Inkscape), but failed. So I started to observe some shields that I like and noted how it's just a bunch or curves and gradients. I slapped Hairy on it, it looks really nice. This might even become the application icon for Android.

Anyway, the shield can be invoked at any time. It lasts 20 seconds. There will be some powerups to upgrade the shield to last longer. If aliens hit the shield it loses energy much faster, so you should still try to shoot them down even if shields are up.

Raised shields

Shield graphics looks like force-field. It required some manual messing with Gimp to draw it nice as I wanted a nice circle-segment instead of straight line and casting a gradient shadow that way doesn't seem to be supported. Maybe there's some trick I don't know. So I combined multiple linear gradients at a different angle. It turned out really nice.

I tried adding some glow to the shield icon, but then it stands out too much. I'll leave the glowing for situation when powerup flies across the screen and you need to pick it up.

With these new graphics, it starting to look like a complete game. I'm still thinking where to place the score multiplier and whether the current wave should be shown.

I'm also thinking that player should be able to buy some powerups before playing, but this would require some coins or something like that, and with current, fast gameplay it simply would not fit. Maybe a some aliens could leave some crystals behind them or something like that or random powerups would show up. Or you would simply get as much coins as the number of waves you survived.

Feedback & Share Bigosaur, 2013-10-12

Day 12: Introducing DRONE INVADERS

I finally decided on the name. There were many game names out there, but I only found 6-7 available. This one seems to fit the game theme the best. New title screen is ready, using the same Ruslan font.

Drone Invader title

Today I learned difference between Comparable and Comparator in Java. I changed the bullet code, so that you can fire multiple bullets (laser fragments) at the same time. Also, you don't need to touch the alien to shoot it, but rather just fire in its direction and bullet hits it. Instead of going with full collision detection, I simply extrapolate bullet trajectory at the moment of firing and see which alien it hits first. This worked fine for all levels until the Boss level. Since Boss spits other aliens, he gets to be the first in array and bullet would fly through all the aliens and hit the boss. I left this behavior if you touch the boss directly. But, when you just shoot in some direction I'm sorting the aliens by y-coordinate to shoot the nearest one.

This new feature changes gameplay a bit. It's now easier to play, and more enjoyable as aliens you shoot are no longer obscured by your finger. The game has turned from "precise touches" to "shooting fest" and only that 10-bullet clip prevents you from destroying everything in two seconds.

I guess I'll now have to make alien movement even more challenging, so that the game doesn't get too easy.

Day 12: Part 2

Aliens hiding behind a moon

I started to like the game too much, and decided to work on it more before going to sleep. On levels 16, 26,... I added a big moon, and aliens are hiding behind it. The moon slowly moves across the screen, just in time to finish before the Boss level. This makes the gameplay really challenging. It was also challenging to do detection whether aliens are hidden behind the moon or not. Since moon is round, rectangles are not very easy to use. I looked into pixel-precise detection, but I'm afraid it would slow the game to look individual pixels each time a shot is fired - especially since moon is rotating all the time. So I just reduced the original sprite rectangle by some 12% and I'm doing the rectangular checks instead. It is not pixel-precise, but it works really well. The way it works, bullets fly over the moon and aliens fly under the moon, so you can shoot those who haven't reached the cover yet.

I'm really satisfied with the gameplay now. It's fun, challenging and engaging. Now I need more bosses, a couple of more alien types and powerups. Without powerups it's a real challenge to reach wave 60, so I'll try to create enough content to have new stuff show up at least until level 100 without repeating bosses. I guess it will be easier with powerups. We'll see once I add those.

This is the first time I'm feeling it's going to be a great game, rising above the average space shooter.

Feedback & Share Bigosaur, 2013-10-11

Day 11: More alien types and attack formations. First boss level

The first boss is on level 10. It's big and cube-shaped. I'm calling it Borg, although it does not assimilate you ;) It emits regular aliens. You have to hit the boss multiple times to destroy it. I set energy to 20 for the first one, it's challenging but not really hard. I added a big shake when boss is destroyed. Boss is made out of 10x10 pixel blocks, so explosion looks nice.

Borg boss in Drone Invaders game

I also added a new snake like formation, aliens move down, then left/right and then down again, repeating it until they reach bottom. I made them a little bit faster in this formation, so it's challenging.

I have also drawn some nice aliens, and named all of them, as each type is represented by a Java class and I needed nice class names. Here they are: Hairy, Glider, Worker and Eater.

Here's a .jar file I made today, you can run in on Windows or Linux or Mac, as long as you have Java installed. On Linux I use: java -jar stardust.jar

Please note that you need to allow game's window to be at least 800px high, for it to work properly. I'm running it on my 1680x1050 desktop and it works fine, but on 1280x800 laptop the taskbar uses some space, so window size is reduced vertically and I need to click underneath the alien to shoot it. I guess I'll need to fix this if I even decide to release the PC version.

Feedback & Share Bigosaur, 2013-10-10

Day 10: Making it more fun to play

I'm having doubts whether the current concept is fun enough to play longer. Maybe it would be better if aliens would move left and right as well. I implemented that now for two new attack formations and it looks and feels much better. I also added the camera shake code when you hit an alien and it explodes. The game feels more alive now. The reload button works, so now you can empty your 10-bullet clip and have to reload. Makes the gameplay more interesting as you have to break from shooting spree to reload the gun. I replaced the ugly magenta color of some aliens with cold, whiteish blue. It looks much better.

Incoming wave of aliens

I'm thinking maybe it would be better if player could only touch the lower part of the screen - area within his shield. This way the upper part would always be visible - not hidden underneath player's finger as it happens often now. Maybe if shield is half screen size at start and as enemies hit it, it reduces until the gun is naked and vunerable. Although, this would mean having to draw a gun as well. Probably not a bad idea though, I might try this.

Star Dust name is taken, I tried some 20+ others, but it seems that it's really hard to find a free name, as there are many space-theme games.

Feedback & Share Bigosaur, 2013-10-09

Day 9: It's a shooter, and it has first person perspective. Yet, it is not a darn FPS.

Looks like I'll have a hard time classifing this game when I talk to people. I could say it's a "retro arcade". Although, it differs from retro arcades where you move your ship around and it fires bullets straight. Here your position is static, and gun fires wherever you tell it to. Come to think of it, I've never seen a game that plays exacly like this, so don't try to classify it in some existing genre. The closest I got was "it's like Space Invaders, but without a ship". This got people completely confused.

Today I reworked the alien spawning code. I also redraw all the aliens in white color, so that I can change color at runtime using the same sprite. In case you didn't notice, aliens are single-color. I'm thinking to leave it this way, except for bosses. Maybe just add some glow animation or something like that. Who knows, maybe some artist will see a potential this game has and create some cool graphics. Feel free to contact me about this.

I'm thinking there could be an event in the game when enemies would "upgrade" to better graphics. Accompanied with a message "Aliens have evolved", which would bring in some metallic look and feel, for example.

Explosion code is also unified, so now I just supply a 2D array of "pixels" and enemies get blown to pieces. This has been working for some time, but now I got that code clean and universally usable for any kind of alien. Except maybe bosses, which might fall apart in stages. I still need to ponder on that one.

Anyway, if you're interested in playing, here's an .apk file of what I've done so far. Features are obviously missing, but you can see what I'm up to.

Feedback & Share Bigosaur, 2013-10-08

Day 8: Star Dust

I'm looking for a new title for the game. Got one, but need to research more to see if it's available: STAR DUST. I tried some fonts and I think I'll use the one called Ruslan Display.

Star Dust title

I polished the algorithm for alien explosions today. I'm also thinking how will the enemy waves look like. There would be 10 waves of enemies, and then a boss and after that the game would speed up a little bit and some new enemies would be introduced. At each tenth level (10,20,30...) there would be a new, unique boss. This algorithm would repeat until player dies. The speed would be capped at 2x starting speed as it seems to me that takes a lot of effort to play if you want to destroy all aliens.

And then, there will be powerups. Here are current ideas:

Time limited, collectible during game:

  • shield (sits at bottom of the screen, protects against one alien going through)
  • score multiplier boost (x2)
  • rapid fire (just hold your finger down and move around)
  • mega bomb (destroy all aliens on screen)
  • hyperdrive (skip 10 waves of enemies, but gain points as if you destroyed them)
  • gallactic ninja (cut enemies with a jedi sword - fruit ninja style)
  • auto reload (auto reload lasers)
  • spread fire (fire 3 or 4 lasers at the same time)
  • extra life (start game with 4 lives)

Permanent, can be upgraded between plays:

  • rapid fire duration
  • shield duration
  • galactic ninja duration
  • auto reload duration
Feedback & Share Bigosaur, 2013-10-07

Day 7: Change of layout and screen orientation

You can shoot aliens now. Since the graphics is retro style, I decided to explode the alien's large pixels (I draw aliens using large zoom tool in Gimp, and then I enlarge the image 5x without any interpolation). I wrote a custom particle manager code and use built in tweening in libGDX to send each piece in a random direction away from center.

Particle effects libGDX and Android

You may notice that there is no you on the screen. This is on purpose. In case you did not realize yet, this is a first person shooter. ROFL. Well, at least technically, it is. You don't get to see yourself, you only shoot at enemies. In some test version I also tried to scale the aliens to give a feeling of depth and them coming from far away, but it's hard to shoot small sprites on Android using your finger, so I gave up on the idea.

To make the game more interesting, the laser gun you're using would need reloading. You got 10 shots and then you need to hit the Reload button at lower left corner of the screen. I'm still not sure about this feature - needs testing.

As I was testing this, one thing bothered me a lot: While I shoot the aliens, my index finger is all over the screen and it's hard to see what's going on. Then I looked at different Android games on my phone and realized that it would be much better if screen was oriented in portrait mode. When in portrait mode, your index finger does not come from below, but from right side (if you're right-handed, of course). Most of the screen is still visible in this case. I'm also changing the flying direction. Instead of going from left to right, aliens are coming from the top of the screen.

Because of this, I'm also changing the main game concept. Instead of playing a fixed amount of time, you would play until you allow one of the aliens to get past you. My initial idea was that you would play for one minute and score as many points possible during that time (something like fruit ninja arcade mode). But now I'm thinking you could have 3 lives or something like that, and if you let some aliens pass, it's game over.

I also changed the nebulas in the background. I wrote before about that tutorial how to draw a night sky with stars and nebulas in Gimp, but I had to experiment a bit to get the look I wanted. It works by using Subtract layer effect on two layers with rendered Solid Noise, and then colored using Overlay with a single color and a gradient. The problem is that Subtracting those two layers always created a "small" nebula, while I wanted the whole screen to be full with color. I draw the stars by placing a bunch of random dots using pencil and a couple of different colors. I separated the stars in 3 layers. On one of the layers I added a 2px drop shadow (with no offset), on second one I used blur and I left the third one as it is. The trick to nice stars is that those drawn close to each other should always be different color or have different sharpness. This is the way it is on the real sky. The stars that look close together are lightyears away and only appear close from Earth.

Feedback & Share Bigosaur, 2013-10-06

Day 6: First aliens and screen orientation

OK, I got some really retro aliens, and they are flying around. Sorry for no demo, it's an Android game, all I got is .apk and you probably wouldn't want to install .apk from a complete stranger. Basically, the background loads, and stars load, and stars slowly move. To scroll the stars I'm using setV() and setV2() on the stars texture, slowly increasing the timer. Like this:

    scrollTimer -= delta*0.014;
    if (scrollTimer < 0.0f)
        scrollTimer = 1.0f;
    sStars.setV(scrollTimer);
    sStars.setV2(scrollTimer+1);

And then some aliens show up and they move to the right. That's about all that works now. I'm still learning libGDX, so a lot of time goes into googling and reading tutorials or watching videos.

Helpful tip: I noticed that some games built with libGDX have fixed screen orientation. If you flip the device, the game shows upside-down. I found a very simple solution to this in some obscure comment in some SO thread. Just replace landscape with sensorLandscape in AndroidManifest.xml and device flips the screen automatically.

Setting up Eclipse for libGDX and Android

Feedback & Share Bigosaur, 2013-10-05

Day 5: libGDX and graphics ideas

I selected the library I'm going to use. It's Java, and it seems pretty complete. I managed to build and tweak a test application very quickly. I'm still confused whether to use Scenes, Actors, and all the other features or build the stuff myself as I'm used to. The docs are lacking examples and explanation how to tie in some stuff, I guess I'll have to google a lot. For example, there is no explanation how should you wire up the Actor and Sprite. And what if you have like 20 sprites with same graphics and stuff like that.

For this first project, I guess I'll learn just enough to manipulate Sprites and then build the rest myself using my previous experience. For some future project I'll probably be smarter and figure out which stuff did I build that was already there. I just hate learning so much up front and then figuring that framework/library is not flexible enough for some out-of-the-box ideas I might have in the future.

Here are some of my ideas for retro-graphic aliens. Most of the time I first draw stuff on paper. Maybe it's just a habit, but it helps me concentrate when I'm away from keyboard and monitor:

Retro graphic aliens drawing

Feedback & Share Bigosaur, 2013-10-04

Day 4: A Twist

I have been trying to draw some docking bay graphics and it looks like s***. So, I'm diching the "docking bay" idea. The combat will happen in space. Yep, that's it. Aliens would come from one side of the screen, and you would shoot them before they leave it on the other end. At the bottom there will be some destrucable stuff. Aliens could hide behind that, and maybe you can shoot it down or make holes in it by shooting. Here's an example with a tower, satellite dish and some other things:

Nebulas, stars, aliens, tower, satellite dish

The idea is that you have limited time (say, one minute) to shoot down as many aliens as you can.

Since the game will have a space theme, I'm browsing my font collection, to find some cool gallactic font. So far, ArdourGM looks like the one I'll use for in-game text like points, option screens, etc.

The graphics above are created using Gimp, and insipred by this nebula tutorial. After reading that and doing some my own tweaks I was able to draw the above picture in a couple of hours. I hate when I lose that much time on a single thing, but this background would be used for most of the game.

Feedback & Share Bigosaur, 2013-10-03

Day 3: A new game idea

Looking around the net for ideas, and browsing Android forums, I found an ad for Revenge of the Titans. Cool game with retro graphics and nice animation. I can do retro graphics. So, instead of monsters, aliens would descent from space into your backyard... well...

No! Backyard does not seem like a good idea. I guess I'll need a new game name as well. I have two ideas here:

  1. Aliens attack a remote defensive station on the border. They disable the automatted system, so you have to manually override the controls and shoot them. The game would be called MANUAL OVERRIDE or EMERGENCY OVERRIDE. I looked up on Google Play and Internet, it seems these names are free to be used.
  2. Aliens land on a docking bay of a large spaceship and you have to keep them away. They could hide behing some barrels, landed spacecraft, etc. I'd like to have some stuff in the game beside enemies that is destructable. The game would be called DOCKING BAY or DECK 42, or something like that.

Not very exciting titles? Oh, well.

Feedback & Share Bigosaur, 2013-10-02

Day 2: Eclipse setup and choosing a game library

I downloaded Android bundle and set up my Linux machine with Eclipse. I was able to run Hello World on my Galaxy S2. Hello Java. I really have to remember all the Java stuff as I haven't used it since 2002 or something like that.

Free Unity license

Looking at all the 2D/3D OpenGL stuff, it looks like it would be a good idea to use some toolkit/library to build the game. I got some free licenses for Unity3D at NordicGame 2013, but those do not include rights to release on Google Play, so I guess I'll skip Unity for now. I'm now looking into CoronaSDK and some other libraries.

Feedback & Share Bigosaur, 2013-10-01

Day 1: Backyard Panic

Looking at some websites with animation stuff, I found some nice, freeware, zombie animations. They have even animations for zombie being shot, crawling, etc. So, maybe this game could be a zombie shooter.

Your character would sit on his/her porch and shoot the zombies coming out of the cornfield. The game would be called Backyard Panic. You could switch different characters from the old granny, redneck with a shotgun, to a member of the Marines with some long-range rifle. Here's a really, really rough sketch:

Zombies coming out from the cornfield

Update: I just played Zombie in USA. Interesting game, but gets a little bit boring to tap the device like crazy. I want a single touch equals kill type of interaction, at least for non-boss enemies. As I think about it more, the whole zombie topic seems too gloomy for me, and having yet another zombie game is hardly called fresh. So, I'm not sure about this. Also, it seems it would involve 3D graphics, and I'd like to stick with 2D, at least for my first Android game.

Stay tuned. I plan to post my progress each day.

Feedback & Share Bigosaur, 2013-09-30

Creating a complete Android game from scratch in one month

My inspiration I wanted to build an Android game for some time, but never got some good idea. Lately I have been playing Subway Surfers and got really passionate about it. I usually don't like the "endless" games, that you basically cannot finish, so I always set an arbitrary goal to reach. This time it was reaching 30x score multiplier. While I did that, I got some skill and really got addicted to the game. It also made me realize that Android games don't have to be a AAA title with huge story and complex gameplay. Something simple and casual is OK.

Anyway, I thought it would be nice to have a game where you could simply point your finger at something and shoot it. With a system of Missions, Daily and Weekly Challenges and weapon upgrades it could be fun. My first idea was to create a game where some cute monsters would run around a beautyful scenery, hide behind the trees, old houses, or even in the clouds and you would need to shoot as many as you can. By cute monsters, I mean something like Gremlins. They would also bring in some huge machines and do other stupid things that would make you laugh. Of course, being an indie game developer with zero budget, I decided this would require too much art and too much of my time because of complex animation I envisioned. So I decided to use a different setup, something I can produce myself in a reasonable timeframe.

My goal now is to make an interesting, playable game for Android in one month.

Feedback & Share Bigosaur, 2013-09-29

Hello Gamers and Gamedevs

This is the place where you can read about games that I released so far as well the progress on the new games. I recently released a battle card strategy Gods of Sparta and now I plan to try to make my first Android game.

Update: I never managed to start this, but Ludum Dare October Challenge is here, and this is enough to finally get me going. Initially, this was supposed to be a Create Android game in 21 days challenge for me, but I got some more time because Ludum Dare ends by November 1st.

Feedback & Share Bigosaur, 2013-09-12
Bigosaur.com Website Home Page Bigosaur.com Website Home Page Blog main page YouTube channel Twitter account Google+ page Facebook page