The Ice Cream Culprit v1.1 Update + Afterword

The Ice Cream Culprit v1.1 Update + Afterword

This post will be extremely long! ;w; This post has almost 3,000 words, like three times longer than the VN itself wahahaha... 💦

v1.1 Update

First of all, I'm preparing a release update (expected to be up on 31st of August) for small improvements for The Ice Cream Culprit build! Here's the list of what's new:

  • Did a small change: stat bars are no longer visible in replay scenes.
  • Readjusted the home, return and quit buttons: quit button now only appears in main menu, home and return buttons are slightly repositioned.
  • Added splash screen! Woof!

Web version won't be updated because it behaves weirdly when I tried to build. I just upgraded to Ren'Py 8.3 and will wait for the next version to see if the weird behaviour still happens. Until it no longer happens, web version will remain the same.

Secondly, I never wrote any proper release post or afterword, didn't I? I took so, so long to compose this post, it almost drove me crazy haha x_x);;

Anyway, I may update this post in the future for better reading, but for now, here it is!

Afterword

I feel like I should have written this afterword or any kind of release announcement on the same day of the release, but I always take so, so long to write this kind of posts... So, I hope a month and a half is excusable. Better late than never hahaha.

First of all, thank you very, very much for playing The Ice Cream Culprit! ^_^ I hope you enjoyed it, even when it's quite short. This VN is a project full of personal experiments: the most obvious ones are the branching narratives and the statbars. I don't know if I was able to implement it the good way, but I tried my best. 💪

This is another project I enjoyed a lot making! I learnt so many new things to keep and took notes of things to improve.

☆ How did it happen? + Ideation

Unlike Tuna Rice from last year, The Ice Cream Culprit wasn't an impulsive project. The idea came to me some time last month. That night, I couldn't sleep (a very rare occurrence, as I sleep really well, and I sleep a lot hahaha) and my brain just juiced out a very weird scenario. Then, half-asleep me typed it on phone:

I shared about this here.

I stared at this note (which I copied to my laptop later on) for weeks, and thinking if this concept is a doable project. After some time pondering, I thought it would probably nice to try wrapping this in this year's O2A2 Jam.

The result is quite different from the original idea as I ended up using statbars instead of branching system, but I did my best to keep the bubbly pacing in the dialogues. I also ended up writing it in first-person instead of second-person. I just love writing dialogues...

☆ Making

I used the entire 10 days of O2A2 Jam period to make this. I was only able to somewhat complete the writing on the seventh day, that was when I decided that it's probably good enough (for my liking) to submit as an entry. I continuously fixed things till the very last day, and released it a few hours before the deadline.

1.) writing

I think I mentioned this here and there, but writing The Ice Cream Culprit was incredibly difficult for me. 😩 I always think devs and writers who write branching narratives are so OP, how can you all do that? It's incredible that you can think of alternative realities for your universes. You are all so powerful...

I've written four stories so far (the published Tuna Rice and Mrs Peregrine, and the work-in-progress Illa Café and Blooming Chimes) and they are all linear. I attempted to make branching narrative writing some time last year, but I didn't like it. I already have the 'true route' that I'm very attached to in these stories, I couldn't think of alternatives of equivalent interest.

But in The Ice Cream Culprit, the essence of the idea is about 'what-ifs', and the only perfect scenario to put this into reality is to treat it as a problem with multiple solutions. Let's say, from the protagonist's perspective:

  • What if I lie to her? (She's pretty sharp, I wonder about that...)
  • What if I just nonchalantly dismiss her whining? (She keeps whining...)
  • What if I hug her? (I mean, that usually would work, right?)
  • Gosh, she wouldn't shut up, what if I just give her, uh, this banana I found on the counter? (Huh, that works??? How? Why?)

Something like that. And I ended up writing a few 'what-ifs' to throw at her.

Speaking of her: the girlfriend's character is a character of mine that I already had for a few years already, so I already have her personality and appearance set. This greatly sped up writing as I already know her well enough to write her lines.

It was also really wonderful that I was able to have the script proofread, even within very last minute notice. ;;A;; Thank you 999x! A family member at home did the first reading and helped me cut the word-count from 1,100 words to around 980 words, and ebi helped iron some wonky grammar and typos.

2.) drawing

Thanks to O2A2's restriction, I only needed to worry about one sprite and one BG. I drew both leisurely in between the stressful writing process as a break. Drawing is usually, and it's always been, the most fun part of VN dev projects hahaha.

