TUXDB - LINUX GAMING AGGREGATE
 NEWS TOP_PLAYED GAMES ITCH.IO CALENDAR CHAT WINE TWEETS
 STREAMERS CREATORS CROWDFUNDING DEALS WEBSITES ABOUT
 PODCASTS REDDIT 

 

MENU

ON SALE

292 606 405 27



Name

 Logic World 

 

Developer

 Mouse Hat Games 

 

Publisher

 Mouse Hat Games 

 

Tags

 

Simulation 

 

Singleplayer 

 

Multiplayer 

 

 Co-op 

Release

 When it's ready 

 

Steam

 n/a 

News

 67 

 

Controls

 Keyboard 

 

 Mouse 

 

Players online

 n/a 

 

Steam Rating

 n/a 

Steam store

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

 


LINUX STREAMERS (0)


VIDEO REVIEWS


Youtube Creator (NAME)

Youtube Source (URL)



Submition needs to be reviewed before it it will show on the game's webpage!
Only accepting reviews of games played/recorded on Linux





Logic World Wednesdays: The Optimized Edition

Welcome back to Logic World Wednesday! Were hard at work on your game, and this week weve been focused on optimization.


Super Speedy Save Loading - Jimmy

Ive improved the time it takes to load into a saved game by about 50%.

[previewyoutube=ki0HPZN5pes;full][/previewyoutube]

Theres still more work to be done to improve this further, but Im very happy with the progress so far.


Socket Slowdown Solution - Jimmy

Sockets are a component that lets you plug circuits into other circuits. When a sockets conductive blue part is touching the conductive blue part of another socket, they form a connection, and signals can be transmitted through them.

Whenever a socket is placed, moved, or rotated, it needs to check whether its touching any other sockets, to determine if it should form a connection with them. Until this week, this was done by checking against every single socket in the world. This, obviously, is terrible; it means that the complexity of checking for socket connections increases exponentially as more sockets are added to the world. In nerdspeak, the operation was O(n^2).

Now, sockets only check against other sockets that are nearby. The world is divided into a 3D grid of cubic cells, and all sockets are indexed by which cell they are in. When checking for connections, a socket checks only against sockets in its own cell and in the 26 surrounding cells that have a point of contact with the base cell.

While this system is somewhat slower when youre in a world with just a few sockets, it critically does not get slower as more sockets are added to the world. Theres a hard upper limit to how slow the operation can get; in nerdspeak, the operation is now O(1). When you have a world with several thousand sockets, testing for connections is now massively, massively faster.



Fixing this fixed a lot of the slowdown when loading worlds, as can be seen above.


Even More Web Fun - Felipe

This week Ive been working on a bunch of minor website improvements:


  • All timestamps are now updated every 30 seconds to more accurately show the age of recent posts and comments.
  • The scroll position will now be properly saved and restored once the page is fully loaded when navigating to and from pages, or reloading.
  • Comment permalinks now work properly
  • Fixed quote formatting not working
  • Fixed comments not being sorted by date.
  • You can now edit comments, and the date and time of a comments last edit will now be displayed alongside the original post date.
  • Added Related posts column to all posts with a list of the newest posts in the forum that the current post is in.

Yet More Web Fun coming soon! Im having a great time working on the site, and I look forward to making it ever more awesome.


Cubic Chunks - Jimmy

All objects in Logic World are divided into chunks. A chunk is a single, solid, giant chunk of geometry in the shape of many smaller objects. You stupid, gullible players are tricked into thinking there are thousands of objects in a world, but in reality there are only a few dozen. Chunking is the major reason why were able to have thousands of components and wires in a world without lag; GPUs are much better at rendering a small number of complex objects than a large number of simple objects.

Before this week, chunks were assigned along a 2D axis. Picture a checkerboard grid on a plane within the 3D world. Each chunk existed as a column: finite along two axes, but expanding infinitely into space along the Y axis. But this week Ive overhauled the system to work properly in 3D: a 3D system for a 3D world.

This is an important step for optimization, and its already sped up performance somewhat by allowing for better frustrum culling in some situations. Its also absolutely necessary to properly support world types that have a non-standard floor shape -- such as a spherical planet, or the inside of a giant cylinder -- which is something I really want to do.

Ive also added a debug mode that colors all objects in a chunk with a random color, so you can visualize where the cunk boundaries are. I think it looks quite pretty :)





In the process of adding 3D chunks, I did a particularly satisfying refactor of our WorldRenderer class, which had grown very bloated and nasty in the ~1.5 years since it had been created. WorldRenderer used to be about 600 lines and do several different things; now its been split into four smaller, more focused classes, each 100-200 lines.


Packet Compression - Jimmy

This week Ive implemented LZ4 compression on many of the network packets sent between the Logic World server and the client. LZ4 is an extremely efficient compression library: it makes data way smaller in exchange for a very small performance impact.

However, the performance impact is not zero: its around 10% slower to serialize or deserialize a packet when using compression. So compression should only be used in the specific situations where the increased serialization time is outweighed by the decreased packet size.

I spent about a day trying to build a system that would automatically detect whether compression should be used for every single packet. However, this ended up being insanely convoluted and not worth the effort at all. Instead, were now using a simple system where some packet types are always compressed, and some packet types are never compressed.

My original code for this was kinda trash ngl, but as he often does, Felipe swooped in and made my code way cleaner and better organized. In the process, he also allowed mods to specify that their packet types should be sent compressed. Thanks Felipe!

Because of packet compression, it is now about 75% faster to download world updates from the server and to upload your world changes to the server.


Hotbar Customization - Jimmy

Ive started adding some customization options for your hotbar! The hotbar is some of the most used and most important user interface in Logic World, and its important that everyone is able to set it up exactly how they want it.



This is all part of my endeavor to refactor the hotbar code. The hotbar code is some of the oldest and worst code in Logic World, written at a time when I knew a lot less about coding and a lot less about coding user interface. It desperately needs to be cleaned up if Im to add features to it.


Bugs Fixed This Week


  • Fixed sometimes not getting your position set by the server properly when you load into a world
  • LogicSettings: fixed being unable to save or load settings with a value of null
  • The game won't complain anymore if you've added files to the Backups folder that don't conform to its expected folder structure

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

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/


[ 2020-10-22 06:27:28 CET ] [ Original post ]

Logic World Wednesdays: Bits and Bobbies

Weve had a productive week, working on various odds and ends throughout the game.

Multiplayer Menu - Jimmy

Ive been working on one of our last big pieces of user interface, the multiplayer menu!



(WIP!)

Ive also been working with Felipe on the code for learning information about a server before connecting to it, such as the MOTD and player count, for displaying in this UI. Unfortunately that stuff is really hard and we werent able to finish it for today. Once thats all done and integrated with the UI, Ill likely do a video showing off some neat features of this menu :)

Web Fun - Felipe

This week Ive been plugging away at our logicworld.net website, fixing bugs and adding features. I started by creating a temporary user page, like . Its still very much barebones though, I pretty much added it just to get rid of the 404 error youd get otherwise. I will be improving it over the coming days, allowing you to edit your bio as well as showing your post history. Last week I added comment deletion, however a bug prevented the delete icon from showing. I fixed this bug, and I then added post deletion and editing, with comment editing coming soon as well!



More Robust Save Loading - Jimmy

All components in Logic World have a standard set of data: the position in the world, the rotation in the world, et cetera. But many component types have additional custom data that they must save and load. For example, a Circuit Board must save its width, length, and color. A Switch must save its color and whether it is on or off.

For every component with custom data, that data is stored as raw binary, both in memory and in the save file. Every component has a CustomData byte array. This array is null for components without custom data, and full of binary for components that do have custom data.

For handling this on the API side, Logic World uses a very clever system: we define an interface type with the custom data that the component has, and at runtime, binary serializers and deserializers are generated for all the properties of that interface.

interface ICircuitBoardData
{
int Height { get; set; }
int Width { get; set; }
Color24 Color { get; set; }
}

class CircuitBoard : ComponentClientCode
{
public void SetDimensions(int width, int height)
{
// These calls to the Width and Height setters automatically
// invoke the binary serializer.
Data.Width = width;
Data.Height = height;
}

public void RageQuitIfBoardIsBlue()
{
// This call to the Color getter automatically invokes the
// binary deserializer.
if (Data.Color == Color24.Blue)
Application.Quit();
}
}

For a long time, theres been a major flaw with the custom data system: the automatic serializers and deserializers had no way to detect bad binary data. If a component tried to deserialize the binary data and ran into a problem, then best case scenario the data would be totally wrong, but most of the time there would just be an extremely unhelpful error and the save would fail to load. This would usually come up when loading an old save after we changed the custom data structure of a component -- for example, it happened to several of our beta testers recently when we added two new properties to the Flag custom data, the flag name and the option to include it in the teleport list.

This week I added some validation code when deserializing a components binary CustomData. Before and after deserialization, the save loader will validate that everything looks okay. If it doesnt, then that component is reset to its default data values.

With this change, game saves are even more robustly protected against corruption and against breaking changes from us and from mods. Its been on my todo list for a long time, and Im very happy to have finally implemented it.

Convertible Boards - Jimmy

A few weeks ago I spoke of a new system for force-loading worlds that have potential issues. Well, this week I ported that system to work with saved boards as well!



This ensures that your saved boards will always work; when our future game updates break them, there is already code and UI in place to convert them.

Persistent Hotbars - Jimmy

In Logic World, before you place an item in the world, you must add it to your hotbar.



Previously, the items on your hotbar would be reset every time you loaded into a game. But this week Ive made hotbars persistent! The data is stored in the save file in a nice human-readable format, alongside other player data such as a players position in the world and the direction theyre looking.

Ive also started work on the backend code for saving and loading hotbars, which is a feature I hope to add soon :)


Bugs Fixed This Week


  • Fixed "Cannot initialize Cloth: scale is zero!" issues
  • Fixed a rare memory leak related to the music player system
  • Fixed not being able to auto-delete old backups that were made with suffixes
  • Fixed your settings being reset every time you start the game
  • Fixed a save-conversion log message not being triggered when it should be
  • Fixed worlds being force-loaded always instead of just in appropriate situations
  • Fixed disconnecting while placing a loaded board creating permanent "phantom components" that cannot be interacted with but nonetheless lag up the world

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

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/


[ 2020-10-15 02:10:19 CET ] [ Original post ]

Logic World Wednesdays: The Reorderable Edition

Reorderable Lists - Jimmy
Ive added a slick new system for reordering a list of items using click and drag.

[previewyoutube=OuwZd50IHII;full][/previewyoutube]

Heavy UI Polish - Jimmy
While implementing the reorderable lists, I noticed many small inconsistencies and annoyances with Logic Worlds menus. Elements that were misaligned by a few pixels; scrollbars that had a tiny amount of slack where they should be fully expanded; state flows that required more mouse movement than I would like; buttons in inconvenient or ugly places. Because Im a crazy perfectionist, I spent about a day going through my list of grievances and fixing many of the issues.

Im pretty happy with the improvements. To me, at least -- because I know what to look for -- the UI is noticeably nicer to use.

Im rewriting the website again lol - Felipe
I have decided to rewrite the logicworld.net website completely from scratch one more time.

To help you understand how I arrived at this decision -- and how The Vuening will be superior to all the iterations before it -- let me tell you the story of my journey as a web developer...

[h2]The History of Logicworld.net[/h2]
Way back before we even announced Logic World (around October 2018), I started writing the logicworld.net website for the first time. I made it in C# using the ASP.NET Core framework and plain old server-side HTML templating. The server was completely monolithic, meaning there was a single executable that handled everything, from storing data in the database to sending the site to the users. The more I worked on it though, the more I was becoming limited by the technology I was using: the HTML pages were littered with Razor interpolations, and it was very ugly. For this and some other reasons, I decided to rewrite the site, this time using an SPA framework called Vue.js on March 21, 2019.

SPA means Single-Page Application, and you can read in-depth about them on Wikipedia. A typical website has many separate pages, each of which must be loaded independently by the browser. SPAs, on the other hand, load a single page and then dynamically update that pages contents based on what the user is doing.

The new, SPA-based logicworld.net was much nicer, the code was cleaner and everybody was happy, however the backend was still the same as the original. That code was also getting quite unmaintainable (after all, this was only the second web project Id ever done!), so the need of rewriting that as well was quickly growing.

[h2]The Kubening: The Final Form of Logicworld.net[/h2]
At this point, I scrapped every single line of code I had written for the website and started on a fresh new repository. I knew I wanted to go with a microservice architecture, since I started using it on the previous version (albeit too late) and I quite liked it, so a core part of the new system would be Kubernetes. Kubernetes is sort of a competitor to Docker Swarm, which is the service we were using previously and that took care of managing containers and spreading the workload over multiple machines. Docker Swarm is built-in to Docker, while Kubernetes is a completely separate system, and they both have one thing in common: their job is ultimately to create and destroy Docker containers.

This new system, with Kubernetes being very scalable and modular, allowed me to start writing the many services that would make up our cloud infrastructure (which were of course written in Go). When I started to write the main web service, I was faced with a decision: should I use an SPA framework like the old site, or a pure HTML based solution?

I started to contemplate the pros and cons of each solution and, as you might already know, ended up choosing the pure HTML way. It was not an easy, straightforward decision, but I chose pure HTML for the following reasons:


  • SPA sites are heavier on the first load than HTML sites. Since the main use for the site (at least right now) is to read LWWs you are unlikely to navigate much around the site, so the SPAs benefits of only loading assets once doesnt give it an advantage over plain HTML, and in fact makes it a bit worse.
  • Some people have JS disabled on their browsers (usually for privacy reasons), which makes an SPA completely unusable.
  • An SPA is a bit overkill for a games website.
  • An SPA communicates with the server via an API, which also has to be developed and maintained.

So, I got to work on the new site with plain old HTML and a Go backend. As time went on though, I found development on the site to be really slow, and the HTML templates were getting as complicated as they were in the very first C# version of the site. The user experience also wasnt very good, with the page reloading for every action you wanted to take. This brought me to reconsider the reasons I decided to go for the HTML solution.

[h2]The Vuening: The True Final Form of Logicworld.net[/h2]
After much consideration, I finally arrived at the following conclusions:

  • While it is true that the initial load time of an SPA is slower than a pure HTML site (sending 3-4 times the quantity of data), this advantage disappears once youve navigated to a couple more pages. Our envisioned future for logicworld.net is one where most people are doing a lot of page navigation, browsing forum posts and uploaded creations. When you consider that as the typical use case, the SPA actually wins for total data sent and total time spent loading pages.
  • Only a [very small percentage of people](https://deliberatedigital.com/blockmetry/javascript-disabled) have JavaScript disabled, so making such a huge decision to appeal to that small fraction of people does not make sense. While we support folks efforts to retain more privacy online, we ourselves are not actually stealing any data using JS, and the most important thing is that we have a functional website at all:
  • An SPA is *much* faster to develop new features for, see the below paragraph. I think that in the future when we introduce workshop features I will be very glad to be using one.
  • My worries about maintaining an API were partially extinguished when I decided to use GraphQL, which I will talk more about down below.

For these reasons, I decided to rewrite the site into an SPA using the new Vue 3 and GraphQL as the main libraries. To be clear though, this is only a rewrite of the *website* part of the whole system. Absolutely none of the other services (such as the forum database backend or the user account authentication service) had a line of code changed, which is a big part of the reason I was able to perform this rewrite so quickly. I wrote the new site *in less than a week* (I started shortly after publishing last weeks LWW). I was able to write the boilerplate code in a day and after that, progress was silky smooth, I had a functioning forum in a couple days. This is a huge deal, as it means we are now able to iterate on and improve the site very quickly, fixing issues in a much shorter time than before.

The new SPA does have some additional advantages, for example quicker navigation between pages and the future possibility of having new comments and posts appear in real time. Additionally, since we are now using a GraphQL API, third-party applications are now able to utilise it in case you *really* dont like JS (keep in mind we wont support them though).

We want logicworld.net to be a central hub for community discussions, with more depth and persistence than is possible with the real-time chat of Discord. We want it to be the best place to share your creations and mods with others. Im feeling excited and confident that this new website architecture will allow us to achieve this vision.

Check out our shiny new website -- it really is quite awesome.

Bugs Fixed This Week

  • Fixed other players not affecting flag cloth physics
  • Fixed not being able to see your own reflection in SHINY BOBBY
  • Fixed the loading screen not displaying when connecting to an external server
  • Fixed the "Disconnected" screen becoming stuck on if you used the console to connect to a server while on the disconnected screen
  • LogicUI: fixed HoverButton still registering ClickBegin events when EnableButton is set to false
  • Fixed some color picker menus not playing nice with menu resizing
  • Fixed being able to set the size of the Edit Display Configurations menu to so small that the UI would glitch out

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

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/


[ 2020-10-08 02:11:52 CET ] [ Original post ]

Logic World Wednesdays: The Formal Edition

Multiplayer Settings - Jimmy
Ive added a bunch of settings to control your appearance in multiplayer!

[previewyoutube=t5yYImXanA8;full][/previewyoutube]
This also marks the introduction of Formal Bobby. Formal Bobby is a smoother looking Bobby skin that is available as an option alongside the classic Casual Bobby. Let me know what you think of this new look!

Its a particularly special moment for me because this is the last tab of the Settings Menu that I needed to make. For months and months, the multiplayer tab has been empty save for giant text that says todo make this page. But now, Logic Worlds settings menu -- the menu that Ive poured so much time and effort and love into -- is feature-complete, with no more placeholders!

These settings are the first in a series of several multiplayer-focused features Im working on. Watch out for two or three more next Wednesday :)

The Logic World Original Soundtrack is complete - Markku
Hello everyone. This week I finished producing Logic Worlds OST. It has been an incredible experience to write this score and I cannot wait for you all to hear the finished product in its entirety alongside the game.

