Skip to content

Commit 50b2544

Browse files
committed
Tweak the API for timing_variation-dependent button presses. Clear out both Gimmighoul programs.
1 parent db7cae4 commit 50b2544

File tree

11 files changed

+210
-156
lines changed

11 files changed

+210
-156
lines changed

SerialPrograms/Source/CommonFramework/Panels/UI/PanelElements.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ CollapsibleGroupBox* make_panel_header(
121121
case PokemonAutomation::FasterIfTickPrecise::MUCH_FASTER:
122122
text = html_color_text(
123123
"(This program does not have any special controller requirements. "
124-
"However, it is strongly recommended to use a controller that is tick-precise since the program will run much faster.)",
124+
"However, it is strongly recommended to use a tick-precise controller as the program will run much faster.)",
125125
COLOR_DARKGREEN
126126
);
127127
break;

SerialPrograms/Source/NintendoSwitch/Commands/NintendoSwitch_Commands_Superscalar.cpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -137,27 +137,6 @@ void ssf_issue_scroll(
137137

138138

139139

140-
void ssf_press_button(ProControllerContext& context, Button button){
141-
Milliseconds delay = 3 * 8ms;
142-
Milliseconds hold = 5 * 8ms;
143-
Milliseconds cool = 3 * 8ms;
144-
Milliseconds timing_variation = context->timing_variation();
145-
delay += 2 * timing_variation;
146-
hold += timing_variation;
147-
cool += timing_variation;
148-
ssf_press_button(context, button, delay, hold, cool);
149-
}
150-
void ssf_issue_scroll(ProControllerContext& context, DpadPosition direction){
151-
Milliseconds delay = 3 * 8ms;
152-
Milliseconds hold = 5 * 8ms;
153-
Milliseconds cool = 3 * 8ms;
154-
Milliseconds timing_variation = context->timing_variation();
155-
delay += 2 * timing_variation;
156-
hold += timing_variation;
157-
cool += timing_variation;
158-
ssf_issue_scroll(context, direction, delay, hold, cool);
159-
}
160-
161140

162141

163142

SerialPrograms/Source/NintendoSwitch/Commands/NintendoSwitch_Commands_Superscalar.h

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,41 @@ void ssf_issue_scroll(
108108

109109

110110
//
111-
// These overloads without timing parameters are intended for navigation within
112-
// the Switch settings. They will use "context->timing_variation()" to
113-
// determine the fastest/safest timings to use.
111+
// ptv = plus timing variation
114112
//
115-
void ssf_press_button(ProControllerContext& context, Button button);
116-
void ssf_issue_scroll(ProControllerContext& context, DpadPosition direction);
113+
// These are simple wrappers that add "context->timing_variation()" to
114+
// every timing. Mostly intended for Switch menu navigation where we usually
115+
// attempt fast movements.
116+
//
117+
inline void ssf_press_button_ptv(
118+
ProControllerContext& context,
119+
Button button,
120+
Milliseconds delay = 3*8ms,
121+
Milliseconds hold = 5*8ms,
122+
Milliseconds cool = 3*8ms
123+
){
124+
ssf_press_button(
125+
context, button,
126+
delay + context->timing_variation(),
127+
hold + context->timing_variation(),
128+
cool + context->timing_variation()
129+
);
130+
}
131+
inline void ssf_issue_scroll_ptv(
132+
ProControllerContext& context,
133+
DpadPosition direction,
134+
Milliseconds delay = 3*8ms,
135+
Milliseconds hold = 5*8ms,
136+
Milliseconds cool = 3*8ms
137+
){
138+
ssf_issue_scroll(
139+
context, direction,
140+
delay + context->timing_variation(),
141+
hold + context->timing_variation(),
142+
cool + context->timing_variation()
143+
);
144+
}
145+
117146

118147

119148

SerialPrograms/Source/NintendoSwitch/Controllers/SysbotBase/SysbotBase_ProController.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ ProController_SysbotBase::ProController_SysbotBase(
2626
SysbotBase::SysbotBaseNetwork_Connection& connection,
2727
const ControllerRequirements& requirements
2828
)
29-
: ProControllerWithScheduler(logger, std::chrono::milliseconds(100))
29+
: ProControllerWithScheduler(logger, std::chrono::milliseconds(150))
3030
, m_connection(connection)
3131
, m_stopping(false)
3232
, m_replace_on_next(false)

SerialPrograms/Source/NintendoSwitch/Inference/NintendoSwitch_DateReader.cpp

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ void DateReader::set_hours(
136136
for (size_t attempts = 0; attempts < 10; attempts++){
137137
// Move cursor out of the way.
138138
for (size_t c = 0; c < 7; c++){
139-
ssf_issue_scroll(context, DPAD_LEFT);
139+
ssf_issue_scroll_ptv(context, DPAD_LEFT);
140140
}
141141
context.wait_for_all_requests();
142142
context.wait_for(std::chrono::milliseconds(250));
@@ -157,15 +157,15 @@ void DateReader::set_hours(
157157
// We're done.
158158
if (current_hour == hour){
159159
for (size_t c = 0; c < 7; c++){
160-
ssf_issue_scroll(context, DPAD_RIGHT);
160+
ssf_issue_scroll_ptv(context, DPAD_RIGHT);
161161
}
162162
return;
163163
}
164164

165165
// Move the cursor to the hour.
166-
ssf_issue_scroll(context, DPAD_RIGHT);
167-
ssf_issue_scroll(context, DPAD_RIGHT);
168-
ssf_issue_scroll(context, DPAD_RIGHT);
166+
ssf_issue_scroll_ptv(context, DPAD_RIGHT);
167+
ssf_issue_scroll_ptv(context, DPAD_RIGHT);
168+
ssf_issue_scroll_ptv(context, DPAD_RIGHT);
169169

170170
ImageViewRGB32 us_hours = extract_box_reference(snapshot, m_us_hour);
171171
ImageStats stats_us_hours = image_stats(us_hours);
@@ -175,27 +175,27 @@ void DateReader::set_hours(
175175
uint8_t diff = (24 + (uint8_t)hour - (uint8_t)current_hour) % 12;
176176
if (diff < 6){
177177
for (size_t c = 0; c < diff; c++){
178-
ssf_issue_scroll(context, DPAD_UP);
178+
ssf_issue_scroll_ptv(context, DPAD_UP);
179179
}
180180
}else{
181181
for (size_t c = diff; c < 12; c++){
182-
ssf_issue_scroll(context, DPAD_DOWN);
182+
ssf_issue_scroll_ptv(context, DPAD_DOWN);
183183
}
184184
}
185185
if ((hour < 12) != (current_hour < 12)){
186-
ssf_issue_scroll(context, DPAD_RIGHT);
187-
ssf_issue_scroll(context, DPAD_RIGHT);
188-
ssf_issue_scroll(context, DPAD_DOWN);
186+
ssf_issue_scroll_ptv(context, DPAD_RIGHT);
187+
ssf_issue_scroll_ptv(context, DPAD_RIGHT);
188+
ssf_issue_scroll_ptv(context, DPAD_DOWN);
189189
}
190190
}else{
191191
uint8_t diff = (24 + (uint8_t)hour - (uint8_t)current_hour) % 24;
192192
if (diff < 12){
193193
for (size_t c = 0; c < diff; c++){
194-
ssf_issue_scroll(context, DPAD_UP);
194+
ssf_issue_scroll_ptv(context, DPAD_UP);
195195
}
196196
}else{
197197
for (size_t c = diff; c < 24; c++){
198-
ssf_issue_scroll(context, DPAD_DOWN);
198+
ssf_issue_scroll_ptv(context, DPAD_DOWN);
199199
}
200200
}
201201
}
@@ -356,37 +356,37 @@ DateTime DateReader::read_date_jp(Logger& logger, std::shared_ptr<const ImageRGB
356356

357357
void DateReader::move_cursor(ProControllerContext& context, int current, int desired){
358358
while (current < desired){
359-
ssf_issue_scroll(context, SSF_SCROLL_UP);
359+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
360360
current++;
361361
}
362362
while (current > desired){
363-
ssf_issue_scroll(context, SSF_SCROLL_DOWN);
363+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
364364
current--;
365365
}
366366
}
367367
void DateReader::adjust_year(ProControllerContext& context, int current, int desired){
368368
while (current < desired){
369-
ssf_issue_scroll(context, SSF_SCROLL_UP);
369+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
370370
current++;
371371
}
372372
while (current > desired){
373-
ssf_issue_scroll(context, SSF_SCROLL_DOWN);
373+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
374374
current--;
375375
}
376376
}
377377
void DateReader::adjust_month(ProControllerContext& context, int current, int desired){
378378
int diff = desired - current;
379379
if ((diff >= 0 && diff <= 6) || (diff < 0 && diff < -6)){
380380
while (current != desired){
381-
ssf_issue_scroll(context, SSF_SCROLL_UP);
381+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
382382
current++;
383383
if (current > 12){
384384
current -= 12;
385385
}
386386
}
387387
}else{
388388
while (current != desired){
389-
ssf_issue_scroll(context, SSF_SCROLL_DOWN);
389+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
390390
current--;
391391
if (current < 1){
392392
current += 12;
@@ -398,15 +398,15 @@ void DateReader::adjust_hour_24(ProControllerContext& context, int current, int
398398
int diff = desired - current;
399399
if ((diff >= 0 && diff <= 12) || (diff < 0 && diff < -12)){
400400
while (current != desired){
401-
ssf_issue_scroll(context, SSF_SCROLL_UP);
401+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
402402
current++;
403403
if (current > 23){
404404
current -= 24;
405405
}
406406
}
407407
}else{
408408
while (current != desired){
409-
ssf_issue_scroll(context, SSF_SCROLL_DOWN);
409+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
410410
current--;
411411
if (current < 0){
412412
current += 24;
@@ -418,15 +418,15 @@ void DateReader::adjust_minute(ProControllerContext& context, int current, int d
418418
int diff = desired - current;
419419
if ((diff >= 0 && diff <= 30) || (diff < 0 && diff < -30)){
420420
while (current != desired){
421-
ssf_issue_scroll(context, SSF_SCROLL_UP);
421+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
422422
current++;
423423
if (current > 59){
424424
current -= 60;
425425
}
426426
}
427427
}else{
428428
while (current != desired){
429-
ssf_issue_scroll(context, SSF_SCROLL_DOWN);
429+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
430430
current--;
431431
if (current < 0){
432432
current += 60;
@@ -470,70 +470,70 @@ void DateReader::set_date(
470470
){
471471
if (!cursor_on_right){
472472
for (size_t c = 0; c < 7; c++){
473-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
473+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
474474
}
475475
}
476476
return;
477477
}
478478

479479
// Move cursor to the left.
480480
for (size_t c = 0; c < 7; c++){
481-
ssf_issue_scroll(context, SSF_SCROLL_LEFT);
481+
ssf_issue_scroll_ptv(context, SSF_SCROLL_LEFT);
482482
}
483483

484484
switch (current.first){
485485
case DateFormat::US:{
486486
adjust_month(context, current.second.month, date.month);
487-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
487+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
488488
adjust_year(context, current.second.day, date.day);
489-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
489+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
490490
adjust_year(context, current.second.year, date.year);
491-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
491+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
492492

493493
uint8_t diff = (24 + date.hour - current.second.hour) % 12;
494494
if (diff < 6){
495495
for (size_t c = 0; c < diff; c++){
496-
ssf_issue_scroll(context, SSF_SCROLL_UP);
496+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
497497
}
498498
}else{
499499
for (size_t c = diff; c < 12; c++){
500-
ssf_issue_scroll(context, SSF_SCROLL_DOWN);
500+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
501501
}
502502
}
503503

504-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
504+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
505505
adjust_minute(context, current.second.minute, date.minute);
506-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
506+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
507507
if ((date.hour < 12) != (current.second.hour < 12)){
508-
ssf_issue_scroll(context, SSF_SCROLL_DOWN);
508+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
509509
}
510-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
510+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
511511

512512
break;
513513
}
514514
case DateFormat::EU:
515515
adjust_year(context, current.second.day, date.day);
516-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
516+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
517517
adjust_month(context, current.second.month, date.month);
518-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
518+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
519519
adjust_year(context, current.second.year, date.year);
520-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
520+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
521521
adjust_hour_24(context, current.second.hour, date.hour);
522-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
522+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
523523
adjust_minute(context, current.second.minute, date.minute);
524-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
524+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
525525
break;
526526
case DateFormat::JP:
527527
adjust_year(context, current.second.year, date.year);
528-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
528+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
529529
adjust_month(context, current.second.month, date.month);
530-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
530+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
531531
adjust_year(context, current.second.day, date.day);
532-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
532+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
533533
adjust_hour_24(context, current.second.hour, date.hour);
534-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
534+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
535535
adjust_minute(context, current.second.minute, date.minute);
536-
ssf_issue_scroll(context, SSF_SCROLL_RIGHT);
536+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
537537
break;
538538
}
539539

SerialPrograms/Source/NintendoSwitch/Programs/NintendoSwitch_FastCodeEntry.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,8 +441,8 @@ void enter_alphanumeric_code(
441441
}
442442
);
443443
if (settings.include_plus){
444-
ssf_press_button(context, BUTTON_PLUS);
445-
ssf_press_button(context, BUTTON_PLUS);
444+
ssf_press_button_ptv(context, BUTTON_PLUS);
445+
ssf_press_button_ptv(context, BUTTON_PLUS);
446446
}
447447
ssf_flush_pipeline(context);
448448
}

0 commit comments

Comments
 (0)