Ocean Village - A dev blog

Hello again! 😮

April 07, 2020 - Tuesday afternoon

Woah! It's been awhile.

I've been busy on a few things. Here's what the game looks like now:

The major updates

I'll get into the nitty details of each of these in later posts.

💾 Saving! (again)

I took another shot at the F# + il2cpp serialization problem. After several weeks learning about dynamic assemblies and hacking on some open source projects, this part is finally working. It was painful, educational and in the end performance is significantly better than with FsPickler (and also, you know.. works).

🕐 Time travel!

This was a core game concept that was built into the architecture, but actually implementing it required saving. With that out of the way, I was able to add the ability to fast-forward through time.

What I want out of the experience of playing Ocean Village is that the world feels more substantial and kind of like it exists separately from ours. That means time passes in the game world even when you're not playing. How it works currently is the game will fast-forward and catch up to how long you've been away. This catch-up still fully simulates every logical action - residents getting hungry, working, walking building from building -- all of it.

🏡 Updated models and improved performance!

I made some models using Google Blocks, which I found to be a lot more enjoyable to use than Blender. The process of bringing the models into Unity was super smooth. I also improved performance: I reorganized meshes and game objects, improved recycling, added some LOD, drastically improved water performance - I also learned me how to write shader programs and modified or wrote new shaders which could take advantage of gpu instancing. Then I threw most of that away and switched to Unity's Universal Render Pipeline.

🤳 Phone conversations!

The residents are simulated pretty deeply for the genre - their energy, hunger, satisfaction, wealth are all updated every tick, and each action they take has a reason. I want all of this to be discoverable. I also want the residents, individually, to feel substantial - so I added a text message interface. This will be the way to both find out about a resident, as well as eventually to request them to take an action. Phone conversation is also how the player will interact with the Ocean Settlement Organization, which is the in world entity giving backstory to some of the administrative stuff.

☁ Basic continuous integration (sort of)!

I started on some basic CI/CD work by getting the game cloud-buildable. I still need to setup a real CI pipeline that unifies the repos that are part of this project - but at the moment it's a team of one, so I'll give the complicated stuff a skiparoo for now.

Along the way, I significantly refactored a lot of the C#/Unity parts and actually threw away throwaway code. Feels good man.

What's up next

👩‍🏫 Tutorial system!

I wanted to avoid this by having an intuitive and minimal UI, and I also wanted as little text as possible to reduce i18n burden - but it's clear that there needs to be some amount of direction and explanation for the game. It can feel disorienting getting dropped into anything, no matter how simple the interface is.

🕰 Server-side timetravel!

I'm going to continue working on improving the performance of time travel, but it was never going to be possible to catch-up significant amounts of time on a phone. The architecture was designed around logical/backend (F#) and physical/unity (C#) separation, to allow a simulated client to time-travel independent of a Unity instance. This will be hosted on a server and periodically update players games, which the player pulls from - so the phone should only ever have to do small catch-ups to match time passed.

How we're doing

I started a report card awhile ago and it hasn't been updated -- until now!

Here are the updated scores:

MeasureLastNowWhy
Art12Models for buildings
UX12Phone conversations, drag n' build
Gameplay11:(
Simulation23Fast-forward time travel
Market01More coherent visuals

The one that hasn't been improved, and now is sorely needing attention, is Gameplay. I've fleshed out more of what I'd like to see in the game, but focusing on gameplay improvements will be the next major priority. Game design is still pretty intimidating to me as I don't know what people will want - the only north star available to me is what aspects I personally would like to have in this genre. I know I need to balance personal taste with the appetites of the market, and this is something I see myself struggling with.

One other thought - it's been a bit distressing for me how long this process is taking. I originally just wanted to spend a couple weeks putting together a little idle-clicker! Then that changed into a sky-airbnb sort of game.. and now we're doing a village!

A simple truth that's slowly been sinking in for me lately is that the best way to do something.. is to try to do it! Seems obvious, but it's fundamental. The flip side is also true - goals aren't likely to be reached on their own. What I'm realizing is - yes, I'm a distressed that this is taking it's time, but also - I haven't been prioritizing speed at all! It's the opposite of how I normally work. I'm very much enjoying it (and, well, sometimes pouring literal blood and sweat into this) - I'm hoping, in the end, this leads to a more interesting product.

My favorite game of all time, Mount & Blade, has just had it's long awaited (10 years!! since the last release, and more than 8 years! in development) sequel released into early access and it is AMAZING. Full of bugs (again, early access), but their focus and priority was great gameplay and features and they completely delivered in that respect. It had a massively successful launch, reaching 3rd most played game on Steam (this from a game that never seemed to have more than a few hundred people online at most). It has reinvigorated my love for gaming. So two things I'm learning slowly: the best way to do something is to try, and you can't try to do everything.


There's a lot of meat to dive into for each of the major updates that I'd like to jot down here for posterity, as many of my notes are scattered across Gitlab issues and comments. Those will be coming up soon. I've missed blogging!


Say hi! Enable JS to see my email (or send to this domain)