Devblog #3 – Fantastic bugs and where to find them

Hey there chaps,

It’s been a busy few months for us, and a lengthy wait time for you, but we’re excited to announce that the conversion of the game from Ren’py 7 (Python 2) to Ren’py 8 (Python 3) is finally complete! We’re now in the final testing phase, and we can’t wait to share the new version of the game with you.

Before I get to the juicy stuff, I’d like to unleash my inner nerd 🤓 and talk a little about the process we went through, and how it affected the game and our workflow. I’ll try to keep it concise, but no promises.

One of the most challenging aspects of the conversion process was redesigning the internal systems without hurting performance or losing functionality. I have made some questionable design decisions before, that in retrospection I’m not proud of. Some were made due to time constraints and others due to my limited knowledge of the Ren’py engine. During the conversion process, I took the opportunity to address some of the aforementioned design and performance problems that had been plaguing the game ever since its creation.

For example, whenever the character call was made in the script, it would compute the clothing colours, layer structure, animation constructs, and only after that was done it would finally render the character image using a custom displayable. While the design was logical, unfortunately it was flawed at its base because I designed it as if it were being implemented in an entirely different game engine. The implementation was computationally expensive, the calculations had to be made every single statement for every single displayed character. Moreover, due to the nature of the engine and my misunderstanding of certain key features such as rollback, the performance degraded each time a rollback was performed. Uh-Oh. That doesn’t sound efficient, does it?

So, here’s what went wrong. Rollback is a great feature that other engines besides Ren’py implement, but the Ren’py implementation is pretty unique. Since Ren’py is based on Python, I assumed everything would work just like in good ol’ Python because why wouldn’t it, right. That’s the first mistake I made.

It is true that Ren’py supports the majority of Python functions, but it also implements its own subset of instructions and changes that modify how Python itself behaves inside the engine. To be able to showcase what went wrong, first I need to explain how memory is handled in Python.

Whenever you spawn a python object, the object reference and its attributes are being stored in memory until the program ends, or you delete the object, in which case it will be garbage collected (removed from memory) after python detects it is no longer in use. Sounds simple enough.

However, in Ren’py, each object reference and its attributes are being stored in memory twice. This is because rollback makes a copy of each object’s attributes and stores it in a log. This allows Ren’py to roll back the game and its code seamlessly, however, not without side effects. To reduce the number of side effects, each time you roll back the game, the statement you are rolling back to is being re-run, recreating the objects and their data. Some of you may already see the issue I’m trying to portray here.

The code responsible for generating character images was not intended to be run so frequently, so the faster you rolled back, or moved forward, it would not only waste CPU cycles, creating hitches and lags, but also bloat memory out of proportions in certain situations.

This brings us to another issue that I have been trying to fix for forever — Android devices crashing. For the longest time, I have been attempting to pinpoint the cause for crashes on certain devices, but for the life of me, I could not figure it out. The game worked absolutely fine on all my android devices, it was frustrating, I have been looking over the log files some of you were kind enough to send, and wondering… the numbers, Mason, what do they mean?

In the past few months, I was finally able to piece everything together. It turns out, the implementation of the rendering engine on certain phones is completely different compared to the implementation on my test devices. So, basically, this memory handling thing was a big headache, especially on Samsung devices. There were two main culprits: my code wasn’t quite up to snuff, and to make matters worse, Ren’py had a few bugs in the features I was using that were causing the same issue.

Initially, we have tried keeping the engine development apart from the main game development, unfortunately, during the implementation of some of the new content and features we had planned, we discovered game breaking bugs that stalled the process, and it put us in a conundrum.

We had two choices; We could either redesign the content plan and cut the problematic parts, risking encountering them again in the future, or, spend more time and resolve those issues once and for all, at a cost of a longer development cycle.

