Devblog #12 – Inspecting all the features

Sup y’all, Johnny here with another devblog.

Today, I’d like to discuss some upcoming content integrations into the game, including those already added and those currently in progress. Firstly, we bid farewell to the Luna “inspect body” Chibi images, replacing them with a fully CG scene. This scene will feature various poses and an additional secondary CG as a bonus. Currently, I’m working on posing this scene, which involves a total of 5 events, demanding my full attention but promising a rewarding outcome.

Another addition is the “masturbate for me” favour, where Genie tests Luna’s knowledge by evaluating her acquired knowledge. Players can even grade her performance. Furthermore, the Hermione “Cumslut” public request rework has been implemented. I’m delighted with the outcome, as it overcomes previous limitations, such as missed return events and restricted Tier 5 exclusivity. The revamped version ensures all events are accessible, with three events on Tier 5 and four events on Tier 6. Both tiers now include unique intros based on the favour’s initiation timing, and the evening return events have been significantly improved and expanded.

Additionally, I’ve introduced new nicknames for Luna in the upcoming content and added missing nickname chats for Hermione.

Regarding personal updates, I rediscovered my passion for gaming during the Christmas break and have continued playing on weekends. I’ve revisited the Mass Effect series, only completing half of the second game earlier. I must say, it’s been challenging to put it down. Each game offers something new and engaging. I enjoyed the planetary driving mechanics in the first game, while the second game captivated me with its compelling characters, intriguing storyline, and well-crafted quests. Currently, I’m playing through Mass Effect 3, but haven’t fully formed an opinion yet. However, I find the gunplay in this instalment to be the most enjoyable among the three games.

Devblog #11 – Bringing CG Scenes to Life in WTS

Hey there, Patrons and WTS fans! It’s LoafyLemon here, your friendly neighbourhood adult-game dev. Today, I’m going to give you a sneak peek into the process of implementing CG scenes (hand-drawn smut) in Witch Trainer Silver.

The process starts with sourcing the perfect CG images. We’re quite picky about this *cough* as are most of our users *cough*, as the quality and style need to match the overall aesthetic of the game as closely as possible, which I must emphasise, it’s not easy! Once we’ve conceptualised and drawn the scenes, it’s time to prepare them for integration. This involves splitting layers, resizing, cropping, and optimising the images to ensure they load smoothly within the game.

Next up, we need to decide where and when these CG scenes will appear in the scene they were planned for. It’s all about finding the right balance between storytelling and visual pleasure. We want to make sure that these scenes enhance the (s)experience without disrupting the flow of the game.

Once we’ve figured out the placement, it’s time for the programming part. I use SublimeText as my code editor of choice because it’s blazing fast, versatile, and has all the features I need. To integrate the CG scenes, I write scripts that trigger the scenes at specific points in the story. These scripts also handle the transition between regular gameplay and the CG scenes, ensuring a (usually) seamless experience for you lads and gals.

Of course, I wouldn’t be myself if I didn’t dive a little bit deeper into the technical side. Historically, I used my own python implementation for CG scenes, which turned out to be less than ideal because I was going against the current, fighting with the engine quirks, instead of following its workflow. Ren’py’s layeredimage feature plays a crucial role in this new process. For those unfamiliar, layeredimage is a built-in Ren’py feature that allows us to create complex and dynamic scenes by layering multiple images on top of each other. This is particularly useful for CG scenes, where we often need to combine backgrounds, characters, and various other elements to create a cohesive and visually appealing image, while maintaining the ability to switch parts of the image dynamically.

Promptly after the image definitions are implemented, it’s time to pose the scenes and see how things fit together. This is a time consuming process and has a huge impact on the overall quality of the scene, involving posing facial expressions, adding visual effects, and setting up animation timers. At times we also draw additional bits and bobs as we go through the implementation to fully flesh out the scene.

After the programming is done, we move on to testing. This is where we make sure everything works as intended and that the scenes are triggered correctly. It’s also a chance to fine-tune the timing and presentation of the CG scenes to ensure maximum impact.

Finally, once everything is working as it should, and we’re happy with the final piece, we upload everything to our git repository.

By the way, we really appreciate your support and feedback, as it helps us continue to improve and expand the game.

That’s a quick overview of how we implement CG scenes in WTS. I personally hope you enjoyed this behind-the-scenes look, and we can’t wait to share more updates with you in the future.

