1. Logic World
  2. News

Logic World News

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/

Logic World Wednesdays: The Pauseable Edition

It’s been a bit of a lighter week for us, with Jimmy’s second-favorite holiday and some very stressful world events. But regardless, we’ve continued to plug away at Logic World, and we’ve got some juicy tidbits to share with you on this fine Wednesday.


Endless Pauseabilities - Jimmy


Over two years after I added it (I checked -- it was October 20, 2018), the pause menu now actually pauses the game! I’ve also added some fancy audio effects to the music in the pause menu.

[previewyoutube][/previewyoutube]

The game only actually pauses if you’re playing by yourself. If there are other players in the world with you, it won’t be paused.


Web split - Felipe


Since I performed the latest web rewrite, the service that served your requests was composed of two parts: the front-end and the back-end. The front-end is written in Vue and is served as static files, whereas the back-end is a single GraphQL endpoint. All of these endpoints were being handled by the same service, which meant that the entire service had to be recreated when I made a change to either part of the service. This is less than ideal, as I want to aim for the lowest possible iteration time, so I set on to split these two “ends” into two separate services: one is a very simple and fast static file server for the frontend, and the other is the same service that was previously serving the API, only with the static files removed.

Although it wasn’t the main goal, this change also brought some significant performance improvements when navigating the site, particularly the initial page load. Additionally, if the API service were to be down for any reason (for example very high loads), the static server should still be running and serving the website to the users, which gives us an opportunity of showing them a nice “the site is down” message instead of just completely breaking.


Notifications: finale - Felipe


Last week I talked about a new notifications system on the front-end of the site, and this week I finished it!



I’ve added a new panel that shows you all your notifications, accessible through the bell in the top navbar. From here you can see all of your notifications, optionally showing only the new ones, which can be clicked on to check them out and mark them as read.

And by the way, email notifications were fixed lol.


Continued work on new player controller - Jimmy


My biggest task this week has been to finish the work I described last week on the player controller. I completed the integration and modifications of the third party library I’m using, Kinematic Character Controller, and I fixed all the glitches that popped up. All the features I described last week are fully implemented, and I just need to fix one last big issue (which has to do with how the controller handles “stepping up” onto ledges) before it’s done.

In addition to everything mentioned last week, I’ve also integrated the character controller with the physics system so it can act like a pseudo physics object. Like moving platforms, physics objects aren’t currently used in the vanilla game, but they can be added by mods and I really want to add gameplay features with them after LW 1.0. Previously, the player controller would treat physics objects as static immovable objects, but now the player can exert forces on physics objects, and physics objects can exert forces on the player. Here’s a quick demo video.

Additionally, I’ve done a big refactor of how the game handles player positions. Previously, your head position (the center of the bobby sphere) was used. But this was awkward in a number of scenarios; for instance, when you teleported to [0, 0, 0] your face would be inside the ground. Now player position is handled using the position of your feet; when you teleport to [0, 0, 0], you are standing on the ground. This has also allowed me to refine flag teleportation: previously, after teleporting via flag, you’d be hovering in mid-air and you’d fall a short distance unless you were flying. Now, however, after flag-teleporting your feet will be resting comfortably on the ground.

And finally, I’ve tweaked the logic of how and when the player controller is simulated to better handle game states. Previously, if you opened a menu (such as a component’s menu, the Selection Menu, or the debug console) the player controller would stop being simulated. You would instantly freeze; if you were jumping or falling, you’d hover in midair. Now, however, the player controller is always simulated: it’s just the input to the controller which is paused. Opening menus is like holding a tablet in front of your face, instead of switching to an entirely separate plane of existence.

As I said before, there’s just one remaining issue to sort out before all this can be merged and marked as completed. I know I said there’d be an extensive video on the player controller this week, but it’ll have to wait a little longer. Probably next week. ¯\\_(ツ)_/¯


