1. Logic World
  2. News

Logic World News

Logic World Wednesdays: The Christmas Eve Eve Eve Eve Eve Eve Eve Edition

(this blog was originally posted 2019-12-18)

Welcome back to another Logic World Wednesday! This is our last post before the holidays, and we’ve got some real goodies for you this week.

[h2]Draggable Colors and More - Jimmy[/h2]
Logic World’s color picker is something I keep coming back to and tweaking, but this week I think I’ve finally settled on its final form. I’ve shifted the menu elements around so that the HSV wheel is bigger, and I’ve packed the sliders together more closely to save space. I’ve also removed the ability to hide blocks of sliders; dynamically resizing the menu was causing some issues, and I literally never used the option anyway.

I’ve also added a number of new features to the color picker, including the much-requested draggable saved colors. You can see them all in this video:

[previewyoutube][/previewyoutube]

[h2]Mod Hooking - Felipe[/h2]
This week I’ve been working on the hooks system for mods. Hooks provide a way for mods to listen to game events, like placing a component or a wire, and optionally cancel it or modify it. Right now hooks are implemented through “handler” classes, which are abstract classes that contain a virtual method for each hook. Mods can then make classes that inherit a specific handler class and then implement any hook methods that they want.

This is an example of how a mod’s handler class may look like:


public class MyHandler : WorldHookHandler
{
private int Counter;

public override void OnPlacingComponent(PlacingComponentEventArgs args)
{
bool cancel = Counter++ % 2 == 0;

if (cancel)
args.Cancel();

LConsole.WriteLine($"A user is placing a component of type {args.ComponentType.TextID}, cancel: {cancel}");
}
}


This hook would stop the player from placing a component every second time they tried to. Handy for annoying your friends.

[h2]Player Identification - Felipe[/h2]
Up until now players in the server were identified only by a username they choose. While this works fine, if someone was to connect with the same username as you they would be able to impersonate you. Now players are instead identified by their logicworld.net user ID, which is unique to your account. You can sign in to the game with your logicworld.net account, and in the Steam version, you’ll be automatically logged in to logicworld.net with Steam.

Servers will also have the option to turn on “offline mode”, reverting back to the username identification system. This is useful in case logicworld.net goes down, as an offline server doesn’t need to verify the players’ identities.

[h2]Yet More Unexciting Code Work - Jimmy[/h2]
Last week I spoke of two very cool features I was working on, and I’ve continued that work this week. Unfortunately, I didn’t finish in time for LWW, but most of the architectural groundwork is now laid.

---------------------------------------------

Thanks for reading! We’re going to take a two week break over the holidays, during which time we intend to start beta testing. Logic World Wednesdays returns January 8.



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 join the official Discord and follow @LogicWorldGame on twitter.

See you next Wednesday!

View this post on logicworld​.net. More Logic World Wednesdays

https://store.steampowered.com/app/1054340/Logic_World/

Logic World Wednesdays: The Thursday Edition IV

(this blog was originally posted 2019-12-12)

[h2]Better Saved Colors - Jimmy[/h2]
The old system for saving colors, and managing your saved colors, just wasn’t working; it was too complex and too clumsy to use. This week I’ve redone it, using the same UI as saving Display configurations.

[previewyoutube][/previewyoutube]

I’ve also added a button for sorting your saved colors - which is a surprisingly complicated thing - and a button for choosing a random color.

[h2]Website Work - Felipe[/h2]
I’ve been working on some minor website QoL adjustments:
  • Post embeds on Discord, Reddit, etc are much nicer. before, after
  • The Facebook link has been smited from the site. More info
  • When logging in you will now be redirected to the page you were previously in
  • Comments will now be counted recursively in the comment section
  • All notification emails will now contain the reason why you got them

I’ve also been working on an updated “About” page for the site. This new page tells you a bit about us, and it lets your see our faces (to be revealed).



Unfortunately I haven’t been able to deploy these changes for this LWW (LWT?), but you can expect to see them shortly.

[h2]Unexciting Code Work - Jimmy[/h2]
I spent most of this week laying the architectural groundwork for two very cool features. I was really hoping to show at least one of them off today, but they just didn’t get finished in time.

These two features are the final building mechanics for Logic World, and they’ll complete the set of tools you have to manipulate the world.

---------------------------------------------

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 join the official Discord and follow @LogicWorldGame on twitter.