Stay naughty,
LoafyLemon.

Devblog #10 – Double digits!

Hello world, Johnny here with another devblog.

As per my last devblog, I’m currently in the midst of writing spoiler heavy content, so I’ll only lightly touch on the work.

I’ve completed the writing required for the upcoming Box-o-Fun event for Luna, and I’m currently incorporating some event checks to add some variety. For example, if the player has completed Hermione’s Box-o-Fun event. After this, I’ll proceed with the proofreading phase.

I’ve also started adding some of the non-event specific writing into the game, such as gift chats and additional chit-chats for Luna.

Between writing and implementing, I’ve also been planning out some content for future updates, along with summarizing the late-stage Luna events.

As shown in the latest teaser, we’ve added piercings for Luna’s wardrobe. I’m keen to hear your thoughts on items linked to expressions, as they require additional effort to incorporate into the game. We’ve also been discussing some other things internally, such as how weird it is that all characters have shaved pubes by default. We’re also looking to add a base outfit Schedule for Luna eventually, so if you’ve got any suggestions for clothing that fits her personality or have an opinion about pubic hair, then feel free to let us know.

Aside from the work, I’ve been fuelling my creative side by rewatching the earlier Futurama seasons. I’ve been thoroughly enjoying it because I’m a huge fan of humour that pokes fun at current events and parodies real life. However, when it comes to the game, I’ve made a deliberate choice to reference things that have stood the test of time. As we all know, meme culture evolves rapidly. For instance, I opted to abandon the idea of a public event for Cho where the twins had turned someone into a pickle.

Getting into game development has been a very rewarding and fulfilling experience for us, so if we can encourage others to express themselves creatively, then that’s a win in my book. Therefore, I’d like to end this post with a segment from our artist Boppin who has put together some tips for beginners who are looking to get into art.

Heya! It’s me, Boppin! If you’re a beginner who wants to learn digital art, here are some of the things I wished I knew before starting this art journey of mine.

Beginners often make the mistake of diving head first into digital art, ending up with buying fancy pen tablets, only to lose their passion within a week and with a huge hole in their wallets. It’s crucial to start this journey with small, deliberate steps and avoid rushing in. When I started on the project, I was using a 5-year-old laptop and a Huion Inspiroy h430p tablet, which was smaller than my hand but got the job done. Since I’m now working on art in a more professional manner, I’ve since then, thanks to Loafy, acquired what is most suitable and affordable. In other words, I opted against purchasing a tablet with a screen, as they’re currently highly overpriced and not essential for my needs.

The saying “It is essential to have good tools, but it is also essential that the tools should be used in the right way.” by Wallace D. Wattles is something that every beginner in digital art should keep in mind. Many frustrations can be avoided by learning the basics of the program that you’re using.

Once you get started, I would suggest not to pour too much time into one single piece. Novice artists often begin a drawing with good intentions but find themselves constantly trying to make adjustments, adding excessive details, and ultimately straying far from their initial sketch. Spending excessive time on a single piece can sometimes lead to growing dissatisfaction, causing you to tuck it away in the depths of your hard drive. My advice: Keep your goals simple, complete your work, and then move on to the next. Keep that creative momentum flowing!

Lastly, always finish what you start. It’s important to see a piece through to completion, even if it’s not perfect. It adds to your portfolio, reveals areas for improvement, and showcases your progress. Remember, you’re not infallible, and learning from mistakes is part of the journey. Don’t be afraid to share your work with the world.

That’s a wrap for this devblog. See you in the next one!

Devblog #9 – To degeneracy and beyond!

Greetings, everyone! Johnny here, with yet another devblog.

As I’m in the midst of working on Luna writing, I’d like to take a moment to share some ideas I’ve written down while going over Hermione’s content. Before I proceed, I want to provide a heads-up that this post may contain spoilers. My intention with this post is to gather valuable feedback from all of you and to create an opportunity for you to contribute your own ideas before I delve deeper into the planning and writing process. What I’ve written down so far, is in very much in its early stages and isn’t fully realised yet, so I anticipate it evolving and changing before the final product. With that clarification in place, let’s delve into the mind of a lunatic… I mean, adult visual novel writer.

