Jump to content

Recommended Posts

Posted

Anyway, here is how I modified the IVs for Espeon and Umbreon.

1. Use RNGReporter, open GameCube Time Finder, to find the wanted IVs with Colo method. (image in spoiler)

Spoiler

capture.png


2. Then, I took the PID that is wanted, and run a python script, on an online compiler. (website for running python script)

Spoiler

Example of what it looks like:
capture2.png

Explanation:
(1) Blue box. Change the value to 2 if you want to use the found PID as Espeon's PID.
Change the value to 3 if you want to use the found PID as Umbreon's PID.

(2) Blue box. Input the PID found in Step 1.

(3) Green box. Press Execute

(4) Blue box. TID/SID combo calculate for you.


Script that you would have to copy and paste over to the website (credits to TuxSH)


# Imported from TuxSH's work
def GCRNG(seed):
    return ((seed * 0x000343fd) + 0x00269ec3) & 0xffffffff

def GCRNG_R(seed):
    return ((seed * 0xb9b33155) + 0xa170f641) & 0xffffffff

def apply(f, n, x):
    for i in range(n):
        x = f(x)
    return x
            
def findFrame(val):
    ret = []
    val = val & 0xffffffff
    x = val & 0xffff0000
    for i in range(2**16):
        if (GCRNG(x|i) >> 16) == (val & 0xffff): ret.append(x|i)
    return ret
    
def generateU32(seed, dist=0):
    seed = apply(GCRNG if dist >= 0 else GCRNG_R, abs(dist), seed)
    return (seed & 0xffff0000) | (GCRNG(seed) >> 16)

def pkmFromIVSeed(seed):
    #oldpid = generateU32(seed, -2) A value for the PID that is always overwritten, two RNG calls
    
    # Then two RNG calls for the IVs
    ivs_abil = generateU32(seed)
    abil = ((GCRNG(GCRNG(seed)) >> 16) & 1) != 0 # And one for the Ability (if odd, second Ability if it exists)
    PID = generateU32(seed, 3) # Depends. For Pokmon where there is no constraint (e.g shininess), 2 calls.
    order_2 = [1,2,0]
    IVs = [((ivs_abil >> 16) >> (5*i)) & 0x1f for i in range(3)] + [(ivs_abil >> (5*order_2[i])) & 0x1f for i in range(3)]
    return "PID: {0}, ".format(hex(PID)) + "Abil. {0}, IVs: {1}/{2}/{3}/{4}/{5}/{6}".format(2 if abil else 1, *IVs)
    
def genText(seed, c):
    # Either the frame corresponding to the PID or the TID itself
    ids_seed = apply(GCRNG_R, 7 if c == 2 else 14, seed) if c != 1 else seed
    
    ids = generateU32(ids_seed)
    TID, SID = (ids >> 16), (ids & 0xffff)
    umbr = apply(GCRNG, 4, ids_seed)
    esp = apply(GCRNG, 11, ids_seed)
    s = """TID/SID: {0}/{1} (TID frame: {2})
    Umbreon: {3}
    Espeon: {4}""".format(TID, SID, hex(ids_seed), pkmFromIVSeed(umbr), pkmFromIVSeed(esp))
    return s
    
        

if __name__ == '__main__':
    c = -1
    while c not in (1,2,3):
        print("""Please select the value you will provide:
        \t1. Your TID/SID
        \t2. Umbreon's PID
        \t3. Espeon's PID""")
        try: c = int(1)
        except ValueError: continue
    
    seeds = []
    if c == 1:
        TID = 0x7C46
        SID = 0x63D
        seeds = findFrame((TID << 16) | SID)
    else:
        PID = 0xa3ee114d
        seeds = findFrame(PID)
    print("")
    print("\n\nOR\n\n".join(genText(seed, c) for seed in seeds))

 


3. Input details in PKHeX
capture3.png

Posted

