User: Pass:




UHS Build History - 2014

UHS has gone through a TON of revisions, changes and updates. The most recent changes are at the top of the page. I've removed references to database modifications from the old build updates as they are not relevant any longer since league owners no longer have access to the DB. UHS went live October 12 2005... most changes are found here in the build notes, however, changes made from Go Live to the end of the year are lost... I don't think they were anything major... just bug fixes and so on.

Build History by Year: [2018] [2017] [2016] [2015] [2014] [2013] [2012] [2011] [2010] [2009] [2008] [2007] [2006]


UHS Build 7668 - December 29 2014
This build is primarily focused on back-end system improvements and a few minor UI changes. I'm trying to get things to a point with UHS where I don't really need to do much to maintain it as it feels like the clock is ticking. Unfortunately the only thing I can't automate is the creation of empty databases for new leagues... DreamHost won't allow that with their mysql API. Eventually I'll find a way around it. I'm also looking at keeping league data fairly trim... I've had to change how much Play by Play data is kept from Unlimited to just two seasons... I've also had to make a similar change to SavePoints. The goal here is to allow leagues to grow to 100 seasons or more with a minimal impact on performance.

Deleting Old Play-by-Play data / Instant Replays / Further Data Trimming
On each Season Change, Play-by-Play reports older than the previous season will be deleted from your league's database. The reports were previously available with the Instant Replay option, however, our usage records indicate this feature is seldom used and only in the current season. You will still see the Instant Replay option for games played in your Current and Previous Season.

This change is being made to keep leagues as trim as possible... as leagues get older they take up more space and get slower... we have seen the impact slow responses have as we've had to make a few hotfixes over the last few days to support our new Game Deletion functionality.

We have also made quite a few back-end table changes to continue to "trim the fat". It is likely our next build will focus on further response improvements due to increased demand on UHS systems.

Roster / Line Error Checking
We have removed the cron job that runs each minute in favour of a Roster & Line check each time there is a page load for when GMs are using UHS. There will continue to be a Roster & Line check for all teams appearing in the COM's Play Games page to ensure games cannot be run for teams with errors.

League Groups for the General Job
We are experimenting with creating separate jobs for leagues based on your league size. We're going to group up all of our leagues based on 500 MB chunks. Leagues larger than this (typically older leagues) will be getting their own separate cron job. The thought here is that as UHS usage grows, we can scale as needed. We are only applying this to the General job... so things like Free Agency, Waivers, Trade Deadlines, Junior & Farm (automatic) Roster setting jobs will be affected. I've been seeing warnings that this job has been taking more time than usual and it's a directly related to the number of leagues we have running. I'm hoping you all don't see any negative impacts with this change... if things seem slower or you're seeing waiver items not going through, please contact me.

If things go well, I might apply this to the AutoGM and Live Game Update jobs as well.

SavePoint Maximum Back to Five
Originally when SavePoints were introduced we had released it as Unlimited, however, we quickly had to change it to three SavePoints per league. Once we moved to our current host (which offers unlimited storage) we were able to remove the SavePoint cap. Over the past two - three years that we've been with DreamHost, UHS usage has gone through the roof. DH has not asked us to limit our storage, however, the recent performance issues high-lighted an area of concern regarding SavePoints.

We are adding the Five SavePoint limit back to the system to try and keep leagues lean and slim. At one point we were looking for a new host, however, storage cost played a huge factor in UHS remaining with DreamHost. Most of this build is focused on keeping UHS running reliably with minimal human intervention... my goal is to get UHS to a point where it can operate when I'm no longer able to.

Please be assured that your current SavePoints will not be deleted. If you have five or more SavePoints you just won't be able to create any new ones until you delete enough of them so you can create a new one.

Idle League Handling
We've made some changes to our idle league policies. In order for a league to be idle there must be no activity for 30 days (previously 90 days). Additionally, UHS would send out FOUR warnings before deletion each of which came after 3 days of no activity. This is being changed a single warning once the league has gone idle. If there continues to be no activity after 4 days, the league will be deleted. Leagues that are older than a year will continue to be automatically protected from going Idle.

Additionally, newly created leagues that have no login activity will now be deleted after 4 days instead of 7.

Sim Engine Tweak
I've increased the factor that skill plays in determining a Pass or Skate outcome from 2.00 to 2.25. This will make it slightly more likely that the player's skill is going to determine the outcome vs. random chance. It also means that playing highly-skilled teams will not yield quite as many upset victories as before. We will be monitoring team records as we continue on since the last thing we want is to go back to unbeatable teams.

Deleting & Deactivating Teams
Teams can no longer be deleted if they have games present in the Schedule table regardless of what season it is. Additionally, Deactivating Teams will now result in a check for scheduled games for the team in the current season. If there are none, deactivation will go ahead.

Waiver Claims
Since the inception of UHS, teams could make claims on players placed on waivers under the right circumstances. According to NHL rules, this is not allowed. Going forward teams placing their players on waivers will not be able to make a claim on them.

Mass Coach Scouting
The Mass Coach Scouting option will only appear if there are more than 4 coaches available for scouting. This was changed as it was possible to scout a single coach at a reduced rate.

Trade Request Checks
Trade Request Checks will now only happen when Pro teams are playing in the Regular Season.

Automatic Draft Lists
GMs now have an option to automatically create a draft list based on the average skill of each eligible player. For goalies, this skill is calculated at Total / 9 while players are calculated at Total / 11.

Debug Deletion Job
We'll be running a daily job to delete debug files that are older than one week. If you have experienced any errors or need us to look at the debug file for a game you've simmed, please let us know ASAP. If you take longer than a week, we won't be able to look at the debug file. Typically errors are reported same or next day, so we keeping months worth of debug files didn't do anything except waste storage (~250 GB).

Season Change Messaging
The Pre-Season to Regular Season advance screen has been changed to remove the old Junior player warning as it is no longer valid. A warning has been added concerning Player Training and Lawyers since these features cannot be modifed in the Regular Season and beyond. This was actually inadvertantly released with a hotfix on December 26 2014.

Bug Fixes
- Fixed an issue where setting the Max Farm Skill Age to All Ages would still show "Use Max Age Protected" in the General Settings, however, All Ages was in fact being applied.
- Fixed an issue where Player and Prospect scouting reports were not being shown properly in the Current Scouting page.
- Fixed an issue that would allow a Commissioner to over-write a GM's draft pick if both COM and GM are accessing the Entry Draft at the same time.
- Fixed an issue where Upcoming Games would all show up as Pending even if there was no live game scheduled.
- Fixed an issue where the AutoGM would not place Forwards into key positions to fill gaps in C, LW, RW. This resulted in Game Roster errors despite having enough players to ice a team.

Hot Fixes
- Fixed an issue where AutoGMs would sometimes not move players down to the farm team if the league was in Season 1. Released as hotfix on December 2 2014.
- Fixed an issue where Teams edited to Farm or Junior would still hold draft picks and prevent entry drafts from moving forward. Released as hotfix on December 8 2014.
- Fixed an issue where searching for coaches would always return no results. Released as hotfix on December 12 2014.
- Fixed an issue where an error for updating LeagueData would appear when attempting to create schedules. Released as hotfix on December 15 2014.
- Fixed an issue where the Total Games field was not being updated when selecting the number of games per Div, Conf while creating a schedule. Released as hotfix on December 15 2014.
- Fixed an issue where Live Mode games that were Queued were not properly saving player, goalie or game stats, however, team standings were okay. Released as hotfix on December 16 2014.
- Fixed an issue where the RetireEarly setting was not being loaded. This resulted in pre-mature retirements and retired player/coach deletions. Released as hotfix on December 17 2014.
- Added the text 'early' for player & coach early retirements. Released as hotfix on December 17 2014.
- Fixed an issue where Live Mode games that were Queued were storing the incorrect GameID. Released as hotfix on December 17 2014.
- Fixed an issue where Fixing (Deleting) lines from the Play Games screen would result in an error. Released as hotfix on December 19 2014.
- Fixed several issues where Live Games (Queued or otherwise) were taking an excessively long time to run. Released as hotfix on December 20 2014.
- Fixed an issue where leagues could move from the Off-Season without having teams assigned to a conference or division. This resulted in teams not getting an entry in the TeamStandings table. Released as a hotfix on December 26 2014.



UHS Build 7468 - December 2 2014
It's been a full two months since our last Build Release. This build does not focus on any one aspect of UHS, instead, it has a smattering of developments that should help out most people. The major changes include: Chemistry Unhidden, Game Deletions, Defenseman Scoring Adjustments, Time Zones that actually work as well as some adjustments to the AutoGM trade logic.

Chemistry Unhidden (sort of) + Rerate Updates
For leagues that allow skills to be shown, Chemistry will now be shown on the player's profile, team's personnel pages and COM's team rosters. Skills Hidden leagues will continue to have Chemistry completely hidden.

Chemistry changes from a 1.0 - 10.0 range to 1.00 to 9.99 range. Any player with a Chemistry value of 10.0 will be immediately changed to 9.99.

Chemistry will rerate only if your league has rerates enabled and will use new rules (previously Chemistry was rerated based on average chemistry for team). All players will now rerate towards 5.5. While 5.5 can be considered "perfect" Chemistry, values anywhere in the 4.0 to 7.0 range will likely provide Chemistry bonuses for players on the same line.

When rerating, if a player has a Not Applicable or Decrease rerate, their Chemistry will rerate by a random value between 0.01 and 0.24. If the player has a No Change or Increase rerate, their Chemistry will rerate by a random value between 0.25 and 0.50.

Defensemen Scoring
In some leagues D-men lead the league in goal scoring, in others it's all Forwards. Such is the way of RNG. However, there is a tendancy for D-men to score a little too much. As such I've added a buff to the Tip chance when a D-man (or rather someone placed in the Defense position) takes a shot on goal. The Tip Chance will increase by 25% when a D-man is taking a shot.

Timezones!
Finally, we've added consideration for timezones. The underlying code was always there... it just never really worked. I've gone through all the date/times that are shown to COMs and GMs and have added whatever timezone is applicable to the user.

In order to set your timezone, log into UHS and click your username at the top-right of the screen. You will see the options available for setting the number of hours your timezone is off of Pacific Time (server time). There are two timestamps (one the server time and one your new timezone) for you to use to make sure you've entered the correct offset. Please keep in mind the offset is in whole hours.

Game Deletions
Commissioners now have the ability to delete previously played games from UHS. This tool should only be used if absolutely necessary. Before using the tool, please make a SavePoint... things may not turn out as you (we) expected.

Games being deleted must meet the following criteria:
- Be in the current Season.
- Be in the current Season Type (Pre-Season, Regular Season, Playoff).
- Must be played in Build 7468 (this build) or higher. Games from previous builds cannot be deleted.

Team, Player, Goalie and Coach statistics from the selected game will be completely reversed from UHS. There are some key points to consider:
- Injuries and Suspensions will not be affected. If a player was hurt, the COM will need to manually update the player.
- Team Win/Loss streak RECORDS will not be updated.

Farm League Toggle
There is a new Farm League Enabled setting in the General Settings for your league. You can now disable having a Farm League... please note this will also disable Waivers. By default Farm Leagues are enabled.

Players on Deactivated/Deleted Junior Teams
Going forward players on Junior Teams being either Deactivated or Deleted will no longer have their ownership rights removed. Instead, they will be moved to a random active Junior Team. This is being done to ensure Junior Players remain on a visible team. Junior Players should not be in "Free Agency" until they are 21 or there are no active Junior teams available for placement.

For Commissioners that want to control where the junior players end up, you should manually move each player to their new team before deactivating or deleting their current team.

Simming an Off Day
Commissioners now have the ability to Sim an Off Day. This will simply decrease the number of Injury Games and Suspension Games by 1 for all players in the league.

Waivers
When there are no players on waivers a message will now be shown instead of an empty table.

AutoGM Trading
The AutoGM weighting has been removed from the code where the AutoGM initiates a trade. It should be more likely now to see AutoGMs trading with each other.