I’ve been considering adding tier-up events for Hermione, similar to how we do it with Cho’s Quidditch matches, as a way to make the leap between tiers smoother. Below, you’ll find how Hermione’s attitude towards favours changes as you progress to higher tiers, along with some general ideas for the tier-up events.

Tier 4:

Hermione’s naughty side emerges quite a bit during this tier, but it takes sexual stimulation or prompts from Genie for her to display it. She’s somewhat embarrassed when putting herself on display, and she will now start touching Genie when requested (handjob), as long as she is paid well.

Potential 3-4 Tier-up events:

Hermione has given up on preventing other teachers from selling favours, realising that there’s no way to stop it. This would also explain why “flirt with teachers” is no longer an option for public requests. Some writing during tier up events would differ if the player has done public requests.

There is currently an optional ‘talk to me’ event on this tier with Tonks that mentions Hermione’s attitude changing. This event may serve better as a tier-up event, and there would instead be a more regular ‘talk to me’ event in its place.

Tier 5:

Hermione’s attitude has shifted drastically, as she agrees to perform fellatio without making a fuss. This shift in attitude is quite sudden, and her only explanation is that she’s happy to be able to help her house, and that putting a penis in her mouth is nothing as long as it helps her cause.

She has a greater appreciation towards everything sexual, and she sometimes forgets about points. With her attention on schoolwork tapering off a bit, Hermione’s drive to excel is instead shifting towards the sexual favours. For example, she will blame herself when she doesn’t manage to swallow all of Genie’s cum.

Additionally, she now allows you to use nicknames such as “whore” and “slut.” Her argument being that if it helps reach her goal during the favours, then it’s fine by her. Although she perceives it as nothing more than a sexual aid rather than how Genie actually views her.

Potential 4-5 Tier-up events:

As yet, there are no well-crafted notes, but since this tier has the biggest shift in her attitude, there needs to be a solid reason for it. Perhaps Genie and Snape would come up with a scheme that would lead Hermione to put more effort into it. Such as Hermione overhearing a conversation between them where Genie thinks about ending the trading between Hermione and him. If that’s not enough, Snape can say he’d be happy to take over the trading.

Tier 6:

She remains steadfast in her commitment to help Gryffindor win the cup, but her inner desires occasionally get the best of her, revealing her enjoyment. You’ll find it much easier to persuade her to engage in explicit conversations or to dress provocatively, and she might even do so without any prompting.

Potential 5-6 Tier-up events:

This tier shows a smaller change in attitude than the one before, as she will immediately agree to have sex. My first thought for the tier up events was to include something where Hermione gets pushed to her limit, with the goal of sex not feeling like such a daunting task. A deep-throat event would be fitting, especially since the one during the ball ending is both unprompted and sudden.

Other notes:

There are a few additional events that I haven’t had a chance to go over yet, and I thought I’d mention them briefly. The ball, for instance; features a sex scene, which can be reached before the sex favours. The writing for tutoring is quite different and doesn’t align with the rest of the game, especially the later events. I’ve left those events alone for a while now, as I’m unsure how players feel about them, so I would appreciate your feedback.

That concludes what I’ve written down about her progression so far. Please let me know what you think, and if you’ve got any ideas of your own, don’t be afraid to share them in the discussion channel on Discord.

Devblog #8 – Luna’s Brie-lliant Update

Hey there everyone, time for the latest developer blog update!

I’m really glad to hear that a lot of you enjoyed the recent big update featuring Cho. Your support truly means a lot to me. We faced some major challenges due to engine changes and internal redesigns, but despite the odds being against us, we managed to roll out the update successfully.

One of the really cool things I got to work on for this update, which sets our Ren’py game apart, is the interactive split view for CG images. This was showcased during the Cho retrospection events. Initially, we had plans to keep the scenes separate, but an idea sparked to incorporate both scenes into a single event to add an extra spiciness. Making it happen was a bit of a challenge; I had to dive into the engine and tap into some undocumented functions to make it work just the way we envisioned.

I must’ve gone through three or four iterations before finally stumbling upon the implementation that proved most effective for us, all the while maintaining good performance and features. If you glance at the code, it might not strike you as particularly elaborate, but devising the method of implementation posed its own challenge. You see, ordinarily textures come in standard rectangular sizes, yet we wanted for the displayables to be oddly shaped — think clouds or bubbles. This led us to the need for texture masking, and that’s where the AlphaMask feature stepped in. It was fairly straightforward, but that’s only a portion of the full story.

