Spankers, Spankees and Switches of All Ages (18 and above),
A new Etrian Odyssey episode has (finally!) been posted. Get it over at the downloads section. I’m much happier about this one than either of my previous two. Which probably means it sucks, because that’s how this usually works.
As far as Potion Wars is concerned, I’ve been pretty busy lately (hence why I failed to post an update last weekend). However, I’m still chugging away. I have one and a half scenes left I want to write before I make the next release, which will finally, finally have the next dungeon level. However, I’ll also be introducing a some new game mechanics (weapon/clothing enhancement, and catfights) in addition to the next episode’s enemies. So there’s still a lot of debugging, and balancing ahead, so I can’t really give an ETA. In fact, I’m going to give up on giving ETAs anyway, because I always, always, always underestimate how long it will take me to get stuff done.
It doesn’t help that I’ve had a bit of writer’s overload the past few weeks. I think a lot of it is because I’ve also been working on Etrian Odyssey on Sundays. That’s a lot of writing. When I started Etrian Odyssey I believe I was either in the middle of, or coming off of a major coding period, so I needed some writing to change things up. Now that I’m in major writing mode for Potion Wars, I’m finding that also writing the Etrian Odyssey episodes is a bit much.
So here is what I’m going to be doing: when I’m in major coding mode, I’ll be working on my Etrian Odyssey Let’s Spank. When I’m in major writing mode, I’ll be working on a different coding project. This way, my Sundays can be a chance to take a break from Potion Wars, do something very different from whatever I’m doing during the week, and still contribute something to this site.
The question of course is, what will I be working on when coding? This project will be an attempt to apply the lessons I’ve learned from Potion Wars and since I started working as a professional programmer:
1. I’ll be using Test Driven Development. Basically, I’ll be writing the tests before I write the code. This will ensure that the code is much more stable.
2. I’ll be working hard to make the code much better documented, and follow some style rules so that the code is more readable.
3. I’ll be using actual tools out there in the wild to help me (say the build tool Maven, the language parser tool ANTLR, the GUI library NiftyGUI), rather than trying to roll my own hilariously inferior and buggy versions.
I’ll be working on the project in a combination of Groovy and Java. Basically, I’ll use Groovy whenever possible, and Java when the tool I’m using demands it (i.e. ANTLR). There are several reasons I’ve chosen these languages. Most importantly, there is an awesome testing framework out there for Groovy/Java called Spock. And since I’m doing TDD, having a good testing framework is a must. Next, Java is ubiquitous. So it has a lot of excellent tools out there, from IDEs to language parser tools. This also means that more people are more likely to know the language, which means I’m more likely to get programmers willing to help me (learning Groovy when you already know Java is very very easy, especially if you also know a scripting language like Python, Perl, or Ruby). Third, this will give me a chance to mess around with some of the tools we’re using at my job, which will be nice. Also Groovy looks like an interesting language that combines some of the safety of static type checking with the flexibility of duck typing. Also its strings are called GStrings. So you know, it’s just begging to have a spanking porn game written in it.
The repository for this new project can be found here: https://github.com/sprpgs/GroovyBooty
I can’t decide if my proposed name for the engine (GroovyBooty) is awful, or awesomely awful.
Right now, it only has one branch (other than a basically empty master), where I was messing around with Groovy’s ability to easily create simple Domain Specific Languages (DSL’s) to see if I could use it to implement a dialect for writing dynamic game text. Turns out doing it directly in Groovy isn’t quite powerful enough, so I’ll have to use ANTLR. Anyway, if there are any programmers out there who would like to get involved, but have been scared away in the past by the fact that my Potion Wars codebase is garbage, let me know.
The next question of course, is what game should I be using as my motivating example for building the engine? I have two possibilities under Eye of the Brainstorm:
The Majesty meets Princess Maker game I talked about a while ago:
https://www.spankingrpgs.com/?page_id=88
We also have a Multi-Generational Dungeon Crawler that I just posted under Eye of the Brainstorm:
https://www.spankingrpgs.com/?page_id=302
Both games will share a lot of the same code, so we don’t have to commit to anything just yet. I am curious about what people’s thoughts are though.
An important thing to keep in mind: Any sort of playable game using GroovyBooty is a loooong way off. It took me 18 months to get the first version of Potion Wars up in all its buggy, convoluted, hacky glory. And that was working on it for several hours a day for most of those 18 months. This will be a much more deliberate, slower development process aimed towards building a well-designed, stable codebase that can be easily maintained and expanded for years to come, rather than for just getting something out the door ASAP like with Potion Wars. Furthermore, I’ll only be working on this once a week in spurts.
And again, if there are any programmers out there who’d like to help develop GroovyBooty, shoot me an e-mail. Furthermore, if there’s anyone out there who would like to help with the design process, that would also be welcome. The only things I’m not looking for right now for this project are writers, artists or musicians, because we’re a very long way off from developing any actual content. I will happily take such help for Potion Wars ;).
Enjoy the new Etrian Odyssey episode
Spankers, Spankees, and Switches of All Ages (18 and above),
I’ve uploaded the latest version of Potion Wars, which fixes the bug that kept you from being able to select clothing past number 10. Hilariously, I then decided that it was silly to make dresses available when selecting pants, because they end up replacing the shirt you selected previously. So I shifted the dresses into the shirts menu, and now all the clothing has less than 10 items again! After all that work creating logic to select clothing item 11 too…
Anyway, you can get the most recent version over in the Downloads.
One other thing, Bonemouth has pointed me to a library of free to use (so long as I give credit) songs. They are quite good, and there’s more variety than I have access to through the place I got my original music (Play On Loop). Unfortunately, the two styles are radically different. So I’m thinking about replacing the current music completely. As a sampler, here are some of the tracts I have in mind:
1. To replace the Church theme (plays during the game’s opening crawl):
2. To replace the title theme (plays when the title picture shows up):
3. Not sure sure yet which I want to replace the generic combat theme. Here are a few options:
And finally, something a bit slower. This would replace the theme that’s played when the first girl you fight in episode 1 is dragged off by the city guards:
Does anyone have any strong opinions one way or the other? These would show up in the same version of the game that introduces the first level of the episode 2 dungeon.
Spankers, Spankees and Switches of All Ages (18 and above),
A small fix, and a minor enhancement to saving:
1. Fixed the bug pointed out as a comment in the previous post, where the flag telling the game whether to allow in-combat spankings wasn’t saving properly.
2. Added a bit of code to sort file names based on name in the save and load menus. Before I was printing the files in whatever order the OS gave them to me.
3. Cleaned up some of the code to load games, making it easier to add data to the save files in a backwards-compatible manner.
Get ’em at the downloads section.
Spankers, Spankees and Switches of All Ages (18 and above),
First, we have a new version of Potion Wars up: Episode 2.12.
Changelog:
1. Added a scene written by Bonemouth for those of who you challenged Cosima to a sparring match in episode 1. Thanks Bonemouth! You can find Cosima in the guild. Just enter the main guild room, and hit talk. She should be there.
2. As requested, you can now purchase the childlike outfits that Ildri makes you wear if you piss her off enough. Note that you’ll need to start a new game in order to see them in the tailor’s inventory.
3. Fixed a bug where the dungeon crashes if you try to use the new (E)xit command in the episode 1 dungeon. I believe either the (E)xit command doesn’t show up at all for episode 1, or it just doesn’t do anything, since you’re not allowed to leave.
4. Modified the flavor text for spectral spanking to make the spell a bit less flexible in-story. While giant glowing hands spanking people is kind of funny, the ability to conjure glowing hands that mimic your every motion as a Tier 0 spell seems a bit absurd, and overpowered. Gameplay wise the spell hasn’t been affected.
5. Health gain and mana gain have been modified. Now, for health you gain 8 + however much health you went over the threshhold. So if your threshhold is 30/35, and you get hit for 10 damage, you will gain 8 + (40 – 35) = 13 health. You now gain a straight +3 mana every time you gain a point in Talent.
6. A bunch of behind the scenes stuff to make writing dynamic text easier, and in preparation for game mechanics that will show up once the episode 2 dungeon goes live.
Also, I’ve moved the Transcripts into their own tab. Clicking on the transcript tab will take you to a bunch of links allowing you to download the transcript pdf, and source. There’s also a link to a webpage of the transcript. Hovering your mouse over Transcript will display a link to “Episode 2” that links directly to the webpage displaying the transcript. Note: The transcript only contains the first scene of episode 2. In general, transcripts will only be posted a little bit after an episode is completed. This is mostly because I want you guys to actually play my game, rather than just read the transcripts. The transcripts are intended to give new people a sense of what they can expect, and the rest of you the ability to look for paths you may have missed during earlier playthroughs, or to see if beating that one asshole boss is actually worth it.
I’ve also finally finished episode 6 of the Etrian Odyssey Let’s Spank. I’m sorry it’s taken so damn long (almost two months!), but I’ve had a lot of trouble writing it. I finally realized that the reason I was having so much trouble with this, and the previous episode are because of tone clash. I’d designed these characters for a fairly whimsical and silly story. Unfortunately, Sam’s little PRS attack has taken the story down a darker path than I’d designed these characters for. So this and the previous episode have basically been trying to mash a round peg into a square hole and wondering why I’m having so much damn trouble. So in this episode, the Sirens basically dig themselves out of that hole. This episode is still a bit too dark, but nothing was really resolved in episode 5, and I can’t just drop it and pretend it never happened. Anyway, things will get much more light-hearted for episode 7.
Also, I’m definitely going to stick to one episode a month, rather than shooting for two. I overestimated my productivity. I have this annoying tendency to do that. So expect the next episode around the end of July.
Spankers, Spankees and Switches of All Ages (18 and above),
Reminder: If you haven’t yet, make sure you download version 2.11 and save your game. Version 2.12+ will not be compatible with save games from 2.10-.
Not much exciting happening right now. I’m steadily working my way through the primary events of the episode 2 dungeon. I’ve written two events (one of which is quite large), and started work on a sequence of two or three smaller but interrelated events. Haven’t had much of a chance to work on Etrian Odyssey, unfortunately. Last weekend I worked on Potion Wars Saturday and Sunday, because during the week my computer was out of commission for a few days (naturally my computer has to not work when I’m not working a full time job -_-). This weekend, I spent all of yesterday with friends. The weekends are usually when I make the most progress, because I’m not drained from a full day of work. As a result, I try to spend at least one day working on Potion Wars, even if that means not working on Etrian Odyssey. I do try to spend at least an hour Monday-Friday working on Potion Wars, but those hours tend not to be as productive as weekend hours because of mental fatigue.
Spankers and Spankees,
I’m back from vacation. Unfortunately, my computer decided to have problems right when I got back, and I’ve only just gotten it repaired, so I wasn’t able to get anything Potion Wars related done on Tuesday and Wednesday, like I’d hoped. On the bright side, the shop where I took my computer to get repaired had an old Macbook Pro for salve for dirt cheap, so I picked that up, and we now have native OS X executables (technically it’s a shell script. OS X “apps” are horrible and should die in a fire. Slowly and with great agony.)
I’ve uploaded the latest version (2.11) to the Download tab. This is a VERY VERY VERY important update. It doesn’t add any new content, but what it does is fix a very subtle mistake in how the game saves. Originally, when I saved whichever “conversation” a character currently has, I saved the conversation based on the conversation’s number, rather than it’s name. Furthermore, my translation script assigns numbers to nodes in order from the beginning of the transcript to the end. What this means is that if I add any new conversation nodes to the middle of the transcript (such as say text for enchanting equipment with enchantment gems at the smithy), then the node numbers will get screwed up, and old saves will give characters the wrong conversations.
This version fixes that. This version will correctly load your save files, and then save them using node names rather than node numbers.
Therefore, it is VERY IMPORTANT that you:
1. Download version 2.11
2. Load your saved games in version 2.11.
3. Save the game.
If you don’t, then your save file WILL NOT WORK for future versions of the game. I repeat, save files from before version 2.11 will be incompatible with versions 2.12+. Unless you want to lose your progress you MUST download this version and save you game using it.
I’m really sorry about the inconvenience.
Spankers and Spankees,
First, I’ll be spending next week visiting family, so I won’t be on until the last week of May (a little over a week from now).
Second, I spent a few hours last night playing Dark Eye: Blackguards. Haven’t played it much, so I don’t have much of an opinion about it, though it looks like it has potential. There are a few things I don’t like (the heavy emphasis on randomness in combat, especially the high failure rate of spells), but there are also some things I do like (the combat grid is well done, the combat itself is fun despite the heavy random element, and the story has me intrigued, though I’m 99.99999% certain it’s going to fall into the painfully cliche “My old friends are members of an Evil Cult Planning to Unleash the Supreme Evil/Take Over the World/Steal Grandma’s Pacemaker” plot). Actually, that last one sounds like it’d be kind of fun…
One thing that I really really like is the stat gain system: after each fight, your characters gain experience (groundbreaking!). This experience goes into a pool of points that you can then use to level up your skills. So far at least, after every fight I’ve gained enough experience to level up at least one skill, and often more than one. I like this because it gives a sense of gradual improvement. After every fight my characters are slightly better than they were before. I like that. And when I like something, I start thinking about how I could build a similar mechanic…
So here are my thoughts. Currently, every action gives you 3 stat points. Where those points are allocated depends on the action performed. For example, attacking allocates 2 stat points to Dexterity, and 1 stat point to Strength. Every time enemies attack, you gain one stat point, depending on where you got attacked. While I like how organic this approach is, there are a few problems. For one thing, your defense also relies heavily on these stats. Therefore, in order to keep yourself from being one-shotted by a physical attack, your squishy mage will have to waste turns smacking baddies with his staff while your enemies laugh. Similarly, with physical attackers (assuming those attackers even know any spells. If they don’t know any spells, they can only gain those stat points by being zapped by spells). Second, if you decide during the game that you need to pivot (i.e. focus more on magic and less on physical attacks, or vice versa), then you need to waste precious rounds doing something your character sucks at. This will almost certainly be frustrating, especially if I can balance the combats well enough that they’re close. So this is actually a very rigid approach to character improvement, and that’s not good. I don’t like rigid character development, because it punishes experimentation.
So, the first thought is that all stat points go into a pool, which the player is then free to spend to improve stats, health, mana, and learn spells. This makes character development much more flexible. Are you getting roasted by spellcasters? Spend some points on Talent. Getting one-shotted? Dump a bunch of points into health. This also has a benefit when characters join your party: Rather than giving them pre-allocated stats which may or may not work with your build for for the rest of the party, I can just have the character start with a pool of stat points that you are free to use however you wish. I could do a similar thing at the beginning of the game, allowing you some control over the starting stats of your character, which spells they know, etc.
Now, here’s the next thought, and the one that gets me really excited: You need to spend a certain number of points in order to improve a stat, and the number of points you need to spend increases as the stat gets higher. So far so standard. However, let’s throw in a little bit of randomness. Just a touch. Imagine if you have a percent chance of gaining the bonus from the next higher stat, depending on how close you are to increasing your stat. So suppose you have 10 Dexterity, it takes 100 points to get 11 Dexterity, and you’ve already spent 90. So you’re 90% of the way there. Imagine if in battle, you have a 90% chance of attacking with 6 Dexterity rather than 5. So maybe there’s a 90% chance that instead of doing say 10 + .4 * 10 = 14 damage (against an enemy with 3 Dexterity), you do 12 + .5 * 12 + 1 = 19 damage. Meanwhile, if you’ve only spent 50 points on Dexterity, you “only” have a 50% chance of gaining this bonus.
Second, suppose that you don’t gain a fixed number of points every time you attack. Instead, the number of points you get depends on how effective your action is. The less effective your action, the more points you get. So imagine you have 5 Dexterity (so 10 warfare), and your enemy has 5 Dexterity (so 10 warfare). Then, you’ll do 10 damage. Meanwhile, if you have 10 Dexterity (so 20 warfare), and your enemy has 5 Dexterity, you’ll do 20 + .5 * 20 + 15 = 45 damage. So you’ll get significantly fewer action points than if you only have 5 Dexterity. Now obviously, you need to have some caps, so that a tank with 5 Talent doesn’t get 5000 action points for casting Firebolt on an enemy with 95 Talent. Similarly, a character with 95 Talent zapping an enemy with 5 Talent should get at least some action points. The points you’d get would probably be something like max(MIN_POINTS, MAX_POINTS – effectiveness), where “effectiveness” could be something like the damage you do, or the number of turns you start grappling, or the number of turns an enemy is inflicted with a status spell.
These two things provide a whole lot of opportunities for different play styles. Do you spend your action points now, and make the upcoming battles easier, or do you hold off to get as many points as possible but make the upcoming battles much harder? Or do you do something in between? How in between? Only spend enough points to get 10% of the way to the next point? 50%? 90%?
Furthermore, a jack of all trades character has an interesting new twist vs. a specialized character. First, you can have partially developed stats, and still gain some benefit from them. The points put into a partially developed stat start working for you from the beginning. This can make it less painful to spread points around. Also, Jacks tend to have lower stats across the board, but not so low that they can’t be effective in battle. Therefore, regardless of their actions in battle, you can expect them to gain more points, which can again ease the large point burden. I like this. I like this a lot. Specialized characters are valuable because they are very effective in battle against specific classes of enemies, but at the cost of perhaps a small dint in action points. Jacks meanwhile aren’t as effective against any one enemy, but can hold their own against anyone, and tend to gain more action points.
What do you spend points on? Well, you can spend points on any of the stats (Dexterity, Strength ,Willpower, Talent, Alertness). You can also spend points on health and mana (one point corresponds to one point of either), and you can spend points to learn spells.
This again, opens up a huge range of character building options, especially since mana, Talent, Willpower, and spell learning are all decoupled. For example, maybe you want a character who is mostly an armslength fighter, but perhaps has a few of the simpler buff spells, to provide some support. Then you don’t bother putting points into learning new spells, but instead pump Talent, and Dexterity. Maybe you want to build a Grapple-tank, someone who can grapple a spellcaster and shut them down, but you don’t care about necessarily learning spells. Then you can pump Dexterity and Talent (with perhaps some Willpower). Maybe you want a character who knows a wide variety of spells. Then you pump Talent, Willpower, and spells, with some points also thrown into mana. Maybe you want a character whose spells aren’t particularly effective, but he/she can cast a lot of them. Then you pump spells and mana. Similarly, maybe you want a wall, a character whose job is to defend the squishier characters, but not much else. Then maybe you pump their health to absurd levels.
Of course, the tricky part is to balance them all. 😉
Another tricky point is that if I’m not careful it could be very easy to exploit. Just cast one Firebolt at 5 Talent against an enemy with 95 Talent to get the MAX_POINTS, then spend the rest of the combat attacking and pump the points into your Dexterity. Perhaps a character doesn’t gain any points if the stat difference is too large, or takes severe penalties to the number of stat points they get? I don’t know, I’ll have to think about it.
Any thoughts? I might spend the next week thinking about it, and potential formulas for generating points, how fast point costs increase, etc. If I do implement this (I may not, this is still very much in the brainstorming phase), it won’t be until after I’ve overhauled the GUI. Allocating points will require significant (and non-trivial) extensions of the GUI, so I don’t want to do anything with that until I’ve built a GUI that can actually be extended with non-trivial things.
Fixed a bug in the logging code that resulted in infinite recursion. See previous post for details on changes in 2.09.
Spankers and Spankees,
I’ve released a new update to Potion Wars (get it at the Downloads page).
Changelog:
1. The game now writes to errors.log all actions performed in combat, and the associated state. This should make it a lot easier for me to track down corner bugs that only arise when actions A B C D E E E E A F are performed in combat. So please, when you see a crash or other bug in combat please tell me about the bug and SEND ME THE ERRORS.LOG file. Furthermore, please, as soon as you see the error, kill the game and send me the error.log. That way, the last action in the log will be the action at the point the error happened. If the bug crashes the game, just send me the errors.log (along with a description of the error). Note that the errors.log file gets wiped every time you restart the program, HOWEVER the game also automatically saves the errors.log file from the previous 5 play sessions (named errors_1.log, errors_2.log, …errors_5.log). So if you see a crash, but accidentally restart the game before you send me the log, just send me the log file that corresponds to that playthrough.
2. I’ve added a scene with Airell (the pompous mage) written by Bonemouth and edited by me. You should see this scene if you pissed off Airell in episode 1, and he threatened you with a spanking. He’ll show up in the Adventurer’s Guild, just talk to him to start the scene.
3. Fixed a bug in one of Maria’s conversation nodes in episode 1, that would have caused a crash as soon as someone tried to access that quip. It was the node at the end of episode 1 that only triggered if the player managed to stay out of trouble with the guards (i.e. didn’t get into a fight with Maria, and didn’t lie to the guards). Apparently not a particular popular path among people who file bug reports, since I only saw it after I fixed a bug in my unit tests that meant my tests weren’t invoking the conversation nodes in episode 1.
4. Skyblaster the Sardine has joined the team as a beta tester, and support writer. He’ll be working primarily on in-combat spanking scenes for now. I’ve added his name to the in-game Acknowledgments page. Flash the Flamingo has also joined, he’ll be working as a Beta Tester, and number cruncher (basically he’ll help me analyze my growth and damage formulas, and make sure they scale like I want them to). I forgot to add Flash to the in-game page, and I’m too lazy to back and add it, but he’ll be there in the next release!
5. Implemented some code that should make it easier for me to maintain consistent state when transitioning scenes. Basically, any time a scene begins, I clear out all adjacent rooms, and remove all NPCs from their respective rooms, and then manually reinstate those rooms, and NPCs that actually show up in the scene (I do have some helper functions for rooms, and characters, like Avaricum Square or the girl at the Tailors, that don’t change between scenes). This will make a little bit more work for me, but it should make errors more obvious (a character who should be there is missing!), and gives me much better control over the configuration of each scene. So it’ll end up saving me time in the long run.
6. Characters now gain 2 points in Strength for every round they stay grappled. Otherwise, grappling would go up too slow for characters who initialize and actually want to stay grappled (i.e. the characters who should have high grapples!)
7. Characters gain 120% mana each time they gain talent, rather than 150%.
8. Removed ambushes. They were rare, buggy, and in my opinion don’t really contribute anything.
9. Miscellaneous bug fixes. Added some infrastructure for incorporating LaTeX written dungeon scenes into the game.
10. Removed Deidre from the Adventurer’s Guild. Originally she was going to provide the job on behalf of someone else. I decided I didn’t want that, so I’ve introduced a small retcon.
Also, although you can’t reach the dungeon in episode 2 yet, I have added it to the code. Here’s a screenshot of the corner you start in:
It’s not the prettiest thing ever, but that’s another side-effect of the rigidity of my current GUI code. Hopefully when I overhaul the GUI after episode 2, I’ll be able to rewrite the map code so that it looks nicer, and we don’t necessarily after to show the entire map at once (clearly 20 x 20 is about as large as we can without inducing eye strain). But who knows. I sure don’t. Honestly, I’m surprised it works as well as it does.
I haven’t implemented any of the events yet, but we’re getting there.
Also, don’t forget I released a new episode of Etrian Odyssey yesterday. Get it at the Etrian Odyssey tab.
Spankers and Spankees,
I’ve uploaded the next episode in the Etrian Odyssey Let’s Spank. It can be found under the Etrian Odyssey tab. Honestly, I’m not particularly happy with this one. I’m still having trouble figuring out Naomi. I’ve made some progress I think, but she still doesn’t flow as naturally for me as the others do. Of course, it could also just be the end of semester burn out that’s talking. I don’t know. Anyway, hope you enjoy it.
As far as Potion Wars is concerned, well I have a scene with Airell that Bonemouth wrote that I’m currently sitting on. I’ve also implemented the first level of this episode’s dungeon (though I haven’t written any events for it yet). I’ll try to finish editing Airell’s scene tomorrow, and get it posted (too tired to deal with it now), and I’ll upload a screenshot of a partial exploration of the first level of the dungeon.
Also, don’t forget that in my previous post I offered several alternatives to two Etrian Odyssey stories a month. Take a look and let me know what you think. If I don’t hear anything, I’ll just stick to the current two EO episodes a month.