Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

[Devlog] Untitled VN/dating sim

A topic by angevon created Jul 23, 2017 Views: 1,489 Replies: 11
Viewing posts 1 to 7

Hey everyone! I'm Angevon (Ange for short), and I'm making a Visual Novel with Renpy. It's based on a book I wrote during Nanowrimo way back in 2010. It's about a boy going to a school of magic and learning about magic and his fellow students. Not a Harry potter ripoff, I swear.

Anyway I figured I should be official and write a devlog of my progress :)

This one might be a little TMI just so you know.

Day 1 was off to a great start, as I woke up with a raging headache and cramps. The Midol I took decided it was only going to take care of the headache. Better than nothing I guess.

My first snag was naming the project, after which I promptly fell asleep due to feeling like shit.

After a long nap I finally got down to work and started writing. Still felt like shit, but by the end of the day, these were the stats from Renpy's check script function:

Statistics:

The game contains 165 dialogue blocks, containing 2,317 words and 12,073
characters, for an average of 14.0 words and 73 characters per block.

The game contains 1 menus, 15 images, and 23 screens.

That's a lot more words than I thought I'd written! You know, I spent all the time writing and barely got the main character to meet two people on the first day of school. It's probably not even 1/10 of the story I wanted to tell. I'll have to shorten it a lot if I want to tell a complete story. It might end up just being a working demo more than anything.

 I still don't have a name for the project. Hopefully it will come to me later.

Right now, there are no backgrounds or character sprites or music. I haven't customized the menu at all. When I tell Renpy to call an image it inputs a placeholder anime girl. It's pretty funny.


That's it so far. I can't draw for shit so I'll have to use placeholders for now. Maybe I will commission someone to make character sprites & backgrounds & cgs for me later (if anyone knows someone who does this, let me know hehe)

(2 edits)

Day 2

On Sunday I was feeling only marginally better. I began to get really frustrated with Renpy, almost to tears. It has such an extensive wiki... but everything the wiki contains is out of date. So when you google for how to do something, chances are the solution posted in the forum is also out of date.

Today I wanted to do some minor customization to the display of text boxes and character images. I wanted to get a separate name box for the character names, to appear above the text box. Fortunately with new Renpy, this is a default feature. Unfortunately, the positioning of the name box is designed to be relative to the text box, and it takes a bit of trial and error to move it around on the screen. I discovered you can press shift+r while the game is running to reload the scripts. In fact, once you've done this once, every time you save the script it'll automatically refresh the game. That's nifty.

Anyway, about positioning the name box. I had problems with this, because I wanted to move it UP the screen, above the text box. I tried reducing the ypos values for the name box, lower and lower, but even at zero the name box was still within the text box. It was driving me nuts! Then on a whim I put in a negative value, and that did it!  Damn that took forever to figure out.

The way the y axis works is going to continue to drive me nuts, because I keep thinking of graphing in like math class. Y gets more value going up, but in Renpy, it's the opposite. My college education is getting in the way here :p

Anyway, with that solved, next I wanted to reposition where the character sprites get drawn. Renpy has these nifty positions labeled "at left" and "at right" to set the sprite to the far left/far right of the screen. But I decided I didn't want them that far to the left/right. I figured somewhere in the options there should be a section where the position for "at left" and "at right" are defined.

I couldn't find it at all. I searched again and again and tore some hair out. I mean, I knew I could define my own positions, maybe create an "at left2" or something but why should I do that when I should be able to just edit the existing position, right...?

On a whim I ended up manually defining "at left" and "at right" at the beginning of the game script and it seems to be working. I guess putting that there overwrites the default setting for these positions.


For the record, I set "at left" to be xpos of 0.25 and "at right" to 0.75. When I get actual sprite art instead of placeholders, I'll probably play around with these again to get the positioning juuuust right. 

Oh, and you can see I added some placeholder images. Silhouettes made from public domain vector art. I added frown and smile versions so I can have placeholder emotions too. It makes everything look ridiculous but hey it's just a WIP haha.

The last problem I had was that I wanted to have a dumb door opening sound effect play when a new character entered the room in one scene. I put the file in the directory, and told Renpy to play the file, but it kept crashing when it tried to load the game, telling me "door" is not defined.

I was like, well, I know image files have to be defined... do I have to define sound files too? I couldn't find anything about that on google... Other people with sound errors had problems with indenting the script, or directory errors where the file couldn't be found. I opened Renpy's dev mode file list and it could see door.mp3, so that wasn't the problem.

Tldr: it turns out I didn't put the file name in quotation marks. It was supposed to be

play sound "door.mp3"

instead of

play sound door.mp3

It's always something little, isn't it? haha

Oh, and here's the stats now!

Statistics:

The game contains 221 dialogue blocks, containing 3,024 words and 15,586
characters, for an average of 13.7 words and 71 characters per block.

The game contains 2 menus, 17 images, and 23 screens.

Good work! Especially for a self-proclaimed "complete beginner!"

