Log in to UHS


Build History 2008

UHS went live October 12 2005. Changes that were made from then to January 22 2006 were not documented. We also did not start using Build Numbers until August 3 2008. Besides the initial changes, you can read through pretty much all of the changes that UHS has undergone since it was created. It's been quite a ride.

[2020] [2019] [2018] [2017] [2016] [2015] [2014] [2013] [2012] [2011] [2010] [2009] [2008] [2007] [2006]

- Add mercy into the sim engine. If a team is winning by 5 or more goals, any shot they take on the opposing team will have the chance to score reduced by 25%.
- Added support for multiple leagues with same league acronym / name.

- Resolved the Division by Zero warnings that would appear when viewing goalie stats.
- Fixed bug in setting lines for 4-Line Type where saving powerplay or penalty killing lines would always result in a "double-shifting" error message.

- Fixed bug where a team's players would not get cleared from waivers due to a syntax error in a new variable being used. (released December 19 2008)
- Fixed a gap where if a free agent had never had a salary, the factor was automatically being set to 0. If the free agent has never had a salary, the offer will be based on a default of 0.1 salary instead. (released December 19 2008).
- Fixed a bug where the incorrect salaryfactor modifier was being applied to a free agent offer. As a result, the signing factor would always become 0. (released December 20 2008).
- Fixed bug where an error would show up when no one else is allowed to make a claim on a player in waivers (ie. the #1 team made the claim). (released December 21 2008).
- Fixed bug where the GoalieStats table was not being updated for LiveGame Mode. (released December 21 2008).

- Any new contract offers will have a new modifier applied to the signing factor: Salary Factor. When you make an offer the salary of your offer is divided by the last salary the player accepted and is then applied to the signing factor. This applies to: Coach contract renewals, Coach Free Agent contract offers, Player contract renewals, Player Free Agent contract offers.
- Commissioners can now set the number of players a team can lose to waivers before all other eligible players get marked as immune to waivers.
- Commissioners can now set the number of days a player must remain on waivers before clearing.
- Commissioners can now set the fee a team is charged if they successfully claim a player off waivers.
- Commissioners can now set the number of claims a team can make during a given season.
- Waiver priorities have undergone a change. The priority list is now based on the current regular season standings from worst to first. If there are no games played in the current regular season, the priority list will look at the previous season's standings.
- Priorities are also no longer set in stone for any given player. The priority will be based on the current standings (see above). It is possible for a team to jump around in the priority especially at the beginning of the season as teams jockey for position.
- Fixed bug where an activity log didn't get generated if the player being bought out did not have an entry in free agency.
- Fixed bug where a team was not being charged for a waiver selection.
- Fixed bug where a team was not shown any text when attempting to remove a waiver claim from a player.

- Fixed bug where GMs setting their penalty killing lines would see an error indicating double-shifting even though double-shifting was not happening. (December 12 2008)

- Added code to ensure GMs can no longer place players on the same line or double-shift them in the same line type.
- All GM Draft Pick wish lists will now be erased when your league changes from Off-Season to Pre-Season.
- UHS will no longer output old game stats to league output directories. Game Stats must be accessed through UHS or scripts available through the webTemplate.
- Coaches shown in Free Agency will now have a link to their profile page.
- Teams will now be charged the remainder of a coach's contract when he is fired.
- Fixed bug where Remove Offer button was showing for any coach that had an offer.
- New option: Early Retirement for players. Commissioners will be able to set the number of seasons a player must be inactive for in order to force an early retirement. This means that if a player did not play in any game in X number of seasons (regardless of whether it is pro, farm or junior) they will be forced to retire.
- By default, early retirement is set to 99 seasons... meaning a player will very likely be retired any ways due to old age. It is stressed that if this is set to 0 seasons, any player not playing in the previous season would get retired regardless of their age. It is recommended this setting not be set to anything lower than 3 seasons. Additionally, this will mean that any player that didn't get selected during the inaugural draft (or get picked up by a team during free agency) will be retired at the end of the season.
- COMs can now create up to 5 SavePoints, increased from 3.

- Fixed bug where away team streak was not being loaded for purposes of attendance generation. (released December 5 2008)
- Fixed bug where target ticket price was based on league average salary instead of total player salaries. (released December 5 2008)
- Fixed bug where RFAs were not being updated in the FreeAgency tables even though they were being updated in the Players table (released December 12 2008).

- Organized the Commissioner's League Settings section by grouping related settings onto separate pages.
- Added additional debug code to assist with error resolution.
- Fixed a logic gap that allowed a signed RFA to be reinserted into Free Agency as a UFA.
- Fixed a bug that prevented the team's medical facilities and staff from being loaded before a game was played.
- Fixed a bug where revenue and salaries were not being saved for the home team.
- Cleaned up more obsolete fields in data tables.

- Finally fixed the bug that prevented a GM from using the UHS GM interface for drafting. Many thanks to Jon and Trevor for helping me out with testing.

- added code to track memory usage in an effort to reduce resource use and improve sim performance.
- made several changes to how the simulator loads data and have attempted to reduce the number of system calls.
- the simulator has increased in memory use from ~4 MB to ~8MB, however, the runtime has been dramatically decreased. In testing, the engine ran through each game at round 3.5 to 4 seconds as opposed to the 15-20 seconds it was taking due to modularization.
- fixed bug where an extra attacker wasn't getting the extra ice time added to his game ice time.
- increased the random modifier applied to players on any given play from 3 to 4.
- fixed bug where an away line might not be checked after the fatigue module is run.
- fixed bug where team name did not print when a player changed streaks (Hot, Cold, no streak).
- fixed bug where lines were not shifting immediately following a penalty call.
- enhanced unique jersey search to only look at players under contract if the team is in pre-season, regular season or playoffs.
- fixed a bug where two checks were being made to determine if a penalty was called. Both checks would have to pass the Referee Tolerance setting in order for a penalty to be called. As a result the number of penalties being called now will likely increase.
- fixed a bug where a penalty call didn't always force a face-off but allowed play to continue on.
- fixed bug where a period's starting lineup would be 5 players regardless if the even-strength called for 4 on 4 or 3 on 3.
- fixed bug where players with a game penalty would be placed in the box and serve 10 minutes before returning to ice.
- fixed an infinite loop bug in the face-off code.
- when your league is in the off-season you may see players on your team with either duplicate jersey numbers or a jersey number = 0. Checks for this have been disabled during the off-season. Jersey numbers at this point do not matter.

- fixed parse error in when going to Game Roster tool (released Sat.Oct.25).
- fixed user creation bug (released Tue.Oct.28).
- fixed COM trade bug. Show incorrect team short on a draft pick when COM is asked to confirm trade. (released Sat.Nov.15).

- Added check to ensure all pro team ticket prices are greater than $0. All existing pro team ticket prices will be changed to $1 if they were previously set to $0.
- Fixed bug where result message was not displayed when changing a ticket price.
- Goalies will now be holding the puck for face-offs more frequently.
- Corrected bug where database changes were not being applied to old save points. This will ensure COMs can continue with running their league after they have loaded an old save point. The actual settings will be restored to default. It is strongly recommended that COMs go into League Settings and re-adjust where necessary after loading an old SavePoint.
- Remainder of modules created to bring sim engine down to 1960 lines.
- Fixed a gap in the Blocked Shot logic where it was possible that Player #500 could have been incorrectly suspended if a player was injured by a blocked shot.
- Added a tool to allow COMs to manually set the number of games a player is suspended for when injuring a player. When set to auto, player will be suspended for equal number of games opposing player is injured for. When set to manual, player can continue to play until COM provides suspension lengths.
- Merged player streak (hot/cold) table with master player table to help reduce sql queries.
- Optimized player streak logic and made a minor tweak to goalie streaks (minutes played must be >= 40).

- Corrected the Copyright year not being displayed in the WebTemplate.
- Corrected the undefined text_number function in web_MainHome in the WebTemplate.
- Corrected a bug that selected injured or suspended players when attempting to auto-set the farm roster. This prevented the roster from being properly set and prevented the COM from simming games.
- Corrected a bug where the SalMin and ConMin values were not being loaded when creating a player.
- Added a new modifier to passes made by a goalie. Many passes from goalies were being picked off, resulting in many unassisted goals. The new modifier should greatly increase the chance of a successful pass by the goalie and indirectly giving the goalie a better chance at getting an assist. This is meant as s short-term fix to the overall issue.
- Added new play-by-play lines for when a player fails either their passing skill (and is checked) or their skating skill.
- Started preliminary work on the new manual suspension enhancement.
- Shot Modifier logic change: instead of hard-coding the modifier (+1 for in close, 0 for top of zone, -3 for near neutral zone, -7 for far neutral zone, etc), logic now based on mathematical formula: +3 for in close, 0 for top of zone, -3 for near neutral zone, -6 for far neutral zone, -9 for top of defensive zone, -12 for near net of defensive zone). This will increase the chance of a goal being scored in close and decrease the likelihood of goals being scored from farther away.
- Corrected a bug where a 5-minute major penalty for slashing was not being handled with the correct variable.
- Removed 14,763 lines of code into new modules for future stream-lining. Core sim engine script is now down to 6332 lines of code. Most of the remaining sections will be moved into their own modules at a later date.
- Removed several instances of obsolete Live-Mode code from the sim engine and sim modules.
- Added new performance monitoring code in the sim engine.
- Added tool to allow me to view record sim performance statistics.

