Update Rundown - March 2024

Update Rundown - March 2024

updates
Cover: Sector-6 [Showcase] by ZL3X

Hello everyone!

It's been a while since we've last made a blog post about what's happened in and around Polytoria. This blog post will cover all changes and additions that have taken place on Polytoria since the last update rundown, plus some bonus things we're currently working on!

Place achievements

One of the major additions to Polytoria recently has been the introduction of place achievements. You can now create achievements for your place and award them to players through code whenever they reach a milestone or do something special. You can create achievements by going to your places's management page and upload an image to use for the achievement at the achievements section. Learn more about how to implement achievements into your place here.

Here are some of the top places to collect achievements for:
- Flood Escape
- Mow Da Lawn
- A Speed Game
- The Ultimate Polytoria Difficulty Chart

Item analytics

You can now view detailed analytics of the sales of your items, with a chart for historical earnings and sales volume, information about recent and total sales, and a breakdown of how many times the item has been sold at what price. We want to expand the analytics, so if you have suggestions on how to improve this dashboard, make sure to leave them on the forums or in our Discord server. We're also planning to add a similar analytics page for your places where you will get an overview of how often your place is visited.

ModuleScripts

One highly requested feature for the client has been the addition of ModuleScripts. ModuleScripts are an easy way to share logic between scripts and between server and client. We've introduced this feature as a public beta, since there are still some limitations to ModuleScripts in it's current form. Due to some limitations of our scripting engine, it is currently impossible to have functions in ModuleScripts, and it is also impossible to modify data in the ModuleScript's table. Besides those limitations, ModuleScripts are still a great way to share static data such as weapon stats, an item database and more between scripts and client/server. Here's an example of how you could use ModuleScripts:

local Structures = {
    ["Tower"] = {
        ["Description"] = "This tower will obliterate any enemies on the way to the castle!",
        ["Price"] = 95,
        ["AttackDamage"] = 5
    }
}

-- Make sure to return the table to be able to access it in other scripts!
return Structures

ModuleScript named Structures located in game["ScriptService"]

wait(0.1) -- The ModuleScript might only start running after this Script/LocalScript began running and thus this wait() is necessary
local Structures = require(game["ScriptService"]["Structures"])

print(Structures["Tower"]["Description"]) -- Prints out "This tower will obliterate any enemies on the way to the castle!" like how it was defined in the ModuleScript above.

In a Script/LocalScript

You can find more info about ModuleScripts on its docs page.

Engine improvements

One of our top priorities is providing a stable platform for developers to make places on. Over the past few months we've been working hard on optimizing and fixing bugs in the client. We've recently introduced a massive performance boost to the client which noticably improves FPS in places with many parts and also improves physics interactions with unanchored parts. We've also introduced a new part shader which improves the way materials look on different part shapes. We've also added Folders, CoreUI enabling/disabling and we've fixed a variety of bugs, all of which can be read in the full changelog at the end of the blog post.

Homepage improvements

You can now see a few recent comments of a feed post directly on your homepage. In addition, you can now also see which place a screenshot was taken in.

We've also added a trending items section where you can see items which have been selling well recently. Besides this we've added a customize homepage button which allows you to enable/disable certain elements on your home page.

Docs revamp

Over the last few weeks the scripting API documentation site has received a huge makeover. It is now much easier to navigate and looks stunning compared to the old docs. Massive shoutout to Index, baggy, Alyx, InsertSoda and ItsLuiggiYahoo for picking up development of the new docs and to Brixster for providing a framework for them to build on. You can access the new docs at https://docs.polytoria.com/. The docs are open-sourced and is still under development, so if you want to contribute you can do so at our GitHub repository.

Item release schedule

This is a new feature which isn't usable for everyone reading this post, but we're now able to release items on schedule. This allows us to plan weeks and even months ahead with releasing items to the store. You can expect new items releasing almost daily at predictable times with a new collectible item releasing every Saturday.

Experimental VR stuff

I've been experimenting with VR for a bit and managed to make a working Polytoria VR client build. This is highly experimental however and probably won't see the light of day in the current client, but it is definitely something we will give another shot once the V2 client is out. Here's some footage of me playing Mow Da Lawn in VR!

In-game tools

Another thing I've been experimenting with is making the tools equipped on your avatar work in-game. It won't have any purpose besides cosmetical ones for the time being, but in the future we want to make each tool functional and have unique use cases. Tools will be toggleable in your place's settings, all places that are currently uploaded will have it disabled by default to not break existing game mechanics, but new places will have them enabled by default.

This feature is not released yet and is still pretty inefficient, but you can expect it to release in the near future.

Daily spin

Ever since the new site has been released people have been asking for a return of the packs system. While packs won't exactly return, we've been working hard on something that is very similar to packs but won't require you to purchase anything. Instead of packs, soon you will receive "spin tickets" in addition to your daily reward which you can use to spin a wheel for extra rewards. There will be several unique rewards which can only be obtained through the spin and a new wheel with new items will release every once in a while, after which the previous items will go limited.

The video above shows the spin system, but please note that this is still heavily under development and in no way represents the final version of the feature and a lot of details may be subject to change.

New face

A big welcome to Tsuwuki, who recently joined the artists team to work on new hats, tools and faces for Polytoria! Some of his recent items include the Mischievous Demon, Romance Novelist, the Long Hairs and many new items which are yet to be released!

Sector-6 [Showcase] by ZL3X

And that's all for this month's Rundown! Polytoria has received a lot of updates since the last blog post, most of which were too small to write something, so below you can read the full changelog. Don't forget to join the Polytoria Discord server (13+) to get early insights into new features and additions.

Your voice matters, so please leave suggestions and bug reports in our feedback channels or on the forums!

