+ Reply to Thread
Page 1 of 2
1 2 LastLast
Results 1 to 15 of 18

Thread: VS. Recorder in Black and White and PKM Extraction

  1. #1

    VS. Recorder in Black and White and PKM Extraction

    Information Consolidation of all of my posts:
    Battle Video Card Structure
    Spoiler

    Code:
    0x00-0x0F - Trainer Profile (Owner of Video)
    0x10-0x25 -- Trainer Profile Data
        0x10-0x13 - Trainer PID
        0x14 - Trainer Gender (00 Male 01 Female)
        0x15 - Trainer Birth Month
        0x16 - Trainer Avatar
        0x17 - Trainer Nation
        0x18 - Trainer SubLocale
        0x1C - Trainer Pokemon Displayed (Half Word)
        0x1D-0x25 - ???
    0x26-0x6F -- FF Pads
    0x70-0x7B -- Unused/Unknown
    0x80-0xAX -- Battle Overview Data
        0x80-0x8B - Team#1
        0x8C-0x97 - Team#2
        0xA4 - Battle # (Subway Streak)
        0xA6 - Battle Mode(???)
        0xA7 - Game Modes (Launcher?)
        0xB8-0xBC - Battle Video ID(???)
    Battle Process Structure
    Spoiler
    Code:
    Currently Un-researched.
    PKM Data Structure (.bpkm)
    Spoiler
    Code:
    Battle Video PKMs are 112 bytes long (not all data is present!!!)
    Offsets in Decrypted Battle Video: 
    	0XCFC: Max Present PKM
    	0xCFE: Currently Present PKM
    
    	PID		0xD00 + 0x70*pkm
    	Species		0xD06 + 0x70*pkm
    	Held Item	0xD08 + 0x70*pkm
    	Trainer ID	0xD0C + 0x70*pkm
    	Trainer SID	0xD0E + 0x70*pkm
    	Happiness	0xD14 + 0x70*pkm
    	Ability		0xD15 + 0x70*pkm
    	HP-EV		0xD16 + 0x70*pkm
    	Atk-EV		0xD17 + 0x70*pkm
    	Def-EV		0xD18 + 0x70*pkm
    	SpA-EV		0xD19 + 0x70*pkm
    	SpD-EV		0xD1A + 0x70*pkm
    	SpE-EV		0xD1B + 0x70*pkm
    	Move 1		0xD1C + 0x70*pkm
    	Move 2		0xD1E + 0x70*pkm
    	Move 3		0xD20 + 0x70*pkm
    	Move 4		0xD22 + 0x70*pkm
    	PP 1		0xD24 + 0x70*pkm
    	PP 2		0xD25 + 0x70*pkm
    	PP 3		0xD26 + 0x70*pkm
    	PP 4		0xD27 + 0x70*pkm
    	IVs		0xD2C + 0x70*pkm
    	Gender Forme	0xD30 + 0x70*pkm
    	NickName Field	0xD32 + 0x70*pkm
    	OTName Field	0xD48 + 0x70*pkm
    	PokeBall	0xD58 + 0x70*pkm
    	Origin		0xD59 + 0x70*pkm (01 is Japan, 02 is English)
    	Level		0xD60 + 0x70*pkm
    	BatlStat(maxHP)	0xD62 + 0x70*pkm
    	BatlStat(curHP)	0xD64 + 0x70*pkm
    	BatlStat(AtK)	0xD66 + 0x70*pkm
    	BatlStat(Def)	0xD68 + 0x70*pkm
    	BatlStat(SpA)	0xD6A + 0x70*pkm
    	BatlStat(SpD)	0xD6C + 0x70*pkm
    	BatlStat(SpE)	0xD6E + 0x70*pkm
    
        For Enemy Pokemon, add 4 to the base offset as every trainer has leading Max/Current PKM before the PKM Field.
    Trainers Battling
    Spoiler
    Code:
    Somewhere after bpkm
    Closing
    Spoiler
    Code:
    Currently un-researched.


    My posts before the last edit date may not be current information.
    Last edited by Kaphotics; Jun 14th, 2011 at 05:13 PM.

  2. #2

    Re: VS. Recorder in Black and White

    OLD

    Did some looking into in the RAM (I know it's not save related but does give some insight as to what is inside the saved video).

    VS. Recorder Screenshots of the Battles and Trainer Profiles (data stored on card)
    Spoiler

    RAM Offsets of Important Information (PKM and Trainer):
    Spoiler
    Code:
    Battling Trainers: 0x0226C73C
    Trainer PID(???): 0x226C74C
        This data also appears at 0x10 of the VRD
        Opposing Trainer's PID not in VRD.
    At 0x0226C84C, the data from 0x18A0 is loaded, and shows the rest of the data.
    Team Lineup and OT Trainers of Jenn.vrd in the RAM:
    Spoiler

    Code:
    Jenn:            HENRY:
    Cofagrigus - Jenn    Reuniclus - HENRY
    Excadrill - Jenn    Meinshao - Glacen
    Swoobat - Jenn        Banette - Japanese
    Scrafty - Jenn        Stoutland - HENRY
    Gigalith - MASON    Accelgor - JOHN
    Emboar - Jenn        Lucario - Japanese
    Pokemon Data in the RAM -- woo!
    Spoiler

    Code:
    112 Bytes in Between Each PKM
    Brown - Pokemon PID
    Green - Species
    Dark Red - Happiness (?? Henry's Stoutland is mad)
    Orange - Trainer PID (or ID/SID)
    Yellow - Move ID
    Pink - Move PP
    Purple - Gender of Pokemon
    Red - Pokemon Name
    Blue - Trainer Name
    Black - Unknown / Unused
    Gray - Max HP & Battle Stats -- Right Before this is Level (32) and something else as a halfword. 
    
    Missing: Pokeball, Met Location, Hatch Location, Version Origin, Language Origin, IVs, Ribbons, EVs, Sheen.
    
    Pretty sure everything is in there somehow. IVs are probably right before gender.
    Last edited by Kaphotics; Jun 14th, 2011 at 12:28 AM.

  3. #3

    Re: VS. Recorder in Black and White and PKM Extraction

    OLD

    Alrighty, after spending more time with the RAM and a few battle videos I have found out how it operates. The Pokemon Data in the RAM was only the tip of the iceberg on what was contained within

    Upon clicking on a battle video, the entire encrypted battle video (which I have a few uploaded in the first post) is loaded into the RAM at offsets (0x0226BA0????).
    It remains there in its entirety for a split second (one or two frames, 1/60th of a second), in which it is decrypted and left there for easy access.

    If you dump the memory and copy the offsets for where the encrypted/decrypted battle video was (like in HxD), you can then just separate it out like I did from the save file. The Encrypted battle video is exactly the same, and the Decrypted battle video is the same size as well.

    I would upload a decrypted battle video, but I am only able to post currently (I will upload stuff when I can).

    Approximate Layout:
    Code:
    Trainer Profile
    FFFFFFFF
    Battle Video Summary
    ==
    Battle Moves/Etc
    PKM
    Trainers
    Closing
    ===========

    Pokemon Data occupies 112 bytes of data for each PKM. Strangely, it includes the ingame Stats. In the decrypted battle video, they start at 0xD00. They are there for 6 Trainer#1 PKMs, then there is a 4 byte (Max/Current PKMs Present) gap in between, then the Trainer#2(opponent) PKMs are there.

    ===========

    Battle videos can be copied on top of the others. If you copy Frank's video onto another save file's appropriate offset (to overwrite the previous video), it can be viewed in game as there is no overall checksum on the save file to check (heh). I was able to make Frank's battle video occupy all 3 slots on the "Other Videos" menu (and viewing worked of course).

    ===========

    Confirmed the native battle video locations via battle subway.

    ===========

    I'll have more things (offsets/structure of bpkm) when I am able to upload stuff

    I don't know how to make programs/make something to decrypt
    Last edited by Kaphotics; Jun 14th, 2011 at 12:28 AM.

  4. #4
    March 6th Translation ContributorIRC VOPDeveloperGame Save ResearcherFormer StaffEvent Contributor Poryhack's Avatar
    Join Date
    Mar 2009
    Location
    Minnesota, USA
    Age
    21
    Posts
    789

    Re: VS. Recorder in Black and White and PKM Extraction

    Interesting stuff here. Did NulMyre's program decrypt the videos or just backup/restore them?

  5. #5
    "Quote" DeveloperGame Save ResearcherModerator evandixon's Avatar
    Join Date
    Apr 2009
    Location
    A floating island
    Posts
    1,219

    Re: VS. Recorder in Black and White and PKM Extraction

    Quote Originally Posted by Poryhack View Post
    Interesting stuff here. Did NulMyre's program decrypt the videos or just backup/restore them?
    It would have to decrypt it if you can extract the pokemon from each video.
    NDS and GBA Save Converters

    Number 8 in the List of members sorted by post count.
    (Newsbot doesn't count, because it doesn't have as many posts as what is listed)

  6. #6

    Re: VS. Recorder in Black and White and PKM Extraction

    Research RAR'd up, includes battle pkms, more encrypted videos and everything else that follows and more.

    This was done without using NulMyre's program as the structure is entirely different, all that I used from it was the decompiled java just to see how it worked in Platinum.

    Decrypted Jenn Video

    Overwriting Battle Videos
    Spoiler

    Reading the BPKM data from the RAM (identical to the decrypted data)
    Spoiler


    Code:
    A little tutorial on accessing data within a Battle Video:
    
    Upon loading the battle video, the game loads the entire VRD at 0x0226AFAC.
    
    The video is loaded in its encrypted form, occupying 
    0x0226AFAC-0x0226C8BF
    Guess what, it gets decrypted by the game. Huzzah!
    
    While in DeSmuME, Open Memory Viewer at the Battle Video Screen.
    Dump All. Open .bin in HxD
    
    copy the offsets: 0x0226AFAC-0x0226C8BF
    	Into a new file.
    Bam, decrypted VRD, aka DBV (decrypted battle video)
    Now to make sense of what the data is inside!
    
    Program Implications: 
    There are no checksums on the entire save file in regards to Battle Videos.
    If you overwrite one video in the save with another downloaded one, 
    	it will be viewable instead! Backup and Share them!
    Code:
    Battle Video Structure:
    Surface Summaries
    Moves
    Pokemon 
    Trainers
    Closing Summaries (???)
    Code:
    Battle Video PKMs are 112 bytes long (not all data is present!!!)
    Offsets in Decrypted Battle Video: 
    	0XCFC: Max Present PKM
    	0xCFE: Currently Present PKM
    
    	PID		0xD00 + 0x70*pkm
    	Species		0xD06 + 0x70*pkm
    	Held Item	0xD08 + 0x70*pkm
    	Trainer ID	0xD0C + 0x70*pkm
    	Trainer SID	0xD0E + 0x70*pkm
    	Happiness	0xD14 + 0x70*pkm
    	Ability		0xD15 + 0x70*pkm
    	HP-EV		0xD16 + 0x70*pkm
    	Atk-EV		0xD17 + 0x70*pkm
    	Def-EV		0xD18 + 0x70*pkm
    	SpA-EV		0xD19 + 0x70*pkm
    	SpD-EV		0xD1A + 0x70*pkm
    	SpE-EV		0xD1B + 0x70*pkm
    	Move 1		0xD1C + 0x70*pkm
    	Move 2		0xD1E + 0x70*pkm
    	Move 3		0xD20 + 0x70*pkm
    	Move 4		0xD22 + 0x70*pkm
    	PP 1		0xD24 + 0x70*pkm
    	PP 2		0xD25 + 0x70*pkm
    	PP 3		0xD26 + 0x70*pkm
    	PP 4		0xD27 + 0x70*pkm
    	IVs		0xD2C + 0x70*pkm
    	Gender Forme	0xD30 + 0x70*pkm
    	NickName Field	0xD32 + 0x70*pkm
    	OTName Field	0xD48 + 0x70*pkm
    	PokeBall	0xD58 + 0x70*pkm
    	Origin		0xD59 + 0x70*pkm (01 is Japan, 02 is English)
    	Level		0xD60 + 0x70*pkm
    	BatlStat(maxHP)	0xD62 + 0x70*pkm
    	BatlStat(curHP)	0xD64 + 0x70*pkm
    	BatlStat(AtK)	0xD66 + 0x70*pkm
    	BatlStat(Def)	0xD68 + 0x70*pkm
    	BatlStat(SpA)	0xD6A + 0x70*pkm
    	BatlStat(SpD)	0xD6C + 0x70*pkm
    	BatlStat(SpE)	0xD6E + 0x70*pkm
    
    	For Enemy Pokemon, add 4 to the base offset as the 
    	max/current PKM present shifts it as well.
    Some Offsets within the Battle Video that define visual cues:
    Code:
    0x00-0x0F - Trainer Profile (Owner of Video)
    0x10-0x25 -- Trainer Profile Data
    	0x10-0x13 - Trainer PID
    	0x14 - Trainer Gender (00 Male 01 Female)
    	0x15 - Trainer Birth Month
    	0x16 - Trainer Avatar
    	0x17 - Trainer Nation
    	0x18 - Trainer SubLocale
    	0x1C - Trainer Pokemon Displayed (Half Word)
    	0x1D-0x25 - ???
    0x26-0x6F -- FF Pads
    0x70-0x7B -- Unused/Unknown
    0x80-0xAX -- Battle Overview Data
    	0x80-0x8B - Team#1
    	0x8C-0x97 - Team#2
    	0xA4 - Battle # (Subway Streak)
    	0xA6 - Battle Mode(???)
    	0xA7 - Game Modes (Launcher?)
    	0xB8-0xBC - Battle Video ID(???)

  7. #7

    Re: VS. Recorder in Black and White and PKM Extraction

    Copying the Native Video onto the Other Videos works:
    Spoiler

    Comes with it's own blank trainer profile!
    Spoiler
    Code:
    Viewing your own native video has the game load the encrypted one too,
    it then generates your Profile when it decrypts.
    
    Static Locations
    The value at 0xA8 must match the decrypted value at 0x189C, 
    	which is (always) 81 E2. This signifies "end data"?
    The value at 0xAA must be 00 64.
    The value at 0x18A6 must match the value at 0x1900.
    The value at 0x18A4 is battle video # (1-native/1/2/3)
    The Value at 0x1904 is 01 00 00 00 14 19 00 00 27 35 05 31 (decryption vars?)
    The value at 0x00C0 is a checksum
    The Value at 0x18A0 is a checksum
    The Value at 0x18A6 is a checksum
    The Value at 0x1900 is a checksum
    The value at 0x1912 is a checksum
    
    Encrypted Region
    The first value different between Encrypted/Decrypted is 0xC4
    The first value that is the same after 0xC4 is 0x18A0

  8. #8

    Re: VS. Recorder in Black and White and PKM Extraction

    The region 0xC4-0x189F of the decrypted battle video CRC16-CCITT checksum is at 0x18A0.

    This spans the only region of data that is different between Encrypted and Decrypted.

  9. #9
    Banned
    Join Date
    Jun 2011
    Posts
    104

    Re: VS. Recorder in Black and White and PKM Extraction

    Any idea how to decrypt this without the use of an emulator?

  10. #10

    Re: VS. Recorder in Black and White and PKM Extraction

    well you need the save file to get the video on file.

    No idea how to decrypt without an emulator.

  11. #11
    Banned
    Join Date
    Jun 2011
    Posts
    104

    Re: VS. Recorder in Black and White and PKM Extraction

    I see. No problem.

    I looked at the decrypted data, but the only thing I could identify was the value at 0xF0. This seems to be controlling the battle BGM.
    Did you make any progress? I really would like to know more about the Battle Process Structure.

  12. #12

    Re: VS. Recorder in Black and White and PKM Extraction

    Nah I haven't been looking at Battle Videos, trying to finish up on some RNG things for the Smogon Community

    BGM = background music? If you could go a little more in depth with what you've found / how to abuse it, we might start to get some Video modding codes like in the HGSS era of display modding.

    I will shift my focus back to this after that is done, thanks for your interest/help!

  13. #13

    Re: VS. Recorder in Black and White and PKM Extraction

    When you are at the point where you can press play on the video, you can modify the values of the decrypted battle video.

    0xF8 - Battle Duration (Hex Length)

    Moves are (almost) immediately after, obviously.
    Turns appear to be 0xB long.

    Moves:
    I messed around with 0x14D, and was able to change the move the Pokemon did.
    0x0226B0CD = mymove on move 3
    0x0226B0F9 = mymove on move 6
    These may be different depending on the battle video in question.

    Some more decrypted battle videos:
    http://dl.dropbox.com/u/12206225/Bat...af%20Blade.DBV
    http://dl.dropbox.com/u/12206225/Bat...aze%20Kick.DBV
    http://dl.dropbox.com/u/12206225/Bat...Earthquake.DBV
    save states
    They are all from the same battle, except with different endings.

    For the first one (Leaf Blade), I did not switch and used Leaf Blade to finish off the Pokemon.
    For the second one (Blaze Kick), I switched to Blaziken. The next turn, I used Blaze Kick to finish off the Pokemon.
    For the third one (Earthquake), I switched to Gyarados. The next turn, I used Earthquake to finish off the Pokemon.

    Here's when I modified the 6th turn move:
    Spoiler


    Here's when I modified the 3rd turn move:
    Spoiler

  14. #14

    Re: VS. Recorder in Black and White and PKM Extraction

    Fooling around with the RAM part 1, translates to the Battle Video data...

    Spoiler

    0x0226B0AB = 0x82, making it 0x81 doesn't do anything and doesn't make me switch (I pound = move 0x0000)

    By forcing Blaziken to stay out with this hex, it makes Virizion switch in on turn 5 instead of Virizion for Blaziken, which makes me think it swaps Pokemon slots not calls out a certain dex#.


    0x0226B0A3 =
    0x81 double battle.
    0x82 regular triple
    0x83 rotate triple


    0x0226B0A2 = trainer identifier. Changed it to 0x4, and a wild Tirtouga appeared!
    It does the introductory battle as how to catch a pokemon, then errors out.
    0x5 makes the first Pokemon appear as if it were wild, and the battle still works.

    Combining A3 and A2 leads to some weird stuff...
    Last edited by Kaphotics; Jul 24th, 2011 at 04:41 AM.

  15. #15

    Re: VS. Recorder in Black and White and PKM Extraction

    Figured out how to change the background / pads of the Battle!

    0x0226B08C, whole word controls the background. Still haven't figured out how to control it to my desires...
    Spoiler


    B08F = 01 and 02


    B08D = 01


    B08C = 00, 05, 06,


    B08C = 15, 16, 32


    147 127 110


    183 -222 325


    Background Decimal Numbers (assorted good looking)
    Last edited by Kaphotics; Jul 24th, 2011 at 05:45 AM.

+ Reply to Thread
Page 1 of 2
1 2 LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
PPN Top 50