Ren'Py Abandoned Princess Tower [v0.12.public.3] [Euphemismus]

4.60 star(s) 48 Votes

Euphemismus

Newbie
Game Developer
Sep 9, 2020
80
452
Actually, a lot of my argument against Python stems from personal preferences, rather than objective performance stats or the like. I dislike dynamic typing, I dislike the fact that I'm using dicts with raw strings instead of enums, I dislike how revealing the effects of many bugs is pushed from compile time into runtime, I dislike how I can never really be sure how something works once I've written it (and I dislike the multitude of "self."-s as much as I dislike Java-without-Lombok's endless boilerplate code). So yeah, while one can argue that Python has objective problems when it comes to game design, my own issues mostly come down to preference.

On the other hand, I'm genuinely having tremendous fun developing the game and a lot of these issues are mitigated by renpy's absurdly helpful hotswapping feature.

Oh and Python has functions as first-class citizens, which is probably my favourite language feature ever.

(And thanks for the feedback/compliments, I'm glad to hear that the writing is something that sticks out for at least some players!)
 

waffel

Member
Donor
Aug 29, 2017
464
548
Actually, a lot of my argument against Python stems from personal preferences, rather than objective performance stats or the like. I dislike dynamic typing, I dislike the fact that I'm using dicts with raw strings instead of enums, I dislike how revealing the effects of many bugs is pushed from compile time into runtime, I dislike how I can never really be sure how something works once I've written it (and I dislike the multitude of "self."-s as much as I dislike Java-without-Lombok's endless boilerplate code). So yeah, while one can argue that Python has objective problems when it comes to game design, my own issues mostly come down to preference.

On the other hand, I'm genuinely having tremendous fun developing the game and a lot of these issues are mitigated by renpy's absurdly helpful hotswapping feature.

Oh and Python has functions as first-class citizens, which is probably my favourite language feature ever.

(And thanks for the feedback/compliments, I'm glad to hear that the writing is something that sticks out for at least some players!)
The absence of a pre-compiler and a good testing environment for test-driven development is not a personal preference problem, it's an actual problem :) Pre-compilers are a fantastic invention! :D Imagine being able to fully test the integrity of every function, and none of that bloat will reach the actual program getting shipped! :love:
 
Nov 24, 2019
283
260
You actually can compile python scripts into .pyc file, and ship the pyc files with Ren'Py.

Not only that, but Ren'Py will compile itself in .rpyc files as well.

...Don't expect too much from the python compilers, though. There's a reason why only libraries are compiled by default. (And imho it is always a bad idea to compile things for your users)

There is also Ren'Py Lint program, which will seek for errors and common mistakes and some other stuff, but it was designed for testing a visual novel, so it might not be so useful in handling pure Python.

Ren'Py SDK interface should also allow you to browse functions and TODOs and labels; Again, it is nothing exceptional, but always good to know what you can and cannot do.

Keep in mind that you can use Shift+O to open the Ren'Py console, and inject Python code while the game is running. I used this a lot in the past to find the perfect values for things like speed adjustment etc. - Barring that, Ren'Py also has a hot-reload feature. (Shift+R)

Each language has their own advantages and their own drawbacks. While compiled code is much more efficient, it is also much less portable, because every computer - welp, even every operating system is different from each other in ways which are not always easily compatible.
 

agregen

Member
Oct 28, 2019
162
103
What I mean is games are ought to be programmed procedurally in a data oriented programming manner, so you are able to optimize for the CPU cache flow when you need to do so. Python is locked very tightly to OOP which greatly reduces the amount performance you are able to squish out of it, because it's polluting not only the data cache, but also the instruction cache. A game like Lab Rats 2 is a shining example of this, there's nothing in that game that couldn't be handled by one CPU core with a maximum frame latency of 20ms, but he's throwing cores at the problem and we still see frame latencies well above 300ms, often several seconds which are equivalent to eons in CPU time. The reason is that he is not allowed to program in a way that minimizes cache misses, and that is very important in game programming. It's irrelevant for VNs, but very important for real actual games. C# has the option to program this way, but just makes it very tedious for you to do so, python not so much. Dynamic languages doesn't make it easier to program games, they just make it a lot harder to squish out the performance you need when you need it.
…You are aware that you're not supposed to use low-level intensive computation in a high-level code, right? In case of games, the low-level computation is to be left to the engine (implemented in C or something similarly “close to hardware”), while the game scripting is normally left to high-level languages where maximum performance isn't a requirement. If your script is a performance hit for the game, it's very likely a sign you're doing something wrong.
Same for non-game software, BTW: if you need low-level performance optimizations, those parts are implemented in a low-level language and used as a dynamic library (DLL/SO file) in the main program via FFI and/or DSL in a way that retains the performance advantage (example: batch computation via NumPy).
 
Last edited:

waffel

Member
Donor
Aug 29, 2017
464
548
…You are aware that you're not supposed to use low-level intensive computation in a high-level code, right? In case of games, the low-level computation is to be left to the engine (implemented in C or something similarly “close to hardware”), while the game scripting is normally left to high-level languages where maximum performance isn't a requirement. If your script is a performance hit for the game, it's very likely a sign you're doing something wrong.
Same for non-game software, BTW: if you need low-level performance optimizations, those parts are implemented in a low-level language and used as a dynamic library (DLL/SO file) in the main program via FFI and/or DSL in a way that retains the performance advantage (example: batch computation via NumPy).
We are not necessarily talking about low-level optimizations, optimization and cache friendliness are two different terms. It is the ability to program in cache friendly manner that you lose in python. You are still able to do so in both C# and Java even though they make it harder and more tedious for you to do. Cache friendliness is often more than enough, before we talk about low-level optimizations, because of how OP our CPU's are. The problem is that it doesn't matter how OP the CPU is if it is de-facto idle 40-70% of all its cycles, because it is waiting for data or instructions to process, and that is what I'm talking about, and that is a problem that specifically python possesses. That happens because it is very tightly knit together with OOP and have no way of defining traditional not linked list based arrays. So you are essentially putting the pre-fetcher out of action, and the advances done on the pre-fetcher ranks high on the reasons why modern CPU's are so unfathomably fast!

Remember we are talking games, not VNs.

Another problem I think we share is that we are located in different paradigms, and therefore our discussion here is rather incommensurable :)

Especially since you say, why not write a library for the crunchy stuff, and all I can think of is, if you can do that, then why bother with all the drawbacks of python in game development in the first place :p
 
Last edited:

asdffdsa1

Newbie
Dec 1, 2018
30
20
Man, this somehow turned into a programming thread lol.
But I'm not complaining, just more of my favorite things in one place. Ragging on python and chastity.
I have to say I love this game so far. Chastity has been a niche fetish of mine and there just isn't enough of it out there. You managed to get it just right. Never have I downloaded a game so fast.
Loving the art as well. Keep up the good work.
 
  • Like
Reactions: waffel

Euphemismus

Newbie
Game Developer
Sep 9, 2020
80
452
Yeeeeah, this turned into just about the kind of programming discussion I was expecting. I've long since given up on trying to compare languages or systems on an objective basis because such comparisons require an infinitely knowledgeable programmer, which I'm not. So I just keep my own preferences and work with those.

Man, this somehow turned into a programming thread lol.
But I'm not complaining, just more of my favorite things in one place. Ragging on python and chastity.
I have to say I love this game so far. Chastity has been a niche fetish of mine and there just isn't enough of it out there. You managed to get it just right. Never have I downloaded a game so fast.
Loving the art as well. Keep up the good work.
Thanks!

Y'know, ironically, when I was writing some of the first drafts a long time ago, I wanted to get at least some nsfw-level content on screen as fast as possible and... I threw the whole chastity thing in there just so there would be a reason to see Ari's panties right at the start and I ended up running with it.

Can't say I dislike the way it all turned out, though. There's probably going to be an option to have a chastity theme/route going all the way to the end of the game.
 

waffel

Member
Donor
Aug 29, 2017
464
548
One thing though, mr. Euphemismus I must say is, that as I have spendt more time enjoying your artistic expression, I have noticed that our little princess has such nice eyes, they are utterly adorable! Makes me smile everytime I look her way :)
 
  • Red Heart
Reactions: Euphemismus

Euphemismus

Newbie
Game Developer
Sep 9, 2020
80
452
ari_crying.jpg

EDIT: You know, much later I realize I should have mentioned that this is not a delay, I'm just skipping a release, as if I were going from v.0.3 to v.0.5.

Bad news - .

I guess I'm succeeding in making the game I want, but I kind of underestimated how difficult it is to divide the development of that game into neat chunks.
 
Last edited:
Nov 24, 2019
283
260
Not terribly important, but remember you actually can use Threads in Ren'Py. (And they should work in Android as well, iirc).

Threading allows you to have code running in background without actually polluting the main thread (the game itself). How useful it is, depends on a lot of things. Ren'Py runs some threads on its own, after all.

Anyway, it is poorly documented and not very widely used, but as it is just an alias to something Ren'Py already do naturally, it works:


Keep in mind that usually a thread (incl. the main thread) can only use one core of the CPU, so more threads = better speed at high-spec machines (or, specially if you misuse them, more likely to use all CPU power the user has and freezing their OS. Ooops!)

PS. Consider using renpy.free_memory() (from the same doc page) before and after your minigames. It is specially helpful to avoid swapping. (The doc page has even functions to limit FPS, which is particularly useful if you do not have a GPU and find too much CPU being wasted on displays; But not sure if your minigames would honor that...)
 
  • Like
Reactions: cuckoo4cocoapuffs

Euphemismus

Newbie
Game Developer
Sep 9, 2020
80
452
ari_smile.jpg
Good news everyone!
Version 0.4 is out!


Downloads at: and Mega ( / )

It's out! (after a week of delay)
Two paths, some content for both, lots of improvements and a bunch of new systems.
I'm really happy with this all of the stuff in this release, I'm just worried its going to be more buggy than the previously fairly bug-free releases.

I hope you enjoy!

Changelog:

v.0.4:
Important:
- a lot of previously read text in the game has become "unread" for Renpy's skipping system because I did a bit of a fuckie-wuckie
- in an h-scene, rubbing an area which has been spanked red causes a visual glitch. This is a known issue (and surprisingly resilient).
- the art in the game got a CC BY-SA license slapped on it! You can use the art in your own projects!

Content:
- Wordcount increased from 5740 (revised number) to 11,819!
- New branching quest - "a gentle touch"
- Lots of scenes now have variations depending on Ari's temperament!
- New tool available in spank scene - grab/rub
- A few new character expression images
- Added exciting new bugs!
- Intro can now be skipped (the intro ends just about where the last version ended)

Bugfixes:
- meddling with Renpy transitions (they're tricksy)
- fixed missing intro straightedge image
- fixed a bug where the shadow cast by Ari's hair onto her forehead was not visible

Internal:
- Some preparation for cross-version compatibility
- Rebuilt Ari's layeredimage system (I rate renpy-s layeredimage system at a hearty 4 out of 10 "oof"-s)
 

ssj782

Engaged Member
Apr 19, 2019
3,403
5,108
So what kind of content are we looking at so far? A spanking and from the sound of it a rub/grab of her butt afterwards?
 

hanahsolo

Member
Dec 21, 2018
370
209
Started new game with intro: first there is moment where princess doesn't have face and then at first choise both gives errors.
 

tg

Member
May 1, 2017
232
279
I like that this game is so focused on spanking. We honestly don't have enough spanking-focused games on here...

I like the pacing of the story too. I played the intro, and it was good to read. I'm not sure I'd play through it again, but it was entertaining enough to bring people up to speed.

I like the art. It's a bit amateurish, but pretty as well. So, I like it. I like that you can lift her skirt. I like she can lift her skirt. I like that she sometimes appears in her PJs.

And yeah, I have used like a bit too much here. From what I've seen, I think you're a pretty good writer, and I like the topics you're bringing up with her. I like how you introduced her into calling you sir. That was pretty lovely. And, I like how she's gotten into that habit of calling you that in subsequent talks.

So, who do you imagine holds the key to her chastity belt? Or will that be a kind of quest for the player to do once that stage is reached?

Oh, and can we have the option to order her to shave herself smooth? Like, it'd be OK to give players for hairy, trimmed, or smooth, but I really like the idea of girls having to maintain themselves on an ongoing basis. I guess that's something for later consideration. Anyway, I'll be keeping an eye on this one. I think it's great.
 

T51bwinterized

Well-Known Member
Game Developer
Oct 17, 2017
1,456
3,479
Euphemismus Correct me if my read on it is wrong, but it seems like the affection variant is going for something closer to a romantic Daddy/Princess type dynamic, while the obedience route is going towards harder domination. Accurate?
 

1zaza1

Member
Oct 22, 2017
116
124
A great little update.

Euphemismus Correct me if my read on it is wrong, but it seems like the affection variant is going for something closer to a romantic Daddy/Princess type dynamic, while the obedience route is going towards harder domination. Accurate?
I would love a daddy route rather than a standard love/lust route.

I notice that in the Edict, the Infernal Emperor Bob refers to himself as the Divine Emperor. Bit of a branding issue for him?
 
  • Red Heart
Reactions: Euphemismus
4.60 star(s) 48 Votes