The girlfriend's sprite from sketch to final. She initially had much larger eyes @_@

Mock-up of the main menu and the final, coded main menu. I didn't put some small stuff because of time constraint.

I did the GUI on the last day of the jam, as it became very low priority in my list. Finalising the writing was my utmost priority, and I think I really only wrapped everything well on the last day anyway.

Oh, I also did her expressions on the last day as well; it was (surprise!) very frustrating for me. The reason may sound like a nonsense, but here it goes...

I wanted to be organised for once, so I tried to do things systematically. Like, following the 'correct' way of doing things. And I feel like the 'correct' way of doing expressions is:

  1. Create a list for the expressions needed when writing the script.
  2. Draw the expressions based on the list.
  3. Code it.

I was already paralysed on step 1. Like, I don't know what to list? Yeah, she would be sad here, so, uh, sad face then? She would be happy here, so, um, happy face? And so on? So I made the list of generic-sounding face expressions.

When I then turn to my drawing canvas to start drawing the expressions, I was like ??? and huh, what kind of sad is sad? What kind of happy is happy? I know this may sound weird, but I couldn't draw any expressions from the list I just made at all. @_@)?? Because there are so many 'sads', and there are so many 'happys', and those mean nothing for me if I don't feel them. And I would never feel them if I'm not reading the lines as I feel them. Thus, this list was completely useless for me.

For the projects I'm writing, I need to feel the expressions when I'm about to draw them. In addition to mirroring the expressions with my own face, the emotions I'm feeling have to reflect it as closely as possible. This is weird, but I feel like I wouldn't be able to draw it fully if I don't feel the same emotions hahaha. It's not just different angles of eyebrows tilt, or imperfect round of mouth-opening. In my vision, I want my expressions to be understood beyond words. I don't have to explain that she's upset, or that she's suspicious – she has to show it herself. I wonder if this makes sense aaa...

So I scrapped the list. When it's time to code her expressions, this was my actual way:

  1. In the script.rpy file, go through the line where she's saying something. Then I visualise her face when saying this line. Let's say, when she's pleading. She would use the 'act-cute' face to plead for the help.
  2. I open the drawing canvas, and draw the sparkly eyes and pouty mouth for this particular face that stays in my mind. This visual is still fresh, I feel her act-cute face. I feel what the protagonist feels.
  3. I export this face as .png file. I put it in the corresponding folder in my project.
  4. I code the layeredimage structure. I use two set of eyes that I repeatedly swap to have a very tiny animation feel of her sparkly eyes. (Although I dunno if you notice, the shiny part looks like dog tails wagging instead of sparkly eyes ahaha...)
  5. I code it inline: show gf cuteface (for example)
  6. My project auto-reloads, and I go through the line with the new face. Ah, it looks nice.
  7. Go to the next line, and repeat the process all over again.

She changes her expression a lot, so I went through these 7 steps when coding all of her expressions. This was incredibly time consuming and very tiring, but I was able to feel all of her expressions well and even when it took me many hours. She's very extra, I love her a lot.

TL;DR, other than this incredibly, overly complicated way of drawing expressions, drawing was fun. Hopefully I'll be able to do something better with more efficient workflow in future projects...

3.) scripting the sprites and background

This was done rather fast. I didn't do any camerawork this time, so there's none of that code. Sprite scripting was also quite fast, except the expressions scripting, which was explained in drawing section above, but other than that, all the movements were pretty generic.

4.) scripting the narration mechanics

This is a new section to talk, since it's my first time implementing choices and stats. I learnt so, so, so many new python scripts in this VN! There were a lot of python scripts that helped me squeeze the word-count to under 1,000 words, yeah, that's really cool! I'm able to reuse the same line in multiple paths without rewriting them. Labels and some python scripts helped with this a lot!

I have to mention that all of these are done with the help of a kind family member (who wants to remain anonymous) at home who is so much better in coding python than me. I just designed the flow, the if-else blocks and the conditions, and then pass it to the master for python scripting. This is the closest I can get with coding logics. >,<;;

So, in summary, these are the mechanics that are implemented in this VN:

Two modes: The Ice Cream Culprit has two modes that you pick in advance. Did you eat it? Did she eat it? Who's the culprit? This was coded with flags.