Stats Central
- The PlayOff Tree will now be the default stat view loaded when the league is in the Playoffs.
- Games appearing in the Schedule area will no longer have an Instant Replay link if they have not been played or if they are Not Needed.

Retirement Outputs
The activity output for player retirements will now show the player's age or "NA" if the age cannot be found.

Coaches and the Cup
Coaches will now have their Cups shown on their profile. Previously Cup victories for coaches were not being recorded.

NHL Only option
I've added an NHL only option for New Leagues and for Commissioners resetting their league. Previously, the NHL option added all NHL, AHL, and OHL teams.

All Pro Teams to AutoGM button
Commissioners will now have an option to change all Active Pro teams to be managed by the AutoGM. Doing so will remove the access for any assigned human GMs for those teams.

Bug Fixes
- Fixed an issue where saving the Entry Draft settings would result in errors appearing on the screen.
- Fixed an issue where the Manual GM trade weight was being applied to trades offered by the AutoGM.
- Fixed an issue where AutoGMs might not switch out their goalies, resulting in unnecessary fatigue injuries.
- Fixed an issue where the roll for Lawyer suspension appeals was being printed to the screen.
- Unused Draft Picks from previous seasons will no longer appear in the Team Draft Picks page.
- Fixed an issue where the actual Last Rerate values were not being shown despite the league having Skills Shown.

Hot Fixes
- Fixed back-end code to remove some restrictions on players being moved to the juniors. Released October 2 2014.
- Fixed an issue where juniors having played games in other seasons were not be allowed back to the Pro or Farm team. Released October 7 2014.
- Fixed an issue where the Makeweight Creation button would not show up even if the team was below the minimum number of players for each position. Released October 9 2014.
- Fixed an issue where AutoGMs were timing out when the AutoGM trade frequency was set to 0. Going forward if the AutoGM Trade Frequency is set to 0, AutoGMs will no longer initiate trades. Released October 29 2014.
- Fixed an issue where suspended players would not have an Activity line inserted if the player they injured had an apostraphe in their name. Released on November 3 2014.
- Fixed an issue where players with less than 10 GP in the previous season were getting random farm rerates (UP and down) despite there being a farm schedule played. This should have resulted in the player randomly rerating DOWN only. Released as hotfix on November 27 2014.
- Fixed an issue where the Rookie GP Pct setting was always being set to 0. Released as hotfix on November 28 2014.
- Fixed an issue where Prospect Scouting reports were not being completed despite the team being charged. Released as hotfix on November 28 2014.



UHS Build 7250 - October 2 2014
Build number wise this doesn't appear to be a big build... but it does have some fairly big changes... primarily focused around the juniors. We are changing how UHS handles junior players as we want the simulator to be more in line with the relationship between the NHL and CHL (juniors). These new rules will take effect immediately.

Additionally, we've added a toggle for injuries/suspensions for junior leagues only and have also updated our Waivers rules to reflect the real world (ie. players must clear waivers before being allowed to be traded).

New Junior Age Rules / Limitations
In order to be inline with how the CHL and NHL work, the following rules are now in place for all junior players:

- Players aged 15 - 20 are now considered "Junior" and are allowed to play for a junior team.
- Players aged 18 - 20 are eligible to play for the pro or farm club of whatever team owns their rights.
- Players aged 18 - 20 may be moved to their former Junior Team at any point of the season.
- Players aged 18 - 20 may be moved to the pro or farm club at any point of the season with the following exception:
- Players that are on the Junior Team and have already played a game on the Pro or Farm team in this season may not be moved back up to the Pro or Farm... basically if they have played any Pro/Farm games during the Regular Season or Playoffs and are moved back to the Junior Team, they may not be moved back up.
- At age 21 undrafted Junior players will become Free Agents.

Junior Injury / Suspension Toggle
Speaking of the Juniors, we've added a new toggle to disable injuries and suspensions from the junior leagues. If you have enabled Injuries/Suspensions for the league overall, you can now disable it for the Juniors only.

Waivers & Trades
We've updated the code to remove players on waivers from being offered up in trades. Additionally, when placing a player on waivers any open transactions involving the player will become void. This is to reflect the current rules surrounding Waivers & Trades in the NHL. Once the player has cleared waivers they will then be eligible for new trade offers.

Bug Fixes
None.

Hot Fixes
- Fixed an issue where salaries were being incorrectly changed to dollars instead of comparing at millions. This resulted in the AutoGM always declining trades. Released Sept.16.2014.



UHS Build 7224 - September 7 2014
It's been exactly a month since our last release. This build focused a lot on the AutoGM logic... to reduce some of the restrictions on the trade logic, re-write the free agency logic and basically review everything in the script since there seemed to be something causing an infinite loop (I suspect it was the use of a critical variable in different parts of the code).

I've also added in Lawyers (something else to spend your money on), added a setting for Trade Notification emails, added a setting to allow Forwards to play in Defense positions, changed the cosmetics of the Upcoming Games section for your team as well as added the opponent's record, and finally Player Trade Requests.

For Player Trade Requests, I believe it should cause just enough of a churn to get some of the better players moved off stacked teams and give those hopeless teams a better chance at improvement.

Donations Page - Thank You!
We added a Donations page to provide a forum for thanking everyone that has donated to us via KickStarter and PayPal. This was deployed as a Hot Fix on August 8 2014.

AutoGM Trade Weights & Logic Changes
Currently it is very difficult, if not impossible, to make a trade with the AutoGM. This even applies to AutoGM to AutoGM trades. Previously the thresholds for incoming players/picks were weighted at 75% of their regular value. We're going to change that to 90%. Additionally, players/picks leaving the AutoGM team were weighted at 125% of their regular value. We're going to change that to 110%. This was deployed as a Hot Fix on August 12 2014.

The logic was further modified to remove extra checks like whether the trade would violate the Trade Initiating Team's salary cap... as long as it doesn't violate the AutoGM's salary, the trade will be good. The AutoGM will no longer look at whether the potential Incoming Players have had a positive rerate last season. This was skewing some potentially solid trades for the AutoGM just because they didn't rerate up the previous season. We've also incorporated the new Tiebreaker settings into the logic when it looks at draft picks.

The AutoGM will now be more likely to make bids on free agent coaches that other teams have already made bids on. There were also some additional checks added to the AutoGM when looking at free agents to bid on... this should finally resolve the issue of AutoGMs going crazy for free agents. These additional changes went live as a Hot Fix on August 24 2014.

Further to this another adjustment was made to the AutoGM's free agency "poaching" logic to ensure the team will only be looking at players in one of the following cases:
- the Pro team has less than 26 players.
- the Farm team has less than 26 players.
- the Free Agent Player in question has a higher skill level than the top Pro/Farm players currently owned by the AutoGM. This part will impose position limits: Top 5 Centers / Left Wingers / Right Wingers, Top 15 Forwards (including C/LW/RW), Top 8 Defensemen, Top 3 Goalies. If the AutoGM has a real farm team, these limits are doubled.

The following changes were not hotfixed in and have gone live as of this build deployment:
- Pro Roster, Pro Goalies, Farm Roster and Farm Goalie checks and attempts at filling in spots will now only happen after the Entry Draft has been completed and the SeasonType is PreSeason, Regular, or PlayOff. This change was made since expansion teams with AutoGM were creating makeweights to fill in spots despite Free Agency not being tested.
- Players can now be sent down to the farm team is the SeasonType is PreSeason in addition to the original criteria of Regular and PlayOffs.

Lawyers
Teams can now hire lawyers to attempt to lower the number of games remaining in the player's suspension by half. This is an important point... the reduction amount is based only on the games remaining in the suspension... not the initial amount. It will be key for GMs to use their lawyers as soon as they know a suspension has been handed out.

Lawyers are handled similar to Medical Staff in that you can purchase them, must pay a seasonal maintenance fee and can recoup 25% of the purchase price if you want to purchase a different lawyer. Each lawyer will have an Appeal Fee... this is charged to your team for every appeal you make... regardless of whether or not the appeal was successful. The Chance field shows the chance your appeal will have to be successful.

Only one appeal can be made for a player per season. If the player is suspended again later on in the season, the lawyers will not be able to help.

Roster - Farm Manual/Auto setting
We've moved the drop-down to change whether UHS will set your farm team's roster / lines to the top of the roster options. If this is set to Auto, your roster and lines will always be managed by UHS... any changes you make will be over-written. We've moved this setting to the top so it's a little more visible to the eye at a glance.

Upcoming Games
The Upcoming Games section in your Team page has been changed slightly to use zebra striping and show you the record of your opponent. The record will take into consideration things like season OT type and show OTW/L and SOW/L records if those categories award points differently than a regulation win/loss. The record line will show this data: Wins-Losses-Ties-OTWins-OTLosses-SOWins-SOLosses.

Example: if a league awards 3 pts for a regulation win and only 2 pts for an OT win, the record line would be something like: W-L-T-OTW. As long as the OTW or SOW pts values are different from a Regulation Win pts value, then OTW / SOW will be shown. The same goes for OT Losses and SO Losses. Ties will only show up if your Regular Season OT Type allows for Ties.

Forwards Allowed on Defense Positions
We've added a setting in Settings > Game Settings to allow a COM to toggle whether forwards are allowed to play on a defensive position. By default this is disabled. If the COM has enabled position penalties the forward will get a -10% on any event (Pass, Skate, Shoot) if Even-Strength, however, on Power-Plays and Penalty-Kills, there is no position penalty even if position penalties are enabled.

Please note that using the Auto Lines feature will not set your forwards into your defensive positions, you will have to do that manually. You should also be aware that enabling this could potentially allow a team to run with no defensemen at all.

Auto-GM teams will never use this functionality... they will attempt to fill their roster and lines with players of the appropriate positions.

Request to be Traded
We've added in functionality to make a check for players requesting to be traded. The chance at the request is a flat 1%. If a player requests to be traded, the team will no longer be able to offer a new contract, similar to the player refusing to negotiate with the team. In fact it is treated exactly the same. As such we have added a new bubble on the Team Home page to show Player Contract Issues: this will show players with Contract = 0 or Requesting Trade or Holding out for Free Agency.

To trigger a Trade Request check one of the following must happen:
- The player is placed on waivers.
- The player's current Ice Time Average (Minutes for goalies) is less than 75% of the average from the previous season. This is only applicable during the Regular Season from when the player's team has played 10 games to the Trade Deadline.

Trade Notifications
We have updated the Email Notifications section for your account profile (click on your account name at the top right when you are logged in). You can now opt-in to UHS Admin messages, Incoming Trade Notifications and Completed Trade Notifications (for COMs or higher only).

By default the Incoming Trade Notifications are enabled and Completed Trade Notifications are disabled. Your regular UHS Admin message opt-in setting has not been changed.

Cron Jobs & Inactive Leagues
Leagues that are considered inactive (no logins for 30 days) will now be ignored by most system cron jobs to reduce unnecessary system usage.

Bug Fixes
- Fixed an issue where the Coach Stats page on Public Websites was not functioning.
- Fixed an issue where COMs could not add teams if a non-default setting was used for drafting.

Hot Fixes
- Fixed an issue where the rookie designation was not being updated. Released August 16 2014.
- Fixed an issue where the AutoGM would get stuck in an infinite loop when a trade initiation check was successful. Released August 19 2014.
- Fixed an issue where a player's type would get reset when the league changes from pre-season to regular season... this meant the player would have to clear waivers again even if they had cleared it earlier in the season. Released August 19 2014.
- Fixed an issue where the schedule generator would time-out when creating schedules for leagues with an odd number of teams. Released August 31 2014.



UHS Build 7081 - August 7 2014
This build is pretty massive.... I had a good run where I had minimal to no pain, so I was able to power through some items that I've wanted to do. We now have a status update section built into the League Home page. You'll need to log into UHS in order to actually use that, however, you will be able to view it on the public sites.

We also added Player Faces... this is something I've wanted to do for a LONG time... the faces are definitely very cartoonish and rough around the edges, however, as time goes on I might be able to get back and revisit it.

