Hey guys, firstly, can I apologise for the really long delay between new versions with the game. I was distracted by other projects and only just made it back to working on this game.
There's actually a heap of behind-the-scenes changes, which I'll outline briefly, along with some important in-game additions, which I might actually start with because it's far more interesting.
Additions to the game are merchants and guildmasters. In friendly settlements throughout the Red Prison world, you can find merchants who are stocked with various goods, ammunition and sometimes magic items for you to buy. Prices are affected by your charisma. Players start with some gold now as well, which is also affected by your charisma. There's even a unique merchant placed somewhere within the game (ok... he's in Cindemere), who has an inventory of powerful magic items to buy (or steal - more about that below).
You can also sell items to merchants as well, for a far lower price than you'd pay to buy the same item, but the option is there. It's also affected by charisa.
It's still in a state of flux, but currently, there's no reason why you can't kill and loot a merchant for their whole stock. And of course, merchants aren't particularly tough opponents. So I added bodyguards to make sure that it was a risky enterprise. If you feel confident of defeating the bodyguard, then the merchant is all yours. This might change in later versions if it's too easy to exploit, but that's how the game works currently.
There is only one guildmaster at the moment, with more to come in the future. The plan is to create a roster of unique NPCs to potentially hire and to place them throughout the game. But for now, there is Ingefred the guildmaster in North Warren. She has a collection of hirelings who you can pay to join your party to flesh out your team and cover up and weaknesses. Again, these prices are affected by charisma.
And now behind the scenes: a fair while ago I changed the game's code over from an old version of Python (2.7, I think), to the latest version of Python 3. This actually required a fair bit of rewriting, which was annoying, but it all seems fairly stable. That created other problems though and my workflow of compiling and publishing was ruined because I couldn't get the game to play nicely with my previous setup.
So I switched my compiling over to a project called Nuitka. It seems to be working really well (after a bunch more headaches with compatibility). The benefit to this is that Nuitka apparently brings about some pretty significant improvements in performance, so I actually think that players might notice the game running a lot better than previous versions!
All in all, things are moving forward well and I plan at sticking at it for a while yet and putting out regular updates. Any feedback is more than welcome!
New version released
Changelog:
* Added ability for warlocks to select pact of the chain.
* Changed monster death functions to account for summoned creatures not leaving corpses.
* Fixed bug with quest generation when starting multiple new games.
* Allowed for warlocks to create bats as familiars for testing purposes.
* Finished work on shared field of view with familiars.
* Added monsters: stone golem, swarm of bats, swarm of insects, swarm of poisonous snakes, swarm of quippers, swarm of rats, swarm of ravens, tiger, triceratops, troll, twig blight, tyrannosaurus rex, vulture, warhorse, water elemental, weasel, werewolf, wight, winter wolf, wolf, worg, wyvern, yeti, young green dragon.
* Finished implementing find familiar spell so that you have a choice of a range of monsters.
* Made it so that familiar vision now works properly in all graphical modes.
* Added ability for allies to describe their traits and proficiencies when asked.
* Removed bypass of proficiencies for NPC's and added specific proficiencies for all NPC types.
* Added metal property to every armour type so that druids can be restricted when they wear it.
New version with overworld, quests, graphics update and more
A new version of The Red Prison has been released which overhauls a lot of features about the game, but in particular there is now an overworld to explore with a number of dungeons placed over the map, friendly towns to investigate and quests to undertake on the behalf of unique NPCs!
The game plays almost entirely differently with these changes, and while it's all still a work-in-progress, there is plenty of new content to explore. The game will continue to develop from here with more quests, more NPCs, and the development of a story to discover while taking on the challenges in the many different dungeons.
Other changes include a graphical overhaul of the world which makes things cleaner and a lot better looking.
New version with variable move speeds for PCs, NPCs and monsters, and more!
Things have been a bit slower for me in terms of putting out new releases. That's been because of a combination of real life commitments which needed to take priority over game dev work but also because there was some big ticket items which would need a fair bit of time to complete and to properly test.
This version is one of those big changes and the game now includes variable movement speeds for all creatures. While that might seem like a relatively small change, it required a lot of behind-the-scenes work to implement a kind of energy system for all entities and to translate that to work with each creature's speed.
The big reason for the change was the intent to rebalance the game more in favour of melee combat and against ranged combat and spellcasters who spam offensive cantrips. I've always worked on the theory that each on-screen tile represented ten feet in terms of distance. That worked quite well in most respects until you think about the normal PC movement speed being 30 feet per turn. Without that aspect of the rules being implemented, spellcasters and ranged combatants effectively got 3 times as many turns to attack while melee fighters slowly approached them. That's all changed now.
It's still a bit experimental because you'll see that when you're actively engaged in combat that other creatures can kinda jump towards you as they move multiple squares at once. That's deliberate and that's part of what I'm monitoring in terms of whether it's actually fun or not. From my own playtesting it feels pretty good, but I'm very open to ideas if someone thinks that movement speeds should be tweaked in any way.
Full change list:
* Fixed bug with opportunity attacks where a creature has died somehow (I think????)
* Implemented constants for time to take actions and movement. Add cooldown variable to all objects to record this. Added method to record this value whenever actions are movements are made.
* Finished implementing variable movement speed system - movement now takes 1/3 as long as other actions as base costs and these can be altered to reflect different speeds for each creature for each types of acts.
* Changed order of attribute display just to suit my cosmetic preference.
* Implemented movement delay of 50% times base value for hidden actors.
* Implemented movement delay of 50% times base for wearing heavy armour without requisite strength (apart from for dwarves).
* Updated movement speeds for all monsters.
* Implemented numpy instead of standard python lists to deal with a number of arrays for map storage to improve speed problems introduced by new speed system... and then removed it because my poor programming actually meant that it was slower!
* Did some tidying up of graphics routines to remove redundancies to improve speed.
* Added custom time costs for resting, opening and closing doors and talking.
* Fixed bug with heavy armour and movement speeds not calculating properly.
* Updated action surge to work with new speed system which is actually a lot simpler than the previous system.
Removed an anomaly with the sidebar display when the player is affected by only invisible conditions and there shouldn't be any visible sign of this.
New version - warlocks, a proper endgame and much more
I've just released a new version and there's some really quite significant changes:
* Warlocks - a fair few players have requested this class be added to the game and the current build has them in there as an experimental option. You can quick-start as an aasimar warlock to try it out quickly. It required quite a bit of work behind the scenes to deal with the different way that warlock's spell slots worked - rather than having spell slots per level like wizards and clerics, they only have a single pool of spell slots to cast all spells from.
There's still quite a bit of work to do - there aren't any eldritch invocations in the game yet but there'll be a few options being implemented very shortly and there's plenty of room for more spells. I also need to properly implement low level spells being used with higher spell slots. It wasn't a big priority previously but it's an important aspect of the way which warlocks use magic so I'll be taking a look at that as well.
One of the big decisions to make was how to handle the warlock's pact boon. The Pact of Chains and the familiar that it grants felt like a bad fit for a game where fighting is most of the actions that you'll take. I'm still not sure how or if that'll work. Pact of the Blade is a possibility but I haven't implemented it yet, so all warlocks at this stage take the Pact of the Tome.
Any feedback or bug reports for the new warlock class would be greatly appreciated - there was a fair bit of work done on them which changed some long standing features of the game so there may very well be something unstable created as a result.
* A proper endgame along with balancing dungeon generation - previously the dungeon was of an infinite depth with ever-increasing difficulty the further you went down. That was always just a placeholder though and the intention was always to make a final level with a final encounter. So I decided to cap the dungeon generation at level 20 and implement that final boss, although that encounter will develop more as time goes on. The final boss on level 20 is an adult red dragon with a CR of 17. Considering that the level cap for players is 10, even with a few henchmen, you'll need a lot of luck to stand a chance.
Because I picked an end to the dungeon's depth, it made sense to rejig the way that monster generation worked so that players saw a lot more variety as they went deeper. That's been done, but the side effect of that is that the dungeon is now a hell of a lot more dangerous. You'll start seeing tougher monsters immediately and level 1 is no longer a risk-free zone. Hopefully it makes for a much more tense and challenging experience right from the get go.
Full change list:
* Implemented arcane recovery for wizards. Created a custom menu to deal with this and allocating spell levels up to half character level divided by two but rounded up.
* Added dungeon depth cap. Fixed issues with autoexplore and a lack of a downstairs when at max dungeon depth.
* Added end game encounter with an adult red dragon.
* Increased the possible CR of spawning monsters to make the dungeon a whole lot more dangerous.
* Fixed bug where druids were not using wisdom as their casting stat.
* Added different displays for warlocks and wizard spell slots. Removed spell slot displays for non-casters.
* Added in a whole bunch of special cases to deal with the unique way that warlock spell slots work.
* Implemented hellish rebuke as a level 1 warlock spell. It works as a reaction in the rules as written but that's a bit hard to translate so I made it a condition which lasts until the player rests and triggers automatically on taking damage against whoever that attacker is.
* Implemented eldritch blast. Cantrip which can target multiple enemies as levels go up.
* Implemented pact of the tome for level 3 warlocks. Reworked spell menu so that spells were always in ascending order of level due to the quirks that this new process created.
* Added chill touch as a wizard and warlock cantrip.
* Implemented infernal legacy abilities for tieflings - can cast hellish rebuke as an ability at level 3 and darkness as an ability at level 5.
Inventory management for allies
New version has just been released which allows for the player's allies to be controlled in terms of what weapons and armour they use.
This should let character builds who can't use heavy weapons and armour, for instance, to kit out their followers with these things so that they don't go to waste.
You can use this feature by 't'alking to your follower and choosing the inventory management option. This will give you the choice to give the follower items to equip or carry along with making them give them back or drop them on the ground. Hopefully it's fairly self-explanatory.
The 'l'ook command has also been expanded on so that you can use that to see creatures (which practically at this time is limited to player followers only) and what items they are carrying and have equipped. I might expand this system to giving a visual cue to the player as to when a monster has a special item equipped so that it's more obvious, but this will become more relevant once I introduce monsters using items, not just the player's allies.
Along with this, there's quite a few bug fixes in this release as well.
Dynamic dungeons with environmental traps, more powerful rogues and more
New version has been released with the biggest changes being the introduction of all-new vaults with interactive features. Currently they are limited to pressure plates which open and shut secret doors, but it has the capacity to be expanded to all sorts of effects.
This is the way that I've decided to implement traps - rather than just a simple trap which causes damage without much other interaction, these traps cause the dungeon to shift around the player. Sometimes this will expose the player to unexpected danger, sometimes the player will find themselves having to survive without their allies for a while, or sometimes it'll just make exploration a bit more interesting.
The next biggest change was the implementation of a form of the cunning action trait for rogues. Thanks to some clever user feedback, the idea is to allow rogues to always withdraw from combat with provoking opportunity attacks through the use of this trait. What this means is that rogues don't have to be as careful when it comes to getting into melee range and it synergises really well with sneak attack. Now rogues can explore and scout without fear because they know that they'll be able to drop back without incurring too much damage to their allies where they can really dish out some damage!
Another important change for ease of use is the implementation of another premade character type - the tiefling druid. This will allow for quick starts for druids and will speed up play for those who just want to dive straight into the game.
Apart from that, here's the full change list:
* Changed the way that the game checked to see if player could see monsters doing certain actions resulting in messages. Hopefully will tidy up some issues to do with this.
* Added fog cloud as a level 1 druid spell.
* Began reworking field of vision calculations to take into account the necessity for some Effects to block sight.
* Added new pre-made character to help with testing - Tiefling Druid.
* Finished updating field of view calculations to take into account effects which block sight.
* Added new tiles for various magic effects.
* Added a non-diggable trait to tiles in special vaults so that set pieces can't be interrupted during mag gen.
* Fixed bug with using oil of sharpness on blunt weapon causing crash.
* Finished implementing special vaults with trigger squares causing walls to appear and disappear.
* Implemented possibility for multiple special vaults per floor.
* Put in a whole bunch of new special vaults including ones that mirror normal vaults to cause some surprises.
* Fixed a bug with healer pathfinding AI which caused a rare crash.
* Fixed aasimar racial charisma bonus to +2.
* Fixed potential bug with dying while in wild shape.
* Fixed potential bug with messy monster deaths.
* Implemented an always-on cunning action trait for rogues which allows them the unique class ability to withdraw from combat without drawing opportunity attacks.
* Reduced spawn rate of rare magic items.
New version released with minimap!
With the latest version you'll have a minimap in the bottom right hand corner for all graphical modes. It shows the player, visible allies and enemies and marks the location of up and down stairs if you've found them.
Hopefully this helps people navigate the dungeon a bit more easily and you won't have to change to small ascii mode to find the stairs!
New version with wands, rings, potions and artifact weapons and armour
After a bit of a break from development, I've been back into the swing of things and have just released a new version.
The main features of this version are picking up a bunch of small big fixes and changes that I've been making slowly over the last few weeks (while notionally not working on the game) and a big development push into expanding the categories and variety of magic items available in the game.
These now include:
* wands of web, fireballs, lightning bolt and magic missiles;
* dwarven plate armour;
* dragon scale armour of all kinds;
* elven chain mail;
* mithral armour of all kinds
* oil of sharpness;
* rings of poison resistance, invisibility and protection;
* potion of giant strength (with different strengths for hill, frost, stone, fire, cloud and storm giants);
* potion of heroism;
* scimitar of speed.
There are two categories of magic items with common and rare having different chances of being placed in the dungeon. I still haven't finalised how items get distributed because there is new stuff being added all the time so you might find that magic items might prove too powerful and common in the current build and that'll be addressed in due course. Until then, it's probably a good chance to try things out!
One thing that I'm actively monitoring is the strength of wands - the rules say that you get 7 charges and they can recharge after a long rest. In game, this means that you might get, for instance, 7 fireballs each and every rest and this seems a bit too powerful to me. I'm thinking that I'll potentially turn off item recharging, maybe on a case by case basis because it's a poor fit for the game but I'm still undecided.
Next things on my list are to add more druid spells, add more magic items, expand on map generation, and maybe look at implementing barbarians and monks...
All feedback, bug reports or suggestions are more than welcome.
Full change list:
* Hopefully (!!!) fixed bug where it won't exit properly in Steam.
* Amended stealth formulas so that it should be much harder to spot a hiding creature.
* Reworked item generation code.
* Fixed long-standing bug where dropping an equipped item wouldn't properly clear the equipped status so it would be automatically equipped when picked up again.
* Implemented ring of protection which gives +1 AC and +1 to saving throws.
* Fixed crash bug to do with lighting going up levels.
* Implemented system of damage immunities, vulnerabilties and resistances to be checked each time damage is applied.
* Implemented system of remembering when an NPC has joined party previously. Implemented dismissal of NPC's, them returning to a neutral state but with a flag that they can always be recruited again.
* Implemented ring of invisibility which grants on demand invisibility as an ability. Needed to add an adds_trait variable to equipment to give the fighter this ability which is potentially a bit messy if equipment is removed and equipped taking this into account.
* Implemented wand of web. Required some background work to implement multi-use items but otherwise was very quick to put together.
* Implemented wands of fireballs, lightning bolt and magic missiles.
* Implemented enchantments for armour to have various forms of resistance to magical damage.
* Added restriction on sidebar printing to make sure that long names didn't go over in to the map display.
* Added new rare magic items: dwarven plate armour, dragon scale armour, elven chain mail, mithral armour, oil of sharpness, ring of poison resistance, potion of giant strength (with different strengths for hill, frost, stone, fire, cloud and storm giants), potion of heroism, scimitar of speed.
* Changed the way in which the e'x'amine function works to properly display enchantments on items.
* Fixed bug where dropping equipped items wasn't working properly.
* Played around behind the scenes with items which give bonuses (or maluses) to stats to allow base stats to be recorded.
* Fixed bug with magic wands where a rework of how item functions were called had a flow on problem with spells.
New version - druids, dynamic quests and a heap more
After a few weeks delay, a new version is finally up for download. The delay was because I embarked on a bit of a complicated arc of development and the build was too unstable in various ways to release because of these big additions to the codebase.
I've been spending the last couple of weeks playtesting and ironing out bugs and hopefully (!!!) the version that I've released is as bug-free as I can hope for and playable!
Here is a rundown of the big changes:
* Druids - new character class has been added. The big feature of this class is the level 2 ability to use wildshape! There is also a powerful selection of spells available from both the cleric and wizard lists and there'll be more custom spells coming over the next few months.
* Dynamic quests - I've begun the work on making dynamic quests which appear randomly in the dungeon and assign you different and often competing goals. The first step of this rollout is on some dungeon levels, there is a chance that two rival NPC groups will spawn. They are often very, very tough although their makeup is random. Both will task you with killing the other. It is planned that you'll get a big reward for doing so, but that hasn't been implemented yet. It's a bit experimental still although it seems to be working well apart from a hard-to-reproduce weird behaviour where the quest dialogue doesn't work randomly. I'm looking into it though.
* Map generation - with the addition of quests came the need to rework the map generator to set out special areas where these quests would spawn. I also took the opportunity to add special entry and exit vaults for levels so that stairs would spawn in more logical places rather than just randomly in some narrow corridor. So the dungeon generation should seem a fair bit different and more complex with a lot more variety hopefully.
Full change list:
* Fixed bug where casting bless caused a crash due to an error in the stats display code.
* Changed the way that druids get spells so they are now like clerics and instantly know all spells at a level they can cast.
* Updated stats display to properly display the damage type being used when in wild shape.
* Started work on dynamic quest system. Implemented quest object and start of work on generating quest givers and target throughout maps.
* Changed AI to not attack neutrals automatically.
* Made it so that neutrals don't provoke opportunity attacks.
* Built upon dynamic quest system. Added new long message function so that there are popup dialogue boxes to convey the quest instructions. Added quests object into saving and loading games. Ensured that quest objects are removed from general pool of actors when loading and saving and tracked through the quest system instead. Ironed out bugs with finishing kill quests.
* Made it so that quests and their goals spawn on the same floor to prevent what would be an excessive amount of backtracking. Dummy quest currently has two NPCs asking for the death of the other.
* Enlarged map size to accomodate quests on the same map but with targets at opposite ends.
* Added proper_noun flag to deal with oddities arising from wild shape and the name display.
* Added check for player to have blindsight to deal with scenario where player wild shapes into a bat.
* Added checks to make sure that wild shaped creatures can't pick up or drop items as well as not being able to cast, fire or open and close doors.
* Changed autoexplore algorithm to deal with wild shapes being unable to open doors.
* Fixed bug where followers weren't switching loyalty to new wild shape object (and back again) after transformation.
* Implemented preserving intelligence, wisdom and charisma and XP gains across form changes.
* Fixed display issues with wild shape, now it hides the player's true name, race and role and just displays the monster shape with no gaps in spacing.
* Changed map generation to make the complete map 4x3 vaults which is probably a better size and helps with generating times.
* Added new UI option to confirm whether player is sure they want to do an action. Linked this to attacking neutrals.
* Added make_hostile function which recursively works through monster list to check to see what other allied monsters need to be made hostile when player attacks.
* Created basic MagicMonster and RangedMonster AI's to use for non-companion creatures because that hadn't been implemented yet.
* Created new vault type for quests designed so that a tough NPC and followers can spawn there.
* Tidied up quests by removing references to different levels so that all quests occur within a single level.
* Changed sidebar display colours so that allies are green, quests are purple, neutrals are white and hostile are red.
* Added mobs of allies for quest NPC's. Made it so that allies of NPC's can't be convinced to follow player.
* Reworked dungeon generation algorithm so the game distinguishes between normal, stair and quest vaults and implemented all three with basic options.
* Reduced number of quest NPC allies to 1-3 rather than 2-5. It was too cluttered.
* Added a bunch of new stair and quest vaults.
* Added two new dialogue options for each stage of each quest.
* Added more complexity to the way in which names are printed to take into account whether there are proper nouns as names or not and whether a 'the' should be used or not.
* Reworked all messages to take advantage of new naming system.
* Reworked spell messages so that they aren't shown when a caster is out of sight of the player.
* Simplified AI when it comes to healing and reviving because it seems a bit buggy.
* Reduced ally chat by about half because it was happening too much.
* Hopefully fixed a bug causing hangs to do with quest NPC's AI.
* Fixed bug where crash would occur when more than 26 items picked up.
* Hopefully fixed bug where sometimes quest NPC's wouldn't talk.
* Made sure that arrow keys worked as input across the board rather than just some of the time.
* Updated display to show max HP for enemies and neutrals but not current HP.