After lengthy discussions, we came to the conclusion that our only option is the option number two, and here are some of our reasons;

  • Performance issues:
    • Adding content would exacerbate the issue
    • Under memory-constrained situations, switching to full-screen would crash the game
    • Replay mode would take literal seconds to activate and switch contexts
    • The rollback performance was bad
    • The focus mechanism was causing stutters and slowdowns
    • Memory bloat
  • Python 2 deprecated in 2020:
    • Last update in June 2016
    • Issues with modern implementations and hardware
    • The Python 2 version of Ren’py will be discontinued eventually
    • Memory limitations
    • Suboptimal functions and syntax
    • Long list of known issues with no fixes
    • Lacking optimizations
    • Lack of support
    • Ever-increasing number of vulnerabilities
    • … and more
  • Android issues:
    • High memory footprint
    • Segmentation faults
    • Performance regressions
    • Memory and texture leaks
    • Lack of hardware acceleration in certain cases
  • Ren’py 8 and Python 3 offer numerous features that:
    • Enhance game development
    • Reduce downtime
    • Improve quality
    • Improve performance
    • Add modularity
    • Enable creation of user-defined statements
    • … and more

There are many factors to take into account, but the above list only scratches the surface. Unfortunately, we had to overhaul everything, which I was hesitant about, but I kept going because I knew it would stop you guys from complaining about performance. I’m joking. Or am I? 😗

Putting jokes aside, tackling this task has been a true behemoth, especially since I’m the only programmer on the team. But luckily, I’m surrounded by the most helpful and passionate group of people you could imagine making a porn game with. Whenever I hit a roadblock, I can just hit up Johnny or the others and talk it out, whether it’s coding problems, design issues, or just something as simple as waking up on the wrong side of the bed. Being able to discuss things or vent helps me gain new perspectives and ideas. Although, I should probably look into rubber duck development, as I’m already taking up too much of their time. 😆

Wrapping up. I’m pleased to report that all the aforementioned issues have been addressed, and we’ve noticed major performance improvements across all range of devices (that’s at least 3 computers and 2 phones 😉). I understand that not everyone has access to top-of-the-line hardware, so I’ve also included certain optional features that should enhance performance on the more capable hardware, such as an image cache slider that aims to improve performance at a cost of higher memory consumption. There are also numerous tweaks and enhancements that apply across all platforms. To address the performance issues within character image constructors, I implemented a solution where the results of the calculations are stored and cached. This allows for the efficient retrieval of previously generated valid combinations of character statements, saving both memory and cycles.

Of course, it’s not just about performance and bug fixing. We have also implemented a vast range of features that we hope you will enjoy in the upcoming weeks.

One of such features that wasn’t mentioned before is the expanded modding support that allows you to expand the game with ease and to the extent that was not possible before. You can add new characters, events, modify storylines and dialogues without limitations or increased complexity. I’m also working on adding documentation and modders resources.

I’d like to mention another feature we’re working on: the improved integration of wardrobe within the game. We noticed that gameplay and wardrobe elements were a bit disconnected, so we’re actively trying to address that by adjusting events and adding more checks where needed. But that’s not all.

We’re also working on revamping and adding clothing support to chibis. We plan to cover all quest-related outfits and clothing pieces, but we’ll need to discuss the rest further before I can give you a more detailed answer.

But enough about technicalities. Now, if you are still awake reading this post, it’s time to share the juicy part you all have been waiting for — the release date.

If everything goes as planned, the next update should be released… queue the drumroll, sometime next week. Yep, you heard it, the wait time is about to be over boys and girls!

Given the extensive nature of the changes and the use of an unreleased version of the Ren’py engine, we will label this update as an alpha version until both our codebase and the Ren’py codebase are stable enough. We’ll likely keep the older update live alongside the alpha update until that point, but we will need your help with testing if you’re willing.

The plan is to release updates in quick succession, fixing reported bugs and adding some new content we haven’t included yet, alongside some other changes we hope to reveal publicly later. We will make an announcement as soon as we have further information to share.

Once the bugs are squashed and the update becomes feature-complete, only then we will move onto working the next update, which should take much less time to develop now that we’ve addressed all the issues we’ve had with the project and our workflow. No worries, we don’t plan doing any more maintenance. 😛

If you’re reading this, congrats – you’ve made it to the end of the post! Before I go, I just wanted to thank you all for your support and patience. We wouldn’t be here without you, and there’s no better feeling than seeing others enjoy your hard work.

