1. Logic World
  2. News

Logic World News

Logic World Wednesdays: The Stochastic Edition

Moar Awesome Character Movement - Jimmy


I've been working on character movement logic, to ensure it feels smooth and pleasant in all situations. You're going to be using the character controller pretty much every single second while you're playing Logic World, so it's important that the movement logic is really solid.

[previewyoutube][/previewyoutube]


Terrain Tech - Jimmy


As I spoke about last week, one of my main tasks for this month is to create awesome environments for you to build circuits in. It's time to put the 'world' in Logic World.

To that end, I've been working on environment tech and tooling this week. I've got a bunch of really cool stuff in the pipeline, but today I want to show you two particular shader features for rendering ground textures.

[h2]Stochastic Texturing[/h2]

Human brains are finely tuned for pattern recognition. So when a game uses a repeating texture, we can easily spot the repetition. We see the grid lines, and it looks "fake".



There are a number of ways to solve this problem, and I did research into many of them this week. The solution I've chosen is procedural stochastic texturing, a technique invented by Eric Heitz and Fabrice Neyret in 2018. Stochastic texturing is fast, it looks amazing, and it's incredibly easy to set up.



The algorithm works by taking random hexagonal samples of the tiled texture, rotating them randomly, then laying the samples out on a hexagonal grid and blending them together. This, in my opinion, is absolutely bloody genius. There's a great visualization of how it works on page 5 of the research paper.

Logic World will use a particular implementation of stochastic texturing developed by Jason Booth for his Microsplat tool. This implementation uses texture heightmaps to blend the samples, to ensure the blends are super high quality with no visible seams.

[h2]Triplanar Mapping[/h2]

A common issue with terrain in video games is that the textures are typically projected onto the terrain from above. This results in very ugly and gross stretching of the textures on steep slopes.



A common and effective solution to this problem is triplanar mapping. This technique uses three projections of the texture, one for each plane in 3D space. The projection used for a particular point on the terrain is determined by the normal to the surface there. At the borders between projections, they are blended together.



I want to build lots of lovely cliffs and mountains. With triplanar mapping, they are sure to look their best 😊


More mice - Felipe


This week I haven't had much time to dedicate to Logic World since I'm preparing for more final exams, but regardless I have made progress on mice, my new microservice library. More specifically, I've been working on migrating all our existing services to this library, which is just tedious work since I have to go one by one.


Bugs Fixed This Week
  • Fixed player vertical flying speed not changing proportionally with player scale
  • Fixed "Player Gravity Scale" slider being adjusted in increments of 1.0 instead of 0.1

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

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/

Logic World Wednesdays: The Upside-Down Edition

Arbitrary World Gravity - Jimmy


For a long time, I've felt that one of the biggest flaws of Logic World is its uninteresting backgrounds. The circuits themselves are super cool, but we need cooler places to build those circuits.

One of my main tasks for December is to add more and beautiful world types to the game. This week I've implemented an awesome tool that will help me to create these worlds: arbitrary world gravity.

[previewyoutube][/previewyoutube]

I forgot to mention it in the video, but the gravity system is totally open to modders. When you mod in a world type, you can control exactly how the gravity works; you can use one of the built-in gravity rules, or program your own.


Bugs Fixed This Week
  • Fixed visual teleport errors if the teleport exit had a different rotation or scale from the teleport entrance
  • Fixed incorrect player capsule rotation in Chairs
  • Fixed missing lighting data on Grasslands
  • Fixed '\\' not being correctly detected and replaced when validating file names for sandboxes and saved boards

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

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/

Logic World Wednesdays: The Safe Edition

Yet More Chat Upgrades - Jimmy


I've finally finished with the chat, after two previous videos on it! I've added some security features to prevent you from being tricked by a malicious link sent in chat, and the chat window is now used for telling players some game information.

[previewyoutube][/previewyoutube]

Shoutout to the many, many people who expressed concerns last week about link security. I was initially going to be lazy and not add the popup, trusting users to take care of their own safety. But that was a bad and irresponsible way of thinking, and y'all called me out on that and held me accountable. Cheers!


Mice: my new microservice framework - Felipe


The Logic World website backend is made up of many different and small services written in Go, each of which takes care of a single "feature", for example comments, ratings, posts, etc. We use Kubernetes in order to manage all of these applications, which takes care of starting them up and scaling them when needed.

Each of these services needs some way of communicating with each other, which was being achieved using the Go Micro framework. This framework in turn leveraged gRPC in order to provide inter-service communication, as well as some other features like events and configuration. This worked just fine, however the Micro library underwent some breaking changes, and it was overall a slight pain to work with, so I jumped the gun and started to write my own library, called Mice.

Mice is lighter and simpler, and it will help me develop Logic World's web architecture faster, while also removing unnecessary overhead from the services. Mice is still not quite at production level since there's still more testing left to do, as well as some features that our services need, like events. Once all that's done I will begin migrating all services to this new framework, which should hopefully not be too hard since Micro's and Mice's APIs are quite similar.


Text Box Settings - Jimmy


As you may know, I struggle with an addiction to adding settings to Logic World. This week I channeled that into some settings for customizing the caret in text boxes.

[previewyoutube][/previewyoutube]


Bugs Fixed This Week


  • Fixed various bugs with the markdown renderer
  • Fixed issues with caching links in text, leading to apparent clickable links on regular, non-link text
  • Fixed some situations where HoverTags could become stuck open

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

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/

Logic World Wednesdays: The Chatty Edition II

It's been a bit of a lighter week for us, but regardless we continue to polish up Logic World.

Chat Enhancements - Jimmy