Stats: This is rather straightforward. I created flags for each stats, and under each choice, I put +1 for the corresponding flags.

By the way, there are two visible stats and two hidden stats in this game. Some stats doesn't have any effect on the statbars, because it's hidden. The visible stats are 'truth/morally right' and 'lie/antagonistic', and the hidden stats are 'comforting' and 'solving'.

Truth/morally right is for the choices when you're being honest and trying to help.
Lie/antagonistic is for the choices when you're consciously try to not help her or just to be mean to her (it's kind of soft, since it's hard for me to write mean characters...).
Comforting is for the choices when you want to comfort her, either with hugs, or to offer her something that she likes (going to a waffle shop, or just a banana).
Solving is for the choices when you actively try to solve her problems, such as offering to buy her more ice cream or telling her where to find more ice cream.

Two endings for each mode (four in total): Each ending has their own formula to reach, and I was super worried about this since it's very not straightforward good endings vs bad endings. I'm glad though that many wrote to me that they got all endings even without guides. I don't remember that well how to reach certain endings, honestly.

Statbars: This is a new screen that was coded to represent the visible stats status, as a consequence of players' choices. It reused the slider bar that Ren'Py already originally has.

Conditional sentences: There are very similar sentences with only one or two word differences depending on the mode that players pick, or the choice that is made prior to this sentence. By only writing the sentence once and put a snippet of python script in between the sentences, it's possible to prevent wasting word count from repeating the script.

p.s. I wrote some small blog posts about coding these stuff, but I still feel like they're not very well written and very confusing. When I'm able to tidy them, I'll be happy to share them publicly for anyone to see!

5.) scripting the BGM

It's a bit embarrassing to admit, but BGM was one of the last thing for me to implement. I browsed dova-s.jp website for a one-instrument BGM because I don't want to overwhelm the slice-of-life scene with too many instruments. The BGM I picked is called "Cooking Nakayoshi" um, I think it means "Cooking Friendly"? It sounds happy and a little bit clumsy, I feel like it fits the simple theme of the VN itself.

6.) scripting the GUI

I didn't do anything much for the GUI. I only reskinned the Ren'Py GUI haha, if only I had more time... I focused mostly in the writing and mechanics, which were much more urgent to polish.

7.) play test + build

I honestly didn't keep track of the play test (should have made a spreadsheet matrix to test all conditions but I cba – remember what I said before that I'm an extremely disorganised person?), but I was able to catch some trippy animation that would have failed because of some choices taken. It's all fixed with small script (thanks, anonymous family member again!!) and I was pretty sure the build should have been perfect.

So, interestingly, on the let's play videos some people sent to me (thank you so so much I love watching you playing my VN!!!!!), the trippy animation bug happened haha. I'm pretty sure I've fixed them, as I couldn't reproduce them. I wonder if the Skipping feature breaks this animation... Perhaps it is. If this is the case, then it's beyond my control, I'll probably ask in Ren'Py forum about this.

☆ Fun things

I've written a lot already, so I'll wrap this section in bullet points instead:

  • drawing!!!! The girlfriend is a character I treasure a lot, I'm happy to draw her. =^~^=
  • writing...?! I wrote above that writing was extremely difficult, but it was actually quite fun overall. I asked myself about this, and I think, at the end of the day, I genuinely enjoyed the 7 days of struggle in writing The Ice Cream Culprit.

☆ Failed things

These are not really that bad. Actually, these are some interesting things which gave me an 'oh I see' moment:

  • the v1.0 of the android build was soundless. I only figured out two days later: that the BGM file name had non-latin character, it affected only the android build. It has since then been fixed.
  • Trippy animation that I thought I've fixed, turns out it still happened. Probably the Skipping feature triggers this. There is nothing I can do about this at the moment...

☆ +1 XP!

There are so, so, so many ++++++++1 XP ⬆️⬆️⬆️ moments in this project, obviously. It's mostly on the technical side. I'm not very technical myself so I feel like this is a huge gain. Comparing this project with my previous projects, there are definitely more new things in this one. I think it's pretty cool. >w<

It's been a fun process.

☆ What's next?

I have a small idea for Spooky VN jam!! I'll try to join and see what I can make in September! ✨ It's actually a cute story, since that's the kind of stuff I'm the happiest making. I'll do my best!

Thank you for being with me in this journey!
I hope to see you again in my future projects.

See you!
- Konayachi