Sunday, November 8, 2020

Gearing up for the end of year demo

 I made a promise to myself earlier this year that I would have a demo of this game ready by the end of the year, and by gum I will do it! It's not going to be as easy as I had imagined, but I'm well on my way. I have a plan too, which I will get into in a bit, but first; the state of things since the last post!


Water

There were a few large "unknown unknowns" with this project that I knew I would have to tackle going in. These sorts of problems are the hardest to work on. It can be hard to solve a tightly constrained and defined problem, it is always harder to solve a more open and nebulous problem, and it is downright difficult to solve a problem when you don't even know what the constraints are. I have just now checked off one of these unknown unknowns' issues. This is a huge boon to the project and my own experience and skills going forward. Very exciting! The problem? What to do about water.

So far in my game all the visual element have been hand drawn pixelart sprites. I know how to do these after years of experience. I know what I can achieve, and I can visualise what the end result will probably look like before I start. I knew right from the start that I would have water in my game and for just as long I had a very good understanding of what the water would look like if I hand drew it. Here's an example:

I drew one of these myself, the others are examples from various games

I know I could produce water to around this quality level. But I also knew I wouldn't be able to animate it if I did, and that was the problem. I really wanted animated water so I could have gently flowing streams or quietly lapping waves on a shore. The unknown unknown was shaders. My experience with shaders had up until I started this project been entirely through webgl, for some silly text effects on my website. I didn't (and still don't) know very much about them, but I had the understanding that they were what made water look like water in video games. I felt that there must have been many people before me who had used shaders for water in a 2D game in Unity, so I did some googling. From there I read a bunch of tutorials and downloaded a few open source demos. 

And then basically, I just mucked around with these preset demos until I got something I liked. I find that the best way I learn something huge at the start is to do this. Download something already working and tinker with it. I changed variables around, looked deeper into the functions used, and tweaked the existing functions watching the effect this had on my scene live - Unity's ability to hotload is very impressive. Here's a quick montage of images showing my progress:

My initial "mirror" shader

Mirror with some colour

Redid the mirror with a system where only certain objects are reflected

My attempt 1 at a falloff as the water got "deeper"

A much better falloff!

New tiles to transition between water and land a bit more smoothly

I'm very happy with the results so far! I have solved a huge issue that had been plaguing me for some time. Well, "solved". Every solution comes with a slew of new problems and questions of course. At the moment here are the remaining things to investigate and solve with the water:
  • How can I do waves and water sparkles/glints? Can I hand draw these or can they only be done through the shader?
  • How can I do ripples when characters walk through the water?
  • Only sprites can be reflected (not tilemaps). Do I need to replicate certain tiles as sprites? How does Unity's workflow work with sprites instead of tiles?
But! It is still a big achievement, and I'm happy to let the water settle (so to speak) for now, before I tackle the above issues. And what about the other main "unknown unknown" issues left to investigate? Well that leads on pretty well to my next main topic for this post...

The End of Year Demo

The end of year demo will consist of the opening of the game, the opening background interactive cutscenes up until the game proper begins. The player will wander around their home village through a few time skips as they watch their neighbours die or leave as the Union and the Arcadians creep closer and closer. 

As mentioned at the start, the demo is still looking good. There are basically three big technical things left to solve, some art to do, and then a bunch of content writing. Two of the technical things are unknown unknowns, which is a little worrying, but I'm fairly confident I will find solutions quickly:
  1. Program UI -> A start menu, pause, save / load menu
  2. Cutscene control / scripting
  3. Save / load functionality
I know nothing about the UI, but it's the one I'm least worried about. I am 100% confident there will be endless tutorials and resources for UI construction in Unity, so I expect that it take me only a day or two to get something simple working.

The cutscene control and scripting is something I feel will be totally custom to my project. I have the instinct that Unity will not provide anything for this, and it will be totally custom, which means I at least don't have to worry about doing much research or messing around in menus and so on. It will probably just be a few custom C# scripts and shouldn't take more than a few days, though if it gets finicky I could see it taking longer.

The real scary task is the save and load functionality. I felt early on I should have focused on this and tried to have it working from the start, but alas, I never did. I did at least keep the idea that I would be serialising my game in mind as I wrote my data structures. I have a big singleton "state" class that contains just about everything I would ever need to save, so theoretically I will just have to serialise that class to json or xml or some Unity supported format and then handle reloading it in again later. But at the same time, save/load reeks of something there would be a Unity™ way of doing. I am sure there are countless tutorials and resources on this as well so I will do some research, but I am at this point at least leaning towards rolling my own system. Anything could happen once I start on this problem though, so I'm a little worried about it. I can't estimate how long it will take...

After that, I just have to do all the art assets for the intros (a few new characters, buildings in various states of decay, and clutter assets), and the writing. The assets will take the bulk of the time from now until the demo is ready. It takes me about a day to do a set of maybe 5 sprites, and I expect I'll need upwards of 40. The writing shouldn't be too hard, I can write these blogs for example in about an hour. However, it will be my first time using my dialog programming system for real and that will be a stress test. I mean literally, I'll find out if it's too stressful to use and whether I should switch to a different way of handling the dialogue. 

Other progress

I finished more of the various Arcadian homestead buildings:

The Temple homestead building

The Lahtinen sauna building

I also started the "ruined" architecture for the unincorporated areas - i.e. the intro area for the demo
Beautiful brown brick blocks. Might make the windows smaller

And the final piece of news I have is that I have made contact with one of the bands I have been pursuing about licensing their music for this game and we've started talking. Very exciting! 

Until next blog,
Me

Sunday, September 27, 2020

After the holidays

I took a holiday a few weeks ago and before that spent a week making Tetris in C++. Okay, that was an excuse. This post is a bit late, but I kept putting it off until I had something worthwhile to show. Before I got into what I actually got done since last blog I want to just write a bit about my experience making Tetris. 

Tetris 2

The image above is what I made, from scratch, in C++, in about 6 days. It's always fun for me to work in a language with strict type rules after working at my day to day in the anarchy of PHP and JavaScript. Working in a compiled language is tough in some ways, but I find it really neat having the peace of mind knowing that what compiles is "correct". Once I finally managed to iron out all the nasty bugs and compile errors I wrote I found the game worked wonderfully. I didn't have to worry as much as I usually have to about bizarre runtime behaviour and the likes.
Programming Tetris was overall a fairly easy activity for me. I've had enough experience by now writing basic 2D games like this from scratch that I knew exactly what I would need and how to write it. A render loop here, and a gameplay loop there... some abstract classes and a pinch of graphics manipulation and voila! That's not to say there weren't any challenges... I attempted to write a generic rotation function that would be capable of rotating any shape by 90 degrees but failed and resorted to hardcoding the rotations - this was possible because there was only a handful of shapes. I also dealt with many bugs that I wrote in my misunderstanding of C++ styles or just plain carelessness. The last bug I solved was a fun one:

Once the gameover screen was displayed you could press enter to restart the game. That worked fine, but the GAME OVER text didn't vanish. I checked the code to make it disappear, and it all seemed right. When the game detected game over it showed the text and stored the pointer to it, and when the player triggered restart that pointer was cleared from the render list. It all checked out. So, what was going on?  The big clue was when I watched the resource allocation graph Visual Studio helpfully gives in debug mode. It was happily chugging up and down most of the game until the game over screen appeared... at which point it started climbing like a mountain goat, straight up. The cause? The code to check when to add the game over screen was in the main game loop, so each game tick it was triggered over and over, adding a new gameover screen to the render list every time. When restart occurred the game dutifully removed the pointer it had to the game over screen - but this was just the last pointer it had, there were still a few hundred thousand gameover screens displayed underneath it. Whoops!

Anyway, I won't talk any more about the Tetris project. I wanted to mention it to show I haven't been doing nothing. You can see the git repo for it here if you want to see the code: https://gitlab.com/SquidEmpire/tetris2



So now, what have I done for this game?


Mostly... spritework. There's so much to be done and as always I suffer from thinking "what if"? What if my sprites are not good enough? What if I used a stronger pallet and reduced the colours? What if I redid the grass tiles? What if I use a shader for water, or what if I hand drew all the water myself? It's easy to become paralysed by thinking what you've done isn't good enough, I know. The only solution is just to power on and answer "I can fix it later" to all the what ifs. Of course, that's the actual decision. Just making the call and telling yourself I can fix it later IS the actual decision. Rarely do I ever fix things later, but the option is always there. Better to make some decision at all than to languish in "what ifs".

And so, I have been doing building sprites for my Arcadians.

Briar Homestead

Unlike the communal utilitarian Union, the individualistic Arcadians live in houses that are as personalised as they are individual. To this end I am drawing all their houses completely custom, pixel by pixel, as opposed to the Union's tilesheet based architecture. This means a lot of time spend pushing pixels around, but I think it is important to visually set the two factions apart. 

The Briar Homestead (above) is designed to be a mix between a traditional English farmhouse and an ecological "green" structure. I have a thick layer on turf on the roof and used a green tint for rocks that make up the walls. The house will be on top of a hill on some rolling plains, with old drystone walls rising and sinking from the thick grass. 

Here's the description of the homestead from my designs:

Briar Homestead

The biggest and westernmost homestead in the area, Briar homestead is a large turf covered rough stone complex, located atop a gently sloping grass hill and surrounded by plains dotted with small ponds and clumps of trees. The area’s terrain bears the outline of the remains of an 18th century manor house: Greenehall Prirory, itself built on the ruins of an older monastery, which was built on an old Norman castle which in turn was built on a roman fort. The areas adjacent to the hill are now covered over by fields, where the Briar family grows wheat, potatoes, and vegetables. The homestead proper consists of a main hall, four bedrooms, a small library, kitchen, storehouse, mill, an apiary, and a - now disused - barn. There is a barrow to the south of the homestead, where preceding generations of the family are buried. 



Teljä Homestead

Here is the Teljä Homestead. It is based on a kesämökki. There will also be a boathouse and sauna building in the same complex, made in the same style. For this building I took a red colour scheme and drew all the shingles on the roof by hand over about an hour, hurting my wrist in the process. As with a lot of my work about 1/2 of the way through I was extremely pleased with the result, thinking it might be my best ever, and then by the time I get to the end I am less enthusiastic. The singles on the small extension on the front are haphazard and poorly defined. The roof's angle appears wrong. The house doesn't look right. It will be a lot of work to redo this one later if I have to, so for now it will do, but I am keeping it in the back of my mind. 

This homestead is described as so:

Teljä Homestead

In the far north of the Arcadian lands on the shoreline is the homestead of the Lahtinen family. The homestead is strongly built from timber near the shore, where the Lahitnen’s focus is on fishing. There are three main buildings, the homestead proper, the boat shed, and the sauna house.There is very little cleared land around the homestead, and only a small herb and vegetable garden.




I haven't started on the final homestead, the Temple Homestead. That one is to be a simple small log cabin.

There's a lot to do and my plan to get a demo out by the end of the year demands I work hard, but I still think it's doable!

Thanks for having a read ;)

