Skip to content

Commit 61ddcda

Browse files
committed
Switch 2 day skippers.
1 parent bf26b85 commit 61ddcda

13 files changed

+349
-74
lines changed

SerialPrograms/Source/NintendoSwitch/DevPrograms/TestProgramSwitch.cpp

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ class MacAddressCell : public StringCell{
195195

196196

197197

198+
199+
198200
TestProgram_Descriptor::TestProgram_Descriptor()
199201
: MultiSwitchProgramDescriptor(
200202
"NintendoSwitch:TestProgram",
@@ -305,6 +307,39 @@ void TestProgram::on_press(){
305307

306308

307309

310+
void increment_day(ProControllerContext& context, bool date_us){
311+
ssf_press_button(context, BUTTON_A, 208ms, 80ms);
312+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
313+
ssf_issue_scroll(context, SSF_SCROLL_UP, 24ms, 48ms, 24ms);
314+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
315+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
316+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
317+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
318+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
319+
ssf_press_button(context, BUTTON_A, 256ms, 80ms);
320+
}
321+
void init_view(ProControllerContext& context){
322+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
323+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
324+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
325+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
326+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
327+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
328+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 3);
329+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 3);
330+
ssf_issue_scroll(context, SSF_SCROLL_LEFT, 3);
331+
ssf_press_button(context, BUTTON_A, 256ms, 80ms);
332+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
333+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
334+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
335+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
336+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
337+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
338+
ssf_press_button(context, BUTTON_A, 256ms, 80ms);
339+
}
340+
341+
342+
308343

309344
void TestProgram::program(MultiSwitchProgramEnvironment& env, CancellableScope& scope){
310345
using namespace Kernels;
@@ -325,12 +360,20 @@ void TestProgram::program(MultiSwitchProgramEnvironment& env, CancellableScope&
325360
ProControllerContext context(scope, console.pro_controller());
326361
VideoOverlaySet overlays(overlay);
327362

363+
init_view(context);
328364

365+
// while (true){
366+
// increment_day(context, true);
367+
// }
368+
369+
370+
371+
#if 0
329372
// ssf_issue_scroll(context, DPAD_LEFT, 48ms, 48ms, 24ms);
330373
ssf_press_button(context, BUTTON_A, 96ms, 48ms, 24ms);
331374
ssf_press_button(context, BUTTON_L, 0ms, 48ms, 24ms);
332375
ssf_issue_scroll(context, DPAD_LEFT, 48ms, 48ms, 24ms);
333-
376+
#endif
334377

335378
#if 0
336379
DateReader reader;

SerialPrograms/Source/NintendoSwitch/Programs/DateSpam/NintendoSwitch_NeutralDateSkip.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,24 @@ void neutral_date_skip_switch1_sbb(ProControllerContext& context){
7171
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
7272
}
7373
void neutral_date_skip_switch2_wired(ProControllerContext& context){
74-
ssf_press_button(context, BUTTON_A, 240ms, 80ms);
74+
ssf_press_button(context, BUTTON_A, 216ms, 80ms);
7575
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
7676
ssf_issue_scroll(context, SSF_SCROLL_UP, 24ms, 48ms, 24ms);
7777
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
7878
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
7979
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8080
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8181
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
82-
ssf_press_button(context, BUTTON_A, 280ms, 80ms);
83-
ssf_press_button(context, BUTTON_A, 240ms, 80ms);
82+
ssf_press_button(context, BUTTON_A, 264ms, 80ms);
83+
ssf_press_button(context, BUTTON_A, 216ms, 80ms);
8484
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8585
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 24ms, 48ms, 24ms);
8686
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8787
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8888
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8989
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
9090
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
91-
ssf_press_button(context, BUTTON_A, 280ms, 80ms);
91+
ssf_press_button(context, BUTTON_A, 264ms, 80ms);
9292
}
9393

9494

SerialPrograms/Source/NintendoSwitch/Programs/DateSpam/NintendoSwitch_RollDateBackwardN.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void roll_date_backward_N_Switch1_sbb(ProControllerContext& context, uint8_t ski
116116
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
117117
}
118118
void roll_date_backward_N_Switch2_wired(ProControllerContext& context, uint8_t skips){
119-
ssf_press_button(context, BUTTON_A, 240ms, 80ms);
119+
ssf_press_button(context, BUTTON_A, 216ms, 80ms);
120120
if (skips >= 60){
121121
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 4160ms, 4160ms, 24ms);
122122
}else{
@@ -137,7 +137,7 @@ void roll_date_backward_N_Switch2_wired(ProControllerContext& context, uint8_t s
137137
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
138138
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
139139
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
140-
ssf_press_button(context, BUTTON_A, 280ms, 80ms);
140+
ssf_press_button(context, BUTTON_A, 264ms, 80ms);
141141
}
142142
void roll_date_backward_N(
143143
ConsoleHandle& console, ProControllerContext& context,

SerialPrograms/Source/NintendoSwitch/Programs/DateSpam/NintendoSwitch_RollDateForward1.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void roll_date_forward_1_Switch1_sbb(ProControllerContext& context){
7171
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
7272
}
7373
void roll_date_forward_1_Switch2_wired(ProControllerContext& context){
74-
ssf_press_button(context, BUTTON_A, 240ms, 80ms);
74+
ssf_press_button(context, BUTTON_A, 216ms, 80ms);
7575
ssf_issue_scroll(context, SSF_SCROLL_UP, 24ms, 48ms, 24ms);
7676
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
7777
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
@@ -80,7 +80,7 @@ void roll_date_forward_1_Switch2_wired(ProControllerContext& context){
8080
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8181
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
8282
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
83-
ssf_press_button(context, BUTTON_A, 280ms, 80ms);
83+
ssf_press_button(context, BUTTON_A, 264ms, 80ms);
8484
}
8585
void roll_date_forward_1(
8686
ConsoleHandle& console, ProControllerContext& context,

SerialPrograms/Source/NintendoSwitch/Programs/NintendoSwitch_DateSkippers.h

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,32 @@
88
#define PokemonAutomation_NintendoSwitch_DateSkippers_H
99

1010
#include "NintendoSwitch/Controllers/NintendoSwitch_ProController.h"
11+
#include "CommonFramework/Tools/VideoStream.h"
1112

1213
namespace PokemonAutomation{
1314
namespace NintendoSwitch{
1415
namespace DateSkippers{
1516

1617

17-
void init_view(ProControllerContext& context);
18-
void auto_recovery(ProControllerContext& context);
19-
void increment_day(ProControllerContext& context, bool date_us);
20-
void rollback_year_full(ProControllerContext& context, bool date_us);
21-
void rollback_year_sync(ProControllerContext& context);
22-
void increment_monthday(ProControllerContext& context);
23-
void increment_daymonth(ProControllerContext& context);
24-
void increment_month(ProControllerContext& context, uint8_t days);
25-
void increment_all(ProControllerContext& context);
26-
void increment_all_rollback(ProControllerContext& context);
27-
18+
namespace Switch1{
19+
void init_view(ProControllerContext& context);
20+
void auto_recovery(ProControllerContext& context);
21+
void increment_day_with_feedback(VideoStream& stream, ProControllerContext& context, bool date_us);
22+
void increment_day(ProControllerContext& context, bool date_us);
23+
void rollback_year_full(ProControllerContext& context, bool date_us);
24+
void rollback_year_sync(ProControllerContext& context);
25+
void increment_monthday(ProControllerContext& context);
26+
void increment_daymonth(ProControllerContext& context);
27+
void increment_month(ProControllerContext& context, uint8_t days);
28+
void increment_all(ProControllerContext& context);
29+
void increment_all_rollback(ProControllerContext& context);
30+
}
31+
namespace Switch2{
32+
void init_view(ProControllerContext& context);
33+
void increment_day_us(ProControllerContext& context);
34+
void increment_day_eu(ProControllerContext& context);
35+
void increment_day_jp(ProControllerContext& context);
36+
}
2837

2938

3039

SerialPrograms/Source/PokemonSwSh/Commands/PokemonSwSh_Commands_DateSpam.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,25 +116,25 @@ void touch_date_from_home_switch2(
116116
){
117117
home_to_date_time(console, context, true);
118118

119-
ssf_press_button(context, BUTTON_A, 240ms, 80ms);
119+
ssf_press_button(context, BUTTON_A, 216ms, 80ms);
120120
ssf_issue_scroll(context, SSF_SCROLL_UP, 24ms, 48ms, 24ms);
121121
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
122122
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
123123
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
124124
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
125125
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
126126
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
127-
ssf_press_button(context, BUTTON_A, 280ms, 80ms);
127+
ssf_press_button(context, BUTTON_A, 264ms, 80ms);
128128

129-
ssf_press_button(context, BUTTON_A, 240ms, 80ms);
129+
ssf_press_button(context, BUTTON_A, 216ms, 80ms);
130130
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 24ms, 48ms, 24ms);
131131
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
132132
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
133133
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
134134
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
135135
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
136136
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
137-
ssf_press_button(context, BUTTON_A, 280ms, 80ms);
137+
ssf_press_button(context, BUTTON_A, 264ms, 80ms);
138138

139139
ssf_press_button(context, BUTTON_HOME, settings_to_home_delay, 80ms);
140140
}
@@ -190,7 +190,7 @@ void rollback_hours_from_home_switch2(
190190
){
191191
home_to_date_time(console, context, true);
192192

193-
ssf_press_button(context, BUTTON_A, 240ms, 80ms);
193+
ssf_press_button(context, BUTTON_A, 216ms, 80ms);
194194
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
195195
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
196196
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
@@ -200,7 +200,7 @@ void rollback_hours_from_home_switch2(
200200
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
201201
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
202202
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
203-
ssf_press_button(context, BUTTON_A, 280ms, 80ms);
203+
ssf_press_button(context, BUTTON_A, 264ms, 80ms);
204204

205205
ssf_press_button(context, BUTTON_HOME, settings_to_home_delay, 80ms);
206206
}

SerialPrograms/Source/PokemonSwSh/Programs/DenHunting/PokemonSwSh_DaySkipperEU.cpp

Lines changed: 82 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ DaySkipperEU_Descriptor::DaySkipperEU_Descriptor()
2626
"PokemonSwSh:DaySkipperEU",
2727
STRING_POKEMON + " SwSh", "Day Skipper (EU)",
2828
"ComputerControl/blob/master/Wiki/Programs/PokemonSwSh/DaySkipperEU.md",
29-
"A day skipper for EU date format that. (~7500 skips/hour)",
29+
"A day skipper for EU date format that. (Switch 1: ~7500 skips/hour, Switch 2: 5730 skips/hour)",
3030
FeedbackType::NONE,
3131
AllowCommandsWhenRunning::DISABLE_COMMANDS,
3232
{
3333
ControllerFeature::TickPrecise,
3434
ControllerFeature::NintendoSwitch_ProController,
35-
ControllerFeature::NintendoSwitch_DateSkip,
35+
// ControllerFeature::NintendoSwitch_DateSkip,
3636
}
3737
)
3838
{}
@@ -78,13 +78,11 @@ DaySkipperEU::DaySkipperEU()
7878
}
7979

8080

81-
void DaySkipperEU::program(SingleSwitchProgramEnvironment& env, ProControllerContext& context){
82-
if (context->performance_class() != ControllerPerformanceClass::SerialPABotBase_Wired_125Hz){
83-
throw UserSetupError(
84-
env.logger(),
85-
"This program requires a tick precise wired controller."
86-
);
87-
}
81+
82+
void DaySkipperEU::run_switch1(SingleSwitchProgramEnvironment& env, ProControllerContext& context){
83+
using namespace DateSkippers::Switch1;
84+
85+
bool needs_inference = context->performance_class() != ControllerPerformanceClass::SerialPABotBase_Wired_125Hz;
8886

8987
SkipperStats& stats = env.current_stats<SkipperStats>();
9088
stats.total_skips = SKIPS;
@@ -102,15 +100,20 @@ void DaySkipperEU::program(SingleSwitchProgramEnvironment& env, ProControllerCon
102100
pbf_press_button(context, BUTTON_ZR, 5, 5);
103101

104102
// Setup starting state.
105-
DateSkippers::init_view(context);
106-
DateSkippers::rollback_year_full(context, false);
103+
init_view(context);
104+
rollback_year_full(context, false);
107105
year = 0;
108106

109107
uint16_t correct_count = 0;
110108
while (remaining_skips > 0){
111109
send_program_status_notification(env, NOTIFICATION_PROGRESS_UPDATE);
112110

113-
DateSkippers::increment_day(context, false);
111+
if (needs_inference){
112+
increment_day_with_feedback(env.console, context, false);
113+
}else{
114+
increment_day(context, false);
115+
}
116+
114117

115118
correct_count++;
116119
year++;
@@ -121,16 +124,16 @@ void DaySkipperEU::program(SingleSwitchProgramEnvironment& env, ProControllerCon
121124

122125
if (year >= 60){
123126
if (real_life_year <= 36){
124-
DateSkippers::rollback_year_sync(context);
127+
rollback_year_sync(context);
125128
year = real_life_year;
126129
}else{
127-
DateSkippers::rollback_year_full(context, false);
130+
rollback_year_full(context, false);
128131
year = 0;
129132
}
130133
}
131134
if (CORRECTION_SKIPS != 0 && correct_count == CORRECTION_SKIPS){
132135
correct_count = 0;
133-
DateSkippers::auto_recovery(context);
136+
auto_recovery(context);
134137
}
135138
}
136139

@@ -143,6 +146,70 @@ void DaySkipperEU::program(SingleSwitchProgramEnvironment& env, ProControllerCon
143146
ssf_press_button1(context, BUTTON_A, 15 * TICKS_PER_SECOND);
144147
}
145148
}
149+
void DaySkipperEU::run_switch2(SingleSwitchProgramEnvironment& env, ProControllerContext& context){
150+
using namespace DateSkippers::Switch2;
151+
152+
if (context->performance_class() != ControllerPerformanceClass::SerialPABotBase_Wired_125Hz){
153+
throw UserSetupError(
154+
env.logger(),
155+
"This program requires a tick precise wired controller."
156+
);
157+
}
158+
159+
SkipperStats& stats = env.current_stats<SkipperStats>();
160+
stats.total_skips = SKIPS;
161+
stats.runs++;
162+
163+
uint32_t remaining_skips = SKIPS;
164+
165+
// Connect
166+
pbf_press_button(context, BUTTON_ZR, 5, 5);
167+
168+
// Setup starting state.
169+
init_view(context);
170+
171+
while (remaining_skips > 0){
172+
send_program_status_notification(env, NOTIFICATION_PROGRESS_UPDATE);
173+
174+
increment_day_eu(context);
175+
176+
remaining_skips--;
177+
stats.issued++;
178+
// env.log("Skips Remaining: " + tostr_u_commas(remaining_skips));
179+
env.update_stats();
180+
}
181+
182+
// Prevent the Switch from sleeping and the time from advancing.
183+
context.wait_for_all_requests();
184+
send_program_finished_notification(env, NOTIFICATION_PROGRAM_FINISH);
185+
186+
while (true){
187+
ssf_press_button(context, BUTTON_A, 760ms);
188+
for (int c = 0; c < 10; c++){
189+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 24ms, 48ms, 24ms);
190+
}
191+
ssf_press_button(context, BUTTON_A, 14000ms, 80ms);
192+
}
193+
}
194+
195+
196+
197+
198+
void DaySkipperEU::program(SingleSwitchProgramEnvironment& env, ProControllerContext& context){
199+
ConsoleType console_type = env.console.state().console_type();
200+
if (console_type == ConsoleType::Switch1){
201+
run_switch1(env, context);
202+
return;
203+
}
204+
if (is_switch2(console_type)){
205+
run_switch2(env, context);
206+
return;
207+
}
208+
throw UserSetupError(
209+
env.console,
210+
"Please select a valid Switch console type."
211+
);
212+
}
146213

147214

148215
}

SerialPrograms/Source/PokemonSwSh/Programs/DenHunting/PokemonSwSh_DaySkipperEU.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ class DaySkipperEU : public SingleSwitchProgramInstance{
3131
DaySkipperEU();
3232
virtual void program(SingleSwitchProgramEnvironment& env, ProControllerContext& context) override;
3333

34+
private:
35+
void run_switch1(SingleSwitchProgramEnvironment& env, ProControllerContext& context);
36+
void run_switch2(SingleSwitchProgramEnvironment& env, ProControllerContext& context);
37+
3438
private:
3539
SimpleIntegerOption<uint32_t> SKIPS;
3640
SimpleIntegerOption<uint16_t> REAL_LIFE_YEAR;

0 commit comments

Comments
 (0)