LoafyLemon out.

P.S. We will be posting some teasers in the upcoming days, stay tuned!

Devblog #2 – Can writers have a backstory?

Hey everyone, Johnny here with another devblog.

Today, I want to share a bit about what I’ve been working on lately, and even though nobody asked, I thought I’d mention some of the media that has inspired me and my writing.

As you may recall from the last devblog, I’ve been playtesting the game as part of our effort to port it to the Python 3 version of Ren’Py. It’s been challenging, but it has given me the chance to really dig into the game and “touch up” the writing.

For example, I’ve been refining Hermione’s behaviour during certain public and personal events to ensure that her attitude remains consistent for that tier. This includes things like strengthening the reasons why Hermione would ever agree to dance in front of Snape, her attitude towards kissing other girls, and how she reacts to Genie using derogatory terms. Previously, the player could change her nickname to a derogatory term, yet one of the events featured the same term being used and Hermione acting negatively towards it. There may still be a few instances where this inconsistency is present, so if you happen to spot one, please let me know.

Regarding writing improvements, I’ve mainly been adding more dialogue options and checks, as well as additional and improved writing during events. My current goals are to make the world feel more alive, let the player participate more in what Genie says, and add further replayability. I’ve learned a lot since I went over the writing last time, so hopefully everything should now feel even more interconnected.

Some examples that I’ll share today include a new section for the “Dance for Snape” event. On each replay of the event, Hermione now takes the player’s choices into account and lists all the new things she’s learned about him. The other dancing variants of this tier are being improved as well, mainly by adding more variation between the different choices. In the future, I’d also like to add even more variations for higher tiers.

I’ve added more checks during the event where Hermione opens up to Genie and Tonks about the naughty behaviour of her peers. Now she’ll mention the most current Quidditch events that she has witnessed and participated in.

That’s about it for work, but as I mentioned at the start, I’d also like to go on a bit of a nostalgia trip and talk a little bit about the media that has influenced me and my writing. It might not be interesting to everyone, but it may explain Genie’s dumb tangents and stupid humour, as I put a lot of myself into his character.

When I was growing up, I was mostly drawn to games that didn’t base themselves too much in reality or take themselves too seriously, such as the Ty the Tasmanian Tiger, Ratchet and Clank, Sly, Jak and Daxter, Rayman, and Tony Hawk’s Underground series. Some of you may have already noticed what is similar about these games. No, they don’t all have furry characters in them (I added Tony Hawk just so you couldn’t make that comparison). What makes them similar is that they were all filled with funny one-liners and humour, some of which were even fourth wall breaking.

Once I got older, I started reading the Harry Potter books and playing the games. They’ve always been a big part of my life, during both happy and sad times. When it comes to the games, I’ve played just about all of them, including the versions for the various platforms. I say “just about” because I haven’t played the Deathly Hallows games, and I haven’t had the chance to pick up Hogwarts Legacy yet.

I could probably elaborate on the games, books, and movies for ages, but I’ll leave that for another post. For now, I’ll just list my favourite games in order from best to worst. Just in case there’s at least one other nerd like me who has played them all. I’ll specify a console when there are multiple games for the same school year. I also won’t list the handheld games:

  • 3 (PS2)
  • 2 (PS2)
  • 1 (PS2)
  • 3 (PC)
  • Quidditch World cup
  • Lego Year 5-6
  • 5 (PS2)
  • 6 (PS2)
  • Lego Year 1-4
  • 4 (PS2)
  • 2 PC
  • 1 PC

Comedy has always been something that I’ve been drawn towards in every media, and especially for TV and movies. My favourite movies growing up were the ones starring Jim Carrey, especially The mask and Ace Ventura. I also enjoyed and still enjoy cartoons a fair bit, I’m currently watching the Aladdin series and Star Wars The clone wars. Funnily enough, Aladdin was my favourite Disney film growing up, perhaps due to the Genie character providing the type of comedy relief I enjoy.

