It’s all data available when browsing gran-turismo.com’s GT Sport Community Features.
The site is built as a web app, so instead of loading a complete web page from the server,
everything is rendered client side (in your browser) with the only requests/reponses to the server being for raw data. When you first load the community section you also download all the metadata, localisation info and logic that presents the data as the UI.
I was curious to see if there was anything interesting in the metadata and noticed an entry for
KYOTO DRIVING PARK - SQUARE. Here’s where it’s actually displayed to users:
From there I explored the main Javascript bundle to see how/where the metadata was processed and found some UI helpers that collate it + image URLs (bundled with the JS) which are then passed onto the renderer to be displayed somewhere—in this case, the replay thumbnails.
Here’s an example of the data for the Nürburgring Nordschleife Tourist Layout. The weathers’
type integer corresponds to localisation strings such as
Cloudy,
Fine Weather,
Sunny etc…
Code:
{
"code": "b4004dfa9108d7f290f04e6a3ea58891",
"country_code": "DE",
"country_tag": "77",
"tag": "4347",
"length": 20832,
"weathers": {
"1598": {
"startTime": "12:00:00",
"type": 1,
"isDefault": false
},
"1599": {
"startTime": "20:30:00",
"type": 5,
"isDefault": false
},
"1604": {
"startTime": "10:00:00",
"type": 3,
"isDefault": false
},
"1610": {
"startTime": "08:00:00",
"type": 2,
"isDefault": true
},
"1611": {
"startTime": "19:30:00",
"type": 5,
"isDefault": false
},
"1619": {
"startTime": "17:00:00",
"type": 2,
"isDefault": false
},
"1688": {
"startTime": "15:00:00",
"type": 2,
"isDefault": false
}
},
"code": "b4004dfa9108d7f290f04e6a3ea58891",
"name": "Nürburgring Nordschleife Tourist Layout",
"imageThumbnail": "/common/dist/gtsport/community/images/ff35f86bde9f667d2d5f647eba1bae52.jpg",
"imageThumbnail2x": "/common/dist/gtsport/community/images/25c7bb1e1ba86e8de1397c14b7d073a3.jpg",
"imageOriginal": "/common/dist/gtsport/community/images/33ab3fbce86d49c0afdb88f81918a0d5.jpg",
"imageOriginal2x": "/common/dist/gtsport/community/images/c6040c9e2ac228f77ef3a28a151f4106.jpg",
"logoSmall": "/common/dist/gtsport/community/images/5bedb64eb7da45cff4fc329a30c58a85.png",
"logoLarge": "/common/dist/gtsport/community/images/57a78f02719e808510357624be729975.png",
"map": "/common/dist/gtsport/community/images/4379af0e6b207ca0fae1b46d0469b5fc.png",
"map2x": "/common/dist/gtsport/community/images/55c8c7970b1e19b7c129116ac38cec06.png",
"replayThumbnail": "/common/dist/gtsport/community/images/bd3f880d39a1921c75687cea5d0206d5.jpg",
"replayOriginal": "/common/dist/gtsport/community/images/6d967eb0f528220b28419cdaae76d929.jpg"
}
Some highlights from the metadata:
The existence of GR.2 and GR.A classes
Code:
"gt7sp.game.COMMON.CarClassName.Label_GR1":"Gr.1",
"gt7sp.game.COMMON.CarClassName.Label_GR2":"GR.2",
"gt7sp.game.COMMON.CarClassName.Label_GR3":"Gr.3",
"gt7sp.game.COMMON.CarClassName.Label_GR4":"Gr.4",
"gt7sp.game.COMMON.CarClassName.Label_GRA":"GR.A",
"gt7sp.game.COMMON.CarClassName.Label_GRB":"Gr.B",
"gt7sp.game.COMMON.CarClassName.Label_GRN":"GR.N",
"gt7sp.game.COMMON.CarClassName.Label_GRX":"Gr.X"
Mission challenge types:
The unfamiliar ones could be ideas that were discarded during development, and should in no way be treated as a guarantee for future inclusion.
Code:
"gt7sp.game.COMMON.EventTargetType.CAR_CHASE":"Car Chase",
"gt7sp.game.COMMON.EventTargetType.CATCH_UP":"Catch Up",
"gt7sp.game.COMMON.EventTargetType.HIGHWAY_STAR":"Highway Star",
"gt7sp.game.COMMON.EventTargetType.LAST_NLAP":"Last N Laps Battle",
"gt7sp.game.COMMON.EventTargetType.MISSION_RACE":"Mission Race",
"gt7sp.game.COMMON.EventTargetType.OBSTACLE":"Obstacle Course",
"gt7sp.game.COMMON.EventTargetType.ONELAP_CHALLENGE":"One Lap Challenge",
"gt7sp.game.COMMON.EventTargetType.OVERTAKE":"Overtaking Challenge",
"gt7sp.game.COMMON.EventTargetType.PYLON":"Cone Challenge",
"gt7sp.game.COMMON.EventTargetType.RACE":"Race",
"gt7sp.game.COMMON.EventTargetType.SECTOR":"Sector King",
"gt7sp.game.COMMON.EventTargetType.SPECIAL_CDT":"Special Condition Race",
"gt7sp.game.COMMON.EventTargetType.SPECIAL_RALLY":"Special Rally",
"gt7sp.game.COMMON.EventTargetType.SPEED_CHALLENGE":"Speed Challenge",
"gt7sp.game.COMMON.EventTargetType.STOP_GO":"Stop and Go",
"gt7sp.game.COMMON.EventTargetType.TEAM_BATTLE":"Team Battle",
"gt7sp.game.COMMON.EventTargetType.TIME_RALLY":"Time Rally",
"gt7sp.game.COMMON.EventTargetType.TOP_SPEED":"Top Speed Challenge",
"gt7sp.game.COMMON.EventTargetType.VS_BATTLE":"VS Battle"
There’re also a few legacy entries for features such as COURSE_EDIT, GPS_REPLAY, LICENSE which’ll be carry-overs from previous GTs. Again I can’t stress enough that these are merely fragments of text that’ve likely stuck around throughout GT’s continued development.
Code:
"gt7sp.game.COMMON.GameModeName.ARCADE_STYLE_RACE":"Time Rally",
"gt7sp.game.COMMON.GameModeName.CIRCUIT_EXPERIENCE":"Circuit Experience",
"gt7sp.game.COMMON.GameModeName.COFFEE_BREAK":"Coffee Break",
"gt7sp.game.COMMON.GameModeName.COURSE_EDIT":"Test Drive",
"gt7sp.game.COMMON.GameModeName.DRIFT_ATTACK":"Drift Trial",
"gt7sp.game.COMMON.GameModeName.ETIQUETTE":"Racing Etiquette",
"gt7sp.game.COMMON.GameModeName.EVENT_RACE":"Event Race",
"gt7sp.game.COMMON.GameModeName.FREE_RUN":"Free Run",
"gt7sp.game.COMMON.GameModeName.GPS_REPLAY":"GPS Visualiser",
"gt7sp.game.COMMON.GameModeName.GT_LEAGUE":"GT League",
"gt7sp.game.COMMON.GameModeName.LAN_PARTY":"Online Battle",
"gt7sp.game.COMMON.GameModeName.LICENSE":"Licence",
"gt7sp.game.COMMON.GameModeName.MISSION":"Mission Challenge",
"gt7sp.game.COMMON.GameModeName.ONLINE_BATTLE":"Quick Match",
"gt7sp.game.COMMON.GameModeName.ONLINE_DRIFT_ATTACK":"Online: Drift Trial",
"gt7sp.game.COMMON.GameModeName.ONLINE_ROOM":"Lobby",
"gt7sp.game.COMMON.GameModeName.ONLINE_SINGLE_RACE":"Online: Single Race",
"gt7sp.game.COMMON.GameModeName.ONLINE_TIME_ATTACK":"Online Time Trial",
"gt7sp.game.COMMON.GameModeName.PRACTICE":"Practice",
"gt7sp.game.COMMON.GameModeName.RACE_EDIT":"Custom Race",
"gt7sp.game.COMMON.GameModeName.SCHOOL":"Driving School",
"gt7sp.game.COMMON.GameModeName.SINGLE_RACE":"Single Race",
"gt7sp.game.COMMON.GameModeName.SPLIT_BATTLE":"2P Split Screen",
"gt7sp.game.COMMON.GameModeName.SPORT_CHAMPIONSHIP":"Point Race",
"gt7sp.game.COMMON.GameModeName.SPORT_DAILY_RACE":"Daily Race",
"gt7sp.game.COMMON.GameModeName.SPORT_DAILY_RACE_PRACTICE":"Daily Race Qualifying Time Trial",
"gt7sp.game.COMMON.GameModeName.SPORT_LIVE":"Sport Live",
"gt7sp.game.COMMON.GameModeName.SPORT_POINT_RACE_PRACTICE":"Point Race Free Practice",
"gt7sp.game.COMMON.GameModeName.TIME_ATTACK":"Time Trial",
"gt7sp.game.COMMON.GameModeName.VR_TOUR":"VR Drive"
Some other things:
- The course/manufacturer codes are no longer straight md5 hashes and look to be salted
- The metadata continues the same car database from previous GTs:
- ID 205 "Mazda RX-7 Spirit R Type A (FD) '02" matches the hex equivalent (00CD) from the GT6 memory dump
- There’re working API endpoints for retrieving past Sport Mode results, championship rankings and the daily races. Everything looks ready for a switch to flip them live in the UI.
- Now these are some orphaned brand central images found in the Javascript bundle and have no corresponding metadata unlike the other brands/manufacturers.
- Goodyear
- Italdesign Giugiaro (Vision GT)
- Pininfarina (replaced by Fittipaldi Motors?)
- Pirelli
- Red Bull
- Ayrton Senna
- Shell