We added in some AJAX so that we can reduce the number of page refreshes and keep page load times down... primarily this was done for the status update development, however, over time we'll incorporate it into other sections as needed.

COMs can now Reset Queued games, set Rookie eligibility requirements, set Standings tiebreakers and now set a Farm Salary Cap.

Status Updates
We've added a new feature to allow all league members to post a status update. These updates will be shown on the right side of the League Home page (just click the League link at the top of the nav menu). The Game Results section has been moved (more on this later) to make way for the Status Updates.

You will also be able to see the Status Updates on your Public Site, however, you will not be able to make any posts unless you are logged into UHS.

When posting your team's logo will appear beside your name. For league owners and commissioners, the league logo will appear there instead. If there are no logos available, the UHS cog will appear by default.

This new area will only be available if you are running a browser with javascript / scripting enabled.

Player Faces
As I'm sure you've noticed when you look at player profiles you'll see a silhouette of a player with the UHS name on it. Well... I finally was able to put together some healthy time and create a ton of graphic assets. I've created a script that will automatically generate a random face if one doesn't already exist. So... some things to keep in mind when looking at the faces:

1. I am NOT a graphic artist... as can be evidenced by the "great" work I did on the faces.
2. The eyes and mouths look like anime? well... that's because they are. They were the only eyes and mouths I could find outlines for that I could fit into the design of the face.
3. There is a bleed effect on moustaches... yep... in some cases there will be.
4. Goalie masks will obscure most of the face except the eyes.

This is my first run at randomly generating faces... perhaps as time goes on and health permits I'll be able to re-visit it. Or if there is a talented graphic artist out there that would like to donate their time, please contact me using the support system.

Farm Salary Cap
We've added a new option for leagues that want to play around with a Farm Salary Cap. If enabled your team's Farm salaries will be accrued and shown in your Finance page. If a team is over the Farm Salary Cap whatever fine method you've selected will be applied. Please note we will only check for violations when the Pro team plays not the Farm team. This is mainly due to the Pro team owning the overall finances whereas we do not keep a record for Farm finances. You should also be aware that Junior prospects do NOT count towards the Farm Salary Cap... only players assigned to your Farm team.

Unlocking / Resetting Games
We've added a new tool to allow Owners and Commissioners to reset games that are stuck with a status of "Queue" or "In Progress". It is highly recommended you only use this tool if the game is stuck for at least 5 minutes. Typically games take anywhere from 3-20 seconds to sim depending on server usage, however, as we grow and more leagues are using UHS, the queue job will take longer to sim your queued game.

A game will typically get stuck because a roster change gets made AFTER the game gets queued up and BEFORE it actually gets simmed. We do have error checking for that so the game won't actually get simmed, however, it will be marked "In Progress" and remain that way until a request was made to us to fix it. When queuing up games, please remember the league is locked for a reason. We want to ensure our data integrity before the games are actually simmed, so we prevent people from logging in to make changes. We intentionally allow COMs and Owners to remain logged in so they can carry out their business, however, they should be aware that touching Rosters are pretty much a no-no. Even unlocking the league shouldn't be done... once all the queued games are simmed the league will unlock automatically so the COM doesn't need to worry about this.

Additionally, when you use this tool to reset a game, your league will automatically unlock so that necessary cron jobs can run and potentially fix whatever roster issue was happening to cause the lock in the first place.

You will find this tool in Tools > Reset Games.

Standings Tiebreakers
COMs now have the ability to set their league's tiebreakers. By default the tiebreaker rules will be Pct, Wins, Goal Differential. COMs will have the ability to set up to four tiebreakers. The COM can pick of the these tiebreakers:
- Pct (points percentage), highest to lowest.
- Wins, highest to lowest.
- Wins - OT Wins, highest to lowest.
- Wins - SO Wins, highest to lowest.
- Wins - OT Wins - SO Wins, highest to lowest.
- Goal Differential (GF - GA), highest to lowest.
- Goals For, highest to lowest.
- Goals Against, lowest to highest.

Rookie Eligibility Settings
COMs now have the ability to set the maximum age and minimum games a player must have in order to qualify as a Rookie. The minimum games is actually a percentage of games that have been played in the season to date, so as the season continues the list could potentially change depending on how many games the player was actually in. You'll find the settings in Settings > General.

Game Results Changes
You'll notice that the Game Results have been moved to a section under the Commissioner's Corner and above League Activity. You'll also find that we are now only showing either your Pro, Farm or Junior league game results. Previously we showed all of them since we had a lot of vertical space. The move to the new location prevents us from showing all three leagues since there just in not enough horizontal space. I will eventually be adding a few more things to the Game Results area to "fill it out" as it looks like there is a lot of wasted space.

You will see Pro, Farm and Junior links... clicking these will refresh just the Game Results section... so you won't get a full page load (trying to reduce these).

Personnel (show all leagues)
We've added a list of all the Pro, Farm, and Junior players your team owns in one big list (like it used to be prior to UHS Dark)... you'll find this list on your Personnel Home page... just click Team > Personnel and you'll see it beneath the Summary area.

Bug Fixes
- Fixed an issue where the Free Agency End Date and Trade Deadline were not being automatically set when the Pro league's schedule was created.

Hot Fixes
- Fixed an issue where errors would appear when saving Play-off settings for leagues that did not have a Farm or Junior system set up.



UHS Build 6890 - July 30 2014
This build is aimed primarily at adding in the automatic playoff series creation settings. When this was first proposed about six years ago, my approach to it was pretty much all wrong... I started thinking about all the possible methods you could choose for your playoffs and was going to set up each one as a different type... this even went as far as specifying the number of teams too.

I guess it's true that with experience comes *some* wisdom... as the work wasn't nearly as bad or complicated as I thought it was going to be. Don't get me wrong... it took a bit to debug and figure out but overall I think we're okay with the method I've chosen to go with.

I also did a little work on the random player name generation logic as well as cut out some of the acronym names in favour of automatically generating acronyms if it's needed.

Playoff Series Generation
After nearly six years I've finally gotten around to adding in the option to automatically generation playoff series. You will find the new options in Settings > Play-off Settings. In here you will select the Playoff grouping, number of qualifying teams, toggle whether division winners are always ranked higher and the length of the series.

If you opt to select "Manually Create Playoffs", when it's time to generate playoff series, you'll basically be on your own... you'll be using the method we've used since day 1. You'll pick your Home & Away teams, Round type (Preliminary, Quarter-Final, Semi-Final, Final) and Series Length. Once you create all of your series, you'll then go to set your starting date and hit Create Games. You'll notice that levels that did not have Manual selected will not have their teams present for selection.

If you opt to select anything other than Manual for playoff groupings, you'll be able to select the following options:

Grouping
- by Division: teams are grouped by their Division, then by Conference to create playoff series.
- by Conference: teams are grouped by their Conference only to create playoff series.
- League Grouped Together: teams are grouped together regardless of Conference or Division. Sort of like what they tried in the NHL back in the 1979-80 season.

Qualifying Teams
You can select from 1 up to the maximum number of teams for the grouping you've selected previously. In the cases of unbalanced conferences and divisions, the highest number of teams allowed per grouping will be the number of teams from the smallest division. So in the case of conferences of 14 teams and 16 teams, the most you would be able to select for qualifying teams is 14 (the lowest of the conferences).

