Skip to content

Commit 9c8cbe6

Browse files
committed
Fix Egg Autonomous for SBB.
1 parent b5a234a commit 9c8cbe6

File tree

3 files changed

+40
-39
lines changed

3 files changed

+40
-39
lines changed

SerialPrograms/Source/CommonFramework/Globals.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace PokemonAutomation{
2525
const bool IS_BETA_VERSION = true;
2626
const int PROGRAM_VERSION_MAJOR = 0;
2727
const int PROGRAM_VERSION_MINOR = 51;
28-
const int PROGRAM_VERSION_PATCH = 11;
28+
const int PROGRAM_VERSION_PATCH = 12;
2929

3030
const std::string PROGRAM_VERSION_BASE =
3131
"v" + std::to_string(PROGRAM_VERSION_MAJOR) +

SerialPrograms/Source/PokemonSwSh/Programs/EggPrograms/PokemonSwSh_EggAutonomous.cpp

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ EggAutonomous_Descriptor::EggAutonomous_Descriptor()
5656
"Automatically fetch+hatch eggs and keep all shinies.",
5757
FeedbackType::REQUIRED,
5858
AllowCommandsWhenRunning::DISABLE_COMMANDS,
59-
{SerialPABotBase::OLD_NINTENDO_SWITCH_DEFAULT_REQUIREMENTS}
59+
{ControllerFeature::NintendoSwitch_ProController},
60+
FasterIfTickPrecise::NOT_FASTER
6061
)
6162
{}
6263

