Do It Their Way

Take a look at the most successful games out there – good examples are Minecraft, Fortnite – what do they have in common?

It’s not technology. It’s not beautiful graphics. It’s not novelty. It’s not even catchy gameplay.

COMMUNITY

If nobody is playing your game, what’s the point?

Making It Matter

I’ve been thinking a lot about this lately. If you’re a small studio, how do you create buzz? How do you get anyone to care?

One angle I’m exploring is modding. If part of the fun can be messing about with the game itself, it opens up a world of possibilities. If you can make a game people want to mess with, well that can show you where to go next.

They say Notch was against modding Minecraft at the start – and he also didn’t “get” Creative Mode, though players kept asking for it. Yet, he was wise enough, and open-minded enough, to give it a try. Both ended up being crucial to Minecraft’s story – and the strong following he built.

If It Ain’t Broke, Let Them Fix It Anyway

There are a number of pieces to this – 

  • Data
    Speed, scale, timing, quantity
  • Whole Level Design
    Can you share your level editor? You’ve got a level editor, right?
  • Graphical Elements
    Models, Animations, Particle FX, Shaders and Textures
  • Audio
    Sound FX – Music?
  • Logic
    Go beyond letting users change speed and timing – why not let them change the gameplay too? Whole genres have evolved out of modding (DOTA?)

So if you want to make a game moddable, that’s not something you very easily just bolt on. It works a whole lot better if you put the infrastructure in place at the start.

How Do You Do It in Unity?

Actually, it’s not something you see a whole lot on Unity. The big example seems to be Cities: Skylines. To be fair, those guys have done a lot of things you don’t often see in Unity. They’ve got a whole wiki on modding.

On the Data front, if you’re anything like me, you probably use a lot of ScriptableObjects in your code. (If not and you don’t know what that is, stop reading. You want to check out this vid right now. I mean it. Do it now.)

That’s cool – but how do you let users play around with the values. Json is a great choice – it’s baked right into the platform – but you need a strategy to keep it all in sync and hold it together. You probably don’t want to be serializing all your scriptable objects into individual Json files.

On the Models, Animations and so on, that’s something I’m still working on. I don’t really have an answer yet. uMod-2 looks nice – but the platform support’s a little limiting.

Audio seems easy enough – Resources.Load or WWW.GetAudioClip.

So I guess we still need to talk about opening the game logic itself. Assuming you’re not giving away the source code, you probably want some kind of sandboxed scripts.

Initially, I thought Lua was the obvious choice. It’s lightweight, highly portable and used in a number of gaming platforms. However, Unity Lua assets seem to have gone a bit dormant – looks like it’s about 18 months since anyone did anything over at MoonSharp

Then, I discovered MiniScript. Its author, Joe, is very active on the Unity scene and MiniScript is kept up to date and fully supported. He’s familiar with Lua and wrote MiniScript specifically to address some of its drawbacks. Full source code included.

It’s got its own, unique syntax. I thought that might be an issue, no editor support. But that was quickly fixed – I found I could easily modify the Lua highlighting in VS Code to quickly make MiniScript look pretty.

So we came in here talking about building community around the game you’re making. For me, it’s led to reaching out to Unity’s community. I ended up modding my editor to make my next game moddable.

 

Image courtesy of: https://www.flickr.com/photos/daveseven/2484183820 

>