Next up was cracking the puzzle of exhibiting two images with a cutout, specifically for the bubble, and making them both interactive. The first idea was simple, just make a cutout, right. However, that entailed ensuring no vital elements occupied the bubble’s designated area, which would necessitate altering the artwork to accommodate. I wasn’t keen on that approach, so instead, I conjured up a zorder swap function for image tags, paired with a controller made within the screen scope. This renpythonic solution allowed us to maintain image prediction and rollback support, sans the need for extensive artwork modifications. In the end, it turned out fantastic in my opinion.

Reflecting on the update as a whole, am I satisfied with how it turned out? Yes and no. On one hand, I’m really pleased that we finally resolved the performance issues and tackled major problems like the flawed questing system and other issues. However, I can’t help but feel that we could have, or perhaps should have, added more new content. Maybe it’s just my own thoughts, though. Anyway, let’s keep moving forward.

With all of the above in the past, I can now dive into the meat of the game — the artwork. This time around, both Boppin and I are working on the drawings, while Johnny is pouring his efforts into the writing and scenarios. It’s a refreshing change, if I’m being honest. Don’t get me wrong, I absolutely love coding and consider myself primarily a coder. Still, it’s refreshing to switch things up from time to time and put my drawing skills to the test. I might not have natural talent, but I’m persistent. Over the past three years, I’ve taught myself how to draw, and finally, it’s starting to pay off. Having a grip on both programming and art is incredibly advantageous and it smoothens the process significantly. I understand the limits of layering, where to position elements in the scene, how they’ll interact with the code, and so on. It’s a unique perspective that I’m truly grateful for.

As you’re already aware, the current update in the making revolves around Luna. So, it’s safe to assume that both Boppin and I are busy creating various scenes centred around her character. We’re aiming to create more diverse and modular scenes, giving Johnny the freedom to fully explore his creative writing potential in the more risqué side of things.

Speaking of risqué things, if I spill any more beans about the upcoming scenes too soon, I might just tick off Johnny for letting his secrets slip. So, forgive me for holding back on the tantalizing titbits for now. What I can share with you is that the next update is diving head first into the story and steamy content, leaving the fluff behind. Expect heaps of fresh writing and art that might even make Johnny Sins blush a bit. 😊

Things are progressing smoothly, and we’re not foreseeing any bumps in the road ahead.

By the way, I hopped into Baldur’s Gate 3 shortly after its release. I’ve been eagerly awaiting that game for who knows how long, and I can confidently say it was absolutely worth the wait. If you’re a fan of both actual cheese and the kind that’s infused into writing, you’ll find yourself right in your element. The writing is incredibly diverse, and every character comes across as vibrant, each with their distinct personality and aspirations. The whole experience feels genuinely immersive. It’s been quite a while since a game has given me this much enjoyment, and chances are, Baldur’s Gate 3 might just clinch the title of my personal game of the year, or who knows, even the game of the decade. That all depends on how I feel about it once I’ve wrapped up my adventure in it.

Thanks for reading, and see you all soon!

Baldur's Gate 3 screenshot with a character polymorphed as a rolling block of cheese.

Devblog #7 – Diving into the Loony bin

Lads and gals,
Johnny here with another dev blog post.

As mentioned in the previous announcement, we’re currently working on the next update, which puts focus on Luna.
I’ve been knee-deep in my writing hole the past couple of weeks, and I would like to share something about two of the events that will be included in the update.

The first one is the “Talk to me” event chain for her upcoming favour tier. I’m excited to say that now when we’ve got a dedicated artist, this event will also include a CG to make the scene more exciting.

The second event is another addition to the box-o-fun, but this time, it’s for Luna. This event will put Luna’s ability to compose herself to the test, as she receives a task to complete outside the office.

Aside from the event writing, I’ve also been writing chit-chats, and outfit dialogues. I’ve been having a lot of fun writing for Luna, as her quirkiness always leads to interesting and unexpected paths. I went over some finished work with Loafy the other day, and he had a good time reading through it, so I feel pretty happy about the work I’m putting out at the moment.

Moving on to the recently released Cho-focused update. I tend to stay away from mentioning major spoilers in these posts during development, but I figured I may as well delve into spoiler territory now that the update is out, so spoilers ahead.