- Fixed bug with goalie re-rates where the incorrect Age modifier was being applied to the last season's stats.
- Changed session time-out from 24 minutes to 60 minutes. I found that sometimes sessions would time-out after I had been idle for a bit too long, perhaps reading a play-by-play for a game.
- minor cosmetic change to COM Trade Central.
- Commissioners now have the ability to make trades between two pro teams. Trades do not require GM approval and go into effect immediately.

- All-Star teams will now use 4-Lines instead of 3-Lines when having lines auto-generated.
- Face-Off change. When a player wins the face-off he will make a check against his PC skill. If the check fails, the puck ends up with a random forward. If the check passes, the puck is dropped back to one of the two defensemen.
- Fixed bug where an all-star team was not being set due to custom lines not being set.
- Added code to prevent a GM from offering a contract they have placed on waivers.
- Added a Position Modifier toggle to the Commissioner's league settings tools. This will allow the COM to set whether the -2 position modifier is applied to players placed in any spot that is not their natural position.
- Added 7 new play-by-play messages to penalty calls.
- Removed 1407 lines of code from the sim engine by moving the Passing and Skating code into their own modules.
- Minor bug fixes.

- Split pending proposals in the Trade Centre into incoming and outgoing.
- Added option to select no scouting investment for leagues that hide skills.
- Leagues can no longer create scouting investment types with a cost of $0. Any existing scouting investment types with a cost of $0 have been changed to $0.000001 = $1 as the type is held in millions.
- Any teams that had selected $0 as their investment type must log in and change their selection, otherwise they will not receive any scouting reports when the new season begins.
- COMs now have the ability to toggle chemistry modifiers in the sim engine. By default all leagues have Chemistry enabled.
- Added ability for GM to set their timezone offset. With a rough glance, I don't see where this would be applied, however, this will be useful for future developments.
- When changing a season from PlayOff to OffSeason, text will now show to indicate progress with retirements and player re-rates. The process can be fairly lengthy. We strongly recommend creating a SavePoint before running the process in case the process is interrupted (for any reason). You should never close your browser while this process is running.
- The PlayOff to OffSeason change has been tested with Internet Explorer 7 and Firefox 3. Both work as expected with no time-outs. The only difference between the two browsers is Firefox will write the results to the page as they are being processed. IE7 will just have a black screen with the "UHS is Working" message until the entire update process has been completed.
- Face-Off logic has been moved into it's own module.
- Face-Off logic has been changed to use the 50-50 + mods logic as proposed by the TJHL. Home player starts with 51% chance to win face-off. Home & Away players total their PC, Position Mod, Chemistry Mod, Coach Fundamentals Mod, and Fatigue Mod. The difference between the two totals is then doubled and applied to the 51% base chance. A percentile roll (1-100) is then made against the updated base chance. If the roll is equal to or lower, the home player wins the face-off, otherwise the away player wins the face-off.
- Added face-off logic to determine if the face-off winner can keep control of the puck (check vs. PC skill). If the face-off winner loses control, a random skater from his team will take possession of the puck.
- Updated face-off logic debugging code to represent the new face-off logic.
- Goalie Management code has been moved out of the sim engine into it's own module.
- All-Star Goalie swtiching logic has been moved out of the sim engine into it's own module.
- Period Start Line Selection logic has been moved out of the sim engine into it's own module.
- Chemistry logic has been moved out of the sim engine into it's own module.
- On-Ice Fatigue modifier logic has been moved out of the sim engine into it's own module.
- Reduce sim engine by 2245 lines by creating modules.
- Removed a performance message in the Commissioner's live game update tool. This message was meant for me to determine how long it would actually take to update applicable live games. On the average it takes between 3-4 seconds to update a single live game into the database.
- Added a tool to allow a GM to swap their custom lines in either 3-line or 4-line mode.
- Various bug fixes