In the coming weeks, weve decided to post tracks from the OST one-by-one leading up to the games release with blog posts about each piece. Ill be talking about my compositional choices regarding instrumentation and harmony as well as sharing some early versions of the pieces to show how they evolved.

The soundtrack will be released on all streaming platforms on the same day as the game, and I hope that listening to it motivates you to revisit Logic World time and time again.

Talk soon!
Markku

Player Authentication - Felipe
This week Ive been working on a system that allows game servers to verify the authenticity of the users that connect to it. This is important for things like whitelists and banlists; server owners need to know that connecting players are who they say they are.

Originally, I was going to use a system similar to what Minecraft (used to) use, however this method involved both client and server talking to our servers. Though it was doable, this would have introduced quite a bit more complexity. The issue that made us reject this system is that the servers would need to be uniquely identified. At first, I thought we could just use the servers IP as this identifier. However, when I thought about it some more, I realised that this wasnt feasible as theres often more than one IP address that you can use to connect to a single server: the address on the local network is different from the external address, and servers can use custom domain names.

In the end, weve settled on a system that someone came up with 4 years ago on Reddit. In this system, when the client wants to connect to a server it first requests its challenge, which is a completely random string generated by the server. This code is then sent to our auth server, which generates a payload and signs it with a private key. This payload+signature pair is sent to the server, which verifies the signature with a public key. If the verification is successful, the server then parses the payload which contains the users info, including their username. This allows the server to be completely certain that the information that the user provided is legitimate, since it is signed using our auth servers private key. It also ensures that the server never has access to any information that could be used to impersonate the user, so malicious server owners have nothing to abuse.

So, Ive got the system all planned out, and over the next few days Ill finish implementing it. Ill see you on your servers -- and youll know for sure that its actually me ;)

Localization Updates - Jimmy
This week Ive given some love to our translations, which I admit Ive neglected somewhat since community translations began a few months ago.

On our community translation page, Ive updated the localization keys from the most current version of the game files. There are over 350 new keys to translate, including new components, new settings, and a whole lot of translations for the controls menu. Also on our community translation page, Ive added the languages Arabic and Belarusian, which were missing previously.

Next, Ive updated the display metadata for all of our languages. This includes stuff like the flag texture, the ISO 631-1 code, and the sample text.

Finally, Ive added an in-game button that links to the community translation page.



Thank you, so much, to everybody whos helped translate. I and the rest of the team are stoked to be launching Logic World in so many languages. You guys absolutely rock.

If youd like to help translate, please click here to begin! Youll get your name in the game credits, and our eternal gratitude :)

Bugs Fixed This Week


  • Fixed being able to manually enter values to an InputSlider that are out of its range
  • Fixed glitches when setting the min/max of an InputSlider at runtime
  • Fixed not being able to place Flags in tight spaces
  • Fixed various weird issues caused by Flag cloth trigger colliders
  • Fixed Flag cloth being cut off for hotbar renders of flags with a short flagpole or a long cloth
  • Fixed not being able to flag-teleport into spaces occupied by wires
  • Fixed Chair colliders not lining up well with the visual geometry
  • Fixed player looking direction resetting when exiting a Chair
  • Fixed Sandbox List menu throwing an error and not generating if there is a sandbox present using an outdated save format version which has a valid save converter
  • Fixed missing rocket ship icon in Create Sandbox menu
  • Fixed none of the Settings Preview Images working
  • Fixed the flippy part of switches not showing up in SHINY BOBBY when realtime reflections are enabled
  • Fixed background of Pig Flag being transparent instead of a beautiful sky-blue
  • Fixed missing description for the Open Teleport Menu and Open Load Board Menu bindings
  • Fixed missing localization for Delayers
  • Fixed incorrect hover tag localization key on the "show/hide sliders" button in the Color Picker menu
  • Fix embarrassing misspelling in title/description of movement setting (Analogue -> Analog)
  • Fixed part of the Edit Bindings menu not being localized

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

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/


[ 2020-10-01 03:11:25 CET ] [ Original post ]

Logic World Wednesdays: The Thursday Edition IX

Wednesday is a state of mind.

Fancy new inputs - Jimmy
Ive added two features to the input system that have been on my wishlist for a while: theres now proper support for gamepads or other analog input, and MIDI inputs now Just Work as if they were keyboard keys.

[previewyoutube=oiH68X_cVbs;full]{% youtube oiH68X_cVbs %}
[/previewyoutube]

Building Enhancements - Jimmy
Ive made a few additions to the building mechanics that help with the mass placement of components and wires.

[previewyoutube=saK3ek47CvY;full][/previewyoutube]

Yet Another Flag Video - Jimmy
I really love Flags, and I couldnt resist adding one or two more features to them

[previewyoutube=tflCBr0Rcdc;full][/previewyoutube]

Texture Optimization - Jimmy
Last week I mentioned that I was hoping to optimize the loading of Flag textures by converting them to DDS. Well, I decided to go a different route and use dynamic texture loading. Instead of loading all textures on startup, the game now loads textures only when theyre actually needed. The fastest texture is no texture. Tiny thumbnail images are loaded for the menu where you select a flag texture, but the full-size images are now loaded into memory only when you place a flag that uses them.

The RAM usage, VRAM usage, and startup time of the game is now almost identical to before I added 400 hi-res flag textures to the game files. In fact, its a little smaller. I am pleased.

Save file error handling - Jimmy
Ive completed the work I started three weeks ago on an overhaul of the save loading code and UI. The game can now detect and deal with errors in save files before theyre loaded.

Saves with issues have little notification symbols on them, which you can hover over for more information. Ive also added a UI in to explain when a save cannot be loaded due to an error.



And finally, Ive added UI for when a save can be loaded, but there might be problems with it. Ive furthermore added the code for dealing with those problems when you decide to load the save anyway.



Back That Save Up - Jimmy
You might have noticed in the above image that the button says backup and load. Well, that meant I had to code a proper backups system this week. It works like this:


  • Both sandboxes and saved boards are automatically backed up
  • Backups are stored in a unique folder for each item that can be backed up
  • There is a configurable number of backups to keep per item before old backups of that item start getting deleted -- by default this number is 10
  • Backups of deleted items will be kept for a while, then deleted. By default, backups of deleted items will be kept for 50 days.
  • Sandboxes are automatically backed up while youre playing in them; by default this happens every 5 minutes
  • Saved boards are backed up if they are being overwritten with a new saved board of the same name
  • Sandboxes and boards are backed up before they are deleted
  • Sandboxes and boards are backed up before they are loaded if there was a potential issue detected before loading

A proper backups system has been on my todo list for literally over a year, so Im very glad to finally get it done. I know my code isnt perfect, and its just a matter of time before it corrupts somebodys hard work. When that happens, the auto-backups will be there to save the day.

Still alive - Felipe
Hey guys, just checking to let you know Im still here. I started school last week so I havent had as much time or energy for LW lately. Regardless, Ive been working on improving the networking of the game (yet again), and Ive also been thinking about the modding tutorials, which well be starting on soon. Unfortunately I dont have anything to show off to you this week, but Ill be back soon with fun stuff!

Bugs Fixed This Week

  • Fixed not being able to place things very close to the top of Flags
  • Fixed flag hotbar rendering being based on the wind direction at time of render
  • Fix unnecessary lag while grid-placing Chairs
  • Fixed incorrect grid placing dimensions on Inverter, XOR Gate, D Latch, Oracle, Relay, 3-way AND Gate, and 4-way AND gate
  • Fixed sandbox title input field sometimes being way too small
  • Fix sandbox list order not updating when sorting by title and renaming an item
  • Fixed build pipeline being broken in several ways


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

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/


[ 2020-09-25 06:26:01 CET ] [ Original post ]

Logic World Wednesdays: The Short Edition

Hello, its me, Jimmy! I forgot to get Felipes section before he went to bed, and it took me the entire #$@& day to make a script for mass-exporting flag SVGs to PNG which left me no time to finish the two other features I wanted to talk about in this blog post. Well be back with a full-sized post next Wednesday, but today we have just the one lil section on Flag improvements. Hope you enjoy!

Flag Fun - Jimmy
This week I polished up Flags and gave them a use beyond decoration: they can now be used as teleport waypoints!

[previewyoutube=MYsz6TmUngI;full][/previewyoutube]
I was quite surprised by the journey that Flag development took me on. Flags touch on many different areas of the codebase: this includes various UI stuff, component resizing, component initialization (for the random flags on placement), player teleportation, the ExtraData system (described here, used for storing the order of Flags in the teleport list), the code for indexing and searching for items in a menu, and more. When I visited each of these areas, I stopped to make enhancements and fixes and clean up the code.

In particular, Flags forced me to have a really close look at the way Logic World loads textures from disk into GPU. Now that there are hundreds of flag textures, I can't get away with the original shoddy code; it's just too slow. So this week I spent a lot of time learning about textures, and at the end of it all I've improved texture RAM usage by about 70%, texture VRAM usage by about 90%, and the time to load textures by about 50%. I think I can get the texture load time down another 75% or so by storing the textures in .dds format, which minimizes the work the GPU has to do when converting the data into a format it can use.

I expected Flags to be a quick side-thing, but they ended up being one of my main projects this week. And I'm glad they did -- as a result, the entire codebase is more robust and solid.

Bugs Fixed This Week


  • Fixed the back side of Flags rendering without lighting
  • Fixed OrganizedList search results not updating when an item was added/deleted/edited
  • Fixed custom search tags not working due to outdated localization keys
  • Fixed NullReferenceException and glitchy behavior when trying to resize after reloading a save
  • Fixed timing issues with setting player rotation during teleport


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

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/


[ 2020-09-17 08:00:21 CET ] [ Original post ]

Logic World Wednesdays: The Alphabetically Sorted Edition

Super Sexy Sandbox Selector - Jimmy
Ive added a whole bunch of features and improvements to the Sandbox List menu!

[previewyoutube=pnsM4MpEQfU;full][/previewyoutube]

As I often do with UI design, I sketched the new Sandbox List menu on paper before I started making it in Unity. I thought it might be fun to show the sketch side-by-side with the finished product.



Networking Abstraction - Felipe
This week Ive been working on abstracting the networking layer that the game uses, which is currently Lidgren. This makes the code much easier to maintain and, possibly, replace, since the code that actually uses the networking stuff doesnt need to know whats actually carrying your precious bytes between the server and the client. For instance, the networking could now potentially be replaced with a backend that uses far less bandwidth, at the expense of higher latency and CPU usage.

Ive already talked about this in a Previous LWW, .However the route that I took back then involved some code that was making existing code even more complex, so it ended up stalling until I returned to it earlier this week. Now Im using cleaner and better code practices which, combined with last weeks refactor, makes for a great system.

Lightning fast MessagePack packets - Felipe
For some time weve been using our homegrown SECCS library for writing and reading packets to and from their binary representation. This library was based on the use of reader and writer methods like the ones the Lidgren library we are using provides. However, when doing the networking refactor, I found that it was hard to decouple SECCS from Lidgren, and at the same time I realised that my reasons for making SECCS didnt really hold up anymore. After lots of consideration, weve moved away from SECCS, and all network packets are now serialized with MessagePack.

This library, as they describe themselves, is "like JSON, but fast and small." That sums it up pretty well, since its purpose is to take an object and spit bytes out that can be used to reconstruct the original object. The difference from SECCS is that, as I mentioned, SECCS made use of Lidgens messages, which made it more efficient (or so I thought at first) but indirectly tied it to Lidgren.

I wasn't able to get benchmarks on SECCS vs MessagePack for this week, but I'll try to have them for next Wednesday :)

Bugs Fixed This Week

  • Fixed weird behavior on Windows when editing the description of an OrganizedList item
  • Fixed OrganizedList categories not being deleted when they're emptied
  • Fixed missing hover tag localization on "add new tag" button
  • Fixed Flags hanging from the wrong side


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

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/


[ 2020-09-10 02:00:30 CET ] [ Original post ]

Logic World Wednesdays: Were Back!

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