See you next Wednesday!

View this post on logicworld​.net. More Logic World Wednesdays

https://store.steampowered.com/app/1054340/Logic_World/

Logic World Wednesdays: Making Mods Bashing Bugs

Logic Maker - Felipe

As we discussed in a previous LWW, mods’ source consist of up to three Visual Studio projects as well as the assets and libraries you want to include. This week I’ve been working on a tool that lets you create these projects from a template and upload the source for it to be compiled: Logic Maker.



The UI is a WIP, it currently has no styles at all.

Logic Maker is meant to be a tool to aid you in creating and developing mods. While it isn’t necessary (you could for example just copy a template project), by using the tool you can create your mod solution with the features you want, and it will automatically output the minimal code to get your mod running.

Logic Maker can be used in one of two ways: through the UI or through the CLI. The UI is made with [Avalonia](https://avaloniaui.net/), which means that it’s completely cross platform and it will look the exact same way on Linux, Windows and MacOS. On the other hand, the CLI will let you perform the same actions as the UI, but with arguments instead of buttons:



In the future I’d also like for Logic Maker to let you build the project using the same Docker image that logicworld.net uses. That way you can locally verify your mod before you upload it.

Hover Tags - Jimmy

The menus in Logic World have many small, circular buttons with icons on them. When you’re like me and you programmed all those buttons yourself, this isn’t a problem, but if not, it can be a little confusing. What does the button with a gear on it do? What does the button with a folder on it do?

Back in the Dark Ages of Last Week, there was no way to know. That’s why this week I’ve developed a system for displaying more detailed information about a button when you hover over it.



The size of the hover text is configurable, as is the delay between mousing over a button and the hover text appearing. You can also disable hover tags entirely.

Camera Controller Upgrade - Jimmy

When you’ve saved a board, you can view an interactable in-game preview of the saved board in 3D. This week I’ve upgraded the camera controller used in these previews. It is now much more configurable, and it now supports moving the pivot position by holding right click and moving the mouse. This feature was already present in the web previews, which you see when you share a board online - interactive demo of that here.

I’ve also added a button to reset the camera position, and saved boards now remember where you had the camera when you saved them.

Finally, I’ve refactored the system for rendering the models so that it can also render a static image of the models. This will allow me to generate thumbnails for saved boards.

Bug Squashing Palooza - Jimmy

I’ve spent most of this week going through the game and fixing various bugs that have cropped up. Multiplayer bugs in particular have been getting my attention. The game has been through several major code architecture upgrades in the past few months, so there were a fair number of these.

Now, though, Logic World has reached a very stable state. The core gameplay is smooth, incredibly fun, and mostly without issues. It was important that I go through and clean it up this week, because we intend to start beta testing soon.

Website upgrade - Felipe

Previously the website was using the ASP.NET Core 2.1 framework, which runs on .NET Core 2.1. However .NET Core 3 came out not long ago, so I’ve been working on upgrading to ASP.NET Core 3.1. This update comes with a ton of performance upgrades, which means that logicworld.net can now handle 5x the amount of concurrent users!

---------------------------------------------

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 join the official Discord and follow @LogicWorldGame on twitter.

See you next Wednesday!

View this post on logicworld​.net. More Logic World Wednesdays

https://store.steampowered.com/app/1054340/Logic_World/

Logic World Wednesdays: The Kronky Edition

Oh yeah, it’s all coming together.

Logic World is nearing completion. All the various parts of the game are coming together to form a complete product, and we couldn’t be more excited about it.[/size]

Overhauled Display Menu - Jimmy

This week I’ve finished the new Display Menu; you can now save and load configurations for displays, making it easy to create multiple displays with the same color scheme.[/size]

[previewyoutube][/previewyoutube]

The completion of this menu marks a significant milestone: it is the last new menu for editing a component. Previously I’ve made menus for:
[/size]
Since even before we announced Logic World, “make a menu to edit component [x]” has always been somewhere on my todo list. And now they’re all done.[/size]

Integrated Server - Felipe

The Logic World game client doesn’t have any logic at all, it’s all handled by the server, which means that the client by itself can’t really do much. This server is a standalone .NET Core 3.0 project, which means that it compiles into its own executable. Logic World’s singleplayer mode is based on an integrated server, like Minecraft, which boots up every time you want to load a world.

This week I’ve finished the work of integrating the server with the client. The client can now spin up instances of the server and connect to them. This is an important milestone towards shipping the game - now, you can actually play it without starting up a separate server program in the background.

Sandbox Menu - Jimmy

Now that the integrated server is working, I’ve been working on menus for using it in singleplayer. The Sandbox Menu uses the same code as the Save Board and Load Board menus, so each world can have a title, a description, and a series of tags for sorting it. The list of saved games can also be searched.



This menu is still a WIP, you’ll see a video with it next week![/size]

Intro animation - Jimmy

I’ve made a fancy animation with our logos that plays when the game starts up.[/size]

[previewyoutube][/previewyoutube]

---------------------------------------------

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 join the official Discord and follow @LogicWorldGame on twitter.

See you next Wednesday!

View this post on logicworld​.net. More Logic World Wednesdays

https://store.steampowered.com/app/1054340/Logic_World/


Logic World Wednesdays: The Thursday Edition III

Welcome back to another Logic World Wednesday! Logic World grows closer to completion every day. This week, we've got a preview of the Logic World Theme, a look at the Main Menu and Languages Menu, and a story about the Bug from Hell.

The Logic World Soundtrack

Logic World is going to have a full original soundtrack, and today we’re excited to announce that the Logic World Theme is complete.

The theme is written by the incredible David Housden, whom you might know from his work on titles like Thomas Was Alone, Volume, and Q.U.B.E. Our game’s theme is a beautiful composition that captures the wonderment and complexity of digital logic. You can hear a preview in the video a little later in this post.

Logic World will also have an extensive suite of music that plays in the background during gameplay. These pieces will be written by a different composer. We’re not quite ready to talk about these pieces yet, but you’ll be hearing about them soon.

Main Menu and Languages Menu - Jimmy

This week I finally started work on Logic World’s main menu! I also added a menu for switching the game’s language.

[previewyoutube][/previewyoutube]

I didn’t realize before I made this menu how much the game was missing it. With a main menu in place, Logic World feels much more complete and polished. The game is finally really coming together, and I am so excited to be working on it!!

Felipe Martínez and the Bug from Hell

Programmers squish bugs all the time; it's part of the job. But once or twice in a career, we face a bug so evasive yet hostile, so powerful yet so unknowable, that it threatens the very sanity of the programmer. These are the bugs of nightmares. These are the Bugs from Hell.

This week, I faced one such bug.

It all started one lazy Sunday morning. I sipped my morning cup of coffee and stretched my fingers, preparing for another long day of work. I was expecting to spend the day working on SECCS and LICC, but as I started to write the first lines of code I noticed something was off. Out of nowhere came some bizarre exceptions, seemingly at random. I could only sit there and watch as the console flooded with red lines of text indicating how bad of a programmer I was. My heart started to pound as I wondered what the silicon slices in my CPU had prepared for me on this damned day.

I took a step back. “No, this can’t be right. My IDE must be messing up”, I foolishly thought to myself. I tried restarting the vessel of horror. As soon as it came back up I was once more greeted by the hundreds of errors. I could feel them glaring down at me. I frantically flipped through the pages of code, trying to find the source of these horrors. “Where are you hiding, you little bastard?” Something, somewhere, was eating chunks of data.

As you may already know, Logic World uses SECCS to read and write packets of data to and from the network. SECCS is composed of a number of type formatters that each take care of one or more types, and they operate with raw bytes. Each field of the object that you want to serialize is written one after the other by its corresponding formatter.

This bug consisted of a rogue formatter that was writing more bytes than it was reading, which means that the formatters that came after it encountered the wrong data. At this point anything could happen, as the data wasn’t correct, so some fields were set to be null when they really weren’t.

It turned out the issue was with how Logic World was using SECCS to read a certain LW class. Specifically, it was the type we use to index a circuit peg within the world. I’d accidentally left the code for doing this the same as it was before we switched to using SECCS for networking. It was reading bytes from the stream that it shouldn’t have been, which messed up everything that read the stream afterwards.

The result of 4 days’ work:



At last, the bug was conquered. It was a painful and arduous task, but the reward was undeniably worth it.

---------------------------------------------

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 join the official Discord and follow @LogicWorldGame on twitter.

See you next Wednesday!

View this post on logicworld​.net. More Logic World Wednesdays

https://store.steampowered.com/app/1054340/Logic_World/