Bugs Fixed This Week


  • Fixed Hue slider being 0-255 instead of 0-360
  • Fixed being able to scroll in the InputFields of some InputSliders
  • Fixed text links still changing color if you click on a part of the text that is not a link
  • Fixed a rare fatal error when trying to press a Key from a specific angle
  • Fixed footstep sounds not playing
  • Fixed weird scaling issues with the player controller if you spammed the crouch key fast enough
  • Fixed physics objects being unstable when resting on the ground in Gridlands and Grasslands
  • Fixed the server commands simulation.pause and simulation.resume not working

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

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 Smooth Edition

Smooth Scrollin’ - Jimmy


I’ve added smooth scrolling, and added some options to customize the feel of the scroll to exactly how you like it.

[previewyoutube][/previewyoutube]

I’ve wanted to add smooth scrolling FOREVER. Here’s a forum thread from June 2019 where I asked about it, and I have development notes that say “add smooth scrolling” from all the way back in October 2018. It feels SO GOOD to finally have it in the game.


Notifications - Felipe


There are several reasons why logicworld.net might need to send you a notification about something. When somebody replies to your comment, when you’re mentioned by username, or when there’s a new post in a forum you follow, you want to know about it. In the future we might also have notifications for things like friend requests or private messages. Therefore, we need a robust system for sending notifications to users.

This week I’ve started working on merging the notifications system with the website itself, allowing you to see and interact with them. This will include real-time communication, making sure you get to see your notifications as soon as they are created. Unfortunately, almost all work I’ve done so far has been in the backend, thus I have nothing to show. Be sure to tune in next week though, as I will hopefully have finished the frontend!

For each type of notification, you’ll be able to choose whether or not to get a web UI notification, a browser notification, and an email about the notification.


Player Controller Overhaul - Jimmy


This week I’ve been working on an overhaul of the systems for moving your character around in the world. Here are some advantages of the new system over the previous system:

  • Much smoother and more reliable collision detection, and better handling of edge cases like sloped hallways
  • More customizability to the user: parameters like step up height, max stable slope angle, stick to ground force ect can now be tweaked to preference
  • The ability to rotate the character, so world types with custom gravitational geometry -- like a spherical planet -- can finally be added
  • Way way way WAY better modding support. It is now crazy ridiculously easy to implement custom character movement logic.
  • The ability for players to stand on platforms that are moving and rotating, with momentum handled properly as you jump on or off of them. This is unused in Logic World for the moment -- at least, without mods -- but it’s needed for some stuff we want to do after 1.0.


This stuff is really f****** complicated and so I wasn’t able to finish it for this week. But look out next week for a video showing off the new controller, featuring some of that custom gravity I mentioned :)


Color Picker Refresh - Jimmy


I added dark outlines to all parts of the Color Picker UI, to bring it inline with the new Logic World UI style.



I’m really surprised by how much better this looks. I was originally planning to not even mention it in this blog, but it looks so good that I can’t help but show it off.

I also took the opportunity to finally add anti-aliasing to the Color Picker Triangle, fixing its ugly jagged edges. Nobody has ever pointed them out, and I might be the only one who even noticed; but regardless, it’s all nice and smooth now :D




Bugs Fixed This Week


  • Fixed being able to exceed the maximum CircuitBoard size using the Board Drawing mechanic
  • Fixed being able to exceed the maximum CircuitBoard size using the "snap resizing size to square" mechanic
  • Fixed intro screen text not changing color with UI palette
  • Fixed SUCC newline escapes not working properly
  • Fixed various issues with clickable links in setting descriptions and the about menu tabs
  • Fixed various typos in the localization files
  • Fixed not being able to hold down Buttons and Keys with the mouse while in a Chair


Happy Halloween from Mouse Hat Games!


Happy Halloween, friends! May your haunts be spookish and your candies multitudinous.



Please enjoy this SHINY BOBBY pumpkin, from the incredible mind and workshop of Jimmy’s Dad.



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

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/