1. Logic World
  2. News

Logic World News

Logic World Wednesdays: We’re Back!

Hello Logicians! We are back from our break, and so are our Wednesdays. We’re more excited than ever to be making your game, and we’re hard at work on the remaining features and polish needed to get it into your hands.

We don’t have anything to announce right now with regards to Logic World’s release date. Please be patient with us; as soon as we know, you will know as well.

Balance at Last - Markku

Hello, all! Great to be back with some more music for the Logic World OST. This piece of mine is for solo piano and it is called 'Balance at Last'. It is about the mental clarity and fulfillment that we experience after overcoming something difficult. I hope you enjoy, and that you all are doing well.

[previewyoutube][/previewyoutube]

Better Delayers - Jimmy

Delayers are components that allow you to intentionally insert delay into a circuit, for clocks and for precise timing logic. When I’ve previously shown them off, delayers used a peculiar system: the length of a delay was chosen as a multiple of some constant coefficient. There was a delayer that delayed in increments of 10 ticks, a delayer that delayed in increments of 100 ticks, and a delayer that delayed in increments of 1000 ticks.



However, after extensive playtesting by myself and our testers, I’ve realized that this system just isn’t fun.

With every mechanic I add to Logic World, my goal is to enable possibilities. I want to create many different pathways for solving a given problem, each with its advantages and disadvantages. I want to open the door for people to find inventive solutions. When you’re playing Logic World, I want each little part of your contraption to be a meaningful and interesting decision.

But in the case of the old Delayers, there was no decision-making or problem-solving. There was a single, objectively best way of creating a desired delay: stack up delayers in decreasing magnitude until you had the total length you wanted. This was tedious, uninteresting, and frankly it created some ugly circuitry.

I’ve been thinking on the problem of delay for a while, and I think I’ve settled on a good solution. I’ve removed Long Delayers and Very Long Delayers, and regular delayers can now have a delay length of anything between 10 and 100 ticks -- they are no longer locked to multiples of 10.



The tedium of chaining together delayers of different types has now been streamlined, as you can now easily set the precise delay length you want. For short, precision-timing delays of just a few ticks, Short Delayers (1 tick each) are generally the ideal solution. And for the longer delays of many seconds and beyond, you’re now incentivized to build some kind of counter circuit.

In my playtesting I’ve found this to be infinitely nicer than the old system. The time I spend fiddling with delay lengths is minimized, which means I spend more time doing the interesting, fun parts of circuit building.

Server refactoring - Felipe

After coming back from my break, I decided that the server’s code was too ugly, so I decided to refactor a lot of it.

Since the server is made up of many more-or-less individual parts (for example, a save manager, a simulation manager, a network manager, etc), I set on to use Microsoft.Extensions.Hosting. This library is regularly found on ASP.Net Core, and it is used to manage many of an application’s aspects, from startup to shutdown. It also comes with a Dependency Injection utility, which allows us to join the previously mentioned parts of the server together, while keeping them decoupled to allow for easy replacement and testing.

Another perk of the new system is that the server can now generate a graph of the inner relationships between services:



(Dashed lines represent that the dependency is lazy in order to prevent cyclic dependencies)

Visualizing our architecture helps us to understand where things are messy and need better organization.


Saving Refactoring - Jimmy

When I removed Long Delayers and Very Long Delayers (see above), I was faced with a problem. The game had no support for the removal of existing components. If you tried to load a save that contained component types that were missing from the game files, it would stubbornly refuse, insisting that you must be missing a mod. I had to add an option to load the save anyway, and in doing so delete all components of the offending types.

However, as I dug into the code for loading saves, I was faced with an unfortunate reality: that code sucked. It was messy, it was tightly coupled, it was hard to read and hard to extend. There was also a lot of repeated/copied code between the server-side Load Sandbox functions and the client-side Load Board functions. I realized that I could either hack this new feature into the existing messy saving code, creating headaches and probably some bugs, or I could rewrite the whole damn thing.