Of course, there’s also other adult media that has inspired my work, but this post is starting to take up far too many inches on my screen, and I’m feeling a bit insecure about that. So to end this devblog, I thought I’d pose a question for you all as I made have had a realisation when typing this up. Does anyone else remember Courtney Gears from Ratchet and Clank 3? Is it just me, or does her body type look a bit similar to the characters in… Never mind… Forget I said anything.

Devblog #1 – Hello World

Hey everyone! We have some updates on the progress of our game development process. To begin with, we’ve decided to start making development blog posts to make up for the radio silence, which we apologize for. Progress reports aren’t always possible to make when we’re in the middle of the development, and they don’t always contain information about what we’re struggling with or the actual immediate changes we’re making.

Another reason why we’ve decided to start making these development blog posts is because we understand that not everyone has the expertise to read and understand the code changes we’re making, even if we use Git and everyone can view our progress. By writing these posts, we hope to make our development process more accessible and transparent for everyone interested in the game, so you can get a behind-the-scenes look at our work. We’re excited to share our journey with you and hope you find these updates helpful and informative.

We also want to inform you that we plan on making these development blog posts bi-monthly, so you can expect to hear from us more regularly. We want to keep you all in the loop and share the progress we’re making in the development process.

Moving on to the game development progress, Johnny has been working hard on the writing, while I’ve been focusing on porting the game to the newest version of Ren’py and Python. This has been a long and challenging task, involving testing, fixing bugs, converting CGs, and refactoring the code. However, we’re finally starting to see the light at the end of the tunnel, and all the hard work has been worth it.

During the playtesting phase, Johnny has been able to elevate the writing even further. We’re making adjustments to Hermione’s public events to match her personal events and adding more event checks. For instance, during early Hermione favours, you can ask her to dance for you. However, when you ask her to do more than dancing, the event will fail. Once you’ve progressed further, and you’re finally at a point where she accepts, she will still act surprised by the request, which didn’t make sense. So, we’re adding more checks like this to make the writing less generalized and the reactions more genuine.

We want to make sure the game feels authentic and immersive, so we’re asking for your help. If you notice something that feels off, even if it has already been established, please let Johnny or me know.

In other news, I’ve made a Discord bot to automatically post embeds on our Discord server whenever we create a new post on the website. This way, we don’t have to repeat the same thing on every website we manage.

We appreciate all the support we’ve received so far and are excited to continue working on this project. Thank you for your patience, and stay tuned for more updates!

P.S. Johnny had a chicken for lunch today.
P.P.S Johnny says it was a joke and to not include it in the post, well, it’s too late for that now!

Progress Report

Hello everyone! We hope you’re all enjoying the game so far. We wanted to give you a progress report on the upcoming updates that we’re working on. Our team has been hard at work, making improvements and adding new features to enhance your experience.

To start off, we’re converting our codebase to Python 3 and Renpy 8, which will help address performance issues on PC and android devices. We’re also fixing crashes on mobile devices so that you can enjoy the game without any interruptions. This is an important change that should make the code more maintainable and reduce its complexity.

Additionally, we’re adding translation support to the game, which means that we will be providing the tools and support for players to translate the game into their own language. However, the actual translations will be crowd-sourced, so players will be able to help us make the game accessible to more players around the world. We’re hoping that this will bring the community closer together and make the game even more enjoyable for everyone.

The layering for the character’s Doll system is also getting an overhaul. We’re expanding support for mods and clothing, and we’ve added some new features like static zorders per layer, dynamic clothing based on other clothing or facial states, support for more common file formats like PNG, AVIF, and TIFF, alongside WEBP. We’ve also expanded modding support so you can add new characters, events, or modify existing ones with less issues. There are also layer modifiers for character files, which will allow for even more customization options.

The Chibis are also getting an overhaul with a brand new codebase and artwork for all characters. We’re sure you’ll love the new look!

We’ll be disclosing more changes and additions as they get closer to being ready, so stay tuned for more updates. For those who missed our previous progress report, the next two updates will be focusing on Cho, and Luna.

To sweeten up the wait time a little, we’ll be posting a fun teaser on our Patreon page that we’re sure will bring a smile to all you quidditch fans.  Keep an eye out for smaller teasers being posted on our discord server, such as the one about Susan wearing a sexy priestess outfit.

