XaiJu
Tinon
Tinon

patreon


Dev Log — November 2025

Hi everyone!

In the past month, I've continued to work on the PvE overhaul, and more precisely, room selection and the flow of moving between encounters, and how progression is tracked between scenes.

We also got some new graphics for books that will be a new item in the game with the PvE overhaul! In theme with the rest of the game, there is an orange-red book with a star on it for non-magical purposes, and a blue book with a shooting star motif for spells.

Cards

Room selection is done by selecting from a list of cards that each represent an encounter and/or reward. Cards are also planned for other things in the game, like the long-awaited fortune cards and prophecies, and this was the first time I finally got around to implementing cards inside the game, which are now featured on the test server!

The implementation was inspired by Hearthstone's website, where you can see the cards from the game and they have been nicely animated, similarly to how they appear in the game: https://hearthstone.blizzard.com/en-us/cards

I quite liked how this looked, and I also put a bit of my own spin on this by applying a subtle foil effect to the cards. Unlike Hearthstone's implementation, which uses pre-rendered images for the cards, I created a design where cards are rendered from their components in the client. The primary advantage of this, is that any part of a card can be updated and changed dynamically without having to re-render numerous cards. If, for instance, I decided to change the look of the red or blue card frame for all cards, all I would have to do is replace the respective frame graphics instead of replacing every single card with the given frame, which would require an immense amount of manual labor, and so would having to prerender all the cards to begin with!

It really was quite refreshing implementing the card rendering system for the game, since it reminded me of GPU programming, which is something I rarely get an opportunity to do. I also benchmarked my implementation against the one used by Hearthstone's website, and am proud to say the implementation in Battle Mages actually runs better despite not using pre-rendered images! This is in part achieved by separating each card into individual drawing layers, which makes them little different from a prerendered image after the first frame has been rendered. But mostly our implementation is faster because Hearthstone has an error in their code that causes card animations to be recalculated multiple times for a single frame, so it's less me being clever and more of an oversight on their part, but I'll take it!

I went ahead and made the design for planned card types as well, and you can use the macro below on the test server to show a reel of all the different card layouts, which I used during development to make sure everything was working correctly.

${GUI.instance.TestCards()}

Cards also have a backside, and pressing a card for the first time during the test reel will flip the card over.

One of the things I probably should have anticipated, but didn't, is that text becomes illegible on smaller screens, and unless I blow the cards up to huge proportions, it can be difficult to fit more than a single short paragraph inside the text field. For this reason, I had to implement a system for showing full card information when you hover a card, so the card tooltip can carry the burden of displaying all the necessary info players might need to know that couldn't possibly fit on a card, while the card can stay aesthetically pleasing and focus on giving a strong, immediate overview of available options.

While working on room selection, I also realized players should be able to discover encounters similar to how players can discover spells and skills, so they can track what encounters they have experienced, but more importantly, so they can track encounters that are available to them that they have yet to discover.

While inspecting encounters in your collection, discovered encounters will display a card similar to the card that might appear during room selection.

WebP Support

While working on cards, I also realized I needed to find a better solution for storing image files for the game. The issue was that we were almost at capacity already, with over 160.000 image files taking up more than 90% of the storage available for the website. The vast majority of this is taken up by images for items with dynamic coloring. I could upgrade the website, but even that has its limits, and with dynamic avatars, cards, and more items coming to the game, I needed to find a more future-proof solution.

After some research, I learned that I could reduce the size of item images drastically with minimal quality loss by using the WebP format instead of PNG, which required me to spend some time upgrading the website system that handles images for the game and the dynamic coloring of items.

The challenge with game sprites is that they require an alpha channel for transparency that is not supported by JPG, which is a more common lossy compression format. The WebP format has an alpha channel, and I was able to sometimes reduce the size of images below a quarter of what was required before, and this is the sort of solution I was hoping for; it is the difference between being at 100% capacity, or being at 25% capacity, and this should carry us well into the future and beyond dynamic avatars before we will run into another storage issue!

Depending on the device and screen you are using to view the image, you may notice a slight loss in quality on the compressed image. Since images are rarely viewed at their full size, the difference becomes difficult to notice inside the game, and I have full control over which images will use the WebP format, so images that benefit greatly from being viewed at high quality will continue to use the PNG format. Not all images require the same level of detail and quality, and choosing the right format for each image and situation is a big part of asset management in professional game development.

Porn Bans

In the previous dev log, I touched upon the change in the pendulum and how we're seeing an attack on adult content creators and porn. In just the past month, I've noticed the situation is already getting worse, and it seems more and more players are required to use VPN, and the game is now also appearing on website blocking lists for no credible reason.

Having to use a VPN comes with its own challenges, since you are accessing the website through a proxy that makes the connection more finicky and unstable, and it saddens me deeply to hear from players who are having trouble accessing the game through a VPN, when in reality they shouldn't have to use a VPN at all!

I've sent a complaint to Norton, which seems to be the origin of the blocking issue, since a lot of third-party plug-ins for blocking malicious websites are a constellation of blocking lists created by other people, including Norton. Hopefully, they will take our game off the list, but I'm worried they might be pitching for the people who want to ban porn.

Two weeks ago, Adam Conover released this video about the subject titled "Why Porn Bans Will Destroy the Internet", which I wholeheartedly recommend:

https://www.youtube.com/watch?v=tjWUmDHxjIg

I've followed Adam since he was a part of CollegeHumor, and some of you might know him from "Adam Ruins Everything" or "The G Word". In recent years, he's been working on his own podcast, where he often lends his platform to interesting people, like the video above that features porn star and activist Siri Dahl, and professor and porn history researcher Noelle Perdue. It felt very vindicating watching this video that articulates and contextualizes the issue much better than I could ever hope to, while featuring some amazing human beings who are fighting the battle much closer to the frontline than we are.

---

That's it for this month's dev log!

As it happens, when my partner put on the video with Adam and Siri in the living room, I immediately recognized Siri from a porn I vividly remember watching for the first time back in 2013, before Battle Mages were even a thought in my brain, and when I had no clue my life might eventually take me in the direction of creating a porn game. Back then, I found her video on DDF Busty, and I will note that I know very few porn actresses, much less remember their names! But at the time, I was smitten by her, and to my grief, there was very little to find about her online at the time. For a while, I thought she might have quit, and I stopped looking, so it was quite a surprise to find her sitting on a couch in Adam's studio and talking at great length about the rising challenges of adult content creators.

Though I've never met her, it was fulfilling to see where her journey had taken her in all those years, and see my own journey, which I hadn't even started at the same, somehow reflected in it. I've got to meet so many amazing people through my work on Battle Mages, and they have taught me that porn is so much more than just naked bodies rubbing against one another. It's about expression, self-exploration, intimacy, and just plain having fun!

I know I say this every dev log, but frankly, I could say it every day till I kick the bucket or someone turns me into their permanent inanimate plaything, and it still wouldn't be enough to convey how grateful I am for everyone's support, and how it has shaped my life and helped me evolve as a person. Thank you for all your immense support ❤️

We've had quite the journey, and the journey isn't over yet! I'll continue to work hard on PvE overhaul whenever I have an opportunity, and I think the next time I write an update will be around the holidays. I wish everyone a wonderful month ahead, and I'm looking forward to sharing more progress in the month to come!

XOXO,

Tinon

Dev Log — November 2025

More Creators