Notes During A Slow Upload

Since I don’t have my own operations team, I’ve had to build my own ops scripts and tools. I’ve just made some changes to them to accommodate new hardware, so now I have to watch for bugs… and it takes many hours to do an entire build. So that’s fun.

In the mean time, here’s some random unimportant thoughts.

Bits are Bad (Or at least, limiting)

My first love was bit-math. When I discovered the concept in junior high, it was like voodoo magic. And all the time I was failing out of high school, I was filling notebooks with designs for BBS software, carefully packing everything into the fewest possible bits.

This made sense in the late 80s and early 90s. There wasn’t a lot of RAM to go around. It makes less sense now. You no longer need to bit-pack everything… but a lot of things can still benefit from it.

If you’ve ever wondered why you can’t stack more than 64 of a block in Minecraft, it’s because of bit optimizations. There are only five bits for the stack size of a block. (EDIT: not true, see comments.) They do this because they want to have a lot of stuff in the world, and saving a few bytes on every object can really add up.

In the previous iteration of the MMO engine (“Project: Frontier”), I also wanted to have a lot of stuff. So I used bits to represent each item in your inventory. Every item got 32 bits total: 16 bits determined the item’s type, 8 bits determined the stack size, and 8 bits were for “flags”, which are indicators like whether the item was soul-bound to you, or a temporary item, or so on.

That implementation is a pretty classic approach for MMOs to take, but it’s not good for Project: Gorgon. Items in this game have a million uses, and they need way more than 32 bits’ worth of info. So nowadays items can have arbitrary data attached to them. There’s no inherent size limit.

But the old 32-bit part is still there. Arrows can only stack to 250 because there’s only 8 bits for the stack size. And since there’s only 16 bits for type IDs, that means I can’t have more than 65,536 different types of items. I already have about a thousand… I could easily blow past 65k in a few years!

So I’m going to reorganize the bits… I don’t need the “flags” bits, they get done a different way now, so that gives me 8 bits of breathing room.

You might wonder why I don’t abandon it entirely. It’s only partially to save storage space — that’s not very expensive anymore. The bigger benefit is saving bandwidth. Most items in your inventory really can be completely described by just a type ID and a stack size. The networking protocol takes advantage of that to optimize how much data is sent between the client and server.

But if I ever end up with more than 4 million types of items, I’ll be really and truly out of bits. Well, I’ll have bigger problems at that point, I’m sure…

New Monsters A’Comin

Today’s server update adds a new sand-worm monster, which is one of the models for sale in the Unity store (from the ever-awesome Kalamona). The LOE team has also gotten me a new goblin and hag model, which I’m going to start integrating next.

The Legends of Etherell guys have been working out their animation pipeline — it’s not as easy as it might look, especially when we’re trying to reuse as many animations as possible between different models. But the pipeline they’re developing should work well for their own MMO also, so in some ways, I’m happy to be their guinea pig. There’s a few more monsters in their pipeline for me, including an orc, a treant, and I heard Vince is working on improving the wolf you turn into as a werewolf. Woo!

With the new monsters I’ll be finishing another section of the goblin dungeon, and starting on the third dungeon.

Kickstarter Part 2

I’ve spent a bunch of time this week trying to fix issues that show up for new players, because I’m hoping to start drumming up more testers this week. And from there I’m hoping to do another Kickstarter. This time, the MMO will be running throughout the Kickstarter duration, so it shouldn’t seem like vaporware.

I’m still working on the plans for that. I need to get it going, but the last one was … well, very stressful… so I’ve been putting it off a little. But soon!

About The Strange Order of Implementation

I hope that the stuff I’m adding is keeping testers reasonably entertained, but I know the order of implementation could be better: it’d be better to add more content, more areas, more dungeons, before adding yet more weapon types. But there’s a reason for the order I’m doing. Each step adds new tech. For instance, archery added fletching boxes that advance offline. That’s new tech! (And buggy… hopefully fixed today!)

And today, I added a seemingly-pointless feature: if you stand in a cooking fire, it burns you. I didn’t add this because I care whether you stand in cooking fires or not (because I don’t particularly care), but because it was a way to test other new tech. That tech is very versatile and will be important for the new super-boss encounter I’m working up to.

Other things have gotten blocked by tech issues; for instance, geology should have gone in by now, but it’s got some tech design flaws. (Geology will be the way you find most crystals and gemstones. Right now, gems just “show up” on the landscape, but that’s a stopgap.)

In addition to the new tech stuff, I’m also trying to add some new content every week. But man, it’d be great to have someone help me on that. I can only do a few NPCs worth of content a week while I’m doing all this other stuff. If the Kickstarter goes over the minimum, I’m hoping to use it to hire some content help.

Other Content In the Works

I have a lot of content in various states of implementation. Some of the short-list items are:

  • leather armor crafting
  • an update of the goblin dungeon
  • fleshing out the castle courtyard
  • fleshing out Sie Antry’s homestead (some of that happened in today’s update)
  • Myconians
  • mushroom farming
  • Some extremely silly new skills like Iocane Resistance
  • The first Ultra-Boss, complete with her own Fate Worse Than Death
  • A new quest line for animal-cursed players (giving them access to content that other players get later, so they have more to do while they’re cursed)
  • The Dickweed combat skill
  • Fleshing out Carpentry
  • Fleshing out Teleportation

and a few more.

As always, your in-game feedback is amazingly useful. I love it, keep it comin’! I’m really backlogged and unable to respond to all feedbacks right now, but I’m reading all of them, and replying to a large number.

Okay, looks like the script finished, so it’s time to put up the new version of the server. More later!

This entry was posted in Uncategorized. Bookmark the permalink.

6 Responses to Notes During A Slow Upload

  1. Kevin Reid says:

    Minecraft item stacks aren’t limited the way they are because of bit limitations — the stack count field goes up to 127, and editing it can get you such stacks in-game (this is often done e.g. to super-load dispensers in custom maps). The stacking limits are entirely game balance choices, and the powers of 2 are just aesthetic. The only technically-imposed stacking limit is that items with varying data (damageable tools, books, etc) cannot stack. Documentation.

  2. Eric says:

    Fair enough, thanks! I’ve edited the post. I remember seeing the bit mappings for block types when I was writing mods, and assumed those applied to items as well.

  3. Mouse says:

    I believe the resistance should be to Iocaine, not Iocane.

  4. sunnder says:

    Hey! I don’t remember how I found your game but I’ve been following it for a week or so and it looks like it has a lot of potential. I’ve got your blog on RSS so please don’t stop updating!

    An unrelated question: I’m also developed a small game with Unity and I was wondering what you’re using as your patcher? Is it an in-house tool that you created? Or something off of the Asset Store? Would really appreciate an answer, thanks!

  5. Eric says:

    sunnder – the patcher is custom-made by me. I could only find one project in the Asset Store that seemed related, and it looked like it hadn’t been maintained well recently. I used the Pro features of Unity to make it pretty painless — I compress each file as an AssetBundle and then stream it down if its checksum has changed. It’s pretty simple, but it doesn’t have a lot of moving parts that can get screwed up, either. I plan to release the launcher as a demo program in the unity store eventually. Still working out some kinks and adding features, yet. (I’m about to add Linux support, that’s the main missing piece.)

  6. sunnder says:

    Very nice! I guess I’ll need to learn about AssetBundles, scrounge up some funds, and get me a Unity Pro license then (which I would’ve needed for that patcher plugin in the asset store anyway). I’d be interested in checking out / testing your launcher once it’s available so I’ll keep my eyes open.