SweetSpace - Ren'Py VN that can be stripped for parts

A while ago, I started work on an English language adaptation of A Piece of Cake to rebuild the game, back & front. I lost motivation after a bit, and then the game was (understandably) de-listed from this forum, so that kinda killed that idea.

But one of the things I liked doing with that was building features and sharing code, so that others could either learn from it or straight up build their own game. And so, I spent a while coming up with my own idea and decided to do something slightly different, which Iā€™m calling SweetSpace.

Itā€™s the story of Taylor, a citizen of Earth that signs up to be an indentured servant on a long-haul mission to deliver foodstuffs, specifically candy, to a human colony 14 light-years away on Hokum 183b. Obviously, the goofy cyberpunk vibe dictates that the company responsible, the Cotton Candy Corporation, is the worst and very much up to no good, so itā€™s up to the player to repair the ship, rescue the crew, and meet some new friends along the way. (Think The Outer Worlds meets Willy Wonka meets any Renā€™Py VN about romance & weight gain.)

The story is purposely weird and nonsensical, because I want to incorporate as many of the typical things a player would expect in this type of game, like buying & outgrowing clothes or working in & eating at a fast food place. That way, even if I totally fail, someone else can use my code as a head-start for their game. For example, if you need to refer to a characterā€™s class and inject what their belly looks like in the text box:

    bodyPartSizes = [
        0, 100, 300, 500, 700, 1000, 1300, 1600, 2000, 2400, 2900, 3400, 3900, 4500, 5200, 6000, 7000, 8000
    ]

    bellySizes = {
        '1'  : {'size' : 'XS',  'min' : bodyPartSizes[0],    'det': 'a',  'adj': 'concave', 'noun': 'stomach'},
        '2'  : {'size' : 'S',   'min' : bodyPartSizes[1],    'det': 'a',  'adj': 'flat', 'noun': 'stomach'},
        '3'  : {'size' : 'S-M', 'min' : bodyPartSizes[2],    'det': 'a',  'adj': 'small', 'noun': 'stomach'},
        '4'  : {'size' : 'M',   'min' : bodyPartSizes[3],    'det': 'a',  'adj': 'tiny', 'noun': 'tummy'},
        '5'  : {'size' : 'M+',  'min' : bodyPartSizes[4],    'det': 'a',  'adj': 'squishy', 'noun': 'tummy'},
        '6'  : {'size' : 'L',   'min' : bodyPartSizes[5],    'det': 'a',  'adj': 'doughy', 'noun': 'belly'},
        '7'  : {'size' : 'L+',  'min' : bodyPartSizes[6],    'det': 'a',  'adj': 'bulging', 'noun': 'belly'},
        '8'  : {'size' : 'XL',  'min' : bodyPartSizes[7],    'det': 'a',  'adj': 'round and rotund', 'noun': 'belly'},
        '9'  : {'size' : 'XXL', 'min' : bodyPartSizes[8],    'det': 'a',  'adj': 'well-padded', 'noun': 'paunch'},
        '10' : {'size' : '3X',  'min' : bodyPartSizes[9],    'det': 'a',  'adj': 'protuding', 'noun': 'paunch'},
        '11' : {'size' : '4X',  'min' : bodyPartSizes[10],   'det': 'a',  'adj': 'portly', 'noun': 'paunch'},
        '12' : {'size' : '5X',  'min' : bodyPartSizes[11],   'det': 'a',  'adj': 'globular', 'noun': 'gut'},                    
        '13' : {'size' : '6X',  'min' : bodyPartSizes[12],   'det': 'a',  'adj': 'vast and expansive', 'noun': 'gut'},
        '14' : {'size' : '7X',  'min' : bodyPartSizes[13],   'det': 'a',  'adj': 'gluttonous and gigantic', 'noun': 'gut'},
        '15' : {'size' : '8X',  'min' : bodyPartSizes[14],   'det': 'a',  'adj': 'prodigious', 'noun': 'double-belly'},
        '16' : {'size' : '9X',  'min' : bodyPartSizes[15],   'det': 'a',  'adj': 'mountainous', 'noun': 'distended double-belly'},
        '17' : {'size' : 'XX',  'min' : bodyPartSizes[16],   'det': 'an', 'adj': 'enormous', 'noun': 'double-rolled belly apron drooping to her knees'},
        '18' : {'size' : 'ERR', 'min' : bodyPartSizes[17],   'det': 'a',  'adj': 'tremendous', 'noun': 'triple-rolled tummy sagging to her ankles'}  
    }

At the moment, Iā€™m either finishing or working on:

  • Basic stuff like tracking and earning money, a calendar, ā€œtownā€ population and stats, and world flags
  • Player attributes for body part sizing, stomach fullness and size, fame, health, energy, and a stats system (CAKES - Charm, Alertness, Keen, Endurance, Smarts) to be able to set certain events and dialogue options based on player choices (and show how to do that)
  • Classes for characters to keep track of weight/metabolism/activity/affinity/related flags, romanceable characters with their own stats and a love/hate system with heart plus or minus pop-ups for the player
  • A food system where the player digests and adds to their weight upon any rest period
  • Clothing with a size and stretch attribute, so characters will outgrow their clothing as they gain weight
  • Player inventory with GUI
  • Store with GUI, plus clothing store with GUI to set sizing and color
  • Simple ship map with different locations across 4 decks, locked behind player choice
  • Random event call during ā€œtravelā€ to allow for meeting new characters, romance events, etc.
  • Standalone files for each romance option, so that someone can copy it and edit it to make a new character with little to no coding knowledge

And yeah, I think thatā€™s it for now, and I hope it works out, but Iā€™ll be posting a build as soon as I can and including commented code to show others how to do the same thing.

36 Likes

