Skip to content

Commit 7c9d095

Browse files
committed
legendary reset adjustment, error stats for lgpe programs
1 parent d44bb6d commit 7c9d095

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

SerialPrograms/Source/PokemonLGPE/Programs/ShinyHunting/PokemonLGPE_AlolanTrade.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,17 @@ struct AlolanTrade_Descriptor::Stats : public StatsTracker{
4141
: trades(m_stats["Trades"])
4242
, resets(m_stats["Resets"])
4343
, shinies(m_stats["Shinies"])
44+
, errors(m_stats["Errors"])
4445
{
4546
m_display_order.emplace_back("Trades");
4647
m_display_order.emplace_back("Resets");
4748
m_display_order.emplace_back("Shinies");
49+
m_display_order.emplace_back("Errors", HIDDEN_IF_ZERO);
4850
}
4951
std::atomic<uint64_t>& trades;
5052
std::atomic<uint64_t>& resets;
5153
std::atomic<uint64_t>& shinies;
54+
std::atomic<uint64_t>& errors;
5255
};
5356
std::unique_ptr<StatsTracker> AlolanTrade_Descriptor::make_stats() const{
5457
return std::unique_ptr<StatsTracker>(new Stats());
@@ -79,6 +82,7 @@ AlolanTrade::AlolanTrade()
7982
}
8083