- When setting the values for the new fields, please be aware that contract fields cannot hold a decimal value (for example: 0.5).
- When players are drafted they are still signed to $0.45 / 4.
- Not adding the coach salary / contract min / max at this time.

[LEAGUEDATA TABLE UPDATE] - Added new fields.

- Added new fields to create league script.

- Loaded new league variables upon login

- Added new league variables in user's session

- Added new league variables to Commissioner's League Settings tool.

- Will use the minimum salary and contract values when creating regular player and makeweights. Junior players still created as 0 sal - 0 con.

- When changing from playoff to off-season, added code to ensure the min bid value of a player in free agency is set to SalMin * ConMin or greater.

- When editing a player, added code to ensure the salary and contract fields will not go beyond the min/max thresholds. Did not add checks for LastSalary or LastContract.

- Individual makeweight creation code modified to use the minimum salary and minimum contract length.

- Changed code to ensure minimum salary / contract values are represented if the MinValue is below the minimum threshold.
- Changed code to ensure maximum salary / contract values are represented if the MinValue is above the maximum threshold.
- Offer form changed to ensure contract length drop-down goes between minimum and maximum contract lengths.
- Offer processing now incorporates new SalMin and SalMax values instead of 0.1 and 10.
- Error messaging updated to show SalMin and SalMax values if an offer is out of bounds.