Division Winners Ranked Higher
Here you have the option to allow division winners to be re-seeded higher in their respective conference or league (this doesn't really apply for Group by Division). This is similar to how the NHL operated their playoff format in the late 90's and 2000's... the top division winners of each conference were ranked 1-2-3 regardless of their point totals compared to the other teams that did not win their division.

Series Length
Quite simply, how many games do you want your series to run?

So now that you've selected your play-off settings for each level (Pro, Farm, Junior), how do you go about creating your series? Well... when you advance your season from Regular Season to Play-Offs, you'll go to the Manage > Schedule - Play-offs like you would have done with Manual Setup. You should notice that all of the series have already been created for you... all you need to do now is enter your Start Date and click "Create Games".

For subsequent rounds you'll do the same thing... once the round is over, you'll enter the Manage > Schedule - Play-offs page and find your new series automatically created for you.

Manual Playoff Series Updates
We've added a few quality-of-life improvements if you still want to create your playoff series manually. When creating new series the page will remember the last Type and Length that you used, so you don't necessariy have to re-select the options you want... just pick your teams and carry on. Also, you will now only be allowed to create one Final, one Farm Final, and one Junior Final series... once you create that, the option will be removed from the drop-down. If you made a mistake, it's okay... delete the series and re-add it.

Player / Coach Born field: Early Retirements & Rerates
We've added a new "Born" field behind the scenes to record the season that a player (or coach) was created. This field will now be used to determine whether a player / coach will retire early from not having been in any games for X number of seasons (as set by the COM) since their last game. This was a problem since if there were no games played EVER, how would we know when it was okay to force a retirement? The Born field will now be used when the player / coach has never been in any games.

Additionally, this will also apply to rerates in that a player cannot be rerated if the last season (meaning the one we just came from prior to the season change) is the same as their Born date. I *might* put in a small chance at some random rerates (perhaps like 10% chance for each skill), however, for now, we're going to leave it as is.

Player / Coach Deletions
After all retirements have run, the season change code will check for any retired Player or Coach and see if they have any statistics whatsoever. If there are none, the Player or Coach will be deleted from the DB. This was previously running only for Players, however, we've increased the scope to also run for Coaches.

Player First Name Creation
I've removed the names that consist of two capital letters (like PK, RJ, PC, JC, etc) in favour of adding some random hyphenization when creating a random first name. I've also added quite a few more Quebec French First Names. There will be a 1 in 1000 chance that a player will have a hyphenated first name and a 50-50 chance that hyphenated name will actually be shortened to something like PK, RJ, etc. I've also optimized some of the name generation queries... I doubt anyone will notice on unless you are making a LOT of names at once, however, it should be a little faster now. This was released as a "hotfix" on July 14 2014.

Special Last Names
We've removed the code that could potentially add a "Jr.", II, or III to the end of the player's last name. Not really seen in hockey... it's more of a soccer thing. Player last names have a 1 in 1000 chance of being "Special"... where they will either become hyphenated or a new country will be randomly chosen for that last name.

Player Dodging Checks
There was a change made in a prior build that removed "dodged pass interceptions" being counted as a Check Avoided. All leagues should be seeing a decrease in the Checks Avoided category because of this.

Additionally, players successfully making their Quickness skill check will only be hit for half the defender's strength (Power) skill when hit by the check. This should give the Quickness skill a little more oomph when considering a player as they'll likely be able to stay on the ice for a longer period of time than those with low Quickness skills.

Public Site Contact Forms
I've added a validation question to the public site contact form as I've noticed (and you have probably too) that the form was being hit by spammers. While this won't defeat human spammers, it should defeat bots.

League Member List
When logged into UHS all users will now see a "Members" link under the League menu. This will show all Owners, Commissioners and GMs assigned to teams. The member's role, email address and last login time will also be shown to let everyone get a gauge of league activity. Further to this, members that have not logged in for 14 or more days will have their time highlight Red. If not logged in within the last 7 days the time is highlighted Orange.

Please note, we are intentionally not including this on the Public Site as I don't want to be putting everyone's real names and email addresses on a website where anyone can just go grab them. Privacy is important to me.

Bug Fixes
- Fixed an issue where the original owner of the pick was being shown in the Entry Draft list on the UHS site.
- Fixed an issue where teams were not receiving scouting reports for their own players when the season changed to the new Off-Season.
- Fixed an issue where players were able to be bought out despite still being on waivers.
- Fixed an issue where the value of contract offers was not rounding properly. Example: $0.3 * 3 years = $0.89999 instead of $0.9.
- Fixed an issue where the Search Ahead / Suggestion box for the player search was too light.
- Fixed an issue where the League Salaries page on the Public Site would display a multisort error.
- Fixed an issue where Ledger entries on the Public Site were appearing in ascending order instead of most recent at the top.
- Fixed an issue where hitting save would return "Array" in the message area for Settings > General Settings.
- Fixed an issue where lines would not shift off when reaching exactly 0 energy due to a floating point error.
- Fixed an issue where PK lines would have phantom players contributing to line energy... this resulted in PK lines spending more time on the ice than they should have been.
- Fixed an issue where the AutoGM would only set their farm roster when there was an injury. This fix will set the roster anytime a player is sent down to the farm team so good players are not benched waiting for an injury.

Hot Fixes
- Fixed an issue where new leagues were not creating owner accounts due to an old table being referenced. Released July 9 2014.
- Fixed an issue where COMs could not delete users with apostrophes in their username. Released July 12 2014.
- The Rookie table population job will now ignore leagues that have Inactivity Warnings. Released July 12 2014.
- The Rookie table population job will now ignore leagues that have not had anyone log in. Released July 18 2014.



UHS Build 6771 - July 7 2014
This is a small build to address a fix for older UHS leagues where the Money Traded Away Expense was not set up properly... this resulted in teams being able to trade money away and not get charged for it. This only affect a handful of our leagues (the veteran) ones, however, we are deploying the fix to all leagues to ensure we're all up to date.

We've also hotfixed one of the Coach scouting funtions... this resulted in some coaches being skipped during the new Mass Scouting addition.



UHS Build 6766 - June 28 2014
This was another build I had planned to be a bit larger and released more around the end of July, however, the discovery of the coach scouting issue forced this release to be pushed up. We had already released a walk-through to setting your league up for it's Inaugural Season but still needed to include it here for the sake of logging the changes we make. The bigger items you'll see here reflect the addition of Contract Extensions and changes to how they are being offered. We have also modified the Buy Out values of players to reflect whatever level they are on since I've been seeing NHL teams move players down to the farm to clear waivers so they can buy them out for a cheaper price.

I was intending on adding in the Two-Way Contract, Salaries & Contract Switch (toggle), No-Trade Clause and the Signing Bonus developments, however, we had to cut things short and get this release out to address a bug. I like to bundle developments around a certain aspect of the program if possible to help keep things a little more simple for GMs that may not like tons and tons of change as it can be difficult to remember all the different things that may have been modified. It also helps me to focus on a certain area for testing instead of needing to do an extensive test on all of UHS. These developments are still pending and will eventually get addressed.

The coach scouting bug was an issue where a report of "Good" would be returned when a coach's skill had a value of 9. It should have returned "Excellent". I'll be updating most leagues with a custom script to re-scout any coaches that were scouted in their league's current season to record the proper scouting report.

Inaugural Season Walk-Through for COMs Guide
We released a walk-through for COMs for a league's inaugural season. This will take you step-by-step through all the items you need to set up and plan for during the season.

Free Agent Stats
There is a new report available for COMs in the Reports section and GMs under League > Free Agency > Free Agent Stats that will show you a list of all available Free Agents and their Regular Season statistics for their most recent season.

Contract Extensions & Changes
UHS is going to change how contract offers are handled to be more inline with what happens to a typical player in the NHL. If a player is still under contract but it at or under the Minimum Contract Re-Offer value (default to offer a new contract to players is 1 year), the GM will be presented with two options for when the contract will start:
- Takes effect at end of current contract
- Takes effect immediately (-20% penalty).

By default the first option is selected. With this option if the player accepts, the new contract will take effect during the Off-Season change and their current contract is at 0. If you choose to go with the second option (which until now was the only method UHS would handle), the contract will take effect immediately, resulting in the player losing the remainder of the current contract (hence the -20% penalty). This option is being made available in case GMs are running into Salary Cap problems and want to take a chance at signing a different deal with their player.

These options will not appear if the player is at 0 years (no current contract) as "Take effect immediately" is assumed, however, the -20% penalty is not applied to the signing factor. The -20% penalty is applied before the Min / Max, so the Min is still 10% to sign and Max is still 90% to sign.

For buy-outs the GM will need to pay out the entire value of the contract extension on top of the player's current contract. The contract extension value is also modified by the Buy Out Percentage that is set by the Commissioner.

Please note that the AutoGM will always use the Immediate Start option, however, they will not get the -20% penalty. It is cheating a bit, however, the AutoGM really wasn't meant to act exactly like a live-flesh-and-blood GM.

Player Buy-Outs
Players being bought out will now have their buy-out prices subjected to the same salary modifier as whatever level they are on. By default Farm is 25% and Junior is 10%. So a player clearing waivers that is going ot be bought out will have their full Buy Out value reduced to whatever the percentage is for their level. Here's an example:

BuyOutPercentage - 66% - this is set by the COM. By default it's 100% but we're changing it to 66% (TJHL) for the sake of the example.
Sal Farm Pct - 25% - also set by the COM.
James Young's wage - $2 / 5 - $10 million value (I wish).

Young is sent down to the farm and clears waivers. The GM is going to buy him out. Previously the GM would have to pay $10m * 0.66 = $6.6m. With the change we've made, the GM will now be paying: $10m * 0.66 * 0.25 = $1.65 million.

This development was done to bring UHS more in line with NHL team practices.

Bug Fixes
- Fixed an issue where the Waivers link was not appearing during the Off-Season or Pre-Season despite GMs having the option to send their players through waivers.
- Fixed an issue where a coach with a rating of 9 would still show up as "Good" in their scouting report.
- Fixed an issue where coaches that were already scouted by any team in the league would not be included in the Coach Mass Scouting tool.
- Fixed an issue where All-Star teams were not displaying properly in Public Websites.
- Removed some pages from the Teams navigation in Public Websites for All-Star teams as they were not intended for those type of teams.
- Fixed an issue where the actionlist for players was appearing empty for COMs attempting to manage a team.

Hot Fixes
- Fixed an issue where GMs would see "No Action Available" for all players in the Personnel section. Released June 7 2014.
- Fixed an issue where the AutoGM would still look to free agency to poach players despite having full rosters. Released June 8 2014.
- Fixed an issue where the Team Career leaders on public sites were linking to an incorrect player profile. Released June 9 2014.
- Fixed an issue where new leagues were still seeing the old Record Book table being created. Released June 12 2014.
- Fixed an issue where changing the scouting adjustment for your team would change it for all teams in the league. Released June 12 2014.
- Leagues without anyone logging in for 30 days will now start to receive warnings. Previously this was set to 90 days. Released June 14 2014.
- Fixed an issue where COMs could not enter in a negative number in the Ledger tool (usually done to fix an incorrect entry). Released June 19 2014.
- Fixed an issue where large leagues could hang when changing from the playoffs to the off-season. Released June 19 2014.



UHS Build 6693 - June 6 2014
The Record Book change was a lot bigger than I expected. It's required a couple of extra tables and some changes with how we record information. Better late than never.

Junior Star Players
We are introducing a new tweak to junior player creation that will change the skill range of randomly generated junior players. This change is going to only apply to junior players that require randomly generated skills and not manually created junior players.

Junior players have their skills created with a range of 1 to 6. IJ is always set to 6. PN is ranged from 4 to 6. With this change the new skill ranges will be 4 to 9. IJ will be 6 to 9. PN will be 4 to 9.

By default this is enabled for all leagues at 1% meaning there is a 1% chance for each randomly created junior player to become a Star player. COMs can adjust the setting in Settings > General. The accepted range is 0% (disabled) to 10% (LOTS of star players).

Record Books
I've added a new Record Book stat page in Stats Central. It is very similar to the Career Stats page where you'll see a ton of items to click on the left side of the screen... this will load the applicable record in the main page. To help pull back the appropriate records more easily we've created two new tables: TeamResults and StreakTracker.

- TeamResults will contain a row for each team's game, opponent and applicable stats for that game.
- StreakTracker replaces the old RecordBook table (which is now deprecated... it is removed from your database as of this build) and will now hold ALL team streaks: winning, losing, winless, unbeaten and ALL player streaks: goals, assists, points regardless of season type (pre-season, regular, playoffs) and level (junior, farm, pro). Previously, the RecordBook only tracked records for Pro level Regular Season.

When loading old savepoints, you may find it taking a bit longer as we're going to check your savepoint for whether StreakTracker or TeamResults is populated... if not, we'll do that for you before the league is unlocked.

For Public Sites, you'll find the League > Record Book page has been removed in favour of the new location: Stats Central > League Records.

Farm & Junior Rerate Weights Uncoupled from Salaries
Previously the weights of the Farm and Junior stats a player accumulates was tied directly to whatever the COM had set the Farm and Junior Salary Percentages at. By default this was 25% for Farm and 10% for Juniors. By default, 4 goals scored on the farm team would have the same weight as 1 goal scored on the pro team.

We have now decoupled Rerate weights from salaries. By default they will still have the same values: 25% for farm, 10% for junior, however, the COM is now free to change those as desired. For instance the Farm Salary Pct could remain at 25% but the COM may decide to change the Farm Rerate Wt to only 20%.

Trade Deadline Automatically Set
When you create your Pro league's schedule via Manage > Schedule > Pro, your league's Trade Deadline and Free Agency End Date will automatically be set to the 75% mark of the season. Additionally, if the new FA End Date happens to be earlier than the Free Agency Start Date, the Start Date will be adjusted to start one day earlier than the FA End so we can avoid wonkiness with the system.

Roster Validation
The Team Roster Validation tool will now only show you active teams in your league.

Bug Fixes
- Games marked as "Not Needed" will no longer appear in a team's upcoming games list.
- Resolved an issue where projected balances for regular season sales were not adding future regular season games.
- Removed the array printing at the top of the screen when a COM inputs RFA compensation.
- Added a link to the player's profile for the player requiring RFA compensation.
- Fixed an issue where the Player Rerate function was always showing "Not Applicable" when viewing a player profile on the public website but was not logged into UHS.
- Fixed an issue in the play by play where a skating play by play text was being used on successful passing plays if the defender attempted to check the passing player.
- Fixed an issue where Game Misconduct, Match penalties or Major + Match penalties (due to injuries) were not being shown in the Live Mode Penalty Summary.
- Fixed an issue in public sites where the Shoot-out Loss header would not appear.
- Fixed an issue where changing between levels in the Career Stats page would result in a reset of the information being looked at.

Hot Fixes
- Fixed an issue in shoot-outs where even though the correct player was used for the actual shot, a different player was being shown and getting credit for the stats. Released on May 29 2014.
- Fixed an issue where the incorrect arena would be used when calculating a team's game attendance. Released on May 31 2014.



UHS Build 6567 - May 26 2014
I was not expecting to have to release this build so soon, however, there was an issue with how the database fields were set up for the Max Farm Skill Age setting. It was not set up correctly, so even when GMs had the option to move players, it would come back telling them they had to clear waivers. It was necessary to release this as a build since it affected all league databases. I could have sat on this one, but I'm pretty sure not being able to move players to the Farm is a critical piece of functionality that needs to be fixed.

Faster / Mass Coach Scouting
GMs now have the option of scouting the whole list of Coaches at the click of a button. The GM will pay a percentage (as set by the COM) of the full scouting cost for each coach. The GM will only get charged for coaches they do not have scouting reports for this season. If there are no coaches available or all available coaches have already been scouted, the GM will not see this feature. GMs can access this feature by going to Personnel > Manage Coach.

By default the percentage is set to 25%. COMs can change this in Settings > Scouting.

Fighting Chance
COMs now have the ability to set the engine's fighting chance. This is the chance that a fight *could* happen each cycle. The default is set to 1%. Setting this to 0% will completely disable fighting from your games. The allowable range is 0% to 5%.

COMs can change this in Settings > Game Settings.

Bug Fixes
- Fixed a grammar issue when successfully changing a league's draft order.
- Fixed an issue where the "All Ages" option for Max Farm Skill Age in the General Settings area was being shown as blank.

Hot Fixes
- Fixed an issue where some columns were not showing properly in the Public Site league standings despite the headers appearing. Released May 22 2014.
- Disabled the portion of the AutoGM code that allowed multiple free agent selections to fill a roster regardless of position. Released May 22 2014.
- Fixed an issue where games played using Live Mode were not properly updating their respective playoff series. Released May 23 2014.
- Released a change to rerates to check for the Farm and Junior percentage being 0. If this is true, those settings will instead be changed to 0.01 to prevent any potential wonkiness in the rerates. Released May 23 2014.
- Fixed an issue where Buy-Outs were not being recorded in the Activity Log. Released May 23 2014.
- The Free Agency "poaching" code for the AutoGM has been re-enabled with position and roster restrictions: No more than 5 C, LW, RW, 8 D, 3 G for the Pro or Farm team and No more than 26 players for the Pro team if the AutoGM doesn't have a real farm team and No more than 52 players if the AutoGM for the Pro and Farm team combined if a farm team exists. This change will not count injured or suspended players so the AutoGM will be allowed to poach free agency for subs. Released May 23 2014.
- Fixed an issue where rerates for farm players were going to use the No Farm Schedule method regardless of whether a farm schedule was used in the last season. Released May 26 2014.
- Fixed an issue where a player could potentially be treated as a farm rerate - no schedule if they did not play two seasons ago. Released May 26 2014.
- Fixed an issue where the incorrect player options were being presented to GMs attempting to manage their team in the Personnel section. Released May 26 2014.
- Fixed an issue where the Max Farm Skill Age field was incorrectly set up for all leagues, resulting in incorrect messages preventing GMs from moving players down to the farm. Released May 26 214.



UHS Build 6524 - May 22 2014
This is a pretty massive build considering the time it took me to work on it. Originally we had been focused on the Max Farm Ratings and publishing our Guides to replace the old Help files we had previously. Our focus quickly shifted to revamping our penalty system, tweaking player shooting decisions and allowing centers to participate on special teams without penalties. I'm probably going to be taking a bit of a break as more work on UHS = more time on the computer = more health issues for me. I'll still look at quickly fixing any reported bugs, but I would think the next build would come as late as July.

Max Farm Ratings
We've implemented a new setting that puts a limit on the skill level for players being moved to the farm team. This setting relies on a secondary setting: MaxFarmSkillAge. The Age setting will let you toggle whether the MaxAgeProtected value (set in the Protection area) is used or whether Age is completely ignored when determining whether a player can move to the farm.

If Age is used, if the player is at or under the MaxAgeProtected, they are able to move to the farm, regardless of their skill. If they are over the MaxAgeProtected value, they will be unable to go to the farm. In addition they will also be unable to be placed on waivers (as they are tied together).

If Age is not used, if the player's total skill is over the MaxFarmSkill value, they will be unable to be moved to the farm (also waivers is off-limits as above).

If a team has lost too many players to waivers (as set by the COM), players will still be unable to be moved to the Farm or Waivers if they do not qualify via the MaxFarmSkill or MaxFarmSkillAge values.

Guides & Walk-throughs
This build was going to be aimed primarily at creating a ton of guides and walk-throughs. One was initially created before my focus was shifted back to the Sim Engine. We're releasing this section along with the published guide for skills descriptions and what they do as well as the placeholders for some of the guides I have planned.

Please review the placeholder guides and let me know if there are any guides you'd like me to tackle that aren't already on the list.

You can find the guides in two places:
- Logged into UHS: Support > Guides & Walk-throughs
- League Public Site: UHS > Guides & Walk-throughs

Special Teams Ignore Position Penalty for Forwards
When a player (let's say a Center) is placed on a line in the LW spot, that player will incur a position penalty that modifies all rolls during a game. This rule will be changed for Special Teams lines: Power-play and Penalty-killing. You will now be able to use a C, LW, RW in any of the C, LW, RW spots for the PP or PK... the player will no longer suffer the Position Penalty.

Please note the Position Penalty is still in effect for Even-Strength lines.

Penalty Changes
We've reviewed our penalty calls and made adjustments as per the NHL Rules (available on their website). All penalties called in Regular Season games during April 2014 were considered when evaluating frequencies of calls. Penalties will no longer have a chance to called on each cycle. Instead penalties will only have a chance to be called in the following circumstances:
- The Defender attempts to Check the player.
- A Player is Injured.

Further, the default Referee Tolerance value will be changed from 5% to 3%. This change will also be applied to all leagues.

Breakaway Penalties:
These are the penalties that could be called if a foul is commited on a player on the breakaway (and a penalty shot is not called).

- Holding
- Hooking
- Slashing
- Tripping
- Unsportsmanlike Conduct

Common Penalties:
These penalties will together account for 99% of the calls that can occur after a typical foul. Each penalty's frequency will vary, however, combined it totals 99%. The remaining 1%will trigger a check in the Uncommon Penalties section. When called, some of these penalties have a 5% chance to be upgraded to a Major. When upgraded to a Major the player also receives an Automatic Game Misconduct. FIghting is the exception to this as this penalty is handled outside the Penalty Determination code.

- Cross-Checking - 5% (minor or major)
- Delay of Game - 5% (minor)
- High-Sticking - 10% (minor or double-minor)
- Holding - 12% (minor)
- Hooking - 18% (minor)
- Interference - 10% (minor)
- Roughing - 15% (minor)
- Slashing - 10% (minor or major)
- Tripping - 14% (minor)
- Uncommon Penalty - 1%

Uncommon Penalties:
While common penalties together account for 99% of the penalties called, uncommon penalties only incur a 1% chance. These penalties will range from being minor penalties to match penalties. Each penalty call has an equal chance to be called. Some of these penalties have a chance to be upgraded to a major... if so, the major penalty also comes with an Automatic Game Misconduct.

- Bench Minor (minor)
- Boarding (minor or major)
- Broken Stick (minor)
- Butt-Ending (double-minor or major)
- Charging (minor or major)
- Checking From Behind (major)
- Check to the Head (minor)
- Clipping (minor or major)
- Closing Hand on Puck (minor)
- Concealing Puck (minor)
- Diving (minor)
- Elbowing (minor or major)
- Headbutting (double-minor or major)
- Holding the Stick (minor)
- Kicking (match)
- Kneeing (minor or major)
- Misconduct* (10-minutes)
- Slew-Foot (match)
- Spearing (double-minor or major)
- Throwing the Stick (minor)
- Too Many Men (minor)
- Unsportsmanlike Conduct (minor)

* Misconduct penalties are typically handed out along with a minor or major penalty, however, there are also cases where the player was given the Misconduct with no other penalty. In UHS Misconducts will always act as a separate penalty and will not occur in conjunction with another penalty. The player will serve the 10 minutes but the team does not have to kill off a 5-minute major like you would with a Game Misconduct or Match penalty.

Goaltender Penalties:
Goalies will only be able to receive minor penalties, regardless of the call. Perhaps sometime in the future I'll add the full range of the penalty to the goaltender, however, now is not the time.

- Cross-Checking
- Delay of Game
- Diving
- High-Sticking
- Holding the Stick
- Interference
- Roughing
- Slashing
- Throwing the Stick
- Tripping
- Unsportsmanlike Conduct

Penalties Due to Injury:
When a player if injured in a game the offending player is checked to see if a penalty will be called. Injuries will happen in a game regardless of whether they have been toggled off. Toggling Injuries off only prevents multi-game injuries... a player can be hurt just for that particular game if he's hit hard enough. Anytime a penalty call is made, one of these Match Penalties are called. Each penalty has an equal chance to be called. All Match Penalties mean the offending player is ejected from the game and the team must also kill off a 5-minute major.

- Boarding
- Butt-Ending
- Charging
- Checking From Behind
- Check to the Head
- Clipping
- Cross-Checking
- Elbowing
- Headbutting
- High-Sticking
- Hooking*
- Kicking
- Kneeing
- Slashing
- Slew-Foot
- Spearing

* The Hooking call actually gets called as a 5-minute Major for Hooking and a 10-minute Game Misconduct (as opposed to the usual 10-minute Match Penalty... in either case, the player is gone from the game and the offending team must kill off a 5-minute major).

An example would be an offending player injuring another player gets two calls against them in the Penalty Details:
- 5-minute - Major - Elbowing
- 10-minute - Game - Match Penalty

Players Serving Majors or Misconducts
When a player is serving a 5-minute Major or 10-minute Misconduct, they will now no longer be able to rejoin the game until the next stoppage. These players will get substituted on to whichever line happens to be on the ice for the face-off. This is only temporary... one that line cycles off and then back on again it will be restored to the players that were originally set. This is done to allow players serving those penalties to get a bit more ice-time after having just missed 5+ or 10+ minutes.

Fighting
Previously fights could only happen with players that had an Aggression skill of 7+ and a Penalty skill of 4 or lower. This has now changed to allow ANYONE to participate in a fight as long as their rolls beat their AG and PN skills.

Due to this change, we've decreased the chance that a fight can happen from 5% per cycle down to 1%.

If there is an altercation and the Aggression skill checks fail but both Penalty skill checks pass, both players will be assigned coincidental minor Roughing calls instead.

Scoring
Scoring decisions have been changed slightly, however, the impact has been large. Previously there was a set chance for a player to either take a Slapshot or a Deke. The chance of a Slapshot was heavily weighted to encourage more of a chance to tip a shot in, thus adding more assists to a goal. We have had code put into the engine previously to encourage more passing before a shot was taken and from testing we don't see a dramatic dip in Assists.

Scoring decisions for Slapshots and Dekes will now be based on the player's PW and SK skills respectively. If a player has a higher SK skill, they'll tend to deke more and fire slapshots less.

Due to this change, we've seen a dramatic increase in scoring at our current Scoring Chance default of 10%. This makes sense... since players with a low PW skill are no longer forced to take slapshots, they will tend to use the shot-type that they have the better skill for. We were seeing scenarios where 20 players in a 82-game season had more than 100 points.

We've decreased the default Scoring Chance from 10% to 8%. This change will be passed on to all leagues immediately.

Miscellaneous
- When creating the Pro league Regular Season schedule, COMs will now see a "75% mark" to help determine their league's Trade & Free Agency Ending Deadlines.
- When creating players manually, players aged 19 and over will now be marked as being eligible for Free Agency.
- AutoGMs will now use free agency to round out their pro team if they have less than 25 players. If they have a real farm team, they will bid on free agents until they have 25 Pro players and 25 farm players or 50 players in total.
- I've added a new piece of code that will update all leagues Public Sites so that I don't have to do it manually. Whee. Less for me to do!

Bug Fixes
- Fixed a bug where Coach Stats were not being displayed on Public Websites.
- Fixed a spelling error for Commissioner's Corner on the UHS site.
- Fixed an issue where OTW, OTL, SOW, SOL, Ties were not being shown in standings on Public Websites.
- Fixed an issue where the player's age was not appearing in the Draft List.
- Fixed an issue where the Total Skill of a player was not being shown for players in Free Agency in leagues where skills are visible.
- Fixed an issue where the Total Skill of a coach was not being shown for coaches in Free Agency in leagues where skills are visible.
- Fixed an issue where a GM could not view their coach's skill values despite Skills Shown being enabled.
- Fixed an issue where Available Coaches were not being displayed with their skill values when Show Skills is enabled.
- Fixed an issue where Recent Team Activity was not grouping up activities properly by date.
- Fixed an issue where the Last Login time was not appearing for user's with an apostrophe in their user name.
- Fixed an issue where the bottom advertisement would appear in the main page if the GM had used up all of their Player Training points.

Hot Fixes
- Fixed an issue where the Salaries page on Public Websites was not using the Farm or Junior Salary Percentage set by the COM. Released on May 13 2014.
- Fixed an issue where Draft Picks from rounds exceeding the Entry Draft Rounds value as set by the COM were appearing for trades for GMs. Released on May 16 2014.
- Fixed an issue where Draft Picks from rounds exceeding the Entry Draft Rounds value as set by the COM were appearing for trades for COMs. Released on May 16 2014.
- Fixed an issue where GMs could continue drafting past the number of rounds that were set by the COM. Released on May 17 2014.
- Fixed an issue where AutoGMs could continue drafting past the number of rounds that were set by the COM. Released on May 17 2014.
- Fixed an issue where Teams could not see their Arena information when logged into UHS. Released on May 18 2014.
- Fixed an issue where PlayOff series could not be deleted. Released on May 20 2014.
- Fixed an issue where Farm Team playoff games were not being shown in the Upcoming Games section for the Team Home page. Released on May 20 2014.
- Fixed an issue where the AutoGM wouldn't make a coach offer if it didn't already own a coach. Released on May 20 2014.
- Fixed an issue where team salaries were not being paid during the regular season. Released on May 21 2014.



UHS BUILD 6377 - MAY 13 2014

AutoGM Logic Update
The AutoGM logic has been updated to handle various things relating to free agency, waivers, contract renewals and coaches:
- A Coach will have their contract renewed only at 0 years remaining and only if there is no coach available in free agency with a higher overall skill.
- A bid will be placed on a coach free agent only if the existing coach is at the Minimum Contract Reoffer value (default 1 year) or less and the free agent has a higher skill than the current coach. The AutoGM will fire the existing coach if a bid attempt is going to be made.
- The AutoGM will look at how many teams are bidding on a particular coach before thinking about making a bid.
- Players will be renewed if they are under the Maximum Age Protected value (default 22).
- Players will NOT be renewed if they are over MaxAgeProtected AND have a skill than is more than 30% less than the team's top player. This is being done to coax the AutoGM to start looking at free agency for better players and improve the team. We don't want it re-signing makeweights.
- The AutoGM will now look at Free Agency and Waivers as other avenues to acquire players to improve their team.

Player Training
GMs will now be able to train their prospects for a certain fee. The COM will set up three settings to govern this:

- Skill Pts / Season: The number of skill points the GM is allowed to train per season.
- Maximum Age: The oldest a player is allowed to be in order to have a skill point trained.
- Cost: The cost the team incurs to train ONE skill point.

A team is only allowed to train a player's skill once per season. By default a team would get 3 points. They are free to use all three points on the same player as long as they are applied to difference characteristics. This is to prevent teams from stacking all three points on something like the Skating skill.

Training can only happen during the Off-Season or Pre-Season. If the training points are not used they are lost. Skill points will not accrue over seasons.

To add some risk, there is a chance that training doesn't actually update the player's skill at all. The messaging from the system will NOT indicate if training was successful or not.

When running in leagues with Skills Hidden, instead of seeing the skill values, the GM will see the scouting report texts for each skill. If a skill is at 9, the option is still there to spend the training points, however, be aware that a skill can never go beyond 9... a skill that is trained at a 9 would simply revert back to a 9. Again, there will be indication if this has happened. It just adds some risk & uncertainty when training your players.

SavePoints No Longer Converted
It was part of our conversion process when we went from UHS3 to UHSDark(4)... it made sense to update all savepoints to ensure everyone started out on the same playing field regardless of what savepoint they were loading, especially since UHSDark had a few database/table changes.

Keeping it in our Release Task List did put some focus on how long it was taking to convert them due to the file size... which forced us to look at the size issue. Even with compression, we were still seeing releases around 3 hours... the majority of that coming from backing up current SavePoints and then converting existing SavePoints to use whatever database/table changes we added.

I think 3 hours is still too long, so we're going to go back to the old way of doing things... SavePoints will not be updated during a Release. They will be updated once a league loads them. Doing this will add a negligible amount of time to the load process and it will mean that UHS's Release downtime will be minimized as well.

What I am thinking though is that perhaps once a year we'll shut down SavePoints completely and do a one-time update with all the changes that have been made. Once those are done, SavePoints will be back up and running and we'll carry on as-is until the following year.

Miscellaneous
- We've added Manage Coach, Protect Players and Retire Jerseys as menu options when hovering over Team > Personnel.
- There is a new Home page for COM's Settings area. This just gives you a list of links to use.
- SavePoint file lists are now zebra striped to make it easier to identify which file to Load or Delete.
- Added a listing of all teams in the league when clicking on the Teams link in Public Websites. This will help alleviate scrolling issues for large leagues.

Bug Fixes
- Fixed an issue where creating Makeweight D-men would result in an error.
- Fixed an issue where a COM changing an account's password would not save the new password unless a random password was requested.
- Fixed an issue where no message would appear when a user signed in with the wrong password.
- Fixed an issue where a reset password request would result in a blank error.
- Fixed an issue where players retiring were not showing whether they became a coach.
- Fixed an issue where leagues would not be locked when advancing from PlayOff to OffSeason.
- Fixed an issue where the automatically created savepoint would use the previous season's number when saving.
- Fixed an issue where a pending savepoint would not appear in the list until it was In Progress when changing from PlayOff to OffSeason.
- Fixed an issue where a COM would see blank lines when clicking on the Power Play or Penalty Killing lines for a team.
- Fixed an issue where retiring coaches would not appear in the Activity Report.
- Fixed an issue where COMs sending players to the Farm without there being a full Farm System implemented would receive an error.

Hot Fixes
- Fixed an issue where errors would return if a team did not have finances set up properly. This could result in games getting hung or using data from a previous game. Released April 29 2014.
- Fixed an issue where the schedule would not change to the desired season using the public website. Released April 29 2014.
- Fixed an issue where unset lines could sneak through the linechecker causing the sim engine to hang. Released April 30 2014.
- Fixed an issue where coach free agency would run on a 24-hour period instead of the free agency hours value set by the COM. Released April 30 2014.
- Fixed an issue where a pro team's arena was not showing up in the Team Home section of the public website. Released May 2 2014.
- Fixed an issue where the drop-down link for Team Personnel in the public website took the user to the Team Home page instead. Released May 2 2014.
- Fixed an issue where the Auto-GM will use the wrong PlayerID for ActivityReport and PlayerMoves entries when creating a Makeweight. Released May 4 2014.
- Fixed an issue where teams with an apostrophe in their names would not have players or goalie stats updated when using Live Mode games. Released May 8 2014.
- Fixed an issue where Away team Goalies were not getting properly credited with shut-outs when games were played using Regular mode. Released May 12 2014.



UHS Build 6282 - April 29 2014
This build is focused primarily on returning public websites back UHS. As some of you may know we used to have a VERY basic public website where COMs could customize things like font, colours and background themes. While our new version removes that type of functionality it does offer new options the league never had before in addition to a ton of new information. We also added a range to referee tolerance as well as made the "League Locked" text in the header stand out a little bit more for leagues that may have accidentally locked things and forgot about it.

Public Websites Are Back
The very basic version of the public websites did not make it through the UHS Dark conversion as I wanted to get UHS Dark out there and then work on a newer, better version of the public websites. Now we have it. The new version closely mimics the design of UHS Dark and provides a lot more data. Users will now be able to watch live games for their league without having to log in. I tried to put in as much general information into the site so users would only need to log in to UHS directly if they needed to take care of something with their team (like roster changes, making contract offers, making trades, etc).

COMs will be able to upload their league logo as well as that of any team in the league. The COM can use the Upload Logo tool, found in the Tools menu, to upload their graphics. Logo restrictions are as follows:
- Can only upload GIF, JPEG or PNG.
- File names must be unique.
- Images can be a maximum of 200 KB in size.
- Image dimensions should be square as they will be displayed as 75x75 (for league logo) and 150x150 (for team logos).

COMs will also be able to enter Team Chronology information (ie, who GM'd when, or what-have-you) that will appear on the Team Home Page. COMs will find the Chronology field available when Editing a Team. Go to Manage > Teams. Click on the Edit button the team you to want to edit. This text will be displayed as HTML, so bust out your markup language cheat-sheet.

We will eventually add the Twitter & Facebook bar to the right (as it is shown when you log into UHS), but for now we’re aiming at ensuring that the public websites are solid.

If there are any issues that you find or things you'd like to see, please feel free to let us know via the usual methods.

Thank you to the these leagues that helped us by participating in the public website test:
- Worldwides Hockey League: http://uhs.hockeysim.ca/Leagues/WHL
- Dorchester United Hockey League: http://uhs.hockeysim.ca/Leagues/DUHL1
- Original-Six Hockey League: http://oshl.hockeysim.ca

Inaugural Draft Serpentine
Inaugural Drafts will now always be conducted in a serpentine order. Every even-numbered round will draft in reverse order. Originally I intended to add this as a toggle, however, to be fair for the first draft of your league you should probably be doing a serpentine order anyway.

League Locked Colour
When a league is locked the "League Locked" text will now appear Bold Red. This is done to help it stand out for COMs that may have accidentally left the league locked.

Referee Tolerance Threshold
We've put a threshold on Referee Tolerance so the range is now 0% to 10%. Typically keeping this at about 4% will generate an appropriate number of penalties. Think of it like this... every time there is an action, this value is checked... the higher it is the more penalties could get called.

Championship Cups
In the All Players and All Goalies statistics we've added "Cups". This is the number of Cups the player has won over their career.

Bug Fixes
- Fixed an issue where the hyperlink was appearing in the submit button in the Waivers confirmation page.

Hot Fixes
- Fixed an issue where a team could make a claim on a waiver despite not being higher in priority. Released April 19 2014.
- Fixed an issue where making a team defunct would delete previously used draft picks. Released April 21 2014.
- Fixed an issue where Goal, Assist and Point Streaks for Players were continuously being overwritten regardless of whether the record was broken. Released April 23 2014.



UHS Build 6174 - April 16 2014
This is another small release to return another piece of functionality that did not get converted to UHS Dark. I'm hoping this is the last piece of unforgotten functionality as my focus for the next little while will be on the public website template.

Set Draft List
GMs will now be able to set their draft list by going to League > Entry Draft > Set Draft List. This tool is designed to allow you to set your list in case you are unable to attend a live draft. Your COM will have access to this list and can use it to draft in your absence.

Bug Fixes
- None

Hot Fixes
- Fixed an issue that sometimes prevented players from being inserted or removed from Free Agency during the PlayOff->OffSeason change. Released April 7 2014.
- Fixed an issue where selected values were not being displayed in the Game Settings section. Released April 10 2014.
- Fixed an issue in the COM Roster Validation screen that prevented the Buy Makeweights button from appearing if the team had lots of forwards (LW, RW) but not enough C (as an example). Released April 14 2014.
- Fixed an issue where a coach being fired would have their MinOffer reset to $0.1 instead of salary x contract x 75%. Released April 15 2014.
- Fixed a reference from "player" to "coach" when a coach declines a free agency offer. Released April 15 2014.
- Fixed an issue where an extra period is printed when a player refuses to sign or holds out for free agency. Released April 16 2014.



UHS Build 6158 - April 5 2014
I was planning on sitting on this build until the end of April, however, it was brought to my attention that the All-Star team functionality was missing. In the process of converting to UHS Dark I guess I missed the All-Star Game assignment and game setup functionality. As a league has an All-Star Game scheduled this weekend, I've opted to use the old functionality / code and update it for UHS Dark. The last piece of missing functionality (that I'm aware of) are the public league websites. Leagues do not have any control over them at all and in fact they may be broken for your league anyway.

We've also opened up the Scoring Chance percentage to allow leagues to tweak their own scoring chance. I didn't really want to do this as I felt this was an integral part of the sim engine that *shouldn't* be touched. My main concern is that the percentage will get adjusted to maintain certain levels of scoring despite having overly strong scorers or goaltenders. Rerates will not consider the Scoring Chance at all, so if the value is adjusted high, scoring will go up and skaters will tend to rerate up while goalies will tend to rerate down.

All-Star Games
Looks like we completely missed re-working the All-Star Game tools when we were making UHS Dark. I've adapted the old method of assigning players and simming All-Star games and added it into the program.

League > All-Star Game > All-Star Rosters - This will let you manage player assignments for All-Star Teams.
Manage > Teams > Roster - You will need to use this to set your All-Star team method. Please note you cannot set Lines at this time... these are automatically set using 4Line and based on the Roster position a player has once the game is being simmed.
League > All-Star Game - When you select your teams, the program will check to ensure you have a proper roster set. If Checks pass, you can then sim the game. Simming is immediate.

All-Star Game results can be found in League > Stats Central. Select Schedule and then select All-Star for a list of All-Star Game results.

Automatic Farm Moves
COMs have a new setting allowing them to toggle whether eligible players are automatically moved to the farm team during the Pre-Season to Regular Season transition. By default this is enabled, however, some leagues (those that don't use the farm system) will need to disable this (in the Settings > General section) as this would result in rosters being in error and just generally cause a lot more work than is needed.

Automatic Protection for Veteran Leagues
Leagues that are over 1 year old will automatically be protected from deletion. We thank you for your loyalty and hope you will use UHS for years to come.

Player Rerates (Non-Statistical)
Players that do not meet the minimum requirement (currently 10 GP) for a Statistical Rerate will have a 10% chance on each skill to rerate down. This is not new. What we have done, however, is made a further check to see if the league has a real farm system implemented (basically all teams have farm teams and those teams play actual games). If the league DOES have a farm system the previously mentioned 10% chance to rerate down will apply. If the league does NOT have a farm system, the player will have a variable chance to rerate up or down, depending on the player's age.

For each year that a player is under the UFA Age (the age in which players can no longer become RFAs), they earn a bonus 7% chance to their base 10% chance to rerate up. There is a maximum 30% chance there will be no rerate and the remainder of the 100% will be to rerate down.

For example: A player is 22 years old. The UFA Age is 28 (by default).
Chance to Rerate Up: 10% + ((28 - 22) * 7%) = 52%
Chance for No Rerate: 30%
Chance to Rerate Down: 18%

Once a player hits the UFA Age, they will always use the 10% up - 30% none - 60% down rule until they have retired.

SavePoint Checking
There will be a new behind-the-scenes job that runs to check for SavePoints that have stalled more than 10 minutes (savepoints, even those that are rerating should not be going this long). The savepoint will be marked "UHS Investigating" and I'll received an email notification. If you still want to open a ticket or post in the forums, please feel free to, but just know that once I see this I'll go in and manually set it to Complete... you may (probably) will need to load an old save point and retry the one that failed.

Scoring Chances
When UHS went "Dark" we upped the scoring chance standard from 7% to 9% to account for an away team scoring bug being fixed. Since then I've noticed scoring has been a bit on the low side. In some cases there are really solid goalies but in most cases that just doesn't hold water. Even after making some adjustments for offensive zone puck possession to favour players with high SH skills, I don't feel we're back to where we left off with.

Scoring Chances are going to be bumped up to 10% by default for all leagues. The default for All-Star games is set to 25% automatically... there is no setting for this.

Additionally, COMs will now have the ability to change the Scoring Chance setting for their league. The accepted range is anywhere from 1% to 25%, again all leagues will default to 10% initially. You can find the setting in the Settings > Game Settings section.

Bug Fixes
- Fixed an issue where comment text was not wrapping properly when verifying a trade proposal.
- Fixed an issue where Show Skills leagues would not show skills but instead show scouting reports.
- Added a duplication check when adding a player to waivers.
- Fixed an issue where Available Coaches were not being shown in the Manage Coach section.
- Fixed an issue where the Team Activity section was not displaying trades.

Hot Fixes
- Fixed an issue where the incorrect player was receiving PIMs from fights. Released March 26 2014.



UHS Build 6117 - March 20 2014
This build comes a little earlier than I wanted as there were some bug fixes that were made to some scripts that had pending new developments. Typically I'm aiming for the end of each month to release a new build (if there is one) and some of the bug fixes needed to go in sooner than later.

Advance Season Change
When a league has not completed their Entry Draft they are prevented from advancing the league to the Pre-Season (this is defined as a Full-Stop). We are changing this from a Full-Stop to a Warning. A message will appear on the screen with the warning, however, the COM will still be shown the Advance Season button. This is being done as some leagues may handle their Draft outside of UHS.

Attendance Tweaks
We found that the last attendance change we made resulted in 100% sell-outs in the games we sampled. Decided to make a few changes to bring that number to just over 50% (actually worked out to be 60%). Base (starting) attendance is 50% of Arena Capacity. Win Pct Threshold was reduced from 0.500 to 0.400 to make it easier to attract fans to the game. Streak modification pct was changed from 1% base to 2.5% base. Modifications are always applied against the Arena Capacity and then added to the Base Attendance. Please see "The Attendance Topic" for more information. Released as a hotfix on March 7 2014.

Edit Player Drop-Down Option
COMs will now have an "Edit Player" option appear in the drop-downs for players. Selecting this will take the user directly to the Edit Player screen. There was a little bit of overhead that needed to be added to get this done, however, I'm not seeing excessive load times currently, so hopefully we'll be fine as we go down the road.

Manage Players - Current Free Agents
You can now view a list of all players listed in free agency in your league. The list of free agents will be a blend of the player information you will see in the regular Manage Player list and the GM Free Agency list.

Roster / Line buttons
COMs will now see Roster and Lines buttons in the Teams list section.

Bug Fixes
- Fixed an issue where creating a player would result in an error.
- Fixed an issue where CTRL-Clicking on a team in the COM's team list would not open that team in the new tab, instead the team is loaded in the current tab while the new tab shows the team list.
- Fixed an issue where Resetting your league would not import new table structure changes made from previous builds.

Hot Fixes
- Fixed an issue where Skaters and Goalies were appearing in both the Skaters List and Goalies List for Available Prospects when the league was conducting an Inaugural Draft. Released March 7 2014.



UHS Build 6092 - March 4 2014
So one of the biggest problems we've faced... for a very long time... is that as leagues age, the size of their databases grow. Our first / original league: the TJHL, was at around 2.5 GB. Now when you think of SavePoints... each SavePoint is a snapshot... so you have each one running around 2.5GB (or less for older ones)... and consider that we have quite a few savepoints... that's a LOT of storage space. Since we are now updating SavePoints as part of our release process, it also makes the load / save time a lot longer.

So we're using gzdeflate and gzinflate to compress the PlayByPlay data found in the Game Details (regular and live) tables... When we consider the table went from 1.1GB to 233MB with a very minimal increase in load time, I'd say we're looking pretty good. It was a necessary evil to do the conversion during prime time but for a release like this I absolutely needed all of my faculties.

As we're still in the process of backing up the existing savepoints as this blog post is being written, I've decided to temporarily disable SavePoints so that we can bring UHS back online for everyone to use again. Once the backups have been completed, I'll kick off the compression script and start converting the savepoints over night. Hopefully when I wake up tomorrow morning there won't be any errors and we'll be good to go. I'm pretty sure the entire compression process is going to take around 8 hours or so.

Once SavePoints are available I'll send out an email letting everyone know.

Thank you all for your patience.



UHS Build 6085 - March 2 2014
Here's our first build since releasing UHS Dark. We had a ton of hotfixes go out pretty quickly.... Thanks to everyone that reported the issues... it really did help us out. On top of the hotfixes we also put out a bunch of changes which you'll see below. I'm also starting to plan out a few other developments that I think would be helpful / beneficial for everyone but they're a little more complex and need to be done right.

Account Preferences
Access to accounts has been moved for GMs. We've returned it back to the login-info panel up at the top-right of the page. Whether you are a COM or GM you can access your own account preferences by clicking on your user name.

Attendance
The attendance logic was updated again (it had changed with the release of UHS Dark) so that total wins and losses no longer factor into the attendance formula. Team streaks will now factor differently into how the attendance is modified: +2% / game for a winning streak, +1% / game for an unbeaten or tie streak, -1% / game for a winless streak and -2% / game for a losing streak. Teams must have played at least 10 games in the current season in order for the winning percentage to be considered. If this is not true, we look at the previous season's winning percentage. If that's not true, we default to 0.500.

The goal for the attendance changes was to reduce the number of sell-outs. For the good teams they should be happening... for the not-so-good teams they should be a rarity. I'm sure I'll need to tweak the formula again.

Also, I'm thinking of lowering the game threshold from 10 games to 5 games as there might be some leagues that want to play fairly short / quick seasons... if that's the case their records would never impact the attendance generator.

AutoGM Augmentation - Moving Players to Farm
We've added additional logic for the AutoGM to move players down to the farm team (or farm level for those leagues with no farm system). There is already logic to move players to the pro team if they're needed to fix a game roster issue. A player will be moved to the farm if the following condition-tree has been met:

- Player is not on the pro game roster. Must also meet following criteria:
- Moving the player will not put the team under the Salary Cap Minimum. Must also meet following criteria:
- The player is a "Farm" player (they've already passed through waivers once before). Player Moves to Farm.
- The team has already lost enough players to waivers to allow players to be moved without going through waivers. Player Moves to Farm.
- The player is a "Pro" player AND meet the following criteria:
- The player's age is higher than the average pro game roster age. If this is true the following criteria must also be met.
- The player's skill is lower than the average pro game roster skill. Player Moves to Farm.
- The player's age is lower than the Max Age Protected age. Player Moves to Farm.

COM Team Management
- The list of teams has an additional sort of Club.
- Fixed an issue where the salaries being shown for teams were not using the proper Farm and Junior salary percentages, so were reporting incorrect team salaries.

Distribution Draft When attempting to move players to free agency from a team that is going defunct, if that team had no players no message was being shown. Added a success (green) message indicating the team does not have any players to move.

Draft Title
When viewing the Draft page, the header will now show you whether the Draft is complete or the current round.

Free Agency Minimum Offers
Players that have been in free agency for at least one year without playing a game will have their minimum offer values reduced by 25%. This is to help bring back in players that were signed to an overly high price, hit free agency and require a minimum value that is out of the ball-park. This should bring those players back in with more reasonable minimum offer values after 4-5 seasons... in which one would hope they aren't too rusty.

Help Accounts
You may notice that eventually you will see a uhshelpgm or a uhshelpcom account appear in your league's account list and/or UHS Messenger List... these are used exclusively by me to go in and investigate issues you are reporting with your league. Please do not send any messages to the account via the Messenger as I will likely not receive them. You are free to delete those accounts if you want, however, I'd ask that you refrain from doing so, especially if I'm in the middle of investigating an issue for your league.

Live Games - Out of Town Scores
The Out of Town scores are now clickable. If you want to switch to watch that live game instead, just click on whichever live game interests you.

Report - Team Salaries
Commissioners will now be able to view a list of all pro teams and show their salaries. This information is already available in the Team Management page, however, I thought it might be useful to allow COMs to only see pro teams and not have to deal with the rest of them.

Report - Three Stars
Commissioners will now be able to see a summary of the three-stars for any given Season - SeasonType - Level combination. Points are awarded to players for the type of star they earn: First Star: 5pts, Second Star: 3pts, Third Star: 1pt. If folks remember the Molson Cup Three Star award way back in the day (not sure they do this anymore), its set up to mimic this. You may notice that goalies will tend to be at the top of the list... at least for the time being goalies are weighted a little bit heavily vs. skaters. It may be something I revisit in the future.

Rookie Denotation
Rookies are now denoted in the statistic pages of All Players and All Goalies.

Roster / Line Status Clickable
On your team page, you'll find the status of your pro and farm team's roster and lines. Regardless of whether they are correct or not, you will be able to click the icon for each one to take you to that particular section. You won't need to use the drop-down if you don't want to.

Sim Engine Logic Updated
I've updated the sim engine logic to consider player skills when passing the puck. Basically it works like this: if the puck is going to end up in the offensive zone, the passing player will consider players that have a better shooting skill as we'd want to get the puck to someone that can score; otherwise the player will consider players with better passing skills so that the puck can be moved up easier. This puts a slight de-emphasis on the Skating skill, however, it is still going to be important... as the player will be relying on either their Passing or Skating skill to move the puck up the ice.

I wanted to put this in as I felt that the top goal-scorers in any given season were a little too random... I'd like to see the known goal scorers get their chances and be higher up on the goals list.

I also added a bit more debugging output information behind the scenes for attendance generation.

Teams with Same City Names
Games where both teams originate from the same city will instead use the team's club names in place of spots that only refer to the team's city. For instance, in the Three Stars list, typically only the city name is shown, however, in the case of both teams having the same city name, the list will instead show the club names.

Trade Comments
Trade details are now visible to all teams with the exception of the GM comments. If you are not one of the teams involved in the trade you will see text that says **hidden** for the comment area. In the old UHS, trades AND comments were visible to all teams, however, in UHS Dark I accidentally blocked the entire trade from being viewed unless you were involved. Commissioners and higher will also have access to the comments.

Hot Fixes
- Fixed an issue where three star selections were using players from other games being played on the same day. Released February 9 2014.
- Fixed an issue where leagues with at least 2-3 seasons played would timeout when navigating to the Manage > Players section. Released February 9 2014.
- Fixed an issue where leagues were only able to see Pro teams in the assignment drop-down in the Players section. Released February 10 2014.
- Fixed an issue where teams using 4-Line were causing the sim engine to crash. Released February 10 2014.
- Fixed an issue where the full salary of each team was being charged after a game was played instead of the Game Day Salary. Released February 10 2014.
- Fixed an issue where Farm Team Lines were being incorrectly reported as having errors. Released February 10 2014.
- Fixed an issue where the Game Day Salary function was returning warnings when run via cron job. Released February 10 2014.
- Fixed an issue where players were passing through waivers almost immediately. Released February 10 2014.
- Fixed an issue where making a claim via Waivers would show the sql query (legacy from testing). Released February 10 2014.
- Fix for three-stars that was applied on Feb.9 was reverted. Reapplied / released February 11 2014.
- Fixed an issue where opposing team player appeared to receive a successful pass. Only occurred in the play-by-play for passes that were using Check for the interception type. Released February 11 2014.
- Found issue where faceoff player is blank... added more code for 0 ID or blank player. Released February 11 2014.
- Fixed an issue where searching to fill a blank faceoff player would cause the sim engine to enter an infinite loop. Released February 12 2014.
- Fixed an issue where the incorrect conference & division was being used for the standings when the season changed. Released February 12 2014.
- Fixed an issue where League Standings were not being sorted properly... was using GF instead of GF-GA (difference of goals). Released February 12 2014.
- Updated the attendance logic to factor in gametype and visitor winning percentage. Attendance no longer considers total wins or losses. Team win/loss streaks now modify the attendance by a set percentage (2% / gp for winning, 1% / gp for unbeaten or tie streak, -1% / gp for winless, -2% / gp for losing). Home & Away winning percentages now add or remove attendance based on where they are to 0.500. Minimum of 10GP is required for current season stats to be considered, otherwise, we use previous season stats. If previous season stats are not 10GP or more we default to 0.500. Released February 12 2014.
- Fixed an issue where scouting own players was resulting in a warning behind-the-scenes. Released February 12 2014.
- Fixed a warning in the AutoGM logic where salary checking was reporting a divide-by-zero warning. Released February 13 2014.
- Fixed an issue where more than one player was being allowed to get injured on a team in a single game. Released February 13 2014.
- Fixed Face-off ghost player issue. Released February 13 2014.
- Fixed an issue where teams were not being charged for their waiver claims. Released February 14 2014.
- Fixed an issue where live games would not update if one of the teams did not get any penalties. Released February 14 2014.
- Fixed an issue where teams would see an error message if placing a player on waivers while they were still in the team's game lines. Released February 17 2014.
- Fixed an issue where playoff games would not be created once all series were ready. Released February 19 2014.
- Fixed an issue where the AutoGM could get stuck once drafting 19 players in the inaugural draft. Released on February 20 2014.
- Fixed an issue where PlayOff series stats were not being updated after a game. Released on February 21 2014.
- Fixed an issue where Injuries that lasted more than the current game were not being checked. Released February 21 2014.
- Fixed an issue where players were not being shown in the Available Prospects report for Inaugural Drafts. Released February 22 2014.
- Fixed an issue where players were not being suspended despite getting a game misconduct penalty. Released February 23 2014.
- Fixed an issue where trades were not being voided when assets were moved via another trade. Released February 26 2014.
- Added additional checking for ghost players on face-off recipients. Released February 26 2014.
- Added additional debug code to the sim engine to display goalie injuries. Released February 26 2014.
- Fixed an issue where the number of games for an injury was not being reset, so the previous number was being used as the base number. Released February 26 2014.
- Fixed an issue where the number of games a player is suspended was not being correctly set if there were multiple injuries in the game. Released February 26 2014.
- Fixed an issue where the Distribution Draft tool to move players from a defunct team to free agency was not working properly. Released February 27 2014.
- Fixed an issue where old structure information was being referenced when moving a team. Released February 27 2014.
- Fixed an issue where players being moved to free agency via the Distribution Draft tool would cause an error if their name had an apostrophe. Released February 27 2014.
- Fixed an issue where an accepted contract offer would not be recorded properly when sent by the AutoGM. Released February 27 2014.
- Fixed an issue where attempting to view the list of available coach free agents resulted in an error. Released March 1 2014.



BUILD 6000 - February 8 2014
This is the release of the fourth version of UHS... or better known as UHS Dark. v1 was a simple gathering of links. v2 was VERY similar to the UHS you're used to... white background, fairly simplistic display. v3 had a ton of CSS additions in order to streamline everything as well as my attempt to get into subscriptions. And now... here we are.

Why Build 6000? Not sure. It's probably a LOT more as every single piece of logic was reviewed and streamlined. I've learned a lot in my nearly 10 years of programming UHS and I'm sure I have a ton more to learn. I've made a crap-ton of mistakes and have learned from them (Demographics anyone??)... hopefully the number of mistakes in the future will be far less than the ones we've had in the past.

Why Dark? Well... I do most of programming on my computer in the basement. SOMETIMES I sit here in the dark with only the light from the window shining in... so while I can see... it's pretty dark in here. I came to realize the UHS v3 site was hard on the eyes when there was no room lighting... I also freely admit that being a World of Warcraft fanatic I've been using Wowhead.com a ton over the years... and it's dark-themed design influenced me greatly.

How Did This Start? It began with the attempting to upgrade all the php/mysql functions that were about to be deprecated. All those mysql_query functions had to be replaced and so as I went about it through the pages, I found myself optimizing the code. For instance I'd routinely make 2-3 calls to the DB for the various data when I really only needed to do it once. When I started optimizing I realized this would probably be a great time to go over everything with a fine-tooth comb and make sure the fundamental programming was solid.

I started with the re-design for the Forums. That was released pretty early on. Yes... I know the search functionality is gone... I do have plans to restore it (eventually).

With my own health issues, I knew I wanted to get a version of UHS where if anything happened I could step away and not have to worry. I used to have to manually create / approve new leagues, execute maintenance scripts, remove stagnant leagues and so on... I have an arrangement with a long-time UHS-supporter and UHS-developer Jon Lau that if anything were to happen to me (ie. my untimely death), he'd help maintain things. While my health issues have not gone away I finally do have answers (partly) to what's wrong with me. My diagnosis sucks but at least I know I'm not going to be dying any time soon.

So... I was thinking about listing the work that I did here like I would for a regular build release but to be honest this is a bottom-up rebuild of everything. Even the sim engine has had code optimization so it will run faster. I think it would be easier to go over the changes that have been made... some things were cut and other things added.

Banner - instead of a big honking "Ultimate Hockey Simulator", I thought it might be nice to see some random hockey images to changes things up a bit. Of course I've kept the UHS "cog" (which is really just a free clip art cog) because I feel that over UHS is a simulator that works. It's not flashy or fancy. It's what folks need and it's free.

Free UHS - So while the simulator is free, I've move around some of the banners and put up a few new ones. It's really the only way I'm going to even try and make a little something from this. As always, if you are interested in buying ad-space, please contact me directly... SERIOUS INQUIRIES ONLY.

Home Pages - You now have a Team home page where you can see the stuff that's been happening for your team. The old GM Home page was sort of split up into the League home page and Team home page. You'll find your recent activities, last games, roster status, injuries & suspensions and upcoming games on the Team page. On the League page you'll find the latest Activity in the league as well as notifications for your team.

League - Under the league drop-down you'll find Activity, Entry Draft (along with Prospects and the Picks you have), Free Agency, Rules and Stats Central.

Team - Under the team drop-down you'll find pretty much anything that relates directly to your team: Finances (as well as finance controls), Game Roster, Personnel, Scouting, and Trade Central. I'll also point out that the Personnel section has its own home page... you'll find a summary of your team by player type and be able to Manage your Coach, protect your players, retire jerseys and purchase Makeweights (if applicable).

Coach Rerates - previously only one attribute would have a chance to get rerated. Now all attributes will have a 25% chance to change which means coaches will evolve far more than they used to and be more of a factor in the game.

Coach Free Agency - Coach Free Agency is now going to mimic Player Free Agency. You make a bid and hope you're the highest bidder at the end of the bid period.

Coach Salaries - Due to a bug, coach salaries were never being applied to the salary cap despite the league setting being set that way. Coach salaries are now factored in to league salary cap and min if the COM has chosen to enable that setting. Regardless of the setting teams will now have to start paying their coaches.

More Salary Stuff - Speaking of a league salary cap... COM's can now set the league's salary minimum. This is the minimum amount of money you want a team in your league to be spending on salaries. Additionally, the COM can also set the minimum percentage of a new salary that a team needs to re-offer to a player. The default is 75% of their previous salary. Finally, a COM can set the maximum number of years left in the player's contract to allow a new contract offer. The default is 1 year.

Rookie Qualification - The logic to determine which player is a rookie is now following the NHL guildlines: 25 years old or younger and having played at least 25% of the pro team's regular season games this season.

Old Formatting - You'll probably find a few things here and there that may be using some of the old css schemes. That's okay... eventually we'll get 'er changed. This took over a year to complete and while I wanted to make sure things looked good, there were a few times I had to sacrifice making things look perfect over making sure things were still functional enough to be included with the launch.

Injuries - Only one player on your team can get injured in a game. Previously there was no limit so sometimes this would play havoc with the sim engine as there would not be enough players left to ice a team (rare - but it happened occasionally). The number of games a player is injured is now going to be completely random. The player's Injury attribute will only affect whether the player gets injured or not. Additionally, career-ending injuries will ignore the age of the player... previously only players that were 31 or older could sustain a career-ending injury.

New Players - Newly created players will have a minimum injury rating of 6 and a minimum injury rating of 4. This is being done as junior leagues were seeing a crap-ton of injuries and penalties. Makeweight players attributes will now range from 1 to 5 instead of 1 to 3. This is being done so Makeweights have more of an impact on the team instead of some guy that's probably going to be injured anyway.

Scoring - The base scoring percentage has been increased from 7% to 9%. This is due to us FINALLY finding and fixing the bug that gave away teams an unfair advantage. The bug would basically allow a player skating from center ice to suddenly appear deep in the home team's zone, resulting in far more shots on net. Because this bug was so hard to find, we put in an artificial modifier to give home teams a bonus 5% chance to shoot AND score. We've removed that bonus now. The only advantage a home team has is a bonus 5% chance to win face-offs. Since the bug has been fixed scoring went down, so we've bumped it up to 9%. We might go as high as 10% in a later build or put in a COM control.

Auto-GM - The Auto-GM logic has been touched up with some extra logic from Jon Lau. It's more robust now when dealing with trades coming in from human controlled teams as there were certain things you could do to go nab great players from the AutoGM (ala NHL94).

Stats - The Player & Goalie League Stats have been expanded to show more categories. Teams now have a League stats to show things like the Power Play and Penalty Killing, etc.

Did Not Make the Cut - There were a few things that did not make the cut for the re-design: The league setup wizard (by default leagues are set up with NHL anyway); Ad-Hoc games (the little puck icon) is gone; Manual Suspensions are also gone, COMs will now choose whether suspensions are handed out automatically or if there is a game penalty called on the play; WebTemplate control is not included in this release of the sim as we're going to do some re-work on the template and the controls as well.


Build History by Year: [2018] [2017] [2016] [2015] [2014] [2013] [2012] [2011] [2010] [2009] [2008] [2007] [2006]