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="x7Exruogc3g;full"]
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="Vf-ftZUrnzc;full"]
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="tgFdTIwcF4s;full"]
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="zxtcLOU4lqA;full"]
---------------------------------------------
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.
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="dkmG5KKaF1Q;full"]
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="wXyCWFR0gv4;full"]
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.
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.
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="8tSXiUXTHhY;full"]
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="ePVDzZw8Mgc;full"]
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.
My main project this week has been an overhaul of the code and assets we use to generate music sounds in Logic World. [previewyoutube="TCDRAnZxDuw;full"] 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.
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="w-HrTYwndhE;full"]
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:
Client requests connection with server. It sends approval information like the game version and the mods installed.
Server approves connection
Client verifies that the connection has been established
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
Client pauses processing of all incoming network messages (such as updates to the world) until it has fully loaded into the game
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.
Welcome back to another Logic World Wednesday! It’s been a busy week for Mouse Hat Games and we’ve got a lot to talk about.
But first! This week the Youtube algorithm blessed us with an auto-generated channel for Logic World. Check it out here, and be sure to subscribe. All future LW videos will be found there -- videos from us, from beta testers, and from anyone after May 1st who makes a LW video.
VLOG - Jimmy and Markku
We met up this weekend to hash out some details about the soundtrack, and we made a vlog!
[previewyoutube="UPuEffzhorA;full"]
A New Wave - Markku
Happy Wednesday everyone! This week I'm happy to share the full version of my piece heard in the vlog above. I hope you enjoy.
[previewyoutube="D6wGufLYfE0;full"]
Player Presence - Jimmy
I was sick of making responsible use of my time, so this week I made it so you can see your reflection in other players when they have SHINY BOBBY enabled.
Now that we were rendering your own player model, I was also able to let you see your own shadow.
But honestly this feels pretty weird. The shadow is a solid and unmoving circle, which we humans are very not used to seeing as our shadow. So I made it an optional setting, which is turned off by default.
Faster load times - Felipe
Some beta testers were reporting some ridiculously long loading times when connecting to a server. We presumed this was a SECCS performance issue. SECCS is my open source library for converting arbitrary C# data into binary and back. We use it for serializing and deserializing all the network packets, so when it was taking a long time to send a packet SECCS was the obvious culprit.
So I set on to investigate. Using a profiling tool for .NET I was able to find out the culprit for this, which to my surprise was the System.Array.Resize method. It turns out that Lidgren -- our networking library -- was allocating a buffer smaller than some big packets’ size, so every time some data was written to it it would have to expand, calling the method I mentioned. This lead to a lot of memory and CPU usage, as the runtime had to create a new array and then copy the contents over from the old one every time it resized.
I solved this by introducing a mechanism for approximately calculating an object’s size and creating a buffer big enough to fit it, reducing these resizings to 0. As a result, load times for saves have been enormously improved. In some cases this is as high as a factor of 10.
SECCS Rewrite - Felipe
While investigating the performance issue above I realized that the SECCS codebase has become a nightmare of Expressions and unreadable code, so I set out to completely rewrite it, this time with a clear goal of what the library should do and what it should look like. Plus, this time I’m focusing on writing tests for everything, so changes shouldn’t break anything.
This is pretty satisfying to see:
Color Accuracy - Jimmy
Before this week, the lighting of the scene had a BIG effect on the color of objects. You would choose a color, and the object would be a completely different color from the one you chose.
This has been bothering me, and this week I set about fixing it. I did some fancy graphics things and now colors are much more accurate.
Networking Abstractions - Felipe
This week I’ve also been working on abstracting the network system we use for communicating between the client and the server. This means that the game won’t tightly depend on Lidgren for networking, so mods will be able to plug in their own systems to either expand or completely replace the original system. For example, a mod could create a system on top of the existing one that encrypts the packets, or another system that uses a method for transporting packets which offers less latency at the expense of dropping packets. You could even use carrier pigeons if you wanted to!
We will use this abstraction in the integrated server, where we will be communicating between the client and the server using named pipes instead of UDP Lidgren connections. Named pipes are streams of data that two or more processes can attach to, sending and receiving data to and from other processes. This method has less overhead than a full UDP “connection”, which will allow the game to use less resources.
Analytics - Felipe
In recent weeks we’ve been getting a LOT of visits to logicworld.net. You can see this for yourself at https://status.logicworld.net/. In order to better understand why this is happening and how we can encourage it, this week I’ve been working on some internal analytics tools.
I added a service that reads Traefik (our edge proxy)’s logs and registers every request to a MongoDB database. MongoDB is a very flexible NoSQL DBMS oriented towards big data that allows us to execute some powerful queries. For example, we can take out the number of requests per referrer domain:
This flexibility will allow us to investigate traffic spikes and correlate them with other events.
For transparency, we are now collecting the following data about your visits to logicworld.net:
This data is purely for our own use in helping us grow Logic World. We will never give or sell your data to a third party.
Save Converters - Jimmy
This week we had to make some changes to the file format Logic World uses for saved worlds and boards. Our testers were very understanding towards the prospect of their saves breaking, but I wanted to avoid that, and I knew we were going to have more changes to the format in the future. So I took the time to add support for converters from one save format to another.
The update with the new save format shipped with a converter from the old format, and no saves were broken. In the future, it will be extremely easy for us to add a converter for new save format versions.
Server-side component data - Jimmy
This section is long and technical, so if that’s not your jam feel free to skip it. TLDR: I made the game faster.
Still reading? Okay, buckle up. Many component types in Logic World have custom data associated with them. Displays store their colors, Mounts store their height, Keys store what key they’re bound to, et cetera. For managing this custom data, we have a clever system where we supply a list of custom data types and the game automatically handles all the annoying bits where that data is turned into binary and synchronized between the server and all connected clients.
This system is easy to use, but unfortunately it is not terribly speedy. We were running into problems using it with Delayers. Most components only change their custom data rarely, when a player opens the menu to edit them. But Delayers’ custom data changes every simulation tick, because they are constantly counting how long they have been powered or unpowered for. Because of this, not only were Delayers far more CPU-heavy than necessary, but they were also flooding connected clients with data updates. Clients don’t need to know how long a delayer has been powered for; that data is only necessary for computing the state of the simulation, which is all done server-side.
So this week I set about making a technical upgrade to our custom data system. Now, server-side logic components can mark some custom data as being used purely for the simulation. For these variables, the component uses a standard C# field to store the data. Then, when the game is saved, the component serializes that field as binary. At no point is the value ever sent to the client.
Thanks to these changes, Delayers are more than 10x faster and the game uses massively less bandwidth when delayers are running. This was a lot of work but I am very satisfied with the results.
---------------------------------------------
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.
In case you haven’t already heard, this week we made the difficult decision to postpone Logic World’s release.
We’re sorry about this, but we’ve got our heads down and we’re working hard to make sure the game you play on May 1st is the best it can be.
More Bug Squashing - Jimmy
I again spent most of this week squashing bugs to make sure playing Logic World is a stable, smooth experience. There are two fixes that were particularly satisfying which I would like to share with you.
Firstly: chairs had been non-functional ever since I redid the player controller code in September. I fixed them up this week and made two important improvements to their functionality:
Chairs now work properly when they’re placed at odd angles
Your multiplayer model will now appear in chairs to other people
The next nice fix was to Mount resizing. When I added the checkmark to the resizing UI, it only worked properly for Horizontal Resizing. Mounts use Vertical Resizing, and their checkmark was broken.
I quite like the tiny new checkmark. It’s cute 🙂
Tracker - Felipe
If you didn’t already know, the closed beta for LW has begun. The beta is a period for reporting issues about the game, and so far this has been done in a plain Discord channel, but this has proven to be insufficient; for example, we don’t have a way of marking issues as solved. For this reason I have been working on a ticket system similar to GitHub’s issue system that allows our beta testers (and you too, in the future!) to report any bugs, feature requests or other feedback, which we can later resolve.
Server Docker Image - Felipe
Docker is a platform for running applications in containers, which are like virtual machines, meaning that each application gets run in its own little fake OS, isolated from the rest of the machine. These applications come in the form of images, from which containers are created. This week I’ve been working on making the LW server into an image, allowing users to spin up a server with a single command, provided they have a Docker installation:
Screenshots - Jimmy
This week I made a major upgrade to our screenshot tech. Previously, we were simply capturing what was currently being displayed on the screen and saving it to a file. But I wanted something more powerful than that.
Now, the game can render screenshots at any resolution. This is exciting because it means you can take very high-quality screenshots even when you’re running the game in low quality.
Here’s an 8k screenshot I took while playing at 1080p (click for full resolution):
The build in that image is a binary multiplier made by @TheWildJarvi :D
I also added 360° panoramic screenshots, which I think is pretty cool. You can see one below; click on it to view an interactable version in Google Photos.
Finally, I added the option to save your screenshots as jpg instead of png. This can massively reduce the size of the images even without sacrificing quality.
---------------------------------------------
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.
A few select individuals have gotten advance access to Logic World. These folks are helping us perfect the game by finding bugs and giving feedback on features. They’ll also be building contraptions to help us with marketing the game.
Beta testers have no restrictions on sharing their experiences, so from this week forward you’ll have a lot more Logic World content to look forward to!
Check out the first CPU in Logic World, built by @Mr_IO:
[previewyoutube="ZYqOWHymmT0;full"]
And check out this awesome synchronous program counter from @TheWildJarvi:
[previewyoutube="_XH41SKf2sU;full"]
Beta testers are often sharing screenshots and videos on the Logic World Discord, so make sure you’re hanging out there if you’re not already. Furthermore, we’ll soon be setting up Steam Broadcasting for Logic World, so keep an eye out for that.
Edit: Steam Broadcasting is live! Go to the Logic World Steam Page, where our beta testers are streaming their gameplay :)
Without further ado, let’s get into this week’s Wednesday!
When Time Waits - Markku
Hello everyone, and happy Logic World Wednesday! I'm happy to share one of my pieces called When Time Waits with you today. It's about the ephemeral moments in our lives when time seems to stand still. I hope you enjoy this piece and look forward to hearing what you think.
[previewyoutube="EXL-Bj20HB4;full"]
More Displays - Jimmy
For a while, we’ve had Panel Displays with up to 8 pegs, but our Standing Displays only went up to 4 pegs. This week I fixed that discrepancy, and added Standing Displays with 6 and 8 pegs.
Dedicated server on Steam - Felipe
Right after we got the Logic World game uploaded to Steam, I started working on also uploading the dedicated server. This will allow you to run a dedicated server on any platform directly from Steam, or also with the SteamCMD utility.
Movement Settings - Jimmy
I added some settings that let you customize how your player moves! [previewyoutube="taJnlpA55qs;full"]
Literally Hundreds of Bugs - Jimmy
In preparation for beta testing, I spent most of this week fixing bugs -- literally hundreds of them. For a while I’ve had a bad habit of ignoring bugs and thinking “oh, I’ll get to that later.” But this week I really sat down to grind out fixes; I wanted our beta testers to have the best possible experience when they played the game for the first time.
Of course, when they did play the game, they immediately found hundreds more bugs. So it was back to grinding.
Slowly but surely, Logic World is becoming a stable and bug-free product. With the help of our testers, I am confident that Logic World v1.0 will not be a terrible buggy mess :)
Mac OS Finished - Jimmy
Last week, I showed that I’d gotten Logic World working on Mac OS. I showed a screenshot of the main menu, but there were still many issues with the game. You couldn’t actually play the game; mouse input was frozen and no 3D geometry was rendered, among other issues. This week, I’ve fixed them all up, and there are (probably) no longer any Mac-only bugs! Just bugs that exist on Mac and also everywhere else.
Biiiiig shoutout to my friend Keaghan, who happily lent me his macbook for a week longer than he thought he was going to :)
Unity 2019.3 - Jimmy and Felipe
This week we upgraded Logic World from Unity 2019.2 to 2019.3. We did so initially in an attempt to fix a major bug (it didn’t work and we fixed it a different way), but it’s good anyways to be on the latest version.
Performance in 2019.3 has been noticeably increased, both in the editor and in compiled games. Logic World itself is faster now, but it’s also faster for us to work on.
There are a few more features of 2019.3 that we want to take advantage of in Logic World. You should be seeing those next week :)
---------------------------------------------
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.
I’ve worked on a number of things related to audio this week. Logic World sounds better than ever.
Output Groups
Sound effects are now divided into subcategories, and you can adjust the volume of these individually.
Music Component Spatial Audio
Singers and Drums are unlike other sound effects in the game in that the sounds are generated at runtime. Previously, their sounds would always play at full volume no matter where you were in the world relative to the component. But this week I’ve figured out how to hook these generated sound effects into Unity’s spatial audio system.
Music Components will now play at full volume in both speakers until you are 50 meters away from them. From 50 meters until 100 meters, their volume will gradually fade to zero. Within this range, the sound will also become progressively “spread”; it will play more in your left speaker if the sound is coming from the left, and more from the right speaker if the sound is coming from the right.
These changes really make music components feel like part of the world. The full volume range is still large enough that you can build big music contraptions that play at full volume, but they’re no longer able to teleport sound to your ears from hundreds of meters away.
Music Player
I’ve been working on the code that plays the music from Markku’s beautiful soundtrack. The music is streamed from disk; not only does this give you easy access to the music files if you want to play them outside of the game, but it allows mods to easily add music to the soundtrack.
I’ve also added an option called “Music Components Stop Game Music”, which is on by default. With this option on, a Singer or a Drum playing a note will cause the game music to quickly fade out if it’s playing. This way, your music contraptions won’t be blocked out by the game music.
RSS - Felipe
Back in August of last year I was working on the posts backend for logicworld.net I decided to implement an RSS feed endpoint, however I completely forgot about it until a couple days ago, so here it is! You can, for example, get the feed for the “Development Updates” forum at https://logicworld.net/Forum/1/rss.xml, and this is how it looks like:
You can import this feed into services like `Feeder` to get something like this:
Cloud Build & Deploy Completed - Felipe
This week I’ve finished our continuous integration system, which now also builds the server and uploads the whole game to Steam on all 3 platforms!
This is how the pipeline looks now:
As you can see, the build times for the Unity project have been significantly improved since last week, thanks to caching generated Unity files that are reused between builds.
And yes, the game is officially on Steam, including a separate package for the dedicated server!
Load game directly into save - Jimmy
I added some properties in settings.succ that let you load directly into a save file when the game starts, rather than having to go through the main menu.
This makes our lives easier when testing stuff, but hopefully it’s also a convenience to you :)
Server Features - Jimmy
This week I added a whole bunch of features to the server, most of them related to security/permissions.
Whitelist
Servers can now have a whitelist of players who are allowed to connect.
Banlist
Servers can now ban players and IP addresses from connecting.
Password Protection
Servers can now require a password to connect. Passwords are only sent over the network after being hashed with SHA-256.
Admins
Servers can now have a list of players who are admins. Admins can run commands on the server, and they will be sent the server’s console output, viewable in the client debug console. When you run an integrated server for a singleplayer game, you automatically have admin permissions.
Max players per server
Servers can now have a maximum number of players connected to them. If someone tries to connect to a full server, that connection will be denied.
Pause empty servers
Servers now have an option (enabled by default) to pause the simulation when there are no players connected. Servers will also no longer save the game or make automatic backups when there are no players connected -- nobody is changing the world, so saving or backing up would be redundant.
Information Screens - Jimmy
I’ve added some screens that tell the player important information about what happened to their game. First is the
error screen
, which lets the player know if there’s an error on startup or while loading a save. Next is the
disconnection screen
, which lets the player know if they’ve been unexpectedly disconnected from the server.
Mac OS - Jimmy
I’ve been fixing up the Mac OS version of Logic World! There’s still some work left to do, but here’s a picture of the game running on mac:
Shoutout to my friend Keaghan for lending me his macbook!
Linux - Felipe
I made it work on linux lol
Next week, I intend to make a bunch of VMs with different Linux distros, so that we can test on as many configurations as possible.
---------------------------------------------
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.
We’ve got a big Wednesday for you today, so let’s get started!
As We Change - Markku
Hello again, everyone! Thank you for your comments on my piece Endless Curiosity. I really appreciate the feedback. Today I'm happy to share another sample from the soundtrack. This one is from As We Change, a piece about the ebb and flow of learning new things. I look forward to sharing more of the soundtrack in future Wednesdays, and I look forward to chatting with you on Discord!
[previewyoutube="aBIu0EpK7Fs;full"]
Actual Clouds - Jimmy
This week I have been giving some love to the skies of Logic World.
This is still very much a work in progress. You’ll be seeing more gorgeous skies in future Wednesdays :)
Fake Internet Clouds - Felipe
This week I’ve been working on setting up an automated CI service. This service will automatically build (and optionally publish) the game in the cloud, which is super easy and convenient for us.
This is a picture of a successful build:
We are using SemaphoreCI as our CI provider. As you can see, we are currently building for Linux and Windows, with MacOS coming soon.
This is an overview of the stuff that happens during a build for a single platform:
Dependencies are built (LogicAPI projects, as well as Lidgren, our networking library).
The Linux version of Unity is installed, as well as the Windows playback engine
Unity is launched, which runs the build itself for the corresponding platform.
The GameData folder -- which contains the base game data like components, languages, etc -- is copied over to the build result.
The integrated server is also built and copied to be bundled with the game.
The resulting build is compressed and optionally uploaded.
(Note: steps 4 and 5 are not yet implemented)
We’re going to start beta testing very very soon, and during beta testing we’ll be building and deploying the game several times per day. So it’s important that this complex task is automated for us.
Website Error Handling - Felipe
Our website, logicworld.net, has had some issues in the past, like comments being duplicated and posts not working. More often than not the hardest part about solving these problems was identifying what parts of the site were causing the problem, which required digging into the logs to find out the exact message and stack trace.
This is the main reason I decided to implement an error logging system, which will gracefully detect and notify the user about any failed requests that have been executed, as well as helping us identify the errored request through the use of a request ID.
Game Flow - Jimmy
Thanks to Felipe’s excellent work on the integrated server (you can read more here), this week I’ve been tightening up the flow of the game between macrostates. We can now connect to an external server, then disconnect, then connect to a local server (singleplayer game). Furthermore, I’ve added loading screens and an error screen -- though neither is particularly pretty right now, so I’ll show those off when they are :)
I’ve also added the ability for you to run commands on an integrated server. Everything is now seamless; we’ve fully merged the client and server software into one smooth and sexy game. Of course, the standalone server software will still be available for those who want to run dedicated servers.
Hotbar Shortcuts - Jimmy
I added some hotkeys for managing your hotbar!
[previewyoutube="75ORqV2vvuw;full"]
With these hotkeys, I’m opening the selection menu less than half as much as I used to when I play the game. Once you get used to them, they’re a real time saver.
---------------------------------------------
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.