Thursday, May 25, 2017

Simple lighting in 2D games + shader (GLSL)


    Using some sort of light system in your game is kind of a double-edged knife. It may improve some scenes visually, but may also oversaturate, overexpose or simply clutter (especially when the engine you use also "creates" shadows) others.

    In the times where games were still written in Assembly and presenting an eighty Kilobyte background image to your lead programmer to cram into the cartridge could cost you your head, Scene lighting in a 2d game was usually "baked" into the tilesets. So for example a dark cave or forest used darker and more muted colors, while a sunny village had a more vibrant palette and strong yellow highlights could also indicate the presence of an sun overhead. Dynamically changing the lighting of a scene during runtime, barring some palette animation tricks, was usually not possible.

A few decades ago, all it took was some dark, dull colors...

...or some bright, vibrant ones.

    These years we have shaders and raster effects and we can pretty much alter the value of our output pixels however we want. It is not uncommon for a 2D game to have diffuse, self-illumination, normal maps and more, in order to achieve a pixel-perfect, accurately lit environment with shadows! But sometimes, all we need is a simple light map that makes some areas brighter and others darker.

Saturday, April 29, 2017

Creating cutscenes for a 2D game

    If you've read some of the more technical posts so far, you'll know by now that Gleaner Heights is being developed in Game Maker: Studio. As such, ideas below will be expressed with that specific program in mind, but this doesn't mean they can't be extrapolated for application in some other game creation medium.


    So...cutscenes. A farming sim sure has quite a number of them. You have the intro. Then maybe the Mayor waits outside your house to inform you about an upcoming town festival. Then maybe you have another cutscene in said festival. Then maybe you have a scene or two with your romantic interest[*]If you think that's a lot of maybes, multiply them by 2 and that's how many cutscenes you will end up with.. Due to the nature of the game, one or more cutscenes may play consecutively. For example:

Friday, April 7, 2017

Progress report: Crafting, Dialogue, Spouses and more

    Since the last post, my main focus was on creating character dialogue. Now characters introduce themselves and also have something to say depending on the season, the weather, whether they are visiting someone else etc. Also, they accept gifts. There are four levels of reaction to a gift: They can hate your gift, be neutral about it, like it or love it. Your "friendship" level is adjusted accordingly. A common mechanic in these games is that when you give them a present on their birthday, the gift reaction value is multiplied. Also, multiple gifts per day can be given, but each subsequent gift has an even lesser effect.


    When your friendship level with an NPC reaches a certain threshold, they will reward you in some way: Either with some town lore, a present of their own, some piece of clothing, a skill increase or a food recipe/crafting schematics. Friendship events haven't been implemented yet, but at least their dialogue is 99% done. Finally, in order to unlock certain events for some NPCs, you have to reach a certain friendship level.

Friday, March 10, 2017

Interesting combat in a farming game

    February was Combat month. This means that I had to setup attack hitboxes, special moves and enemies. I didn't design and implement as many enemies as I wanted. So far there are 9 "normal" enemies and a "boss" one. There is definitely room for more content there and, besides, some enemies not done yet are crucial to the main story.


    Since the game's atmosphere is more akin to this of a suburban gothic 90's TV series, a certain degree of realism is expected of the game world. Sure, there may be mysterious entities and a hint of otherworldly powers, but their impact will be much greater when contrasted with a more down-to-earth environment. Would the encounter of killer BOB by the main characters in Twin Peaks be such a harrowing event if in the rest of the series we watched townsfolk fighting zombies?

Monday, January 16, 2017

Creating townsfolk schedules


    In order to make the game world livelier, the inhabitants of Gleaner Heights have to be on the move every day. Maybe they will leave home and go to the town square in the morning, then enjoy a meal at the Diner, then visit a friend, and so on, until nightfall approaches and they return home to rest. We've seen this in games before. The older Harvest Moon games did it. Modern AAA open-world RPGs do it. And now I'm doing it. Unsurprisingly, this section of game design is rife with challenges as well.

