ViralMarket: a procedurally generated role-playing game against viruses

ATTENTION GETTING IMAGE


CORONAPOCALYPSE: THE GAME
Welcome to a world, infected with macro viruses walking through grocery stores and supermarkets. Your party of three must combat the dangerous foes in role playing combat while collecting items on your shopping list and making it out alive a a wild trip of fun and risk.

ANNOUNCEMENT TRAILER

First look at our COVID charity game to help fight the awful Coronavirus. Battle for survival in Grindmore Grocery as you learn battle strategies like basic hygiene, social distancing, and not hoarding supplies. Co-developed by @BannonRudis & @DrinkingNails
Trailer music by @MeganMcDuffee


EARLIER VIDEO

SCREENSHOTS





REMEMBER
Stay safe and wash your hands.
 
Last edited:
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.

DAY 1 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.
 
Last edited:
INFINITE BATTLES



My original plan for using the art was to make the game infinite. Battle after battle, until your characters are all slain. At this point, the artist was rapidly adding animations and other content. Plans changed to be more of a traditional role playing game with an overhead world, set in a grocery store, but to get to that overworld, I pushed through with the combat to make the game infinite and engaging.

Each foe was given its own experience, gather enough experience and the character levels up, which replenishes their health. Going up a level will also boost the stats of each character as you'd expect, but the enemies stay the same. It's all super basic stuff. The real challenge here was balancing the experience needed to level up versus a very limited array of foes. That fourth level turned into a sheer grind that was never worked out at this time. Another part of the grind was each character can only attack, and nothing else.

ACTIVE BATTLE SYSTEM

If I haven't mentioned it the original battle system was very traditional, where the player selects what each character will do. Then the characters and enemies will take their turns in order of agility + a random 20% depending on the turn. In a way, there is more strategy, luck and ease to doing it all at once, then watching the ballet of combat take place.



However, it is mundane and to add some flair, combine with making it look like the original mock up, I designed an active battle system. Each character and enemy has a turn meter that when it's full, they take their turn. You decide what action a full character will perform and they carry it out. The turn meter is still based on the participants agility + a random 20%, so there is a chance where two participants of the same agility will have a random outcome. The maximum of the meter is ten times the highest agility of a participant. That way there will still always be a few seconds of waiting to start each battle to assess the situation.

The agility of enemies and characters were modified so Mom is always the last character, Rudy at level one will have the same agility as the starting enemy, and Burger will be the fastest, but do the least damage.

BARS INSTEAD OF POINTERS

You may have seen, we also went to glowing bars rather than pointers. We quickly ran out of room with the ABS meter and mana points on screen. I could have added up and down menus for enemies and skills, but there's more wow factor being able to see it all on screen at once. The height of the GUI was increased to give each bit of text more room to breathe and be less cluttered, even if it's still a bit unavoidably crammed.

TWO MORE DAYS DONE

That closes the third day of this Coronavirus game jam. It doesn't seem like nearly as much as the first day, but nothing will seem as grand as constructing the game screen. There are so many more things to implement as you will see, since I am staggering these blogs a week or two late.
 
Last edited:
This update was the start of adding skills and afflictions. These things would be streamlined later, but they were a start.

RUN AWAY



With basic attacks done, the next easiest thing seemed like it would be the ability to run. Each player character can run, and when successful the entire party vacates the premises leading to losing the battle. Each enemy can turn around on its own and leave the battle, forcing it's comrades to continue the fight. There's no logic and run prevention at the moment. In a way it's forgiving, to have the ability to bail from any battle whenever you want. The original logic behind enemies running was giving each enemy turn a 5% chance to run, but things get changed.

POTENTIAL INFECTIONS



The original mock-up had an infected status since CoronApocalypse is a game about a virus in a grocery store, so that was the next thing to be added. I suppose this would be more of a case that the virus is on you and not in you. The infected status doesn't damage per turn like traditional games of this nature, instead it damages once every 5 seconds (and now more since I am writing this postmortem). The infection takes out a flat rate of base damage + 5% of health so you have a minimum of 20 turns to get disinfected, to a sink or sanitizer to remove the affliction. If you waste time with inefficiency, that's more damage incured until you can leave the battle and reach a soapy sink savior.