The Cho x Tonks CG was an idea that I had a long “ass” time ago, before we had a dedicated artist, and I was so happy that we could finally do it. Back then, there were quite a few places where we had to hold back a little bit in terms of art, so one of our current goals is to add CG’s in other places as well. If you’ve got a suggestion in this regard, feel free to post them on our Discord.

I’ve got to admit, holding on to the reveal during the event where you summon Cho at the end of her content was a real challenge. I had numerous elements I wanted to incorporate, and I found myself revising substantial portions of it at least four times. Such as Cho coming to terms with the favour trading being more than just the means to an end, the big reveal about the luck potion, and then also putting focus onto the sexy stuff. I mean, what is this? A porn game?

There were also plenty of technical aspects and ideas that had us wondering if we could actually make them happen, but I’m stoked that everything came together smoothly in the end. One idea that evolved a couple of times was the CG of Cho masturbating inside the changing room. Initially, it was meant to just cut between the two CG’s, but then the idea of displaying both at the same time inside a thought-bubble emerged. When I mentioned that it would be funny if Genie’s cum landed on Cho inside the other CG, Loafy came up with the idea of letting players switch between the two CGs by simply interacting with the bubble. Once I knew we were going to be able to show both CG’s at the same time, I started thinking about how the Cho inside her mind would react, in contrast to the “real world”. I figured I may as well take advantage of being able to see both at the same time, and have that version of her give a clue as to what Cho was really feeling.

I also added a lot more sound effects for the deepthroat scene than I normally would. In my previous experiences of incorporating sounds, I’ve noticed that longer sound effects don’t mesh well when paired with still images. I’ve also stayed away from sounds that would give the character a certain “voice profile” such as moaning, since I’d imagine that the player has a certain voice in their mind already. That said, I figured that gagging sounds would still fit within those constraints while also evoking the sense of panic I aimed for in the scene. I haven’t received much feedback about this yet, so I’m curious to know if you guys think it worked well for the scene.

That’s about as much as I can share about the development for now. In my personal life, I got sick for a week or so, right after the last update, so I wasn’t really able to play too many games. But, I was still able to replenish my creative juices in other ways. I tend to watch Youtube videos or Twitch streams a lot more than Movies or TV-series, though. I wonder if anyone else is like this, where they don’t feel like they want to dedicate their full focus and watch a film. Maybe I need to put videos of people cutting foam or subway surfer next to it…

See you next time!

Devblog #6 – Hot Stuff

Hello, Johnny here with another devblog.

Things have been hot here, with the summer heat and also due to the work I’m currently doing. This will be another shorter post, as we’re really busy, but I’ll do my best to make it worth your while.
Since my last devblog post, I’ve finished the improvements to Hermione’s writing and event checks. There are quite a few things I want to talk about in detail, including future ideas, but that will have to wait until my next post as it will be heavy in both words and spoilers.

For now, I’d like to tell you a few things that won’t reveal too much. I’ve added new randomized chit-chats, based on things like if Hermione is clothed or naked, or event statuses, as well as adding checks for existing chit-chats. In addition, I’ve added more writing variants, depending on the order you play certain favours on later tiers. For example, having her give you a blowjob before or after titjob. When you cum in different places for the first time, she will now also react properly.

I was delighted to see the response to the recent clothing teasers that we have released for Cho, and I’m excited to share that a couple of the less revealing ones will be included in her outfit schedule as well. So from now on, you’ll be seeing some variation, right after her introduction.

As of the time of writing, I am currently engaged in the process of posing Cho CGs. It’s going very well, and I’m happy with how they’re turning out. I’m not going into any more detail about the specifics here, of course, you’ll have to wait until it’s released, which should happen very soon. As long as you promise to eat your vegetables.

That’s it for the development portion of this week’s post, and I’ll end it by wishing you all a good day.

Since the steam sale is coming up, I thought I’d ask if you guys have any recommendations for games I should play once we’ve released the upcoming update. I mostly play story-based indie games, but I am looking for some more classic 2D top-down or side-scrolling RPG’s. I very much enjoyed Wandersong and Crosscode for example, but I don’t mind turn-based as long as it has a good story and some twist when it comes to mechanics.

I hope to finally pick up Hogwarts Legacy if it goes on sale, but I’m also looking for games where you can jump in and play for an hour or so, since I’m often too busy with work to dive into more attentive games.