I did a big fat polishing pass on the chat I showed off last week. There are a ton of little new features and enhancements, and I brought my siblings back to help me show them off!

[previewyoutube][/previewyoutube]


The Merge - Felipe


I have been developing a feature on a separate Git branch in the Logic World repository, and this week I was tasked with merging it with Jimmy's changes. The feature in question is server discovery, which Jimmy needed in order to complete the multiplayer menu he's working on. I took this opportunity to refactor some uglier code that was in the way, as well as unit test some of the areas that would be affected by the merge the most:



I want to keep expanding these tests until most of the server is covered, this will make sure that future changes don't break any existing functionality.


A Glorious Animation


The effervescenct @Red_3D has blessed us with a new Bobby fanimation, showcasing a common fan theory for how Bobbies reproduce. We think it's awesome and that you should check it out.

[previewyoutube][/previewyoutube]


Bugs Fixed This Week
  • Fixed the unicode shortcut being unreliable and buggy in some circumstances
  • LogicUI: fixed the ConfigurableMenu OnWidthChanged and OnHeightChanged events not firing when the width/height was changed by resetting the menu settings
  • Fixed menu buttons sometimes being the wrong color
  • Fixed being able to open the console while typing in an InputField, making it impossible to type "~" or "`"
  • Fixed various bugs with the markdown renderer and link clicking utility

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

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/

Logic World Wednesdays: The Chatty Edition

Multiplayer Text Chat - Jimmy


I’ve added text chat to Logic World! Finally, you can send messages to the folks you’re playing with.

[previewyoutube][/previewyoutube]

I had two very excruciating hangups while working on this feature. I will tell them to you now, because sharing my pain with others helps me to process it in a healthy way.

When I first made chat messages appear, there was a confusing and very annoying bug: each time a new chat message appeared, all of the chat messages would jump to a different position on the screen for a single frame. Obviously this is unacceptable; you can’t have a distracting flicker appear every single time there’s a new message. It seemed like the LayoutGroup responsible for setting the positions of the chat messages was taking an extra frame to fully update, so I manually updated it from code on the correct frame. But this did not work. đŸ€”

I started digging into my LayoutGroup setup, looking for settings that might have caused the issue. I tried all manner of code-based solutions. Nothing worked -- that horrible jitter just watched me and laughed its evil laugh. I was particularly annoyed because there was no jitter in the development console, and Chat uses pretty much the same systems.

In desperation, I dug into Unity’s LayoutGroup source code, trying to figure out where the single frame of jitter was coming from. Unity’s code here is... well, it’s not amazing. They do some questionable things which makes the code very hard to understand and follow. It took a lot of patience, but I eventually dug deep enough to find where errant behavior was originating from. A particular function that was returning the incorrect height value for a single frame. But this function is only called when m_ChildScaleHeight is true. What’s m_ChildScaleHeight?, I wondered.

It turns out that I had accidentally checked a checkbox called “Use Child Scale: Height”. I unchecked this checkbox and the jitter went away.

Six! And a half! Hours! For one checkbox! I do love programming, but sometimes it makes me want to throw my computer off of a bridge.

The other major issue came about when I wanted to do some fancy formatting on the chat message text. Notice that in chat messages which span multiple lines, lines two through infinity are indented slightly compared to the first line. This helps the message to be distinguishable as a single cohesive object.



This is not a formatting function that is natively supported by TextMeshPro, Unity’s text rendering library. It’ll indent all lines, sure; it’ll indent just the first line, no problem; but indenting all lines except the first line? There’s no quick and easy way to do that.

I love TextMeshPro a lot, but what I don’t love is its documentation, or rather its utter lack of documentation for any slightly advanced feature. Figuring out how to achieve this effect involved a lot of digging through Unity forums, a lot of digging through TMP source code, and a lot of trial and error. But, obviously, I eventually got it.

This one only ate up two hours of my life, but it nonetheless drove me ever so slightly slightly closer to total madness.

These are the sacrifices I make for you people.


SharpVue Shenanigans - Felipe


Logic World’s modding system is extensive, but to really enable modders to take advantage of it, we need documentation for all that code. That documentation should be hosted online in an easily accessible format.. Because Logic World is written in C#, I thought that DocFX would be a great fit. It generates a website using plain HTML that describes all of the project’s types and methods, and also allows you to write additional Markdown documents. However, while the resulting webpage did look and work great, I did not like how the tooling itself worked. The docfx command-line interface was clunky and cumbersome, and it’s also very slow for some reason.

This is why I started writing SharpVue. It is very similar in concept to DocFX, however the generation is much faster and the command is very straightforward to use. Another big difference is that the resulting webpage is an SPA written in no other than Vue, which allows distributing the page as a single .html file. You can check a demo documentation page here, which can be downloaded and viewed offline as a single HTML file. Keep in mind that the project is still pretty young and there are some bugs and missing features, and don’t look too closely at the contents since it’s all subject to change.

I had lots of fun working on SharpVue, especially since I got to integrate a Vue project with a C# one which I both really like. It was also really rewarding to see the documentation slowly build up as I implemented more features.


Bugs Fixed This Week
  • Fixed being able to make your teleport shells cast shadows if you turned on the “see your own shadow” setting during a teleport sequence. Now, teleport shells intentionally cast shadows, which looks awesome, and they are properly handled by the “see your own shadow” setting.
  • Fixed fancy pause menu music effects persisting to the main menu music
  • New character controller: fixed player movement not being frozen during the first phase of the teleportation sequence
  • New character controller: fixed weird collision with the ground while flying
  • New character controller: fixed noclip mode not working
  • New character controller: fixed inverse coyote time not working
  • New character controller: fixed raycasts using the position of the player on the previous frame instead of this frame

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

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/