Jump to content

RubenPikachu

Member
  • Posts

    133
  • Joined

  • Last visited

Posts posted by RubenPikachu

  1. Thank you evandixon,

    Are you 100% sure? I am researching the PID generation in XY.

    Since Rubén seems to be good with coding Pokémon, I was wondering if he made these files outside of the game using his apps (or something similar).

    Also, I'll really appreciate it if someone could post more shiny PKX files!

    PD. Please include the gender of the pokémon.

    -Hide

    All pokemon were obtained ingame, the Pikachu was obtained with PokeRadar chain, Magikarp with Consecutive Fishing, all pokemon are unmodified...

    It will be difficult to obtain pkx files with current patch encryption... good luck finding some on the internet

  2. Maybe the correct formula is (id^sid^s1^s2) % 2 == 0 && (id^sid^s1^s2) < 16? I doubt that they are giving us 16/65536 odds this gen instead of usual 8/65536.

    My only shiny Luvdisc has 6. I will be chaining more after my shift is over.

    I got a pkx of a shiny Alakazam that has 11 as the result, so the (id^sid^s1^s2) % 2 == 0 cannot be part of the formula

    shinyalakazam..zip

    shinyalakazam..zip

  3. Are you sure it has 4 at offset 0x15? do you have the pkx file to check it out since all my HA pokemon have the value of 4 and all other have between 1 and 2

    About shiny threshold, it would be needed a shiny pokemon with 15 as the result of XORing the data, and one with 16 to demostrate it...

  4. I got a shiny pkx with the formula equal to 12 it is possible that the formula is (id^sid^s1^s2)< 16 but I'm not sure of it...

    Also found out how ability number (offset 0x15) works, seems it works through bits, bit 0 indicates the pkx has the ability 0 of its species, bit 1 is ability 1 and bit 2 is for Hidden Ability (values are 1 (0), 2 (1) and 4 (HA))

  5. Found out how a pkx is shiny, it uses offset 0x18-0x1B (I'm not sure how the game generates it but acts as a unsigned integer for shiny check), ID and SID

    Like the PID in Gen 5, divide this seed into 16 bit parts, let s1 be the upper part and s2 the lower part

    If (id^sid^s1^s2)<16 then the pokemon is shiny

  6. Obtained Mega stones IDs, they are between Mulchs and the new berries

    656 Gengarite

    657 Gardevoirite

    658 Ampharosite

    659 Venusaurite

    660 Charizardite X

    661 Blastoisinite

    662 Mewtwonite X

    663 Mewtwonite Y

    664 Blazikenite

    665 Medichamite

    666 Houndoominite

    667 Aggronite

    668 Banettite

    669 Tyranitarite

    670 Scizorite

    671 Pinsirite

    672 Aerodactylite

    673 Lucarionite

    674 Abomasite

    675 Kangaskhanite

    676 Gyaradosite

    677 Absolite

    678 Charizardite Y

    679 Alakazite

    680 Heracronite

    681 Mawilite

    682 Manectite

    683 Garchompite

    684 ????

    685 ????

    686 Roseli Berry

  7. Hi,

    I have a question regarding pwt download editor.. Can I put 255 EV's in all of their stats(HP, ATK, DEF etc) of the trainer's pokemon or just only a total of 510 EV's?? Are they more stronger if all of their EV's are 255?

    Settings- Hack editor

    You can put 255 in all stats EV's, however I'm not sure if the game will limit them to 510 EV's...

    Also Hack editor is only for the pkm editor :P

  8. You can set AI value where offset 0x3DC of trainer data in pwt files.

    (0x650, 0xA30, 0xE10 and 0x11F0 bytes from the beginning of the files.)

    This value is set to 0, AI will choose a move randomly.

    AI value
    +1: not choose moves have no effect at the time
    +2: remember moves that the opponent's pokémon used
    +4: if AI's pokémon has a move that can beat the opponent in this turn, choose it
    +8: if AI's pokémon has a status move, choose it on the first turn
    

    Setting to 15 is probably the strongest, but this value cannot be set in PikaEdit...

    Thanks a lot, I didn't have the offsets for difficulty, I have checked more PWT files to check out this and these are the offsets for AI

    I have updated Pikaedit's DTE and the standalone version of DTE with AI difficulty editor on the trainer tab

  9. Seems interesting...

    Finished:

    Gen 5 PKM support(pc/party)

    Gen 5 mystery gifts

    B2W2 daycare storage

    B2W2 battle box storage

    B2W2 party storage

    I'm wondering about mystery gifts, are you planning a wonder card editor and/or injector?

  10. In Download Tournament editor, I keep on getting the name SARAH for important trainers.

    How do you get that name and what do you mean by important trainers (trainers of the tournament or special trainers)? If it is displayed on the trainers tab, that's one of the trainer's name of the tournament... On special trainers on the Bracket tab that name doesn't exist at all...

  11. ---Posts Merged---

    I solved it, it was enough to always put "PWT file" instead of ROM2, but instead of Misty I get Sabrina, strange is not it?

    7TfHGAB.jpgVO8dgmy.jpg

    Edit:I solved this, just reverse the files of the characters, for example if you want to "Blaine" you will have to select "Sabrina."

    sQyvVhV.jpgJXomuf2.jpg

    Then there is a bug on DTE... it is missing a special trainer before the gym leaders... I will be checking the source code to find the bug and fix it...

  12. Ok, I'm back... First of all, have you finished inserting all 4 trainers? DTE has some problems saving if you have only 3 trainers, if that's not the case then change the slots to match this... use slots 1-4 for trainers to battle and slots 5-7 select filler trainers

    Also I downloaded your pwt file and it load some weird stuff like the pkm data is incomplete and there are only two trainers :confused:

    The tournaments you linked seem to have invalid checksums, so they are detected by PWT Editor and the game as corrupt. This could be due to using a hex editor to make changes, or bugs in the tool(s) you used. Since you used RubenPikachu's program, I can't help you with that; even though DTE was built on top of PWT Editor, it implements its own extra features, and I haven't had any tournaments corrupt on me with PWT Editor.

    If you really want to import these, use a hex editor to truncate them to 0x1210 bytes and import them as Raw Data in PWT Editor.

    Well... DTE doesn't fix the checksum when saving a pwt file... the checksum is calculated when injecting a pwt file on the save file...

  13. Well I'm trying to edit a save file Pokedex through Hex editing, I have tested through various save files and got the following offsets, the first 6 have a length of 0x52 bytes with 2 extra bytes that are zeros.

    0x21408 Caught
    0x2145C Seen male
    0x214B0 Seen female
    0x21504 Seen Shiny male
    0x21558 Seen Shiny Female
    0x215AC ????????
    0x21601 ???????
    0x216FC Seen Forms
    0x21728 Languages

    Every Pokemon is given by a bit, however I'm having a problem while editing it when I open the Pokedex and scroll it to a Pokemon I have added seems that the game crashes or the pokemon sprite is grayed out, I think that the offset 0x215AC ???????? is the cause, but I don't know what it is, I know that it is similar to caught and seen offsets however it has different values

    Any help?

  14. Thanks Kaphotics and Prof. 9 for their PWT compiled research, I have mixed it with some of my research and built a working PWT editor with trainer and pokemon editing and I have add it to my program, however since I cannot post it here, I'm going to make a separate version and post it here later...

    TRAINER DATA:

    0x138 = Name (16 characters)

    0x158 = Class (22 characters)

    0x184 = Custom intro message (74 characters)

    0x218 = Custom loss message (74 characters)

    0x2AC = Custom win message (74 characters)

    0x340 = Unknown message (74 characters)

    0x3D4 = Sprite

    0x3D5 = Pre-set intro message

    0x3D6 = Pre-set loss message

    0x3D7 = Pre-set win message

    0x3D8 = In-battle loss message

    0x3D9 = In-battle win message

    0x3DA = Pre-battle Announcer message

    0x3DB = ?

    0x3DC = ? (16-bit) (max: 0xF?)

    0x3DE = ?

    0x3DF = ?

    [/code]

    0x340 = Custom announcer message (74 characters)

    Custom messages are used if pre-set messages values are zero

    I edited the unknown bytes however I don't see any change...

    Structure of PWT-DLC PKMs:

    0x0-0x1: Species

    0x2-0x17: 11 character namefield (after names, they are usually 0xFFFF aka terminators, not characters)

    0x18-0x19: Held Item

    0x1A: Shiny Flag (00 or 01) ~ unconfirmed, hasn't been used except for the ROM tournament

    0x1B: Ability

    0x1C: HP EV

    0x1D: ATK EV

    0x1E: DEF EV

    0x1F: SPE EV

    0x20: SPA EV

    0x21: SPD EV

    0x22-0x23: Move 1

    0x24-0x25: Move 2

    0x26-0x27: Move 3

    0x28-0x29: Move 4

    0x2A: gender? ~ unconfirmed. may just be bitflags for stuff

    0x2B: Nature

    0x2C-0x2F: IVs (stored same way as pkms)

    0x30: ??? always 0. might be secondary sparkle like N's

    0x31: Ball

    0x32: Current Level

    0x33: Happiness

    0x30 = Alternate forms (bit 0-4)

  15. Ok, this is gonna be difficult for me because Java doesn't support unsigned numbers, so I hope this helps

    First this piece of your code is the rand() function that will give you the next seed, however seems you are using the same seed for all bytes

    //Decrypt data

    for (int j=8; j<136; j++){

    x[j] = x[j] ^ Math.round((0x41C64E6D * 0x27dd + 0x6073));

    System.out.println(x[j]);

    }

    Instead use a method and a static variable

    static long seed;
    public static long rand(){
    	seed = (0x41C64E6D * seed + 0x6073) & 0xFFFFFFFF; //This is to make sure it is an unsigned integer
    	return seed>>>16;
    }
    

    Before you assign decrypt the bytes, you must now which order are the blocks shuffled, and the XOR is applied on an Unsigned Short, not a byte

    //block a-b-c-d (0-24)

    Long pid = 3621399865L;

    int a = Math.round(((pid & 0x3E000) >> 0xD) % 24);

    System.out.println(a);

    //Decrypt data

    for (int j=8; j<136; j++){

    x[j] = x[j] ^ Math.round((0x41C64E6D * 0x27dd + 0x6073));

    System.out.println(x[j]);

    }

    First determine the block order using the pid

    int a = Math.round(((pid & 0x3E000) >> 0xD) % 24);
    String order = "";
    switch (a){ //Determine block order
    	case 0: 
    		order = "ABCD";
    		break;
    	case 1: 
    		order = "ABDC";
    		break;
    	case 2: 
    		order = "ACBD";
    		break;
    	case 3: 
    		order = "ACDB";
    		break;
    	case 4: 
    		order = "ADBC";
    		break;
    	case 5: 
    		order = "ADCB";
    		break;
    	case 6: 
    		order = "BACD";
    		break;
    	case 7: 
    		order = "BADC";
    		break;
    	case 8: 
    		order = "BCAD";
    		break;
    	case 9: 
    		order = "BCDA";
    		break;
    	case 10: 
    		order = "BDAC";
    		break;
    	case 11: 
    		order = "BDCA";
    		break;
    	case 12: 
    		order = "CABD";
    		break;
    	case 13: 
    		order = "CADB";
    		break;
    	case 14: 
    		order = "CBAD";
    		break;
    	case 15: 
    		order = "CBDA";
    		break;
    	case 16: 
    		order = "CDAB";
    		break;
    	case 17: 
    		order = "CDBA";
    		break;
    	case 18: 
    		order = "DABC";
    		break;
    	case 19: 
    		order = "DACB";
    		break;
    	case 20: 
    		order = "DBAC";
    		break;
    	case 21: 
    		order = "DBCA";
    		break;
    	case 22: 
    		order = "DCAB";
    		break;
    	case 23: 
    		order = "DCBA";
    		break;
    	}

    Then initialize the seed with the checksum, pkm+(pkm[b+1]<<8) will give you the short for the XOR

    			int checksum = 0x27dd; //Beginning seed is the checksum
    		seed = checksum;
    		byte[] x = new byte[136];
    		int b = 8;
    		long temp=0;
    		for (b=8;b<136;){
    			switch (order.substring(0, 1)){ //Depending on the order unshuffle bytes
    			case "A":
    				for (int j=8; j<0x28; j+=2){
    					temp = (long) (((pkm[b]+(pkm[b+1]<<8)))^(rand()));
    					x[j+1] = (byte) ((byte)((temp & 0xFF00)>>>8));
    					x[j] = (byte) ((byte) temp & 0xFF);
    					b+=2;
    				}
    				order = order.replace("A","");
    				break;
    			case "B":
    				for (int j=0x28; j<0x48; j+=2){
    					temp = (long) (((pkm[b]+(pkm[b+1]<<8)))^(rand()));
    					x[j+1] = (byte) ((byte)((temp & 0xFF00)>>>8));
    					x[j] = (byte) ((byte) temp & 0xFF);
    					b+=2;
    				}
    				order = order.replace("B","");
    				break;
    			case "C":
    				for (int j=0x48; j<0x68; j+=2){
    					temp = (long) (((pkm[b]+(pkm[b+1]<<8)))^(rand()));
    					x[j+1] = (byte) ((byte)((temp & 0xFF00)>>>8));
    					x[j] = (byte) ((byte) temp & 0xFF);
    					b+=2;
    				}
    				order = order.replace("C","");
    				break;
    			case "D":
    				for (int j=0x68; j<0x88; j+=2){
    					temp = (long) (((pkm[b]+(pkm[b+1]<<8)))^(rand()));
    					x[j+1] = (byte) ((byte)((temp & 0xFF00)>>>8));
    					x[j] = (byte) ((byte) temp & 0xFF);
    					b+=2;
    				}
    				order = order.replace("D","");
    				break;
    			}
    
    		}

    Then just write x[] from 0 to 136, the bytes will be in the correct order

  16. Thanks dude! Could not have done it without you!

    Thanks, also you did a lot to make this program so I'm looking foward to new versions

    Look Forward To!

    Changing of Box Background

    Well I could help you with this, I have already added changing the box background in Pokemon Data Checker so I could give you the offsets...

    Edit: It could be useful to add compatibility to BW save files to use the Hall of Fame editor only, I got the First game clear offsets, I'm researching the Hall of Fame offsets

×
×
  • Create New...