Devblog #5 – Edging Towards the Release Horizon

Hiya,

Guess what time of the month it is? Nope, not that time! It’s time for another devblog, woohoo! Hope my last entry didn’t put you into a coma. Don’t worry, this one will be short and sweet, I promise.

So, as you already know, we’ve rolled out a pre-release update for you cool beans to help us squash those pesky bugs, while we continue adding all the juicy stuff we planned for this update. Gotta say, I was expecting a ton more issues to be reported. Either our hard work paid off, or you lot are just being sneaky and not telling us everything. Time will tell, I suppose. 😅

Speaking of adding content, the recently teased Cho CG has been implemented, and I’m currently putting the finishing touches on yet another Cho CG that has not been teased yet. It’s been a nice change of pace from dealing with all the technical stuff and fixing bugs. We might post another preview, or two, before the final release to make the wait time more bearable.

Now, I know what you’re thinking. “When the heck are they gonna release this update?!” Trust me, I’m wondering the same thing! 😄 But hey, no worries. I just need to implement two more scenes and tackle a couple of bugs, and then we can start wrapping things up. It should be much quicker since all the back-end changes are already finished. And guess what? Johnny has gone bonkers with Hermione content again. There’ll be loads of new stuff to explore throughout the entire game. Cool, right?

While Johnny and I are knee-deep in the current shenanigans, Boppin is already cracking on with the next update. Talk about being ahead of the game! By the time we wrap up this one, we’ll have a treasure trove of artwork to dive into. All you Luna fans out there better get ready to party, ’cause there’s gonna be some serious Luna love coming your way.

And there you have it, folks! We’ve reached the end of this week’s devblog. Nice and snappy, just like I promised. See, I can totally deliver on my word!

Until next time, stay awesome!

Devblog #4 – Am I testing the game, or is the game testing me?

Sup y’all, it’s me, it’s your boy Asmon– I mean, Johnny here with another devblog.

Things have been busy for us as we’ve just put out a couple of pre-releases of the upcoming version of Witch Trainer Silver. As of me writing this post, we’re working hard on ironing out any remaining issues you guys have found, doing QA, and adding the remainder of the content for the full release. If you’re one of the people who have been reporting bugs or feedback, thank you very much.

Since my last devblog post, I’ve been busy, adding new clothing for Cho, proofreading, writing, and reposing some events which used deprecated code.

In terms of clothing, I’m currently implementing items for Cho default clothing schedule, much like we’ve done for Hermione. We went for a more casual “Muggle” style look, and we’re pleased with the results, and hope you think the same. Some lewder pieces are, of course, being added as well.

I’ve also taken the time to run the entire game through a tool that we use called “LanguageTool”. I highly recommend using it if you’re a writer, as I’ve been using it for the past year or so. I probably spent over 24 hours at least, manually going each file, and although it’s been a mind-numbing task, the results have made it worth the effort.

Furthermore, I’ve also been going through one of Hermione’s shaming events and improving it. You know, the one where Hermione has to wear a sticky substance all day… And I’d like to move it into the “Public requests” menu for tier 5 and 6. That way, the player won’t easily miss the lower level variants. I’m uncertain if it will make it into the next release since Cho content is priority, but at least it’s coming in the future. If you read my last devblog, I also mentioned going through and touching up her other event dialogue. I’m taking my time, but as of writing this post, I’ve finished Tier 1-4, and also some side events such as the forest scene.

That’s about it when it comes to work. So, now it’s time for me to be self-indulgent and ramble for a bit. Sorry in advance.

Since Quidditch has been on my mind recently. I was, again, thinking about how silly of a sport it really is. Specifically, how the main part of the game barely even matters in the end, since catching the snitch is worth so many points. I mean, how fun is that for the audience? It would be like a game of football, but there are two players in the middle of the field that you can barely see, playing chess. You’re also allowed to use different brooms, so it’s all just pay to win! It’d be as if, in the real world, you were allowed to use different types of cars in a race!

That said, I still think Quidditch is quite fun, and a three-dimensional sport is certainly unique. For us, it certainly provided some pretty unique angles.

Anyway, time for me to jump back into the game-dev realm. I hope you think twice before letting me out next, as I’ll surely just end up going on another rant. Also, thanks again to those who have helped with testing this week.

Speak to you all soon.

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!