Skip to content

Weekly Report 4: Feed System and @Mentions

December 28, 2025

This week we completed the @mentions feature mentioned in last week's report. Doing that required first completing the feed system, which wasn't fully functional before.

When a player is mentioned in proximity chat, the message appears in their feed

Feed System

We hooked the feed system (bottom-left of screen) up to the same UI system used in other HUD components, like the menu (top-right).

We can now programmatically broadcast feed items to players.

The completion of the feed system marks the completion of all core HUD components.

@Mentions in Chat

Players can now mention each other in proximity chat using the @ symbol. When you're mentioned, a notification appears in your feed with a button to open the proximity chat window that we completed a few weeks ago.

We decided to implement this because while in create modes, players cannot see other players or their chat bubbles. The mention system allows other players to still get their attention.

This is the bare minimum. In the future we will need to add things like muting players, preventing mention spam, and other ways to communicate with players (direct messages).

Firefox Compatibility

This week we worked on ensuring full support for Firefox. We encountered multiple issues - one of them was caused by a bug in Firefox's implementation of transferToImageBitmap (ImageBitmapRenderingContext.cpp). If you use createImageBitmap to crop an existing ImageBitmap then pass the result to transferToImageBitmap, the method wrongly uses mImage->GetSize() to determine the canvas size. This returns the size of the original ImageBitmap, not the cropped one, resulting in an oversized canvas.

What's Next

With @mentions complete, we're turning our attention to the "picking" system - the ability to determine exactly what structure/player the cursor is hovering over in the main scene (not create modes).

This may seem like a simple task, but in the context of Pictoria's main scene, we can't simply cast a ray and check which cuboid it hits first because objects are textured with images that have transparent areas.

For example, if a player is hovering over a structure's cuboid, but a transparent part of its texture is under the cursor, we want to ignore that structure and check what is behind it.

This is where "picking" comes in: it's a well-known technique that uses the GPU to render relevant textures to an offscreen buffer, then reads back the pixel under the cursor to determine what is there.

Debug visualization of the picking system, showing which object the cursor is currently over

The video above shows our debug mode for verifying the system works correctly. Next week, we'll be polishing the implementation to ensure that it's efficient and reliable.

Then we hope to implement the first feature that will make use of picking: hovering over players to see their names.