Between adding features and making other changes visible to the players, I spend quite a bit of time working on the code architecture in KeeperRL. It pays off given the long term nature of the project, and also because working with well designed code simply makes me a happier programmer. There is a particular bastion of bad design that goes back to the days when KeeperRL was a simple ascii roguelike. All non-moving objects in the game are described by one type of entity, called a square (because each one occupies one square on the grid). There may be only one square at a given position, so when, for example, a chest is placed on a floor, it replaces the floor square. A square is also responsible for tracking any creature that enters its grid cell, and any items that are dropped on it. When I added the dungeon management features, building and digging was as simple as replacing one square with another. Even cutting trees meant replacing a tree with a tree trunk. When I added graphics to the game (about 10 months into development), the squares had to remember what they replaced and draw that as a background, so you could see the grass under a tree (with ascii you don't have this problem, as each position is always rendered as one character). As I was adding features to the game, more logic piled up on top of this design, and it stopped being pretty. The right way to do it was to have another type of entity represent all the objects that can be built, replaced, etc. It would also take care of all interactions between the static object and a creature. The change is not simple though, as a lot of things would be influenced: pathfinding, building, lighting, spreading of fire, etc. On the other hand, there was a solid reason against it: the existing code was already well tested and working. Until a few weeks ago, when I started implementing manual placement of floors. I wanted to allow replacing the floor under an already existing object, like a door, but the existing design couldn't handle it. This was the straw that broke the camel's back, and I went and added the new type of entity, temporarily called "furniture", although it includes other things, like trees, walls, etc. These existing objects and their functionality needed to be translated to "furniture", which caused a chain reaction of other necessary changes deep in the game's internals. The resulting design will be much better, but it will need a lot of testing before it's released to the public. Anyway, this is what I've been doing in the past week. It's just an example of what I work on, when I'm not adding new features. If some updates seem to take too long, it's because I have to embark on this kind of adventures. :)
[ 2016-08-25 16:29:18 CET ] [ Original post ]
- KeeperRL Linux [28.66 M]
- KeeperRL Depot Linux 64-bit [30.57 M]
- KeeperRL Soundtrack
When you control your minions the game changes into a classic roguelike, with turn-based and very tactical combat. You can also play as an adventurer and assault dungeons made by you or other players.
Dungeon management
You will dig deep into the mountain and build dozens of rooms, corridors and traps. Your minions will train and produce weapons and armor. Prisoners will be tortured. You will research new technologies like alchemy, beast mutation and sorcery.Roguelike mechanics
The world is simulated on a very detailed level. Creatures use equipment and consumable items. There are dozens of special items, spells, attributes and special attacks. You can cut off heads and limbs and blind or poison your enemies. If you're not careful with fire, you can burn an entire forest or even your own dungeon.Large, procedurally generated maps
In your neighborhood you'll find castles, villages, other dungeons and special locations. Slay heroes, dragons and witches for their loot. Every game you play will be different.Online map sharing
Download dungeons made by other players and explore them as an adventurer.- OS: Ubuntu
- Processor: Dual Core CPU - 2.4GHz+Memory: 4 GB RAMStorage: 1 GB available space
- Memory: 4 GB RAMStorage: 1 GB available space
- Storage: 1 GB available space
- OS: Ubuntu
- Processor: Dual Core CPU - 4GHz+Memory: 8 GB RAMStorage: 1 GB available space
- Memory: 8 GB RAMStorage: 1 GB available space
- Storage: 1 GB available space
[ 6132 ]
[ 2625 ]