4
4
5
5
from dataclasses import dataclass
6
6
7
+ from Options import OptionSet
7
8
8
9
from ..game import Game
9
10
from ..game_objective_template import GameObjectiveTemplate
13
14
14
15
@dataclass
15
16
class HyruleWarriorsDefinitiveEditionArchipelagoOptions :
16
- pass
17
+ hyrule_warriors_definitive_edition_unlocked_characters : HyruleWarriorsDefinitiveEditionUnlockedCharacters
17
18
18
19
19
20
class HyruleWarriorsDefinitiveEditionGame (Game ):
@@ -47,17 +48,17 @@ def optional_game_constraint_templates(self) -> List[GameObjectiveTemplate]:
47
48
def game_objective_templates (self ) -> List [GameObjectiveTemplate ]:
48
49
return [
49
50
GameObjectiveTemplate (
50
- label = "Complete STAGE with CHARACTER" ,
51
+ label = "Complete STAGE using CHARACTER" ,
51
52
data = {
52
53
"STAGE" : (self .stages , 1 ),
53
54
"CHARACTER" : (self .characters , 1 ),
54
55
},
55
56
is_time_consuming = False ,
56
57
is_difficult = False ,
57
- weight = 3 ,
58
+ weight = 5 ,
58
59
),
59
60
GameObjectiveTemplate (
60
- label = "Beat the Battle Challenge BATTLE CHALLENGE with CHARACTER" ,
61
+ label = "Beat the Battle Challenge BATTLE CHALLENGE using CHARACTER" ,
61
62
data = {
62
63
"BATTLE CHALLENGE" : (self .battle_challenges , 1 ),
63
64
"CHARACTER" : (self .characters , 1 ),
@@ -67,7 +68,7 @@ def game_objective_templates(self) -> List[GameObjectiveTemplate]:
67
68
weight = 2 ,
68
69
),
69
70
GameObjectiveTemplate (
70
- label = "Beat the Boss Challenge BOSS CHALLENGE with CHARACTER" ,
71
+ label = "Beat the Boss Challenge BOSS CHALLENGE using CHARACTER" ,
71
72
data = {
72
73
"BOSS CHALLENGE" : (self .boss_challenges , 1 ),
73
74
"CHARACTER" : (self .characters , 1 ),
@@ -77,69 +78,35 @@ def game_objective_templates(self) -> List[GameObjectiveTemplate]:
77
78
weight = 2 ,
78
79
),
79
80
GameObjectiveTemplate (
80
- label = "Beat the Ganon's Fury Mission GANON'S FURY with CHARACTER " ,
81
+ label = "Beat the Ganon's Fury Mission GANON'S FURY" ,
81
82
data = {
82
83
"GANON'S FURY" : (self .ganons_fury , 1 ),
83
- "CHARACTER" : (self .characters , 1 ),
84
84
},
85
85
is_time_consuming = True ,
86
86
is_difficult = True ,
87
87
weight = 1 ,
88
88
),
89
89
GameObjectiveTemplate (
90
- label = "Unlock the following Character: CHARACTER" ,
91
- data = {
92
- "CHARACTER" : (self .characters_unlockable , 1 ),
93
- },
94
- is_time_consuming = False ,
95
- is_difficult = False ,
96
- weight = 1 ,
97
- ),
98
- GameObjectiveTemplate (
99
- label = "Unlock the following Weapon: WEAPON" ,
100
- data = {
101
- "WEAPON" : (self .weapons_unlockable , 1 ),
102
- },
103
- is_time_consuming = False ,
104
- is_difficult = False ,
105
- weight = 1 ,
106
- ),
107
- GameObjectiveTemplate (
108
- label = "Reach at least 5% Completion on ADVENTURE_MODE" ,
90
+ label = "Complete NUM stages within the MAP" ,
109
91
data = {
110
- "ADVENTURE_MODE" : (self .adventure_mode_maps , 1 ),
92
+ "NUM" : (lambda : list (range (5 , 31 , 5 )), 1 ),
93
+ "MAP" : (self .adventure_mode_maps , 1 )
111
94
},
112
- is_time_consuming = False ,
95
+ is_time_consuming = True ,
113
96
is_difficult = False ,
114
- weight = 2 ,
97
+ weight = 4
115
98
),
116
99
GameObjectiveTemplate (
117
- label = "Reach at least 10% Completion on ADVENTURE_MODE " ,
100
+ label = "Complete NUM stages within the MAP using CHARACTER " ,
118
101
data = {
119
- "ADVENTURE_MODE" : (self .adventure_mode_maps , 1 ),
102
+ "NUM" : (lambda : list (range (3 , 6 )), 1 ),
103
+ "MAP" : (self .adventure_mode_maps , 1 ),
104
+ "CHARACTER" : (self .characters , 1 )
120
105
},
121
106
is_time_consuming = False ,
122
107
is_difficult = False ,
123
- weight = 2 ,
124
- ),
125
- GameObjectiveTemplate (
126
- label = "Reach at least 25% Completion on ADVENTURE_MODE" ,
127
- data = {
128
- "ADVENTURE_MODE" : (self .adventure_mode_maps , 1 ),
129
- },
130
- is_time_consuming = True ,
131
- is_difficult = False ,
132
- weight = 1 ,
133
- ),
134
- GameObjectiveTemplate (
135
- label = "Reach at least 50% Completion on ADVENTURE_MODE" ,
136
- data = {
137
- "ADVENTURE_MODE" : (self .adventure_mode_maps , 1 ),
138
- },
139
- is_time_consuming = True ,
140
- is_difficult = True ,
141
- weight = 1 ,
142
- ),
108
+ weight = 5
109
+ )
143
110
]
144
111
145
112
@staticmethod
@@ -159,16 +126,21 @@ def ranks() -> List[str]:
159
126
"C Rank" ,
160
127
]
161
128
129
+ def characters (self ) -> List [str ]:
130
+ characters = self .characters_base ()
131
+ characters .extend (sorted (self .archipelago_options .hyrule_warriors_definitive_edition_unlocked_characters .value ))
132
+ return characters
133
+
162
134
@staticmethod
163
- def characters () -> List [str ]:
135
+ def characters_base () -> List [str ]:
164
136
return [
165
- "Link" ,
166
- "Impa" ,
137
+ "Link with the Hylian Sword " ,
138
+ "Impa with the Giant Blade " ,
167
139
"Sheik" ,
168
- "Lana" ,
140
+ "Lana with the Book of Sorcery " ,
169
141
"Darunia" ,
170
- "Zelda" ,
171
- "Ganondorf" ,
142
+ "Zelda with the Rapier " ,
143
+ "Ganondorf with the Great Swords " ,
172
144
"Ruto" ,
173
145
"Agitha" ,
174
146
"Midna" ,
@@ -178,19 +150,7 @@ def characters() -> List[str]:
178
150
"Cia" ,
179
151
"Volga" ,
180
152
"Wizzro" ,
181
- "Twili Midna" ,
182
- "Young Link" ,
183
- "Tingle" ,
184
- "Linkle" ,
185
- "Skull Kid" ,
186
- "Toon Link" ,
187
- "Tetra" ,
188
- "King Daphnes" ,
189
- "Medli" ,
190
- "Marin" ,
191
- "Toon Zelda" ,
192
- "Ravio" ,
193
- "Yuga" ,
153
+ "Linkle with the Twin Crossbows" ,
194
154
]
195
155
196
156
@staticmethod
@@ -200,7 +160,7 @@ def characters_unlockable() -> List[str]:
200
160
"Young Link" ,
201
161
"Tingle" ,
202
162
"Skull Kid" ,
203
- "Toon Link" ,
163
+ "Toon Link with the Light Sword " ,
204
164
"Tetra" ,
205
165
"King Daphnes" ,
206
166
"Medli" ,
@@ -213,19 +173,20 @@ def characters_unlockable() -> List[str]:
213
173
@staticmethod
214
174
def weapons_unlockable () -> List [str ]:
215
175
return [
216
- "Magic Rod" ,
217
- "Great Fairy" ,
218
- "Gauntlets" ,
219
- "Master Sword" ,
220
- "Horse" ,
221
- "Spinner" ,
222
- "Niginata" ,
223
- "Summoning Gate" ,
224
- "Baton" ,
225
- "Dominion Rod" ,
226
- "Trident" ,
227
- "Boots" ,
228
- "Sand Wand" ,
176
+ "Link with the Magic Rod" ,
177
+ "Link & the Great Fairy" ,
178
+ "Link with the Gauntlets" ,
179
+ "Link with the Master Sword" ,
180
+ "Link with the Horse" ,
181
+ "Link with the Spinner" ,
182
+ "Impa with the Naginata" ,
183
+ "Lana with the Spear" ,
184
+ "Lana with the Summoning Gate" ,
185
+ "Zelda with the Baton" ,
186
+ "Zelda with the Dominion Rod" ,
187
+ "Ganondorf with the Trident" ,
188
+ "Linkle with the Boots" ,
189
+ "Toon Link with the Sand Wand" ,
229
190
]
230
191
231
192
@staticmethod
@@ -317,5 +278,12 @@ def ganons_fury() -> List[str]:
317
278
"Survival Battle LV.4" ,
318
279
]
319
280
281
+
320
282
# Archipelago Options
321
- # ...
283
+ class HyruleWarriorsDefinitiveEditionUnlockedCharacters (OptionSet ):
284
+ """What unlockable characters/weapons should be considered for objectives in Hyrule Warriors: Definitive Edition"""
285
+ valid_keys = HyruleWarriorsDefinitiveEditionGame .characters_unlockable () \
286
+ + HyruleWarriorsDefinitiveEditionGame .weapons_unlockable ()
287
+
288
+ default = valid_keys
289
+
0 commit comments