@@ -54,6 +54,8 @@ LegendaryHuntEmerald::LegendaryHuntEmerald()
5454 " <b>Target:</b><br>" ,
5555 {
5656 {Target::regis, " regis" , " Regirock/Regice/Registeel" },
57+ {Target::groudon, " groudon" , " Groudon" },
58+ {Target::kyogre, " kyogre" , " Kyogre" },
5759 {Target::hooh, " hooh" , " Ho-Oh" },
5860 {Target::lugia, " lugia" , " Lugia" },
5961 },
@@ -129,6 +131,98 @@ void LegendaryHuntEmerald::reset_regi(SingleSwitchProgramEnvironment& env, Switc
129131 // walk back up to the regi
130132 ssf_press_button (context, BUTTON_B, 0 , 60 );
131133 pbf_press_dpad (context, DPAD_UP, 60 , 20 );
134+
135+ context.wait_for_all_requests ();
136+ }
137+
138+ void LegendaryHuntEmerald::reset_groudon (SingleSwitchProgramEnvironment& env, SwitchControllerContext& context) {
139+ // Turn left. Take 10 steps.
140+ ssf_press_button (context, BUTTON_B, 0 , 180 );
141+ pbf_press_dpad (context, DPAD_LEFT, 180 , 20 );
142+
143+ // Turn up. Take 14 steps. (Bump into wall.)
144+ ssf_press_button (context, BUTTON_B, 0 , 240 );
145+ pbf_press_dpad (context, DPAD_UP, 240 , 20 );
146+
147+ // Turn right. Take 2 steps.
148+ ssf_press_button (context, BUTTON_B, 0 , 40 );
149+ pbf_press_dpad (context, DPAD_RIGHT, 40 , 20 );
150+
151+ // Turn up. Take 8 steps (Bump into wall.)
152+ ssf_press_button (context, BUTTON_B, 0 , 140 );
153+ pbf_press_dpad (context, DPAD_UP, 140 , 20 );
154+
155+ // Turn left. Take 4 steps.
156+ ssf_press_button (context, BUTTON_B, 0 , 80 );
157+ pbf_press_dpad (context, DPAD_LEFT, 80 , 20 );
158+
159+ // Turn down. Exit. Black screen over.
160+ BlackScreenOverWatcher exit_area (COLOR_RED, {0.282 , 0.064 , 0.448 , 0.871 });
161+ int ret = run_until<SwitchControllerContext>(
162+ env.console , context,
163+ [](SwitchControllerContext& context){
164+ ssf_press_button (context, BUTTON_B, 0 , 90 );
165+ pbf_press_dpad (context, DPAD_DOWN, 90 , 20 );
166+ pbf_wait (context, 300 );
167+ },
168+ {exit_area}
169+ );
170+ context.wait_for_all_requests ();
171+ if (ret != 0 ){
172+ env.log (" Failed to exit area." , COLOR_RED);
173+ OperationFailedException::fire (
174+ ErrorReport::SEND_ERROR_REPORT,
175+ " Failed to exit area." ,
176+ env.console
177+ );
178+ }
179+ else {
180+ env.log (" Left area." );
181+ }
182+
183+ // Reverse above steps.
184+ BlackScreenOverWatcher enter_area (COLOR_RED, {0.282 , 0.064 , 0.448 , 0.871 });
185+ int ret2 = run_until<SwitchControllerContext>(
186+ env.console , context,
187+ [](SwitchControllerContext& context){
188+ ssf_press_button (context, BUTTON_B, 0 , 90 );
189+ pbf_press_dpad (context, DPAD_UP, 90 , 20 );
190+ pbf_wait (context, 300 );
191+ },
192+ {enter_area}
193+ );
194+ context.wait_for_all_requests ();
195+ if (ret2 != 0 ){
196+ env.log (" Failed to enter area." , COLOR_RED);
197+ OperationFailedException::fire (
198+ ErrorReport::SEND_ERROR_REPORT,
199+ " Failed to enter area." ,
200+ env.console
201+ );
202+ }
203+ else {
204+ env.log (" Entered area." );
205+ }
206+ ssf_press_button (context, BUTTON_B, 0 , 80 );
207+ pbf_press_dpad (context, DPAD_RIGHT, 80 , 20 );
208+
209+ ssf_press_button (context, BUTTON_B, 0 , 140 );
210+ pbf_press_dpad (context, DPAD_DOWN, 140 , 20 );
211+
212+ ssf_press_button (context, BUTTON_B, 0 , 40 );
213+ pbf_press_dpad (context, DPAD_LEFT, 40 , 20 );
214+
215+ ssf_press_button (context, BUTTON_B, 0 , 240 );
216+ pbf_press_dpad (context, DPAD_DOWN, 240 , 20 );
217+
218+ ssf_press_button (context, BUTTON_B, 0 , 180 );
219+ pbf_press_dpad (context, DPAD_RIGHT, 180 , 20 );
220+
221+ context.wait_for_all_requests ();
222+ }
223+
224+ void LegendaryHuntEmerald::reset_kyogre (SingleSwitchProgramEnvironment& env, SwitchControllerContext& context) {
225+
132226}
133227
134228void LegendaryHuntEmerald::reset_hooh (SingleSwitchProgramEnvironment& env, SwitchControllerContext& context) {
@@ -277,9 +371,17 @@ void LegendaryHuntEmerald::program(SingleSwitchProgramEnvironment& env, SwitchCo
277371 */
278372
279373 while (true ) {
280- if (TARGET == Target::hooh) {
374+ switch (TARGET) {
375+ case Target::hooh:
281376 // Step forward to start the encounter.
282- pbf_press_dpad (context, DPAD_UP, 10 , 50 );
377+ pbf_press_dpad (context, DPAD_UP, 20 , 50 );
378+ break ;
379+ case Target::groudon:
380+ pbf_press_dpad (context, DPAD_RIGHT, 20 , 50 );
381+ break ;
382+ case Target::kyogre:
383+ pbf_press_dpad (context, DPAD_LEFT, 20 , 50 );
384+ break ;
283385 }
284386 // handle_encounter presses A already for everything else
285387
@@ -302,6 +404,11 @@ void LegendaryHuntEmerald::program(SingleSwitchProgramEnvironment& env, SwitchCo
302404 case Target::regis:
303405 reset_regi (env, context);
304406 break ;
407+ case Target::groudon:
408+ reset_groudon (env, context);
409+ break ;
410+ case Target::kyogre:
411+ reset_kyogre (env, context);
305412 case Target::hooh:
306413 reset_hooh (env, context);
307414 break ;
0 commit comments