Yeah, your 'left' and 'right' variables most likely override the default left and right variables (I'm not sure how Renpy works exactly). It's a concept in object-oriented programming in which an object can redefine functionality of a parent object. For example, you can define a car with a top speed of 100mph, but then you could define a sport car, which is a car, but it's top speed is 150mph. You should be able to call the overridden variables with super().left and super().right (not sure if it'll work like this in Renpy, but it should in python so ... maybe?). Honestly, defining your own like you said is probably your better option here. You could, say, define 'midleft' and still have the default left, then you could have two characters on the left side, one left and one midleft, without drawing completely new sprites! (good for the 'Hey, my friend here thinks you're cute' situation, maybe?). That's probably way more than you'd ever care to know about that, but hopefully it helps!

Again, great work! Hopefully you feel better too!

Submitted

Hey this is pretty cool haha I didn't know python had a library like that! Which version of python 2 or 3? And what's it outdated for? The version of Python or outdated because the library got updated? I don't know the library but Python is my favorite programming language even though it's not what I have the most experience in. I briefly tried out pygames but I greatly prefer Unity even for 2D haha.

Renpy is just a program that uses Python & has Python support, or so I understand. Renpy's wiki (link here) is what's outdated, you can see by the banner at the top, it's on every page. I keep seeing people using Unity here for the game jam, maybe I should've picked that up instead haha. But I just wanted to make a simple VN so I figured Renpy would be best since it's meant for it.

Host

yeah unfortunately renpy's documentation for its newer update isn't as detailed or finished as its older one. i do typically declare my own custom positions for sprites--but i guess you really could just redeclare the default ones to your liking. even if you've had a few difficulties this is really great progress and documentation of how you've solved problems!

(+1)

Thanks! The documentation seems more like a list of possibilities, but as a complete beginner, I don't know what most of the functions do or why I'd use them... let alone how to call them! Anyway, now that you mention it, I should probably make my own positions. There's a chance that further down the line I'll need to use the default ones at some point.

Host

yep haha documentation is actually Less Useful when you're starting out and starts to become more helpful after you've looked through tutorials or examples. i would say looking at other people's projects or tutorials is a better way to learn things and when you start to get a handle documentation becomes like a cookbook or a list of cool ingredients you can use for most customizable stuff!

Days 3/4/5

Not much going on because of work. I found better placeholder background images and cropped them to the right size. Originally I had just tossed them into the folder and let Renpy choose what part of the image it would display (led to some funny displays), but that was just laziness. Now they look better, even if they're just placeholders. 

I discovered how to flip images horizontally, you basically have to redefine the image but with a transformation. For example:

 image l flip = im.Flip("l_normal.png", horizontal=True)

It seems like extra work to define a flip for every sprite I want a flipped version of, but it beats opening every image in photoshop manually creating a flipped version. I guess I could plan on the character sprites facing the screen (so a left-facing and right-facing version would not be needed) but I kinda like how Fire Emblem does it, you know? with the characters facing each other and talking. And maybe there's a better way to do this but this is what I got haha.

I made a white flash effect for when one of the characters uses magic:

define flash = Fade(.25, 0.0, .75, color="#fff")

(I just found it on a forum post somewhere. I actually haven't played with it so I don't know what those numbers do at all!)

And I found out there are functions for making a character leave the scene (easeoutright and easeoutleft), so now there's basic animation! haha


Future goals are:

  • find a way to make unique name boxes for each character
  • lengthen the script so that all potential love interests get introduced before the end of the demo! Right now there's only one.
  • better placeholder art...?
Host

if you're ever unsure of what a function is doing, that's actually a perfect time to look up the documentation! i did a quick search here and found what your line define flash = Fade(.25, 0.0, .75, color="#fff") does:

Fade(out_time, hold_time, in_time, color="#000")

Returns a transition that takes out_time seconds to fade to a screen filled with color, holds at that screen for hold_time seconds, and then takes in_time to fade to then new screen.

and there you go! also, flipping character sprites in code is a common way to save memory. images can take up a lot of space, so being able to cut down on the number of images packaged in your game makes a smaller download and makes more efficient use of images already available!

(1 edit)

Ahhh thank you! When I was googling for a flash effect, I didn't know what it was called, so I kept getting a bunch of stuff about making, like, lightning strike and weather effects, and stumbled across that coding snippet somewhere. Since it worked out of the box I didn't really mess with it haha. But anyway, that page looks very useful & now I wanna play with more transitions. I've only been using the default so far. Thanks again hehe

Day 6

I made a menu to choose where to go. You have to choose each option -- the intention is for you to meet each of the different love interests. Every choice leads to a different scene with a different character, and when the scene ends, it returns you to this menu, so you can choose another option.


But! Using variables, I was able to make it so that it hides choices you've already selected. Also, if you don't choose "follow after Dave" as your first option, that option won't show up again (since it wouldn't make sense to follow him when he wasn't in the other characters' scenes). And, I found a way to test if multiple flags are set, so that the game will continue on once all the choices have been chosen (currently by popping up a previously-hidden hidden option and forcing you to choose it, but I'll work on making it automatic later).

So, I think it was good progress!

Statistics:

The game contains 271 dialogue blocks, containing 3,843 words and 19,806
characters, for an average of 14.2 words and 73 characters per block.

The game contains 3 menus, 25 images, and 23 screens.

Anyway, it's bed time :)