Finland |

Background image

Project Vulpes Progress Report #3

It has now been over half a year since the last progress blog post, and a lot of progress has been made to as a clear image for the release of Project Vulpes has been made.

When you start out a project, it's extremely common to make a ton of plans for a bunch of desired features that make reaching the final stages of development borderline impossible. It is one of those hurdles where planning too far ahead can lead to severe burn-out from working endlessly to attempt to reach your vision to no avail, especially when working as a singular developer or a small indie team.

As mentioned, we are now at a point where there is a clear goal and finish line for the release, this implies that every intended feature has been planned/implemented, with no additional plans to add more features to the list. There's still a couple of issues to be solved which may take more or less time than I expect, therefore I won't be giving out a release date for the time being.

Project Vulpes's development has now reached 110,000 lines of code; which in hindsight might be overkill for a Roblox game, as many indie games on Steam never even reach the 100,000 mark in the first place, depending on the complexity of those said games; and Vulpes is shaping to transcend being a mere MPS game.

Admin System

The problem with merely using a popular admin system such as "Kohl's admin" ("Kohl"), "HD admin" or "Adonis" is that a lot of these come with their own limitations and bloat. Truth is I only ever modified an older version of Kohl's admin one time, which was due to that specific admin system being very common in the old MPS era.

While the Custom Commands system for Kohl's was very useful for basic commands, anything more complex would cause issues that require modifications to the main source-code itself for a fix. Kohl's at the time was also "minified" as a form of obfuscation, making it even harder to make changes to the source-code in the first place.

Games relying on Kohl's also experienced the system sometimes being completely broken due to Roblox updates, which would sometimes take weeks to get fixed. This went as far as making some games completely unplayable due to their heavy reliance on the system.

When talking about bloat, I'm specifically talking about my own needs; other games may have different uses and therefore different definitions of bloat; however in pretty much all of these popular admin systems they all come with a bunch of built-in unnecessary commands that often require the developer to go through every single one of them (which may be in the hundreds) and specifically set the permission to something non-existent. The vast majority also use seperate datastore calls for features you do not really need or want, although nowadays this is usually optional, but enabled by default.

Just like in PRS, we will continue to use our own in-house implementation of an admin system. PRS Admin was originally created when Kohl's broke down due a Roblox update, causing majority of games to transition to Adonis instead of Kohl's; I, however, wanted to keep the very known syntax and behaviour of Kohl's. With PRS Admin I re-created the way Kohl's commands were typed out with some additional commands included into its system. I also deliberately chose to deprecate features such as the "command bar" or any unnecessary/obsolete commands.

In PRS Admin's current form admin abuse is a worrying possibility, which is why such incidents in league games usually lead straight into a ban, with the length depending on its severity. With Vulpes this was one of the issues we wanted to minimize heavily. Here are a couple of changes done in order to do so:

  1. By default, no one except the server creator has admin permissions, who can then give out admin permissions to other players, such as another team owner he might be having a friendly against.
  2. When creating a server you will now be required to select one of two types of server layout: Friendly or League

When picking "League", Referees are allowed to claim the game using the new admin command ":claimgame" giving them the necessary admin permissions to carry out an official match. Only the referee will be able to give out admin permissions, excluding the server owner from such ability.

You now also have the ability to permanently give people permissions in your own Private/VIP Server. This means you can have only one of your friends own a private server, where everyone from your friend group has permissions to use the builder menu without needing the owner of the private server be in-game.

Game Automation

Game Automation (Automated Refereeing) has been a talking point in PRS for a very long time. A lot of games in Roblox's football genre have already accomplished this to an acceptable state, but usually aren't sophisticated enough to tackle particular exceptions and details in the required rules.

In Vulpes we have the full-scale refereeing automation of goals, kick-off, TIs, off-sides, fouls, penalties and disciplinary action. While some of these are very simple to accomplish, we took strides to polish every single detail to prevent any problems that usually arise in a lot of other games.

One of those problems is dealing with ping, which, when uncared for, may leads to invalid goals. To address this, we have a system in-place that accurately checks for anomalies in both goals and outs. By including outs, you can make plays on the line without the worry of the ball being counted as out of play due to latency; something that would happen due to passing to someone who is very close to the out of play line.

Many games usually overlook the rule logic behind offsides. A common error is ignoring the Goalkeeper from counting as a "Defender" and simply having the last Outfielder set as the "Last Defender", when in reality the Goalkeeper should be included in the list of Defenders, and have the offside line be set as the "Second-Last Defender". While it's not entirely wrong for games to not fully follow these specific rules, games should still attempt to not leave their iterations be open to abuse. Another problem that is very common is not counting body hits as possible passes, this allows for players to pass to someone off-side without it being actually being called. Vulpes eliminates all of these possible problems as the referee has enough behaviour logic to decide if an off-side call should be made even without the player actually touching the ball; we also made sure the referee doesn't just call for an off-side in case a teammate is nearby while stealing the ball as it was a very prominent issue at early on.

As PRS has had quite an amount of issues relating to how accurately referees address penalties and violations during those, Vulpes has this completely covered and fully automated. While I could go over every single possible violation, you can simply look at the current PRS Rules as Vulpes' system pretty much fully follows them with a slight amount of freedom. One of the big problems referees had was the penalty taker's pathing, which is now in full visual display for the penalty taker and autonomously checked for violations.

Vulpes' Automated Referee also takes into account a considerable variation of fouls, including the "Goalkeeper Time Waste" rule from PRS currently in place; Vulpes' system pretty much renders impossible for this to be abused in any form. Some fouls depending on the context also allow the offended player to decide if they wish to deny the advantage when possible; similar to the EA Sports FC (formerly known FIFA) game franchise. The Automated Referee has full capability to decide if a violation results in a Warning, Yellow Card or Red Card. These decisions come from multiple factors to make sure the call is always accurate and based on the context of the violation.

Pauses and their calls were a hot-topic quite recently in PRS; in Vulpes each team can now begin a vote between themselves for a pause mid-game, which will automatically pause the game once it is out of play and allowed by the rules. This logic is also used for teleporting players into and out of the pitch when substitutions are queued.

Additional extra-time is also fully handled by the Automated Referee based on the game's statistics, mostly because since it constantly pauses and resumes the timer immediately when necessary, the regular "wasted time compensation" logic cannot really be used in our case. We had to make a fair way for the Automated Referee to decide how much additional extra-time should be added; compared to PRS where it is very common to just be based off how the referee "felt" rather than an impartial analysis of the statistics.

While I could go on and on writing about every single specific detail about the system, I think there is enough detail for you to get the general idea.

Here are some previews of the system:

Note: some of these are from months ago.

Celebrations

Celebrations have been a very underlooked feature in PRS; partially due to the lack of new celebrations. Currently, PRS has a very difficult celebration system to work with, having issues and limitations that are very hard to fix these days. Vulpes' new celebration system completely revamps the way they work on the back-end, making the creation of new celebrations much easier on the development end, while also fixing all the bugs seen in PRS.

The new celebration system also allows for more unique features such as allowing certain celebrations to be shared with nearby players! There has also been considerable improvements to the visual display of equipped celebrations, instead of the unreliable 1-8 numbering system.

Here's a preview of one of the celebrations:



Additional Development Previews

When the time comes, I will talk about everything in more detail!