Sunday, August 16, 2020

Putting sprite to grid

 I've started laying sprites. Nice! I wrote in the last post that I was looking for a way to start building the actual maps for the game. I did it! And from there I've been building up the main game map. While doing that I've also been making new sprites to fill niches that are missing I notice as I lay out my map. 

This feels like a milestone. After months of laying down the foundations, all the programming and artwork, I can finally walk around my game's world. What a feeling! 

A short clip showing how the game plays at the moment

I was looking into using a tool or external program (even rolling my own) to build and load the map after having a hard time using Unity's in-built tile editor. I solved the main problem I was having with unity though, so I have been using that so far. The problem I was having was that every time I updated any or my spritesheets all the existing sprites on the map would break. It was doing this because Unity is smart with the way it splits spritesheets up into individual sprites: it will ignore empty spaces by default. If later on I went and added a sprite in one of the blank spaces the ids of all the rest of the sprites would change as well. The solution was simple: I discovered that this was what was happening - the hard part - and then I 
found the setting to tell Unity to allow empty spaces in spritesheets. Voilà!

The gates of the Union...

I quickly found I needed a lot more sprites than I currently had. I really needed more small terrain details and things to break up the plain grass that made up a lot of the open areas. So, I spent a bit of time working on those. I also started up again on my industrial sprites, because I needed a lot more of them to even start laying out the industrial areas. 

