Skip to content

Commit 731c61b

Browse files
committed
copy over datespam files
1 parent 961caaa commit 731c61b

File tree

7 files changed

+373
-6
lines changed

7 files changed

+373
-6
lines changed

SerialPrograms/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,8 @@ file(GLOB MAIN_SOURCES
13721372
Source/PokemonLA/Resources/PokemonLA_PokemonSprites.h
13731373
Source/PokemonLA/Resources/PokemonLA_WeatherAndTimeIcons.cpp
13741374
Source/PokemonLA/Resources/PokemonLA_WeatherAndTimeIcons.h
1375+
Source/PokemonLGPE/Commands/PokemonLGPE_DateSpam.cpp
1376+
Source/PokemonLGPE/Commands/PokemonLGPE_DateSpam.h
13751377
Source/PokemonLGPE/Inference/PokemonLGPE_ShinySymbolDetector.cpp
13761378
Source/PokemonLGPE/Inference/PokemonLGPE_ShinySymbolDetector.h
13771379
Source/PokemonLGPE/Programs/Farming/PokemonLGPE_DailyItemRespawnFarmer.cpp

SerialPrograms/Source/NintendoSwitch/Programs/NintendoSwitch_Navigation.cpp

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,105 @@ void home_to_date_time(ProControllerContext& context, bool to_date_change, bool
165165

166166

167167

168+
void home_to_date_time(JoyconContext& context, bool to_date_change, bool fast){
169+
// If (fast == true) this will run faster, but slightly less accurately.
170+
171+
Milliseconds ticksize = context->ticksize();
172+
Milliseconds tv = context->timing_variation();
173+
Milliseconds unit = round_up_to_ticksize(ticksize, 17ms);
174+
if (tv == 0ms){
175+
// Fast version for tick-precise.
176+
177+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 4);
178+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 4);
179+
180+
// Down twice in case we drop one.
181+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 3);
182+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 4);
183+
184+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 0);
185+
186+
// Two A presses in case we drop the 1st one.
187+
pbf_press_button(context, BUTTON_A, 3ms, 0ms);
188+
pbf_press_button(context, BUTTON_A, 3ms, 0ms);
189+
190+
// Just button mash it. lol
191+
{
192+
auto iterations = Milliseconds(1200) / unit + 1;
193+
do{
194+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, unit);
195+
}while (--iterations);
196+
}
197+
{
198+
auto iterations = Milliseconds(336) / unit + 1;
199+
do{
200+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, unit);
201+
}while (--iterations);
202+
}
203+
204+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 3);
205+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 3);
206+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 10);
207+
ssf_press_dpad(context, DPAD_DOWN, 45, 40);
208+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 3);
209+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 3);
210+
211+
if (!to_date_change){
212+
ssf_press_button(context, BUTTON_A, 45);
213+
return;
214+
}
215+
216+
ssf_press_button(context, BUTTON_A, 3);
217+
{
218+
auto iterations = Milliseconds(216) / unit + 1;
219+
do{
220+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, unit);
221+
}while (--iterations);
222+
}
223+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 0);
224+
225+
// // Insert this to move the cursor away from sleep if we messed up.
226+
// ssf_issue_scroll1(SSF_SCROLL_LEFT, 0);
227+
}else{
228+
// Slow version for tick-imprecise controllers.
229+
230+
// ssf_do_nothing(context, 1500ms);
231+
232+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
233+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
234+
235+
// Down twice in case we drop one.
236+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
237+
// ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
238+
239+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
240+
241+
// Two A presses in case we drop the 1st one.
242+
ssf_mash1_button(context, BUTTON_A, 200ms);
243+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN, 2500ms, 2500ms);
244+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT, 500ms, 500ms);
245+
246+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
247+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
248+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 500ms, tv, tv);
249+
ssf_press_right_joystick(context, 128, 224, 1000ms, 300ms, tv);
250+
// ssf_issue_scroll(context, SSF_SCROLL_DOWN, 1000ms, 250ms, tv); // Scroll down
251+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
252+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
253+
254+
if (!to_date_change){
255+
ssf_press_button_ptv(context, BUTTON_A);
256+
return;
257+
}
258+
259+
ssf_press_button_ptv(context, BUTTON_A, 1000ms);
260+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
261+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
262+
}
263+
}
264+
265+
266+
168267

169268
}
170269
}

SerialPrograms/Source/NintendoSwitch/Programs/NintendoSwitch_Navigation.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define PokemonAutomation_NintendoSwitch_Navigation_H
99

