TGC Retrospective : Server/API

When we were first starting to build The Golf Club’s server infrastructure we didn’t know what we would end up with and to what extent it would drive the games development. In the beginning there was the Course Creator, and one of the first requests we received was to share our creations on a server.
Soon after, we had gameplay prototyped and our first scorecards. With the courses already paving the way we said why not throw all the scorecards up. Shortly after each scorecard became a save game and every round on every course you ever started could be resumed. With a scorecard we had everything we needed to replay and resume a round of golf. That’s when we created the first ghost balls.
Ghosts opened up a possibility of asynchronous play, something that we had not considered. Once we had the system in, we started asking the hard questions. How many ghosts could we have in a round? How about a 100? Design unfortunately felt that 4 was a more appropriate number.
Asynchronous ghosts quickly became the perfect answer to a problem we hadn’t yet wrapped our heads around. You play your round on your schedule, and if your schedules align you can play with your friends. If they don’t align you can catch up on each other’s rounds later. If you need to go to the bathroom, you can, they can choose to wait or not. The benefits to the system far outweighed the clunky and way more expensive lobby style systems that had come before – yes there would be a slight delay but for the small percentage of users wanting live chat and play together with the amount of sacrifices we’d have to make to other areas of the game. Nobody wants to play in a live multi-player game of a game that has dodgy physics or a clunky designer that produces poor courses.
Despite how well it was received, ghost play received a tremendous amount of feedback that helped us refine it. Here’s a sample list of things people wanted improved:
1. Ghost Ball trails – Made it optional
2. Seeing ghosts scores – Made it reveal as you played
3. The fact that ghosts were auto added to my round – Made that optional
4. Taking shots at the same time you did – Staggered the shots
5. No turn based – Added turn based so you could see other players
6. Turn based is slow – Optimized significantly
7. Etc. etc.
The decision to save every shot instantly has, in the end, turned out to be a huge positive. We’ve got a very unique multiplayer system, that I’m seeing requested in other titles, and had very, very few server issues, compare this to some of the big titles over the last few years and the problems they’ve had with servers. For a small team like ours the more time we can spend on development and the less on server maintenance the better it is for the game.
The other thing with saving every shot is that we’ve only scratched the surface of stats we can display. As sports fans we’re stat obsessed, as I’m sure you are, so over time we want to show you more and more, about courses and your abilities. Showing ability growth and opening up more course management techniques.
Below is a list of other things we want to look at over time
• Add support for ties on leaderboards (as they are presented in real life)
• Add the ability to get the current place of a player for any/all leaderboard
• More stats!
• Better text search
• Different ways to find courses
• Incentives to play new courses
________________________________________
API
The pushing off point for the TGC API was a request from the folks at TGCTours. They wanted a way they could retrieve tour/tournament results without slogging through pages of leaderboards to verify each user’s reported score. We received a document from them outlining the specific features they wanted most and began work on a system.
Initial request for API:
• Ability to retrieve scores/stats for a tourney, using the name.
• Total/Net/Handicap Scores
• Hole by hole scores
• Platform
• Player Username
• Drive Stats (Longest/Average/Accuracy)
• Putting Stats (Longest/Total/PPH)
• Longest Hole Out
• Bunkers Hit
In the end we were able to supply most or all of what was initially requested, and we’ve since added some small features here and there, including support for speed golf timings. We also opened up the API to a few other groups who applied for access. We have since received some further feature requests, and hope to have the time to implement them soon.
Things we want to look at in the future for the API:
• Add the ability to post tours/tournaments
• Support for retrieving course meta information
• More statistics (Shot stats, distances, etc.)
Although the TGCTours guys were the first to request the API. It is now used by multiple fan sites including LeagueGaming and TeeToGreens. And is available to any serious fan site on request.
To finish off, here are some interesting stats we were able to pull about TGC since its inception:
Rounds Played | 6,022,723 (~6.7 rounds/minute since launch) |
Tours Played | 334,789 |
Score/Tour Cards Abandoned | 7,655,295 |
Courses Created | 100,158 (~6.7 courses/hour since launch) |
Courses Named “New Course” | 1864 |
Courses Containing "New Course" | 2940 |
Courses with whitespace names | 653 |
Tours/Tournaments Created | 36,007 |
Hole In Ones | 130,576 |
Shots in completed rounds | 391,834,778 |
Putts in completed rounds | 159,485,330 |
Average Over/under | +1.8491 |
Magnolia National, Georgia (Sunday) - Av. Over/Under | +7.0506 |
Bunkers Hit in completed rounds | 11,411,503 |
Drive Accuracy Percentage | 68.9 % ( PGA Tour avg is 65.6 % ) |
Drive Accuracy Percentage (excl. LBM & BB) | 67.5% |
Triple (or worse) Bogeys | 3,796,504 |
Most Rounds Completed | XB1: GrudgingSmile92 ( 4,592 rounds ) PS4: scruffy37 ( 3439 rounds ) PC: brianfuller75 ( 2991 rounds ) |
– Mitchell Keenan & Rami Alia