-
Notifications
You must be signed in to change notification settings - Fork 1
SWSH EncounterBots
Working Proof-of-Concept for extra bots that shiny hunt or mark hunt for specific encounters in game.
Everything on the official SysBot.NET wiki about Encounter Bot applies.
If you are using any bot that repeatedly goes into battle/camp and your party Pokémon have high friendship, your lead Pokémon is shiny with a loud ability, or you have animations on for some godforsaken reason, you are going to be slow and the bot will probably fumble and fail. This is called a self-inflicted wound. Handle these issues before trying to run the bot.
These are all routines that rely on resetting the game. Since the game is closed and reopened, you will need the latest version of ldn_mitm.
- Gift, Reset, Regigigas, Eternatus, and MotostokeGym are now on the official Wiki.
-
Eldegoss: For the Route 5 Eldegoss encounter. Walks right and then waits for Eldegoss to float into you.
Best location to stand is just to the left of the 3rd post from the right below the line in the road while on the bike.
This is for the Swords of Justice (not Keldeo), Spiritomb, and the Galarian birds (Moltres/Articuno) which respawn upon entering and leaving camp. Galarian Birds are not guaranteed respawn, so if you fail to enter battle, the bot will reset the game. See this demonstration video for this method. You'll also need ldn_mitm for this if you give it any chance to reboot your game.
- You need to despawn the Pokémon of interest and save on top of the spawn.
- Move the Camp button to the first button in your X menu. Buttons can be swapped by pressing Y.
Based on the mechanic where SWSH stores the species/form of the last KO'd Pokémon and has an increased rate of spawning a new one on the next spawn. Refer to this post about the hunting method we are using. This bot will continue to KO Sinistea-1 until something else spawns, which triggers a game reset. This means you need ldn_mitm.
- You must find an Authentic Sinistea and save beside it. This bot is configured for this location specifically:
- Each loop should look like this video. Reposition until you get this motion each time.
- Your first Pokémon's first move should be strong enough to KO Sinistea. Don't forget that Sinistea knows Memento here.
- Don't walk around with your Pokémon in the Crown Tundra. This disrupts last spawn detection.
- Spraying a Max Repel can eliminate hidden Pokémon interference. This method doesn't work on hidden Pokémon, but one of them spawning can use up the stored bonus regardless.
- If you get attacked by Nidoran, it's worth despawning them and letting something more docile spawn.
- If Sinistea is reported as the Pokémon that is found when a streak breaks, it is phony. Note that the code checks both species and form.
This program resets the Max Lair until the legendary Pokémon's IVs match the IVs and Nature specified in StopConditions. It cannot check for shiny -- this isn't determined until the summary screen when the captured Pokémon are offered for the player to select.
The program will reset the ore penalty for quitting the game, so no ore is required.
- Ensure that the current path is winnable as a solo player. The bot only resets while offline.
- Stand in front of the Scientist to start a Dynamax Adventure.
- BotEncounter > EncounterSWSH > MaxLairNoteToPick: Can be set from 1-4. Bot will scroll through the notes to start that particular adventure.
- BotEncounter > EncounterSWSH > MaxLairRentalToPick: Can be set from 1-3. Upon matching, the bot will select that rental and minimize the game.
This program RNG manipulates Pokémon spawning when making curry. It can only control whether a Pokémon spawns and which species is spawned. Traits such as shininess, IVs, and nature are generated by cryptographically-secure PRNG and cannot be controlled.
As with all RNG manipulation, the program can miss but aims for around 27-29 Pokémon per hour if there are no slot restrictions. When it detects the RNG state advancing too quickly, it will wait a few seconds for it to slow down.
The program will start the curry when an appropriate RNG state is found and then wait out the curry. It will reset the game to restore ingredients; no injection is done, only reads.
Information about curry mechanics can be found on this thread.
- You must have exactly 2 Pokémon in your party. This is so the RNG state advances at a reasonable rate. The program is calibrated for 2 Pokémon, so if you want to use more or fewer, edit it yourself.
- Your 2 Pokémon must have enough sociability to attract wild Pokémon. See this table for the minimum values.
- Your bag must have the ingredients and berries you want to use at the top. You can use the Favorite function and then sort by Favorite.
- Move the Camp button in the X menu to the first top left slot. This is to ensure that you can get back into camp if the game reboots.
- Stand in the area you want to hunt. Save the game. Start the program while on the overworld.
These settings require referencing the curry encounter tables.
Take Slumbering Weald as an example:
-
BotEncounter > EncounterSWSH > Curry > SlotTotal: Add up the values under Curry Weight for the area you are searching.
- In this case,
48 + 56 + 64 + 72 + 90 + 90 = 420
.
- In this case,
-
BotEncounter > EncounterSWSH > Curry > TargetSlots: Set the encounter slot ranges you are willing to accept. Set this to cover the entire range if you want no restrictions. Encounter slots are in order and zero-indexed. You can calculate the lower bounds by adding up everything before the slot and subtracting 1. The upper bound is the sum of everything including the slot and subtracting 1.
- For Weezing-1 only, set this field to
0-47
. - For Weezing-1 and Stunfisk-1, set this field to
0-47, 330-419
. - For everything except Orbeetle, set this field to
0-167, 240-419
. - For everything, set this field to
0-419
.
- For Weezing-1 only, set this field to
- BotEncounter > EncounterSWSH > Curry > CurryBerriesToUse: Can be set from 1-10. Ensure that you have enough berries before the program reboots the game.
- BotEncounter > EncounterSWSH > Curry > CurryTimesToCook: Number of times to make a curry before rebooting the game.
- BotEncounter > EncounterSWSH > Curry > CurryTargetChance: Set this for the chance of a curry spawn based on what grade of curry you end with: 0.01 for Koffing, 0.05 for Wobbuffet, and 0.15 for Milcery. It is not possible to get a higher grade with this program since it doesn't cook the curry. For best results, aim for Milcery grade with your ingredient and berries.
-
StopConditions > MarkOnly: Needs to be set as
false
. Curry Pokémon are never generated with a mark; it's added later when you accept it into your party. - Operation > Timings: Needs to be configured appropriately for the program to reboot the game to restore ingredients or recover from errors.
Fishes for a Pokémon at any ripple in the water. All you need to do is stand within range. Detection may be inaccurate in some locations, so please report if you encounter issues!
It would be trivial to convert this into a chain fishing bot that KO's every Pokémon, but I guarantee you the results are not worth it.
This program RNG manipulates the Pokémon that jumps out of the tree in the Insular Sea to find one that matches your StopConditions. It can only control the species spawned and what mark it has. Traits such as shininess, IVs, and nature are generated by cryptographically-secure PRNG and cannot be controlled.
The program will click into and out of the tree until it finds an RNG state where the expected Pokémon matches your target species and mark if set. It should then shake the tree to start the encounter, and if the rest of the Pokémon does not match your StopConditions, it will reset the game to try again.
- Proper handling of Pokédex Recommendations. You can roll one before starting the program if you like, but note that if midnight passes, they will be cleared until the Pokédex is viewed again.
- This program was designed for Applin from the Insular Sea with a Harvest lead. The goal was to be able to transfer this to SV to evolve to Dipplin/Hydrapple. This location has the highest rate of Applin. If you wish to use this program for another tree or another type-pulling ability, you will need to change the source code to have the proper encounter table and set "true" for any Pokémon affected by your lead ability.
Tool for the lazy. Clicking Start copies the global RNG state to clipboard and outputs it in the log.
Attaching controllers clicks A, so if your game is minimized, hover over a different game to avoid resuming.
- 128-bit output is directly from RAM.
- 64-bit output is in the order s0, s1. It is directly read from RAM.
- 64-bit PokeFinder is in the order s0-s1, s2-s3 using the CaptureSight seeds. It is used specifically by PokeFinder.
- 32-bit output is in the order s0, s1, s2, s3, same as CaptureSight output.
- Encounter > DisplaySeedMode: Changes the output to be one 128-bit value, two 64-bit values, or four 32-bit values.
Watches the global RNG state and reports it in the format specified.
- Displays total advances since the bot was started and number of advances since previous reported RNG state.
- Copies the initial RNG state to clipboard when the bot is started.
- Optionally pauses the game by clicking X if
MaxTotalAdvances
is exceeded.
If you want to pause the game's RNG advancements to look at the log, minimize it with the HOME button.
- Encounter > DisplaySeedMode: Changes the output to be one 128-bit value, two 64-bit values, or four 32-bit values. Does not use the PokeFinder format.
- Encounter > MonitorRefreshRate: Interval in milliseconds to check the global RNG state. This can be set as low as 0 for approximately 50 ms refresh rate.
- Encounter > MaxTotalAdvances: Maximum total advances allowed before the bot clicks HOME to pause the game.
- Encounter > BellsAndWhistles: Clicks L-stick every 100 ms to ring the bike bell or whistle, which speeds up RNG advancement. Note that this will slightly stagger your refresh rate since sending commands requires a small extra wait.