>Roguelike
Last Edit: May 6, 2020, 3:40 a.m.
Presenting
Fallen God Rising
Intro
It's a fantasy roguelike that features a pokemon-style battle system.Here is a quick video of starting the game up. You first select your initial characters and then you're thrown into an overworld (top right corner) filled with adventure.
Story
The very existence of a god is wholly reliant on their connection to the mortal world. Some gods have talismans. Some embed themselves deep in the ground. An unlucky few hold on only in stories.
Some wage war.
You are a minor god who has nearly been purged out by a greedy competitor, they've drained you of most of your power. Before they could finish you off, you slipped into the shadows with your last remaining soldiers.
You must take revenge on the god who attempted to displace you. Go to the stronghold where the followers of this cruel adversary have the gods talisman stored and destroy it.
Just don't lose your link to the world in the process.
In your weakened state, you only have the capacity to possess three mortals. Once possessed, a mortal remains possessed until they perish. When a spot has opened up, you can attempt to possess any other creature you come in contact with.
Gameplay
The basic gameplay consists of moving around the world with wasd or the arrow keys. If you collide with something in the world you will interact with it. Items will get picked up, creatures will attack, doors will open, and shopkeepers will sell you goods.Each level is enclosed and walking off the edge of the level will move you to the level in that direction (think early zeldas). Stairs will also take you deeper into special zones. Every level also has a biome associated with it that affects the efficacy of magic.
The battle system differs from that of its inspiration in a number of ways. The most important is that you and any enemies have parties of up to 3 combatants and while all combatants can be targeted to take damage, recover health, or have status effects, only one combatant from each side can act each turn.
Each move a combatant knows has its own mana pool which can be restored with items, mana restoring moves, or through leveling up. When you run out of mana for a move, the attack will usually but not always fail. This makes mana management important, especially if you are low on viable combatants.
Luckily, there is a way to get more combatants. Through possession. When you have an empty slot on your team and there is only one enemy remaining, you can attempt to possess them and add them to your team. The weaker the creature is when you attempt to gain possession of them the more likely you are to succeed. Failing a possession attempt reduces the likelihood that you will be successful on subsequent attempts.
From the world you can bring up a menu by pressing M. From there you can equip items, remove items from your combatants, fast travel to places you've been, save, and quit the game.
Magic system
There is a rock-paper-scissors style magic system in the game. STAB bonuses also apply. Have a character that knows thunder blast? Equip them with an electric staff for even more damage! Typed equipment also applies to resistances (no STAB though).The biomes also play into this, buffing some elements while nerfing others.
Game Dev.
The game is written in python using bearlibterminal. It was originally written in curses, then in parallel with bearlib, and now in just bearlib so the bearlib implementation is a bit wonky. It would only be a few small changes to get it running on curses again so I may do that some day.
The tileset is a free roguelike tileset I found online. I've been slowly updating the tiles to match what I need for the game.
I originally started programming this using traditional inheritance. Then I started reading about how an ECS will cure what ailes you (tm) and wanted to put some of that in, but I also didn't want to undo what I had already. What I've ended up with abuses reflection in python to make sure that when a specific method (tick() for example) is called on an instance, the routine is called from every class it inherits from as well as the class itself in old to new order. In this way I've achieved a form of composition where I can just subclass whatever functionality I need and it will all work together.
I sometimes also change the class signature of an instance on-the-fly to add a component to an instance. A Sword() class can have Fire() added to its base class list and voila, it's now a fire sword.
Unfortunately, this breaks pickle so every class that is generated from a factory this way makes use of the reduce() and setstate() methods to recreate itself.
Roadmap
In no particular order and not exhaustive.- Items that prevent status changes. "X of prevention"
- Move/attach sorting menu
- Use moves in over world
- Over world mob variety and scaling
- New areas (Forest, Castle, Camp)
- Towns need residents
- Cave generation can be disjointed
- Attacks that do more damage the larger the party. Mobs that like to team up to take advantage of it. (probably means the battle logic needs refactored)
- Towns need a border if their cell is not open in all directions.
- "see messages"function in overworld to show more history
- Fix overworld edge maping on edge maps.
- Pokemon league style ending. Forward only for 4+1 difficult one on one battles. Each battle has a biome chosen at random but with only 5 battles not all will be present. And a victory road to get there.
- Rare candy style item
- More Items
- More Monsters
- Balancing
Download
Windows
Download Windows BinariesRun the game.bat file to launch.
Linux
Download Linux BinariesRun ./game to launch
Source Code
To run, you will need python3 (test on version 3.7.5) and bearlibterminal installed. It will also run on python 2.7. You can get the source code here: FGR_0.1.tar.gz or here FGR_0.1.zipRun python game.py to launch
Or you can do an svn checkout Here: SVN Repo