A bin chicken at home on a pile of landfill

After mucking around in-game and walking around for a bit, I think I will need to pull the camera up a little. It's hard to get a sense of any scale when you can't see more than a metre in front of you. I kept the camera close in originally to keep the view focused and restrictive, but now I think I need to relax it a bit.

Astroturf lawns

I also had some thoughts about the gameplay, again. I've not yet reached a point where I'm as confident with the gameplay as I want to be. I've reached compromises that satisfied me before along the way, but nothing has yet felt finalised. A game generally consists of puzzles for a player to solve, giving them a mental or reflex challenge that feels good to solve. So far my game has none of that. While of course I don't have to go all in and add pointless puzzle minigames to my game I do feel that I have to make some effort to speak the language of a video game in my project. I believe with some minor tweaks to my story I can add in some basic survival and problem-solving challenges, while also streamlining the introductory story and setting of the game. I don't want to talk too much about these changes here just now though, I'll let you know next blog post whether they're going ahead.

For now though, I'm going to continue laying out the main map and adding required sprites as I go.


Saturday, July 25, 2020

Characters: done

It has, once more, been too long since my last post ;_;

I've been working much slower than I would like, and I believe I know why. But first, what have I been doing? I've been ploughing through the characters, still. I completely finished the character portraits and am just about through the sprites as well. Hooray! It's been a long process, much longer than I am comfortable with, but the results are good at it's just about over.

So let's start with the character portraits:


I'm pretty happy with these. Actually, very happy. It was a really fun time drawing them and I feel like I learned a lot about what I was doing as I went. I would be a lot more confident drawing more in the future, that's for sure. The portraits also really helped me when writing the characters. Having a face to look at helped me write what sort of people they would be like, and of course the character descriptions also informed the portraits. Two-way street.

These will be used in the game when talking to these NPCs. 

But the rest of the time in the game world, the characters will be represented through their sprites. I hoped the sprites would be much faster to draw than the portraits due to already having the colours and features worked out, but alas I was still only able to do perhaps 3 a day. At the moment I have a few left to do, but most of the sprites are done. Here's the new ones in no particular order:





Of course, working in 32x32 is much more limiting, and it can be hard to get across facial features. I think I've done a good job overall though so far. There's a few that might need to be revised to raise contrast or add detail, but I will wait until I have seen them in game to decide to do that.