Since run was added, it became far easier to add skills for turns. Enemies were given an "Infect" skill, which has a 90% chance to infect at the cost of giving up a possible critical hit. There is also an Infect All skill for the more powerful foes. In addition, each enemy has its own 5 - 10% chance of infecting the player's characters.

THE START OF STATUS AILMENTS

Status ailments give players and enemies a specific outline that indicates who has what. The player's interface will change the player to that color, damage numbers have that same color., bubbles rise from the afflicted. This goes a long way to make the game look more dynamic and give the player feedback. Infected and other status ailments have a minimum duration time followed by a random chance to remove the ailment.

Rudy and Mom can afflict their foes. Rudy has an aerosol flame thrower for lack of a better term that can strike enemies with a burn status. Mom's limit can also give a burn. The burn works more like traditional poison in role playing games and can only be done to enemies. Burn gives damage for each turn at the same rate infected does. Instead of a green color it is maroon, which seems to fit the color palette better than the bright green.

SCREEN SHAKE



Speaking of player feedback, screen shake was added to critical hits. While it would have been simple to shift the view around a central point, that would result in black pixels behind the screen. Instead, I went for a constant, always drawn surface screen, and when the screen shakes, a second screen gets drawn at 50% transparency to give it more of a static vibration. It's probably untrue to the old school roots, but it gives CoronApocalypse a different feel to it.

REMEMBER
Stay safe and wash your hands.
 
To leap forward from where this blog was, here is today's announcement trailer:

ANNOUNCEMENT TRAILER

First look at our COVID charity game to help fight the awful Coronavirus. Battle for survival in Grindmore Grocery as you learn battle strategies like basic hygiene, social distancing, and not hoarding supplies. Co-developed by @BannonRudis & @DrinkingNails
Trailer music by @MeganMcDuffee

 
MORE FOES



CoronApocalypse has slowly progressed, and it is still going. Over the past few months more enemies have been added. Seen below are Scaren and the Terrafiers. The Terrafiers will solidify itself into rock for defense, making attacks useless against them. Once they are free from their rock form, they will attack by launching projectiles. The projectiles arc and hit where they're aiming which was a challenge for physics on a 3D plane.

As for Scaren, this creature empowers its allies giving them increased attack power, increased aggression and slightly increased defense. She wants to speak to your party's manager.

CHANGING THE FLOW OF BATTLE

Previously, the battle system had everyone's agility increasing a meter to determine who took their turn next. Then when the player was deciding what to do, the action would stop. Now when the player is making a long decision, the foes will keep taking their turns to put more emphasis on expedient decisions. Once the player commits to an action, the character will take it's turn.

For testing purposes, the agility speed is cranked up to make turns happen 5x faster for the sake of a quicker video. The animations remain just as swift.

REMEMBER

Stay safe and wash your hands.
 
It has been a while, now the project is coming to a close.

SINK SHIMMY MINI GAME

Looks at design notes: “Hand washing in sinks should restore health via simple timing mini game.” Well is that all? Since this project has gone on for about two years now, it’s good to have design notes to remember the things that were discussed when a project first began.


However, you may not have remembered how truly simple it was meant to be. A test of the battle meter so players could get the timing of the battle meter. Instead, you may go off the deep end and make some grander timing mini game as seen below:


In hindsight, it is a bit excessive demo to get the gameplay right. What you see above is the easy version. It takes 30 seconds, it goes slow enough, it is mostly just the same two directions. The more challenging difficulty has all four directions used, and even that feels manageable.


Since the game has five difficulties, the more challenging difficulties last longer and the mini game goes faster.


While the player is graded 0 – 100%, a passing grade is considered 20%. That 20% will give the player full health. That is not good enough for good players. At 60% it restores the party’s mana. At 80%, the player finds random money. At 90%, the player finds more random money. 95% will give each party member a full limit for use in battle. It gets pretty demanding to get 90% or above, but it is possible to get 100%.


Since these sinks have such incredible rewards, each sink can only be used once. The interesting facet about these faucets is the fact the player doesn’t just need to traverse past them on their journey, but they need to come back through the same path to the front of the store where the checkout is. Do you use the sink on your way to collect items on your shopping list or do you use the sinks on your way back?


The game has special sink rooms. The player can set how often these sink rooms spawn in game. The default at the moment is every 5 rooms will spawn a sink room.

1650575069672.png

REMEMBER

Stay safe and wash your hands.
 
Top