Until next time!

Full Changelog

Client

- [BETA] Added ModuleScripts, currently does not support running functions from a ModuleScript
- Added --dump-api command line argument to dump all Lua API functions, properties and events to a file
- Added DynamicInstance.RotateAround, DynamicInstance.Rotate, DynamicInstance.InverseTransformPoint, DynamicInstance.TransformPoint, DynamicInstance.InverseTransformDirection, DynamicInstance.TransformDirection, DynamicInstance.InverseTransformVector and DynamicInstance.TransformVector methods
- Added Player.HeadColor, Player.TorsoColor, Player.LeftArmColor, Player.RightArmColor, Player.LeftLegColor, Player.RightLegColor properties
- Added Player:LoadAppearance(id), Player:ClearAppearance(), Player:ResetAppearance() methods
- Added achievement service with Achievements:Award and Achievements:HasAchievement methods
- Added cache system to part shapes to improve performance
- Added Camera.SensitivityMultiplier property
- Added CoreUI service with CoreUI.UserCardEnabled, CoreUI.ChatEnabled, CoreUI.HealthBarEnabled, CoreUI.LeaderboardEnabled, CoreUI.HotbarEnabled, CoreUI.MenuButtonEnabled properties to enable/disable built-in UI elements
- Added corner wedge shape and cone shape
- Added damage number parameter to Environment:CreateExplosion method
- Added Environment.PartDestroyHeight and automatically destroys unanchored parts below this height
- Added Folders
- Added font property to Text3D
- Added Papyrus and Comic Sans MS fonts
- Added Size property to player
- Added Sound.MaxDistance property
- Added thumbnails to toolbox items
- Added Tool.Equipped, Tool.Unequipped, and Tool.Deactivated events
- Added NPC:LoadAppearance(userID) and NPC:ClearAppearance() methods to load an user's avatar onto an NPC
- Adjusted chat and pause menu buttons to align with leaderboard
- Changed play solo user ID from 5 back to 1144
- Exposed Quaternion properties to Lua and added DynamicInstance.Quaternion and DynamicInstance.LocalQuaternion properties
- Fixed .Visible property on UI elements
- Fixed a bug where ImageSky would get overriden by SkyboxPreset property in Environment
- Fixed an issue where changing the alpha value of a part would not update the part's transparency
- Fixed an issue where GUIs were always visible on start, even if the Visible property is set to false
- Fixed an issue where parts would lose collision after cloning from Hidden
- Fixed an issue where Raycast functions would not return the closest part hit
- Fixed audio rolloff for 3D sounds which caused them to be too quiet
- Fixed conveyor logic for anchored parts with a set velocity
- Fixed hats being visible in first person
- Fixed issue where scripts in tools would run twice
- Fixed issues when first joining a big game
- Fixed leaderboard blocking user UI (buttons behind leaderboard weren't able to be clicked, even if the leaderboard was empty)
- Fixed logs being spammed leading to big log files after a couple hours of playtime
- Fixed NPC ragdolls on death
- Fixed NPCs missing certain properties on clone
- Fixed player ragdolling on death looking weird
- Fixed PlayerDefaults settings not applying
- Fixed Plus/Plus Deluxe icons appearing as white squares
- Fixed shading issue on cylinder parts
- Fixed spacebar triggering UIButtons
- Fixed tools from Backpack in PlayerDefaults not being cloned after respawning
- Fixed worn items being mirrored
- IgnoreList in raycast now works properly
- Input.GetMouseWorldPoint now returns a vector far away in the direction of the mouse instead of Vector3.Zero if the mouse is not pointing at the world
- New triplanar material for parts, materials now look proper on part shapes other than bricks
- Non droppable tools now get deleted on death
- Plastic and SmoothPlastic materials now use a simplified shader to improve performance
- Refactored player apperaance loading, appearances failing to load is less common now
- Refactored tool behavior, tools now no longer have a forced box collision shape and synchronize better with clients
- Refactored waiting for place to load screen and logic
- Rewrote DynamicInstances to be more efficient (massively improves performance and improves accuracy on physics objects)
- Updated legacy URLs to match new site ones

Creator

- Added hex color input to Color properties
- Fixed an issue where moving things in the explorer would not be registered (PrevSibling/NextSibling)
- Fixed an issue where null values in some properties would prevent the rest of the property grid from loading
- Temporarily removed export to GLTF option as it didn't work properly

Website

- Added a popup to download Polytoria when launching a place without having Polytoria installed
- Added accessory type filter to the avatar editor
- Added asset analytics page to see stats for item sales
- Added button for launching creator without a place to create page
- Added horror genre for places
- Added new Trending sort type for places, showing the most popular places in the last 7 days
- Added place achievements
- Added support for promo items
- Added support for scheduling items to be released or updated at a certain time (admin only)
- Added trending items to the homepage
- Feed posts now also show a few comments
- Feed posts with screenshots now show which place they were taken in
- Fixed an issue where daily reward wouldn't be given out
- Fixed an issue with retrieving datastores that don't exist yet
- Fixed an issue with using store credit to purchase membership/bricks
- Fixed instant daily reward not being given out after purchasing membership
- Increased mesh upload limit to 50MB and audio upload limit to 25MB
- Items in the create page are now sorted by creation date
- New badge for 3D Artists
- New forum post cooldown system
- Preview for uploading shirts and pants is now in 3D
- The great divide is coming
- Updated store and place APIs
- You can now enable/disable certain elements on the homepage
- You can now update the icon of achievements and gamepasses
- You now need to verify your location through email when logging in from an unrecognized location

Renderer

- Improved lighting

Launcher

- Linux now uses Flatpak instead of .deb, allowing it to be installed on more distros