@@ -143,6 +143,16 @@ EggRng::EggRng()
143143 LockMode::LOCK_WHILE_RUNNING ,
144144 GameVersion::firered
145145 )
146+ , SOUND (
147+ " <b>Sound:</b><br>"
148+ " Your in-game sound setting. This affects the possible seeds." ,
149+ {
150+ {SoundSetting::Mono, " mono" , " Mono" },
151+ {SoundSetting::Stereo, " stereo" , " Stereo" }
152+ },
153+ LockMode::LOCK_WHILE_RUNNING ,
154+ SoundSetting::Mono
155+ )
146156 , m_target_settings(" Target Settings" )
147157 , EGG_SPECIES (
148158 " <b>Egg Species:</b>" ,
@@ -166,42 +176,6 @@ EggRng::EggRng()
166176 " 70FE" , " 70FE" ,
167177 true
168178 )
169- , HELD_SEED_LIST (
170- " <b>Nearby Held Seeds:</b><br>"
171- " This box should contain a list of seeds (in order) around and including your held seed, with one seed on each line" ,
172- LockMode::LOCK_WHILE_RUNNING ,
173- " D000\n 199A\n 77A1\n AABC\n 280C\n 70FE\n B573\n 02F2\n 8084\n A533\n ED1E" ,
174- " D000\n 199A\n 77A1\n AABC\n 280C\n 70FE\n B573\n 02F2\n 8084\n A533\n ED1E" ,
175- true
176- )
177- , HELD_SEED_BUTTON (
178- " <b>Held Seed Button:</b><br>" ,
179- {
180- {SeedButton::A, " A" , " A" },
181- {SeedButton::Start, " Start" , " Start" },
182- {SeedButton::L, " L" , " L (L=A)" },
183- },
184- LockMode::LOCK_WHILE_RUNNING ,
185- SeedButton::A
186- )
187- , HELD_EXTRA_BUTTON (
188- " <b>Held Seed Extra Button:</b><br>"
189- " Additional button presses that affect the seed." ,
190- {
191- {BlackoutButton::None, " None" , " None" },
192- {BlackoutButton::L, " L" , " Blackout L" },
193- {BlackoutButton::R, " R" , " Blackout R" },
194- },
195- LockMode::LOCK_WHILE_RUNNING ,
196- BlackoutButton::None
197- )
198- , HELD_SEED_DELAY (
199- " <b>Held Seed Delay Time (ms):</b><br>"
200- " The delay between starting the game and advancing past the title screen. Set this to match your held seed.<br>"
201- " <i>If using Ten Lines, select <b>Nintendo Switch 1</b> as your console even if using a Switch 2.</i>" ,
202- LockMode::LOCK_WHILE_RUNNING ,
203- 31338 , 30400 // default, min
204- )
205179 , HELD_ADVANCES (
206180 " <b>Held Advances:</b><br>The total number of RNG advances for your held target." ,
207181 LockMode::LOCK_WHILE_RUNNING ,
@@ -215,48 +189,18 @@ EggRng::EggRng()
215189 " 70FE" , " 70FE" ,
216190 true
217191 )
218- , PICKUP_SEED_LIST (
219- " <b>Nearby Pickup Seeds:</b><br>"
220- " This box should contain a list of seeds (in order) around and including your held seed, with one seed on each line" ,
221- LockMode::LOCK_WHILE_RUNNING ,
222- " D000\n 199A\n 77A1\n AABC\n 280C\n 70FE\n B573\n 02F2\n 8084\n A533\n ED1E" ,
223- " D000\n 199A\n 77A1\n AABC\n 280C\n 70FE\n B573\n 02F2\n 8084\n A533\n ED1E" ,
224- true
225- )
226- , PICKUP_SEED_BUTTON (
227- " <b>Pickup Seed Button:</b><br>" ,
228- {
229- {SeedButton::A, " A" , " A" },
230- {SeedButton::Start, " Start" , " Start" },
231- {SeedButton::L, " L" , " L (L=A)" },
232- },
233- LockMode::LOCK_WHILE_RUNNING ,
234- SeedButton::A
235- )
236- , PICKUP_EXTRA_BUTTON (
237- " <b>Pickup Seed Extra Button:</b><br>"
238- " Additional button presses that affect the seed." ,
239- {
240- {BlackoutButton::None, " None" , " None" },
241- {BlackoutButton::L, " L" , " Blackout L" },
242- {BlackoutButton::R, " R" , " Blackout R" },
243- },
244- LockMode::LOCK_WHILE_RUNNING ,
245- BlackoutButton::None
246- )
247- , PICKUP_SEED_DELAY (
248- " <b>Pickup Seed Delay Time (ms):</b><br>"
249- " The delay between starting the game and advancing past the title screen. Set this to match your held seed.<br>"
250- " <i>If using Ten Lines, select <b>Nintendo Switch 1</b> as your console even if using a Switch 2.</i>" ,
251- LockMode::LOCK_WHILE_RUNNING ,
252- 31338 , 30400 // default, min
253- )
254192 , PICKUP_ADVANCES (
255193 " <b>Pickup Advances:</b><br>The total number of RNG advances for your pickup target." ,
256194 LockMode::LOCK_WHILE_RUNNING ,
257195 10000 , 700 , 1000000000 // default, min
258196 )
259197 , m_program_settings(" Program Settings" )
198+ , SEED_RADIUS (
199+ " <b>Nearby Seed Radius:</b><br>"
200+ " The number of nearby seeds on each side of the target to search when identifying which seed was hit." ,
201+ LockMode::LOCK_WHILE_RUNNING ,
202+ 5 , 1 // default, min
203+ )
260204 , STARTING_POINT (
261205 " <b>Starting Point:</b>" ,
262206 {
@@ -319,25 +263,19 @@ EggRng::EggRng()
319263 PA_ADD_OPTION (m_game_info);
320264 PA_ADD_OPTION (LANGUAGE );
321265 PA_ADD_OPTION (GAME_VERSION );
266+ PA_ADD_OPTION (SOUND );
322267 PA_ADD_OPTION (m_target_settings);
323268 PA_ADD_OPTION (EGG_SPECIES );
324269 PA_ADD_OPTION (COMPATIBILITY );
325270 PA_ADD_OPTION (PARENT_IVS );
326271 PA_ADD_OPTION (m_held_settings);
327272 PA_ADD_OPTION (HELD_SEED );
328- PA_ADD_OPTION (HELD_SEED_LIST );
329- PA_ADD_OPTION (HELD_SEED_BUTTON );
330- PA_ADD_OPTION (HELD_EXTRA_BUTTON );
331- PA_ADD_OPTION (HELD_SEED_DELAY );
332273 PA_ADD_OPTION (HELD_ADVANCES );
333274 PA_ADD_OPTION (m_pickup_settings);
334275 PA_ADD_OPTION (PICKUP_SEED );
335- PA_ADD_OPTION (PICKUP_SEED_LIST );
336- PA_ADD_OPTION (PICKUP_SEED_BUTTON );
337- PA_ADD_OPTION (PICKUP_EXTRA_BUTTON );
338- PA_ADD_OPTION (PICKUP_SEED_DELAY );
339276 PA_ADD_OPTION (PICKUP_ADVANCES );
340277 PA_ADD_OPTION (m_program_settings);
278+ PA_ADD_OPTION (SEED_RADIUS );
341279 PA_ADD_OPTION (STARTING_POINT );
342280 PA_ADD_OPTION (MAX_RESETS );
343281 PA_ADD_OPTION (MAX_BALL_THROWS );
@@ -404,6 +342,8 @@ bool EggRng::reset_and_check_seed(
404342 const uint64_t & SEED_DELAY = frame_target.seed_delay ;
405343 const std::vector<uint16_t >& SEED_VALUES = frame_target.seed_values ;
406344 const int16_t & SEED_POSITION = frame_target.seed_position ;
345+ const SeedButton& SEED_BUTTON = frame_target.seed_button ;
346+ const BlackoutButton& EXTRA_BUTTON = frame_target.extra_button ;
407347
408348 static const int64_t FIXED_SEED_OFFSET = -845 ; // ms, approximate
409349 const int64_t FIXED_ADVANCES_OFFSET = pickup_frame ? -246 : 135 ; // frames, approximate
@@ -439,9 +379,8 @@ bool EggRng::reset_and_check_seed(
439379 // Step 1: reset and perform blind sequence
440380 env.log (" Resetting Game..." );
441381 reset_and_perform_blind_sequence (
442- env.console , context, target,
443- pickup_frame ? PICKUP_SEED_BUTTON : HELD_SEED_BUTTON ,
444- pickup_frame ? PICKUP_EXTRA_BUTTON : HELD_EXTRA_BUTTON ,
382+ env.console , context, target,
383+ SEED_BUTTON , EXTRA_BUTTON ,
445384 timings, launch_delay, false , PROFILE
446385 );
447386 stats.resets ++;
@@ -792,35 +731,37 @@ void EggRng::program(SingleSwitchProgramEnvironment& env, ProControllerContext&
792731 SPECIES_LIST .emplace (slot.species );
793732 }
794733
734+ const SeedsDatabase seeds_db (seeds_json_path (GAME_VERSION == GameVersion::firered, LANGUAGE ));
735+
795736 // held timings
796737 const uint16_t TARGET_HELD_SEED = parse_seed (env.console , HELD_SEED );
797- const std::vector<uint16_t > HELD_SEED_VALUES = parse_seed_list (env.console , HELD_SEED_LIST );
798- const int16_t HELD_SEED_POSITION = seed_position_in_list (TARGET_HELD_SEED , HELD_SEED_VALUES );
799- if (HELD_SEED_POSITION == -1 ){
738+ const SeedMatch held_match = seeds_db.find_seed (TARGET_HELD_SEED , SOUND , SEED_RADIUS );
739+ if (!held_match.found ){
800740 OperationFailedException::fire (
801741 ErrorReport::SEND_ERROR_REPORT ,
802- " EggRng(): Held Seed is missing from the list of nearby seeds ." ,
742+ " EggRng(): Held Seed was not found in the seed database for this game version, language, and sound setting ." ,
803743 env.console
804- );
744+ );
805745 }
806- env.log (" Target Held Seed Value: " + to_hex_string (TARGET_HELD_SEED ));
746+ env.log (" Target Held Seed Value: " + to_hex_string (TARGET_HELD_SEED )
747+ + " (delay " + std::to_string (held_match.seed_delay ) + " ms, button mode " + held_match.button_mode + " )" );
807748
808749 // pickup timings
809750 const uint16_t TARGET_PICKUP_SEED = parse_seed (env.console , PICKUP_SEED );
810- const std::vector<uint16_t > PICKUP_SEED_VALUES = parse_seed_list (env.console , PICKUP_SEED_LIST );
811- const int16_t PICKUP_SEED_POSITION = seed_position_in_list (TARGET_PICKUP_SEED , PICKUP_SEED_VALUES );
812- if (PICKUP_SEED_POSITION == -1 ){
751+ const SeedMatch pickup_match = seeds_db.find_seed (TARGET_PICKUP_SEED , SOUND , SEED_RADIUS );
752+ if (!pickup_match.found ){
813753 OperationFailedException::fire (
814754 ErrorReport::SEND_ERROR_REPORT ,
815- " EggRng(): Pickup Seed is missing from the list of nearby seeds ." ,
755+ " EggRng(): Pickup Seed was not found in the seed database for this game version, language, and sound setting ." ,
816756 env.console
817- );
757+ );
818758 }
819- env.log (" Target Pickup Seed Value: " + to_hex_string (TARGET_PICKUP_SEED ));
759+ env.log (" Target Pickup Seed Value: " + to_hex_string (TARGET_PICKUP_SEED )
760+ + " (delay " + std::to_string (pickup_match.seed_delay ) + " ms, button mode " + pickup_match.button_mode + " )" );
820761
821762 EggFrameTargets frame_targets{
822- { HELD_SEED_DELAY , HELD_SEED_VALUES , HELD_SEED_POSITION },
823- { PICKUP_SEED_DELAY , PICKUP_SEED_VALUES , PICKUP_SEED_POSITION }
763+ { held_match. seed_delay , held_match. seed_values , held_match. seed_position , held_match. seed_button , held_match. extra_button },
764+ { pickup_match. seed_delay , pickup_match. seed_values , pickup_match. seed_position , pickup_match. seed_button , pickup_match. extra_button }
824765 };
825766
826767 // searchers
0 commit comments