- When making a contract offer, changed hard-coded 0.1 and 10 to SalMin and SalMax.
- Contract offer form changed to ensure contract length drop-down goes between minimum and maximum contract lengths.
- When declining contract offer, changed free agent insert to use SalMin * ConMin instead of 0.1
- When refusing to negotiate, changed free agent insert to use SalMin * ConMin instead of 0.1
- When holding out for free agency, changed free agent insert to use SalMin * ConMin instead of 0.1
- Error messaging updated to show SalMin and SalMax values if an offer is out of bounds.

- When finding abandoned players, will use SalMin * ConMin when inserting them into free agency.

- INCREASE SEASON: when season changes, players were still being set to Pro or Farm type based on hard-coded 22 yoa and not the variable Commissioners have access to presently.
- INCREASE SEASON: when season changed from PreSeason to Regular season, players were being moved to farm team automatically based on hard-coded 22 yoa and not the variable Commissioners have access to presently.
- CONTRACT OFFER: when accepting a contract was not referencing the UFA Age variable Commissioners can now set.
- CONTRACT OFFER: when declining a contract, was using old hard-coded UFA Age instead of User-Defined variable.
- CONTRACT OFFER: when refusing to negotiate, was using old hard-coded UFA Age instead of User-Defined variable.
- CONTRACT OFFER: when holding out for free agency, was using old hard-coded UFA Age instead of User-Defined variable.

Fixed bug relating to integration of CreatePlayer function into Makeweight Drafter function.

- fixed bug where the player type wasn't being set if the team was a farm club.

- fixed bug where salary /contract wasn't being set.
- fixed bug where player wasn't getting appropriate level set if they were created for a farm team.

This development integrates the new CreatePlayer function in all mass player creation scripts. This includes Makeweight creation, Add Player (quick-name or multi), and when creating Junior teams. The function is not used when a COM creates a custom player using the Create-a-Player tool.

- Changed player creation script to use CreatePlayer function.

- Changed junior team addition script to handle changes to CreatePlayer function when Add Players is set to Yes.

- Changed multi-player creation to use CreatePlayer function.
- Changed single-player & quick-name creation to use CreatePlayer function.

- Added ability to handle custom player creations.

- When creating a custom player either with or without defined skills, the CreatePlayer function will not be used.

Makeweight Creation tool does not use standard create player function. Did not add the new TotalRerate value in when creating a makeweight. Fixed.

- Database changes
- Admin tool changes
- Load the new Game Result Point values when the game starts.
- Added new variable values for Team Standings Point Calculations when a game has been completed. Please note, The "PCT" column will now be based on the Regulation Win Point Value.

- Load the new Game Result Point values when tool has begun.
- Added new variable values for Team Standings Point Calculations. Please note, the "PCT" column will now be based on the Regulation Win Point Value.

