1. Logic World
  2. News

Logic World News

Logic World Wednesdays: The Anniversary Edition

The Socket - Jimmy

This week I’ve added one of the coolest new components yet: The Socket. Sockets let you build modularly, with data interfaces and plugs.

[previewyoutube][/previewyoutube]

LogicScript components with hot reloading - Felipe

This week I’ve been working on LogicScript, our custom language for programming component behavior. I’ve created a wiki where you can find the syntax reference as well as some code snippets. One of the neatest things about LogicScript is that it can be hot-reloaded while the server is running, and I’ve made a video to demonstrate this.

[previewyoutube][/previewyoutube]

Popups - Jimmy

I’ve spent most of this week working on Logic World’s UI code, which has been badly in need of attention. There are many small fixes and improvements, but one of the niftiest new features is the Popups system.

Popups allow us to take an element of the user interface and “pop” it into the foreground. Other UI is darkened, to make the popped UI stand out, and clicking outside of the popped UI closes it.





Making the popups system was surprisingly difficult and intricate. Here are just a few of the things I had to worry about while programming it:
  • If a popup starts off-screen, it must be moved on-screen
  • If a popup is taller or wider than the screen, it must be compressed to a size where it can be viewed in its entirety, and a scrollbar must be added to it
  • If a menu closes while it has a popup open, that popup must close as well
  • If the screen resolution changes while a popup is open, the popup must resize itself appropriately

But after many many hours of programming, all of those worries and more are solved, and our popups system is robust and reliable.

Popups are a necessary prerequisite for some very important menus I have planned. You’ll be seeing those menus next week.

Quick Colors - Jimmy

This week I’ve had something of a shift in philosophy with regards to how players choose colors.

If you’ve been following Logic World for a while, you know that I’ve spent a lot of time and energy making the color picker a powerful tool. Indeed, I’ve succeeded in that; Logic World’s color picker is the most fleshed-out of any video game I know of. But my pride in my color picker has made me lose focus on how people will actually be using it.

When you go to change the color of something, you almost never want to bother with a huge complex interface for choosing from 16 million different colors. Usually you’ll just want to choose between the same 5-10 colors that you use everywhere else -- your builds aren't a hodgepodge rainbow of random colors, they use a specific and limited palette.

With this in mind, I’ve designed a massively streamlined color picker UI. It lets you choose colors in the way I described above, but it still gives you powerful control over the colors for the occasions when you need it.

For the first time since I started working on the color picker, ten months ago… I am 100% satisfied with how you change the color of things in Logic World.

[previewyoutube][/previewyoutube]

New Build Pipeline - Felipe


I’ve also been working on remaking our build pipeline. Previously we were using Semaphore for building and uploading the game, but we were running into issues with Unity license activation, since each build was performed on a different machine. This is the main reason we switched to hosting our own build server, since this way we could install and activate Unity with a GUI, making things much easier.

The server is currently hosted on DigitalOcean, and it’s running a Jenkins instance.



The new system should be finished and deploying builds within a day or two. Hopefully, this is the end of our build pipeline woes.

One Year of Logic World

As of last Saturday, it’s been one year since we announced Logic World.

It’s been a crazy and amazing year making this game for you. We both feel extremely lucky to be doing this, and to have a community as supportive and passionate as you. Thank you. Here’s to many more years of Logic World :)

Not coincidentally, it has also been one year since Bobby entered the world and our hearts. @Red_3D finished their amazing animation in celebration. Please enjoy this incredibly high-effort Logic World fan video!

[previewyoutube][/previewyoutube]


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

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.

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 Mystic Edition

A New Pursuit - Markku

Happy Wednesday everyone! This week I'm glad to share a sample of my piece called 'A New Pursuit'. It is somewhat of a departure from the musical style that I've adhered to over the past few weeks but it still maintains a few key musical elements that unify each piece. I hope you enjoy this piece as much as I did making it.

[previewyoutube][/previewyoutube]

Smooth Grids - Jimmy

Last week I made the world grid extend into the horizon. The astute reader will notice that I also changed the world grid from a checkerboard pattern to a solid color. I did this to hide some visual artifacts that were newly noticeable with the extended horizon.