Of course, all the sprites come in sheets. They look like this:



With this I can animate my charcters shuffling about or standing around in different directions. I left one column empty for two reasons: I wanted to save that in case I needed another pose later, and I wanted to keep my sheets power of two sizes.

Here's some example animations:


I already wrote my own animation script for this which I mentioned a few blog posts back. I've also since then had some more experience with manual animation work, having written two sprite animators in JS for both Three.js and HTML canvas. I think it's worth mentioning the Three.js project. I won't go into detail here yet because it's not super relevant to this project, but I spent about a week working like a madman on a 3D FPS engine thing in Three.js just to see if I could. I could, and it turned out ok. I never implimented physics and didn't want to import a library for it, so the enemy behaviour isn't great on the terrain, but other than that it's fairly complete. It was a fun project and I learned a great deal about game development techniques and fundamentals; things like game loops/render loops, the purpose of coroutines, and so on. You can see the result of it here -> http://www.squidempire.com/plutonium/index, and you can see the code here -> https://gitlab.com/SquidEmpire/plutonium

Anyway, I said I had an idea why work is progressing too slowly here. It's the same reason I did the project I just mentioned I think; I'm driven and motivated by results. I like to see things happen. It's been a very long time on this project since I made anything happen. Drawing characters and writing their stories is fun and productive, but at the end of it there's no tangible result. The actual game isn't any further progressed. And so, I started getting demotivated. I didn't want to fire up paint and just draw sprites and then go to bed. So, hopefully now that I've forced myself through this period I can start making things happen again and the game progress will speed up once more. I would like to have a demo ready before the end of the year. I don't think it's an unresonable goal, the game logic is sound, the characters and writen and drawn. I just need to find a way to build the level and start laying the content down.

Sunday, June 14, 2020

Burnout + my characters

I burned myself out about a month ago on this project when I had the genius idea of making a video about the game's world using archive footage. I three solid days collecting archive footage, scouring through hours and hours of videos to find relevant clips, and assembling a video from it all. And after all that...

The video was "ok". It didn't really have a solid purpose or direction and was in the end just a rambling series of clips. I should have known that that would be the outcome from the start, but I was excited and having a good time, so it didn't bother me at the time. However, the realisation afterwards that I had spent hours on something that was never going to be useful, combined with the deep dive I had to perform into my game's lore and setting and the concentration that required left me deeply exhausted.

It's taken me weeks to get back on track afterwards, which has been a bitter pill to swallow, but now that I am back on track I'm working at a good pace again. The video was not 100% wasted time, I'm confident that later on I can make a much tighter cut using the best clips I acquired and make something really dazzling and punchy, but for now I've moved on to the characters of my game.

I started a character document with the details of all the NPCs planned for my game months ago, but progress was very very slow. I never seemed to want to write, and the illustrations for the characters were similarly stop and start. After I recovered from my self inflicted burns I focused on this character reference, planning on finishing it all. It dragged on and on, taking longer and longer than I expected. I was really not prepared for how long it would take me to invent and polish my characters. Turns out writing interesting people is hard! I did end up enjoying myself immensely though once I got the swing of it, and I'm really proud of a few of my NPCs especially.

The document as it stands is 8700 words, and describes 11 Union NPCs and 12 Arcadian NPCs. Each NPC is designed to represent a certain aspect of their faction, some good, some bad, some inbetween. They are going to be met and interacted with by the player character at different stages of the game, and provide different insights and responses. Here's what I have for one of my Union characters:


Hamish Broom

Alignment: Union
Job: Particle Physicist 
Location: Cervine Tower
Appearance: Hamish is 46, tall, dark skinned, and with bad posture. He keeps himself well groomed but smokes heavily.
Summary: Long long ago Hamish was born in an Unincorporated region in central Africa under a different name. The Union arrived when he was only 3 and he was soon processed and registered along with the rest of his family. While the Central AI tries to make special accommodations for families that enter the Union system “whole”, eventually they have to be fully integrated back into the regular Union system and the family unit split up. The child who would be renamed “Hamish Broom” was sent to a separate Union facility from his parents at age 11 and began his new life. Hamish was a quiet child who, although he was different to his classmates, was never bullied or exploited. He did well at his studies, and eventually fell into working as a particle physicist in one of the labs at Cervine Tower. He has been there ever since, for 4 years so far, making minor discoveries in the field of neutrino dynamics. He works closely with a lab at the antipode of Cervine Tower to do this, sending beams of neutrinos there through the earth.
Interaction: Hamish is a man who is not fully Union, though he chooses to be there. He is unlike many other Union characters in that he is aware of the Arcadians and is willing to talk about them; he is curious about his ancestry and history. His skin colour makes him feel vaguely out of place, even when no one else around him seems to notice. He likes to debate with the player about the Arcadians, and whether they have the right idea for humanity's future, but ultimately cannot get over their abandonment of scientific progress. He will talk practically about his work, and admits it is not immediately “useful” but believes strongly in the cause of science for science’s sake.