8184
void AlolanTrade::run_trade(SingleSwitchProgramEnvironment& env, JoyconContext& context){
85+
AlolanTrade_Descriptor::Stats& stats = env.current_stats<AlolanTrade_Descriptor::Stats>();
8286
//Talk to NPC, say Yes, select Pokemon from box.
8387
BlackScreenOverWatcher trade_started(COLOR_RED);
8488
int ret = run_until<JoyconContext>(
@@ -91,6 +95,8 @@ void AlolanTrade::run_trade(SingleSwitchProgramEnvironment& env, JoyconContext&
9195
context.wait_for_all_requests();
9296
if (ret != 0){
9397
env.log("Failed to start trade.", COLOR_RED);
98+
stats.errors++;
99+
env.update_stats();
94100
OperationFailedException::fire(
95101
ErrorReport::SEND_ERROR_REPORT,
96102
"Failed to start trade.",
@@ -110,6 +116,8 @@ void AlolanTrade::run_trade(SingleSwitchProgramEnvironment& env, JoyconContext&
110116
);
111117
context.wait_for_all_requests();
112118
if (ret2 != 0){
119+
stats.errors++;
120+
env.update_stats();
113121
env.log("Did not detect end of trade.", COLOR_RED);
114122
OperationFailedException::fire(
115123
ErrorReport::SEND_ERROR_REPORT,

SerialPrograms/Source/PokemonLGPE/Programs/ShinyHunting/PokemonLGPE_FossilRevival.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,17 @@ struct FossilRevival_Descriptor::Stats : public StatsTracker{
4141
: revives(m_stats["Revives"])
4242
, resets(m_stats["Resets"])
4343
, shinies(m_stats["Shinies"])
44+
, errors(m_stats["Errors"])
4445
{
4546
m_display_order.emplace_back("Revives");
4647
m_display_order.emplace_back("Resets");
4748
m_display_order.emplace_back("Shinies");
49+
m_display_order.emplace_back("Errors", HIDDEN_IF_ZERO);
4850
}
4951
std::atomic<uint64_t>& revives;
5052
std::atomic<uint64_t>& resets;
5153
std::atomic<uint64_t>& shinies;
54+
std::atomic<uint64_t>& errors;
5255
};
5356
std::unique_ptr<StatsTracker> FossilRevival_Descriptor::make_stats() const{
5457
return std::unique_ptr<StatsTracker>(new Stats());
@@ -90,6 +93,7 @@ FossilRevival::FossilRevival()
9093
}
9194

9295
void FossilRevival::run_revives(SingleSwitchProgramEnvironment& env, JoyconContext& context){
96+
FossilRevival_Descriptor::Stats& stats = env.current_stats<FossilRevival_Descriptor::Stats>();
9397
//Press A to get to selection
9498
env.log("Starting dialog.");
9599
pbf_press_button(context, BUTTON_A, 100ms, 800ms);
@@ -122,6 +126,8 @@ void FossilRevival::run_revives(SingleSwitchProgramEnvironment& env, JoyconConte
122126
);
123127
context.wait_for_all_requests();
124128
if (ret != 0){
129+
stats.errors++;
130+
env.update_stats();
125131
env.log("Failed to revive fossil.", COLOR_RED);
126132
OperationFailedException::fire(
127133
ErrorReport::SEND_ERROR_REPORT,
@@ -144,6 +150,8 @@ void FossilRevival::run_revives(SingleSwitchProgramEnvironment& env, JoyconConte
144150
);
145151
context.wait_for_all_requests();
146152
if (ret2 != 0){
153+
stats.errors++;
154+
env.update_stats();
147155
env.log("Did not detect summary over.", COLOR_RED);
148156
OperationFailedException::fire(
149157
ErrorReport::SEND_ERROR_REPORT,

SerialPrograms/Source/PokemonLGPE/Programs/ShinyHunting/PokemonLGPE_GiftReset.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@ struct GiftReset_Descriptor::Stats : public StatsTracker{
4040
Stats()
4141
: resets(m_stats["Resets"])
4242
, shinies(m_stats["Shinies"])
43+
, errors(m_stats["Errors"])
4344
{
4445
m_display_order.emplace_back("Resets");
4546
m_display_order.emplace_back("Shinies");
47+
m_display_order.emplace_back("Errors", HIDDEN_IF_ZERO);
4648
}
4749
std::atomic<uint64_t>& resets;
4850
std::atomic<uint64_t>& shinies;
51+
std::atomic<uint64_t>& errors;
4952
};
5053
std::unique_ptr<StatsTracker> GiftReset_Descriptor::make_stats() const{
5154
return std::unique_ptr<StatsTracker>(new Stats());
@@ -104,6 +107,8 @@ void GiftReset::program(SingleSwitchProgramEnvironment& env, CancellableScope& s
104107
);
105108
context.wait_for_all_requests();
106109
if (ret != 0){
110+
stats.errors++;
111+
env.update_stats();
107112
env.log("Failed to receive gift Pokemon.", COLOR_RED);
108113
OperationFailedException::fire(
109114
ErrorReport::SEND_ERROR_REPORT,

SerialPrograms/Source/PokemonLGPE/Programs/ShinyHunting/PokemonLGPE_LegendaryReset.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,15 @@ struct LegendaryReset_Descriptor::Stats : public StatsTracker{
4141
Stats()
4242
: resets(m_stats["Resets"])
4343
, shinies(m_stats["Shinies"])
44+
, errors(m_stats["Errors"])
4445
{
4546
m_display_order.emplace_back("Resets");
4647
m_display_order.emplace_back("Shinies");
48+
m_display_order.emplace_back("Errors", HIDDEN_IF_ZERO);
4749
}
4850
std::atomic<uint64_t>& resets;
4951
std::atomic<uint64_t>& shinies;
52+
std::atomic<uint64_t>& errors;
5053
};
5154
std::unique_ptr<StatsTracker> LegendaryReset_Descriptor::make_stats() const{
5255
return std::unique_ptr<StatsTracker>(new Stats());
@@ -83,6 +86,7 @@ LegendaryReset::LegendaryReset()
8386
}
8487

8588
bool LegendaryReset::run_encounter(SingleSwitchProgramEnvironment& env, JoyconContext& context){
89+
LegendaryReset_Descriptor::Stats& stats = env.current_stats<LegendaryReset_Descriptor::Stats>();
8690
float shiny_coefficient = 1.0;
8791
ShinySoundDetector shiny_detector(env.logger(), [&](float error_coefficient) -> bool{
8892
shiny_coefficient = error_coefficient;
@@ -94,10 +98,12 @@ bool LegendaryReset::run_encounter(SingleSwitchProgramEnvironment& env, JoyconCo
9498
switch (TARGET) {
9599
case Target::mewtwo:
96100
pbf_mash_button(context, BUTTON_A, 3000ms);
97-
pbf_press_button(context, BUTTON_PLUS, 500ms, 500ms);
101+
context.wait_for_all_requests();
102+
pbf_press_button(context, BUTTON_PLUS, 500ms, 100ms);
98103
break;
99104
case Target::snorlax:
100105
pbf_mash_button(context, BUTTON_A, 5000ms);
106+
context.wait_for_all_requests();
101107
pbf_mash_button(context, BUTTON_B, 10000ms);
102108
break;
103109
case Target::electrode:
@@ -118,6 +124,8 @@ bool LegendaryReset::run_encounter(SingleSwitchProgramEnvironment& env, JoyconCo
118124
if (ret == 0) {
119125
env.log("HP boxes detected.");
120126
} else {
127+
stats.errors++;
128+
env.update_stats();
121129
OperationFailedException::fire(
122130
ErrorReport::SEND_ERROR_REPORT,
123131
"run_battle(): Did not detect battle start.",
@@ -171,6 +179,7 @@ void LegendaryReset::program(SingleSwitchProgramEnvironment& env, CancellableSco
171179
env, NOTIFICATION_STATUS_UPDATE,
172180
"No shiny found. Resetting game."
173181
);
182+
context.wait_for_all_requests();
174183

175184
//Reset game
176185
pbf_press_button(context, BUTTON_HOME, 200ms, 2000ms);
@@ -188,6 +197,8 @@ void LegendaryReset::program(SingleSwitchProgramEnvironment& env, CancellableSco
188197
[&](JoyconContext& context) {
189198
while(true){
190199
if (current_time() - start > std::chrono::minutes(5)){
200+
stats.errors++;
201+
env.update_stats();
191202
env.log("Timed out during battle after 5 minutes.", COLOR_RED);
192203
OperationFailedException::fire(
193204
ErrorReport::SEND_ERROR_REPORT,
@@ -210,6 +221,8 @@ void LegendaryReset::program(SingleSwitchProgramEnvironment& env, CancellableSco
210221
context.wait_for_all_requests();
211222
break;
212223
default:
224+
stats.errors++;
225+
env.update_stats();
213226
env.log("Timed out during battle. Stuck, crashed, or took more than 30 seconds for a turn.", COLOR_RED);
214227
OperationFailedException::fire(
215228
ErrorReport::SEND_ERROR_REPORT,
@@ -230,6 +243,8 @@ void LegendaryReset::program(SingleSwitchProgramEnvironment& env, CancellableSco
230243
);
231244
break;
232245
default:
246+
stats.errors++;
247+
env.update_stats();
233248
OperationFailedException::fire(
234249
ErrorReport::SEND_ERROR_REPORT,
235250
"Failed to detect catching menu.",

0 commit comments

Comments
 (0)