- Added new variables to the Commissioner's tools in League Settings.

- Added new variables to load into a user's session.

- When a user logs in, the new variables will be loaded into the current session memory.

[SIM ENGINE - Salary Cap checker module]
- Changed salary calculations to use Percentage variables instead of hard-coded values for farm and junior salary rates.

- Updated gameday salary calculations to use Percentage variable values instead of hard-coded percentage values.

- When user logs in, new salary percentage variable values are loaded into session memory.

- Added two fields to allow COM to manage the salary percentages a team must pay if a given player is either on the farm team or is a junior prospect.

[CreatePlayer function]
- Updated CreatePlayer function to consider new TotalRerate column when inserting new player records.

[Player Rerate function - COM Increase Season tool]
- update rerate code to calculate TotalRerate as New Total Skill minus Old Total Skill. Stored in column as an INT.

[Player Stat Viewier]
- updated player stat / skill viewer to either show Increase, Decrease, or No Change when ShowSkills = 0 or show the value of the TotalRerate if ShowSkills = 1.

- added ability for COM to set new password or set a random password.

New Password will be emailed to the user's email address on record.

create the option to install / update or remove a standard public web template to a league's hockeysim.ca subdomain. This will only work if a league uses a hockeysim.ca subdomain.

files are installed into subdomain and may be edited by league owners / web masters to display custom content.

care must be taken! if your league customizes the templates in any way and then selects the update option, the original file will be completely over-written and your custom content will be lost. It is recommended to back-up any custom scripts prior to updating.

changes made:
- index.php
- web_Archives.php
- web_Awards.php
- web_CareerLeaders.php
- web_Championship.php
- web_DisabledPlayers.php
- web_EntryDraft.php
- web_FreeAgentCoach.php
- web_FreeAgentPlayer.php
- web_HallofFame.php
- web_JuniorProspects.php
- web_MainHome.php
- web_PlayersByTeam.php
- web_PlayerStats.php
- web_RecordBook.php
- web_RetiredPlayers.php
- web_Schedule.php
- web_Standings.php
- web_TeamPage.php
- web_WaiverWire.php

[NEW TABLE: WebTemplate] added

- allows COM to install / update or remove template files into their subdomain
- allows COM to specify font and colour settings for their template.

- Added new tables to current UHS leagues.
- Added default webtemplate settings to current UHS leagues.

[CREATE LEAGUE] - added SkillClass table to league creation script.
[INCREASE SEASON] - changed marquee script to incorporate skill classes
[PERSONNEL] - changed marquee script to incorporate skill classes. If a player has a skillclass > 0 they will be marked with a gold star.
[VIEW PLAYER STATS] - removed marquee field and replaced with Skill Class field. Will show the text description of the highest class they qualify for.
- allows a COM to add or delete skill classes
- bonus attendance will be applied to each player on the team that qualifies for the class.
- added link to tool as Sub-Menu item for League Settings.
- runs each time the COM navigates a page.
- also used in increment season
- run when the COM adds or deletes a class.
- updated attendance generator to include skill class bonuses.
- removed the marquee player/goalie skill variables.
- removed marquee from stored session variables
- removed marquee session variables from loading when user logs in.

- Fixed bug where an injured player's energy was not being adjusted - still using old fatigue variable.
- Fixed bug where a player's energy was not being adjusted if he was checked - still using old fatigue variable.

- Fixed bug where incorrect form was being used when changing team ticket price.

- Corrected bug where incorrect Energy variable was being used for away team.

- Fixed bug for fatigue management where simulator was looking at a non-existent variable (LineChangeTimerVis). Because this wasn't set occasionally it can pick up a random value, affecting away team line changes.
- Fixed 4 divide by zero warnings.

- corrected a bug in the Team's Farm Affiliate list where the first farm team is shown and appears to be selected when the team doesn't have a farm team selected at all.

- Added new option to League Settings to allow a COM to set the remaining contract value percentage a team must pay if they are buying out a player.

- Fixed bug in Fatigue Management module where the incorrect dump type variable was being used.
- Fixed a bug in the debugging scripts to show the new energy variable.

- SIM ENGINE - Added the Fatigue modifier to face-offs, skating, passing, shooting checks. if energy down to 0 - 25%, -1 modifier applied. if energy below 0%, -2 modifier applied.