The cause of these artifacts is somewhat complex, and has to do with how computer screens are made of a finite number of pixels. When the renderer looks at the grid, it has to decide what color each pixel is. With the colored grid, the color of a pixel can be one of the two grid colors. The problems arise when grid cells are very distant, and so appear small on the screen -- smaller than a pixel. When a pixel encompasses multiple cells of different colors, it only samples the color of one cell; thus, information about how the grid is supposed to look is lost and distorted.

The solution is to slowly bleed the colors of the cells into each other over distance. The smaller a cell appears on-screen, the less you render it as its appropriate color; gradually, you transition from two binary colors to a single color which is the average of the two.

This week I implemented this solution, and checkerboard worlds now look good from all angles!





Modding System Fun - Felipe

This week I’ve been working on an overhaul of Logic World’s modding system. Up until now, mods contained C# code that had previously been compiled into a DLL file. However, this means that our cloud system would have to compile mods when the user uploaded them, putting quite a bit of strain on our servers. In the new system I’m working on, mods will now instead contain the code in .csx files, which are C# script files.

When the client/server loads a mod, it will now automatically compile the mod’s raw source code in-memory and run it, removing the need for any DLL files. All Logic World mods are now distributed as source code; it’s impossible to hide malicious things in mod code, and it’s a built-in feature that you can easily modify and learn from the source code of mods you download.

Mods will now also be able to contain LogicScript files (.lsx) to use when defining logic components. I talked about this more in last week’s Wednesday.

The Oracle - Jimmy

This week I’ve added a highly requested component to Logic World: Oracles, which generate a random value when powered.

[previewyoutube][/previewyoutube]

I struggled for a while with whether to add these or not. It is possible, and very interesting, to build circuits which generate pseudorandom numbers. I worried that adding a component to generate random values would take away the need for that. I worried that fun and interesting gameplay would be eliminated.

Ultimately, however, I’ve decided that Oracles open more doors than they close. Besides, pseudorandom circuitry isn’t 100% obsolete; you still need it if you want your sequence of random values to be deterministic.

Bobby’s Birthday is this Friday!

Bobby, Logic World’s beloved protagonist and mascot, will turn one year old this Friday, April 10th. As we mentioned a few weeks ago, the lovely and talented @Red_3D is working on a celebratory short film to mark the occasion.



So, get excited for that, friends! Join us in the Logic World Discord this Friday to celebrate Bobby’s birthday and to watch the premier of the film.

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

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.

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 Foolish Edition

New Horizons - Jimmy

I wrote some fancy code that lets us extend the world super far into the distance. The horizon looks much better now, and it no longer gets closer when you move closer to it.

[previewyoutube][/previewyoutube]

Logic Scripting - Felipe

Mods in Logic World are mainly made in C#, including the code behind custom components’ logic. However, it can be a bit overkill having to compile an entire C# library for making a single NAND component, not to mention insecure as C# code can do pretty much anything. This is the reason I came up with LogicScript, a domain-specific language built for programming pure logic components, like logic gates, memory cells, etc.

Here’s a snippet showing off the language’s current features:

when in = 1010
# Set individual output bits
out[0] = 1
out[2] = 0
out[1] = in[2]

# Set all the output bits
out = 1010
out = 14' #The ' denotes that it's a decimal number instead of a binary one
end

# Other example case statements:
# when in = (1, 0, in[1], 1)
# when in = 12'
# when (in[0], in[1]) = 10
# when (in[2], in[1]) = 3'

I also plan on adding binary operators and some kind of memory registers for storing numbers.

The library as-is can execute the above script in 0.0003 ms, thus it can run 3,333,333 times per second. This means that, while it probably won’t be as fast as hard-coded C#, it’s still pretty damn fast. Even then, I still have a lot to do to optimize it, so that number will probably go up.

LogicScript will make it easy and fast to add new logic components, and it will make for more trustworthy mods, as there’s no way for LogicScript code to install a virus on your computer. We’ll still support C# logic components if you need to do something really crazy -- LogicScript isn’t a replacement, it’s an additional option.

AND, AND, and AND- Jimmy

This week I added two new AND gates to Logic World.

[previewyoutube][/previewyoutube]