And here's one of my Arcadian characters:


Timo Lahtinen

 
Alignment: Arcadian (Lahtinen) Job: Lahtinen patriarch / fisherLocation: Teljä homestead, surrounding terrain, Lake GoodeAppearance: Timo is a solidly built man. He is of moderate height and is generally unassuming in appearance. He is around 40 years old.Summary: Timo is a restless soul, attracted to the solitude of remote places. He left home at the age of 15 to roam the wilderness, travelling by boats he made to cross lakes and seas multiple times. Eventually his roaming concentrated on this region, which he found to be particularly beautiful. He discovered and soon fell in love with Lyyti and signed up with her father Pekka’s war party to try to get closer to her. The party was a disaster facing Union drones in great numbers. Lyyti’s father pushed the party onwards despite the casualties, until there were only three left - Pekka, Timo, and Sean Temple. As the three entered a clearing a rush of bullets tore into them - knocking them all down. Pekka demanded they rise and continue, goading Timo by calling him a coward, while Sean lay dying and Timo’s leg ached. Timo crawled to the collapsed Pekka and murdered him with a knife, then dragged himself to Sean to bandage his wounds. Horribly wounded, he made the arduous trek back to Teljä, supporting and protecting the semi-conscious sean all with a broken leg and rib. Timo told Lyyti little of the events, claiming Pekka died a hero. Lyyti was heartbroken by the death of her father but the two bonded over caring for the critically wounded Sean. Eventually Sean died without regaining consciousness and Lyyti and Timo were married soon after. They had three children, the firstborn being a son who died at age 2.Timo genuinely loves Lyyti, while Lyyti is content with him. He is very proud and protective of his two daughters, but worries they are too dependent on Lyyti to survive on their own. He avoids the more militant Arcadian groups out of fear they might hurt Paula. He continues to trek into the deep wilderness at least once a year, vanishing for months at a time to visit distant mountains or lakes. He is acutely troubled by his betrayal of Pekka and his supposed cowardice, and is secretly terrified of the Union and fighting in general.Interaction:Timo presents the player with a neutral look at the Arcadian life. He is a non-violent, unpretentious, quiet man who simply lives the way he knows. At the same time, he is strong and independent, having little interest in the opinions of others and needing nothing to be done for him. He is slow to talk to the player, but may be coaxed to talk at length if met in the wilderness.


In addition, I finished all the portraits for the Union characters, and started the Arcadian ones. Drawing the portraits was very relaxing for me, and I learnt a lot about portrait drawing as I went along, getting better by the end. I went back and touched up some older portraits as I went and refined my work.

Union character portraits

That is about all I have at the moment unfortunately. It's been a bit of a rollercoaster recently, but I'm hopefully back on track now. The next thing I'm going to do (after finishing the Arcadian portraits) will be the NPC sprites, and then some investigations into how I can make level editing easier.

Monday, April 20, 2020

Animations!

Hello!

It's been a bit over a month, and I've been busy. I've been working on all the major aspects of the game concurrently. This is a bit odd, because so far I've generally jumped from one aspect to another after a few weeks solid of each. It's been fun to work on the "whole project almost at once, but also confusing and a bit exhausting. I think this experience further cements in my mind that it's better for me to work in a single area for a time, before changing it up. Anyway. Let's get on to what I've been up to:

Sprites!

The first thing I've been up to is hardcore sprite work. I went back and totally redid my Union building sprites for the third time: they've come a long way now and are finally approaching what they should look like now. I have further work still to do on them, especially with the floor tiles that will go around them, but it's great progress and feels good to have made it!

I also did some major work on the natural and interior sprites, but I don't have anything to show here for those yet.

Character animations!

I finally bit the bullet and drew the walk cycles for my characters. Further, I wrote my own animation system in Unity to manage them. Woah woah woah, I know, I know. Unity has an extremely powerful keyframe animation system in it, and I'm fairly comfortable using one after my experience with SFM, so why didn't I use that? The main reason is that I'm lazy and prefer programming to clicking buttons and dragging sliders. The keyframe animator would be wonderful for kinematic rig animation or tweened animations or anything like that, but my animations consist of hand drawn sprites in a spritesheet. To animate them, all I want to do is show a different image each frame. If I were to use Unity's animator I would have to split my spritesheet into individual sprites and then click and drag them on to the animation timeline one by one for each animation. Left_01, Left_02, Left_03, Left_04, adjust the timing, save as player_walk_left. Considering I'm planning on doing unique animations for up to 30 characters, repeating this pattern one by one for each of them is lame. Plus the clutter of files everywhere is just unsightly.

Instead, I import my single spritesheet containing all the animation frames in a specific predefined order:


And then all I have to do is put it in the character folder in Unity. My scripts take care of the rest! Automatically, my animation helper script will load the required files and find the needed frame at any time, displaying them in custom orders and loops to produce the animations in the game. I won't lie, this script was an experience and a half to write (mostly me fighting Unity's coroutines and monobehaviour patterns out of inexperience) but I expect it to save me a lot of time in the future, and the results in-game look great! I don't have a clip of that to show you, but here's a gif of my player's sprites:



Story work! Character designs!
I've continued writing the story of my game this month, with a special emphasis on writing the NPC characters that will appear. It's been a lot of fun fleshing out their backstories and motivations and has been a great chance for me to try some narrative concepts I have developed. Whether they work or not will remain to be seen...

One character I've finished this month is Timo Lahtinen; patriarch of the Teljä Homestead, which is located on the shore to the far northwest of the game's world.

Timo Lahtinen

Timo is a quiet introspective man, uninterested in conflict or grand pretentions. He will present to the player the worldview of an Arcadian who is most like an "ordinary man"; he just wants to live his life in peace with his family. But he is still an Arcadian, and chose the hard life for reasons dear to his heart, reasons which the player may uncover...

Timo's walkcycle


The Central AI:

The central AI's portrait


The other major character I've worked on has been the Central AI of the Union. The Central AI is exactly what it says on the tin. It oversees the Union's resource pipelines, human wellbeing, and general operation. A monumental task for any human, but what the machine was built for. Central is omnipresent in the lives of the Union's people but is never intrusive. Interactive panels in the walls glow softly with the AI's colours, ever ready to be activated by a person, to provide advice, information, or accept orders.

Designing the AI's interface was an interesting challenge. The AI rarely initiates interactions but must always appear ready. It must exude confidence and power without being overbearing or frightening. It must appear obviously non-human, but still personable so as to be 'friendly'. And through all this, it must appear to suit the world - that is, the design must look retro. I'm lucky to work around a lot of UX people, so I've been able to pick up bits and pieces that I think informed my designs.



Two concept interfaces for the AI - note my attempt to create screen colour pixels


I'm not confident the design is finalised yet, but I'm very happy with the current iteration at the moment. I went through a number of designs, some more complex and some simpler, before settling on the existing one. A bit influence was HAL from 2001 A Space Odyssey; with HAL's design principles and design context being similar to my Central AI's.  But obviously, I couldn't design anything too close to HAL or risk the obvious conclusion that my AI must be poised to become the antagonist as well. Ultimately, my AI is the most powerful mind in my universe, but has no ulterior motivations, no complex personality, and is just a very efficient machine. 


A Hal-like interface


Next on my plate is to continue with my character writing. I'm about halfway done. After that I will continue with the sprite work and attempt a few more of the programming challenges that stand before me.

Thanks for having a read!



Also here's a track I've been using to inspire the industrial zone design work I've been doing:

Monday, March 9, 2020

Design work

It's been too long since my last post! I've been busy, but not as busy as I could have been. I'm still yet to set up any of my gameplay or game in Unity and have spent the last month doing spritework and designwork. I've also been working on polishing my gameplay and story as I can without actually laying it down in game, but I know that's just a stalling tactic. I really just need to fire up Unity and start...
But there's so many things to worry about. What if my systems aren't up to scratch and I end up having to re-write massive chunks of my content later one? What if my map design tile layout is catastrophically small and I have to start from scratch? Alas, these questions are great at stopping me from diving in. I know in my heart though that the only thing I can do is just do it. I will face big challenges no doubt, but they will in all probability be completely unknown until they happen and will not be the imaginary ones I've agonised over.

Enough with the excuses, let's get down to what I've actually done. First up, I started work on the industrial zone sprites. I left these a bit later because I had many ideas of ways I could do this area of the map. The industrial zone is between the wilderness and the Union, and is meant to allow the player to see firsthand what the Union has to do. From a gameplay perspective, the area is dangerous and hard to navigate, providing a challenge to traverse. 

So, my initial thoughts were to make it mostly brown and black like a wasteland. But I also had a strong inclination to make it white instead. This sounds odd at first, but in 2018 I saw a movie called "Vinterbrødre" from Denmark. The movie is set around an industrial estate where everything is coated in a gritty white powder. I thought it was a fascinating visual twist on the normal grimy brown/black industrial look and strongly considered using it in my game's industrial sprites.


A still from Vinterbrødre showing the white/blue industrial look
(retrieved from No Film School and attributed to KimStim)

In the end, I decided to not go this way. I decided it was too confusing with my pixelart to try this, considering it's very hard to tell the white powder apart from snow - and I didn't really want to have some guy lick it and go "it's silt!" to try to explain to the player what was going on. I also decided a brown toned industrial area suits my yellowish colour pallet best.
I did try using the same desaturated sky-blue colour from Vinterbrødre for my industrial building sprites, however. I'm not sure the colour matches the rest of my art style in the area though, and I might have to go back and recolour them later. Anyway, I should show what I have now:


Tada!
It's a start. The new cliff sprites took me an entire weekend, believe it or not. I ended up having a really hard time balancing the detail with the tiling and perspective. I'm pretty happy with the result - but I will have to redo the tiling on the front facing long cliff faces. That's some pretty rough tiling...