- New fatigue management module is online. Optimization resulted in a total of 2886 lines of code being removed from the engine.
- fatigue management no longer supports teams without custom lines.
- Fixed a bug in fatigue management that didn't allow an away team to change their players ever.

- Created a module to load a team's custom lines (if they are set).
- If a team does not have custom lines set, temporary lines are created using the 3Line format. The 3Line format is based on the position of a player in the game roster.

- Created module for loading team's game roster information into the playeridhome[] arrays.
- Further optimization has resulted in a reduction of 210 lines of code.

***Everything from August 3 2008 and earlier did not rely on the Build numbers we do now. The versioning refers to the actual date the code was released. Prior this date fixes and releases were done on an adhoc basis compared to how we group bug fixes and enhancements for release now. All material prior to this date can be considered builds 0 to 185. ***

VERSION: 2008.08.03
- Added initialization of the EnergyHome[] and EnergyVis[] variables. Not used anywhere else in script until fatigue management module completed.
- Fixed gap in code where a win/loss/tie was being assigned to the goalie with the most minutes played, not the actual goalie that was in net.

VERSION: 2008.07.29
- Fixed bug in goal and penalty time recording where the time may be off by a 1 second.
- This caused issues in the play-by-play for live games.

VERSION: 2008.07.14
- Fixed bug that didn't reset coaches for junior games in auto-play mode. Pro coaches were getting stats for junior game results.
- Fixed divide by zero warnings on lines 25834, 26014, 26109.

VERSION: 2008.07.08
- Replaced Penalty code with new module.

VERSION: 2008.07.01
- Added the set_time_limit function to allow the script to run up to 60 seconds instead of 30 seconds. This allows auto-play mode to support more than 10 games.

VERSION: 2008.06.18
- Added Auto-play mode: passes mode = autoplay and gd

VERSION: 2008.05.28
- Fixed division by zero bug on line 31979.

VERSION: 2008.04.14
- Added the command 'addslashes' to Last Names for when a record is written to the GameDetailsPlayerStats table.
- Players with apostraphes in their last name caused the record insert to fail.

VERSION: 2008.03.03
- Added new module to check a team's salary and apply a fine if the team is over.

VERSION: 2008.02.19
- Changed the ratios that penalty types were called.
- Added variables to pass the penalty types instead of hardcoding the values into the penalty code

VERSION: 2008.02.15
- Fixed bug that didn't display the penalty call if a home player received a double minor penalty.
- Fixed play by play bug where goalies were getting checked.

VERSION: 2008.02.02
- Fixed bug in play-by-play that was sometimes not recording the player name if the away team won the face-off.
- Added logic to have different text if the goalie is an empty net.

VERSION: 2008.02.01
- Fixed grammatical error in play-by-play.

VERSION: 2008.01.29
- Fixed bug in play-by-play where the penalty call was not being recorded.

VERSION: 2008.01.26
- LiveMode is now active for all leagues.
- Added a date check to ensure the inputted datetime is valid.

VERSION: 2008.01.17
- Added LiveMode code to the simulator. When in live mode the simulator will not record / update:
- Game Results, Team Standings, Financials, Coach Stats, Player Stats, Goalie Stats, PlayOff Data
- Schedule is marked to Pending
- Game Details are saved to Live Game Details

VERSION: 2008.01.16
- Added code at end of simulator to automatically unlock a league once the game has been completed.

VERSION: 2008.01.13
- Added code at the end of an all-star game to give an award to all all-star players in the league if they haven't already received an award.

VERSION: 2008.01.12
- Added command addslashes to team club names when being saved to GameDetails tables. Some teams with apostraphes in their Club name were causing data inserts to fail.
- Fixed display issue for goalie DKG Allowed. Visiting goalies were always showing the Home goalie's DKG stat.
- Fixed bug that would show backup goalie in play by play getting penalty if the starting goalie received the penalty.
- Added new penalty shot rules to directly compare shooter against goalie instead of using the scoring percentage.

[2020] [2019] [2018] [2017] [2016] [2015] [2014] [2013] [2012] [2011] [2010] [2009] [2008] [2007] [2006]

Copyright 2024 HockeySim.ca. All Rights Reserved.
UHS, Ultimate Hockey Simulator and HockeySim.ca are trademarks of HockeySim.ca. Terms of Use.
NHL player and movement data courtesy of CapFriendly.com.