Logic World Wednesdays: The Checkered Edition

by @MouseHatGamesDeveloper2 years ago

Welcome back to another Logic World Wednesday! We’re back from the holidays, and the push for release is underway.

Checkerboard World - Jimmy

The world you’ve been seeing in the LWW videos has been sort of a placeholder. The ground was completely static, with no customization whatsoever.

This week I’ve begun an overhaul of the world, starting with a lovely ground shader. The shader supports custom colors, as well as dual-color checkerboard patterns.


When you create a world with a grid ground, you’ll be able to choose the color or colors used and the grid size. It’s worth noting that Logic World will support several different world types, and mods will have the ability to add world types. But that’s a topic for a future LWW :)

Modding API Consolidation & Documentation - Felipe

Over the holidays I’ve been working on documenting the Logic World mod API, known as LogicAPI. This documentation is done with XML comments in C#. When coding mods, Visual Studio will show what each method and class does while you’re typing. We are also going to upload a generated static site containing all of the documentation over at docs.logicworld.net. This is a preview of how it will look:


This site is generated by DocFX, and it will contain all the aforementioned code documentation as well as some concrete concepts that may require explaining.

We are also going to have a wiki at wiki.logicworld.net, which will contain broader modding guides and tutorials, as well as some other non-modding related info.

Tons of cloud stuff - Felipe

I have also been doing a big revamp of our cloud architecture:

  • We have migrated from having a single server to having two: Phobos and Deimos.
  • Migrated from a monolithic architecture to a microservices one, which means that we now have a small service for tasks like emailing, logging, storage, etc.
  • Migrated from regular Docker to Docker Swarm, allowing us to deploy these services very easily and scale them up by changing a single number in the configuration file. This will let us easily scale up the server to meet the demand if we find the need to do so.
  • Migrated from Caddy to Traefik as our edge proxy.

Initially these services were written in C# just like the web application is, however, when migrating to Traefik I realised that every single application we were using in the server was written in Go. Go is a language that’s widely used in reliable and widely used software like Traefik, Caddy and Docker. This sparked an interest in Go inside of me, so I spent a few hours learning this new language and rewriting the logger service. This service is the simplest, all it does is receive messages from all the services and log them to the database, so I thought it would be the perfect opportunity to dip my toes in Go. When I was done writing this I noticed that the service was using just a fraction of the memory that the C# service was while being a lot more CPU efficient. To sum up, 5 out of the 7 services we currently have are written in Go.

Don’t get me wrong, I still love C#, however it’s become clear to me that Go is much more tuned towards web server-side software development.

Refined Building Mechanics - Jimmy

I’ve done a pass of our basic building mechanics to ensure they are consistent, intuitive, and easy to use. Most notably, I’ve removed the Rotation Lock mechanic; the lock is now always on. Rotation Lock was sort of an awkward and unintuitive mechanic. It was sort of a holdover from when I was trying to copy Minecraft’s building mechanics, back in 2017. But Logic World has grown up a lot since then.

To help communicate the new objective nature of rotation, I’ve added a little compass rose to the UI with a pointer for the object placement rotation direction.

rotation compass.jpg

Notice the pointer above the hotbar on the left. As the inverter being placed rotates, so does the pointer.

If you’d like to receive an email each time we post one of these blogs, you can sign up for our newsletter. Be sure also to wishlist Logic World on Steam and join the official Discord.

See you next Wednesday!

More Logic World Wednesdays

@Broyojo2 years ago

yeah go is a very nice language for web servers. I run my web server with go too.

@pipe01Developer2 years ago

I’ve been really liking it so far, I thought it was going to be harder given how OOP C# is, but I love it

@shamus0302 years ago

I love Go - it’s probably my favorite language overall. I think the biggest thing holding me back from considering it the “most useful” language in my toolbelt is its lack of a good DI framework, and the overall lack of generics (which will change soon).

EntityFramework is also a huge help. Hopefully with the upcoming Go release, a suitable EntityFramework-like framework will pop up. I think that will be the breaking point. I never want to go back to writing manual queries, updates, etc.

@pipe01Developer2 years ago (edited2 years ago)

Go’s getting generics? That’s going to be awesome for making utility methods, although I’ve got to say I haven’t really missed them so far.

EntityFramework is also a huge help. Hopefully with the upcoming Go release, a suitable EntityFramework-like framework will pop up. I think that will be the breaking point. I never want to go back to writing manual queries, updates, etc.

Isn’t Gorm good enough? I haven’t used it but from what I can tell it looks pretty similar to EF except with worse migrations.

@shamus0302 years ago

Yes, Go is getting generics in the next major release (though it’s done in a kind of weird way…)

Gorm is good enough. But you have to jump through too many hoops and it’s very clunky IMO. I think it will be greatly improved when generics come along!

@Vykori2 years ago

I reaaaaaaally like that compass idea! I feel like that whole compass should rotate depending which direction the user is facing. that way the compass always makes sense.

and checkerboard floors ftw <3

@JimmyDeveloper2 years ago

After playing around with it a bunch more I’ve come to the same conclusion and the compass now rotates as you describe.

Might do a bonus LWW video to show it off…

@ForLoveOfCats2 years ago

What is the reason for the forward (for lack of a better word) axis on the compass rose being longer? My brain keeps thinking that it is displaying 3d axes!

@JimmyDeveloper2 years ago

Eh, I just liked it that way. I’ll probably play around with the design some more.

@ForLoveOfCats2 years ago

Does the rose rotate to point north?

@JimmyDeveloper2 years ago

Currently it’s static and does not rotate based on the player’s rotation. I personally think it works well, but it might change depending on how playtesters feel about it.

@ForLoveOfCats2 years ago

So the blue arrow’s rotation on the rose is not relative to the player’s position and rotation to the component? At this point I’m failing to see the usefulness as I don’t think it would be useful to use to judge the rotation of a component with say, the blot facing away from you, if the rotation of the indicator is not relative to the player.

@JimmyDeveloper2 years ago

In my opinion it’s nice visual feedback while you’re rotating the ghost. But I realize now that in the post I didn’t cover two much more handy use cases for the compass rose.

  1. When you’re placing on a smooth surface, the rotation actually is relative to the player

  2. When you’re cloning or moving a component, the rotation isn’t objective, but rather relative to the original component’s rotation. Here the compass rose indicates how much the rotation has changed compared to the original rotation.

If you don’t like it though, you can disable it :)

@ForLoveOfCats2 years ago

Ahhhh that makes a lot more sense

@JimmyDeveloper2 years ago

The checkerboard grid shader is the most complicated visual scripting I’ve ever done. Here’s what the shader graph looks like:

@Ry2 years ago

That Looks HUGE

@TheWildJarvi2 years ago

are most of the future updates before release cosmetic? Or will there be any more logic stuff to add? I only ask because I’m curious if feb 2020 launch will not be postponed.

@JimmyDeveloper2 years ago

Feb 2020 launch will not be postponed, we’ve done enough of that already. We’re working hard to release a great game on time, but if we can’t finish it we’ll cut features rather than postponing again.

If we do end up cutting features from 1.0, you can be sure they’ll come soon after in 1.1 :)

@ForLoveOfCats2 years ago

Multiplayer when!? /s /s /s