The decision to rewrite PRS
Does anyone even remember the last time PRS had its "UI Overhaul" update?
Back in 9/2/2020, over four years ago. At the time, it was a very necessary and innovative update, at least for Roblox soccer games. You can also see that many other Roblox soccer games have since taken inspiration from, or even blatantly copied, the UI design decisions I made when I was only 16 years old.
Those same design decisions are now the reason why it has become so painfully difficult to add new features. Roblox has changed its Topbar design multiple times since then, causing some UI elements to be moved from their original positions.
4.1 UI Overhaul Update Log
PRS UI OVERHAUL UPDATE - [ 09/02/2020 ] Version 4.1.0.0
+ UI OVERHAUL!
+ TopBar UI design, much more minimal.
+ Celebration System rework
^( Inventory system, select celebrations in the inventory tab found in the settings menu )
( HOLD L key to open a celebration menu and choose between the 8 selected celebrations )
+ Environment tab
^( Known as Visual settings before )
( Thanks to aeroware/hozan for pitch textures )
+ Ton of more customization opportunity!
^( Skybox, Bloom, Lighting, Color correction, SunRays, ect... )
+ Custom Playerlist
+ Pin system
^( Equip pins to appear near your name from the pin tab in settings menu )
+ Shop Rework
^( You can now preview animations )
+ Spectate Rework
^( Finally their own dedicated menu )
( Ball selection is now a thing )
+ Autocam rewrite
+ Scoreboard rework
^( Default scoreboard designed by aeroware/hozan )
* Support for a Theme system
+ Official Menu rewrite
+ Replay system!
* Balls now automatically rall before spawning a new ball in the ballspawner
* Rewrote offside follower line logic
^( Follows the second last defender rule )
* Notepad rework
+ Post results from the game itself into the discord
+ Loading Screen rework
+ New ball textures
^( Thanks to aeroware/hozan )
+ Custom Admin commands
^( https://ossienomae.ml/images/easl1lxdzh47.txt )
* Rewritten Stadium Handler
* Fixed Ankle System issues
* Fixed Team chat
* Optimizations to Client and Server scripts
^( Should improve performance overall )
- Removed T-Pose Ball Catch animation
^( Buyers have recieved a replacement Celebration animation and a special pin )
What about the Tool Rewrite?
We go all the way back to 25/5/2020 (a couple of months after 4.1) when the entire codebase for the tools was rewritten from the ground up, Until then, PRS had been using my rewritten MPS tools from as far back as 2018. Looking back at these versions of the tools, the upgrade in structure and readability year by year was significant.
The issues arise when you try to incorporate new mechanics and quality-of-life tweaks. To achieve very specific behaviors from the codebase, it would require so much unnecessary work and bug hunting that it simply wouldn't be worth the time. Even if I forced myself to keep patching more and more features onto a codebase that wasn't designed to support them; it just isn't a sustainable solution.
5.0 Tool Rewrite Update Log
PRS TOOL REWRITE - [ 25/05/2020 ] Version 5.0.0.0
+ TOOL BASE REWRITE
+ Every single move has been rewritten into the new base
^( A Completely new experience! )
+ New Tick based React
^( No more pinging )
( Less so called "2nd touch" )
+ Tweaked Physics
^( Frontspin now float in air more )
( Backspin now brings the ball down and slows it down more )
+ New Move Queueing system
^( Be able to quickly use a tool right after your cooldowns are over )
( Charge your powerbar while on cooldown )
+ New Movement system
^( Automatically gain speed back after being slowdown, no tool spam needed )
( Charge your powerbar while on cooldown )
+ Ray hit detection
^( You are no longer able to hit the ball through players )
+ New Ragdolling system
+ Rewritten ankle system
^( Based on ball and player movement )
+ New GK dive controls
^( Movement based dive direction )
( Hold dive keys to dive further )
+ New Combos and moves
^( Driven and backspin are now a keycombo )
( Shoot, Pass, Long, Clear now have a Side-shot combo )
( Use the keybinds menu to find more! )
+ And much more!
^( Spreading information between each other is highly encouraged! )
+ More customization in settings
+ Fans settings
^( Turn on/off Fans' Characters )
( Turn on/off Fans' chat )
+ New leg switch settings
^( Switch sounds )
( Switch popup )
+ New Shiftlock camera options
+ Added manual weather selection
* Internal serversided related changes
* Client memory optimizations
What about the Hub update?
Remember the days of trying to figure out which game pitch to join? Before the 1/3/2021 Hub update, we had a total of 8 match pitches that were, behind the scenes, just duplicates of each other. The whole existence and idea of having multiple match pitches was to simplify the organization of when and which game each team had to join. Even in the current Roblox, you can't create a new server if one has already been created by another player, so at the time, the solution everyone adopted was to create multiple games to bypass this.
The Hub update was an idea to create a single game that allowed players to connect to the desired server from a simple UI server list, making the need for multiple match pitches irrelevant.
At the time, this was yet another PRS innovation in the Roblox soccer community that no other game had implemented in exactly the same way. Of course, now in 2024, many Roblox soccer games have taken inspiration from the idea of a hub and incorporated it into their own games.
The Hub update was one of those projects that was in and out of active development for over a year. So, what are the issues? While I don't have much to complain about regarding the overall UI design of the Hub, it definitely has a ton of technical debt. You may have noticed that the Hub can randomly break whenever a Roblox official API has an outage, causing the backend of the game to crumble and preventing players from loading in. The load order of the Hub modules is a complete mess, resulting in recursive require() errors that had to be handled in hacky ways. It also doesn't help that the way PRS loads userdata can randomly error for specific users for no apparent reason. This is why you might have seen a blue skybox with a small locker room floating in the middle of nowhere right before getting kicked from the game due to a load failure.
Even with around thirty voluntary testers before the release of the Hub update, it was still one of the most broken updates initially, released into production earlier than it should have been.
6.0 Hub Update Log
PRS TOOL REWRITE - [ 01/03/2021 ] Version 6.0.0.0
# Gameplay Changes
- New react algorithm to lower the ping factor on who gets the react
- New raybased anti reach
- GK Dive overhaul
> GK Diving has been completely rewritten
> This comes with changes in both looks and behavior
- New GetUp Animation Method
> New animations & you can also now move while getting up!
- Shooting overhaul
> Height determined by camera angle
> Power no longer has a massive say in height
> No more forced delay
> Affects tools/moves like Long, Pass, Volley, ect...
> Most of the powers have been changed
- Removed backspin keybind
> Hit the ball while really close to it to backspin (Old behavior)
- Removed frontspin keybind
> Late front hit will now be frontspin
- Removed lowshot keybind
- Changed how the ball physics behaves if shot right into the ground downwards
- You can now hold DribbleFS (Dribble C FakeShot)
> Samething for Chip (Long E Chip)
- Nerfed the shit out of header max power
# Fixes
- Fixed Weird GetUp angle
> Simplified the angle calculation
- GK React resolves faster if your internet is shit
- Fixed Dribble C FakeShot "glitchy" animation with certain combos
- Fixed Long Z/C StrongSides speed return on combo hits
# Other changes
- New Hub!
> This is a new start place which handles all servers and places!
- New Training pitch!
> Comes with a new object spawner menu for Private server owners!
- Rewrote weather effects
- New "Gameplay" tab in settings
> New "Angle Bar", "Angle Offset" & "Angle Multiplier" Setting
> Moved "FieldOfView", "LegSwitchNotify" & "PowerPercentage"
- Added ":hub" command to bring you back to the hub
> Removed rejoin command since its never used
- Netting stops the ball more, doesn't really affect gameplay
- Added serverinfo command
> :info, :serverinfo, :sinfo
- Made the serverlocation text smaller
- Administration changes to simplify things
- Countdown command now replaces itself if done twice
- Admin commands clientside changes, more performance?
Why is this relevant at all?
Well, keeping a game alive as a solo programmer for over half a decade does get kind of taxing, especially if you're working on something you're not exactly interested in.
The absolute worst experience I had so far is also one of the most important aspects of the game, which is one of the React overhaul updates. React has always been a pain to deal with due to the number of variables you have to keep track of. And if that wasn't enough, you also have to figure out the inner workings of network ownership in order to attempt to fix desync and stability issues. Fighting the limitations of the game engine is incredibly frustrating.
6.5 React Update Log
Pitch 6.5.0.0 | REACT OVERHAUL UPDATE | 18/08/2022
- React Rewrite
> Performance improvements up to 3x on the server
> A lot of logic changes internally
> Auto ownership transfer has also been rewritten
- Buffed header both in speed and height variations
- Added Precharge back to Shoot and Long just like Pass
> Long cooldown tools are limited from this as well as rainbows
- Lowered end cooldown of Dribble R/T, with a addon of no end cooldown on quick switching.
- Rainbows now delay for 25% longer
- Buffed Adv First rainbow a tiny bit
- Pass Backheel has 14.2% lower end cooldown, but slightly higher reused cooldown
- Removed Directional change acceleration
- You can now hit someone for longer until getting slowndown
> 50% longer than before
- Lowered the Slowdown penalty when hitting someone by 33%
- Slowdown while holding shoot, long only starts when the power is over 30%
> For pass when the power hits 50%
- Lowered slowdown while charging shoot, long, pass
> it is quite unnoticeable now
- Buffed GK Clear Dives
> Removed initialization from Standing and Backwards dives and lowered initialization duration from others by 30%
> High dive height and speed
> Low dive speed
- Buffed Clear Punch Height and Speed
- Tackle Block will now have full torso hitbox in turn of lowering walking speed
- Nerfed Tackle Stand by adding reusage cooldown
> to prevent mindless spamming of the tool
- Fixed Shoot Bicycle kick delayish power
> Nerfed speed overall
- Shoot DivingHeader power now does not change Y axis
- Fixed Tackle Slide sometimes tackling a player far away
> This is quite a rare bug that I'm unable to replicate consistantly
- Quadrupled pulled frequency counted
> Pulling the same person multiple times keeps track of it for longer
- Optimization to the client and server schedulers
> This affects most part of the game in terms of feel, physics are the most noticable
- Ball Physics will no longer sleep
> Fixes lag when hitting a stationary ball
- Improved Character loader and quick respawn
> Character loader no longer uses deprecated API
> Tools also now are given before the character appearance
- Improved Accessory blacklisting method
> Should correctly get the accessory size without relying on accessory creators to do it correctly
- Added a DevConsole print out warning
- Fixed unable to set with a decal ID bigger than one 10 billion
> Also changed the method of getting image ids from asset ids
> Related to settings menu
In the meantime, the most fun I've had in development has been with updates like the Physics overhaul. It's in updates like these, where I get to completely reimagine how a certain mechanic should work. The different shot variations and their combinations are one of the unique features that, at least personally, I haven't seen in any other game currently.
6.6 Physics Update Log
Pitch 6.6.0.0 | Physics Overhaul | 02/11/2022
- Revised and rewritten shooting ball spin mechanics
> Back- & FrontSpin are now keybinds again
> Shot styles such as knuckle & Powershot are now in the game
> You can now combine certain shooting combos such as Sideshot + Back-/FrontSpin
- Rewrote the entire physics of the ball
> This was required for the new shooting styles
> The ball should slide under characters smoother than before
> Shouldn't feel any different than before in other aspects
- Tweaked react
> Lowered maximum ping difference between initial hit on crosses is lowered from 150ms to 100ms now
> Lowered some base values
- Reimplemented chat sounds back into the game
> Rewritten to have better behaviour and performance
- Slightly lowered cooldown and active time on dribble ballstop
- Removed cooldown stacking from dribble left and right (r/t)
> Also lowered the base cooldown very slightly
- Shoot Bicycle now has a wider range of possible height angle
- Lowered Dribble DragBacks cooldown very slightly
- Tweaked Dribble Front- & BackheelFlickup (g/h)
> Should land little bit closer to you and is more resitant to velocity differences
> Added Additional Chest cooldown familiar to rainbow + chest
- Fixed Combo keybinds not priority not sinking inputs
- Nerfed all stand tackles by forcing you to commit slightly to the initial direction you were walking to
Over the years, I have improved drastically, not only in programming but also in game design. I have branched out to try programming in many other coding languages as well as other game engines. I honestly couldn't be more grateful for the platform that has been given to me. It has been a genuinely fun way to learn how creating games really works.
In order for PRS to push the limits of what has been previously seen in Roblox soccer games, the entire game desperately requires a full rewrite. This rewrite goes by the name PRS 7.0, the seventh iteration of the game. Given that I now have much more experience with programming both outside and within the scope of Roblox, I'm confident that if everything goes according to plan, we can get at least another half a decade out of PRS.
About PRS 7.0
Since the 7.0 version is essentially a whole new game written from the ground up, the intention is to emulate the current version as much as possible, but there will also be many improvements to the core of the game. There may be some unintentional changes compared to how some of the deeper mechanics in PRS currently work. A ton of work has already been done on the game, and the core functionality is nearly complete.
These are some major internal changes:
- Everything in 7.0 is fully luau strict type-checked.
- The hub and the game are fully linked to each other, with the game type handled at runtime in a single "place" instead of multiple "places".
- Fully autonomous client-server data handling with automatic validation.
- Data saving and loading are designed with SurrealDB in mind (I have been testing it since the initial beta).
- All client-side visuals are handled by the client, not the server. The server acts only as a validator for replication.
- Client utilizes Parallel Luau to drastically improve performance during heavy calculations.
Here are some confirmed features and rewrites:
- Completely reimagined cooldown state management, allowing tools to be canceled midway at any time. This should allow for shorter cooldowns on certain tools without completely butchering active time.
- Input buffering or "Move Queueing" has been massively improved and now works properly with holdable tools. Input buffers are also customizable in the settings.
- The new physics handler ensures that as a goalkeeper, you will never be pushed into the net by the force of the ball. Ragdolling inside from the landing impact is still possible however.
- Deflections have been fully rewritten with better calculations and now allow you to control the deflection direction slightly with your aim. This gives goalkeepers more control over where they want the ball to land.
- Using the settings UI is now easier than ever, with even more options available.
- All acrobatics now use the improved Physical Animator system, commonly seen in goalkeeper dives. You should notice more dynamic and fluid acrobatic animations instead of the instant snaps you're used to.
- You can now rebind your mouse scroll to activate non-holdable tools.
- A brand-new custom collision detection system provides accurate contact points for ball hits. This is essential since Roblox's current touch events are too delayed for high-velocity accuracy.
- The new balance system punishes defenders for their continuous mistakes, leading to an ankle break. Dribbling should feel far more rewarding as a result.
- Goalkeeper dives now use momentum-based input to determine dive types, ranging from weak close dives to maximum powerful dives, each with a unique animation.
- A ton of other QoL and tool changes that would make this list even longer than it needs to be.
As of writing, there is no confirmed release date that I can promise. I absolutely do not want to put myself in a situation where I make false promises or, worse, release an unfinished, buggy mess.