Well, I decided to rewrite the whole damn thing. What was formerly one of the smelliest parts of our codebase is now clean and shiny and easy to use. Among the benefits of this rewrite are:
  • Faster save load times, particularly on machines with slower hard drives
  • We can now check if a save file is corrupted before loading it
  • Without loading the save, we can now extract various metadata, such as the number of components/wires in the save
  • Save format converters (discussed [here](https://logicworld.net/view/pst-000f007e/logic-world-wednesdays-selfreflection#save-converters-jimmy)) now also work with saved boards, in addition to worlds

So now that that’s done with, I can add that feature I was talking about in paragraph one. I’ll also be able to do a number of save-related things that have been on my wishlist for a while -- check back next week for those things :)

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

See you next Wednesday!

More Logic World Wednesdays

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

Logic World Wednesdays: The Vexillological Edition

Quick and Easy Multiplayer - Felipe
Last week I talked about a system that lets players play online hassle-free, and this week I’ve been working on integrating that system with the existing friends system. Now you can easily join a friend’s game through a couple clicks in the friends menu.

[previewyoutube][/previewyoutube]

Flags - Jimmy

I’ve added a new decoration component: the Flag!

[previewyoutube][/previewyoutube]

Transparent Resizing UI - Jimmy

At the suggestion of our beta testers, I’ve made the resizing arrows partially transparent, so you can see what’s behind them.






Bugs Fixed This Week
  • Fixed not being able to bind Keys to a key that would close its menu (i.e. the Escape key with default bindings)
  • Fixed the resizing arrow on Mounts pointing sideways instead of up
  • Fixed the Console being unavailable while on loading screens
  • Fixed the Console rendering underneath popups
  • Fixed closing the console by pressing Escape also closing some menus if they were open under the console


Upcoming Hiatus

Hi, Jimmy here. There’s some changes happening in my life that will have a big effect on Logic World’s development. I won’t be working on this game for the next few weeks, and as such, Logic World Wednesdays will be taking a hiatus. It will hopefully return in late August. Logic World’s release is also delayed, again. I don’t know when to.

I’m sorry that this is happening, and I’m sorry that I can’t tell you more right now. I will fill you in and give a full update on Logic World’s future when things are stable and I know what’s happening. Rest assured that all three of us remain very committed to Logic World, and it WILL be released.

This week’s edition is, I suppose, a season finale for Logic World Wednesdays. Thank you for all your support and love over the past two and a half years. I’ll catch you on the flippity flip.


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

More Logic World Wednesdays

Logic World Wednesdays: The Controlled Edition

Editable Controls - Jimmy

This week I’ve finally finished the user interface for editing your controls!

[previewyoutube][/previewyoutube]

As you can see from the video, the input system and the interface that supports it are incredibly complex. Programming it all was a very fun challenge.

New Website - Felipe

Over on https://logicworld.net/, we now have a brand new site! I've been remaking the website into a bunch of separate services (coded in Go), instead of the single big application that it was before. This has the advantage of being much easier to iterate on, as there is less code that has to be compiled for a single change, as well as being easier to test since each service can be tested independently from each other.

Perhaps most importantly though, is the fact that the site now doesn’t require JavaScript at all. It does use JS for some stuff but only QoL improvements: the entire site is 100% usable even with all JS disabled.

I’m still working out the kinks on the new site, re-adding missing features, and improving the visuals, so expect lots of updates to it in the near future. Now that the new site is live, I don’t have to worry about maintaining the old site, and I can focus completely on this new version.

Hole-punching - Felipe

This week I've also been working on the system that will allow you to join your friends' games. We intend for this feature to be as easy as possible to use, requiring just a single click from the user's point of view.

This is achieved through UDP hole punching, which bypasses the most common NATs and in turn removing the need for you to forward any ports at all. Hole punching consists of 3 parties: a client, a server and a master server. In our case, the client is the user that wants to connect to a game, the server is the user that's already in-game, and the master server is our cloud server.

When the client wants to connect to the server, it first sends a request to the master server and asks for information about the server (that has previously been registered). When this happens, the master also sends information about the client to the server, and finally they both are able to connect through the tunnel that has been established.

That was a very simplified explanation, if you want more details you can check out this paper that really helped me fully understand it.

The proof of concept is done: I have successfully joined another instance of Logic World running on a remote PC -- Bob, to be precise -- without any port-forwarding. The next step is to integrate this logic with the game UI and Friends system.

Bugs Fixed This Week
  • Fixed various issues with game input when there is no keyboard or mouse plugged in
  • Fixed not being able to bind Keys to buttons on a gamepad or joystick
  • Fixed not being able to bind Keys to mouse buttons or to scroll wheel actions

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

We'll keep releasing these weekly updates right up until the game comes out. To make sure you don't miss them, you can sign up for our newsletter or join the official Discord, and of course you can wishlist and follow the game right here on Steam.

More Logic World Wednesdays

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

Logic World Wednesdays: The Thursday Edition VIII

Workshop - Felipe

This week I’ve started working on the workshop part of the website. In the workshop you’ll be able to browse, comment and download the sandboxes, circuit boards and mods that people have uploaded.



Each workitem (that’s my term for all the items you can upload to the workshop) can have multiple versions, and each version can optionally have a (markdown powered) changelog.

To clarify, Logic World's "Workshop" is not the Steam Workshop, but an independent system that can be used by any platform the game is purchased on.

Lights out - Felipe

Dark mode automatically makes a website ~12x cooler. In an effort to maximize the website's coolness, I've added dark mode, easily accessible by clicking a link in the navbar.

For example, this is the same page as in the Workshop screenshot above:



As you can see, it keeps the same overall style of the light mode while being a lot easier on your eyes.

Custom Crosshairs - Jimmy

This week I’ve added a whole bunch of settings to customize your crosshair!

[previewyoutube][/previewyoutube]

This has been a very long time coming. Custom crosshairs is something that folks have been asking for, and something I’ve really wanted to add, for literally years. It feels very good to finally have them in the game.

New Sletter System- Felipe

As part of my overhaul of our web services, I’ve been working on a new system for sending out our newsletter. The new system is much simpler, and I’ve given the emails themselves a shiny new paint job!

Before:



After:



Bugs Fixed This Week
  • Fixed various errors with multiplayer and with reconnecting to a server
  • Fixed placing a Display crashing the server
  • Fixed being unable to load saves with Displays in them
  • Fixed "Draw Shadows on Additional Lights" setting being forced to off when "Draw Shadows" is turned off and then on again
  • Fixed pressing the "Open Screenshots Folder" hotkey causing an error if it was pressed before taking any screenshots

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

We'll keep releasing these weekly updates right up until the game comes out. To make sure you don't miss them, you can sign up for our newsletter or join the official Discord, and of course you can wishlist and follow the game right here on Steam.

View this post on logicworld​.net.

More Logic World Wednesdays

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

Logic World Wednesdays: The Well-Lit Edition

Keybindings Menu WIP - Jimmy

I’ve been working on a menu for editing the controls!



It’s still missing the very important feature of being able to actually edit those controls, but it’s now displaying the controls and that’s a start :)