@@ -266,7 +267,7 @@ void EggAutonomous::program(SingleSwitchProgramEnvironment& env, ProControllerCo
266267
env.console
267268
);
268269
}
269-
pbf_press_button(context, BUTTON_HOME, 160ms, GameSettings::instance().GAME_TO_HOME_DELAY_SAFE0);
270+
ssf_press_button(context, BUTTON_HOME, GameSettings::instance().GAME_TO_HOME_DELAY_SAFE0, 160ms);
270271
env.console.overlay().add_log("Reset game", COLOR_WHITE);
271272
reset_game_from_home_with_inference(
272273
env.console, context,
@@ -309,13 +310,13 @@ bool EggAutonomous::run_batch(
309310
// Each iteration in the while-loop is made by:
310311
// - bike loops of LOOPS_PER_FETCH times. Bike loops begin at lady or nursery front door, end at lady.
311312
// - if not enough eggs fetched, talk to lady to try fetching an egg.
312-
while(num_eggs_hatched < 5 || m_num_eggs_retrieved < 5){
313+
while (num_eggs_hatched < 5 || m_num_eggs_retrieved < 5){
313314
// Detect when Y-Comm icon disappears. This is the time an egg is hatching
314315
const bool y_comm_visible_when_egg_hatching = false;
315316
YCommIconDetector egg_hatching_detector(y_comm_visible_when_egg_hatching);
316317

317318
bool restart_bike_loop = false;
318-
for(size_t i_bike_loop = 0; i_bike_loop < this->LOOPS_PER_FETCH && bike_loop_count < MAX_BIKE_LOOP_COUNT;){
319+
for (size_t i_bike_loop = 0; i_bike_loop < this->LOOPS_PER_FETCH && bike_loop_count < MAX_BIKE_LOOP_COUNT;){
319320
context.wait_for_all_requests();
320321
// +1 here because video overlay is for general users. Genearl users start counts at 1, while us programmers start count at 0.
321322
if (restart_bike_loop){
@@ -384,7 +385,7 @@ bool EggAutonomous::run_batch(
384385
env.log("Take a screenshot of party to debug.");
385386
// Now take a photo at the player's party for dumping debug info:
386387
// Enter Rotom Phone menu
387-
pbf_press_button(context, BUTTON_X, 80ms, GameSettings::instance().OVERWORLD_TO_MENU_DELAY0);
388+
pbf_press_button(context, BUTTON_X, 160ms, GameSettings::instance().OVERWORLD_TO_MENU_DELAY0);
388389
// Select Pokemon App
389390
navigate_to_menu_app(env, env.console, context, POKEMON_APP_INDEX, NOTIFICATION_ERROR_RECOVERABLE);
390391
// From menu enter Pokemon App
@@ -451,8 +452,8 @@ void EggAutonomous::save_game(SingleSwitchProgramEnvironment& env, ProController
451452
env.log("Save game.");
452453
env.console.overlay().add_log("Save game", COLOR_WHITE);
453454
pbf_press_button(context, BUTTON_X, 80ms, GameSettings::instance().OVERWORLD_TO_MENU_DELAY0);
454-
pbf_press_button(context, BUTTON_R, 10, 2 * TICKS_PER_SECOND);
455-
pbf_press_button(context, BUTTON_A, 10, 5 * TICKS_PER_SECOND);
455+
pbf_press_button(context, BUTTON_R, 80ms, 2000ms);
456+
pbf_press_button(context, BUTTON_A, 80ms, 2000ms);
456457
wait_for_y_comm_icon(env, context, "Cannot detect end of saving game.");
457458
}
458459

@@ -536,12 +537,12 @@ size_t EggAutonomous::talk_to_lady_to_fetch_egg(
536537
stats.m_fetch_success++;
537538
env.update_stats();
538539
// Press A to get the egg
539-
ssf_press_button1(context, BUTTON_A, 10);
540+
ssf_press_button(context, BUTTON_A, 320ms, 160ms);
540541

541542
ret = run_until<ProControllerContext>(
542543
env.console, context,
543544
[](ProControllerContext& context){
544-
pbf_mash_button(context, BUTTON_B, TICKS_PER_SECOND * 30);
545+
pbf_mash_button(context, BUTTON_B, 30s);
545546
},
546547
{{dialog_over_detector}}
547548
);
@@ -551,7 +552,7 @@ size_t EggAutonomous::talk_to_lady_to_fetch_egg(
551552
ret = run_until<ProControllerContext>(
552553
env.console, context,
553554
[](ProControllerContext& context){
554-
pbf_mash_button(context, BUTTON_B, TICKS_PER_SECOND * 30);
555+
pbf_mash_button(context, BUTTON_B, 30s);
555556
},
556557
{{dialog_over_detector}}
557558
);
@@ -674,37 +675,37 @@ bool EggAutonomous::process_hatched_pokemon(
674675
send_keep_notification();
675676

676677
// Press A twice to pick the pokemon
677-
ssf_press_button(context, BUTTON_A, 480ms, EGG_BUTTON_HOLD_DELAY);
678-
ssf_press_button(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
678+
ssf_press_button_ptv(context, BUTTON_A, 480ms, EGG_BUTTON_HOLD_DELAY);
679+
ssf_press_button_ptv(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
679680

680681
// Move it rightward, so that it stays on top of the box area
681-
ssf_press_dpad(context, DPAD_RIGHT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
682+
ssf_press_dpad_ptv(context, DPAD_RIGHT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
682683
// Press Button L to change to the box on the left
683-
ssf_press_button(context, BUTTON_L, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
684+
ssf_press_button_ptv(context, BUTTON_L, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
684685

685686
// Because we don't know which place in the box to place the pokemon, we will
686687
// throw the pokemon in the all-box view. So it automatically sit in the first empty slot
687688
// in the box:
688689

689690
// Move it three times upward, so that it stays on top of the "Box List" button
690-
ssf_press_dpad(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
691-
ssf_press_dpad(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
692-
ssf_press_dpad(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
691+
ssf_press_dpad_ptv(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
692+
ssf_press_dpad_ptv(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
693+
ssf_press_dpad_ptv(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
693694

694695
// Press the button to go to box list view
695-
ssf_press_button(context, BUTTON_A, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
696+
ssf_press_button_ptv(context, BUTTON_A, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
696697
// Press button A to drop the pokemon into the box
697-
ssf_press_button(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
698+
ssf_press_button_ptv(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
698699
// Press button B to go back to the last box
699-
ssf_press_button(context, BUTTON_B, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
700+
ssf_press_button_ptv(context, BUTTON_B, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
700701
// Press button R to change to the box on the right, the box with the next batch of eggs
701-
ssf_press_button(context, BUTTON_R, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
702+
ssf_press_button_ptv(context, BUTTON_R, BOX_CHANGE_DELAY, EGG_BUTTON_HOLD_DELAY);
702703
// Move cursor left to point to the last slot in the party
703-
ssf_press_dpad(context, DPAD_LEFT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
704+
ssf_press_dpad_ptv(context, DPAD_LEFT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
704705
// Move cursor downward three times so that it goes to the original place (second slot in the party)
705-
ssf_press_dpad(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
706-
ssf_press_dpad(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
707-
ssf_press_dpad(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
706+
ssf_press_dpad_ptv(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
707+
ssf_press_dpad_ptv(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
708+
ssf_press_dpad_ptv(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
708709

709710
if (m_num_pokemon_kept >= MAX_KEEPERS){
710711
env.log("Max keepers reached. Stopping program...");
@@ -745,8 +746,8 @@ bool EggAutonomous::process_hatched_pokemon(
745746
dialog_detector.make_overlays(dialog_overlay_set);
746747

747748
// Move cursor upward two times to point to "Release" menu item
748-
pbf_press_dpad(context, DPAD_UP, 20, 10);
749-
pbf_press_dpad(context, DPAD_UP, 20, 10);
749+
pbf_press_dpad(context, DPAD_UP, 20, 20);
750+
pbf_press_dpad(context, DPAD_UP, 20, 20);
750751

751752
// Press A to release
752753
pbf_press_button(context, BUTTON_A, 20, 105);
@@ -793,8 +794,8 @@ bool EggAutonomous::process_hatched_pokemon(
793794
// Get eggs to party:
794795

795796
// Move cursor to the first slot in the box
796-
ssf_press_dpad(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
797-
ssf_press_dpad(context, DPAD_RIGHT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
797+
ssf_press_dpad_ptv(context, DPAD_UP, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
798+
ssf_press_dpad_ptv(context, DPAD_RIGHT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
798799

799800
// Press Y twice to change selection method to group selection
800801
pbf_press_button(context, BUTTON_Y, EGG_BUTTON_HOLD_DELAY, 400ms);
@@ -804,17 +805,17 @@ bool EggAutonomous::process_hatched_pokemon(
804805
pbf_press_button(context, BUTTON_A, EGG_BUTTON_HOLD_DELAY, 400ms);
805806
// Move down to selection the entire column
806807
for (size_t c = 0; c < 4; c++){
807-
ssf_press_dpad(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
808+
ssf_press_dpad_ptv(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
808809
}
809810
// Press A to finish the selection
810-
ssf_press_button(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
811+
ssf_press_button_ptv(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
811812

812813
// Move cursor to the second slot in the party
813-
ssf_press_dpad(context, DPAD_LEFT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
814-
ssf_press_dpad(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
814+
ssf_press_dpad_ptv(context, DPAD_LEFT, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
815+
ssf_press_dpad_ptv(context, DPAD_DOWN, BOX_SCROLL_DELAY, EGG_BUTTON_HOLD_DELAY);
815816

816817
// Press A to finish dropping the egg column
817-
ssf_press_button(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
818+
ssf_press_button_ptv(context, BUTTON_A, BOX_PICKUP_DROP_DELAY, EGG_BUTTON_HOLD_DELAY);
818819

819820
// leave pokemon box, back to pokemon app
820821
ssf_press_button(context, BUTTON_B, GameSettings::instance().BOX_TO_POKEMON_DELAY0, EGG_BUTTON_HOLD_DELAY);
@@ -831,7 +832,7 @@ bool EggAutonomous::process_hatched_pokemon(
831832
const int ret = run_until<ProControllerContext>(
832833
env.console, context,
833834
[](ProControllerContext& context){
834-
pbf_mash_button(context, BUTTON_B, 5 * TICKS_PER_SECOND);
835+
pbf_mash_button(context, BUTTON_B, 5000ms);
835836
},
836837
{{y_comm_detector}}
837838
);

SerialPrograms/Source/PokemonSwSh/Programs/PokemonSwSh_MenuNavigation.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ void navigate_to_menu_app(
4949
const DpadPosition dir = (cur_col < target_col ? DPAD_RIGHT : DPAD_LEFT);
5050
const int steps = std::abs(cur_col - target_col);
5151
for(int i = 0; i < steps; i++){
52-
ssf_press_dpad(context, dir, BOX_SCROLL_DELAY, 80ms);
52+
ssf_press_dpad_ptv(context, dir, BOX_SCROLL_DELAY, 80ms);
5353
}
5454

5555
if (cur_row < target_row){
56-
ssf_press_dpad(context, DPAD_DOWN, BOX_SCROLL_DELAY, 80ms);
56+
ssf_press_dpad_ptv(context, DPAD_DOWN, BOX_SCROLL_DELAY, 80ms);
5757
}else if (cur_row > target_row){
58-
ssf_press_dpad(context, DPAD_UP, BOX_SCROLL_DELAY, 80ms);
58+
ssf_press_dpad_ptv(context, DPAD_UP, BOX_SCROLL_DELAY, 80ms);
5959
}
6060

6161
context.wait_for_all_requests();

0 commit comments

Comments
 (0)