Long time, nothing written!
This is the development log for Alpha 0.0.0 of Sparse.
The big space between this and the prototype I was sending out was due to a very hectic year of university, which is now cooling down, and a large restructuring of the code. I was getting very unhappy with the architectural choices I made when starting out; partly because of more experience with the platform (C#, SDL2) and partly because of new features I plan on implementing, I decided to rewrite most of the game. As such, Alpha 0.0.0 features a lot of new stuff that wasn't in the old prototype, but doesn't have some of the cool things from the old version.
- Tools: previously, I was shoving stuff into the Update function, but now, no more! Tools are better defined as a special type of item that maps certain delegates to certain events. There's a lot of room to explore here, and I could write a whole post about just these. Currently, there's a tool for breaking blocks, placing blocks, and moving objects in the world.
- Navigation: this early version shows off a slice of a world map. You can travel to a large number of sectors in the game, and they're all saved to and loaded from the hard drive individually. This preserves the Minecraft idea of "things only happen close to the player" which helps with general performance and player understanding.
- Persistent block damage: another area with a lot to explore, both design-wise and technically. Having to build and maintain structures as they get damaged is something I haven't seen done (perhaps for good reason), but even if structures don't sustain continuous environmental damage, persistent damage makes things like splash damage effects more interesting.
- Small graphical changes: little things: the player's tool actually points, the player has can look up now, there's an icon in the corner showing the player's tool and whether they can leave the current sector.
- Packaging: the new version includes a system that scans and includes packages consisting of assets (images, music, fonts, text, etc), and JSON definitions for blocks, items, tools, and other stuff. Soon, I'll add a way for modders to include .NET assemblies that'll expand the capabilities of the game. This is the biggest change behind the scenes, as it required me to separate traits and functions of everything I wanted to be exposed. It was also the main goal I laid out back in Devlog #1, and it's coming along nicely from that, but is still maybe half finished.
- Not included: a bunch of UI stuff. I'm still messing with bits and pieces of the display system, and the game currently doesn't have a way to render text. This makes nice UI components difficult, and UI is usually less exciting than gameplay.
- Not included: inventories and items. This is partly because I haven't finished the UI yet, partly because the game doesn't exactly have a use for such things yet, and mostly because I haven't gotten to it yet.
- Not included: some small movement stuff. I haven't bothered reimplementing float yet, and there isn't a cap on energy. The physics in the world is pretty close to stock settings, unlike the highly tweaked version I was using in the old prototype.
My current priority is fixing, documenting, and extending code when appropriate, cleaning up after my rush to release on Saturday. After that, I'll implement some UI components and add more hooks to definitions: sectors are assigned a biome when they're created, but they don't do anything with it yet. Too, I can generalize a lot of tool functions, and expose them to JSON quite easily.
I'm also investigating different binary serialization methods on C#. System.Serialization isn't completely implemented under Mono, which means I can't release on Mac. This, combined with some issues it has with versioning (ie: it can't), means I think it's not suitable for an application where people are going to be upgrading saves with every release. Right now I'm looking into a C# wrapper over Google's Protocol Buffers (protobuf-net), but I haven't delved into that yet. However, I don't think the game is going to support upgradable saves until it enters beta, or at least until there's enough to do to warrant saving a world.
This was a lot easier to write than the last devlog, perhaps because I have a lot more to say.
You can download Alpha 0.0.0 of Sparse in the release thread.