It can display all of the fancy features of our input system: multiple buttons that must be pressed concurrently, bindings that reference other bindings, bindings that must be tapped multiple times to trigger, and multiple different bindings as options for a single action.



Being able to display bindings visually is not just important for the Edit Controls menu, but also for things like the in-game tutorials, where players will be told to press a given button to trigger an action.

Fun with Bob - Jimmy and Felipe

After building Bob last week, we’ve been working on setting up the software to get him building the game.

We’ve run into several unanticipated issues -- because of course we did, why wouldn’t we -- but on the whole it’s going well and it’s almost done. Bob’s computational performance on builds is very promising; he’s faster than our old build server by more than a factor of two.



Lighting Settings - Jimmy

As I was working on adding context and screenshots for translators, I came across a description for a setting that didn’t make sense. I did some further reading on that setting ("shadow cascades") and it turned out I had no idea how lighting works in Unity.

Well, I did some more reading, and now I have some idea of how lighting works in Unity. I’ve used my newfound knowledge to buff out our lighting settings: we now have seven total settings related to shadows, each with a helpful preview image and informative description.



Shadows are both extremely important to the visual fidelity of a game as well as extremely demanding on a player’s graphics card, so I feel it’s important to have extensive settings for controlling them. I always get a little peeved when a game just has “shadows: on or off” -- not to name names -- and Logic World will not be joining that club of shame.

Bugs Fixed This Week
  • Fixed being unable to select hotbar slots beyond slot 10 by double tapping or ctrl+tapping a number key
  • Fixed client throwing an error if you tried to run an autoexec.lsf
  • Fixed being unable to make pegs exclusive if they were part of a dynamic prefab (i.e. on a Panel Display)


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

Thanks for reading, friends! Happy Canada day.

We'll keep releasing these weekly updates right up until the game comes out. To make sure you don't miss them, you can sign up for our newsletter or join the official Discord, and of course you can wishlist and follow the game right here on Steam.

View this post on logicworld​.net.

More Logic World Wednesdays

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