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

 

SUPPORT TUXDB ON KO-FI

MENU

ON SALE

New Twitch streamer aggregation implemented (#FuckTwitch) due to Twitch's API issues (more info on my Discord )


Name

 Logic World 

 

Developer

 Mouse Hat Games 

 

Publisher

 Mouse Hat Games 

 

Tags

 

Simulation 

 

Singleplayer 

 

Multiplayer 

 

 Co-op 

Release

 2021-10-22 

 

Steam

 € £ $ / % 

 

News

 106 

 

Controls

 Keyboard 

 

 Mouse 

 

Players online

 n/a 

 

Steam Rating

 Very Positive 

Steam store

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

 
Public Linux depots

 Logic World - Linux [1.75 G] 




LINUX STREAMERS (0)




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 ]