Musings and engine suggestions

SylvesterTemple

New Member
Sep 8, 2018
10
31
I'm toying with writing a game (there we go - nice and easy to put it like that!) and I have an idea that I want to explore with it (no details yet), but right now I'm after some advice as to the engine I use.

The idea is for an open world type dating and business management game, with VN elements (did I tick all the boxes there? I dunno). Fundamentally I'm looking to do something like the archaic Slave Maker game, but changed and brought up to date, however I want it to also have a large random element as well. By way of example, the "prologue and character generation" follows the following steps:

1) Start new game.
2) Enter name for character.
3) Game gives two starting options out of a possible five (or more, depending on what I write)
4) Player selects starting points from out of the two options.

Everything through the game is going to be presented as a random 2 or 3 choices out of a pool of N possibilities - so I'm going to be doing a lot of messing around with random numbers and variables for everything under the sun. Locations would be randomized once at the start and assigned, characters will have randomized stats, and so on. It also means that a number of the characters will have semi-randomized stories, and so on.

At the moment I think I'll be working in Ren'Py, just as a comfort thing - but really not too sure yet, and open to suggestions as to a different engine (based on ease of use and learning, 'cus I'm not the sharpest spoon in the drawer).....

Of course, if anyone knows of a framework, that would also help as well, 'cus I can't really program too well - even my "Hello World"s tend to crash! Thanks all!
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,963
16,199
At the moment I think I'll be working in Ren'Py, just as a comfort thing - but really not too sure yet, and open to suggestions as to a different engine (based on ease of use and learning, 'cus I'm not the sharpest spoon in the drawer).....
Because of the last part, I would advice to stick with Ren'py.
Your project will be complicated enough like that with all those randomization, without the need to over complicate the code you'll have to make.

As information, because it fit your needs, the reason why I say that is because of the "dynamic capabilities" of Ren'py. With most of the other engines, to achieve what you want you would have to take count of the randomized values, while Ren'py offer the possibility to take care of them for you.
It need a little more works at start, but less than with other engines, and if it works for one of the possible randomized value, then most of the time it will works with any other values, what speed-up the testing time.


By example:

You've to display a different background depending of the randomized location ?
Code:
default location = [The randomized value]

label whatever:
    scene expression "images/background/{}/morning.jpg".format( location )
The skin color, or anything else, of a character is randomized ?
Code:
default location = [The randomized value]
default char1Skin = [The randomized value]

label whatever:
   scene expression "images/background/{}/morning.jpg".format( location )

   show expression "images/character/{}/idle_standing.jpg".format( char1Skin )
   char1  "Good morning [mc]."
   mc "Good morning cutie pie."
   show expression "images/character/{}/blush.jpg".format( char1Skin )
The story of a character is randomized ?
Code:
default location = [The randomized value]
default char1Skin = [The randomized value]
default char1Story = [The randomized value]

label whatever:
   scene expression "images/background/{}/morning.jpg".format( location )

   show expression "images/character/{}/idle_standing.jpg".format( char1Skin )
   char1  "Good morning [mc]."
   mc "Good morning cutie pie."
   show expression "images/character/{}/blush.jpg".format( char1Skin )

   mc "Tell me more about you."
   jump expression "char1Story_{}".format( char1Story )
And so on, this is just a small range of the possibilities.
There's also text interpolation in images, image name = "images/character/[char1Skin]/idle_standing.jpg". It can easily replace the expression syntax, but need that you declare all the image before the game start. And there's the layered images that would also do a lot for the randomized characters.

In the end, and unlike most of the other engines, with Ren'py the whole structure of your game will be exactly the same that it would be if there where no randomization. As I said, it's Ren'py that will deal with this part for you, as long as you tell it where and how to do so ; what I said in the examples above.
 

SylvesterTemple