I wrote a similar script for @dji (I have since tweaked it since its original concept since you can't have a perfect umbreon and a perfect espeon from the same trainer).

https://repl.it/@kbatman/ColoStarterGenerator 

https://repl.it/@kbatman/PerfectColoStarters

The problem he has now is that he has a TID/SID that he wants, there are issues with changing his TID/SID in his save to the target.

ME3wQOmDQGiveO6hJo7dAA.png?width=847&hei

  • Like 1
Posted
4 minutes ago, Sabresite said:

I wrote a similar script for @dji (I have since tweaked it since its original concept since you can't have a perfect umbreon and a perfect espeon from the same trainer).

https://repl.it/@kbatman/ColoStarterGenerator 

https://repl.it/@kbatman/PerfectColoStarters

The problem he has now is that he has a TID/SID that he wants, there are issues with changing his TID/SID in his save to the target.

ME3wQOmDQGiveO6hJo7dAA.png?width=847&hei

yeah, he PM'd me the cloned umbreon entry problem.

Posted

I recommended @dji to use PkmGCtools to make the modification, and the duplication stopped occurring.

Not sure if it is implement something differently from PKHeX.
Just bringing it up, as some sort of heads up @Sabresite @Kaphotics
(I understand that without further details probably isn't fixable. If other users report noticing this, then it may be something worth investigating)

I say it'll be good if @dji can provide us with 2 saves:
1. modify umbreon on PKHeX
2. modify umbreon on PKMGCtools

This way, we can compare the difference.

  • 6 years later...
Posted
On 2/6/2018 at 2:51 AM, theSLAYER said:

Anyway, here is how I modified the IVs for Espeon and Umbreon.

1. Use RNGReporter, open GameCube Time Finder, to find the wanted IVs with Colo method. (image in spoiler)

  Reveal hidden contents

capture.png


2. Then, I took the PID that is wanted, and run a python script, on an online compiler. (website for running python script)

  Hide contents

Example of what it looks like:
capture2.png

Explanation:
(1) Blue box. Change the value to 2 if you want to use the found PID as Espeon's PID.
Change the value to 3 if you want to use the found PID as Umbreon's PID.

(2) Blue box. Input the PID found in Step 1.

(3) Green box. Press Execute

(4) Blue box. TID/SID combo calculate for you.


Script that you would have to copy and paste over to the website (credits to TuxSH)

# Imported from TuxSH's work
def GCRNG(seed):
    return ((seed * 0x000343fd) + 0x00269ec3) & 0xffffffff

def GCRNG_R(seed):
    return ((seed * 0xb9b33155) + 0xa170f641) & 0xffffffff

def apply(f, n, x):
    for i in range(n):
        x = f(x)
    return x
            
def findFrame(val):
    ret = []
    val = val & 0xffffffff
    x = val & 0xffff0000
    for i in range(2**16):
        if (GCRNG(x|i) >> 16) == (val & 0xffff): ret.append(x|i)
    return ret
    
def generateU32(seed, dist=0):
    seed = apply(GCRNG if dist >= 0 else GCRNG_R, abs(dist), seed)
    return (seed & 0xffff0000) | (GCRNG(seed) >> 16)

def pkmFromIVSeed(seed):
    #oldpid = generateU32(seed, -2) A value for the PID that is always overwritten, two RNG calls
    
    # Then two RNG calls for the IVs
    ivs_abil = generateU32(seed)
    abil = ((GCRNG(GCRNG(seed)) >> 16) & 1) != 0 # And one for the Ability (if odd, second Ability if it exists)
    PID = generateU32(seed, 3) # Depends. For Pokmon where there is no constraint (e.g shininess), 2 calls.
    order_2 = [1,2,0]
    IVs = [((ivs_abil >> 16) >> (5*i)) & 0x1f for i in range(3)] + [(ivs_abil >> (5*order_2[i])) & 0x1f for i in range(3)]
    return "PID: {0}, ".format(hex(PID)) + "Abil. {0}, IVs: {1}/{2}/{3}/{4}/{5}/{6}".format(2 if abil else 1, *IVs)
    
def genText(seed, c):
    # Either the frame corresponding to the PID or the TID itself
    ids_seed = apply(GCRNG_R, 7 if c == 2 else 14, seed) if c != 1 else seed
    
    ids = generateU32(ids_seed)
    TID, SID = (ids >> 16), (ids & 0xffff)
    umbr = apply(GCRNG, 4, ids_seed)
    esp = apply(GCRNG, 11, ids_seed)
    s = """TID/SID: {0}/{1} (TID frame: {2})
    Umbreon: {3}
    Espeon: {4}""".format(TID, SID, hex(ids_seed), pkmFromIVSeed(umbr), pkmFromIVSeed(esp))
    return s
    
        

if __name__ == '__main__':
    c = -1
    while c not in (1,2,3):
        print("""Please select the value you will provide:
        \t1. Your TID/SID
        \t2. Umbreon's PID
        \t3. Espeon's PID""")
        try: c = int(1)
        except ValueError: continue
    
    seeds = []
    if c == 1:
        TID = 0x7C46
        SID = 0x63D
        seeds = findFrame((TID << 16) | SID)
    else:
        PID = 0xa3ee114d
        seeds = findFrame(PID)
    print("")
    print("\n\nOR\n\n".join(genText(seed, c) for seed in seeds))

 


3. Input details in PKHeX
capture3.png

Going to necro this thread but do you happen to know if there is a similar script available for Eevee in XD?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...