Sounds great canā€™t wait for it .

1 Like

Iā€™ve grown a bit tired of seeing that certain reaction image all the time, so have this garbage I just threw together instead.

12 Likes

Say the line phoenixfelix
image

4 Likes

This seems really interesting! Iā€™m looking forward to playing this, and I really appreciate anyone donating bits of code to help others get started - as someone trying to start from scratch on projects, itā€™s brutal if youā€™re teaching yourself AND working without a base.

1 Like

I like the background art of the woman! Whereā€™d you find it?

There are so many artists and writers that could be making stuff in Renā€™Py, because of how simple it is ā€¦but only once you get going and know what does what. And thatā€™s why Iā€™m equally interested in creating code to share and making a playable game.

e.g. One of the things Iā€™ve noticed a lot with Renā€™Py games is that people new to coding will make hundreds of variables that may or may not make sense when used in context, like keeping track of a player choice by making a boolean variable ā€˜activeā€™ == True. And sure, that works, but itā€™s a pain in the ass once you make a whole game that way.

Or letā€™s say you want to keep track of a characterā€™s weight - you set amyWeight = 130, add or subtract fractions of a pound whenever the character eats, and you can round down when you display it on screen to show it as an integer. But then letā€™s say you want to compare weight at the start of a day to the end of the day. Or temporarily increase their weight. Or keep track of multiple characterā€™s weights. Or display it in kg. Thatā€™s a lot of problems all at once for someone who just wants to write a story about the character that got fat that one time.

this is an incomplete code snippet:

    class Romance:
        def __init__(self, name, weight, height, clothingSize, outfit, rank):
            self.name = name
            self.cal = {'origin': weight * 3500, 'base': weight * 3500, 'current': weight * 3500} # Converts lbs to kcals for the init
            self.kg = {'origin': weight * 0.45359237, 'base': weight * 0.45359237, 'current': weight * 0.45359237} # Converts lbs to kg for the init
            self.weight = {'origin': weight, 'base': weight, 'current': weight}
            self.height = {'origin': height, 'base': height, 'current': height}
            self.cm = {'origin': height * 2.54, 'base': height * 2.54, 'current': height * 2.54} # Converts inches to cm for the init
            BMIcalc = float(weight * 703)/float(height*height) # This is the calculation for BMI from pounds and inches for the init
            self.BMI = {'origin': float(BMIcalc), 'base': float(BMIcalc), 'current': float(BMIcalc)}

            self.flags = {}
            self.data = {}

            self.affinity = 0 # -1000 to 1100
            self.love = 0 # 0 to 110
            self.lust = 0  # 0 to 110
           
            self.health = 8 # 0 - 12
            self.mood = 3 ## 0 - 6, 0: Depressed, 1: Upset, 2: Tense, 3: Fine, 4: Calm, 5: Relaxed, 6: Contented
            self.stomach = {'origin': 0, 'base': 0, 'current': 0}
            self.stomachMax = {'origin': 2000, 'base': 2000, 'current': 2000}
            self.metabolism = {'origin': 0, 'base': 0, 'current': 0} # 0 - 8
            self.activity = {'origin': 0, 'base': 0, 'current': 0} # 0 - 8
            self.gluttony = {'origin': 0, 'base': 0, 'current': 0} # 0 - 8
            self.greed = {'origin': 0, 'base': 0, 'current': 0} # 0 - 8

Or you could just use someone elseā€™s pre-existing class that solves all of those problems and change/delete anything you donā€™t need. And as I build stuff out, like the GUI or player inventory, that can be lifted completely and used elsewhere instead of having to roll a whole new thing from scratch, or at the very least heavily copied from, as Iā€™m adding comments and documentation as much as I can. (Or other developers/creators here can just message me.)

It seemed dumb to me that there was a whole thread dedicated to how people are tired of RPG Maker games, and yet, itā€™s not like everyone can easily pick up other options and make a game in a weekend.

EDIT: Iā€™m not trying to say that my solutions are the best or that my code is great - thereā€™s going to be tons of stuff that Iā€™m doing ā€œwrongā€ or weird, because Iā€™m either slapping something together quickly or trying to make it easier for a newcomer to read. But for the sake of saying it, weā€™re already doing weird shit in Renā€™Py games by lifting features and code from existing games, like the use of a variable to keep track of stomach size and then another for hunger. (Something that seems to be done in EVERY weight gain Renā€™Py game.) Why not define a stomach as two variables able to store X number of calories until Y max size, and if the player or character is not eating, have them get hungry or start to starve at a certain point based on a lack of eating? Why have the player manage both the arbitrary hunger stat and also stomach contents/size? ĀÆ_(惄)_/ĀÆ

Edited stock photos from Unsplash.

If this turns into anything bigger than me messing around, Iā€™ll try to hire an actual artist, because I am terrible at anything visually complex.

3 Likes

very interested in this OP, keep up the good work!

1 Like

With pleasure, and with a touched-up image courtesy of SlothBear.
goop

8 Likes

thanks for the spaghetti dump, I definetly plan on stealing some of this and tweaking it.

Youā€™re welcome. Iā€™ll have more soon.

My goal for the next two weeks is to get a bunch of the screens and basic functionality done - affinity, romance love/hate, body type selector, 4x4 list of ā€œjobs,ā€ basic GUI, stores, player inventory, clothing stores, and the player ā€œcloset.ā€

2 Likes

Sharing code might not be the best way of explaining what Iā€™m trying to do, so hereā€™s a really basic store with some dummy inventory. Each outfit has a size and ā€œstretchā€ attribute, so that when a character grows beyond a certain point, their clothing is destroyed (and they have to size up).

Background is temporary - needs to be more white for contrast, but you get it.

5 Likes

Looking good canā€™t wait for more.

1 Like