A big thing I learnt from the above sprites is that I'm going to have to make a lot of special junk pile and building/girder/scaffolding sprites. There's just not enough variation or density with the sprites I've come up with so far. We can help the effect a little though by adding some filters:


Wow, now that looks grim doesn't it? I have four filter layers applied here in this mockup, and I'd like them all to be in the game in the end. Firstly, there's a layer of fractal noise - clouds. The clouds I imagine would slowly move across the screen, perhaps even slowly changing shape as they move. The clouds help to break up repetitive tiling and add depth and contrast to the scene. After the clouds comes a layer of fine dust - white particles that drift around in the industrial zone to remind you the air is full of grit. After that comes a colour filter, a dark brown/orange colour that dampens everything and makes it all look gross.

The industrial zone will only be visible through filters like this. The filters help make it look very different to the clean areas of the map without requiring me to make another entire set of sprites for the terrain, trees, etc. I'm all for using programmatic and graphical solutions to ease my art workload.

The final filter above is one I intend to apply to the game at all times, a yellow tinge designed to make the game resemble film from the 1960s.

Above is without the filter, below is with

I've been designing my sprites from the start with this filter in mind and adjusting my pallet as need be. I'm a big fan of warm hues and I like the nostalgic look the filter gives. 



That's all I have for my spritework. I'm going to continue with the industrial zone sprites for a bit longer I think, and that'll leave only the unincorporated and Arcadian sprites left to start. I still have sprites I need to redo/add for the Union and natural areas, but those are lower priority now that I have those spritesets mostly figured out in terms of tone and layout. 


Here's some additional news; I may have a new name for the game. I've considered a few things many of which are too embarrassing to write down here but one of which was "Cockaigne & Arcadia". At the moment, the name I have is "Bentham's Lighthouse". This is mainly a reference to Utilitarianism, using the metaphor of a lighthouse being the guiding light of a person's morals. It is also an oblique reference to the panopticon, hinting at the sinister side to the political directions my factions take in the name of ethics. I drew some sketches for logo concepts using a vector editor. This is my first time working with vectors (outside of editing SVGs as text) and I think the results are promising. 

The above are my first batch of concepts. I was experimenting with representing a lighthouse and text placement. I think overall they ended up looking like fine logos for restaurants or companies maybe, but none of them really evoked anything relevant to my game. I did some mockups putting the logos on screenshots of my game, and they always looked out of place.


This is my second batch of logo concepts. I'm much happier with the feel of these logos, which contain my representation of Fresnel lenses. They pop a lot more and are very memorable. I tried using some more "retro" tech-y fonts to try to evoke the art style of my game, but I'm not entirely convinced I achieved that. Oh well. Onwards and upwards! 


Finally, here's some more music I've been listening to to help inspire me to get the feeling of the game right in the natural/industrial areas:

Wednesday, January 29, 2020

Eureka!


I've done it! I've finally bolted down my game's story and gameplay. I know what the player will be doing and why, and how this will present my world and themes. How did this happen? It was a combination of two things:
  1. I've had a lot of ideas and tried out many of them, narrowing down the things I liked and the things I didn't, forming a nebula of concepts and fragments
  2. I employed one of my best friends to sit down and "rubber duck" for me while we talked over my game, distilling down my ideas finally into a single liquid
We wound up in a tennis themed bar at the end of the night after spending most of the evening in the botanical gardens; I left grinning ear to ear with exuberance that I had finally solved the great challenge of my project. I am endlessly grateful for my friend acting as my sounding board, and thoroughly recommend the tactic to anyone else stuck like I was, with a cloud of concepts but no tangible solution.

I'm not going to lay out my entire story here in this blog (spoilers!), but I'll go over some of the ideas to lay down how the process unfolded. 

Our conversation started like this: my game looks like an RPG game. So, we talked about our favourite RPG games (mostly Fallout: New Vegas), what made them fun and interesting, any flaws we noticed or things we loved. We then talked about my original idea for my game's story (the 7000 word "timeskip" version involving massive branching faction decisions that affected the whole world), and my ideas I'd had since then, before talking about what I actually wanted to get across in the game. I talked about various "scenes" I wanted to have take place, how I wanted the player to feel and what I wanted them to be doing. We came up with a few problems that were at the core of my dilemma:
  1. The player needs to feel like they have something to do, a reason to take actions
  2. I want to have the player project themselves into the decisions they make in the game
  3. The purpose of the game is to make the player consider what they think humanity is "for"
We then decided to work out the start of the game. What's the player's motivation? My friend suggested that we reused my original concept from my first draft from the "timeskip" version; the player belongs to a neutral settlement caught between the Union and Arcadian lands. The settlement is slowly being destroyed by the Union's expansion, while the Arcadians are murdering the people of the settlement to stop them polluting "their" lands. My friend said perhaps the player is the leader of this town, and they have to broker a deal with one of the two factions to take their now homeless people in, this being a challenge because both the faction and the settlers would have to agree. I did really like this idea, but there was a fatal flaw in my eyes: by making the player responsible for the wellbeing of a town their decisions were no longer based entirely on their own wants and needs. They might make decisions they personally disagree with (without considering whether they agree or disagree with them at all) in the interests of the settlers. 

