xfr

Beta: the Pokécheck VS. Player (battle video parser)

154 posts in this topic

Pokécheck VS. Player: http://vsplayer.pokecheck.org

As some may know, the state of knowledge of the Battle Video system makes it possible to have a web based parser for battle videos.

Battle videos only contain bpkm data and the players' choice of moves. The parser needs to integrally and faithfully emulate the Pokémon battle system to produce logs, with special attention required to stick the current BRNG value. Any frame off makes all subsequent result invalid.

Because in its current state, the VS. Player only implements a fragment of the full battle system, this thread exists to report the most important missing features and bugs. Because each bug requires debugging of the affected videos, reports should follow the following rules:

  1. You are only allowed to report one bug or feature request at a time. Until it is actually fixed or implemented, any subsequent request you make will be ignored.
  2. You should report major issues on frequently used features before anything else. Reports are handled on a priority basis.
  3. You MUST include the battle video ID where the problem occurs, and the first turn for which the VS. Player is giving wrong results.

Note that you must be a registered Pokécheck user to access the VS. Player. This is because this program has to make requests to the Nintendo servers. This is highly dangerous since it exposes the Pokécheck website to blacklisting by Nintendo. As such, strict global and per-user limits are set to limit the number of queries. Each requested video is cached on the server and only requested once.

Q&A:

Q: Is it possible to emulate the battle video server like the GTS?

A: Yes. The protocol is encrypted but it doesn't check the signature of the server certificate, except for the Pokémon validation service (pkvldt) which is required to get a signature on any video uploaded to the official battle server

Q: Is it possible to create battle videos from scratch?

A: Yes, it has been possible for some months, see for instance

Q: Is it possible to convert a battle log from a simulator like PO/PS to a battle video that I could send on Youtube or on the Nintendo video server?

A: Yes, but it requires the simulator to faithfully emulate the battle system. Only the VS. Player can do that at the moment, even though some steps have been taken to make it possible (see for instance www.smogon.com/bw/articles/bw_complete_damage_formula)

Edited by Bond697

Share this post


Link to post
Share on other sites

There is an error in this Logfile I just read: http://vsplayer.pokecheck.org/?bid=937056110440 from turn 3/4 on.

In round 3, Politoed fainted, but Roger did not send out a replacement. Instead the logfile always says that Politoed "was trying" to do a move. In round 6, Roger replaces "Politoed" with Electrivire.