1010
#include "NintendoSwitch/Controllers/NintendoSwitch_ProController.h"
11+
#include "NintendoSwitch/Controllers/NintendoSwitch_Joycon.h"
1112

1213
namespace PokemonAutomation{
1314
namespace NintendoSwitch{
@@ -16,6 +17,8 @@ namespace NintendoSwitch{
1617

1718
void home_to_date_time(ProControllerContext& context, bool to_date_change, bool fast);
1819

20+
void home_to_date_time(JoyconContext& context, bool to_date_change, bool fast);
21+
1922

2023

2124
}
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
/* Auto Host Routines
2+
*
3+
* From: https://github.com/PokemonAutomation/
4+
*
5+
*/
6+
7+
#include "ClientSource/Libraries/MessageConverter.h"
8+
#include "NintendoSwitch/Commands/NintendoSwitch_Commands_PushButtons.h"
9+
#include "NintendoSwitch/Commands/NintendoSwitch_Commands_Superscalar.h"
10+
#include "NintendoSwitch/Programs/NintendoSwitch_GameEntry.h"
11+
#include "NintendoSwitch/Programs/NintendoSwitch_Navigation.h"
12+
#include "PokemonLGPE_DateSpam.h"
13+
14+
namespace PokemonAutomation{
15+
namespace NintendoSwitch{
16+
namespace PokemonLGPE{
17+
18+
void neutral_date_skip(JoyconContext& context){
19+
Milliseconds tv = context->timing_variation();
20+
if (tv == 0ms){
21+
pbf_press_button(context, BUTTON_A, 16ms, 8ms);
22+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
23+
ssf_issue_scroll(context, SSF_SCROLL_UP, 0);
24+
pbf_press_button(context, BUTTON_A, 1ms, 0ms);
25+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
26+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
27+
// ssf_press_button(context, BUTTON_A, 2);
28+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
29+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 0);
30+
pbf_press_button(context, BUTTON_A, 16ms, 8ms);
31+
pbf_press_button(context, BUTTON_A, 16ms, 8ms);
32+
for (uint8_t c = 0; c < 6; c++){
33+
ssf_issue_scroll(context, SSF_SCROLL_LEFT, 3);
34+
}
35+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 3);
36+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 0);
37+
}else{
38+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
39+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
40+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
41+
ssf_press_button_ptv(context, BUTTON_A);
42+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
43+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
44+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
45+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
46+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
47+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
48+
for (uint8_t c = 0; c < 6; c++){
49+
ssf_issue_scroll_ptv(context, SSF_SCROLL_LEFT);
50+
}
51+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
52+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
53+
}
54+
}
55+
void roll_date_forward_1(JoyconContext& context, bool fast){
56+
// If (fast == true) this will run faster, but slightly less reliably.
57+
58+
Milliseconds tv = context->timing_variation();
59+
if (tv == 0ms){
60+
uint8_t scroll_delay = fast ? 3 : 4;
61+
uint8_t up_delay = fast ? 2 : 3;
62+
63+
ssf_press_button(context, BUTTON_A, 20, 10);
64+
ssf_issue_scroll(context, SSF_SCROLL_UP, 0);
65+
ssf_press_button(context, BUTTON_A, up_delay);
66+
// ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
67+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
68+
ssf_issue_scroll(context, SSF_SCROLL_UP, up_delay);
69+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
70+
ssf_press_button(context, BUTTON_A, 0);
71+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
72+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
73+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 0);
74+
ssf_press_button(context, BUTTON_A, 20, 10);
75+
}else{
76+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
77+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
78+
ssf_press_button_ptv(context, BUTTON_A);
79+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
80+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP);
81+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
82+
ssf_press_button_ptv(context, BUTTON_A);
83+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
84+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
85+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
86+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
87+
}
88+
89+
}
90+
void roll_date_backward_N(JoyconContext& context, uint8_t skips, bool fast){
91+
// If (fast == true) this will run faster, but slightly less reliably.
92+
93+
if (skips == 0){
94+
return;
95+
}
96+
97+
Milliseconds tv = context->timing_variation();
98+
if (tv == 0ms){
99+
uint8_t scroll_delay = fast ? 3 : 4;
100+
uint8_t up_delay = 3;
101+
102+
ssf_press_button(context, BUTTON_A, 20, 10);
103+
for (uint8_t c = 0; c < skips - 1; c++){
104+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, up_delay);
105+
}
106+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 0);
107+
ssf_press_button(context, BUTTON_A, up_delay);
108+
// ssf_issue_scroll(context, SSF_SCROLL_RIGHT, delay);
109+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
110+
for (uint8_t c = 0; c < skips - 1; c++){
111+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, up_delay);
112+
}
113+
ssf_issue_scroll(context, SSF_SCROLL_DOWN, 0);
114+
ssf_press_button(context, BUTTON_A, up_delay);
115+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
116+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, scroll_delay);
117+
ssf_issue_scroll(context, SSF_SCROLL_RIGHT, 0);
118+
// if (!fast){
119+
// // Add an extra one in case one is dropped.
120+
// ssf_issue_scroll(context, SSF_SCROLL_RIGHT, delay);
121+
// }
122+
ssf_press_button(context, BUTTON_A, 20, 10);
123+
}else{
124+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
125+
if (skips >= 60){
126+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN, 6000ms, 6000ms);
127+
}else{
128+
for (uint8_t c = 0; c < skips; c++){
129+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
130+
}
131+
}
132+
ssf_press_button_ptv(context, BUTTON_A);
133+
// ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
134+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
135+
if (skips >= 60){
136+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN, 6000ms, 6000ms);
137+
}else{
138+
for (uint8_t c = 0; c < skips; c++){
139+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
140+
}
141+
}
142+
ssf_press_button_ptv(context, BUTTON_A);
143+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
144+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
145+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
146+
// if (!fast){
147+
// // Add an extra one in case one is dropped.
148+
// ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
149+
// }
150+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
151+
}
152+
153+
154+
}
155+
void touch_date_from_home(JoyconContext& context, Milliseconds settings_to_home_delay){
156+
// Touch the date without changing it. This prevents unintentional rollovers.
157+
158+
home_to_date_time(context, true, true);
159+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
160+
161+
ssf_press_button_ptv(context, BUTTON_A, 0ms);
162+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
163+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
164+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
165+
ssf_press_button_ptv(context, BUTTON_A, 0ms);
166+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
167+
168+
ssf_issue_scroll_ptv(context, SSF_SCROLL_LEFT);
169+
ssf_issue_scroll_ptv(context, SSF_SCROLL_UP, 16ms);
170+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT, 0ms);
171+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
172+
173+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
174+
ssf_issue_scroll_ptv(context, SSF_SCROLL_LEFT);
175+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN, 16ms);
176+
ssf_press_button(context, BUTTON_HOME, settings_to_home_delay, 80ms);
177+
}
178+
void rollback_hours_from_home(
179+
JoyconContext& context,
180+
uint8_t hours,
181+
Milliseconds settings_to_home_delay
182+
){
183+
home_to_date_time(context, true, false);
184+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
185+
186+
ssf_press_button_ptv(context, BUTTON_A, 0ms);
187+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
188+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
189+
for (uint8_t c = 0; c < hours; c++){
190+
ssf_issue_scroll_ptv(context, SSF_SCROLL_DOWN);
191+
}
192+
ssf_press_button_ptv(context, BUTTON_A, 0ms);
193+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
194+
ssf_issue_scroll_ptv(context, SSF_SCROLL_RIGHT);
195+
196+
ssf_press_button_ptv(context, BUTTON_A, 160ms, 80ms);
197+
ssf_press_button(context, BUTTON_HOME, settings_to_home_delay, 80ms);
198+
}
199+
200+
201+
202+
203+
204+
}
205+
206+
}
207+
}
208+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/* Date Spamming Routines
2+
*
3+
* From: https://github.com/PokemonAutomation/
4+
*
5+
*/
6+
7+
#ifndef PokemonAutomation_PokemonLGPE_Commands_DateSpam_H
8+
#define PokemonAutomation_PokemonLGPE_Commands_DateSpam_H
9+
10+
#include "CommonFramework/Tools/VideoStream.h"
11+
#include "NintendoSwitch/Controllers/NintendoSwitch_Joycon.h"
12+
13+
namespace PokemonAutomation{
14+
namespace NintendoSwitch{
15+
16+
17+
constexpr uint8_t MAX_YEAR = 60;
18+
19+
20+
namespace PokemonLGPE{
21+
22+
void neutral_date_skip (JoyconContext& context);
23+
void roll_date_forward_1 (JoyconContext& context, bool fast);
24+
void roll_date_backward_N (JoyconContext& context, uint8_t skips, bool fast);
25+
void touch_date_from_home (JoyconContext& context, Milliseconds settings_to_home_delay);
26+
void rollback_hours_from_home(
27+
JoyconContext& context,
28+
uint8_t hours,
29+
Milliseconds settings_to_home_delay
30+
);
31+
32+
}
33+
34+
}
35+
}
36+
#endif

0 commit comments

Comments
 (0)