Archive of my first #COTC devlog from itch.io

So I've started building a colony builder. That should be an easy project to knock out in two months or so. Right? Right???

My game will have an adult twist, but since the forums are intended to be all-ages spaces, I am not going to discuss the adult parts of this here. I think it is still worth writing a devlog because a lot of the implementation choices might still be of interest and there will be a large chunk of base-level mechanics that have nothing to do with the NSFW stuff.

So what did I do until now?

Choosing an engine

This was already a pretty big task. I wanted to learn a new engine since Godot has started to accept AI contributions a while ago (albeit reluctantly). Bevy seemed like a nice option - it is AI-free, the dev team seem reasonable, and I have been eyeing Rust for a while now.

Unfortunately, Bevy is still very new and it is very different from Godot. I tried to build a small prototype with it and worked on that for a few days but everything just took far too long. Bevy does not have the same amount of third-party documentation Godot does, and it often requires you to think about your game very differently (since it strictly enforces an ECS pattern). So I eventually decided to go back to Godot, with a bit of grumbling.

For a bit, I tried to use GDScript (since that is the only language that allows for web exports and itch.io really likes web games), like I did with Ratsnek, a jam game from 2023. But with its fairly loose type system, doing any sort of refactoring just tends to blow up in your face and I do not want to spend my time troubleshooting typos, so eventually I bit the bullet and switched to C#. I think that'll be the final tech stack, and by the time I will be done, maybe Godot will be able to export C# games to web. Who knows.

The game so far

In my experience, starting off your game by trying to find third-party assets that kinda-sorta fit your vision well enough for prototyping is pretty bad. I need to get to the fun stuff - for me, that's programming - relatively quickly. I could have used one of the tilesets from itch but decided to make my own programmer art because, surprisingly, it is just faster.

I can also just mock up any asset I want very quickly.

Aspects like tile size (16x16) and the color palette (a 16-color PC-98 palette) are, of course, pure placeholders and the only reason I went with pixel art to begin with is because it is a medium in which I feel more comfortable doing quick&dirty mockups. Integrating third-party assets or commissioning my own / collaborating with artists will wait until I have more solid ideas about what I actually need.

There already is some basic map generation (based on Perlin noise, scavenged from another prototype I did ages ago - never throw away your abandoned projects!) and, as you can see, the player can place buildings which will then be built by the characters.

Simon Says Build A House

By genre convention, you don't just select one of your minions and tell them to go build a house - rather, you place objects like you would in an RTS and your characters will then start building them when, y'know, they feel like it and don't have anything better to do.

The way I model this so far is through this neat little class:

using Godot; public abstract partial class BehaviourTask : RefCounted { public virtual TaskState State { get; protected set; } = TaskState.RUNNING; public virtual bool NeedsRequeueOnCancel() { return false; } public abstract void ActUpon(Gril gril, float delta); public enum TaskState { RUNNING, FINISHED, /// <summary> /// needs requeue /// </summary> PAUSED } }

Instances of this class will be tossed into a global command queue. The logic for executing a task is within the BehaviourTask subclass so I can keep my mob classes reasonably lean. There will be many different kinds of tasks and putting all their logic into my mob classes would be an absolute disaster.

For the time being, idle characters just take whatever task is first in the global job queue, but of course more logic will be needed for that because of character preferences, skills and priorities. Certain tasks that are close together should also be batched. But I'll get to that when I get to it.

So far, the tasks are limited to felling trees, hauling items from A to B and building, uh, buildings. Of course, many more will follow, and on top of these global tasks, my characters will also have to take care of self-care - eating, sleeping et cetera.
Shady dithering

In the screenshot above, you can see that my bed and walls are semitransparent. Using the alpha channel here would look out of place in a limited 16-color palette! So instead I dither the furniture sprite, making every other tile transparent.

This was my first-ever shader, and I am very proud of it, even if it is very simple.

shader_type canvas_item; void fragment() { if ((int(UV.x / TEXTURE_PIXEL_SIZE.x) + int(UV.y / TEXTURE_PIXEL_SIZE.y)) % 2 == 0) { COLOR = COLOR; } else { COLOR = vec4(0, 0, 0, 0); } }

Next steps

Some of the next systems I need to implement, now that the building system has a very basic implementation, is character stats. I need a robust system where character stats can be modified by status effects and items in a manner that is flexible, type-safe, robust and decently encapsulated, and I am not yet 100% sure how that will look.

#COTC status update: A lot of refactoring has gone into my building system - previously, all buildings shared a single prefab that could only be varied in size and texture. As some buildings have functions that require custom code and/or components, like the collision areas that open and close the doors, I need a lot more flexibility in that regard. There's also a minimap - this is my first time manipulating a texture at runtime. It was easier than expected. And my characters now have some basic UI, along with randomized names, ages and pronouns. Characters now have five core needs (Food, Rest, Recreation, Social and Fucky-Wucky), which deteriorate at a linear rate (this should, of course, be dependent on what the character is doing), and can already sleep, but the other four needs all tie into different game systems - systems that do not exist yet.

UI-wise, I'm trying to give the whole game a "Windows 95-core" aesthetic. Not sure if I'll stick with it, but it looks and feels a lot more consistent with the limited-color pixel art than the default Godot theme does with all of its transparency.

I'm also working on implementing crafting stations and a UI for crafting orders. Finalizing that will probably be the next thing I do - that'll allow me to add a recipe for making meals, and then start addressing the hunger bar.

Most things in the game - building types, item types, crafting recipes, even pronoun sets - are managed as Godot resources. I am currently trying out YARD, which is a nice Godot plugin that allows you to edit your resources in a nice table view. It also has some stuff for querying and managing these resources at runtime which would be very useful for me, but currently that stuff only works in GDScript projects and I use C#, because at my scale I do not want to work without strong typing. It looks like C# support is in the works, at least.

For the record, I have now spent three weeks straight working on #COTC, committing code every single day.

I spent three weeks working on Ratsnek, which was a tiny jam game, and getting even that done in that timeframe in parallel to work required unhealthy amounts of crunch that i could not sustain for seven games in a row.

I've been working on Collared Maid on-and-off for two and a half years.

This bozo claims he can make 7 good games in 75 days? He's a fucking liar.

as a long time supporter of the TtbtAF project and the AbaFF community it is disappointing to see the NoF members completely misrepresent the TtbtAF's CotC proposal for EOYC

#TtbtAF #AbaFF #NoF #CotC #EOYC #drama

i don't play this game, i was watching an ad for a reward in #OctopathTraveler #COTC
Might be a bit busier than I thought today. I’ll see if I can manage to record todays episode ASAP and post it later. If not, maybe later tonight. #craigofthecreek #cotc #dontsleeponthecreek
Not sure I was that articulate
---
RT @Frito2x
I recorded a very interesting and open conversation with @coolbeansranch tonight.
Episode drops Monday.
Here up is a preview of how he describes @modernTman 's quest to end centralized fiat food:
#COTC
#PLEBUNDERGROUND
https://twitter.com/Frito2x/status/1589793768039124993
Sofa King Frito2❌ on Twitter

“I recorded a very interesting and open conversation with @coolbeansranch tonight. Episode drops Monday. Here up is a preview of how he describes @modernTman 's quest to end centralized fiat food: #COTC #PLEBUNDERGROUND”

Twitter