gamertag 1.1.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +11 -1
- data/LICENSE.md +11 -0
- data/README.md +84 -0
- data/gamertag.gemspec +25 -25
- data/lib/faraday/response/cleanup_xbox_leaders_naming.rb +30 -0
- data/lib/faraday/response/raise_xbox_leaders_error.rb +22 -0
- data/lib/gamertag.rb +21 -10
- data/lib/gamertag/client.rb +25 -0
- data/lib/gamertag/client/achievements.rb +15 -0
- data/lib/gamertag/client/friends.rb +14 -0
- data/lib/gamertag/client/games.rb +41 -0
- data/lib/gamertag/client/profile.rb +14 -0
- data/lib/gamertag/configuration.rb +48 -0
- data/lib/gamertag/connection.rb +22 -0
- data/lib/gamertag/error.rb +22 -0
- data/lib/gamertag/version.rb +2 -2
- data/spec/client/achievements_spec.rb +21 -0
- data/spec/client/friends_spec.rb +23 -0
- data/spec/client/games_spec.rb +49 -0
- data/spec/client/profile_spec.rb +22 -0
- data/spec/client_spec.rb +7 -0
- data/spec/faraday/xboxleader_cleanup_spec.rb +59 -0
- data/spec/faraday/xboxleader_error_spec.rb +63 -0
- data/spec/fixtures/achievements.json +654 -0
- data/spec/fixtures/errors/friends_not_found.json +9 -0
- data/spec/fixtures/errors/game_not_found.json +9 -0
- data/spec/fixtures/errors/gamertag_not_found.json +9 -0
- data/spec/fixtures/errors/invalid_game_id.json +9 -0
- data/spec/fixtures/errors/invalid_gamertag.json +9 -0
- data/spec/fixtures/friends.json +772 -0
- data/spec/fixtures/gamertag_not_found.json +9 -0
- data/spec/fixtures/games.json +2244 -0
- data/spec/fixtures/profile.json +125 -0
- data/spec/gamertag_spec.rb +13 -0
- data/spec/helper.rb +38 -0
- metadata +92 -124
- data/.gitignore +0 -9
- data/.rspec +0 -3
- data/.rvmrc +0 -1
- data/Gemfile +0 -4
- data/LICENSE +0 -20
- data/README.mdown +0 -106
- data/Rakefile +0 -12
- data/lib/gamertag/friends.rb +0 -25
- data/lib/gamertag/played_games.rb +0 -73
- data/lib/gamertag/profile.rb +0 -13
- data/lib/gamertag/simple_profile.rb +0 -68
- data/spec/fixtures/vcr_cassettes/Friends_Belial1984.yml +0 -520
- data/spec/fixtures/vcr_cassettes/PlayedGames_Belial1984.yml +0 -1309
- data/spec/fixtures/vcr_cassettes/PlayedGames_some_user.yml +0 -100
- data/spec/fixtures/vcr_cassettes/SimpleProfile_Belial1984.yml +0 -45
- data/spec/friends_spec.rb +0 -19
- data/spec/played_games_spec.rb +0 -25
- data/spec/profile_spec.rb +0 -15
- data/spec/simple_profile_spec.rb +0 -69
- data/spec/spec_helper.rb +0 -15
- data/spec/version_spec.rb +0 -7
@@ -0,0 +1,22 @@
|
|
1
|
+
module Gamertag
|
2
|
+
# Custom error class for rescuing from Xbox Leader API errors which are
|
3
|
+
# a little funky at best
|
4
|
+
class Error < StandardError
|
5
|
+
def initialize(response=nil)
|
6
|
+
@response = response
|
7
|
+
super(build_error_message)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def build_error_message
|
12
|
+
return nil if @response.nil?
|
13
|
+
"#{@response[:body].data.message}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class GamertagNotFound < Error; end
|
18
|
+
class AchievementNotFound < Error; end
|
19
|
+
class FriendsNotFound < Error; end
|
20
|
+
class InvalidGamertag < Error; end
|
21
|
+
class InvalidGameId < Error; end
|
22
|
+
end
|
data/lib/gamertag/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Gamertag
|
2
|
-
VERSION =
|
3
|
-
end
|
2
|
+
VERSION = '2.0.1'
|
3
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Gamertag::Client::Achievements do
|
5
|
+
before do
|
6
|
+
@client = Gamertag::Client.new
|
7
|
+
@gamertag = 'belial1984'
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#achievements' do
|
11
|
+
it 'should return the users achievements' do
|
12
|
+
stub_get('/achievements.json?gameid=100&gamertag=belial1984').
|
13
|
+
to_return(json_response('achievements.json'))
|
14
|
+
|
15
|
+
|
16
|
+
achievements = @client.achievements(@gamertag, 100)
|
17
|
+
|
18
|
+
expect(achievements.last.title).to eq('Scavenger Hunt')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Gamertag::Client::Friends do
|
5
|
+
before do
|
6
|
+
@client = Gamertag::Client.new
|
7
|
+
@gamertag = 'belial1984'
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#friends' do
|
11
|
+
it 'returns friends for the gamertag' do
|
12
|
+
stub_get('/friends.json?gamertag=belial1984').
|
13
|
+
to_return(json_response('friends.json'))
|
14
|
+
|
15
|
+
friends = @client.friends(@gamertag)
|
16
|
+
|
17
|
+
expect(friends).not_to be_empty
|
18
|
+
|
19
|
+
gamertags = friends.map{|f| f.gamertag }
|
20
|
+
expect(gamertags).to include('Eternal Epoch')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Gamertag::Client::Games do
|
5
|
+
before do
|
6
|
+
@client = Gamertag::Client.new
|
7
|
+
@gamertag = 'belial1984'
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#games' do
|
11
|
+
it 'returns the games that have been played by the gamertag' do
|
12
|
+
stub_get('/games.json?gamertag=belial1984').
|
13
|
+
to_return(json_response('games.json'))
|
14
|
+
|
15
|
+
games = @client.games(@gamertag)
|
16
|
+
expect(games.count).to eq(117)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#potential_gamerscore' do
|
21
|
+
it 'returns the potential points the gamer could score from their library of games' do
|
22
|
+
stub_get('/games.json?gamertag=belial1984').
|
23
|
+
to_return(json_response('games.json'))
|
24
|
+
|
25
|
+
potential_gamerscore = @client.potential_gamerscore(@gamertag)
|
26
|
+
expect(potential_gamerscore).to eq(87770)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#potential_achievements_count' do
|
31
|
+
it 'returns the number of potential achievements for the games played' do
|
32
|
+
stub_get('/games.json?gamertag=belial1984').
|
33
|
+
to_return(json_response('games.json'))
|
34
|
+
|
35
|
+
potential_achievement_count = @client.potential_achievement_count(@gamertag)
|
36
|
+
expect(potential_achievement_count).to eq(4165)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#achievements_count' do
|
41
|
+
it 'returns the number of achievements for the games played' do
|
42
|
+
stub_get('/games.json?gamertag=belial1984').
|
43
|
+
to_return(json_response('games.json'))
|
44
|
+
|
45
|
+
achievement_count = @client.achievement_count(@gamertag)
|
46
|
+
expect(achievement_count).to eq(1054)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Gamertag::Client::Profile do
|
5
|
+
before do
|
6
|
+
@client = Gamertag::Client.new
|
7
|
+
@gamertag = 'belial1984'
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#profile' do
|
11
|
+
it 'returns the profile for the gamertag' do
|
12
|
+
stub_get('/profile.json?gamertag=belial1984').
|
13
|
+
to_return(json_response('profile.json'))
|
14
|
+
|
15
|
+
|
16
|
+
profile = @client.profile(@gamertag)
|
17
|
+
|
18
|
+
expect(profile.gamertag).to eq(@gamertag)
|
19
|
+
expect(profile.name).to eq('baris balic')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Faraday::Response do
|
5
|
+
before do
|
6
|
+
@client = Gamertag::Client.new
|
7
|
+
@gamertag = 'belial1984'
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'when the profile is requested' do
|
11
|
+
it "maps all crappy fields to snake_case" do
|
12
|
+
stub_get("/profile.json?gamertag=#{@gamertag}").
|
13
|
+
to_return(json_response('profile.json'))
|
14
|
+
|
15
|
+
profile = @client.profile(@gamertag)
|
16
|
+
expect(profile.gamertag).to eq('belial1984')
|
17
|
+
|
18
|
+
expect(profile.badges.xbox_launch_team).to eq(false)
|
19
|
+
expect(profile.badges.nxe_launch_team).to eq(false)
|
20
|
+
expect(profile.badges.kinect_launch_team).to eq(false)
|
21
|
+
expect(profile.recent_activity).not_to be_empty
|
22
|
+
expect(profile.recent_activity.first.is_app).to eq(false)
|
23
|
+
expect(profile.recent_activity.first.last_played).to eq('1370905190')
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when the friends are requested' do
|
29
|
+
it "maps all crappy fields to snake_case" do
|
30
|
+
stub_get("/friends.json?gamertag=#{@gamertag}").
|
31
|
+
to_return(json_response('friends.json'))
|
32
|
+
|
33
|
+
friends = @client.friends(@gamertag)
|
34
|
+
expect(friends.first.gamertag).to eq('Ageblaster')
|
35
|
+
expect(friends.first.last_seen).to eq('1041379200')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when the games are requested' do
|
40
|
+
it "maps all crappy fields to snake_case" do
|
41
|
+
stub_get("/games.json?gamertag=#{@gamertag}").
|
42
|
+
to_return(json_response('games.json'))
|
43
|
+
|
44
|
+
games = @client.games(@gamertag)
|
45
|
+
expect(games.first.is_app).to eq(false)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when the achievements are requested' do
|
50
|
+
it "maps all crappy fields to snake_case" do
|
51
|
+
stub_get("/achievements.json?gameid=100&gamertag=#{@gamertag}").
|
52
|
+
to_return(json_response('achievements.json'))
|
53
|
+
|
54
|
+
achievements = @client.achievements(@gamertag, 100)
|
55
|
+
expect(achievements.first.unlock_date).to eq('1370919805')
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
describe Faraday::Response do
|
5
|
+
before do
|
6
|
+
@client = Gamertag::Client.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'when the friends are private or not found' do
|
10
|
+
it 'raises a Gamertag::FriendsNotFound error' do
|
11
|
+
stub_get('/friends.json?gamertag=belial1984').
|
12
|
+
to_return(json_response('errors/friends_not_found.json'))
|
13
|
+
|
14
|
+
expect {
|
15
|
+
@client.friends('belial1984')
|
16
|
+
}.to raise_error(Gamertag::FriendsNotFound)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when the gamertag is invalid' do
|
21
|
+
it 'raises a Gamertag::InvalidGamertag error' do
|
22
|
+
stub_get('/profile.json?gamertag=InvalidGamertagHere').
|
23
|
+
to_return(json_response('errors/invalid_gamertag.json'))
|
24
|
+
|
25
|
+
expect {
|
26
|
+
@client.profile('InvalidGamertagHere')
|
27
|
+
}.to raise_error(Gamertag::InvalidGamertag)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when the gamertag is not found' do
|
32
|
+
it 'raises a Gamertag::InvalidGamertag error' do
|
33
|
+
stub_get('/profile.json?gamertag=NoGamertagHere').
|
34
|
+
to_return(json_response('errors/gamertag_not_found.json'))
|
35
|
+
|
36
|
+
expect {
|
37
|
+
@client.profile('NoGamertagHere')
|
38
|
+
}.to raise_error(Gamertag::GamertagNotFound)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when the game is not valid' do
|
43
|
+
it 'raises a Gamertag::InvalidGameId error' do
|
44
|
+
stub_get('/achievements.json?gameid=lemons&gamertag=belial1984').
|
45
|
+
to_return(json_response('errors/invalid_game_id.json'))
|
46
|
+
|
47
|
+
expect {
|
48
|
+
@client.achievements('belial1984', 'lemons')
|
49
|
+
}.to raise_error(Gamertag::InvalidGameId)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when the game is not valid' do
|
54
|
+
it 'raises a Gamertag::InvalidGameId error' do
|
55
|
+
stub_get('/achievements.json?gamertag=belial1984&gameid=lemons').
|
56
|
+
to_return(json_response('errors/invalid_game_id.json'))
|
57
|
+
|
58
|
+
expect {
|
59
|
+
@client.achievements('belial1984', 'lemons')
|
60
|
+
}.to raise_error(Gamertag::InvalidGameId)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,654 @@
|
|
1
|
+
{
|
2
|
+
"status": "success",
|
3
|
+
"version": "2.0",
|
4
|
+
"data": {
|
5
|
+
"gamertag": "belial1984",
|
6
|
+
"game": "BioShock Infinite",
|
7
|
+
"gamerscore": {
|
8
|
+
"current": 470,
|
9
|
+
"total": 1000
|
10
|
+
},
|
11
|
+
"achievement": {
|
12
|
+
"current": 32,
|
13
|
+
"total": 50
|
14
|
+
},
|
15
|
+
"progress": 64,
|
16
|
+
"lastplayed": "1370905190",
|
17
|
+
"achievements": [
|
18
|
+
{
|
19
|
+
"id": 14,
|
20
|
+
"title": "Should Auld Acquaintance...",
|
21
|
+
"artwork": {
|
22
|
+
"locked": "https://live.xbox.com/tiles/ua/wM/1jc8P2NhbC8WWxoEGlxTWTVkL2FjaC8wL2FiAAAAAVBQUPkjrKU=.jpg",
|
23
|
+
"unlocked": ""
|
24
|
+
},
|
25
|
+
"description": "Unlock 1999 mode.",
|
26
|
+
"gamerscore": 10,
|
27
|
+
"secret": false,
|
28
|
+
"unlocked": true,
|
29
|
+
"unlockdate": "1370919805"
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"id": 11,
|
33
|
+
"title": "Saw the Elephant",
|
34
|
+
"artwork": {
|
35
|
+
"locked": "https://live.xbox.com/tiles/MF/0G/0Tc8P2NhbC9BAhoEGlxTWTVkL2FjaC8wLzg1AAAAAVBQUP4pXSw=.jpg",
|
36
|
+
"unlocked": ""
|
37
|
+
},
|
38
|
+
"description": "Complete the game on Normal difficulty or above.",
|
39
|
+
"gamerscore": 25,
|
40
|
+
"secret": false,
|
41
|
+
"unlocked": true,
|
42
|
+
"unlockdate": "1370919805"
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"id": 12,
|
46
|
+
"title": "Stone Cold Pinkerton",
|
47
|
+
"artwork": {
|
48
|
+
"locked": "https://live.xbox.com/tiles/GL/jg/0Tc8P2NhbC9MAhoEGlxTWTVkL2FjaC8wLzg4AAAAAVBQUP7PuAQ=.jpg",
|
49
|
+
"unlocked": ""
|
50
|
+
},
|
51
|
+
"description": "Complete the game on Hard difficulty or above.",
|
52
|
+
"gamerscore": 50,
|
53
|
+
"secret": false,
|
54
|
+
"unlocked": true,
|
55
|
+
"unlockdate": "1370919805"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"id": 10,
|
59
|
+
"title": "Tin Soldier",
|
60
|
+
"artwork": {
|
61
|
+
"locked": "https://live.xbox.com/tiles/Fq/zH/0jc8P2NhbC9DAhoEGlxTWTVkL2FjaC8wLzg3AAAAAVBQUP3orAo=.jpg",
|
62
|
+
"unlocked": ""
|
63
|
+
},
|
64
|
+
"description": "Complete the game on Easy difficulty or above.",
|
65
|
+
"gamerscore": 10,
|
66
|
+
"secret": false,
|
67
|
+
"unlocked": true,
|
68
|
+
"unlockdate": "1370919805"
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"id": 52,
|
72
|
+
"title": "Secret Achievement",
|
73
|
+
"artwork": {
|
74
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
75
|
+
"unlocked": ""
|
76
|
+
},
|
77
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
78
|
+
"gamerscore": 25,
|
79
|
+
"secret": true,
|
80
|
+
"unlocked": true,
|
81
|
+
"unlockdate": "1370918665"
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"id": 32,
|
85
|
+
"title": "Strange Bedfellows",
|
86
|
+
"artwork": {
|
87
|
+
"locked": "https://live.xbox.com/tiles/DK/Ut/1Dc8P2NhbC8VWxoEGlxTWTVkL2FjaC8wL2FhAAAAAVBQUPsCpRA=.jpg",
|
88
|
+
"unlocked": ""
|
89
|
+
},
|
90
|
+
"description": "Kill 20 enemies using allies brought in through a Tear.",
|
91
|
+
"gamerscore": 10,
|
92
|
+
"secret": false,
|
93
|
+
"unlocked": true,
|
94
|
+
"unlockdate": "1370913870"
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"id": 8,
|
98
|
+
"title": "Secret Achievement",
|
99
|
+
"artwork": {
|
100
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
101
|
+
"unlocked": ""
|
102
|
+
},
|
103
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
104
|
+
"gamerscore": 25,
|
105
|
+
"secret": true,
|
106
|
+
"unlocked": true,
|
107
|
+
"unlockdate": "1370913340"
|
108
|
+
},
|
109
|
+
{
|
110
|
+
"id": 19,
|
111
|
+
"title": "Street Sweeper",
|
112
|
+
"artwork": {
|
113
|
+
"locked": "https://live.xbox.com/tiles/iB/-k/1zc8P2NhbC9AWxoEGlxTWTVkL2FjaC8wL2E0AAAAAVBQUPjLH5Q=.jpg",
|
114
|
+
"unlocked": ""
|
115
|
+
},
|
116
|
+
"description": "Kill 50 enemies with the Founder China Broom Shotgun or Vox Heater.",
|
117
|
+
"gamerscore": 5,
|
118
|
+
"secret": false,
|
119
|
+
"unlocked": true,
|
120
|
+
"unlockdate": "1370909160"
|
121
|
+
},
|
122
|
+
{
|
123
|
+
"id": 7,
|
124
|
+
"title": "Secret Achievement",
|
125
|
+
"artwork": {
|
126
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
127
|
+
"unlocked": ""
|
128
|
+
},
|
129
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
130
|
+
"gamerscore": 25,
|
131
|
+
"secret": true,
|
132
|
+
"unlocked": true,
|
133
|
+
"unlockdate": "1370801641"
|
134
|
+
},
|
135
|
+
{
|
136
|
+
"id": 20,
|
137
|
+
"title": "Big Game Hunter",
|
138
|
+
"artwork": {
|
139
|
+
"locked": "https://live.xbox.com/tiles/Wk/5E/1Tc8P2NhbC9HAhoEGlxTWTVkL2FjaC8wLzgzAAAAAVBQUPprTkY=.jpg",
|
140
|
+
"unlocked": ""
|
141
|
+
},
|
142
|
+
"description": "Kill 100 enemies with the Founder Huntsman Carbine or Vox Burstgun.",
|
143
|
+
"gamerscore": 5,
|
144
|
+
"secret": false,
|
145
|
+
"unlocked": true,
|
146
|
+
"unlockdate": "1370754706"
|
147
|
+
},
|
148
|
+
{
|
149
|
+
"id": 21,
|
150
|
+
"title": "Loose Cannon",
|
151
|
+
"artwork": {
|
152
|
+
"locked": "https://live.xbox.com/tiles/x6/2o/1Tc8P2NhbC9CAxoEGlxTWTVkL2FjaC8wLzk2AAAAAVBQUPqHrds=.jpg",
|
153
|
+
"unlocked": ""
|
154
|
+
},
|
155
|
+
"description": "Kill 25 enemies with the Paddywhacker Hand Cannon.",
|
156
|
+
"gamerscore": 5,
|
157
|
+
"secret": false,
|
158
|
+
"unlocked": true,
|
159
|
+
"unlockdate": "1370752096"
|
160
|
+
},
|
161
|
+
{
|
162
|
+
"id": 35,
|
163
|
+
"title": "Hazard Pay",
|
164
|
+
"artwork": {
|
165
|
+
"locked": "https://live.xbox.com/tiles/Jx/8v/0zc8P2NhbC8VAhoEGlxTWTVkL2FjaC8wLzhhAAAAAVBQUPwAHzs=.jpg",
|
166
|
+
"unlocked": ""
|
167
|
+
},
|
168
|
+
"description": "Kill 10 enemies by utilizing environmental hazards.",
|
169
|
+
"gamerscore": 25,
|
170
|
+
"secret": false,
|
171
|
+
"unlocked": true,
|
172
|
+
"unlockdate": "1370750740"
|
173
|
+
},
|
174
|
+
{
|
175
|
+
"id": 48,
|
176
|
+
"title": "Grand Largesse",
|
177
|
+
"artwork": {
|
178
|
+
"locked": "https://live.xbox.com/tiles/oP/oC/1zc8P2NhbC9NWxoEGlxTWTVkL2FjaC8wL2E5AAAAAVBQUPgt+rw=.jpg",
|
179
|
+
"unlocked": ""
|
180
|
+
},
|
181
|
+
"description": "Spend $10,000 at the vending machines of Columbia.",
|
182
|
+
"gamerscore": 10,
|
183
|
+
"secret": false,
|
184
|
+
"unlocked": true,
|
185
|
+
"unlockdate": "1370747630"
|
186
|
+
},
|
187
|
+
{
|
188
|
+
"id": 26,
|
189
|
+
"title": "Well Rounded",
|
190
|
+
"artwork": {
|
191
|
+
"locked": "https://live.xbox.com/tiles/9U/6P/0Tc8P2NhbC8SWxoEGlxTWTVkL2FjaC8wL2FmAAAAAVBQUP6gTuk=.jpg",
|
192
|
+
"unlocked": ""
|
193
|
+
},
|
194
|
+
"description": "Hit an enemy with each of the 8 Vigors.",
|
195
|
+
"gamerscore": 10,
|
196
|
+
"secret": false,
|
197
|
+
"unlocked": true,
|
198
|
+
"unlockdate": "1370747495"
|
199
|
+
},
|
200
|
+
{
|
201
|
+
"id": 46,
|
202
|
+
"title": "The Roguish Type",
|
203
|
+
"artwork": {
|
204
|
+
"locked": "https://live.xbox.com/tiles/yb/mP/1jc8P2NhbC9NAxoEGlxTWTVkL2FjaC8wLzk5AAAAAVBQUPmgudU=.jpg",
|
205
|
+
"unlocked": ""
|
206
|
+
},
|
207
|
+
"description": "Have Elizabeth pick 30 locks.",
|
208
|
+
"gamerscore": 25,
|
209
|
+
"secret": false,
|
210
|
+
"unlocked": true,
|
211
|
+
"unlockdate": "1370746856"
|
212
|
+
},
|
213
|
+
{
|
214
|
+
"id": 42,
|
215
|
+
"title": "Kitted Out",
|
216
|
+
"artwork": {
|
217
|
+
"locked": "https://live.xbox.com/tiles/bc/11/0jc8P2NhbC9EWBoEGlxTWTVkL2FjaC8wL2IwAAAAAVBQUP1azXE=.jpg",
|
218
|
+
"unlocked": ""
|
219
|
+
},
|
220
|
+
"description": "Fully upgrade one weapon and one Vigor.",
|
221
|
+
"gamerscore": 10,
|
222
|
+
"secret": false,
|
223
|
+
"unlocked": true,
|
224
|
+
"unlockdate": "1370746135"
|
225
|
+
},
|
226
|
+
{
|
227
|
+
"id": 6,
|
228
|
+
"title": "Secret Achievement",
|
229
|
+
"artwork": {
|
230
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
231
|
+
"unlocked": ""
|
232
|
+
},
|
233
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
234
|
+
"gamerscore": 25,
|
235
|
+
"secret": true,
|
236
|
+
"unlocked": true,
|
237
|
+
"unlockdate": "1370743955"
|
238
|
+
},
|
239
|
+
{
|
240
|
+
"id": 23,
|
241
|
+
"title": "Here Little Piggy",
|
242
|
+
"artwork": {
|
243
|
+
"locked": "https://live.xbox.com/tiles/GL/fL/0zc8P2NhbC9HAxoEGlxTWTVkL2FjaC8wLzkzAAAAAVBQUPzktwQ=.jpg",
|
244
|
+
"unlocked": ""
|
245
|
+
},
|
246
|
+
"description": "Kill 30 enemies with the Founder Pig Volley Gun or Vox Hail Fire.",
|
247
|
+
"gamerscore": 5,
|
248
|
+
"secret": false,
|
249
|
+
"unlocked": true,
|
250
|
+
"unlockdate": "1370743220"
|
251
|
+
},
|
252
|
+
{
|
253
|
+
"id": 25,
|
254
|
+
"title": "Seasoned to Taste",
|
255
|
+
"artwork": {
|
256
|
+
"locked": "https://live.xbox.com/tiles/4V/xp/1jc8P2NhbC9AAxoEGlxTWTVkL2FjaC8wLzk0AAAAAVBQUPlGXP0=.jpg",
|
257
|
+
"unlocked": ""
|
258
|
+
},
|
259
|
+
"description": "Kill 30 enemies with the Peppermill Crank Gun.",
|
260
|
+
"gamerscore": 5,
|
261
|
+
"secret": false,
|
262
|
+
"unlocked": true,
|
263
|
+
"unlockdate": "1370743140"
|
264
|
+
},
|
265
|
+
{
|
266
|
+
"id": 31,
|
267
|
+
"title": "Tear &#039;em a New One",
|
268
|
+
"artwork": {
|
269
|
+
"locked": "https://live.xbox.com/tiles/xP/1n/0Dc8P2NhbC9EWxoEGlxTWTVkL2FjaC8wL2EwAAAAAVBQUP9I-dg=.jpg",
|
270
|
+
"unlocked": ""
|
271
|
+
},
|
272
|
+
"description": "Open 30 Tears.",
|
273
|
+
"gamerscore": 25,
|
274
|
+
"secret": false,
|
275
|
+
"unlocked": true,
|
276
|
+
"unlockdate": "1370742085"
|
277
|
+
},
|
278
|
+
{
|
279
|
+
"id": 5,
|
280
|
+
"title": "Secret Achievement",
|
281
|
+
"artwork": {
|
282
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
283
|
+
"unlocked": ""
|
284
|
+
},
|
285
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
286
|
+
"gamerscore": 10,
|
287
|
+
"secret": true,
|
288
|
+
"unlocked": true,
|
289
|
+
"unlockdate": "1370740665"
|
290
|
+
},
|
291
|
+
{
|
292
|
+
"id": 39,
|
293
|
+
"title": "David &amp; Goliath",
|
294
|
+
"artwork": {
|
295
|
+
"locked": "https://live.xbox.com/tiles/fL/+F/1jc8P2NhbC9FAhoEGlxTWTVkL2FjaC8wLzgxAAAAAVBQUPmqv2A=.jpg",
|
296
|
+
"unlocked": ""
|
297
|
+
},
|
298
|
+
"description": "Kill 20 &quot;Heavy Hitter&quot; enemies.",
|
299
|
+
"gamerscore": 10,
|
300
|
+
"secret": false,
|
301
|
+
"unlocked": true,
|
302
|
+
"unlockdate": "1370740250"
|
303
|
+
},
|
304
|
+
{
|
305
|
+
"id": 4,
|
306
|
+
"title": "Secret Achievement",
|
307
|
+
"artwork": {
|
308
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
309
|
+
"unlocked": ""
|
310
|
+
},
|
311
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
312
|
+
"gamerscore": 10,
|
313
|
+
"secret": true,
|
314
|
+
"unlocked": true,
|
315
|
+
"unlockdate": "1370671703"
|
316
|
+
},
|
317
|
+
{
|
318
|
+
"id": 22,
|
319
|
+
"title": "On a Clear Day...",
|
320
|
+
"artwork": {
|
321
|
+
"locked": "https://live.xbox.com/tiles/Mw/Li/1jc8P2NhbC9MWxoEGlxTWTVkL2FjaC8wL2E4AAAAAVBQUPnNAi8=.jpg",
|
322
|
+
"unlocked": ""
|
323
|
+
},
|
324
|
+
"description": "Kill 30 enemies with the Bird&#039;s Eye Sniper Rifle.",
|
325
|
+
"gamerscore": 5,
|
326
|
+
"secret": false,
|
327
|
+
"unlocked": true,
|
328
|
+
"unlockdate": "1370669978"
|
329
|
+
},
|
330
|
+
{
|
331
|
+
"id": 24,
|
332
|
+
"title": "Master of Pyrotechnics",
|
333
|
+
"artwork": {
|
334
|
+
"locked": "https://live.xbox.com/tiles/cf/RG/0jc8P2NhbC9HWxoEGlxTWTVkL2FjaC8wL2EzAAAAAVBQUP1p9G0=.jpg",
|
335
|
+
"unlocked": ""
|
336
|
+
},
|
337
|
+
"description": "Kill 20 enemies with the Barnstormer RPG.",
|
338
|
+
"gamerscore": 5,
|
339
|
+
"secret": false,
|
340
|
+
"unlocked": true,
|
341
|
+
"unlockdate": "1370669783"
|
342
|
+
},
|
343
|
+
{
|
344
|
+
"id": 27,
|
345
|
+
"title": "Vigorous Opposition",
|
346
|
+
"artwork": {
|
347
|
+
"locked": "https://live.xbox.com/tiles/07/9O/0jc8P2NhbC8QWxoEGlxTWTVkL2FjaC8wL2FkAAAAAVBQUP1hv88=.jpg",
|
348
|
+
"unlocked": ""
|
349
|
+
},
|
350
|
+
"description": "Kill 75 enemies either with a Vigor or while the enemy is under the effects of a Vigor.",
|
351
|
+
"gamerscore": 50,
|
352
|
+
"secret": false,
|
353
|
+
"unlocked": true,
|
354
|
+
"unlockdate": "1370668598"
|
355
|
+
},
|
356
|
+
{
|
357
|
+
"id": 3,
|
358
|
+
"title": "Secret Achievement",
|
359
|
+
"artwork": {
|
360
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
361
|
+
"unlocked": ""
|
362
|
+
},
|
363
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
364
|
+
"gamerscore": 10,
|
365
|
+
"secret": true,
|
366
|
+
"unlocked": true,
|
367
|
+
"unlockdate": "1370668548"
|
368
|
+
},
|
369
|
+
{
|
370
|
+
"id": 41,
|
371
|
+
"title": "Dress for Success",
|
372
|
+
"artwork": {
|
373
|
+
"locked": "https://live.xbox.com/tiles/cq/SJ/1zc8P2NhbC9BAxoEGlxTWTVkL2FjaC8wLzk1AAAAAVBQUPimpG4=.jpg",
|
374
|
+
"unlocked": ""
|
375
|
+
},
|
376
|
+
"description": "Equip a piece of Gear in each of the four slots.",
|
377
|
+
"gamerscore": 5,
|
378
|
+
"secret": false,
|
379
|
+
"unlocked": true,
|
380
|
+
"unlockdate": "1370663072"
|
381
|
+
},
|
382
|
+
{
|
383
|
+
"id": 49,
|
384
|
+
"title": "Coins in the Cushion",
|
385
|
+
"artwork": {
|
386
|
+
"locked": "https://live.xbox.com/tiles/Ze/ag/1Tc8P2NhbC8VAxoEGlxTWTVkL2FjaC8wLzlhAAAAAVBQUPqP5nk=.jpg",
|
387
|
+
"unlocked": ""
|
388
|
+
},
|
389
|
+
"description": "Loot 200 containers.",
|
390
|
+
"gamerscore": 10,
|
391
|
+
"secret": false,
|
392
|
+
"unlocked": true,
|
393
|
+
"unlockdate": "1370661473"
|
394
|
+
},
|
395
|
+
{
|
396
|
+
"id": 2,
|
397
|
+
"title": "Secret Achievement",
|
398
|
+
"artwork": {
|
399
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
400
|
+
"unlocked": ""
|
401
|
+
},
|
402
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
403
|
+
"gamerscore": 10,
|
404
|
+
"secret": true,
|
405
|
+
"unlocked": true,
|
406
|
+
"unlockdate": "1370657508"
|
407
|
+
},
|
408
|
+
{
|
409
|
+
"id": 17,
|
410
|
+
"title": "A Real Pistol",
|
411
|
+
"artwork": {
|
412
|
+
"locked": "https://live.xbox.com/tiles/Vw/WH/0Tc8P2NhbC9FWxoEGlxTWTVkL2FjaC8wL2ExAAAAAVBQUP6oBUs=.jpg",
|
413
|
+
"unlocked": ""
|
414
|
+
},
|
415
|
+
"description": "Kill 25 enemies with the Broadsider Pistol.",
|
416
|
+
"gamerscore": 5,
|
417
|
+
"secret": false,
|
418
|
+
"unlocked": true,
|
419
|
+
"unlockdate": "1370655838"
|
420
|
+
},
|
421
|
+
{
|
422
|
+
"id": 1,
|
423
|
+
"title": "Secret Achievement",
|
424
|
+
"artwork": {
|
425
|
+
"locked": "https://live.xbox.com/Content/Images/HiddenAchievement.png",
|
426
|
+
"unlocked": ""
|
427
|
+
},
|
428
|
+
"description": "This is a secret achievement. Unlock it to find out more.",
|
429
|
+
"gamerscore": 5,
|
430
|
+
"secret": true,
|
431
|
+
"unlocked": true,
|
432
|
+
"unlockdate": "1370646878"
|
433
|
+
},
|
434
|
+
{
|
435
|
+
"id": 13,
|
436
|
+
"title": "Auld Lang Syne",
|
437
|
+
"artwork": {
|
438
|
+
"locked": "https://live.xbox.com/tiles/hV/Qn/0zc8P2NhbC9CAhoEGlxTWTVkL2FjaC8wLzg2AAAAAVBQUPwIVJk=.jpg",
|
439
|
+
"unlocked": ""
|
440
|
+
},
|
441
|
+
"description": "Complete the game on 1999 mode.",
|
442
|
+
"gamerscore": 75,
|
443
|
+
"secret": false,
|
444
|
+
"unlocked": false
|
445
|
+
},
|
446
|
+
{
|
447
|
+
"id": 15,
|
448
|
+
"title": "Industrial Accident",
|
449
|
+
"artwork": {
|
450
|
+
"locked": "https://live.xbox.com/tiles/0O/+B/1zc8P2NhbC8WAxoEGlxTWTVkL2FjaC8wLzliAAAAAVBQUPiu78w=.jpg",
|
451
|
+
"unlocked": ""
|
452
|
+
},
|
453
|
+
"description": "Kill 20 enemies with a Sky-Hook Execution.",
|
454
|
+
"gamerscore": 5,
|
455
|
+
"secret": false,
|
456
|
+
"unlocked": false
|
457
|
+
},
|
458
|
+
{
|
459
|
+
"id": 16,
|
460
|
+
"title": "Aerial Assassin",
|
461
|
+
"artwork": {
|
462
|
+
"locked": "https://live.xbox.com/tiles/Qx/dh/1jc8P2NhbC8XAxoEGlxTWTVkL2FjaC8wLzljAAAAAVBQUPlOF18=.jpg",
|
463
|
+
"unlocked": ""
|
464
|
+
},
|
465
|
+
"description": "Kill 20 enemies with a Sky-Line Strike.",
|
466
|
+
"gamerscore": 5,
|
467
|
+
"secret": false,
|
468
|
+
"unlocked": false
|
469
|
+
},
|
470
|
+
{
|
471
|
+
"id": 18,
|
472
|
+
"title": "Passionately Reciprocated",
|
473
|
+
"artwork": {
|
474
|
+
"locked": "https://live.xbox.com/tiles/KQ/Qj/0jc8P2NhbC8RAxoEGlxTWTVkL2FjaC8wLzllAAAAAVBQUP0MBDU=.jpg",
|
475
|
+
"unlocked": ""
|
476
|
+
},
|
477
|
+
"description": "Kill 150 enemies with the Founder Triple R Machine Gun or Vox Repeater.",
|
478
|
+
"gamerscore": 5,
|
479
|
+
"secret": false,
|
480
|
+
"unlocked": false
|
481
|
+
},
|
482
|
+
{
|
483
|
+
"id": 28,
|
484
|
+
"title": "More for Your Money",
|
485
|
+
"artwork": {
|
486
|
+
"locked": "https://live.xbox.com/tiles/QE/eu/0zc8P2NhbC8RWxoEGlxTWTVkL2FjaC8wL2FlAAAAAVBQUPyBR1w=.jpg",
|
487
|
+
"unlocked": ""
|
488
|
+
},
|
489
|
+
"description": "Lure 3 enemies into a single Vigor trap 5 times.",
|
490
|
+
"gamerscore": 25,
|
491
|
+
"secret": false,
|
492
|
+
"unlocked": false
|
493
|
+
},
|
494
|
+
{
|
495
|
+
"id": 29,
|
496
|
+
"title": "Combination Shock",
|
497
|
+
"artwork": {
|
498
|
+
"locked": "https://live.xbox.com/tiles/Kl/Ts/1zc8P2NhbC8XWxoEGlxTWTVkL2FjaC8wL2FjAAAAAVBQUPjDVDY=.jpg",
|
499
|
+
"unlocked": ""
|
500
|
+
},
|
501
|
+
"description": "Perform all 8 of the Vigor combinations.",
|
502
|
+
"gamerscore": 50,
|
503
|
+
"secret": false,
|
504
|
+
"unlocked": false
|
505
|
+
},
|
506
|
+
{
|
507
|
+
"id": 30,
|
508
|
+
"title": "Mind Over Matter",
|
509
|
+
"artwork": {
|
510
|
+
"locked": "https://live.xbox.com/tiles/uv/zD/0zc8P2NhbC8QAxoEGlxTWTVkL2FjaC8wLzlkAAAAAVBQUPzs-KY=.jpg",
|
511
|
+
"unlocked": ""
|
512
|
+
},
|
513
|
+
"description": "Kill 20 enemies using Possessed machines.",
|
514
|
+
"gamerscore": 10,
|
515
|
+
"secret": false,
|
516
|
+
"unlocked": false
|
517
|
+
},
|
518
|
+
{
|
519
|
+
"id": 33,
|
520
|
+
"title": "On the Fly",
|
521
|
+
"artwork": {
|
522
|
+
"locked": "https://live.xbox.com/tiles/PR/bF/1Tc8P2NhbC9DWxoEGlxTWTVkL2FjaC8wL2E3AAAAAVBQUPrqFiE=.jpg",
|
523
|
+
"unlocked": ""
|
524
|
+
},
|
525
|
+
"description": "Kill 30 enemies while riding a Sky-Line.",
|
526
|
+
"gamerscore": 10,
|
527
|
+
"secret": false,
|
528
|
+
"unlocked": false
|
529
|
+
},
|
530
|
+
{
|
531
|
+
"id": 34,
|
532
|
+
"title": "Bolt From the Blue",
|
533
|
+
"artwork": {
|
534
|
+
"locked": "https://live.xbox.com/tiles/ru/4l/1Dc8P2NhbC9CWxoEGlxTWTVkL2FjaC8wL2E2AAAAAVBQUPsK7rI=.jpg",
|
535
|
+
"unlocked": ""
|
536
|
+
},
|
537
|
+
"description": "Kill 5 enemies with a headshot while riding a Sky-Line.",
|
538
|
+
"gamerscore": 25,
|
539
|
+
"secret": false,
|
540
|
+
"unlocked": false
|
541
|
+
},
|
542
|
+
{
|
543
|
+
"id": 36,
|
544
|
+
"title": "Bon Voyage",
|
545
|
+
"artwork": {
|
546
|
+
"locked": "https://live.xbox.com/tiles/4g/ym/0zc8P2NhbC9GWxoEGlxTWTVkL2FjaC8wL2EyAAAAAVBQUPyJDP4=.jpg",
|
547
|
+
"unlocked": ""
|
548
|
+
},
|
549
|
+
"description": "Kill 20 enemies by knocking them off Columbia.",
|
550
|
+
"gamerscore": 25,
|
551
|
+
"secret": false,
|
552
|
+
"unlocked": false
|
553
|
+
},
|
554
|
+
{
|
555
|
+
"id": 37,
|
556
|
+
"title": "Skeet Shoot",
|
557
|
+
"artwork": {
|
558
|
+
"locked": "https://live.xbox.com/tiles/Wk/Fv/1zc8P2NhbC9MAxoEGlxTWTVkL2FjaC8wLzk4AAAAAVBQUPhAQUY=.jpg",
|
559
|
+
"unlocked": ""
|
560
|
+
},
|
561
|
+
"description": "Kill 5 enemies while they are falling.",
|
562
|
+
"gamerscore": 25,
|
563
|
+
"secret": false,
|
564
|
+
"unlocked": false
|
565
|
+
},
|
566
|
+
{
|
567
|
+
"id": 38,
|
568
|
+
"title": "Lost Weekend",
|
569
|
+
"artwork": {
|
570
|
+
"locked": "https://live.xbox.com/tiles/i0/AA/0Dc8P2NhbC9NAhoEGlxTWTVkL2FjaC8wLzg5AAAAAVBQUP8vQJc=.jpg",
|
571
|
+
"unlocked": ""
|
572
|
+
},
|
573
|
+
"description": "Kill 5 enemies while you are drunk.",
|
574
|
+
"gamerscore": 10,
|
575
|
+
"secret": false,
|
576
|
+
"unlocked": false
|
577
|
+
},
|
578
|
+
{
|
579
|
+
"id": 40,
|
580
|
+
"title": "Heartbreaker",
|
581
|
+
"artwork": {
|
582
|
+
"locked": "https://live.xbox.com/tiles/VF/VI/1Dc8P2NhbC9DAxoEGlxTWTVkL2FjaC8wLzk3AAAAAVBQUPtnVUg=.jpg",
|
583
|
+
"unlocked": ""
|
584
|
+
},
|
585
|
+
"description": "Kill a Handyman by only shooting his heart.",
|
586
|
+
"gamerscore": 50,
|
587
|
+
"secret": false,
|
588
|
+
"unlocked": false
|
589
|
+
},
|
590
|
+
{
|
591
|
+
"id": 43,
|
592
|
+
"title": "Raising the Bar",
|
593
|
+
"artwork": {
|
594
|
+
"locked": "https://live.xbox.com/tiles/nA/0C/0Dc8P2NhbC8SAxoEGlxTWTVkL2FjaC8wLzlmAAAAAVBQUP8tDYA=.jpg",
|
595
|
+
"unlocked": ""
|
596
|
+
},
|
597
|
+
"description": "Upgrade one attribute (Health, Shield, or Salts) to its maximum level.",
|
598
|
+
"gamerscore": 10,
|
599
|
+
"secret": false,
|
600
|
+
"unlocked": false
|
601
|
+
},
|
602
|
+
{
|
603
|
+
"id": 44,
|
604
|
+
"title": "Infused with Greatness",
|
605
|
+
"artwork": {
|
606
|
+
"locked": "https://live.xbox.com/tiles/70/dl/1zc8P2NhbC9EAhoEGlxTWTVkL2FjaC8wLzgwAAAAAVBQUPhKR-M=.jpg",
|
607
|
+
"unlocked": ""
|
608
|
+
},
|
609
|
+
"description": "Collect every Infusion upgrade in a single game.",
|
610
|
+
"gamerscore": 25,
|
611
|
+
"secret": false,
|
612
|
+
"unlocked": false
|
613
|
+
},
|
614
|
+
{
|
615
|
+
"id": 45,
|
616
|
+
"title": "Sightseer",
|
617
|
+
"artwork": {
|
618
|
+
"locked": "https://live.xbox.com/tiles/G+/cE/1jc8P2NhbC9BWxoEGlxTWTVkL2FjaC8wL2E1AAAAAVBQUPkr5wc=.jpg",
|
619
|
+
"unlocked": ""
|
620
|
+
},
|
621
|
+
"description": "Use all telescopes and Kinetoscopes in the game.",
|
622
|
+
"gamerscore": 50,
|
623
|
+
"secret": false,
|
624
|
+
"unlocked": false
|
625
|
+
},
|
626
|
+
{
|
627
|
+
"id": 47,
|
628
|
+
"title": "Eavesdropper",
|
629
|
+
"artwork": {
|
630
|
+
"locked": "https://live.xbox.com/tiles/yb/ak/1Dc8P2NhbC9GAhoEGlxTWTVkL2FjaC8wLzgyAAAAAVBQUPuLttU=.jpg",
|
631
|
+
"unlocked": ""
|
632
|
+
},
|
633
|
+
"description": "Collect every Voxophone.",
|
634
|
+
"gamerscore": 50,
|
635
|
+
"secret": false,
|
636
|
+
"unlocked": false
|
637
|
+
},
|
638
|
+
{
|
639
|
+
"id": 50,
|
640
|
+
"title": "Scavenger Hunt",
|
641
|
+
"artwork": {
|
642
|
+
"locked": "https://live.xbox.com/tiles/o6/Xm/0Dc8P2NhbC9AAhoEGlxTWTVkL2FjaC8wLzg0AAAAAVBQUP-Jpb8=.jpg",
|
643
|
+
"unlocked": ""
|
644
|
+
},
|
645
|
+
"description": "Complete the game in 1999 mode without purchasing anything from a Dollar Bill vending machine.",
|
646
|
+
"gamerscore": 75,
|
647
|
+
"secret": false,
|
648
|
+
"unlocked": false
|
649
|
+
}
|
650
|
+
],
|
651
|
+
"freshness": "new"
|
652
|
+
},
|
653
|
+
"runtime": 2.122
|
654
|
+
}
|