I’ve been negligent at sharing in-progress backgrounds on tumblr. The first two of these are already in the game itself, but here’s some not-so-previews anyway, via the talented Crowkicks.
Jake really likes pizza. And food. (Also Adam is confused at how he eats so much.)
Juan really likes running? Not that he’s doing particularly much of it at the moment…
The name of the game is cleanup. I will probably also get more assets (backgrounds and sprites) that I’ll start plugging into the game as they come in, which are non-trivial efforts, but also not really predictable.
Continue to condense dialogue blocks to reduce number of clicks
Stick figure sprites should support epilogue extra accessories
Cleanup of character profile code
Allow MC to join Nikhil/Jake banter
More immediate feedback after making hotness selections for all the guys
Option to turn off body hair (really only matters for realistic sprites)
And, of course, as they come in…
Replace sprites with new ones
Replace backgrounds with new ones
I’m also starting work on the behind-the-scenes PDF book that I want to offer as a premium item with the game. Learning Scribus has been surprisingly straightforward, but I guess that’s generally on the todo list as well.
I decided it wasn’t worth waiting for the final Adam sprite to push a new release, given everything else that’s stacking up behind it. So here’s a new release with the first real art assets: theme music, backgrounds, and inked (but not colored) Adam sprite. Hopefully the next release will include both finalized Adam and James sprites, but we shall see.
Also, as the game approaches a more “finished” state, I’m going to start giving releases a name. This one is “A is for Adam”, since it features a partially-finished Adam sprite.
Currently we’re waiting on the final Adam sprite to push a new release. But a few awesome things have happened in the meantime:
New background (campus buffet) was finished
Main theme song was finished
Bonus scenes for almost all of the guys are written
Once the sprite is in, it should be a quick process to export all of the layers out, replacing the current sketch placeholders I used to test. The music and background are already in the game, so should have a release out the same night. Yay.
(Also, yeah, this looks ridiculous, even with just the sketch placeholder. 😛 And I guess it will continue to do so until most of the sprites are replaced.)
I’m also in the early stages of assembling a behind-the-scenes book (PDF), which goes into a bit more detail than this blog about the early process and story of the game, how different characters developed, and compiling some of the artistic process behind the assets together. (Of course it will also include copious galleries of sprites and backgrounds.)
The plan is to offer such a book as a “bonus” you can pay for. (The game itself, of course, will always be free.) Thinking something like $5 for the soundtrack (and a steam key, if/when I port this over to steam), and $9 for the book?
The idea is that I want to raise some small amount of funds to commission more art for the game (like CGs), because there’s more I want to do there. Not sure how reasonable that (or those amounts) seem. I guess we’ll have to see.
Another thing the game has (and will build on in the next release) is unlockable character profiles with some information about each character, in addition to some bonus features unlocked from them. As far as things I’ve posted here go, this is a fairly straightforward one, but I figured I’d share anyway.
First of all, I defined a block of data for each character’s information. In addition, because these are linked from the title screen via a sketched sprite, I included coordinates for the appropriate sprite.
python early: # list in reverse order of rendering on title screen real_profile_names = ( "nick", "hannah", "elliot", "nate", "lizb", "lizg", "adam", "juan", "jake", "dan", "james", ) profile_profile_info = { "adam": ("Adam", (950,340), "Sophomore", "Biology", "August 15, 1986 (age 20)", "6'2\"", "California, United States", "Adam James Prewitt", "Profile text for Adam"), "juan": ("Juan", (850,340), "Junior", "Biology", "April 22, 1986 (age 20)", "6'0\"", "Costa Rica", "Juan Rodrigo Salas Valverde", "Profile text for Juan"), …etc… }
Next we actually put these on the title screen.
screen main_menu(): …Stuff… fixed: if "completed" in persistent.profiles: imagebutton auto "images/title/leigh_%s.png" action Show("char_profile", chname="ashleigh") xanchor 0.0 yanchor 0.0 pos (650, 140) imagebutton auto "images/title/leigh_%s.png" action Show("char_profile", chname="leigh") xanchor 0.0 yanchor 0.0 pos (850, 140) imagebutton auto "images/title/steve_%s.png" action Show("char_profile", chname="steve") xanchor 0.0 yanchor 0.0 pos (950, 140) imagebutton auto "images/title/robert_%s.png" action Show("char_profile", chname="robert") xanchor 0.0 yanchor 0.0 pos (1050, 140) for profname in real_profile_names: if profname in persistent.profiles: imagebutton auto "images/title/" + profname + "_%s.png" action Show("char_profile", chname=profname) xanchor 0.0 yanchor 0.0 pos profile_profile_info[profname][1]
Next, we define the screen for character profiles. Note the additional features that I’ll get into shortly.
screen char_profile(chname): tag charprofile xpos 0 ypos 0 default pmode = "normal" fixed: add "images/sp/profilebg.png" xpos 0 ypos 0 if pmode == "best": add "images/title/profile_" + chname + "best.png" xalign 0.5 yalign 1.0 xpos 175 ypos 720 elif pmode == "good": add "images/title/profile_" + chname + "good.png" xalign 0.5 yalign 1.0 xpos 175 ypos 720 else: add "images/title/profile_" + chname + ".png" xalign 0.5 yalign 1.0 xpos 175 ypos 720 if (chname == "james" and persistent.permacc_james) or (…other guys’ checks…): add "images/title/profile_" + chname + "acc.png" xalign 0.5 yalign 1.0 xpos 175 ypos 720 if chname + "best" in persistent.profiles or chname + "good" in persistent.profiles: imagebutton auto "images/sp/proftab_normal_%s.png" action SetScreenVariable("pmode", "normal") xanchor 0.0 yanchor 0.0 pos (375, 631) imagebutton auto "images/sp/proftab_good_%s.png" action SetScreenVariable("pmode", "good") xanchor 0.0 yanchor 0.0 pos (375, 559) if chname + "best" in persistent.profiles: imagebutton auto "images/sp/proftab_best_%s.png" action SetScreenVariable("pmode", "best") xanchor 0.0 yanchor 0.0 pos (375, 480) imagebutton auto "images/sp/profextra_%s.png" action Start("epilogue_bonus_" + chname + "1") xanchor 0.0 yanchor 0.0 pos (350, 0) imagebutton auto "images/sp/profpermacc_%s.png" action ToggleField(persistent, "permacc_" + chname) xanchor 0.0 yanchor 0.0 pos (363, 171) vbox xpos 500 ypos 30 xalign 0.0 xsize 480: spacing 10 text "{size=40}" + profile_profile_info[chname][0] + "{/size}" text "{size=25}Name: " + profile_profile_info[chname][7] + "\nYear: " + profile_profile_info[chname][2] + "\nMajor: " + profile_profile_info[chname][3] + "\nBirthday: " + profile_profile_info[chname][4] + "\nHeight: " + profile_profile_info[chname][5] + "\nHome: " + profile_profile_info[chname][6] + "{/size}" text "{size=25}" + profile_profile_info[chname][8] + "{/size}" vbox xpos 1250 ypos 30 xalign 1.0 xsize 400: for k in sorted(profile_profile_info): if k in persistent.profiles or ("completed" in persistent.profiles and k in ("ashleigh", "leigh", "steve", "robert")): textbutton profile_profile_info[k][0] action [Show("char_profile", chname=k), SelectedIf(chname == k)] xalign 1.0 textbutton "Return to Main Menu" action Hide("char_profile") xalign 0.0 xpos 500 ypos 675
As you can see, the profile screen has a few unlockable features. The first feature is buttons that let you view alternate poses for the character image, depending on which ending you’ve completed with the given person. This is implemented simply, with a screen variable indicating the mode.
The second feature is the ability to access a bonus scene for the given character, once you’ve found their HEA ending. Just define a label with the appropriate name (epilogue_bonus_james1 for example).
The last feature is a toggleable item on the guy that will persist on their sprite during subsequent playthroughs. For example, if you get James’ best ending, you can toggle his enagement ring on or off, and have it show up whenever he appears in the game. The associated code for that builds off of our sprite code and simply adds a new check for the persistent variable, and a layer.
And… that’s it. Obviously, your profiles don’t have to be nearly this complicated. If you just want to show some basic information for each character, the screen and associated logic will be much simpler.
Progress! (Also that background is kind of gorgeous.)
My sprite artist should be back from vacation later this week, but then I’m away next week, so hopefully by the end of the month we’ll have the first real assets (Adam sprite and dorm room background) in the game!
I’ve posted a bunch about the coding process of this game, and a bunch of WIP stuff for art and music, but I haven’t really yet talked about the game itself and its underlying mechanics.
One of the more interesting parts to design and build, to me, was the actual gameplay behind the four* different dateable guys, and I want to talk a bit about their paths, requirements, and how their characterizations impact their reactions to your decisions.
Spoilers follow, of course, and I really recommend playing the game at least once without spoiling anything about the characters beforehand, because getting to know everyone is part of the point. Follow the cut to continue.
One thing my sprite artist (the awesome @stollcomics) had been doing was varying the head, as needed, in different expressions. For example, here’s a sample of (inked!) Adam heads, and I think it makes for a much more expressive sprite than the usual “static head and moving facial features” thing.
However! In the process I think we also discovered why head movements aren’t a normal thing in visual novels – because it takes really long to draw and ink so many heads, which multiplies out even more when you want hair and facial hair variations. (We were expecting to have a final Adam sprite, colors and all, this weekend, but instead he only got around 70% done with inks.)
Given that, I think we’re going to be going back to the “usual” visual novel style with a static head and moving facial features. It won’t look as good as these, but it’ll be a heck of a lot easier on him, and generally means this process won’t take as long given the 13 other sprites we have to get through.
It’s particularly unfortunate that a lot of this awesome art isn’t going to see the light of day (other than this post, I suppose), but I’m really glad that we ran into this early in the process (on the first sprite) instead of after doing a couple of simple ones and then having to go back and redo those, as well.
Learning experiences, I guess!
(This also means, of course, that the next game release is delayed for a couple weeks while we redo the expressions and get the new sprite colored.)
I’m expecting to have the finished Adam sprite this weekend (and certainly next week, if not), so the next release will be focused on getting him into the game. (Essentially, replacing every “show adam” command in the game with either “showsp adam” or “showexp adam” and testing the results. There’s almost 1100 such commands, so I have my work cut out for me; thank god for lint.)
Replace Adam sprites in game with final sprite.
Continue to condense dialogue blocks to reduce number of clicks.
Add additional features to character profiles.
Allow MC to pay for food in group outings.
If the theme song gets finished, I’ll stick it in as well. Might be a little jarring to have music only on the title screen, but that’s what the sound settings in preferences are for, I guess. 🙂