Judging from the logfile (I didn't watch the original video), I guess he sent out Vaporeon for the fainted Politoed. The log misses that, so every further action gets messed up and "Politoad was trying" to... until Vaporeon gets switched out.

Share this post


Link to post
Share on other sites
There is an error in this Logfile I just read: http://vsplayer.pokecheck.org/?bid=937056110440 from turn 3/4 on.

In round 3, Politoed fainted, but Roger did not send out a replacement. Instead the logfile always says that Politoed "was trying" to do a move. In round 6, Roger replaces "Politoed" with Electrivire.

Judging from the logfile (I didn't watch the original video), I guess he sent out Vaporeon for the fainted Politoed. The log misses that, so every further action gets messed up and "Politoad was trying" to... until Vaporeon gets switched out.

from the .dbv file, the battle instructions:

92 TURN 1
02 11 1C 00 00 E1 38 00 00 
22 E1 2C 00 00 A1 76 00 00 

12 SWITCH ON TURN 1
01 00 00 00 00 
21 83 01 00 00

92 TURN 2
02 31 1C 00 00 E1 39 00 00 
22 01 DB 00 00 13 01 00 00 

12 SWITCH ON TURN 2
01 00 00 00 00 
21 13 01 00 00 

92 TURN 3
02 31 1C 00 00 11 65 00 00 
22 01 DB 00 00 01 DE 00 00 

12 SWITCH ON TURN 3
01 00 00 00 00 
21 03 04 00 00 

92 TURN 4
02 11 1C 00 00 E1 38 00 00 
22 81 24 00 00 00 00 00 00 

92 TURN 5
02 11 1D 00 00 91 86 00 00 
22 E1 5F 00 00 00 00 00 00 

92 TURN 6
02 11 1D 00 00 11 65 00 00 
22 21 B4 00 00 00 00 00 00 

12 SWITCH ON TURN 6
01 [u]03 01 00 00[/u] - Player0 switches Politoed out.
21 03 04 00 00 

As you can see there's no switch on turn 3 for player0, so Politoed must not have been KO'd on turn 3.

My guess is a misplaced RNG call, probably with the Stone Edge crit not happening.

Share this post


Link to post
Share on other sites

the link Localhorst posted is mine a pokecheck private battle organized via pm between me and genetics im just watching the video now on my ds so il check to see what happened and il keep you posted as it could be an error

edit: Genetics Landorus's Critical hit Stone Edge attack left my Politoed with 14 hp left then i ko'd it by using a rain boosted STAB hydro pump (politoed was still in battle till it got ko'd in turn 7) the video is still on the the Battle Video section where RM and GTS is to watch if needed

Share this post


Link to post
Share on other sites

Posting this on behalf of Coolbiz of Smogon.

Crits from a multi-hit move on the last turn of this battle aren't being taken into account in the visible log - http://vsplayer.pokecheck.org/?bid=859978881187

What the video looks like -

Edit: There may be other issues with this replay as well. I think. Compare the Vs. Player output with the video.

Share this post


Link to post
Share on other sites
There is an error in this Logfile I just read: http://vsplayer.pokecheck.org/?bid=937056110440 from turn 3/4 on.

In round 3, Politoed fainted, but Roger did not send out a replacement. Instead the logfile always says that Politoed "was trying" to do a move. In round 6, Roger replaces "Politoed" with Electrivire.

Judging from the logfile (I didn't watch the original video), I guess he sent out Vaporeon for the fainted Politoed. The log misses that, so every further action gets messed up and "Politoad was trying" to... until Vaporeon gets switched out.

Fixed (weather bug)

Share this post


Link to post
Share on other sites
Posting this on behalf of Coolbiz of Smogon.

Crits from a multi-hit move on the last turn of this battle aren't being taken into account in the visible log - http://vsplayer.pokecheck.org/?bid=859978881187

What the video looks like -

Edit: There may be other issues with this replay as well. I think. Compare the Vs. Player output with the video.

Fixed by implementing Effect Spore. Relevant ASM:

EffectSpore:
seg006:021D9DD0 PUSH    {R3-R6,LR}
seg006:021D9DD2 SUB     SP, SP, #0xC
seg006:021D9DD4 MOVS    R0, #4
seg006:021D9DD6 MOVS    R5, R1
seg006:021D9DD8 MOVS    R6, R2
seg006:021D9DDA BL      ReadVolatileVariable
seg006:021D9DDE CMP     R6, R0
seg006:021D9DE0 BNE     loc_21D9E18
seg006:021D9DE2 MOVS    R0, #0x46 @ 'F'
seg006:021D9DE4 BL      ReadVolatileVariable
seg006:021D9DE8 CMP     R0, #0
seg006:021D9DEA BNE     loc_21D9E18
seg006:021D9DEC MOVS    R0, #0x1E
seg006:021D9DEE BL      BRand
seg006:021D9DF2 CMP     R0, #0x14
seg006:021D9DF4 BLS     loc_21D9DFA
seg006:021D9DF6 MOVS    R4, #5 ; Poison
seg006:021D9DF8 B       loc_21D9E02
seg006:021D9DFA @ ---------------------------------------------------------------------------
seg006:021D9DFA
seg006:021D9DFA loc_21D9DFA:                            @ CODE XREF: EffectSpore+24j
seg006:021D9DFA MOVS    R4, #1 ; Para
seg006:021D9DFC CMP     R0, #0xA
seg006:021D9DFE BHI     loc_21D9E02
seg006:021D9E00 MOVS    R4, #2 ; Sleep
seg006:021D9E02
seg006:021D9E02 loc_21D9E02:                            @ CODE XREF: EffectSpore+28j
seg006:021D9E02                                         @ EffectSpore+2Ej
seg006:021D9E02 MOVS    R0, R4
seg006:021D9E04 BL      sub_21D7D38 ; If sleep precompute duration (rand(3)+2)
seg006:021D9E08 MOVS    R3, R0
seg006:021D9E0A MOVS    R0, #0x1E
seg006:021D9E0C STR     R0, [sP]
seg006:021D9E0E MOVS    R0, R5
seg006:021D9E10 MOVS    R1, R6
seg006:021D9E12 MOVS    R2, R4
seg006:021D9E14 BL      effectSporeRand
seg006:021D9E18
seg006:021D9E18 loc_21D9E18:                            @ CODE XREF: EffectSpore+10j
seg006:021D9E18                                         @ EffectSpore+1Aj
seg006:021D9E18 ADD     SP, SP, #0xC
seg006:021D9E1A POP     {R3-R6,PC}
seg006:021D9E1A @ End of function EffectSpore
seg006:021D9E1A
seg006:021D9E1C
seg006:021D9E1C @ =============== S U B R O U T I N E =======================================
seg006:021D9E1C
seg006:021D9E1C
seg006:021D9E1C sub_21D9E1C:
seg006:021D9E1C MOVS    R1, #1
seg006:021D9E1E STR     R1, [R0]
seg006:021D9E20 LDR     R0, =0x21F0850
seg006:021D9E22 BX      LR
seg006:021D9E22 @ End of function sub_21D9E1C
seg006:021D9E22
seg006:021D9E22 @ ---------------------------------------------------------------------------
seg006:021D9E24 dword_21D9E24:.long 0x21F0850           @ DATA XREF: sub_21D9E1C+4r
seg006:021D9E28
seg006:021D9E28 @ =============== S U B R O U T I N E =======================================
seg006:021D9E28
seg006:021D9E28
seg006:021D9E28 effectSporeRand:                        @ CODE XREF: sub_21D9CAC+1Ap
seg006:021D9E28                                         @ sub_21D9CDC+1Ap ...
seg006:021D9E28
seg006:021D9E28 varg_r0= -0x10
seg006:021D9E28 varg_r1= -0xC
seg006:021D9E28 varg_r2= -8
seg006:021D9E28 varg_r3= -4
seg006:021D9E28
seg006:021D9E28 PUSH    {R0-R3}
seg006:021D9E2A PUSH    {R3-R7,LR}
seg006:021D9E2C MOVS    R4, R0
seg006:021D9E2E MOVS    R0, #4
seg006:021D9E30 MOVS    R5, R1
seg006:021D9E32 MOVS    R6, R2
seg006:021D9E34 MOVS    R7, #4
seg006:021D9E36 BL      ReadVolatileVariable
seg006:021D9E3A CMP     R5, R0
seg006:021D9E3C BNE     loc_21D9E98
seg006:021D9E3E MOVS    R0, #0x46 @ 'F'
seg006:021D9E40 BL      ReadVolatileVariable
seg006:021D9E44 CMP     R0, #0
seg006:021D9E46 BNE     loc_21D9E98
seg006:021D9E48 MOVS    R0, #0x12
seg006:021D9E4A BL      ReadVolatileVariable
seg006:021D9E4E LSLS    R0, R0, #0x10
seg006:021D9E50 LSRS    R0, R0, #0x10
seg006:021D9E52 MOVS    R1, #0
seg006:021D9E54 BL      GetMoveFlag ; contact flag
seg006:021D9E58 CMP     R0, #0
seg006:021D9E5A BEQ     loc_21D9E98
seg006:021D9E5C ADD     R1, SP, #0x28
seg006:021D9E5E LDRB    R1, [R1]
seg006:021D9E60 MOVS    R0, R4
seg006:021D9E62 BL      RandomEffect ; rand(100)<30
seg006:021D9E66 CMP     R0, #0
seg006:021D9E68 BEQ     loc_21D9E98
seg006:021D9E6A MOVS    R0, R4
seg006:021D9E6C MOVS    R1, #0xC
seg006:021D9E6E MOVS    R2, R5
seg006:021D9E70 BL      sub_21C88C4
seg006:021D9E74 MOVS    R5, R0
seg006:021D9E76 LDR     R1, [R5]
seg006:021D9E78 LSLS    R0, R7, #0x15
seg006:021D9E7A ORRS    R0, R1
seg006:021D9E7C STR     R0, [R5]
seg006:021D9E7E LDR     R0, [sP,#0x24]
seg006:021D9E80 STR     R6, [R5,#4]
seg006:021D9E82 STR     R0, [R5,#8]
seg006:021D9E84 MOVS    R0, #0
seg006:021D9E86 STRB    R0, [R5,#0xC]
seg006:021D9E88 MOVS    R0, #3
seg006:021D9E8A BL      ReadVolatileVariable
seg006:021D9E8E STRB    R0, [R5,#0xF]
seg006:021D9E90 MOVS    R0, R4
seg006:021D9E92 MOVS    R1, R5
seg006:021D9E94 BL      sub_21C88E8
seg006:021D9E98
seg006:021D9E98 loc_21D9E98:                            @ CODE XREF: effectSporeRand+14j
seg006:021D9E98                                         @ effectSporeRand+1Ej ...
seg006:021D9E98 POP     {R3-R7}
seg006:021D9E9A POP     {R3}
seg006:021D9E9C ADD     SP, SP, #0x10
seg006:021D9E9E BX      R3
seg006:021D9E9E @ End of function effectSporeRand

Note that effect spore has a slight biais towards sleep and against poison.

Share this post


Link to post
Share on other sites

Asral from pokecheck has said

Quoted from Astral as he has no account here:

Astral and for the winner of the battle, winner next to the trainer who won would be great, i just look at stats, and movesets, and placing the BRNG seed is strange for me Jun 12, 08:40pm

Sorry if this is not allowed

Share this post


Link to post
Share on other sites

Reporting a bug with Leech Seed: http://vsplayer.pokecheck.org/?bid=72-95417-60253

Trick Room is active. Ferrothorn used Leech Seed on Zapdos, but Zapdos's Heat Wave KOed my Ferrothorn. Even so, Vs. Player still reports my Ferrothorn going from 0 HP to 21 HP (and Zapdos losing that HP).

Later in the battle, Scrafty is reported as gaining two Moxie Attack boosts from KOing only one Pokémon.

Share this post


Link to post
Share on other sites

Here is something that seems to be similar to the bug we had earlier with that Politoed, but I guess it is different. http://vsplayer.pokecheck.org/?bid=259278393390

From round 8 on, you'll see what I mean. Seems like Zapdos survived the rock slide and gets replaced with Scizor in round 10 (under the condition the moves aren't screwed up), but I can be wrong.

Share this post


Link to post
Share on other sites
Here is something that seems to be similar to the bug we had earlier with that Politoed, but I guess it is different. http://vsplayer.pokecheck.org/?bid=259278393390

From round 8 on, you'll see what I mean. Seems like Zapdos survived the rock slide and gets replaced with Scizor in round 10 (under the condition the moves aren't screwed up), but I can be wrong.

Fixed by implementing Roost landing.

Do not try to guess what is wrong based on the log, this is futile because of error propagation.

Share this post


Link to post
Share on other sites

http://vsplayer.pokecheck.org/?bid=156121389038

Not sure quite what happened so here is kinda a play by play of things that didn't happen correctly until it was too desynced to matter I think. Hopes this helps.

Turn 1, burn damage error, Conkledurr consistently at 26 less hp until turn 11 where he dies in both Log and in game.

Turn 7, Helping hand gets blocked by substitute, which didn't happen, Sawsbuck dies in both.

Turn 10 Thunderus Discharge incorrectly misses Volcarona in log

Turn 11 Conkledurr survives the Air slash from Sigilyph in game, and Sig survives the drain punch.  Log mistakenly says he takes life orb damage.  The Rock Slide misses Volcarona in game.

Turn 12 Torment incorrectly triggers is on Volcarona, in the log. Heat Wave does break Thunderus Substitute.  Sigilyph dies this round. Log incorrectly states that Volcarona gets paralyzed this round.  Clams Life Orb damage again this round on Sigilyph, which didn't occur.

Turn 13 Conkledurr does in game to a mach punch inducing a burn.  Morning Sun Does go off this round ingame.  Foe Conkledurr finally dies this round to discharge.  Discharge does not crit Volcarona in game

From turn 14 onward its very desynced and not likely worth mentioning.

Share this post


Link to post
Share on other sites

I have a similar problem to GBZero in this battle between Cybertron and BlueCookies:

http://vsplayer.pokecheck.org/?bid=259278330190

It states that Togekiss took burn damage on Turn 1 when it didn't, causing it to faint on Turn 3 in the log instead of Turn 5 like in the video. However, the log still states that Togekiss tried to use the moves that it actually took in the battle. This also means that Garchomp wasn't put to sleep by Sleep Talk Psycho Shift in the log, causing further desyncs until it stated that Cybertron won 1-0 with Volcarona (when BC really won 2-0 with Cresselia and Garchomp).

Share this post


Link to post
Share on other sites
I have a similar problem to GBZero in this battle between Cybertron and BlueCookies:

http://vsplayer.pokecheck.org/?bid=259278330190

It states that Togekiss took burn damage on Turn 1 when it didn't, causing it to faint on Turn 3 in the log instead of Turn 5 like in the video. However, the log still states that Togekiss tried to use the moves that it actually took in the battle. This also means that Garchomp wasn't put to sleep by Sleep Talk Psycho Shift in the log, causing further desyncs until it stated that Cybertron won 1-0 with Volcarona (when BC really won 2-0 with Cresselia and Garchomp).

flame orb inflicts a burn after the burn 10% damage check happens, that's why

that error is also present in GBZero's video -- other errors in his video are flame body trying to burn an already statused Conkeldurr and heat wave trying to status a mon whose substitute faded from the attack

Share this post


Link to post
Share on other sites
http://vsplayer.pokecheck.org/?bid=259278330190, 25-92783-30190

While the Flame Orb issue is fixed, Togekiss no longer uses Sleep Talk on turn 4, causing the battle to desync.

Fixed by implementing sleep talk (rand(3) to pick one of the other moves)

Sand Veil actually lowers the accuracy threshold (user accuracy/target evasion) by 20%. Hence it should be considered as a 25% boost to evasion, not 20% as stated in game.

Share this post


Link to post
Share on other sites
I have found an error corresponding to recoil damage in one of my battle videos. the video number is 87-57355-93779 and the problem occurs on turn 2 when my blaziken faints from recoil damage. it should have only taken minor damage and should have barely survived through the 6th turn and finally faint in the 7th (final) turn from recoil damage. my gastrodon should also have survived with about 41 HP remaining

Fixed by implementing King's Rock and freeze mechanics

Share this post


Link to post
Share on other sites
There's a problem with one of my videos here - http://vsplayer.pokecheck.org/?bid=764624368039

What actually happened -

Fixed due to the following mechanism: using protect on a Pokémon that does not get targeted by any move during the turn will not increase the protect counter for that Pokémon.

As far as I know no one documented this behavior before nad it's not clear whether it is intended or not.

Share this post


Link to post
Share on other sites

above ^ dry skin not yet implemented (don't know if other typebased absorbs are either)

http://vsplayer.pokecheck.org/?bid=797522964094

On Turn 4, the foe's Swanna uses Hurricaine on my Vespiquen and missed, but the log says it hit and I failed to make a Sub

Random event(1) at the end of turn 2 when Volcarona faints looks to be the error -- life orb recoil faint?

the first sign of the desync is when Haxorus is put 38 HP instead of 32 (vsplayer predict)

useful memlocs for tracking HP

022D10D0	Left Ally
022D11D0	Right Ally

022D1150	Right Opponent
022D12D0	Left Opponent

Share this post


Link to post
Share on other sites
para que sirven estos

Download raw DBV file

It serves no purpose for the general user. It's the decrypted data that the game reads to re-create the battle.

You don't have to worry about it.

Share this post


Link to post
Share on other sites
03:35	Kaphotics	heh battle video #2 is broken
03:35	Kaphotics	http://vsplayer.pokecheck.org/?bid=2
03:36	Kaphotics	Looks like it's because endeavor took one to many calls on turn 5
03:36	Kaphotics	it shouldnt have a Random event(16) for a crit/damage since it's fixed

Share this post


Link to post
Share on other sites

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