Thanks to our beta testers for noticing this gap in logic capabilities. Anti-thanks for the serpentine creatures for interrupting production on that video several times.

I also modified the logic code for AND gates to support any number of inputs. This makes it super easy to mod in AND gates with even more inputs.


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

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.

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 Instrumental Edition

Instrument Sounds - Jimmy

My main project this week has been an overhaul of the code and assets we use to generate music sounds in Logic World.
[previewyoutube][/previewyoutube]
This was exactly what I needed after a month of working almost exclusively on boring stuff. I've had a really fun week, learning about audio synthesis and trying out different instrument sounds. I feel more motivated than ever to work on Logic World and to get it out into your hands.

Audio synthesis is a very complex subject, and I had a lot of help working on it this week. A huge thank you to Drogomir Smolken and the awesome SFZ community for maintaining a fantastic open standard and for being super friendly and helpful to noobs like myself. Thank you also to Sam Gossner from Versilian Studios for recording high quality instrument samples and generously releasing them for free. Finally, thanks to my dad, who helped me with some of the more difficult math :)

Settings Profiles - Jimmy

We’ve had UI for ages for switching your settings profile. This week, I finally made that UI functional.



Each settings profile is an independent list of settings. When you edit your settings on profile 2, your settings on profile 1 are unaffected.

Unexciting Things - Felipe

This week I’ve kept working on some unexciting things, namely optimizing SECCS (it can now serialize and deserialize around 10-20 times faster) and dealing with the cloud builds situation. For the last week or so the cloud builds have been failing due to Unity not correctly activating its license. We’ve contacted Unity support and hopefully we’ll have a solution for it soon.

Bobby’s Birthday

Bobby, Logic World’s beloved protagonist and mascot, will turn one year old on April 10th. The lovely and talented @Red_3D is working on a celebratory short film to mark the occasion, and it is looking very very awesome.



Red is posting daily updates on the project to their blog, which you should definitely go read right now!!

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

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.

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 V

The world flounders, but a beacon of stability shines brightly through the fog of panic and pandemic. That beacon is Logic World Wednesdays: ever on time, ever organized, ever punctilious. We are here for you when you need something dependable in your life.

Settings Menu Polish - Jimmy

This week I’ve made a number of improvements to the settings menu.

[previewyoutube][/previewyoutube]

The machine in that video was built by the lovely @woox2k :)

Tracker Improvements - Felipe

This week I’ve been working on improving the tracker website that the beta testers are currently using for reporting bugs and other feedback.

Firstly, this week I’ve beautified the main page. You can now see each ticket’s creation date, type, status and ID.



I’ve also added another property to tickets: it’s priority. It ranges from 0 to 5, from least to most important.



Thanks to these changes, it’s much easier for us to manage a large number of tickets. We can easily see what needs addressing.

More SECCS - Felipe


Last week I told you I was working on a rewrite of SECCS, our library for converterting arbitrary C# data into binary and back. This week I’ve continued this work and integrated the new SECCS into Logic World. It’s now correctly reading and writing all the packets, while also being much cleaner and easier to maintain! The next step is making it fast, since up to this point I’ve been focusing on readability over speed.

Robust Initialization - Jimmy

When Logic World connects to a server, there is a process of initialization wherein the connection is verified and established. Previously this process was very haphazard and error-prone; there were a number of cases where the initialization process would not complete properly and you’d get stuck on an infinite loading screen when you tried to connect.

This week I worked out and implemented a robust and reliable protocol for initialization. It’s a careful back-and-forth with verification at every step. It looks like this:
  1. Client requests connection with server. It sends approval information like the game version and the mods installed.
  2. Server approves connection
  3. Client verifies that the connection has been established
  4. Server sends the information needed to load into the game, such as the contents of the world and the other players currently on the server
  5. Client pauses processing of all incoming network messages (such as updates to the world) until it has fully loaded into the game
  6. Client informs the server that all is well and it has loaded into the game

This is on top of the UDP message reliability features built into Lidgren, our networking library.

Thanks to this new protocol, all the bugs with connection are fixed. You can connect to a server with other players in it, you can connect to a server with a huge world loaded, you can connect while someone else is disconnecting -- it all works as it should, and I am a very satisfied developer.

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

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.

See you next Wednesday!

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

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