▶
Logic World Wednesdays: Bits and Bobbies
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 :)
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 this one. 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!
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.
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.
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 :)
[ 2020-10-15 00:10:19 CET ] [ Original post ]
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 this one. 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
[ 2020-10-15 00:10:19 CET ] [ Original post ]
Logic World
Mouse Hat Games
Developer
Mouse Hat Games
Publisher
2021-10-22
Release
Game News Posts:
106
🎹🖱️Keyboard + Mouse
Very Positive
(271 reviews)
Public Linux Depots:
- Logic World - Linux [1.75 G]
Build. Program. Simulate. Logic World teaches you how circuits do math.
Key Features
- Digital Logic - Build circuits that work the same way real world computer chips do.
- Challenges - Solve puzzles from simple logic gates to complex machines like calculators and data storage.
- Multiplayer - Logic World is built from the ground up for collaborative multiplayer. Take on Challenges with your friends or build together freely in Sandbox mode.
- Performance - Build massive circuits and simulate them at thousands of updates per second - all without lag.
- Modding - Logic World features powerful modding tools - the same tools the developers are using to make the game.
- Online Hub - Players can upload their builds, mods, and custom challenges and share them with other players.
MINIMAL SETUP
- OS: Ubuntu 14.04
- Processor: 2.4GHz Quad CoreMemory: 8 GB RAM
- Memory: 8 GB RAM
- Graphics: Intel HD Graphics 4000 or AMD Radeon R5 series
- Storage: 2 GB available spaceAdditional Notes: system requirements might be adjusted before release
GAMEBILLET
[ 6138 ]
GAMERSGATE
[ 3395 ]
FANATICAL BUNDLES
HUMBLE BUNDLES
by buying games/dlcs from affiliate links you are supporting tuxDB