Client side version progress: PyPy.js

In my last post about producing a version of Fleshcult that runs locally in the browser rather than on a server, I was wrestling with the need to translate all the Python code into Javascript.

I think I’ve found a way around it. PyPy.js translates Python into Javascript on the fly, right inside your browser. It’s a just-in-time compiler to asm.js rather than an interpreter, so it’s surprisingly efficient.

Continue reading

My Biggest Regret With Fleshcult 1

My biggest regret is that Fleshcult is a server based game. You click a button, it sends a request to the server, and all the processing happens there in Python code.

There are several disadvantages:

  • It doesn’t run offline. If the server goes down, nobody can play.
  • There’s no easy way to keep multiple versions of the game live. I was always careful to keep saved games backward compatible because I know players can’t just fire up an older version, so my ability to make drastic changes was limited.
  • Modding is completely impossible.
  • I haven’t been able to do a totally unrestrained promotional push, because I know the server can only take so much before it lags out horribly or starts spitting errors. Server administration isn’t my forte.

This is all my own stupid fault.

Web browsers can’t run Python without some kind of translation layer, so fixing this is daunting. I’ve been looking for Python to Javascript translation tools and I’ve finally found something that looks doable but it still requires 3 months of work. This isn’t exactly good for Patreon momentum.

The Plan

Here’s how I’d do it gradually, instead making everybody eat all their veggies before dessert:

  • Add content to the server version for a couple of months, all the while doing prep and fixing up code that translates poorly.
  • Fork the code into a server version and a Javascript version. I’d split my time between programming the Javascript version and writing text for the server version. Text is easy to merge when I need to bring the Javascript version up to date with all the latest stuff.
  • Announce a final push and spend a month 100% focused on programming the Javascript version.
  • After making it public and doing a bunch of bugfixes, call that initial Javascript version “Fleshcult Classic” and archive it off.
  • Start work on Fleshcult 2 from the same codebase. Then can I start making really big changes.

What do you guys think? Technical details below the fold.

Continue reading

RAGS in 2018

Have you made a RAGS Game?

You should check out Regalia. It’s an enhancement to the (unfinished) HTML export in RAGS Designer 2.4. You run the export, run Regalia on the export, and then nobody has to install the godawful RAGS Player to play your game.

It’s open source so there’s a pretty good prospect for it eventually supporting every feature in RAGS.

Wait, what’s RAGS?

RAGS is a graphical adventure game creation system that’s popular in several different adult video game scenes. Unfortunately it’s Windows only, tricky to install correctly, largely unmaintained, and has a couple of mutually incompatible versions.

The biggest source of the trouble is that the .RAG format is a renamed SQL Server Compact Edition database. This is an undocumented binary file format called SDF (no relation to signed distance fields). RAGS player relies on SQL Server Compact being installed in order to open the databases. That’s why you have to run two separate installers to install the player. Microsoft is dropping support for SQLSCE in 2021. The old installers will probably work for a while after that point, but there’s no telling when OS or .Net changes will break them.

.RAG files are a terrible way to distribute games and we should stop doing that.

Continue reading

E-mail sending outage (25-27 Feb)

Mandrill, my former e-mail provider, discontinued the service I was using and I botched switching over to a new service. Between 25 and 27 February any attempts by the game or the forums to send e-mails resulted in an Internal Server Error. I didn’t notice because I botched the error monitoring too. I fixed the game yesterday and the forums just now.

If you see any more problems, report them to

Sorry about that. 🙁

An update on the UI work

This is the menu redesign I’m working on. I don’t have anything to release yet because I want to save it until it’s definitely an improvement on what’s already there.


You can see with Cast Loosen there’s a sub menu for the target. I tried out exposing all the arouse/heavy arouse (options #1 and #2) variations in a sub menu, but picking the variation isn’t an interesting decision so I’m going to keep that randomised.

I’m hiding the descriptions inside a foldable section. I figure those are things you really only need to read once. Maybe I’ll default them to unfolded if you’ve never seen an action before, or if you’re on a big display. I haven’t decided which.

Does anyone have recommendations for JS animation libraries? I need relatively simple tweening through a list of keyframes for a variety of CSS properties. Preferably something that runs OK on underpowered devices. JQuery is disappointingly bloated and sluggish.

Using pickle for game saving, 7 months on

This post isn’t much use for anyone but programmers: it’s about the save format I’ve chosen, and a big overview of how it’s been working out for me.

As I mentioned in an earlier post, rather than packing my data into a special format for saving, I just feed my game objects directly into python pickle. Most Python folks regard this with horror!

The drawbacks haven’t exactly been the ones that everyone warns about. Most people I’ve talked to consider that doing this makes it infeasible to change the data format while retaining backward compatibility. In fact, it was pretty quick to set up a data migration system that overrides bits of pickle deserialisation and runs special migration scripts based on a version number stored inside the object.

Continue reading