Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dtypes.h
- -----------------------------
- #pragma once
- typedef unsigned long long u64;
- typedef unsigned int u32;
- typedef unsigned short u16;
- typedef unsigned char u8;
- typedef signed long long s64;
- typedef signed int s32;
- typedef signed short s16;
- typedef signed char s8;
- const char *natures[25] = {"Hardy", "Lonely", "Brave", "Adamant", "Naughty", "Bold", "Docile", "Relaxed", "Impish", "Lax", "Timid", "Hasty", "Serious", "Jolly", "Naive", "Modest", "Mild", "Quiet", "Bashful", "Rash", "Calm", "Gentle", "Sassy", "Careful", "Quirky"};
- typedef struct{
- u32 mul;
- u32 add;
- u32 rmul;
- u32 radd;
- } Rand32;
- main.c
- -----------------------------
- #include "stdafx.h"
- #include "dtypes.h"
- void advanceXD(u32 seed, Rand32* search);
- void reverseXD(u32 seed, Rand32* search);
- u16 previewHalfReverse(u32 startSeed, u32 frames, Rand32* search);
- u16 previewHalfAdvance(u32 startSeed, u32 frames, Rand32* search);
- u32 getPID(u32 seed);
- u8 getNature(u32 pid);
- u32 runsearch(u16 ivseed1, u16 ivseed2, u16 upid, u16 lpid);
- u32 runsearch_pid(u16 ivseed1, u16 ivseed2, u16 hpid, u16 lpid);
- u32 runsearch_rev(u16 ivseed1, u16 ivseed2, u16 hpid, u16 lpid);
- u32 runsearch_pid_rev(u16 ivseed1, u16 ivseed2, u16 hpid, u16 lpid);
- void setMagicNumbers(Rand32* search);
- Rand32 nums;
- int _tmain(int argc, _TCHAR* argv[])
- {
- int jirachi = 0;
- u32 pid;
- u8 iv1, iv2, iv3, iv4, iv5, iv6;
- //i only have 2 jirachis to search, might as well automate the process
- switch(jirachi)
- {
- case 0:
- pid = 0x82F76831;
- iv1 = 28;
- iv2 = 11;
- iv3 = 7;
- iv4 = 29;
- iv5 = 17;
- iv6 = 7;
- break;
- case 1:
- pid = 0x7C805A75;
- iv1 = 25;
- iv2 = 0;
- iv3 = 12;
- iv4 = 18;
- iv5 = 26;
- iv6 = 16;
- break;
- default:
- pid = 0;
- iv1 = 0;
- iv2 = 0;
- iv3 = 0;
- iv4 = 0;
- iv5 = 0;
- iv6 = 0;
- }
- //make half seeds out of ivs
- u16 ivseed1 = (iv1 + (iv2 << 5) + (iv3 << 5));
- u16 ivseed2 = (iv6 + (iv4 << 5) + (iv5 << 5));
- //split pids into half seeds
- u16 lpid = pid & 0xFFFF;
- u16 hpid = pid >> 16;
- setMagicNumbers(&nums);
- u32 searchresult = (runsearch(ivseed1, ivseed2, hpid, lpid) || runsearch(ivseed1 + 0x8000, ivseed2, hpid, lpid) || runsearch(ivseed1, ivseed2 + 0x8000, hpid, lpid) || runsearch(ivseed1 + 0x8000, ivseed2 + 0x8000, hpid, lpid));
- searchresult += (runsearch_pid(ivseed1, ivseed2, hpid, lpid) || runsearch_pid(ivseed1 + 0x8000, ivseed2, hpid, lpid) || runsearch_pid(ivseed1, ivseed2 + 0x8000, hpid, lpid) || runsearch_pid(ivseed1 + 0x8000, ivseed2 + 0x8000, hpid, lpid));
- searchresult += (runsearch_rev(ivseed1, ivseed2, hpid, lpid) || runsearch_rev(ivseed1 + 0x8000, ivseed2, hpid, lpid) || runsearch_rev(ivseed1, ivseed2 + 0x8000, hpid, lpid) || runsearch_rev(ivseed1 + 0x8000, ivseed2 + 0x8000, hpid, lpid));
- searchresult += (runsearch_pid_rev(ivseed1, ivseed2, hpid, lpid) || runsearch_pid_rev(ivseed1 + 0x8000, ivseed2, hpid, lpid) || runsearch_pid_rev(ivseed1, ivseed2 + 0x8000, hpid, lpid) || runsearch_pid_rev(ivseed1 + 0x8000, ivseed2 + 0x8000, hpid, lpid));
- if (searchresult > 0)
- {
- printf_s("%X\n\n", searchresult);
- }
- else
- {
- printf_s("No result.\n\n");
- }
- while(1);
- return 0;
- }
- void advanceXD(u32 seed, Rand32* search)
- {
- seed = (seed * search->mul) + search->add;
- }
- void reverseXD(u32 seed, Rand32* search)
- {
- seed = (seed * search->rmul) + search->radd;
- }
- //shows seed on -frames from seed input
- u16 previewHalfReverse(u32 startSeed, u32 frames, Rand32* search)
- {
- for (u32 i = 0; i < frames; i++)
- {
- startSeed = ((startSeed * search->rmul) + search->radd) & 0xFFFFFFFF;
- }
- return (u16)(startSeed >> 16);
- }
- //shows seed on +frames from seed input
- u16 previewHalfAdvance(u32 startSeed, u32 frames, Rand32* search)
- {
- for (u32 i = 0; i < frames; i++)
- {
- startSeed = ((startSeed * search->mul) + search->add) & 0xFFFFFFFF;
- }
- return (u16)(startSeed >> 16);
- }
- //grab xd pid
- u32 getPID(u32 seed)
- {
- u32 pid;
- pid = (u32)((previewHalfAdvance(seed, 3, &nums) << 16) | (previewHalfAdvance(seed, 4, &nums)));
- return pid;
- }
- u8 getNature(u32 pid)
- {
- u8 n = (u8)(pid % 25);
- return n;
- }
- //search starting w/ ivs, ala colo/xd
- u32 runsearch(u16 ivseed1, u16 ivseed2, u16 hpid, u16 lpid)
- {
- u32 seed;
- for (int i = 0; i < 65536; i++)
- {
- seed = (u32)((ivseed2 << 16) + i);
- if ((previewHalfAdvance(seed, 1, &nums) == ivseed1) && (previewHalfAdvance(seed, 2, &nums) == hpid) && (previewHalfAdvance(seed, 3, &nums) == lpid))
- return seed;
- }
- return 0;
- }
- //start with pids like the normal games
- u32 runsearch_pid(u16 ivseed1, u16 ivseed2, u16 hpid, u16 lpid)
- {
- u32 seed;
- for (int i = 0; i < 65536; i++)
- {
- seed = (u32)((hpid << 16) + i);
- if ((previewHalfAdvance(seed, 1, &nums) == lpid) && (previewHalfAdvance(seed, 2, &nums) == ivseed1) && (previewHalfAdvance(seed, 3, &nums) == ivseed2))
- return seed;
- }
- return 0;
- }
- //ivs but going in reverse
- u32 runsearch_rev(u16 ivseed1, u16 ivseed2, u16 hpid, u16 lpid)
- {
- u32 seed;
- for (int i = 0; i < 65536; i++)
- {
- seed = (u32)((ivseed2 << 16) + i);
- if ((previewHalfReverse(seed, 1, &nums) == ivseed1) && (previewHalfReverse(seed, 2, &nums) == hpid) && (previewHalfReverse(seed, 3, &nums) == lpid))
- return seed;
- }
- return 0;
- }
- //pid but going in reverse
- u32 runsearch_pid_rev(u16 ivseed1, u16 ivseed2, u16 hpid, u16 lpid)
- {
- u32 seed;
- for (int i = 0; i < 65536; i++)
- {
- seed = (u32)((hpid << 16) + i);
- if ((previewHalfReverse(seed, 1, &nums) == lpid) && (previewHalfReverse(seed, 2, &nums) == ivseed1) && (previewHalfReverse(seed, 3, &nums) == ivseed2))
- return seed;
- }
- return 0;
- }
- void setMagicNumbers(Rand32* search)
- {
- search->mul = 0x41c64e6d;
- search->add = 0x3039;
- search->rmul = 0xeeb9eb65;
- search->radd = 0xfc77a683;
- }
Advertisement
Add Comment
Please, Sign In to add comment