I have one month to make an MMO: Sprint 5

Yuan Gao (Meseta)
Meseta’s MMO experiment
5 min readSep 12, 2019

Sprint 4 was a fairly relaxed sprint, focusing on addressing a bit of technical debt, and expanding some of the content of the game.

I’ve now worked 166 hours on this project (though 32 hours of that was writing this blog ¯\_(ツ)_/¯

Sprint 4 Retrospective

Sprint 4 was about addressing technical debt: cleaning up or refactoring bits of code that wasn’t as as efficient or wasn’t robust enough, as well as finishing hooking up the dialogue system.

On the balance, I accomplished what I had wanted to do, but felt fatigued by it and demotivated by a lack of progress during the time. I’m not sure if that’s part of my nature wanting to see progress, or because I happened to be sleep-deprived, I genuinely can’t tell why I found it so hard.

Until you can actually degenerate into a biological soup and reform as a butterfly, you’re not refactoring hard enough. Photo by Suzanne D. Williams on Unsplash

Nevertheless, I got done what needed to be done, primarily these items:

  • New map areas so the world is a bit larger to test in
  • Finish dialogues
  • Refactor a few things

An overview of where the project is today and where it needs to go

I’ve taken part in several game jams now. They’ve been instrumental in furthering my skills as a game developer, and have been a place where I can explore new techniques.

Most importantly, game jams have helped me understand how I work and some of the challenges with overscoping games. When you only have 48 hours to develop and deliver a game, overscoping will kill your project very quickly. It’s been a constant struggle to dial ambitions and ruthlessly cut scope until the project can be done in 48 hours, and I’ve not always succeeded, but with each game jam, things got a little easier.

The formula I ended up with for doing jams was:

  • 1/3rd of the time on Core features/mechanics
  • 1/3rd of the time on Content
  • 1/3rd of the time on Polish/Juice

For larger projects the time split might not make sense, but I still like to group tasks into these three categories. So far, I’ve focused mostly on core features:

Core features done and needed:

What I have today is mostly still basic framework rather than content:

  • Players can log in and see each other move around
  • NPC behaviours are processed on the server
  • The server functions can be spread over multiple servers to balance load
  • Players can roam around a map that could be quite large
  • NPCs have dialogue options and those dialogues are scriptable

Features yet to be added:

  • Inventory system and items
  • Combat
  • <other secret genre-specific mechanic>

The last item I won’t reveal for now. I have a pretty generic 2D MMORPG up to that point. Once I start working on that feature, the nature of the game becomes more clear, and hopefully that’s when the game gains a bit of uniqueness and individuality, and answers the question of “why should I play this game?”

Content needed

Most of the game has gotten along with minimal content, but the items needed are, at least:

  • Custom sprites for sprites that don’t exist in the assets I use (from FinalBossBlues)
  • NPC character portraits
  • More maps and areas
  • Dialogues, lore, and some plot at least to get the player into the world
  • Side-plots and quests
  • Sound
  • Character customization

Polish/Juice needed

The game lacks polish, and looks flat.

  • An UI
  • Make the world look less flat and static. (shaders? effects? lighting?)
  • Character idle animations and emotes
  • Smoother movement
  • some other things I’ve not thought about yet…
The only juice I need: a mojito. Photo by Andrejs Sims on Unsplash

Sprint 5

With some sadness, sprint 5 is going to be the last sprint I can make this month before going back to full time work. My 1 month of time off is coming to a close, and unfortunately I’m one sprint short due to that vacation I took which I hadn’t planned for before starting the month.

Sprint 5 will be about inventories and items.

Inventories are typically heavily data-driven and tricky. GML’s lack of OOP concepts make inventories harder to implement (for now. If you’re reading this in 2020 or later, this’ll have changed. Also, hi from the past, do you have flying cars yet?)

I’m going to re-use an inventory system I built a while back for a jam game, the inventory system was fairly extensive, allowing for item stacks, individual item qualities and stars, inventory containers.

Once integrated, this inventory system has to be hooked up to the server so that inventory is tracked on the server as well.

The full set of requirements are:

  • Player can see their inventory
  • Inventory is synced with the server
  • Players can get items from the environment
  • Players can get and give items to NPCs
  • Players can drop items on the ground (which other players will be able to see)

Or translated into Pivotal:

A couple of items appear on Pivotal that aren’t in the requirements list: Item RPC, and mouse-targeting reticle. These don’t deliver on the requirements, but are needed nevertheless as prerequisites.

--

--

Yuan Gao (Meseta)
Meseta’s MMO experiment

🤖 Build robots, code in python. Former Electrical Engineer 👨‍💻 Programmer, Chief Technology Officer 🏆 Forbes 30 Under 30 in Enterprise Technology