It was also brought to our attention that there are issues with our website requiring a log-in, so we’re looking for alternative hosting services. We’ll keep you updated as we find a better solution.

For those who are curious (or impatient 🤭) about the progress of the update, we wanted to mention that we use Git for version control. This means that our code and progress is always available for anyone to see. If you’re interested in checking out what we’re working on or following along with our progress, you can find our Git repository on our website. This is a great way to stay up-to-date on the latest changes and to see what we’re working on next. If you do wish to check our repository, please be mindful of spoilers, and that the content is not representative of the final product and may change at any time of the development cycle. If you find any bugs or issues with the new unpublished content, please send us a DM.

We’re always looking for ways to improve the game, and we’re excited to bring these updates to you soon. Thank you for your continued support!

Silver Studio Games

Witch Trainer Silver – Update 1.44.2 + Hotfix

Season’s greetings! 🎅

Christmas returns to Hogwarts once more in this holiday-themed update.

The update includes a short mirror story starring Genie, Hermione, Cho, Luna, and a mysterious ghost? Spirit? A Christmas spirit! Yes, that’s it!

Finishing the story will reward you with new outfits and office decorations featured in it. And if I were you, I’d take a closer look at that list on the wall.

Along with the Holiday themed items, you will also find a whole slew sleigh full of new clothing sets for the three girls in the store.

Silver Studio Games wishes everyone a nice holiday season, and a prosperous new year.

And as always, for a complete list of changes, please refer to the changelog.

Happy holidays!

A few words regarding save compatibility; Please save the game inside the main office, without any other characters present, before updating to ensure that your saves remain compatible.

For a complete list of changes, please refer to the changelog

Witch Trainer Silver – Update 1.44.0

Pick up your Box-o-fun from the Weasley store today, and see what kind of lucky pull Hermione will find within. Let her test her limits, and find out if she can truly handle everything you’ve got in store for her.

Have her stand in front of your desk as you push her buttons, or put that naughty witch on full display on top of your desk and tease her to your heart’s content.

Send her out onto the Hogwarts grounds and decide whether you want to take control of her destiny or let her fulfil it on her own. Will she experience regret, lust, or will she burst into an ecstatic rage in front of everyone? Well, that’s for you to decide!

The new event chain consists of a multitude of new events with alternative writing for various stages of your relationship, including hand-drawn artwork, and has fourteen different endings total, marking it as the biggest event to date. Can you find them all?

Enjoy two expanded public requests for early Hermione favours with new writing and CG scenes, one featuring a lecherous Professor Flitwick and the other a perplexed Hufflepuff Student.

For a complete list of changes, please refer to the changelog linked down below.

A few words regarding save compatibility; Please save the game inside the main office, without any other characters present, before updating to ensure that your saves remain compatible.

For a complete list of changes, please refer to the changelog.

Progress Report

Greeting, It is I, a progress report.

This update’s content is implemented, and we are now finalizing and testing it to ensure everything works as intended. If you are here to find out about the date of the upcoming release, you’re in luck, the update will be released sometime this week. On to the main post now.

The content plan for the next update has been finalized and will include Cho, and to a smaller degree, Tonks. The last quidditch match has left everyone wanting more of Cho, and thus, we will be adding additional events explaining her story, but also more CG scenes, some of which, for the first time, will include Tonks. We don’t want to spoil the details just yet, but if you’ve been following the story, you might know what scene we’re referring to. 😉 We will be posting previews of the scenes on our Patreon once they are ready to be revealed.

The work for future updates has already begun, our artist is already working on designing and drawing scenes for Luna, which will be the highlight of the update after Cho’s update.

We are also working on a handset of features that are popular and commonly requested on Discord such as visitable locations with the potential for having more diverse in-game events, and updated chibis for all characters, but we will talk more about it once these features are closer to completion.

We also want to draw attention to our Discord server, which is a great resource for finding more community-made mods that add additional clothing, features, and events. Check ‘Community Modifications’ section for details.

Last but not least, we want to thank one of our community members for contributing a story for Mirror of Erised, which will be included in the upcoming release.

That wraps up this report. Stay tuned and happy witch training!