CoronApocalypse #1: A lot in 12 hours

IT STARTS AS ART

CoronApocalypse started out as just art on Twitter. A fake bit of gameplay of a role playing game from @BannonRudis. From there, he asked if anyone would like to turn it into a game and since I have worked with Bannon a bit over the past few months, I threw my name into the ring. I hate to miss opertunities to work with such great art and great people. A few weeks went by with us talking about the project as he was inspired to make more art for it. Attack animations, idle animations, and more enemies. I was happy working with what was already there. He and I went back and forth with ideas, before he hammered out a design document for me to follow.

There were 2 weeks of planning before 24 hours.

12 HOURS BEGIN

I have never made an RPG from scratch, although to truly make something from scratch, I would need to invent a programming language if not the world itself. I started with getting the characters on the screen. Each character is an instance to hold their data. Databases and states were then created to have a template that most things would be based on. A series of hot keys were implemented to quickly change characters and animations for testing purposes.

From there, I added enemies and came up with a way to have a maximum of five enemies that wouldn’t overlap one another to hide themselves. The enemies appear in random numbers and types for the moment just to have something to fight. They have their own stats, but at this time, they were the same stats as the characters.

After that step, I went to the more mundane, which was the stats and getting the text for the GUI ready. GUI and menus are normally a time consuming process, but because I already had a fake screenshot to work off of, it was easy to find the location of the text along with its size.

With the GUI text added, I dove into making the battle menu work. The game has a flow, character, then skills, then what to attack, followed by going to the next character. Then at the end, the round starts and ends. It was important to me to have the game remember the skill used and who was attacked. The mock up animated the active player and their target, so I made that happen.

The active participant has a white highlight that outlines them and their target has a maroon color, which was added very early on in the game’s development, back when the characters were added. These outlines and arrows make everything stand out and keep’s the player’s eyes focused where they need to be.

Image

Once the flow of the menu was working, it was time to make the flow of battle. The game selects the highest agility of the round to first. In this case, the shoppers and viruses had the same stats, so I came up with a random 20% of their agility to give them a bonus. So 10 agility turned into the potential to be 12. So it’s a bit unpredictable who’s turn would be next, until they have unique statistics.

Enemies choose who they attack right then and there, they do not predetermine their attacks before the round like players do. The first step to making the battle look like a battle was adding attack visual effects. Just white damage indications. Up next was the process of taking the attacker to their target, which was easy enough. They go over to within 64 pixels of directly at their target. Then the damage animation plays, followed by the next step, which was to drag them back to where they came from.

Dash animations were set for the movement to and from a target. Attack animations were set to play to get into a cycle of attacker > go to > attack animation > attack visual effect > go back > next turn. These are four steps taken for granted, because they are so common and expected.

It was on to make the damage effect, which for the moment is attack strength plus a random 20% versus the target’s defense plus a random 20%. More interesting was to add evasion. Each character and virus has the ability to dodge, but it’s low usually 5 – 10%. Even more imported was adding a 5% chance of a critical hit that is so rare it boosts the attack’s damage by five times the strength. There is also a 25% chance for a mini critical hit that has 50% more strength.

Enemies and characters could now duke it out and hurt one another, so then I added a rising indication of what just happened. A cyan colored MISS from a successful evasion, and a red number to indicate the damage. Mini criticals add an exclamation point while criticals add three extra exclamations. These pop-up numbers go from white to their designated colors and they’re outlined in black for a simple, but great effect. The dazzle was beefed up, enemy shake was added whenever they take damage.

The battle was flowing, but any combat without defeat is hollow. I added a defeat state for all contenders in the battle. It may be silly to explain defeat does not allow a competitor to take a turn, but that’s something to program in. Having the characters choose not to attack a dead target was added as well. The enemies will never attack a downed foe, because they choose who to attack when it’s their turn. The player however selects targets before the battle begins. The character was given the intelligence to randomly select a new target when theirs has been defeated.

The final step to making even the most basic RPG battle is the victory. If one side’s participants wiped out, a victor is proclaimed and the player can then reset the battle.

THE FIRST DAY VIDEO

THE END OF 12 HOURS

It had to end sometime, and the finished 12 hours lets the characters and enemies battle, kill one another. When one side of the fray is wiped out, the game lets the player know and then restarts with a fresh battle. After this video, the travel speeds were doubled to make the battle play out faster.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s