So, we tweaked this premise: the town is entirely wiped out. There will first be an introductory segment/cutscene/scripted scene where the player is introduced to the settlement, and the player character's life. They are shown the Union via tourists that ogle the settlers and wonder why anyone would live like this when anyone can join the Union and be looked after forever. Drones would also arrive and start disassembling parts of the town for parts to carry back to the Union. The Arcadians are met too, as murderers in the night who kill townsfolk and burn buildings. The player leaves town, or there's a fade to black timeskip, or a voice over or something, and the player finds themselves all alone in their destroyed settlement. There would be an Arcadian or a note from one letting the player know that by being the only survivor, they have proven themselves strong enough to survive and will be left in peace. The player is now thrust into a hard wilderness knowing about the two factions and being given hints that they can join either. 

At this point we talked about another concept a friend of mine had suggested earlier. And that was the survival concept. When I was in the early stages of my second story draft I talked to this friend about the themes and ideas. He suggested that a good way to make the player appreciate the factions and force the decision to join them would be to make them see what life is like surviving on your own. I liked this idea, but considered it to take too much away from my concept of a dialog and theme driven experience. I didn't want the player doing stat and inventory management busywork when they should be talking to people and thinking.

But with careful planning and a new direction, I think it is the way to go. So, after the player is thrust into the world with little to go on, survival becomes a problem. I haven't decided how this will work completely yet, but it will be fairly simple. The player will need to find shelter, food, etc. The goal of this section is to make it clear to the player that survival on their own isn't an option. The character will fail to light fires, or get food poisoning from berries and so on. There will have to be some reminder here to the player that the Union and Arcadians exist to prompt them, probably though roaming drones and Arcadian Journeymen. If all goes well, they will make their way to one of the factions.

At this point I'll bring up New Vegas again. One thing my friend and I loved about that game was the player's ability to hear most of the story of the various factions before committing to one side or the other. That is a requirement in my game, and what it needs is the player to see both the good and the bad of each faction, before being given a chance to leave (and come back if they want) or join. The Arcadians were fairly easy to do this with, their faction lending itself to having very simple markers for both their "good" and their "evil" aspects, and their complex initiation rituals making it easy for the player to see where the point of no return is. The Union were more of a challenge. My friend and I discussed various things about this, without any real result. We got side-tracked and talked about other things for a while, before I off-handily mentioned I was hoping to find a way to fit a Union "re-education centre" into the story somewhere as well. In a wonder eureka moment, my friend suggested that after talking to enough people in the Union on arrival the player would be flagged by the Central AI as a problematic citizen (asking weird things, making people uncomfortable) and they would be dumped into a re-education facility. This was a glorious victory! Not only does it let me show the player the ominous "evil" aspects of the Union, it also allows me to temper it with nuance. The "re-education" is sincere - perhaps unexpectantly unlike something like 1984 - with the AI asking the player things such as "are you aware that your actions caused discomfort in those around you?" with the goal of helping the player be a more empathetic and civil person. They can pass this test and are free to re-join the Union - but on the way out of the facility they meet some people who though genetics or accidents are mentally unable to pass the test, living their entire lives in forced isolation. This would serve as a potent reminder that nothing is perfect. 

The end goal of the game then is to join one of these two factions. Once that's done the game is over. This might happen very fast. Perhaps too fast. I'm not sure yet how much time I have to have my game take up. I'm happy for it to be fairly short. The goal isn't to speedrun it, but to take your time and reflect on your own. Perhaps the time can be padded by smaller "sidequests" or through making the survival aspects more challenging. I'll worry about the fine tuning later. The point for now is that I'm finally ready to lock this down. The game is go!


To wrap this blog post up I'll talk a little about what I was doing before I had this story breakthrough. Basically, I was spinning wheels again, just working on sprites. I ended up drawing more variations of my grass and natural sprites and tweaking my existing ones:



I also went and drew my initial ideas for the Union drones. These are the suckers the Union central AI sends out to do all the work required to keep the Union running. They'll mostly be seen by the player mining, digging, welding, and carrying things. 


It's difficult to get the amount of detail I want for my drones across with such a small canvas. The look of them is meant to be dirty and functional, sort of like flying lawnmowers. I ended up giving them jets in this version because of the limited space, but that doesn't make sense given the amount of fuel they'd need. Instead I'm going to try to redesign them again to use propellers. I think this will also give them a more "power tool" look. 

Things are looking up though, and I'm going to spending the next little while writing up my story while also tweaking some of the more specific sprites. I still haven't started tackling the industrial zone sprites, the Arcadian sprites, or the neutral zone sprites.