New Member
Sep 8, 2018
10
31
Thanks for that suggestion - the reason I was looking at Ren'Py was because I could build everything in separate plain text files, and I know I can find a lot of help going down that route. Current plan is to try and figure out a framework to use before jumping headfirst into writing..... This is just a personal project, and one that would/might never see anywhere outside my PC, but I might (if it turns out to work the way I want) look at other people getting chance to download it.....
 

AmusingOddity

Member
Game Developer
May 11, 2021
352
899
One thing I would add is that a game with that many systems or a first timer could really fuck you. When I first started making a bigger game I made a bunch of mistakes I didn't even recognize as mistakes until after I made a few smaller games as practice.


If I tried to continue with the big game without making the practice games it would have turned into a shit show as I got deeper into it. (still might lol).

If your game would allow for it I'd highly recommend making a prologue or something to iron out the kinks in your systems before you commit to something on this kind of scale. The last thing anyone wants is for you to sink 6 months into building a game only to realize that something you did in week 2 means that in order to continue you have to rebuild the whole thing.

Good luck with it. It sounds like it could be good.
 

SylvesterTemple

New Member
Sep 8, 2018
10
31
If your game would allow for it I'd highly recommend making a prologue or something to iron out the kinks in your systems before you commit to something on this kind of scale. The last thing anyone wants is for you to sink 6 months into building a game only to realize that something you did in week 2 means that in order to continue you have to rebuild the whole thing.

I've messed around with simple linear/semi-linear VNs in VNMaker, Tyrano and also Ren'Py, so not exactly entering this blind; I'll also be pseudocoding the framework over the next week before I go near notepad just to see if the idea works in my head. At the moment I'm having issues pseudocoding parts of it, but that just needs either a clear head and the right tunes to get my brain in the right place for it, or a lot of..... smokable substances lol

I will also be doing a prologue for the "character creation" part of it - it's going to feature a number of aspects that the main game will have, just turned down a bit. Rendering images; I've set some rules for that so I can do that, and after a number of years of dealing with complex projects, things like standardized naming conventions of assets and variables is almost second nature. The main story.... that's a bit trickier - the reason for wanting to do a game which is more "smaller story events over an open world" is I can get away with wrtiting shorter segments instead of having to write 50k+ of stuff. I've also got my other half to assist as well.

The bit I'm currently trying to figure out is a simple "wrapper" for the time and date - I know I'll end up having a single central "function" within the game which is called on a turn by turn basis, which will set things like variable checks, adjustments, and then possibly displaying parts of that on the screen and how I relate that to everything else.
 

SylvesterTemple

New Member
Sep 8, 2018
10
31
Just as an addendum - the one thing I always stuggle with is variables. It's stupid - rationally I know what variables I create,I know roughly what they are for and what their values are..... .....but I always end up programming a function where I can press a button and see exactly what variables are set and what their values are... .... and at times, rather than read the variable from memory, I'll read the value in the text box that tells me the value of variable. It's irrational, it's stupid, but it's the way my head works and I hate it. It's why I have to pseudocode so much, so I can check to see if it's rational at least!
 

AmusingOddity

Member
Game Developer
May 11, 2021
352
899
Just as an addendum - the one thing I always stuggle with is variables. It's stupid - rationally I know what variables I create,I know roughly what they are for and what their values are..... .....but I always end up programming a function where I can press a button and see exactly what variables are set and what their values are... .... and at times, rather than read the variable from memory, I'll read the value in the text box that tells me the value of variable. It's irrational, it's stupid, but it's the way my head works and I hate it. It's why I have to pseudocode so much, so I can check to see if it's rational at least!
I do a similar thing. I have a passage where i copy in any new variable i add. Then i place a link to it in the side bar so i can easily click into it and check every variable in the game.

If it works for you thats all that really matters.
 

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,963
16,199
I do a similar thing. I have a passage where i copy in any new variable i add. Then i place a link to it in the side bar so i can easily click into it and check every variable in the game.
It's limited in volume, but why don't you simply use what Ren'py provide, the watch and unwatch console commands ?
Just go on the console, and type help. It will give you the syntax, and also present you the other commands.