I’m starting to move off of tumblr. I’ll probably still mirror posts here for a while, but the most up-to-date stuff can be found either on my twitter or on my new website
http://yags.bobcgames.com/
For blog posts, specifically, you can hit up http://bobcgames.com/blog/?cat=2
(I’m still in the process of moving posts over from tumblr, but they should all show up there eventually.)
This isn’t a release post in the normal sense, because this isn’t a public release. (You may also have noticed that I’ve taken down the download links.) But today is the “release” of the final beta for the game.
The game is basically done! I’ve done all the cleanup I want to do, all of the big sprites are in (leaving just Steve, Robert, and Ashleigh/Leigh), the final music is in, nudity is now patchable, and... we’re basically finished! So this beta is going to hopefully tease out any remaining issues.
I’ll get the remaining sprites in throughout January, and we’re looking at a late January final game release. Stay tuned to here (or, more preferably, my twitter) for more information as we approach mid-January.
Version: v0.202-beta
Release name: G is for Gay
Changes in this release:
Fixed a bug that deleted collectibles (sorry!)
Added a new scene for National Coming Out Day
Replaced Nikhil, Hannah, Elliot, Liz B., Liz G., and Nate sprites in game
Replaced music with final tracks
Replaced remaining CGs in game
Added some achievement hints
Added additional unlockable profile features
Added unlockable "placeholder" sprite style
Carlos now calls the main character by his name
Fixed a ton of typos
Censored sex scenes even more when censoring is enabled
Made game patchable for nudity/censoring
Stats for this release: 26,371 dialog blocks, 232,011 words, 1,222,701 characters
Major kudos to @stollcomics for his herculean efforts in getting sprites done over the past few months and making this possible. The game (and the guys) are looking utterly gorgeous.
I’m still here, for the time being. My content doesn’t seem to have been too affected, since it doesn’t have visuals of sex or genitalia.
But I’m also on Twitter as bobcgames, and I tend to post there more frequently than tumblr anyway.
So please follow me on there if you’re migrating away, or otherwise worried what the future may bring for this platform. I’ll look into some alternatives like pillowfort.io, as well.
One of the things I’ve been more aware of recently is nudity in games, and particularly how that plays (or doesn’t play) with payment processors.
A lot of games, to stay on the safe side, have released their games in a “censored” mode and then released patches to re-enable nudity. I’m not sure how other people do it, but my goal was to make it as simple as possible for users (one file to replace) but also give myself a lot of control over changes.
As always, I don’t pretend that this is the right or best way to do things... only that it works for me.
First off, you have to identify what file(s) and game declarations have nudity or will be affected by censoring. In my case, I have both nude sprites and nudity in my CGs, located in /images/chnew and /images/cg, as well as LayeredImage declarations for my CGs.
We start by defining a new rpy file ndpatch.rpy to hold the aspects that require and control patching. Because of the way my sprites work, the only other thing I need in here is the CG definitions*. We also include some additional constants, for use later.
## Is nudity allowed at all define nudityIsAllowed = True ## is for uncensored, c is for censored define nudityverending = "" ## Align the game with the patch version where necessary ## Update expectedndpatchversion in options.rpy define ndpatchversion = 1 layeredimage person_cg: always: "cg/person_base.jpg" if persistent.bodyhair_person: "cg/person_hair.png" if not persistent.nudes: "cg/person_censor.png"
Next, we define a separate rpa file for everything related to nudity (the sprites, the CGs, and the ndpatch.rpy file itself). This should come first in the build.classify calls since each file will be placed into an archive based on the order the rules are declared, in options.rpy. We also add a corresponding constant that will not be built into ndpatch.rpa.
## Match the patch version in ndpatch.rpy
define expectedndpatchversion = 1
init python: build.archive("ndpatch", "all") # Nudity build.classify("game/ndpatch.rpyc", "ndpatch") build.classify("game/images/chnew/**", "ndpatch") build.classify("game/images/cg/**", "ndpatch") ...other archive and classify calls...
Now, we make a copy of the entire game project. In that copy, we edit the rpy file to reflect censored nudity.
## Is nudity allowed at all define nudityIsAllowed = False ## is for uncensored, c is for censored define nudityverending = "c" ## Align the game with the patch version where necessary ## Update expectedndpatchversion in options.rpy define ndpatchversion = 1 layeredimage person_cg: always: "cg/person_base.jpg" if persistent.bodyhair_person: "cg/person_hair.png"
And then we also make sure, in the censored version of the project, we merge the censor in the CGs with the base layer (so even the raw game assets don't have nudity that can be uncovered via unarchiving the rpa file later). Similarly, any sprite image files that have nudity in them must be edited in the censored version of the project to remove or obscure nudity.**
Technically, this is enough to get censoring working. You would simply build a distribution of the game via the censored version of the project, build a second distribution via the uncensored version, and provide the ndpatch.rpa file from the uncensored version for download. The images will be replaced in the game with uncensored versions when the ndpatch.rpa file is replaced, since they are part of the ndpatch.rpa file.
However, we can do a little better.
First, you can use the nudityverending constant to change how the version of your game displays, to make it obvious whether it’s got nudity or not. For example:
screen about(): ...stuff... text "Version [config.version!t][nudityverending]" ...stuff...
Second, your game may later need to change in a way that makes an older ndpatch.rpa incompatible. For example, if you add a new sprite expression, someone with an older ndpatch.rpa file that tries to use it against a newer game build will see errors when running the game. Similarly, if you delete an asset, someone with a newer ndpatch.rpa file will see errors with an older game build.
This is where the ndpatchversion and expectedndpatchversion constants come in handy. You can ensure they are equal when the game starts up and show an error or warning if they don’t match. For example:
label start: if ndpatchversion != expectedndpatchversion: "Your ndpatch.rpa file is the wrong version for this build of the game." "Please download the latest patch and game from URL." return
and
screen main_menu(): fixed: if ndpatchversion > expectedndpatchversion: text "{size=50}{color=#000}Your ndpatch.rpa is newer than the build of this game (v[config.version]). Please download the latest version of the game before patching.{/color}{/size}" xsize 500 xanchor 0.0 yanchor 0.0 pos(550, 100) elif ndpatchversion < expectedndpatchversion: text "{size=50}{color=#000}Your ndpatch.rpa too old for use with this build of the game (v[config.version]). Please download the latest version of the patch and try again.{/color}{/size}" xsize 500 xanchor 0.0 yanchor 0.0 pos(550, 100)
which then lets you bump both constants whenever you make a breaking change (like adding or removing a sprite asset or cg).
Finally, you can use the nudityIsAllowed constant inside the game itself anywhere that you want to handle differently in a censored vs uncensored game. For example, I change the warning that shows at the beginning of the game to reflect explicit vs non-explicit nudity.
There’s probably a way to make this work with a single Renpy project that builds both a ZIP distribution and a separate ndpatch.rpa file. But it seemed easier to me to just duplicate the project. But because of this, you probably want to do this work when your game is otherwise done, or you’ll potentially have to make bug fixes in both copies of the game project.
* Yes, I could have left the CG declarations outside of ndpatch.rpy and simply censored the base image, but that would require me to have a cg/person_censor.png file in both versions of the game, and that felt inefficient for me.
** Identifying and editing relevant images is where most of the work is, really. If you just want to flat out replace images, you don’t even need an ndpatch.rpy file. Simply declaring an ndpatch.rpa archive in options.rpy, and including all image files that will need to be censored in that archive, would be enough.
I posted some (very) short drabbles a while back on my Twitter. It was actually interesting to try to get something across in so few characters.
Here’s a compilation of them. Mild plot spoilers ahead.
He opens the drawer, pulling out a small box, fiddling with the combination, pulling out his wedding ring, and slipping it on before taking your hand again.
"You could just leave it at home on performance nights."
He shrugs.
"Important to me. Like you."
"We really need a signal for when you two are getting it on in here."
"Or you could just knock."
"Right. Because you wouldn't just say to come in anyway and then ask us to join you."
"Well, do you want to?"
"I should probably go make sure he's not too mortified."
"C'mon, chico. It's pizza time."
"Dude. You have a 9 AM final tomorrow."
"Pizza is brain food."
"I'm pretty sure that's not true. Can't we get one delivered?"
"But the ambiance!"
"You mean the excuse to not study."
"Same thing."
"Fine, but I'm bringing this book."
You look over your shoulder and change lanes.
"This feels like old times,."
"Yeah, except if you ask me if I think some guy is cute now, I won't almost crash the car this time."
"I'm... really proud of how far you've come, Chris. Also, um. Sorry again, about that."
Hey, look. It’s another fic! (See all of them here.)
There’s a lot of things, in terms of backstory with the other characters and things that you don’t see, that I have specced out in my mind. I thought it would be interesting to present them in text form to fill in some of the gaps, as it were, in the main YAGS storyline.
Needless to say, these pieces will be highly spoilerific, so I recommend you do not read them unless you have finished the game at least once. (Likewise, they may not make as much sense if you haven’t played the game at least once.)
Seriously. Spoilers ahead! Do not continue if you haven’t played the game!
Additional warning: This fic is highly explicit, and NSFW, and all of that stuff. R18+, NC-17, XXX, etc, etc.
Wednesday June 26, 2013
“Hey Chris!”
You nod at Carlos as he walks through the door, not taking your eyes off the TV screen. You feel him sit down next to you, and laugh.
“Smash again?”
You nod, waiting until you’ve knocked the computer player’s Sonic off the screen. “Realized we never unlocked everything, so I’m going through right now and playing some Donkey Kong rounds to get that stage unlock. I’m just not very good at him, so it’s taking a while.”
“As long as there’s Pikachu, I’m happy, although I guess more stages could always be fun.” He looks around the apartment. “Chico out?”
You toss him a controller. “Yeah. I think he’s having dinner with some of the doctors he’ll be working with next week.”
Carlos shakes his head and selects Pikachu. “I could never do it, dude. It’s not even just the blood and guts or whatever, but you’re in school forever, and then you graduate just to do even more of the same rotations before you can go off and do doctory things.”
“He seems to enjoy it, at least.”
“Yeah, well. I’m gonna enjoy me some Pikachu, instead.”
A few rounds later, you finally manage to unlock the stage. Carlos grins and stretches.
“Finally.” He throws his arm around you and pulls you closer to him. “I should probably start dinner or something, but we should try it out afterward.”
You look at him and kiss him, gently. “Did you hear the news today?”
“What, the whole marriage thing? Yeah. People were talking about it around the office today.”
You pull his arm tighter around you and snuggle up against his side. “I wonder if we should get married.”
“We’ve been over this, dude. It doesn’t really matter, but we can if you want to. Well, except now I guess we actually can.”
“It would make immigration easier, anyway. You could stop working that desk job.”
“Hm. You present a compelling argument.” He kisses your forehead, and you can feel him smile against you. “Government immigration offices sound so romantic.”
“Does that mean you want to do this?”
He shrugs. “Sure. Why not?”
Thursday June 27, 2013
“Excuse me.”
The two of you turn to see a man dressed in a suit, flanked by a guy with a large camera on his shoulder. Carlos grins at them. “Hey.”
“My name is Tom Jones, and I’m with Channel 7 news. Might I assume you are here waiting in line this morning for a marriage license?”
“You assume correctly.”
“Would you be willing to answer some questions for me and possibly appear on camera?”
Carlos shrugs and looks at you. “That’s fine, I guess.”
Tom gathers some information from the two of you, as well as a few other couples waiting in line, and then sets up with the cameraman.
“Okay, I’m going to ask you to tell us how long you two have been together, something quick about how you met, and why you’re getting married this morning. We’re going live in 60 seconds. Are you ready?”
You look at Carlos and smile. “Ready as we’ll ever be, I guess.”
“Okay, and... Hi, Martha. I’m here in front of San Francisco City Hall and, as you can see, there are a lot of people excited to be here today, and a huge line already for licenses. I have Chris and Carlos here with me now. Carlos, how long have the two of you been together?”
He grins and pulls you closer to him. “It’s been, what... 7 years?”
You shrug, honestly unable to remember, yourself. “Something like that.”
“We’ll say 7 years. It’s been a while, anyway.”
“That’s amazing! How did you two first meet?”
“He was my best friend’s roommate, so I guess it was a happy accident. I, uh... was heavily in the closet at the time, and seeing him come out I guess gave me that push I needed. Also I got to spend a lot of time with him alongside my friend, so I guess we just... clicked.”
“And I’m glad we did.”
“Aww, babe.”
“That’s really great! Are you excited to be here today? This seems to have been a long time coming for you two, then.”
Carlos shrugs. “Not really? I think we discussed marriage at some point when it was clear this was working, but neither of us particularly felt it was important.”
“Then why...”
“Because I...”
“Because why not? If the government’s going to recognize marriage at all, it seems only fair that we get them to recognize the way we feel about each other, too.”
Carlos smiles again and kisses the top of your head. “What he said.”
Tom seems a little confused by your lack of enthusiasm, but quickly shakes it off. “Well, congratulations to the two of you!” He starts walking to the next couple and the camera follows him. “And here I have...”
“’Why not’ is a good answer, Chris.”
“Now who’s being romantic?”
“Uh huh.” He kisses you.
You coincidentally run into Carlos outside your apartment building, after work.
“Hey, Chris. You got out early today.”
“Yeah. Jake and Nate wanted to have some sort of romantic dinner together.”
“That sounds nice. We should do that sometime.”
“Sure. Why not?”
He laughs and you walk into the building, and the apartment, together. Adam is sitting on the couch, playing smash.
"Hey, chico. How was your day off?"
"Really nice, although I'm excited to start up again next week. For real, in some sense."
"You're crazy, dude."
Adam puts down the controller and smiles at the two of you. "Work uneventful for you two?"
Carlos grins and squeezes your hand. "Work was fine. Chris and I got married this morning."
Adam laughs. "Uh huh. Good one, dude." His smile fades as he realizes Carlos is serious. "Oh! That's... congrats, dude!"
“I’m going to start dinner, but then I’m going to get Chris to fuck me into the mattress while it bakes.”
“...dude. You still don’t need to tell me these things.”
Carlos grins, and looks at you, hungrily. His words have gone right to your cock, and you smile back. You’re pretty sure he’s noticed.
Dinner prep takes less time than usual, and you feel like he’s rushing through it, even with Adam’s help. Then the pan’s in the oven, Adam’s pulling on some headphones and puling out a large book, and Carlos is taking your hand and pulling you into your bedroom.
You claim his mouth and push him against the closed door, breaking only long enough to unbutton the top button of his shirt and pull it over his head.
“God, babe. I want you.”
“Right here, against the door?”
He shivers. “That... wouldn’t be so bad, actually.”
You kiss him again, pulling him into the bed instead and quickly shedding your own clothing as he watches.
“You’re beautiful.”
You run your hand down his chest, over his abs, and to the waistband of his underwear, peeking above his shorts, teasing the coarse hair under your fingertips. “Well, you’re handsome, then.”
His laugh quickly turns to a moan as you palm him through the fabric. He pulls down his shorts and briefs as you grab the lube, then kneel over him. Your breath over his length makes his cock twitch, gently hitting you in the nose.
“Someone’s eager.”
“You have no ide.... ohhhh.” You gently rub your fingers over his entrance and he involuntarily spreads his legs, granting you better access.
“What do you want?”
“Anything. You. Your cock.” You gently push a finger against the resistance, and he moans again. “Wha... whatever you’re doing right now.”
A better idea strikes you and you stand up, to his disappointed groan, and fumble around in the nightstand drawer until you find it. Carlos’ eyes widen as he sees the toy you’ve grabbed, and he almost whimpers.
You lube it up slowly, his eyes focused on every movement, swallowing heavily as he watches you. Soon, satisfied it won’t hurt him, you take your position again, gently prying at his entrance with your fingers.
“Ch... Chris...” His voice is broken now, with need, and he pushes back against your fingers. “P... please...”
You can feel your own cock twitch at his words, and all thoughts of some slow teasing go out the window. Instead, you push the toy inside him in one fluid motion, knocking the breath out of him, and before he can recover, you turn it on while taking his cock to the root in your mouth.
He cries out, then, hands flailing at your head before settling desperately in your hair as you tease the slit with your tongue, your hand holding the toy inside him as it pulses against both his prostate and his perineum.
His sounds quickly grow desperate, and his hands in your hair warn you he’s close already. You take him in again, all the way, and then he’s crying out, salt and sweet filling your mouth as you continue to suck his overstimulated cock through his orgasm.
“Babe, I... I still... want you.” You release him with a pop, and look up into his eyes. He smiles, somehow looking weary but excited. “But that was incredible.”
You slowly work the toy out of him, gently this time, and toss it to the side before looming over him and pressing the tip of your cock against him. “Like that?”
“God yes.”
You fill him slowly, claiming his mouth while you do, and the tightness that envelops you almost pales in comparison to the thought that he’s tasting himself on you.
Soon you bottom out and break, and he smiles up at you, lips slick with spit and cum. “That’s... really nice.”
You pull back and thrust into him roughly, pretty sure that you’re not going to last long either given the sight of him right now. His hands find the back of your head and pull you down again, lips against his, and it isn’t long before you’re moaning into his mouth and emptying yourself deep inside his ass.
The two of you lay there for a bit, breaking your kiss but not wanting to let go of each other yet, as he wraps his arms around you and you can feel your heart start to slow.
“So was that... wedding night sex?”
You shrug, sliding out of him and laying next to him instead, your head on his chest and arms around him. “I suppose.”
His arms tighten around you. “Good.”
“But there’s nothing stopping us from doing that again, sometime.”