A few characters from our main cast. Sorry for the messy upscaling.
    I'll remind you that I am using Game Maker: Studio to develop the game so some technical jargon will refer to this specific application, but the gist of the article isn't confined by it, as always. Any software development tool supporting data structures can be used to implement the ideas discussed below.[*]People who write in programming languages utilizing classes and pointers are probably laughing so hard right now after having skimmed through this article that I can probably hear them from here. But this is Game Maker we're talking about, and we'll have to make do with whatever hand we've been dealt.

    So...we have a bunch of villagers (over thirty, actually). And we want to set up a daily schedule for each and every one or them, bearing in mind the following guidelines:
  1.     Townsfolk (or Non-Player Characters or NPCs) should have different schedules during certain days of the week. Also, their daily routines differ each season of the year.
  2.     Each NPC must have a clearly defined schedule, that is a list specifying where they should be at any given time. This means that if the mayor leaves home at 8:00 in the morning and he needs 10 game minutes to go to the general store, if at 8:05 you exit a building and you spawn at the town map near the general store, you should see the mayor exactly halfway there. Also, NPC schedules should be declared in a brief, yet human-readable way. Writing tons of borderline nonsensical -to your future self reading them- parameters for over 30 NPCs can cease to be fun very, very quickly.
  3.     NPCs must pause their route briefly when the player character is very close to them, in order to lend some attention to the player. Maybe we want to chat or give them an item. Of course we can do all that when an NPC is on the move, but chasing them around to do so isn't the smoothest option. In any case, they stop for a set amount of time, beyond which they resume their route.
  4.     NPC schedule infrastructure must be set up in such a way, that it will be possible for the game to alter a given day's schedule under special circumstances. For example, if it's snowing an NPC will stay home, if it's a festival day an NPC must be at the town square etc.
    So...my approach is the following:

Saturday, January 7, 2017

Game music attempts #1

    Is it too late to wish you all the best for 2017? Have I exceeded the New Year Wishing time limit? Either way, have a great new year!

    I have no formal music education. I have no idea what a C note sounds like, or what scale can get on well with another. But decades of listening to video game[*]And movies/series soundtracks. And ambient music. Generally anything without lyrics music and replaying all those tunes in my head has given me some internal composing ability. Why internal, you ask? Well, I might have this great melody running around in my head for some time. To actually produce something out of it, with my aforementioned lack of musical education and experience, well, that's the real challenge.

The theater man in the beginning of the game has some brooding mysterious saxophone music going on. Or at least I think it sounds like that.
    I am using (mainly) soundfonts for my composing attempts. I find them more straightforward and besides I don't think I could afford any expensive VST, my poor ol' computer wouldn't probably handle 5 Gigs of ultra-quality instruments loaded up all at once, and I wouldn't be able to put them to any good use anyways. Besides, I believe that a retro-looking game doesn't have to have ultra realistic music with top-notch instruments. Soundfonts are easy to look and categorize and pretty easy to use, but I reckon we are talking about a nearly extinct species here.

    So I have tried to write some music for the game. This isn't my first time of fiddling with music, although we are talking about really amateur levels here. Since I am going for the classic cutesy farming sim, but with some more...ahem...surreal stuff underneath, I am trying to inject some mysterious jazzy vibes into various music tracks, like how the music of a 90s mystery TV series would sound, so I am using the saxophone soundfont on many occasions. Does it work? Well, why don't you listen yourselves and give me a heads up:

       

    The tracks are set up for looping (listening to them on the Soundcloud website gives you the ability to loop them).The main question is: Would you play a game fitting the above description with such a soundtrack? Or is the music intolerable? Plan B is to hire a musician which is fine too since I'll have more time for development. I am designing the game, writing all the code, making all the graphics, so I don't expect any time soon to be a master composer. But if those tracks seem ok for the task, or could be tweaked for the better, let me know!

Tuesday, December 27, 2016

How many sprites can make an animal happy?


    Of course the real question is "After how many sprites that you've drawn for all the various animal states will you start feeling depressed?"

    A large animal, like a cow or a sheep, can move in any of the four cardinal directions (up, down, left, right). It can move its tail or head. It can sit down for some time, then stand up again. This is not an enormous amount of frames to draw. But then, an animal may be pregnant. Or sick. Or both! Or a sheep can have its fur cut. Since there have to be some visual cues for those states, this means you have to modify or recolor your existing animation frames, then export them, then import them to your game assets...

    There has to be a shorter way to deal with this. It makes me wonder: In some older Harvest Moon games, a cow could be pregnant or sick, but not both. Was it some gameplay design decision, or was it in order to avoid drawing another set of graphics where cows were both pregnant and sick? Anyway, let's summon our trusted friend, Sheepio, and see if we can "derive" some extra graphics from our basic ones.

Hey man. How you doin'.

    So we have Sheepio's basic animations: Standing, walking, moving, sitting, moving its head etc. in all four directions. In these animations Sheepio has its fur all grown. What we are going to do is grit our teeth and make another set of animations, modifying our original set, where Sheepio is pregnant. Since this will be our only other anination set, apart from the bigger belly, we can make its snout redder, as a more visible cue that this particular animal is pregnant.

    The question now is, can we manipulate those two sets to introduce sheepio being sick or having its fur cut, either when pregnant or not? Once again, shaders come to our aid.