We dont have anything to announce right now with regards to Logic Worlds 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=g8qXyIuGXiE;full][/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 Ive 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, Ive realized that this system just isnt 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 youre 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.

Ive been thinking on the problem of delay for a while, and I think Ive settled on a good solution. Ive 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, youre now incentivized to build some kind of counter circuit.

In my playtesting Ive 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 servers 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 applications 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 thats done with, I can add that feature I was talking about in paragraph one. Ill 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/


[ 2020-09-03 04:24:30 CET ] [ Original post ]

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 Ive been working on integrating that system with the existing friends system. Now you can easily join a friends game through a couple clicks in the friends menu.

[previewyoutube=j2W0wGAbsDY;full][/previewyoutube]

Flags - Jimmy
Ive added a new decoration component: the Flag!

[previewyoutube=U5HeyU4Z-ys;full][/previewyoutube]

Transparent Resizing UI - Jimmy
At the suggestion of our beta testers, Ive made the resizing arrows partially transparent, so you can see whats 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. Theres some changes happening in my life that will have a big effect on Logic Worlds development. I wont 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 Worlds release is also delayed, again. I dont know when to.

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

This weeks 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. Ill catch you on the flippity flip.


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

More Logic World Wednesdays


[ 2020-07-23 05:56:24 CET ] [ Original post ]

Logic World Wednesdays: The Controlled Edition

Editable Controls - Jimmy
This week Ive finally finished the user interface for editing your controls!

[previewyoutube=hcEsP3EiXHc;full][/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 doesnt 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.

Im 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 dont 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/


[ 2020-07-16 08:21:39 CET ] [ Original post ]

Logic World Wednesdays: The Thursday Edition VIII

Workshop - Felipe
This week Ive started working on the workshop part of the website. In the workshop youll be able to browse, comment and download the sandboxes, circuit boards and mods that people have uploaded.



Each workitem (thats 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 Ive added a whole bunch of settings to customize your crosshair!

[previewyoutube=HOmuRXcCKME;full][/previewyoutube]

This has been a very long time coming. Custom crosshairs is something that folks have been asking for, and something Ive 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, Ive been working on a new system for sending out our newsletter. The new system is much simpler, and Ive 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/


[ 2020-07-09 22:24:00 CET ] [ Original post ]

Logic World Wednesdays: The Well-Lit Edition

Keybindings Menu WIP - Jimmy
Ive been working on a menu for editing the controls!



Its still missing the very important feature of being able to actually edit those controls, but its now displaying the controls and thats 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, weve been working on setting up the software to get him building the game.

Weve run into several unanticipated issues -- because of course we did, why wouldnt we -- but on the whole its going well and its almost done. Bobs computational performance on builds is very promising; hes 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 didnt 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. Ive 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 players graphics card, so I feel its 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/


[ 2020-07-02 07:28:02 CET ] [ Original post ]

Logic World Wednesdays: The International Edition

The Logic World Community Translation Project
Today, the Logic World Community Translation Project has officially begun!



The enthusiasm of the translators has been absolutely staggering. Its been less than a day since translations began, and already we have thousands of translation suggestions, seven languages with at least one suggestion for each translation, and several dozen individual contributors.

Thank you to everyone who has so far helped translate, and thank you in advance to everyone who is going to. We want folks to enjoy Logic World in whichever language they wish, and thanks to you, they will!

Component Resizing: Endgame - Jimmy
At the suggestion of the thoughtful @tokumei, Ive made some awesome changes to the Component Resizing interface!

[previewyoutube=We-MVkT-TFA;full][/previewyoutube]

This particular UI, I realize now, was a big blind spot of mine. For most of this games history, you couldnt resize things at all, and it was a big missing feature. Because of this, I saw any form of resizing as really good; I didnt realize how poor the interface was in comparison to what it could be.

Thats why Im so grateful to this community and all the additional eyes it puts on the project. To Tokumei, and to everyone else who has suggested features for Logic World: thank you!

In-game logins - Felipe
This week Ive been working on making the game connect to our servers, and the first step of that is to let users log in using their logicworld.net account. To do this, all they will have to do is press a login button in the main menu, and their browser will open with the login page. Once you enter your credentials and submit, you will be authenticated in-game!

We also considered having the login fields directly in-game. However, the login process is very complicated: it has to support creating a new account, resetting your password if you forgot it, sign-ins with external providers like Google, ect. It would be a lot of work to duplicate all this UI in both the browser and in-game, so were just using the browser login for both.

Friends list - Felipe
Many, many Wednesdays ago, I wrote to you about how I had started work on a Friends system for Logic World. This week Ive picked up on that work, and Ive added an in-game menu for all of your friends!



This menu will show you a list of your friends, including the profile picture they set on logicworld.net, their username and their current status (online or offline). I also want to make this status reflect what theyre currently doing, for example Playing with 5 people or Playing by themselves (this could of course be disabled in the settings). And, probably the best feature, youll also be able to join other peoples games through this menu (if they have enabled it).

Color picker square - Jimmy
I love triangle color pickers. I think they are completely and objectively better than square color pickers in every metric. Thats why, when I added a color picker to Logic World, I made the picker a triangle.

To my utter shock and disbelief, this week I had a few people tell me that they prefer the square color picker. These people are, obviously, completely wrong. But nevertheless I have added an option to use a square picker.



And of course, just like the Fun Spinny Triangle, there is an option for a Fun Spinny Square.

Sexy New Server -- Jimmy and Felipe
Weve talked before on this blog about our Cloud Build system: we write some code, we press a button, and a server somewhere automatically builds the game for each operating system and uploads the builds. Until now, weve been using a server that we rented from a company. But this had two problems:

  • Companies charge hella cash for high-performance server rental
  • Not having physical access to the machine made troubleshooting and problem-solving more difficult than it should be

    So this week, Jimmy built a new server for us. And if youre gonna build a server, why not make a vlog about building a server :)

    [previewyoutube=sPnkxg4gOeo;full][/previewyoutube]

    But building the hardware is only half the battle. Were still working on the software part: weve got the operating system installed, weve got all the networking configured, and weve successfully activated a Unity Plus license on the server (something we were never able to do on a machine we couldnt physically access). The next step is to set up all of Felipes fancy build software on Bob.

    Once thats complete, well finally be able to build Logic World quickly, reliably and cheaply. Any disasters notwithstanding, youll be hearing about the completion of this project next week :)

    Bugs Fixed This Week

    • Fixed 'Tried to add entity at invalid circuit state index' error, requiring a game restart, if you built a world with more than 10,000 concurrent circuit states
    • Fixed errors when you tried to resize a component with wires directly attached to it (Panel Displays)
    • Fixed board hitboxes becoming squished when you moved or placed a board on their edge
    • Fixed sometimes not being able to resize objects for no reason
    • Fixed being able to interact with Interactables that are behind players
    • Fixed various crazy visual errors when cancelling Multi-Wire Placing at stage 0
    • Fixed in-game changelog not rendering
    • Fixed the `MissingLocalizations` command incorrectly stating that present localizations were missing
    • Fixed the Configurable Menu scale slider label having an incorrect localization key
    • Fixed Resizable Menus always starting in fullscreen when the game is played in Europe

    Wait a second, did I read that last bug correctly?

    Yes you did! This is one of the most interesting bugs weve ever had in Logic World. Can you guess what caused it? We sure couldnt for several hours!

    Pause reading here if you want to think about it and try to solve the puzzle yourself :)



    We were going absolutely mad trying to figure out this bug. We each did the same thing, but got different results. Who could have guessed that the difference in our digital setups was the physical location?

    It turns out the culprit was different regions using a different character for the decimal indicator! The resizable menus save their size to a SUCC file. In North America, the menus were saving their size as something like 205.872. But in Europe, they were saving their size as something like 205,872. You can probably see where this is going: the numbers were saved using the local culture, but they were loaded as a global culture. So all of the values were being blown up by 3+ orders of magnitude!

    , and the bug was fixed.

    Sometimes, bugfixing can be delightful. When the symptoms are bewildering and random, but the cause (and fix!) turns out to be simple and logical thats one of the finest feelings in programming.

    Regular Logic World Streams!
    The lovely
    , a beta tester for Logic World, is now doing regular streams of the game! So far on-stream hes built a ), a binary adder, a tic-tac-toe machine and more; right now hes working on a playable game of ).

    In our biased opinion, Daniels streams are always tons of fun, and you should check them out! Follow him on
    Twitch and Twitter to be notified when he goes live.



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

    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/


  • [ 2020-06-25 13:29:25 CET ] [ Original post ]

    Logic World Wednesdays: The Grabby Edition

    Grabbing Rotations - Jimmy
    You can now easily move objects around, and their rotations are all handled properly.

    [previewyoutube=fxMjvSb0QtA;full][/previewyoutube]

    This is part 1 of 2 in my Grand Plan to Make Rotating Boards Less Awful and Difficult. You should be seeing part two next week.

    Generalized Packet System - Felipe
    To send data between the client and server, we use packets. These are small bits of data that the game uses for communicating things like when a player has placed a component. Previously, these packets were hard-coded, meaning that whenever we wanted to add a new packet type we needed to manually register it.

    A big issue with this approach is that mods were not able to add their own packet types. For this reason, Ive made this system more expandable: instead of packets having their own hard-coded ID they will be assigned an ID when the game starts. This will be very helpful for mods, as they will be able to send and receive their own data, independent from the rest of the game.

    Fancy Circuit Optimizations - Felipe
    This week Ive also been working on optimizing the code that does all the circuit simulation, namely the clusters system and the circuit states system. The most interesting one is probably the clusters one, since it involved more thinking rather than coding.

    Clusters are an internal structure we have within the simulation. A single cluster represents a group of pegs and wires all connected together. Since everything in the group will turn on and off at the same time, they can be treated as one object rather than several.



    Previously the clusters that needed to be updated were stored on a simple list, which stored references to all of those clusters. This worked just fine, however it wasnt the most efficient approach.

    Since we only ever iterate through the clusters one after the other, we do not need the ability to get, for example, the fifth cluster in the list. Instead, we only really need to know which cluster is updating first, and which one is updating after it. This is very similar to the concept of a linked list, since each cluster just has to store a reference to the next cluster. This is much more efficient than using a list, since all the operations we need are O(1) (which basically means it always takes the same amount of time, no matter how many clusters there are) on a linked list.

    Theres also a distinction between a doubly linked list and a singly linked list: an item in a singly linked list only stores the reference to the next item, while a doubly linked lists item also stores a reference to the previous item. In theory we would need a singly linked list since we only ever go forward when updating, however using one would mean that we wouldnt be able to remove an item thats not the first or the last one (for example when you remove a component and we need to remove it from the list, its very likely its in the middle). For this reason, we need to go with a doubly linked list.

    We could use C#s generic LinkedList class, however it could introduce more overhead with unnecessary features and end up actually being slower than our old way of doing it. For this reason, clusters will instead build their own linked list of sorts, manually storing the previous and next clusters that are updating. When we want to update all of them we simply get the first one, update it, then check which cluster is next and repeat until weve reached the end.

    I was going to make a cool graphic diagram to demonstrate the concept, but unfortunately Im far from a graphics designer so if youre interested Ive made a text document detailing what happens when you add or remove a cluster.

    This should also drastically improve the performance of Relays, as those components work by creating and destroying clusters. However, we haven't been able to get numbers on that yet.

    Bugs Fixed This Week


    • Fixed vertical flying controls getting "stuck" when Lock Flight Y Axis is off
    • Fixed Color Picker often opening by default to a white color
    • Fixed Gridlands worlds by default being created as pure white
    • Fixed boards flying away like a butterfly if you grabbed them at an angle that didn't immediately provide a reference location
    • Fixed crazy errors next time you load a save if you quit to main menu while placing a component
    • Fixed Edit Label Menu not doing "select all" when it's opened
    • Fixed fatal error when spamming the rotation key on buttons and keys


    PLUSHIE BOBBY
    The amazing -- whom some of you might know as NITRO -- has made a gosh darn plushie of Bobby, Logic Worlds beloved protagonist and mascot.



    Click here for another photo!

    This is pretty much the best thing ever and it has absolutely made our 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.

    View this post on logicworld.net.

    More Logic World Wednesdays

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


    [ 2020-06-18 12:43:20 CET ] [ Original post ]

    Logic World Wednesdays: The Buggy Edition

    Devilish Details #2 - Jimmy
    Its been one of those weeks where Ive combed through the game and added tons of small details and polish. I felt it was time for another video compilation of these :)
    [previewyoutube=lwhjQLhvCgs;full][/previewyoutube]

    Benchmarks - Felipe
    This week Ive been working on some performance improvements in the circuit code, but quickly I realised that I had no proper way of testing whether or not my changes actually made a speed difference. For this reason Ive made a simple framework for us and mods to add different benchmark cases. A single case is an interface with a method in it that does a single iteration of work (for example, creating a component), and the framework takes care of running a ton of iterations and measuring how long each one takes, then reporting that to the user.

    This framework is accessed by the user through two commands: 'benchmark' and 'stress'. The first command will run iterations in about 1 second groups, then average the time each group took and calculate the time each single iteration takes. This is fine for long jobs, but for jobs that are very quick to finish (like changing the state of a wire), the time per iteration is so small that it becomes cumbersome to measure and compare. Thats why theres the second command, which will instead run as many iterations as it can in 5 seconds and report how many iterations per second it achieved.

    These benchmarking tools will be invaluable in the coming weeks as we get serious about speeding up Logic World.

    Jarvi Makes a Mandelbrot, LIVE
    Our brilliant and very handsome beta tester @TheWildJarvi has embarked on an epic quest: to build hardware for rendering the Mandelbrot set in Logic World.




    Jarvi is livestreaming most of this process. If youd like to see hours and hours of unedited Logic World gameplay from someone who knows a heck of a lot about digital logic, you should check out his streams! The first few are already up on youtube, and you should subscribe to his channel so youre alerted of his future streams.

    Bugs Fixed This Week
    A member of our community recently suggested that we start including a list of bugs fixed each week in these blog posts. This week has been particularly bug-fix-filled, so it seems like a good time to try out the idea!

    Bugs with components


    • Fixed Oracles generating a new value when their circuit network is updated, i.e. by adding or removing a connection to their input
    • Fixed "ghost" display configurations on picked-up Displays with deleted configurations
    • Fixed Buttons and Switches making extra sounds when they are placed, rotated, moved, and when the sandbox loads
    • Fixed Buttons and Keys getting stuck on if they are rotated or flipped while being pressed
    • Fixed held-down Buttons and Keys going up if another player joins the game while they're being pressed
    • Fixed being able to press Keys when you couldn't see the actual key part
    • Fixed Keys turning on but not moving and not making sound when a different player presses them
    • Fixed being able to press Keys when they are visible only via their reflection in SHINY BOBBY


    Bugs with building

    • Resizing components: fixed holding shift to snap to square size not working properly\
    • Fixed wire ghosts sometimes having a different rotation from the wires they create
    • Fixed multi-wire placing outlines sometimes being the wrong color


    Bugs with the player controller

    • Fixed player jump sounds always coming from the world origin, rather than the position the player jumped from
    • Fixed players sticking to the ceiling when they jump into one
    • Fixed players falling at an inconsistent, and usually too fast, speed when walking off the edge of a platform
    • Fixed players decelerating in the direction they're facing instead of the direction they're moving
    • Fixed players accelerating too slowly when the game is lagging


    Bugs with the user interface

    • Fixed hover tags rendering behind popups
    • Fixed visual artifact on settings sliders when set to minimum value
    • Fixed terrible glitchy behavior when clicking on scroll bars
    • Fixed incorrect hover tag text localization key on "Add New Tag" button
    • Linux: fixed resizable menu custom cursors being gigantic and taking up half the screen


    Other bugs

    • Fixed positional sounds not getting quieter with distance
    • Fixed client's 'quit' command hard locking the application
    • Fixed component registry not properly detecting the error when a mod adds duplicate component IDs


    Please let us know what you think: is this list interesting to you? Would you like to see it return 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.

    View this post on logicworld.net.

    More Logic World Wednesdays

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


    [ 2020-06-11 06:04:56 CET ] [ Original post ]

    Logic World Wednesdays: Loggy Loggy Log Log Log Glog Glog

    Time and Science - Markku
    Hello everyone! I hope you enjoy my piece for the Logic World OST called 'Time and Science'.

    [previewyoutube=E2vEyGRL-tI;full][/previewyoutube]

    In addition to writing new music, I've recently been working on polishing some of my previous pieces for this soundtrack. I'm now completely done with 20 minutes of music for Logic World. The full soundtrack will be 40 minutes, so we're officially halfway finished! I'm looking forward to the next half and I hope that you're there with me on Logic World Wednesdays to hear some new tunes!

    Loggy Loggy Log Log Log Log thats fun to say out loud - Felipe
    This week Ive been working on making the game log the stuff its doing. Right now all the games output is printed directly to the in-game console (or the server console), meaning that if you, for example, wanted to print an error, youd have to explicitly specify the messages color every time you print it. Ive been working on a system that abstracts this, instead it lets you say print an error, and it will automatically print it to the console with the appropriate color, as well as to a file on disk. Mods will get their own dedicated logger, which means that it will be easy to distinguish between mods log messages. This is what the logs in the server look like:



    Knowing the messages importance level (trace, debug, information, warning, error or fatal) also lets us write some pretty logs to a file:



    Ive added a command that lets you change the log level (which by default is the information level), so that you can see the tracing messages that are hidden by default.

    Now that we have a proper logging system, it will be much easier to diagnose and fix bugs and crashes. Logs should also be a big help to modders who are trying to fix their mods.

    In-game mods menu - Felipe
    Ive also been working on a menu that shows all loaded mods. Its not complete yet, currently it shows you some details about the mod like its name, ID, version and priority:



    (The artifacts you see in the details panel are just some Unity Editor shenanigans)

    Logic Maker progress - Felipe
    Ive also been progressing on Logic Maker, the tool you will be able to use when working on your own mods. Ive decided to drop the GUI option (at least for 1.0 release), since I think it wont be necessary as the CLI app is very easy to use.

    I spent a while looking for a library for parsing command line arguments, but none managed to quite convince me. The closest one was Fluent Command Line Parser, however it still doesnt fully support subcommands (like [code single]git fetch -a[/code], for example). This is the reason I am developing Yaclip (Yet Another Command LIne Parser), a library for parsing arguments with a completely fluent interface. Its also able to automatically generate pretty help messages, this is Logic Makers help message (so far):



    Currently, Logic Maker allows you to create new mod projects from templates that you will be able to provide, as well as a default template that allows you to configure what you want and dont want to include in the mod. Youll also be able to add new components to your existing mod, although this will probably be overkill for simple components.

    Editable Display Configurations - Jimmy
    Building on last weeks work on Global Display Configurations, this week Ive added some fancy menus for editing those configurations!

    [previewyoutube=7fZ8kq5JGcE;full][/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.

    View this post on logicworld.net.

    More Logic World Wednesdays

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


    [ 2020-06-04 03:35:59 CET ] [ Original post ]

    Logic World Wednesdays: The Sad Edition

    Logic Worlds Release Delayed again.
    [previewyoutube=MiOyHekWejA;full][/previewyoutube]
    I felt it was appropriate to make a video about this rather than just writing a blog post. This is a major bummer, but its whats necessary for the game.

    Amazing New Displays - Jimmy
    Ive been working on an overhaul of Displays, to make them faster and easier to use. Its not quite done yet, but I wanted to show it off in a video anyways.
    [previewyoutube=eXonfiKGxoM;full][/previewyoutube]
    These new displays use the Extra Data system I described last week, and indeed they are the main reason for that system existing.

    Cloud metrics - Felipe
    This week Ive been working on adding some metrics to our cloud architecture. Metrics is a generic word for anything that gives us information, which in our case is a set of applications.

    First we have Traefik, which is the application that you connect to when you go to logicworld.net and that routes your connection to the back-end services. Traefik can produce some metrics, which Prometheus collects. Prometheus can be considered as sort of a metrics database, which stores the data it collects from the various sources and allows you to query it. Finally, we have Grafana, which is the front-end for all of this and allows us to create cool dashboards like these:

    Im also working on adding metrics tailored to the site itself, like comment count, post count, etc.

    Extensible Menu Settings - Jimmy
    Many menus in Logic World have a popup window to edit menu settings; you can see it in this recent video. Previously, all menus only had one setting, the scale slider, and the menu settings system was tightly coupled to the menu resizing system.

    This week Ive overhauled Menu Settings so that theyre more independent and open to extension. Any menu can add custom settings now.

    Currently Menu Settings still arent being used for anything besides the Scale sliders, but I have plans for a few custom menu settings. Youll likely see 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.

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

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


    [ 2020-05-28 09:04:54 CET ] [ Original post ]

    Logic World Wednesdays: The Thursday Edition VII

    And So We Danced - Markku
    Hello everyone,
    I'm glad to be back for another LWW music update. I hope you enjoy this OST sample and that it finds you in good health. This piece is called 'And So We Danced'. Talk to you all again soon!
    [previewyoutube=rCpTQbp94SE;full][/previewyoutube]

    Sandbox Menus & World Types - Jimmy
    Ive finally added a big missing feature: menus to create sandboxes and load your existing sandboxes! Each sandbox has a description box where you can write notes about it, and you can organize your sandboxes by tagging them.

    Additionally, when you create a sandbox, you now have the ability to choose its world type, and to edit settings about that world type.

    [previewyoutube=Ecn3CUqHmGw;full][/previewyoutube]

    New Epic Website - Felipe
    As I mentioned on a previous LWW, Ive been working on redesigning all the cloud infrastructure, including the main site. The current Logic World website is a Single-Page Application or SPA. This means that the site exists only on a single page, and the contents are updated using JavaScript. The new site, however, is being built to use JS as little as possible, and the entire site is guaranteed to work even when disabling JavaScript on your browser. If you do disable JS, you will only lose some QoL features, but the site will still be 100% usable.

    You can try out the work-in-progress new site at https://logic.world/. Please let me know what you like and dont like about it :)

    LogicScript: Ludicrous Speed - Felipe
    As I was adding features to LogicScript, its performance kept going down. Previously LogicScript was an interpreted language, meaning that scripts didnt get compiled beforehand and were instead parsed and run. This has a high performance overhead, since we need C# code thats reading the script and executing the instructions. For this reason, this week Ive been working on making LogicScript code compile to CIL, which is the same kind of code C# runs as after being compiled. This means that when you load a script it first gets compiled in-memory, and when it gets run it is much, much faster (about 30 times so!).

    Extra Data - Jimmy
    This week Ive added a very fancy and versatile system to Logic World, which I call Extra Data. Extra Data is a set of arbitrarily-typed data that is stored with each save file. Currently it is used to store world settings -- see above -- and I'm working on a few more exciting applications for it.

    Extra Data is easy to use from code, but under the hood its enormously complex. Anybody connected to the server, as well as code running on the server itself, can update the Extra Data. When this happens, it has to be synchronized between all of the connected clients, as well as the servers master copy saved to disk. The primary source of complexity is the fact that the data can be of any type: the system has to work for numbers, text, colors, lists of lists of six-dimensional vectors -- whatever you throw at it, Extra Data can handle it.

    Extra Data is stored on disk as SUCC, so its all very nicely formatted and easy to edit if youre the kind of person to muck about with save files.

    Extra Data is fully accessible to mods.

    This system was far more difficult to program than I anticipated. I initially budgeted six hours, but it ended up taking three very long and stressful days. This is the cause of this weeks record-settingly-late Wednesday. Sorry about that

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

    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/


    [ 2020-05-22 10:06:42 CET ] [ Original post ]

    Logic World Wednesdays: The Blurry Edition

    Background Blur - Jimmy
    I like my menu backgrounds how I like my coffee: dark, blurry, and with four or five different settings to configure how they look.

    [previewyoutube=SgKcL3T6FOE;full][/previewyoutube]

    More Menu Updates - Jimmy
    Ive completed my quest to update all of Logic Worlds user interface! This week I tacked some more complicated menus compared to last weeks updates.

    You can click on each of these images to view them in 4k.






    When I updated the console, I fixed a longstanding and very annoying issue with resizing it. Resizing the console is now very satisfying:

    [previewyoutube=AmvuJKYUh50;full][/previewyoutube]

    I am happy to announce that 100% of Logic Worlds UI now meets my standards for quality and usability. In my opinion, these last few weeks have seen the UI go from passable to pretty good. I am pleased.

    All of the code and assets used to make the games menus are part of a package called LogicUI, which we will release for free sometime after Logic World launches. Weve spent a lot of time and effort developing these systems, and we hope theyll help others make great UI for other games.

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

    Bit of a short update this week, but weve got some exciting things cooking for you. Stay tuned for a very awesome next Wednesday!

    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/



    [ 2020-05-14 03:20:15 CET ] [ Original post ]

    Logic World Wednesdays: The Thursday Edition VI

    Socket Shenanigans - Jimmy
    Recently I added Sockets to Logic World. This week Ive improved their logic for connection detection, and Ive started experimenting with bigger socket sizes.

    [previewyoutube=DhmtM7Z0sj4;full][/previewyoutube]

    As shown in the video, Sockets can now detect whether two world-space squares, both with arbitrary rotations, are overlapping. This is the hardest math Ive had to use in a while, and Im very happy I got it to work so well :)

    Modding Documentation - Felipe
    This week Ive worked more on the modding documentation, and its now public at docs.logicworld.net!



    The docs arent finished yet, but they do have a Getting started tutorial to give you an idea of how mods will work, as well as all the reference documentation for the LogicAPI assemblies, which mod code will use to interact with the game.

    Right now the docs only briefly mention C# scripting, and in the coming days I want to write some tutorials and other reference documentation about the different systems that make up Logic World.

    UI Themes - Jimmy
    A little over a year ago, I showed you a system for switching the palette of colors Logic World uses in its menus. This system exists by necessity; we need an easy way to ensure all of the menu elements use the same color, and that same ability lets us switch those colors whenever we want.

    This week Ive finally added the in-game option for switching the UI theme! Now, you can customize the menus to look however you want.

    [previewyoutube=s0OZCcQNzn8;full][/previewyoutube]

    Themes are stored in simple text files like this, and mods can easily add custom themes.

    Menu Redesigns - Jimmy
    Ive continued my work from last week in redesigning game menus. Some of these old designs were over a year old, and Ive learned a lot in that time about UI design and programming. It's been very satisfying to apply that knowledge and bring old work up to my new standard.

    You can click on each of these images to view them in 4k.






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

    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/


    [ 2020-05-08 06:42:50 CET ] [ Original post ]

    Logic World Wednesdays: The Sexy Menus Edition

    This blog was originally posted last week, but I forgot to post it here on Steam. This week's Logic World Wednesday will be coming tomorrow, on Thursday.

    Travelers Peak - Markku
    Hello everyone. This week's piece is called 'Traveler's Peak'. It is one of my favourites so far in this soundtrack. I look forward to chatting with you all on Discord, and I hope you enjoy my piece.
    [previewyoutube=17YJoAuT9_c;full][/previewyoutube]

    Sexy sexy menus - Jimmy
    Ive spent most of this week working on Logic Worlds UI. Since I started designing it over a year ago, Ive learned a ton about UI programming and design, and Im now going over all the existing UI to apply those lessons.

    Logic Worlds UI is now better-looking and easier to use. Its also, in general, much smaller. One of my major mistakes early on was designing the UI in a non-fullscreen environment, which meant that once it was expanded to fullscreen, it was much too big.

    One particularly delightful upgrade is the new Edit Component menus. They can now be moved and resized just like windows in your operating system.
    [previewyoutube=Z0Abnjcjzr4;full][/previewyoutube]

    Web Services Overhaul - Felipe
    Ive started rewriting our cloud architecture, getting rid of the main and bulky web service and migrating to a completely microservice oriented architecture using Go, Micro and Kubernetes. Were also using DigitalOceans managed Kubernetes service for this, which abstracts away the concept of individual machines for the most part. This means that our services will be able to automatically scale up and down depending on our needs.

    Ive decided to do this rewrite because right now we have a single monolithic service (the one that serves the logicworld.net page), which is hard to scale since its got a lot of functionality. The switch to Kubernetes from Docker Swarm also means using a newer technology thats been built from the ground up to support the microservice architecture, and while its a lot harder to learn at first, its also a lot more powerful and flexible.

    Modding Updates & Documentation - Felipe
    This week Ive been working on making the game files themselves a mod. This helps us ensure that the mechanisms we use for loading mods work properly and have all the required functionality. Ive also been improving the modding documentation, Im in the process of documenting all the SUCC files that mods can have. This includes files to add components, settings, instruments, game translations and more.

    Well be releasing modding documentation as soon as its ready, but Im not yet sure when that will be.

    Beam Me In A Given Arbitrary Direction, Bobby - Jimmy
    Last week I added teleports to Logic World. Once our beta testers got to try the feature, they told me they wanted a more fluid and simple way to teleport, one which doesnt require someone to manually type in coordinates.

    This week Ive added just such a teleport, which takes you to whichever point youre looking at.

    [previewyoutube=vVkXW42TK0g;full][/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/


    [ 2020-05-07 02:24:43 CET ] [ Original post ]

    Logic World Wednesdays: Beam Me Up, Bobby

    This week we have made the unfortunate decision to postpone the release of Logic World again. The new, and with any luck final, launch day is June 12. Read more in the official announcement.

    Player Positions - Jimmy
    This week I finally added a big missing feature to Logic World: when you exit a world and then enter it again, you will now be in the same location you were when you left. This also extends to other player position values like the direction youre looking in, whether youre crouching, and whether youre flying. Each player now has their own file within a world folder where their data is saved. This opens the door to persisting more player values, such as which items you have on your hotbar.

    I also added save-dependent world spawn points, which is the location a player will be in the first time they join a world.

    Finally, I added commands for teleporting players to different positions. I couldnt resist the opportunity to do something fun with that...

    [previewyoutube=zRsy3D2ne3E;full][/previewyoutube]

    Ive open sourced one of the tools I used to make the teleport effect.

    Build pipeline - Felipe
    This week Ive been working on finally finishing the build pipeline, it can now successfully build the Unity game and publish it to Steam!



    Fun Spinny Triangle - Jimmy
    By popular request last week, I added a setting to choose the open state of the Quick Color Chooser. This new setting was all by itself in the Color Choosing settings heading, and I decided it needed a friend.

    Enter Fun Spinny Triangle, the best setting ever added to Logic World.

    [previewyoutube=UNcJzYnmPvI;full][/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/


    [ 2020-04-23 03:21:37 CET ] [ Original post ]

    Logic World Wednesdays: The Anniversary Edition

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

    [previewyoutube=x7Exruogc3g;full][/previewyoutube]

    LogicScript components with hot reloading - Felipe
    This week Ive been working on LogicScript, our custom language for programming component behavior. Ive 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 Ive made a video to demonstrate this.

    [previewyoutube=Vf-ftZUrnzc;full][/previewyoutube]

    Popups - Jimmy
    Ive spent most of this week working on Logic Worlds 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. Youll be seeing those menus next week.

    Quick Colors - Jimmy
    This week Ive had something of a shift in philosophy with regards to how players choose colors.

    If youve been following Logic World for a while, you know that Ive spent a lot of time and energy making the color picker a powerful tool. Indeed, Ive succeeded in that; Logic Worlds 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 youll 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, Ive 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][/previewyoutube]

    New Build Pipeline - Felipe

    Ive 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 its 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, its been one year since we announced Logic World.

    Its 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. Heres to many more years of Logic World :)

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

    [previewyoutube=zxtcLOU4lqA;full][/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/


    [ 2020-04-16 06:51:48 CET ] [ Original post ]

    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=dkmG5KKaF1Q;full][/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 Ive been working on an overhaul of Logic Worlds 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 Im 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 mods 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; its impossible to hide malicious things in mod code, and its 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 weeks Wednesday.

    The Oracle - Jimmy
    This week Ive added a highly requested component to Logic World: Oracles, which generate a random value when powered.

    [previewyoutube=wXyCWFR0gv4;full][/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, Ive decided that Oracles open more doors than they close. Besides, pseudorandom circuitry isnt 100% obsolete; you still need it if you want your sequence of random values to be deterministic.

    Bobbys Birthday is this Friday!
    Bobby, Logic Worlds beloved protagonist and mascot, will turn one year old this Friday, April 10th. As we mentioned a few weeks ago, the lovely and talented 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 Bobbys 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/



    [ 2020-04-09 04:39:10 CET ] [ Original post ]

    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=8tSXiUXTHhY;full][/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.

    Heres a snippet showing off the languages 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 wont be as fast as hard-coded C#, its 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 theres no way for LogicScript code to install a virus on your computer. Well still support C# logic components if you need to do something really crazy -- LogicScript isnt a replacement, its an additional option.

    AND, AND, and AND- Jimmy
    This week I added two new AND gates to Logic World.

    [previewyoutube=ePVDzZw8Mgc;full][/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/


    [ 2020-04-02 03:26:10 CET ] [ Original post ]

    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=TCDRAnZxDuw;full][/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
    Weve 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 Ive 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. Weve contacted Unity support and hopefully well have a solution for it soon.

    Bobbys Birthday
    Bobby, Logic Worlds beloved protagonist and mascot, will turn one year old on April 10th. The lovely and talented 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/


    [ 2020-03-26 19:06:05 CET ] [ Original post ]

    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 Ive made a number of improvements to the settings menu.

    [previewyoutube=w-HrTYwndhE;full][/previewyoutube]

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

    Tracker Improvements - Felipe
    This week Ive been working on improving the tracker website that the beta testers are currently using for reporting bugs and other feedback.

    Firstly, this week Ive beautified the main page. You can now see each tickets creation date, type, status and ID.



    Ive also added another property to tickets: its priority. It ranges from 0 to 5, from least to most important.



    Thanks to these changes, its 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 Ive continued this work and integrated the new SECCS into Logic World. Its 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 Ive 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 youd 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. Its 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.

    See you next Wednesday!

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

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


  • [ 2020-03-20 16:17:55 CET ] [ Original post ]

    Logic World Wednesdays: Self-Reflection

    Welcome back to another Logic World Wednesday! Its been a busy week for Mouse Hat Games and weve 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][/previewyoutube]

    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][/previewyoutube]

    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 objects 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 Im focusing on writing tests for everything, so changes shouldnt 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 Ive also been working on abstracting the network system we use for communicating between the client and the server. This means that the game wont 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 weve 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 Ive 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 thats 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 theyre 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 dont 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.

    See you next Wednesday!

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

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


    [ 2020-03-12 02:21:45 CET ] [ Original post ]

    Logic World Wednesdays: The Panoramic Edition

    In case you havent already heard, this week we made the difficult decision to postpone Logic Worlds release.

    Were sorry about this, but weve got our heads down and were 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 theyre 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. Its cute

    Tracker - Felipe
    If you didnt 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 dont have a way of marking issues as solved. For this reason I have been working on a ticket system similar to GitHubs 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 Ive 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 youre running the game in low quality.

    Heres an 8k screenshot I took while playing at 1080p (click for full resolution):



    The build in that image is a binary multiplier made by :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.

    See you next Wednesday!

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

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


    [ 2020-03-05 02:21:41 CET ] [ Original post ]

    Logic World Wednesdays: Beta Than Ever

    On Monday of this week, we started beta testing!

    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. Theyll 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 youll have a lot more Logic World content to look forward to!

    Check out the first CPU in Logic World, built by :

    [previewyoutube=ZYqOWHymmT0;full][/previewyoutube]

    And check out this awesome synchronous program counter from
    :

    [previewyoutube=_XH41SKf2sU;full][/previewyoutube]

    Beta testers are often sharing screenshots and videos on the
    Logic World Discord, so make sure youre hanging out there if youre not already. Furthermore, well 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, lets get into this weeks 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][/previewyoutube]

    More Displays - Jimmy
    For a while, weve 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][/previewyoutube]

    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 Ive had a bad habit of ignoring bugs and thinking oh, Ill 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 Id 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 couldnt actually play the game; mouse input was frozen and no 3D geometry was rendered, among other issues. This week, Ive 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 didnt work and we fixed it a different way), but its 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 its 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.

    See you next Wednesday!

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

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


    [ 2020-02-27 07:20:54 CET ] [ Original post ]

    Logic World Wednesdays: The Long Edition

    Audio Overhaul - Jimmy
    Ive worked on a number of things related to audio this week. Logic World sounds better than ever.

    [h3]Output Groups[/h3]
    Sound effects are now divided into subcategories, and you can adjust the volume of these individually.



    [h3]Music Component Spatial Audio[/h3]
    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 Ive figured out how to hook these generated sound effects into Unitys 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 theyre no longer able to teleport sound to your ears from hundreds of meters away.

    [h3]Music Player[/h3]
    Ive been working on the code that plays the music from . 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.

    Ive 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 its playing. This way, your music contraptions wont 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 Ive 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 its 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.

    [h3]Whitelist[/h3]
    Servers can now have a whitelist of players who are allowed to connect.

    [h3]Banlist[/h3]
    Servers can now ban players and IP addresses from connecting.

    [h3]Password Protection[/h3]
    Servers can now require a password to connect. Passwords are only sent over the network after being hashed with SHA-256.

    [h3]Admins[/h3]
    Servers can now have a list of players who are admins. Admins can run commands on the server, and they will be sent the servers console output, viewable in the client debug console.
    When you run an integrated server for a singleplayer game, you automatically have admin permissions.

    [h3]Max players per server[/h3]
    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.

    [h3]Pause empty servers[/h3]
    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
    Ive added some screens that tell the player important information about what happened to their game. First is the [h3]error screen[/h3], which lets the player know if theres an error on startup or while loading a save. Next is the [h3]disconnection screen[/h3], which lets the player know if theyve been unexpectedly disconnected from the server.



    Mac OS - Jimmy
    Ive been fixing up the Mac OS version of Logic World! Theres still some work left to do, but heres 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.

    See you next Wednesday!

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

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


    [ 2020-02-20 09:15:08 CET ] [ Original post ]

    Logic World Wednesdays: The Cloudy Edition

    Hello and welcome back to Logic World Wednesdays! In case you missed it, this week we announced Logic Worlds release date: March 13, 2020.



    Weve got a big Wednesday for you today, so lets get started!

    [h2]As We Change - Markku[/h2]
    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][/previewyoutube]

    [h2]Actual Clouds - Jimmy[/h2]
    This week I have been giving some love to the skies of Logic World.



    This is still very much a work in progress. Youll be seeing more gorgeous skies in future Wednesdays :)

    [h2]Fake Internet Clouds - Felipe[/h2]
    This week Ive 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)

    Were going to start beta testing very very soon, and during beta testing well be building and deploying the game several times per day. So its important that this complex task is automated for us.

    [h2]Website Error Handling - Felipe[/h2]
    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.



    [h2]Game Flow - Jimmy[/h2]
    Thanks to Felipes excellent work on the integrated server (you can read more here), this week Ive 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, Ive added loading screens and an error screen -- though neither is particularly pretty right now, so Ill show those off when they are :)

    Ive also added the ability for you to run commands on an integrated server. Everything is now seamless; weve 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.

    [h2]Hotbar Shortcuts - Jimmy[/h2]
    I added some hotkeys for managing your hotbar!

    [previewyoutube=75ORqV2vvuw;full][/previewyoutube]

    With these hotkeys, Im opening the selection menu less than half as much as I used to when I play the game. Once you get used to them, theyre 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.

    See you next Wednesday!

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

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


  • [ 2020-02-13 22:00:22 CET ] [ Original post ]

    Logic World release date announced for March 13, 2020

    We have a release date! Logic World will be in your hands on Friday, March 13, 2020.

    It's been an incredible journey to get to this point, and we are absolutely pumped to polish off this game and get it into your hands. Thank you, so much, for following and supporting us along the way.



    For more details, and for information on pricing, see our blog post here: https://logicworld.net/Post/113

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


    [ 2020-02-07 01:45:58 CET ] [ Original post ]

    Logic World Wednesdays: The We Will Announce The Release Date Tomorrow Edition

    [h2]Relays - Jimmy[/h2]
    This week Ive added a very cool new component, called the Relay!
    [previewyoutube=49UUfTuj_qQ;full][/previewyoutube]
    Huge thanks to for suggesting Relays. I cant wait to see the builds they are used for.

    [h2]Store Pages - Felipe[/h2]
    As you may know, were going to sell Logic World directly from our website in addition to our third party stores like Steam. This week Ive been working on the store page design.



    [h2]Settings Menu Generation - Jimmy[/h2]
    Last week and The week before, I was working on the design part of the settings menu. This week, Ive given the menu functionality; the settings you tweak will now affect things in the game, and their values will be saved between sessions. Additionally, the settings menu now dynamically generates from values you set in the code.
    [previewyoutube=-mDwJKP7ztc;full][/previewyoutube]
    Getting the menu to dynamically generate, with all the different kinds of settings there are and all the different properties a setting type can have, was extraordinarily difficult. But the system works beautifully, and I am very proud of it.

    I plan to open source this library - LogicSettings - sometime after Logic World launches.

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

    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/


    [ 2020-02-06 10:46:45 CET ] [ Original post ]

    Logic World Wednesdays: The Shiny Edition

    Welcome back to another Logic World Wednesday! This week, in The Shiny Edition, were polishing up the game and getting it prepared for release.

    Before we begin, we have a very special announcement. Logic World is going to have a full original soundtrack, and weve found the perfect person to write it. It is our pleasure to introduce Markku Wainman, composer for Logic World!

    [h2]Soundtrack - Markku[/h2]
    Hello, everyone! I am happy to have a chance to talk about the music I am writing and producing for Logic World with you today. Myself and the creators wanted the music to compliment the beauty of circuits doing math while helping the player to focus on and engage in the gameplay. We also concluded that the addition of live musical sources would breathe life into the synthesized instruments that are sonically emblematic of computers. I want these carefully selected instruments to help the melodies and musical textures stick with you after playing the game to remind you of Logic World and the beauty that is created in a computer. Working on creating an effective score has been a challenging and rewarding process that I feel very lucky to be a part of. I hope you enjoy my music!

    Markku

    [previewyoutube=W7ENg04RxWs;full][/previewyoutube]

    [h2]Completed Integrated Server - Felipe[/h2]
    This week Ive been working on reimplementing the integrated server. Previously the server was being compiled targeting .NET 4.6 in order to be loaded by the Mono runtime Unity uses. However, this was less than ideal, because the server couldnt benefit from the performance upgrades .NET Core 3 brings.

    The server is now launched as a separate process from the game, allowing us to use the .NET Core 3.1 build. In order to communicate between the game and the server instance we redirect the stdin and stdout streams, allowing the user to send commands to the server and read its output as if it were a regular server.

    Doing things this way is more complicated and difficult, but this upgrade ensures that youll always have the best possible performance while playing Logic World.

    [h2]SHINY BOBBY - Jimmy[/h2]
    SHINY BOBBY SHINY BOBBY SHINY BOBBY SHINY BOBBY



    SHINY BOBBY SHINY BOBBY SHINY BOBBY

    [h2]Character Customization - Jimmy[/h2]
    In all seriousness, this week Ive added some options for customizing your Bobby. You can now choose bobbys colors, and if you so desire, you can enable SHINY BOBBY.



    Weve previously talked about including full custom multiplayer avatars. Unfortunately, there isnt time to include this for 1.0. That feature will be coming in 1.1. Until then, everybody is Bobby.

    [h2]Settings Menu - Jimmy[/h2]
    Ive made a ton of progress on the settings menu this week!



    Lets take a look at all the new things:


    • When you mouse over a setting, you can see a written description of what the setting does, a visual preview of it, and how performance-intensive the setting is.
    • There are now multiple profiles for settings (bottom right). When you edit the settings on one profile, all the other profiles are unaffected.
    • I ran into several issues using the built-in Unity dropdowns and toggles, so I programmed my own. Every single thing you see in that screenshot is now running custom code.
    • Many parts of the visual design have been tweaked and polished since last week

    The menu isnt quite done yet - Im still working on getting it to generate from code - but Im extremely happy with how its coming along.

    [h2]Lighting & Graphics - Jimmy[/h2]
    This week Ive been polishing the lighting setup for the game. In particular, Ive done my best to normalize the difference between light and dark; I dont want fully lit objects to be overwhelmingly bright, and I dont want objects in shadow to be so dark its hard to see them.

    Before:



    After:



    Click here for high-res images to compare: before 1, before 2, after 1, after 2. (Please excuse the wires in the after screenshots that are black when they should be red - it's a bug I forgot to fix before taking them :P)

    Lighting is really finnicky and difficult, especially in a game where the same lighting has to work for every situation: I don't know what you're going to build, but I need to have a lighting setup that works for the things you build. The results you see took many hours of tweaking and experimenting, but I'm feeling pretty happy with them.

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

    We'll be announcing Logic World's release date very soon, so stay tuned. To do so, 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/


    [ 2020-01-30 07:03:40 CET ] [ Original post ]

    Logic World Wednesdays: The Rise of Bobbybot

    [h2]Pick Up Component - Jimmy[/h2]
    Pick Up Component is a new building mechanic Ive added to Logic World this week. It lets you pick up a full component, including any data youve edited on it.

    [previewyoutube=L9QjLng95UI;full][/previewyoutube]

    Pick Up Component is the second last building mechanic planned for Logic World 1.0. Just one more to program, and then the building is done!

    [h2]Settings Menu - Jimmy[/h2]
    Ive been working on Logic Worlds settings menu. I think Ive got a pretty good design for it.



    Let us know in the comments what settings *youd* like to see in Logic World.

    [h2]Sexy Notifications - Felipe[/h2]
    The notifications system on logicworld.net has been very unstable since I put it together, as I didnt put much thought into it. This has now changed. Ive rebuilt the system altogether and now its much more robust and pretty.



    If youre logged in, you can check out the new notifications page at https://logicworld.net/Notifications. Make sure to leave lots of replies to each other today so you can properly experience it ;)

    [h2]Open Source Shenanigans - Jimmy[/h2]

    This week Ive been working on a few of the open source libraries were developing for Logic World. These are chunks of code that were releasing for free, for anybody to study or use or even contribute to.

    Firstly, I've made a number of improvements to SUCC, the tool Logic World uses to save and load data in configuration files. SUCC can now save and load null - that is, no object - and its better at figuring out what value to load if it doesnt find that data in a file.[/size]

    Next, I developed an extension for SUCC called InterSUCC. InterSUCC allows you to treat SUCC data files as objects with properties, rather than requiring you to input text to use as data keys. InterSUCC also contains a nifty feature called ConfigWithOverride. ConfigWithOverride allows you to have a master config file, but have some parts of that file overridden by a particular additional file. In Logic World, we use this to give you per-world settings. For instance, the game has a global setting for simulation speed, but you can change the speed for just one world by editing that worlds config_override.succ.[/size]

    Finally, I updated Jimmys Unity Utilities with all the goodies weve added to it in Logic Worlds JUU copy. It now has extended support for color names (used in Logic Worlds color picker), tools for saving and loading images to disk (used for saved board thumbnails and for the flags in LWs languages menu), a precise timing class (used to animate Logic Worlds intro), a utility for setting the contents of the system clipboard (used in Logic World to copy console messages), and more.[/size]

    While I was at it, I also made a small library called PersistentData. PersistentData isnt something that will be used in LW, but Ive been meaning to make it for a while and Ill definitely be using it in other future projects.[/size]

    [h2]BobbyBot - Felipe[/h2]
    This week Ive written a bot for the Logic World Discord Server. His name is Bobby Bot, and he posts updates from logicworld.net to the discord. Right now, he sends a message for each new post in the forum. When Logic World releases, Bobby will send a message for each new WorkItem you upload to logicworld.net: boards, worlds, mods, ect.



    Bobby will also help us out by posting our biweekly discussion topics: Philosophy Phridays and Miscellaneous Mondays. Never again will these be late! Look out for our first Bobby-posted topic this Phriday at .

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

    If youd 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/


    [ 2020-01-23 05:09:23 CET ] [ Original post ]

    Logic World Wednesdays: The Outlined Edition

    [h2]Resizable Components Polish - Jimmy[/h2]
    As part of my ongoing efforts to make Logic Worlds building mechanics as fluid and easy-to-use as I can, this week Ive been polishing up the mechanics for building with resizable components. You can now directly start resizing something while youre placing it, and Ive added a new Drawing mechanic for building with boards.

    [previewyoutube=JstrNEQ4pFY;full][/previewyoutube]

    Ive also polished up the look of the resizing UI: theres a snazzy checkmark in the center that you can click to confirm the new size, and all the UI elements now change color when you mouse over them, to communicate that they can be clicked on.

    [h2]Outline Tech Upgrade - Jimmy[/h2]
    When I was working on the new Resizable Components UI, I ran into a limitation of our outline tech that was preventing the checkmark outline from showing up.



    The problem was that all of the outlined objects were being outlined together as one pass. This image explains what that means better than my words did:



    Since the checkmark outline was nested inside the outline of the component being resized, it couldnt show up; the checkmark edges were not part of the edges of all the objects.

    This has been a limitation of our outline system for a long time, and this week I finally set about fixing it. The outline system now supports multiple independent layers of outlines, where each layer can overlap with the others.



    With these new outline layers, I can now draw the checkmark outline, and you can see it in action in the video above.

    I also added one outline layer that has depth culling enabled. This means that only the visible parts of the objects get outlined. The depth culling layer is being used for the outlines of interactable objects, and drastically improves their look.



    Finally, I added some options to the outline rendering for folks to tweak to their preference. You can now adjust the outline thickness, the outline fill amount, and the outline intensity.



    [h2]Spinny Compass - Jimmy[/h2]
    After I showed off the Compass last week, many of you suggested that it should rotate as the player does. After playing around with it some more, Ive come to agree, and so the compass now always points in the direction of rotation.

    You can see this in action in the video above.

    [h2]Status - Felipe[/h2]
    This week Ive been working on a status page for all the services that make up logicworld.net. A service is a little piece of software (in our case mostly written in Go) that is responsible for a task, like sending emails to users or building mods. This status page is made using Cachet, which allows us to notify you about maintenance ahead of time and it lets you see the status of every service as well as a real-time graph of visits to logicworld.net.



    You can check out the status page at https://status.logicworld.net/.

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

    If youd 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/


    [ 2020-01-16 07:19:24 CET ] [ Original post ]

    Logic World Wednesdays: The Checkered Edition

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

    [h2]Checkerboard World - Jimmy[/h2]
    The world youve been seeing in the LWW videos has been sort of a placeholder. The ground was completely static, with no customization whatsoever.

    This week Ive 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, youll be able to choose the color or colors used and the grid size. Its worth noting that Logic World will support several different world types, and mods will have the ability to add world types. But thats a topic for a future LWW :)

    [h2]Modding API Consolidation & Documentation - Felipe[/h2]
    Over the holidays Ive 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 youre 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.

    [h2]Tons of cloud stuff - Felipe[/h2]
    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 thats 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.

    Dont get me wrong, I still love C#, however its become clear to me that Go is much more tuned towards web server-side software development.

    [h2]Refined Building Mechanics - Jimmy[/h2]
    Ive done a pass of our basic building mechanics to ensure they are consistent, intuitive, and easy to use. Most notably, Ive 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 Minecrafts building mechanics, back in 2017. But Logic World has grown up a lot since then.

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



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

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

    If youd 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/


    [ 2020-01-09 00:54:25 CET ] [ Original post ]

    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 weve got some real goodies for you this week.

    [h2]Draggable Colors and More - Jimmy[/h2]
    Logic Worlds color picker is something I keep coming back to and tweaking, but this week I think Ive finally settled on its final form. Ive shifted the menu elements around so that the HSV wheel is bigger, and Ive packed the sliders together more closely to save space. Ive 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.

    Ive 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=9GoQYYBJ8xg;full][/previewyoutube]

    [h2]Mod Hooking - Felipe[/h2]
    This week Ive 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 mods 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, youll 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 doesnt 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 Ive continued that work this week. Unfortunately, I didnt finish in time for LWW, but most of the architectural groundwork is now laid.

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

    Thanks for reading! Were 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 youd 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/


    [ 2020-01-09 00:44:19 CET ] [ Original post ]

    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 wasnt working; it was too complex and too clumsy to use. This week Ive redone it, using the same UI as saving Display configurations.

    [previewyoutube=Q0mvDkUsR1Y;full][/previewyoutube]

    Ive 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]
    Ive 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

    Ive 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 havent 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 didnt get finished in time.

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

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

    If youd 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/


    [ 2020-01-09 00:36:53 CET ] [ Original post ]

    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 Ive 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 isnt 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 its 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 Id 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 youre like me and you programmed all those buttons yourself, this isnt 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. Thats why this week Ive 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 youve saved a board, you can view an interactable in-game preview of the saved board in 3D. This week Ive 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.

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

    Finally, Ive 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
    Ive 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 Ive 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 youd 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/


    [ 2019-12-05 21:08:52 CET ] [ Original post ]

    Logic World Wednesdays: The Kronky Edition

    Oh yeah, its 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 couldnt be more excited about it.[/size]

    Overhauled Display Menu - Jimmy
    This week Ive 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=https://www.youtube.com/watch?Qc4qSXO5QkI;full][/previewyoutube]

    The completion of this menu marks a significant milestone: it is the last new menu for editing a component. Previously Ive 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 theyre all done.[/size]

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

    This week Ive 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, Ive 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, youll see a video with it next week![/size]

    Intro animation - Jimmy
    Ive made a fancy animation with our logos that plays when the game starts up.[/size]

    [previewyoutube=https://www.youtube.com/watch?6bu1QbN0y64;full][/previewyoutube]

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

    If youd 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/



    [ 2019-11-28 05:53:00 CET ] [ Original post ]

    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 were 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 games 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. Were not quite ready to talk about these pieces yet, but youll be hearing about them soon.

    Main Menu and Languages Menu - Jimmy
    This week I finally started work on Logic Worlds main menu! I also added a menu for switching the games language.

    [previewyoutube=x2qMUX81_pU;full][/previewyoutube]

    I didnt 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 Martnez 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 cant 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 wasnt correct, so some fields were set to be null when they really werent.

    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. Id 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 shouldnt 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 youd 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/


    [ 2019-11-22 00:59:46 CET ] [ Original post ]

    Logic World Wednesdays: Bits and Bobs

    (this blog was originally posted 2019-11-13)

    Display Configurations - Jimmy
    Displays allow you to configure which color they are in each possible state of their inputs. This week Ive been working on the ability to save and load these configurations, so you can quickly set up displays that will be the same color when their inputs are in the same state.



    On the top are graphics depicting the possible states of the displays inputs - from 0000 to 1111 - and the color the display is in for each state. On the left are various saved configurations for displays with four inputs (and 16 states).

    This feature isnt quite done yet, so youll see a full video showing it off next week.

    Cloud mod compilation - Felipe
    As we discussed last week, in order to share a mod on logicworld.net you will need to upload the mods source code, which will then get compiled for you on our servers. This is what Ive been working on this week: Ive been developing a sort of CI system that automatically compiles the mods solution and outputs the mods code as DLLs. The system relies on Docker containers to run the build, which means that they run completely isolated from the rest of builds and with the same starting environment every time. Using Docker also means that we can aggregate multiple cloud server instances and create more as demand for compilation power goes up, allowing us to meet the demands.

    SUCC v1.1 - Jimmy
    SUCC is an open source library Ive developed for Logic World for saving and loading data as text. We use it for saving user settings, metadata about world saves, localizations, game data like the list of components, and more. Ive spent some time this week making improvements to SUCC, including adding some features we need for Logic Worlds modding system.

    Theres too much to talk about here, but you can check out the list of changes over on the 1.1 release page.

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-11-22 00:49:55 CET ] [ Original post ]

    Logic World Wednesdays: Were Back!

    Welcome back to another Logic World Wednesday. After a three week hiatus, we are back!

    If you havent been keeping up with us on Discord, the break has been because we were reorganizing Logic Worlds 50,000 lines of code. That work is finally done, and your regularly scheduled Wednesdays have returned!

    New Menus - Jimmy
    Ive added three new menus to Logic World this week! We now have a pause menu, and buttons and keys have gotten menus for editing those components.

    [previewyoutube=Gn3xmVy8Tcs;full][/previewyoutube]

    MIDI Input Support - Jimmy
    Thanks to the release of Minis by Keijiro Takahashi, Logic Worlds extensive input system now supports MIDI input! You can now use your pianos to control the game. MIDI bindings can be used for regular game actions like walking and jumping, but I expect theyll mostly be used with Keys to make in-game music machines :D

    New Game State System - Jimmy
    Logic World uses a complex state machine to govern the flow between game states. For example, youre allowed to transition to the in chair state from the building state, but youre not allowed to transition to the *in chair* state from the multi-wire placing stage 2 state.

    Previously, we defined the rules of the state machine all in a single file. This week Ive built a new system and transitioned all our game states to it. Under the new system, the rules of the state machine are distributed throughout many files. The rules for one state are now right next to the code for what actually happens when the game is in that state.

    When were working on a game state, this makes it easy to see that states relationships with other game states. But more importantly, this means that mods can now add their own game states, since theyre not all defined in one master file.

    Server architecture & networking refactor - Felipe
    This week Ive been working on refactoring the servers codebase, adhering to the Inversion of Control principle. This means that I went through every single class, converted it to non-static, determined the classes that it depends on and injected them on its constructor, while creating an interface for it. This results in highly testable and modular code thats a lot easier to maintain and extend.

    Ive also been refactoring the networking code: previously each packet type was composed of two methods: one for writing the packet and one for reading it. These methods operated directly on the network stream and they didnt have an explicit structure, as it was determined by the order and type of read/write calls. After the refactor, each packet is its own class, we have SECCS serialize and deserialize it, so we dont have to write any code that manipulates the network stream directly. Another benefit is that packets are clearly defined and, again, easier to maintain and extend.

    Modding System Progress - Felipe
    Ive also been rethinking the existing modding architecture, and this time Ive decided on a file structure that looks like this (not final):


    • assets/
      • my_image.png
      • my_mesh.obj
      • my_unityassets.assetbundle

    • data/
      • components.succ

    • lib/
      • MyLibrary.dll

    • manifest.json
    • server.dll
    • client.dll
    • shared.dll


    The mod as a whole is comprised of two parts: the server and the client. As their names suggest, the server.dll will only be loaded on the server startup and the client.dll will be loaded on the client startup, while the shared.dll will be loaded on both and can be used to share code between them. Its worth mentioning that all of these DLLs are regular .NET Standard 2.0 libraries generated by Visual Studio projects.
    A mod can have any combination of these 3 DLL files, thats to say, a mod can have a server.dll, a client.dll or both, in which case it can also optionally have a shared.dll.

    The assets folder contains different assets that the client-side mod will be able to load at runtime. Right now the supported types are .png, .obj (.mtl will probably come too) and .assetbundle, and Id also like to add support for audio files. The asset bundle files must be generated using the same Unity version as the game, which will be made known when the game is released. These asset bundles can contain any complex assets that you may need, like Unity scenes or prefabs.

    The data folder currently only contains the SUCC file defining the components that your mod has, whose format you may already have seen in previous LWWs.

    The lib folder can contain any external libraries your mod uses, and the manifest.json file defines the mods properties, like its name, author, and unique ID used to identify the mod in-game.

    Finally, the mod as a whole can be stored in one of two ways: in a .lwmod file (which is just a renamed .zip file), or in a plain folder. The former is how mods downloaded from logicworld.net will be stored, while the latter is especially useful when developing mods as you can just copy the files over without any worries.

    You will be able to upload and share mods on logicworld.net, but you must upload its source code, which will get compiled for you. This is in order to enforce open source code and transparency. It protects against mods with malicious code, and it helps people learning to make mods, since they can see the sources of existing ones.

    An Early Phriday
    For the past few weeks, weve been holding biweekly off-topic discussions on the Logic World Discord. This has been a lot of fun and weve had some very interesting talks. Some people have lamented that these discussions are not at a good time for them, so were experimenting with different times. This weeks Philosophy Phriday willl be 2 hours earlier than usual, at .

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-11-07 08:51:46 CET ] [ Original post ]

    Logic World Wednesdays: Delay

    Welcome back to another Logic World Wednesday!

    If you havent already heard, we have made the difficult but necessary decision to delay the release of Logic World. The game will be released in February 2020. More information can be found here.

    Adjustable Delay - Jimmy

    Sometimes you need to introduce a delay into your circuits, and thats exactly what Delayers are for. Previously, each Delayer type had a set delay length, but this week Ive made it so their delay can be adjusted.

    https://www.youtube.com/watch?v=rFW34K0lZmc

    Resizable Mounts - Jimmy

    Mounts are a component to help you fit your circuits into tight spaces. Theyre shaped like little pillars, and you can place any component on top of them.

    This week Ive made Mounts resizable, so you can adjust their height to whatever you need. This reflects a new feature of the Resizable Components system I showed off last week: the ability to resize stuff on the vertical axis.

    https://www.youtube.com/watch?v=0SDyFKmKUWQ

    Rainbow Keys - Jimmy

    You can now change the color of Keys and the label on top of them.



    Labeled Buttons - Jimmy

    All pressable Buttons can now have text written on them.



    Client/Server integration - Felipe

    Logic World is composed of a client (the game itself) and a server. In order to play on a world, a client must connect to a server. Previously, the client and server were totally separate applications, which means that you must run a separate server and then connect to it even if you want to play on single-player mode. This week Ive been working on adding an integrated server to the client, which will automatically be spun up when the game starts without you even noticing.

    Singleplayer in Logic World is actually just multiplayer with the server running on your machine. Because the game works like this, youll have the ability to hop right into your friends singleplayer games.

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-09-26 07:40:02 CET ] [ Original post ]

    Logic World Wednesdays: Resizable Everything

    More Resizables and More Displays - Jimmy

    A while ago I was experimenting with making labels resizable. This is a followup to that: Ive implemented a full, proper resizable components system that can allow you to resize almost anything. Of course, this system is open to modders: if you make a mod to add a component, you can very easily make that component resizable.

    https://www.youtube.com/watch?v=IRgSj1gm6V4

    Also shown in the above video are the new displays! Logic World now has displays with 1, 2, 3, 4, 6 and 8-bit color depth. I cant wait to see what you draw with them :)

    The Logic World Store - Felipe

    Logic World will be sold on Steam and other third-party stores, but well also be selling the game ourselves on logicworld.net. We announced this store on a previous LWW, and this week Ive been continuing to work on it. This is how it looks like right now:





    The Logic World Store is being built to sell the game itself, but in the future we may also sell physical merchandise here!

    Automated website testing - Felipe

    If youve been following us for more than a couple weeks you have probably experienced some issues with the website like the inability to post or delete comments. I try to make every deployment of the website as stable as I can but sometimes I miss something. Therefore, this week I have been adding unit and integration tests that must succeed before deploying, using the Atata framework. Unit tests are pretty boring, but integration tests involve actually performing actions on a browser which makes for a pretty cool show:

    https://www.youtube.com/watch?v=ocW4Lq2H_Qw

    (Side note: only the first part of the video is sped up, the actions are performed at that speed!)

    Integration tests will automatically do all the common actions a user can do (right now only registering and logging in, but the goal is to add actions like commenting, posting, editing comments, etc).

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-09-19 10:55:09 CET ] [ Original post ]

    Logic World Wednesdays: Orange Orbs of Joy

    (this blog was originally posted 2019-09-11)

    Multiplayer

    We thought it was time to show off some multiplayer gameplay!

    https://www.youtube.com/watch?v=pshtA-Bi6LM

    This week weve made it so you can see other players. Previously they were ghosts; you could see their effect on the world, but not the players themselves.

    The smiling orange ball - affectionately dubbed Bobby by our discord - is just a placeholder. The final game will have actual art :P

    Logic World Wiki - Felipe

    A game like Logic World must have a place where all the knowledge about modding and other details is stored, and thus the Logic World Wiki was born! Its empty right now, but when the game comes out this is where well host modding tutorials and documentation, in both written and video form.

    New Player Controller - Jimmy

    This week Ive overhauled the players movement code. Here are all the features it has:


    • walking
    • running
    • crouching
    • flying
    • flying can be with or without a locked Y axis
    • optional & adjustable movement smoothing
    • optional & adjustable mouse smoothing


    Best of all, the player controller is super moddable. You can change the way my code works, or even replace it entirely with your own code.

    You can see the new controller in action in the Multiplayer video above.

    Dynamic Components - Jimmy

    Each component in Logic World has what we call a prefab, information which defines how the component looks. This includes the number of blocks, the shape of those blocks, the number and positions of its inputs and outputs, and several other things.

    Previously, component prefabs were static. Each instance of a component would look exactly the same. But this week Ive been overhauling the way the game handles prefabs so that a component can change its appearance. Among other things, this means we can make many more components resizable in the same way boards are.

    I had really hoped to show this off today, but it was much harder than I expected and the system isnt done yet. Next week you can expect to see Dynamic Components in action - theres a lot of cool stuff I plan to do with them.

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-09-19 10:45:29 CET ] [ Original post ]

    Logic World Wednesdays: Console Scripting and Configurable Input

    Advanced Console Functionality - Felipe

    Last week I talked about LICC, a common console framework for the client and server that takes care of registering and running commands defined by mods or by the game itself. This week Ive been extending LICC by adding LSF (LICC Scripting File), a scripting language heavily inspired by Bash. Its got functions, variables and if, for and while statements, as well as most of the usual math and boolean operators (including the ternary operator). Heres a sample file:



    LSF is completely integrated into LICC, meaning that youll be able to use the same script file on both the client and the server!

    You can run any script file at any time with the exec command and in LSF files you can also import other script files, allowing you to reuse code. LICC will also automatically run a script called called autoexec.lsf on startup if it exists, allowing you to modify settings or run maintenance tasks.

    Input System Overhaul - Jimmy

    I spent most of this week working on a total overhaul of Logic Worlds input system. The input system is what translates your controls in real life, like clicking the mouse or pressing a keyboard key, into actions in the game. Ive focused on customizability with the new system. I want everyone to be able to configure the games controls to how they want them, or - in the case of people with motor disabilities - how they need them.

    Heres an overview of how the system works:


    • each action the game can interpret - walk forwards, jump, place item, etc - has one or more bindings that can trigger it.
    • bindings can reference direct input like key presses or other bindings. For example, the jump action is bound to space, and the fly up action is bound to jump.
    • bindings can reference multiple direct inputs or other bindings, requiring you to press both of them to trigger the action
    • bindings which can be held down have two options: actually hold them down, or tap once to toggle on and tap again to toggle off
    • bindings can reference double or triple taps/clicks


    In addition to being far more personally configurable, the new input system has several advantages over the old one:


    • a much greater variety of input devices are supported, and adding new supported input devices is much easier
    • the bindings can be edited at runtime
    • mods can add and use custom bindings
    • the new system is significantly more performant
    • binding data is stored in an easily-editable file next to the game executable, rather than in the registry


    Unfortunately I didnt have time this week to make the in-game menu for editing the controls, but you can expect to see that next week. In the meantime, you can check out the bindings file - all 79 of our configurable controls.

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-09-05 02:39:06 CET ] [ Original post ]

    Logic World Wednesdays: Chairs, Consoles, and More

    Welcome back to another Logic World Wednesday! This week Logic World passed 4,000 wishlists on Steam. Thank you to everyone who has wishlisted, that number is just crazy!!!

    Chairs and Better Keys - Jimmy

    Ive made a number of enhancements to Keys, and added placeable Chair objects to go along with them.

    https://www.youtube.com/watch?v=E3VGKl7cW30

    I think Chairs are a really nice system. You place one down then lay out a bunch of Keys in front of it, and now sitting in the chair is like sitting down in front of a keyboard.

    LICC: Console Backend - Felipe

    If youve ever played games like Minecraft you probably know that there are commands. Commands are a way of telling the game what to do, for example to quit the game or kick a player.

    Right now the client uses a different method of registering and handling commands from the server, meaning that sharing commands between them is practically impossible. Thats why we decided to make a library that handles everything for you, from parsing user input to registering and executing commands. Now, with a single method, a mod can register a command that will work on both the client and the server.

    Heres an example of a command in the code:


    [Command]
    public static void Say(string what)
    {
    LConsole.WriteLine("You said: " + what);
    }


    As you can see, all you have to do to register a command is to add the [Command] attribute to a static method.

    You may have noticed that we are using LConsole.WriteLine instead of Console.WriteLine, this is because we need to provide a way of outputting text that works regardless of where the command is running on. On the client it will output to the console window, and on the server itll write to the regular console output.

    Because of this, LICC* is split into two parts: the backend and the frontend. The backend is shared and provides the base functionality like command registering and executing, while the frontend takes care of interacting with the user: receiving input and sending output.

    This is a little demo of the console frontend:



    LICC also supports variables, similar to those in Bash (and less powerful (for now)):



    * LICC: Library for Implementing C# Commands

    Fancy Pants Console Frontend - Jimmy

    Using the wonderful backend code Felipe wrote, Ive made a slick in-game interface for the LICC console.

    https://www.youtube.com/watch?v=E3VGKl7cW30

    The new console will speed up developing and testing, but most importantly it will let power users go wild with hotkeys and scripts.

    Search All the Things - Jimmy

    A while ago I added searching to the Selection Menu. This week Ive abstracted the code for searching components and reused it in a number of places. You can now search:

    • the Selection Menu
    • your Saved Boards
    • the list of Singer instruments
    • the list of Drum instruments
    • messages in the new Console (shown above)


    The searching code is really easy to reuse now, so all future menus that are a list of things (like your list of multiplayer servers) will have searching :D

    Sound Effect Randomization - Jimmy

    Ive updated our system for playing sound effects so that there is a slight random variation in pitch and volume each time a sound is played. This helps the sound effects to feel more natural, since its not exactly the same sound every time.

    https://www.youtube.com/watch?v=iqPydtVdccA

    Monospaced Labels - Jimmy

    For all the Master Hackers out there, Ive added an option to labels for making their text monospaced.



    Miscellaneous Website Tweaks - Felipe

    This week Ive made various tweaks to the website, however theyre too small to warrant their own section:


    • Comment likes now count towards your profiles total likes

    • Timestamps are now updated in real time

    • You can now automatically quote comments by selecting some text and pressing reply

    • You will now get a notification when someone mentions you in a comment or post (this can be adjusted in your account settings

    • Now there are breadcrumbs in all forum pages, for example:
    • Collapsed comments are now more collapsed:
      Before: After:

    • The comments section now has some more space and a comment counter:
      Before: After:


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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-08-29 07:13:12 CET ] [ Original post ]

    Logic World Wednesdays: The Groovy Edition

    Drums - Jimmy

    Singers play sounds that have different pitches. But not all kinds of sound are like that. Drums are a new component, and theyre very similar to Singers except they play sounds (usually drum sounds) that dont have different pitches.

    https://www.youtube.com/watch?v=_sv7sM1t96g

    Keys - Jimmy

    Keys are new components that correspond to your physical keyboard. When you press a key in real life, that key is pressed in-game as well. You can use this for really fast and intricate input for your in-game circuits.

    https://www.youtube.com/watch?v=S96VZSjjdTQ

    Post image uploading - Felipe

    Some time ago I added the ability to embed images to your post directly from the website, but the UI was very rough. This week Ive been working on polishing the process of uploading and adding images to your post, this is what it looks like now:



    When you add an image it will automatically get uploaded to the server and youll have the ability to insert the image embed by clicking on its preview.

    Post visual editor - Felipe

    In logicworld.net, Markdown is supported pretty much everywhere you can type. Markdown is a text-based language, so if youre used to other WYSIWYG editors like Microsoft Word it can be somewhat uncomfortable to write Markdown. If this is your case, youll be happy to know that there is now a visual editor for posts based on StackEdit:



    The revamped image uploading UI and this visual editor both contribute to our goal to make logicworld.net accessible to everyone and easy to use, as well as a great place to share your creations and discuss.

    Input Animations - Jimmy

    While working on Keys, I gave them sexy animations for going up and down. Rather than snapping between their up position and down position, they move smoothly between the two. Ive added similar animations to the other two input methods, Buttons and Switches.

    You can see this effect in the Keys video above. Its a small detail, but its nice to look at.

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-08-22 07:53:57 CET ] [ Original post ]

    Logic World Wednesdays: The Web Edition

    (this blog was originally posted 2019-08-14)

    Hello everyone! This week Jimmys on vacation, so itll be just me and my web shenanigans.

    Comment "soft"-deletion - Felipe

    If youre familiar with Reddit, you have probably seen something like this:



    There, whenever you delete a comment it doesnt disappear from the post, but rather its text and author get replaced with [deleted], which means that its children will be kept intact. That is exactly what happens in logicworld.net now when you delete a comment with children, like so:



    Visits chart - Felipe

    I love statistics charts, so I just had to make one for logicworld.nets visits. Its not visible to the public, but this is what it looks like:



    Data prefetch - Felipe

    Ive implemented data prefetching in the forums, which basically means that the forums will be snappier when navigating. For example, the first post of a forum is prefetched when you visit a forum, that way when you click on that post the data will already be in your browser and itll load pretty much instantly!

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-08-22 07:46:06 CET ] [ Original post ]

    Logic World Wednesdays: The Tuesday Edition

    (this blog was originally posted 2018-08-06)

    Logic World Wednesdays on a Tuesday? What is the world coming to?

    If you havent already heard, Logic Worlds release has sadly been postponed to October.

    Board Sharing - Felipe

    As you may remember from last LWW, I have been working on a way to easily share your creations with the world in logicworld.net. This week Ive been working on the board details page, which is the page that people will see when you upload something, like adding the model preview and a picture carousel. Ive also contracted a zombie to record a video showing the whole process in action:

    https://www.youtube.com/watch?v=7kkl7cVSchg

    I have also made a little demo demonstrating what the board model in each board page will look like.

    Comment rating - Felipe

    A bit of a small one, but now youre able to like comments like you can do with posts! This is how it looks like:



    In the future expect a way to sort comments by score and date.

    Singer Polish - Jimmy

    Ive made many improvements to Singers since you saw them last week.

    Pitch Correction

    If you have a keen ear, you might have noticed last week that the pitch of Singer notes was off by a little. Pachelbels Canon in D was actually Pachelbels Canon in D Sharp Plus 0.6 Semitones. This was caused by an oversight on my part: I was generating the audio at 44100Hz, but playing it at 48000Hz, meaning it was being played slightly faster than intended. This discrepancy has been fixed and Singers are pitch-perfect now.

    Wave Instruments

    In addition to high-level instruments like Violin or Piano, Singers now have access to the following simple mathematical waves:

    • Sine
    • Sawtooth
    • Square
    • Triangle
    • White Noise


    This feature was suggested last week by .

    Moddable Instruments

    Singers (and now Drums) have access to a number of instruments. Each instrument is a set of rules for how to generate sounds. Previously, instruments were hardcoded into the game, but now theyre loaded from the game data folder and so mods can add instruments. Presently we support
    SFZ, Frequency Modulation, as well as the aforementioned mathematical waves. In the future Id also like to support Sound Font.

    Better Instrument Selection

    Previously the list of instruments was all in one giant scroll view. Now - much like the Selection Menu for components - the instruments are divided into several scroll views, and further divided into categories within those. Its much easier to find the kind of sound youre looking for now.

    Instrument Ranges

    Previously the Piano menu for selecting the note of a Singer was static, ranging from C2 to C6. Now, the piano menu will dynamically resize to reflect the range of the selected instrument. The range of a violin is higher than the range of a cello, for instance.

    3D Sound

    Previously, a Singer would sing to you equally wherever you are in the world. Now they have proper 3D sound: as you get farther away, they get quieter, and they play more in the left or right speaker depending on where they are relative to you. Singer sound is significantly less 3D than other sounds in the game, though, so you can still build large, spread-out music contraptions that sound good.

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

    If youd 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.
    Read previous Logic World Wednesdays

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


    [ 2019-08-22 07:42:18 CET ] [ Original post ]

    Logic World Wednesdays: Singers

    Welcome to another Logic World Wednesday! This week, logicworld.net passed 10,000 unique page views. Woohoo!!!

    Singers - Jimmy

    Digital logic is great, but its only useful when it can control devices. Before today, the only output we had in Logic World was displays, which change color when you power them. Introducing Singers!

    https://www.youtube.com/watch?v=H7_rAxlIOEk

    I may have gotten a little carried away with the demo for these. Thats the main reason this post is so late. I hope you think its as cool as I do :)

    Board uploading - Felipe

    Once Logic World is released youll be able to upload your boards to logicworld.net and browse everyone elses, and this week Ive been working on the system that will allow you to do this straight from in-game.

    As you may remember from previous LWWs, the game utilises an RPC connection to logicworld.net in order to do stuff like logging in and interacting with friends, which means that Ive already got a connection to the logicworld.net server through which I can send the board file. The game will split up the board file in 10kB chunks, export the boards model as a .obj file and calculate the hash of the entire file, all of which will get sent to the server as soon as you press Upload on a board. Once the server has received all the data and has checked that the hash matches, youll be directed to logicworld.net/Upload, where youll be able to adjust your boards title and description and upload some good-looking pictures.

    You may have noticed that when you press the Upload button on the client youre not obligated to follow up and publish the board on the site, in which case the server will keep the board file indefinitely while not being public. This is less than ideal, as over time the disk would be full of forgotten board files that never ended up being published. To overcome this, each board you upload will be assigned an ID as soon as you press the button, which will be stored in the database along with the time at which you started the upload. Every hour we check for uploaded board files that are older than 4 hours, which will be deleted from disk and from the database.

    My goal with this system was to make it easy and quick to share your boards from inside the game, while being flexible by completing the publication from the website so that I can expand it to allow for the uploading of worlds as well.

    UI Refactoring - Jimmy

    I spent a lot of time this week going over the code for the various menus in the game. Ive been cleaning it up and abstracting the systems so theyre easy to use in future menus. Ive also made significant performance improvements to a lot of our UI.

    This stuff isnt super fun to talk about, but its a necessary part of the process of making a game.

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

    If youd 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.

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


    [ 2019-08-01 07:48:37 CET ] [ Original post ]

    Logic World Wednesdays: Board Models Component Resizing


    Welcome back to another Logic World Wednesday! This week, Logic World surpassed 3,000 wishlists on Steam. Thank you to everyone for your support!

    Board Models - Jimmy

    I added interactable 3D models to the board menu! Now you can see what your saved circuits look like before you load them.

    https://www.youtube.com/watch?v=igAYHnccKnY

    Sometime in the future I'd like to let you 3D print these models. I would love to have a little circuit for my desk, that would just be so cool.

    Resizable Components - Jimmy

    Ive been working on a system for resizing components in the same way you can resize boards. This will eliminate the need for having many different components that are just the same component resized.

    https://www.youtube.com/watch?v=oYLexydk888

    This feature was suggested last week by . Thanks, Cats!

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

    If youd 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.

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


    [ 2019-07-25 08:24:18 CET ] [ Original post ]

    Logic World Wednesdays: Labels Grids

    Label UI - Jimmy

    Labels are blocks with editable text on them. I added them to Logic World a while ago, but there hasnt been an in-game way of editing them. This week I finally added that menu, as well as the ability to change the labels color!

    https://www.youtube.com/watch?v=VHx5iKpETR4

    Grid Placing - Jimmy

    Grid Placing is a new feature that lets you quickly place many components in a grid.

    https://www.youtube.com/watch?v=-HISkMNYbK4

    One of my goals with Logic World is to make the building mechanics fast and easy to use, and Grid Placing is a big part of that!

    C# to JS - Felipe

    I'm finally back from vacation! Unfortunately I'm going to have less time for LW stuff as I'll be busy with school, however this week I did have time to add something to my vue-aspvalidate library: as you may remember from my last LWW section in order to, say, validate an email there has to be a snippet of C# code that validates it in the back-end and a snippet of JS that validates it on the front end, which meant writing duplicate code for each kind of validation. This is obviously less than ideal as youre writing everything twice, so I set on to find a way to take C# code and translate and send it to the client.

    I arrived at a solution using the wonderful LINQ Expressions API in C# that lets you pass a method a lambda (i.e.value => value.Length > 10) and then go through it using an ExpressionVisitor, which lets you see the lambda as a regular C# object of a type derived from Expression. For example, the previous example would call the VisitBinary method on your visitor, which in turn lets you visit the left and right sides of the > operator and so on.


    This means that a single-line validator like value => value[2] == @ && value.StartsWith(lol) || Regex.IsMatch(value, .*?%$) gets translated to the JS code value => value[2] == @ && value.startsWith(lol) || new RegExp(.*?%$).test(value). As you can see, some BCL methods get translated to their JS counterparts, allowing me to write complex validators without worrying about writing any JS code!

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

    If youd 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.

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


    [ 2019-07-18 02:56:21 CET ] [ Original post ]

    Logic World Wednesdays: The Thursday Edition II


    Sorry for the late post. Programming is hard!

    D-Latches - Jimmy

    By popular and passionate request, Ive added D-Latches to the game!

    https://www.youtube.com/watch?v=3yc_-BV-tc0

    The D-Latch is the first of many new logic components we will be adding to Logic World. Stay tuned :)

    Board Saving Menu - Jimmy

    Last week I showed off Board Saving, but it didnt have a menu yet. Ive been working on the user interface for that feature.

    https://www.youtube.com/watch?v=_1xZnSnmKTo

    This is the most complicated user interface Ive ever programmed. It was definitely worth my effort, though: I expect many people will have hundreds of saved boards, and they need to have a good way of organizing them.

    Form validation - Felipe

    If theres something thats annoying to both users and web developers, its form validation. Most if not all user input needs to be checked, for example to make sure a users email is a valid email address.

    Every form in our website corresponds to a class in the server, for example the login page gets transformed into an object with two fields: string Username and string Password (this will be relevant later). In this case theres not much to verify, other than that neither fields are empty, but in more complex forms like the register form you may have to verify the email format, the username length, the password complexity, etc. These requirements have to be verified with the same criteria on the front end (for a smooth and instant response), and on the back end (in case the client fails to verify the data).

    As you may or may not already know, the website is made of different technologies for the front and back side, each with their respective languages (C# and Typescript in this case). This means that validation criteria have to be defined on both the back and the front end and in ways appropriate to each language.

    ASP.NET Core (the technology used in the back-end) has support for decorating the members of the aforementioned data class with attributes, which makes for a smooth and clear indication of the requirements of the forms inputs. For example, this is how a register form could look like:



    The problem is that in order to enforce these same rules on the client, youd have to manually check the usernames length, use a regex for the email, etc. Ideally these same rules would be transferred to the client and automatically applied, so that youd only have to specify the requirements once. This is exactly what my new library vue-aspvalidate does! It allows you to validate inputs on the client and the server while only writing the requirements a single time on the server class.

    This will save you a lot of time since you wont be writing duplicate code, while also making it less buggy and, perhaps most importantly, making sure that the server and client agree on their requirements. Its also very extensible, letting you define your own rules with client and server logic.

    Board Save Format - Jimmy

    Last week when I showed off Board Saving, saved boards and saved worlds used a different file format. This week Ive unified the systems so that boards and worlds are saved with the same logic. This means less code, which is always a good thing!

    There is also now a debug option to save boards as text data instead of binary data, in case you need to edit the files manually.

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

    If youd 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.

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


    [ 2019-07-05 02:59:35 CET ] [ Original post ]

    Logic World Wednesdays: The logicworld.net Store

    The logicworld.net Store - Felipe

    Weve decided we want to sell Logic World on our own store in addition to third party stores like Itch. When you buy through logicworld.net, youll be able to download the game completely DRM-free and straight from our website. Additionally, 100% of your money will go to us. We are planning to support payments through PayPal, Stripe, and PaySafeCard. In the future we might also sell physical merchandise on our store.

    Weve updated our and to reflect this new way of purchasing Logic World.

    Saving Boards - Jimmy

    Ive been working on a system to save circuit boards youve built stuff on. Often in Logic World you need to use a circuit many different times, so now you can save your circuits and load them again whenever you need them.

    https://www.youtube.com/watch?v=Hw8QMKr0C9k

    In the future youll be able to upload and share your saved boards on logicworld.net.

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

    If youd 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.

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


    [ 2019-06-27 02:43:27 CET ] [ Original post ]

    Logic World Wednesdays: The Detailed Edition

    Website Update - Felipe

    This week Ive improved a few details on the website. First of all, I fixed the annoying newline formatting, now you can insert more newlines after a paragraph using
    tags. Also, now you can see each posts score when browsing a forum, along with the existing comment count. Ive also fixed a couple of issues involving comment deletion, as well as added the possibility to edit comments!

    Heres a picture showing the forum details:



    Configurable Displays - Jimmy

    The main output component in Logic World is the Display. Displays change color based on the state of their inputs. Previously, these colors were predefined, but this week Ive added the ability to change them.

    https://www.youtube.com/watch?v=jqNI9Nek8AA

    This feature was suggested by . Thanks, Jarvi!

    Details

    Every week were adding small details and polish to Logic World. Individually, these are too small to get mentioned on Wednesdays, but from now on well be doing compilation videos that show them off.

    https://www.youtube.com/watch?v=u5TI6OQoU8Q

    The difference between a game thats pretty good and a game thats fantastic is the attention to detail. We want every single part of Logic World to be a smooth and polished experience.

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

    If youd 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.

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


    [ 2019-06-20 02:47:22 CET ] [ Original post ]

    Logic World Wednesdays: The Even More Colorful Edition

    Color Picker v2 - Jimmy

    Last week I showed you an early version of the Color Picker menu. Ive spent a lot of time this week polishing and improving the color picker and its now my favourite piece of UI in the game.

    https://www.youtube.com/watch?v=WpFBcw5cb3A

    The color picker now has:

    • an HSV wheel
    • a hex code input
    • sliders for red-green-blue and hue-saturation-value
      • these can be toggled on and off individually
      • the slider colors update to reflect what changes they would cause
      • each slider has a field to manually enter a value
    • a list of saved colors
    • keyboard shortcuts


    Profile Pages - Felipe

    Ive done quite a bit of work this week on the logicworld.net user profile pages, which were quite lackluster before.

    The first thing I did was to add a badge system, which are shown in the bottom part of the sidebar in your profile page. Right now the only earnable badge is the Verified email one, which you can of course earn by verifying your email address (if you signed up using a Google account you wont need to), so go ahead and try it! In the future we will be adding more badges that youll be able to earn by for example purchasing the game in stores, winning contests or participating in events.

    I have also added a customizable bio to your profile, which is a short paragraph of text in which you can talk a little about yourself or link to your social media (remember, Markdown is supported!)

    Heres a picture showing these two features:



    You may also have noticed that theres a number indicating the total amount of likes your posts have gotten. In the future you'll be able to like comments as well, and those likes will contribute to your total.

    In the right side of the page youll now also see a feed of the users activity, i.e. posts and comments, which you can filter and sort!



    Configurable Menus - Jimmy

    Ive been working on a system that lets you adjust menus to your liking.

    https://www.youtube.com/watch?v=m2T1fEJ_8aM

    All Configurable Menus allow you to adjust their size, shape, and position on the screen. In the future, some menus will have additional control panel options that are specific to them. I want Logic Worlds interface to be as customizable as possible, so everyone can have the menus set up how they want or need.

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

    If youd 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.

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


    [ 2019-06-13 23:31:11 CET ] [ Original post ]

    Logic World Wednesdays: The Colorful Edition

    Welcome back to another Logic World Wednesday! Before we begin, wed like to share that this week Logic World surpassed 2,000 wishlists on Steam. Thanks everybody!

    Colors! - Jimmy

    This week Ive been working on a menu that lets you choose colors! It will be a sub-menu in many different higher-level menus. Currently you can use it to change the color of circuit boards, buttons, and switches. Check it out:

    https://www.youtube.com/watch?v=aYP0pURAjFs

    Graphics Improvements - Jimmy

    This week Ive been making improvements to Logic Worlds graphics. The game now not only looks better, but it runs faster as well.

    Lightweight Render Pipeline

    Logic World is a 3D game, but its 3D world is displayed on your 2D screen. A Render Pipeline is a library of code which takes that 3D data about the world and converts it to a 2D image to be displayed on your screen.


    Previously, Logic World was using Unitys built-in render pipeline, but this week Ive ported it to a new pipeline called the Lightweight Render Pipeline or LWRP. I did this for two reasons:

    • Performance. LWRP is built to be as fast as possible. Its missing some advanced features - such as realtime global illumination and detail maps - but Logic World is not a realistic looking game so we dont need realistic rendering.
    • Modernity. Unity is moving away from its old built-in render pipeline and will eventually deprecate it entirely. By using one of the modern render pipelines, we ensure that well always have access to the newest and fanciest rendering tech.


    It was a lot of work to move everything over to the new system, but Im glad I did it.

    Ambient Lighting

    Ive added omnipresent soft lighting to the world, so you can see what youre doing even in shadow. In the future, the amount of ambient lighting will most likely be configurable.

    New Outline Tech

    In Logic World we use outlines to highlight objects in 3D. This is most often used to show which object youre looking at or which object you have selected. Our old outline system doesnt work with LWRP, so I took this opportunity to upgrade it.



    Not only do the new outlines look better, but they can also be any color now. The previous system was limited to only three colors. Now that that restriction has been lifted, we have much more freedom, and can communicate the meaning of an outline with more flexibility.

    Video

    Ive made a short video that shows off our new rendering setup and what each layer of the rendering stack adds.

    https://www.youtube.com/watch?v=Z2qQ596gM7s

    Web notifications - Felipe

    Now theres a bell in the top right side of the navbar in logicworld.net. It will light up whenever you get a notification! Youll also be able to see the details of each notification if you click on it! This bell will only be visible when youre logged in.

    Currently you only get notifications when someone replies to your post or comment, but in the future youll get a notification when someone you in a comment or post, and youll be able to subscribe to a thread and get a notification when a new comment is posted!

    Better notification settings - Felipe

    Previously, youd get an email whenever someone replied to your post or comment. This is great except for the fact that you cant choose whether or not to receive them, thats why now theres another column in the
    Account Settings page that allows you to enable and disable web and email notifications for each type of notification (currently only replies).

    Big Component Rotation - Jimmy

    Ive made rotating big components more fluid and intuitive. Previously they would always be rotated around their corners, but now they are rotated around whichever point youre looking at. This is kind of hard to describe with words, so heres a video:

    https://www.youtube.com/watch?v=D1MocWQzV4s

    Friends List- Felipe

    Ive finally added a friends list to the game, which will show you the name of every one of your friends, as well as their profile picture and their current status!

    Heres what it looks like currently:



    Keep in mind this is really WIP as of now (as can be seen by the white profile picture).

    This menu will be used for various things related to multiplayer games, like inviting people to your singleplayer game and playing challenge packs with friends.

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

    If youd 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.

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


    [ 2019-06-06 05:07:32 CET ] [ Original post ]

    Logic World Wednesdays: The Friendly Edition

    Friends/RPC system - Felipe

    One problem of releasing Logic World on multiple platforms is not having a way to easily connect with your friends that have bought the game on a different shop. Thus, I set on to build a friends system, akin to that of steam (although much more barebones). This means that youll be able to chat with your friends and join their games, no matter where they got their copy of the game from, be it Steam, Itch.io or Gamejolt!

    The system is powered by a gRPC server running on the cloud, to which clients will connect to in order to send and receive messages in real time. This whole system is completely opt-in, meaning that we wont bother you at all if you choose not to create an account.

    Game ownership verification - Felipe

    To access the friends system, we must verify that youve successfully bought the game, which you can prove through your linked Steam account or by authenticating on itch.io. You only have to do this once, and youll be able to add your friends!

    Component Flipping - Jimmy

    A number of components in Logic World have parts on both sides of circuit boards. This week Ive added a building mechanic that lets you flip these components upside down, either before or after you place them.

    https://www.youtube.com/watch?v=KnnBNeEzD5I

    Remote World Downloads - Jimmy

    In Logic World, the client and the server use the same code to store their internal physical models of the world, and this model is synchronized between the server and all the clients that are connected to it. Previously, only the server had access to the code that generates save files from this model of the world. Ive modified the save code to work without the server, only that shared physical model of the world. This means that when youre connected to a server, you now have the ability to download that servers world.

    Save Options - Jimmy

    Logic World has two methods of saving your progress. First, it will save your game to the current save file. Second, it will automatically backup your save file, just in case. This week Ive been working on making these two systems more configurable, and you now have the following options:

    • automatically save when the game is closed (true/false)
    • enable/disable autosave
    • time interval between autosaves
    • enable/disable auto-backups
    • time interval between auto-backups
    • an option to make a backup every time the game is saved (this would be in addition to auto-backups if you have them enabled)
    • the location on disk which backups are saved to
    • the maximum number of backups to keep per-save before the oldest one is deleted


    Image Embeds - Felipe

    Currently, if you want to upload an image to a post on the forum youd have to previously upload it to an image uploading site (we were using Imgur), and then insert the image using Markdown notation. However, now you can directly upload images to logicworld.net and insert them into your post by writing {{!N}}, where N is the index of the image youre referencing. Heres how the UI looks like at the moment:



    I do want to make it prettier but this works for now, even if its not the best UI.

    Search Shortcuts - Jimmy

    Last week left a comment suggesting a keyboard shortcut for the search function in the selection menu, and this week Ive added it. When you run a search, you can now press enter to add the first search result to the end of your hotbar. It also selects the entire search box so you can immediately begin searching for another item without having to use backspace. There are a few more advanced shortcuts as well:

    • alt+enter will add the item to the beginning of the hotbar instead of the end
    • shift+enter will replace the currently selected hotbar slot with the item
    • ctrl+enter will insert the item into your hotbar right after the currently selected hotbar slot


    Ive found that these become muscle memory quite quickly, and they allow experienced players to edit their hotbar without ever using the mouse.

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

    If youd 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.

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


    [ 2019-05-30 01:24:45 CET ] [ Original post ]

    Logic World Wednesdays: Menus and More


    Welcome to another Logic World Wednesday! This week, Jimmy works on the UI system for the game, and Felipe continues to add features to logicworld.net.

    Were trying out a new format this week: rather than giving each developer their own section, the post is divided into sub-topics, each with a developers name attached.

    UI Refactoring - Jimmy

    I spent this week going over all our UI code, adding features, fixing bugs, and reworking everything to be more flexible/modular. The goal is to establish a set of tools that help us build functional and beautiful menus very quickly. This isnt quite done, but its close.

    Localization Improvements - Jimmy

    Logic World will be localized into several different languages. This week Ive made some improvements to the system that allows the game to switch languages.



    Firstly, mods can now use the localization system. Mods can now add translations for any text they add. Mods can even add entire new languages!

    Next, I added a language fallback system. This allows localized text to revert to a different language if a translation is not found in the preferred language. For example, say youre a native Spanish speaker but you know some English. You have the game language set to Spanish. However, youve installed a mod which only has translations for English and Portuguese. Without language fallback, all the text from that mod would say missing localization - but if you assign English as a fallback, that mod will be in English even while the rest of the game is in Spanish.

    If youre fluent in a non-English language and youd like to help translate Logic World, please send us an email at . Translators will get their name in the game credits!

    Post likes - Felipe (aka pipe01)

    Last week I was crunching numbers and I discovered that more people are visiting Facebook than logicworld.net. While investigating, I found that we were missing a like button! This shall be no longer; there is a button with a heart in it at the end of
    this post on logicworld.net, make sure you try it out!

    Nested comments fix - Felipe (aka pipe01)

    As you may have noticed on the last LWW, comments werent working properly. Specifically, you werent able to reply to 1-level deep comments. I havent yet found the change that introduced this bug, but I suspect its related to a merge in posts and work items (more on work items later ). Whatever the cause, Im sorry for breaking conversations in the last LWW. To make up for this, make sure you give us your thoughts this week!

    Comment notifications - Felipe (aka pipe01)

    Some people were affected by a bug where you wouldnt get an email notification when someone replied to one of your comments. This was caused by a user preference that I added in the back-end but ended up not adding to the settings page itself. Thus, the default value was to not get any notifications! This has now been changed to always receive notifications, but expect an option in your account settings in the future.

    Delete comments - Felipe (aka pipe01)

    Not much to say here, now you can delete any comment you have posted. This will be accompanied by comment editing in the near future, so look forward to that.

    Comment permalinking - Felipe

    Its useful to be able to refer someone to a specific comment, which is why this week I added comment permalinks that look like https://logicworld.net/Forum/Comment/18. You can get this link for any comment either through the comments date text or the dropdown options menu.

    Menu Palettes - Jimmy

    All the menus in Logic World uses a consistent selection of colors. This week Ive been working on a system that lets you easily modify that selection.



    Now, when I add something to a menu, I dont choose a color for it, I choose a part of the palette for it. That menu element (a block of color, a scrollbar, some text, ect) is then assigned a color based on the current palette.

    Originally I was doing this to save myself time; if I want to slightly change the shade of one of the colors, I now only need to do it in one place rather than adjusting the shade in every individual UI element that uses that color. But then I realized that this system could be used to support multiple different UI themes, and so thats exactly what were doing. Logic World will ship with a few different menu palettes, and mods can add additional palettes. Youll be able to personalize Logic Worlds menu colors to look exactly how you want them to!

    Thumbnail fetching - Felipe

    If youve ever shared a link on Discord or Reddit you may have noticed that they have an image attached to it. This image didnt show up on any logicworld.net links as I had overlooked it, but now theres a pretty logo! I plan on customizing the image for each page, for example showing the first image found if the link belongs to a post.

    Before:



    After:



    Search Lock - Jimmy

    Last week I showed the search system in the selection menu. By default, when you close and re-open the selection menu, the search box is cleared. This is convenient because it lets you search for something, grab it, close the menu, and have everything back to normal when you open the menu again. However, you might not always want this to happen. For example, maybe youre using search to narrow down the displayed components to a particular subset which you want to return to later.

    Ive added a Lock toggle to the search box. While Lock is on, the search box isnt cleared each time the menu opens.



    Database backups - Felipe (aka pipe01)

    Perhaps most importantly of all, we now have a database backup system that runs periodically. Right now this includes all user data, as well as posts and comments. In the future though, you will be able to share worlds, boards and mods, which will also be included in the automatic backups.

    All websites come to an end eventually, and ours will probably be no different. When that happens, we pledge to release all of this data as a torrent for all of you to download and preserve this bit of history!

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

    Thank you to the following people for translating the selection menu for this post:



    If youd 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.

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


    [ 2019-05-23 00:24:31 CET ] [ Original post ]

    Logic World Wednesdays: Steady Progress

    Jimmy

    UI work

    This week I did the first serious work on menu design for Logic World. I overhauled the Selection Menu, which you use to select the components that appear on your hotbar.

    Before:


    After:


    Im pretty happy with the overall design elements: rounded rectangles, mostly in neutral tones with some splashes of color for highlights. Im using the selection menu as a study to figure out what I want the rest of the games menus to look like.

    On the subject of the selection menu, I added the ability to search it. This can be really useful if youve got a lot of mods installed.

    https://www.youtube.com/watch?v=YPIohAjnDFM

    Pick Component

    I added a new shortcut for managing your hotbar called Pick Component. Middle clicking on a component in the world will add that component to your hotbar if its not already there and select it.

    https://www.youtube.com/watch?v=Y1BEQJxTx5s

    Not shown in the video is two more advanced features of Pick Component. If you hold ctrl when you press the button, the picked component will replace the component in your currently selected hotbar slot, rather than adding a new one. Conversely, if you hold shift, the picked component will be inserted at the position of the currently selected hotbar slot, rather than being inserted at the end of the hotbar.

    Rounding

    In Logic World, the position and rotation of objects in the world are stored as floating point numbers. This makes them very performant, but floating point numbers have a disadvantage: they are subject to rounding. If youre a programmer and youve worked with floats before youve probably seen them have a value of 0.99999823 when they should just have a value of 1.

    This tiny amount of rounding is usually no big deal, but in logic world the errors were accumulating over time. Particularly in worlds where you have deeply nested chains of boards placed on other boards, the position of objects could sometimes be off by a noticeable amount.



    Notice how the inverter in this picture is slightly offset from the grid.

    To fix this, Im now rounding the position and rotation of every object in the game: positions are rounded to the nearest millimeter (along all 3 axes) and rotations are rounded to the nearest tenth of a degree (again along all 3 axes). This extra rounding is too small to be seen in-game unless youre looking closely, but its big enough that it cancels out any errors we get from floating point shenanigans. Everything in Logic World is now exactly where it should be.

    Numeric Component Types

    Each component in Logic World has a type. There are Inverters, Delayers, and XOR gates, to name a few. Before this week, component types were stored internally as pieces of text. That meant that, depending on the length of the type name, component types could take up 15 or even 20 bytes!

    Now, however, Ive refactored the system so that component types are all stored as two-byte numbers. Each save file has a unique relationship between component types and the numbers. For example, the number 18 might represent an XOR gate on one save file, but it might represent an inverter on another save file. This means that mod authors dont have to make sure theyre not using the same number as another mod when they add a component type; the game will automatically give them a number that is not already in use by the save file.

    As a result of this, save file size - and by extension, the time it takes to save and load the game - has been reduced by about 20%. The amount of bandwidth used when playing online has been similarly reduced.

    Board Resizing Bug Fixes

    If you watched the previous two videos on Board Resizing, you probably noticed that there was an annoying visual flicker whenever the board was resized. Ive fixed that and board resizing is nice and smooth now.

    Previously, if you resized a board that had components attached to it, the position of those components would get screwed up. This is because behind the scenes, resized boards are changing their position, and the attached components were not properly taking this into account. Ive fixed the math and it all works nicely now.


    Felipe (aka pipe01)

    This week I wanted to polish out some things that I had left out on the website, those being emojis not rendering correctly and user pages not working. Whenever you inserted an emoji into a comment or a post itd show a ? instead, which made me think that there was some encoding issues. I began investigating the database and found that they were being stored as question marks there, so the problem was in the database. I set the collation for all tables to utf8mb4_general_ci and tried again, and emojis were working properly now! I also fixed user pages requiring you to be logged in in order to see them, it was an easy fix.


    On the game side, Ive implemented synchronous RPC calls. Before this, whenever a mod called an RPC method it would be a fire-and-forget situation, where the mod had no way to know whether or not the server had received and processed the call. This is probably enough for most things, but there may be some cases where this is undesirable. Synchronous means that the mod code will now wait for the server to send back an acknowledgement before continuing execution, which allows for more complex synchronization between clients and server!


    On the topic of waiting, Ive added a loading screen for mods. Mods were being loaded in the main thread, which meant that the screen wouldnt update until all mods were loaded. This worked fine, but it didnt allow for any graphics in the meantime. Now, mods are loaded in a separate thread, allowing the game to monitor the loading and inform the user!

    ---------

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


    See you next Wednesday!

    View this post on logicworld.net.

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


    [ 2019-05-16 02:51:41 CET ] [ Original post ]

    Logic World Wednesdays: One Thousand Wishlsits

    Welcome back to Logic World Wednesdays! Before we begin, wed like to share an exciting milestone with you: a few days ago, Logic World passed 1,000 wishlists on Steam. Thank you - all 1,000+ of you - so much for your support!

    Jimmy

    I started off this week by polishing the Board Resizing mechanic I showed off last week. If youre not familiar, the main construction element you use in Logic World is circuit boards. Board Resizing allows you to edit the size and shape of boards that have already been placed in the world, which makes building stuff a much smoother experience. Here are the improvements I made this week:

    • added diagonal arrows
      • holding shift while resizing diagonally snaps the shape to a square
    • added checks to prevent resizing the board into an invalid position
      • board arrows will be disabled if you cannot resize at all in that direction
    • redesigned arrow appearance
    • you can now see and interact with the arrows if theyre occluded by something
    • you can now click any part of the arrow and it works correctly
    • some arrows now smoothly animate into position rather than snapping

    And heres a video showcasing those improvements:

    https://www.youtube.com/watch?v=Iq5nftvaYTM

    Next, Ive started work on a set of advanced text rendering assets for the game. If youre not a native English speaker, youve probably at some point typed a character from your language into a game and seen it replaced by a square because the game doesnt know what that character looks like.



    I want that to never happen with Logic World, so Ive started a project called EveryGlyph which aims to render, well, every glyph.





    EveryGlyph uses Google's Noto project for glyph geometry. Noto is a set of fonts for every language that are all consistently styled with each other. Its a really cool project and Im quite grateful that Google lets everyone use it for free.

    To actually render those fonts, EG uses Signed Distance Field - or SDF - Text Rendering. This is a technique developed at Valve for Team Fortress 2. SDF makes the glyphs look smooth no matter what size they are.



    EveryGlyph will be used in Logic World to render text on labels, in the games menus, and in the game chat, which will let you send messages to other players on the same server. No matter what language you speak - or what unconventional emoticons you like to use - all your characters will display properly.

    Next week Im going to add emoji support to EveryGlyph. An inside source told me that kids these days like emojis, and this is my plan to make Logic World appealing to them.


    Felipe (aka pipe01)

    As you may remember from the first LWW, mods are divided in client and server side parts. This means that some code is running on the server while some other code runs on the client. RPC (Remote Procedure Call) is a form of Inter-Process Communication that allows the server to call a method on the client, and vice versa. This is accomplished in LW by using my ClassImpl library, allowing the component on the client to not even know what RPC is and still be able to communicate with the component on the server.

    This week Ive been working on greatly optimising the performance of the creating of RPC client/server instances. Ive managed to improve times by a factor of 10! This is really important because every component which contains custom data uses an RPC instance. By drastically improving the performance of creating those instances, I've also drastically improved the loading times for large worlds.

    --------

    If youd 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.


    [ 2019-05-09 03:10:23 CET ] [ Original post ]

    Logic World Wednesdays: The Thursday Edition


    Hello and welcome back to Logic World Wednesdays!

    Jimmy

    Due to some personal life events I took a break from working on Logic World. This is why there wasnt a blog post last week and why todays post is a day late. I am back at it now, though, and Im excited to keep improving this game.

    Ive been working on a feature that Ive wanted to work on for a very long time: Board Resizing. All the structure in Logic World is made up of circuit boards. They are the base upon which you build circuitry. And now you can change their size after youve placed them, using lovely world-space UI.

    https://www.youtube.com/watch?v=OqeBxbnxRto

    Ive also spent a good deal of time tracking down a particularly elusive and annoying bug. I still do not know the bugs cause and solution, but hopefully next week I will have figured it out and I can give you a detailed writeup about it.


    Felipe (aka pipe01)

    This week Id like to talk about the logicworld.net website itself. Im afraid Im going to use technical jargon this time, but I enjoy when I get to know how things work deep down so Id like to give you that sort of experience.


    The website was at first written using ASP.NET Core for the backend and jQuery for the frontend, however this stack was quickly running short of space to expand (mostly due to jQuery) so I decided to make the switch to using the same backend tech but with Vue (and TypeScript and Webpack and all of that) for the frontend. This allowed much quicker iterations (although ironically the Webpack build times took much longer) and, most importantly, more reusability and modularity through the use of Vue single-file components. This meant that new features could be added to the site without giving much thought to how it affected the rest of the pages.


    In order to connect the backend and frontend though, Im using a Visual Studio 2017 extension called TypeWriter. This extension allows you to write TypeScript templates in .tst files that transform C# classes into TypeScript files. This is absolutely amazing since now I only need to write C# code, which will get transformed into the TS code I need in order to use it from the client-side. Currently, ASP.NET Core API controllers are being transformed into TS files that use the axios library in order to send a request to the server. This is an example of a generated endpoint:


    import http from "axios"
    export async function postPost(model: Logic_World.Models.ViewModels.NewPostViewModel, id: number) : Promise { return (await http({ method: 'post', url: "/api/forum/{id}/post".replace("{id}", String(id)), data: model, params: null })).data;
    }


    This has been generated from the following controller method:


    [HttpPost("/api/forum/{id}/post")]
    [Model(typeof(Post))] //This indicates what type of object the endpoint returns on success
    public IActionResult PostPost([FromBody]NewPostViewModel model, [FromRoute]long id)
    {
    ...
    }


    Im also using this technique in order to create simple TS models from C# classes, as you can see with the Post and NewPostViewModel types.

    All of this means I no longer have to worry about writing bridge code between the back and the front end, and instead its all generated for me as soon as I hit Control+S.

    Although, this has one big drawback: you must use Visual Studio 2017. It would probably be a much better experience if it was integrated into the .NET build process, but alas its a VS2017 extension which means that you must have it open in order to apply any changes youve made. I would still 100% recommend this extension if youre working on anything related to this; it doesnt even have to be web-related.

    So, I hope you were able to follow through. I promise next week it will be more interesting and less tech-loaded.


    If youd 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.


    [ 2019-05-03 02:42:30 CET ] [ Original post ]

    Logic World Wednesdays: The Inaugural Edition

    Welcome to the very first Logic World Wednesday! Each week, we will be sharing our progress on Logic World. This blog is going to be a mix of technical and non-technical discussion.

    Jimmy

    This week I added a feature I call multi-wire placing. In Logic World you create wires by clicking on two pegs to connect them. Often, however, you need to create many wires going in the same direction; think data busses. This can become tedious very easily.

    One of our goals with Logic World is to make building as non-tedious as possible. Thats where multi-wire placing comes in. With MWP, you select two groups of pegs, and connections are created between the groups in the order you selected them.

    This is kind of difficult to explain with text, so heres a video showcasing the mechanic:

    https://www.youtube.com/watch?v=6P6E4Sj5qMs

    I also added Exclusive Inputs. Normally, inputs in Logic World can both receive and propagate signal. But this can be undesirable; if you have several wires feeding into an input, you might not want signal to travel between them.

    Every input in Logic World can now be toggled between exclusive and non-exclusive mode. In exclusive mode, inputs can only receive signal - they cannot propagate it. This allows you to make complex circuits very space-efficient, since you no longer need to build special gates where you only want the signal to go one way.

    https://www.youtube.com/watch?v=03dJFo5qYQw

    If youve been following Logic World for a long time, you might remember me talking about Multi-Wire Placing and Exclusive Inputs in the past. I had both of these features working in October of last year. In November, however, we scrapped almost all of the code wed already written for LW. The game was rebuilt from the ground up in a completely different way which is much more performant and which allows for multiplayer. So this week I re-implemented multi-wires and exclusive inputs under the new system.

    Finally, Ive been working on a longer form video that shows off the performance of the game. Its called Counting to a Billion in Binary - look out for that later this week.

    Felipe (aka pipe01)

    Id like to introduce you into some concepts of the modding system. For the first ever edition of LWW, Ill give you a quick overview of how the modding system works and how it doesnt. First of all, mods can contain both code (component logic, like what a component should do when one of its inputs gets turned on) and other assets (how a component looks like, etc). Inside the code part of the mod there is another separation: server and client code. Server code handles the aforementioned component logic, while client code controls how the component looks to the camera (Should it change color? Should it grow legs?). These two parts can also share some simple data structures, for example to store how many legs it has.

    On a more technical remark for those of you that do the code, this data is represented as a POCO (Plain Old CLR Object) in both the client and the server, which means that the synchronization of this data between both sides is completely transparent to the modder, making it extremely easy to add custom states to components. Components declare their data through a C# interface, which gets implemented at runtime using a handy library I wrote specifically for this called ClassImpl.

    Separate from the code and inside of the previously mentioned mod assets are the component definitions, contained in a SUCC file in the mod package. This format is the exact same one we use for the stock game components (like the inverter), so you can be sure that youll be able to do everything the existing components already do, and even more! Here youll define the shape of a component and the code behind them, as well as how many inputs and outputs it has and where they are positioned. This gives you flexibility to create cool and odd-looking components with as many inputs and outputs as you want and that behave exactly the way you want them to.
    For example, heres the SUCC section for a regular inverter:


    Tung.Inverter:
    column: "Logic"
    prefab:
    blocks:
    - Standard
    inputs:
    -
    position: (0, 1, 0)
    outputs:
    -
    position: (0, 0.5, 0.5)
    rotation: (90, 0, 0)
    startOn: true
    logicCode: Tung.LogicCode.Inverter
    placingRules:
    GridPlacingDimensions: (1, 2)


    Thats all for this week. If youd 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.


    [ 2019-04-18 03:28:47 CET ] [ Original post ]