DanoMagnum.com

>Roguelike 

Last Edit: May 6, 2020, 3:40 a.m.

Contents
I've been working on a roguelike for a long time. My initial idea was to recreate a web-based runescape game circa 2003. Then circa 2008 I wanted to do it for the facebook games that were super popular (mafia wars anyone?). But if I was going to do that I might as well incorporate elements of Pokemon. So I started working on a pokemon style game engine. Then I kept going and decided that maybe a roguelike was the best incarnation of my vision. You are here.

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.

Download

Windows

Download Windows Binaries

Run the game.bat file to launch.

Linux

Download Linux Binaries

Run ./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.zip

Run python game.py to launch

Or you can do an svn checkout Here: SVN Repo