Skeetendo

’Cause all games were better on the GBC

You are not logged in.

#1 2016-02-29 23:00:20

FroggestSpirit
Member
Registered: 2012-03-12
Post 267/300
Website

Pokemon Red VC patches

Pokemon R/B/Y was released on the 3DS virtual console. The roms are the same as the originals, but some patches are applied, mainly wireless, pikachu's voice, and graphics to make flashing attack animations less harsh. No glitches have been patched afaik, i got my level 100 nidoking.
My main point here today is that there is still not a lot documented about the patches, and for some reason, injecting a gameboy color game seems to blank out palletes 4 and 5 to a white color (this still happens even without the patches).
Here is the patch file, I figured the dissasembly would help

;Format Sample
;[xxxx]            ;User-defined Name (Max:31 chars)
;Mode = 1        ;1:Fixcode; 2:Fixvalue; 3:Mask; 4:Palette; 5:Double Frame Buffer
;Type = 0        ;0:Begin 1:End
;Index = 0        ;Index
;Address = x1F8000    ;ROM Address
;MemAddress = x2000    ;RAM Address
;Fixcode = 0        ;Mode1: Fixed Rom Code; Mode2: Fixed Value
;DelayFrame = 0        ;Delay Frame
;FadeFrame = 0        ;Fade Frame 0:Off
;DarkEnable0 = 0    ;0:Off, 1:On (for Normal Mode)
;ReduceEnable0 = 0    ;0:Off, 1:On (for Normal Mode)
;MotionBEnable0 = 0    ;0:Off, 1:Black Fade, 2:, 3:Frame Blend (for Normal Mode)
;Dark0 = 10        ;0~10 (for Normal Mode)
;ReduceColorR0 = 0    ;0~31 (for Normal Mode)
;ReduceColorG0 = 0    ;0~31 (for Normal Mode)
;ReduceColorB0 = 0    ;0~31 (for Normal Mode)
;MotionBlur0 = 31    ;0~31 (for Normal Mode)
;DarkEnable1 = 0    ;0:Off, 1:On (for Green Mode)
;ReduceEnable1 = 0    ;0:Off, 1:On (for Green Mode)
;MotionBEnable1 = 0    ;0:Off, 1:Black Fade, 2:, 3:Frame Blend (for Green Mode)
;Dark1 = 10        ;0~10 (for Green Mode)
;ReduceColorR1 = 0    ;0~31 (for Green Mode)
;ReduceColorG1 = 0    ;0~31 (for Green Mode)
;ReduceColorB1 = 0    ;0~31 (for Green Mode)
;MotionBlur1 = 31    ;0~31 (for Green Mode)
;PaletteX = c31,31,31    ;X:0~15, cR,G,B (0~31)
[SaveLimit]
Mode = 12
Type = 1
Index = 0x2598
Address = 0x3523

;[Fix pokemon]
;Mode = 2
;Address = 0x1551
;Type = 3

[send_send_buf2]
Mode = 2
Address = 0x227F
Type = 29

[send_send_buf2_ret]
Mode = 2
Address = 0x22C2
Type = 30

[send_byt2]
Mode = 2
Address = 0x3D638
Type = 31

[send_byt2_ret]
Mode = 2
Address = 0x3D647
Type = 32

[send_dummy]
Mode = 2
Address = 0x3D652
Type = 33

[send_dummy_end]
Mode = 2
Address = 0x3D65D
Type = 34

[FIGHT]
Mode = 1
Address = 0x3D648
Fixcode = 0x1A

[FIGHT2]
Mode = 1
Address = 0x3D653
Fixcode = 0x1A

[Network10]
Mode = 1
Address = 0x22A7
Fixcode = 0x1A

[Network11]
Mode = 1
Address = 0x22B2
Fixcode = 0x1A

[Network17]
Mode = 2
Address = 0x53E2
Type = 5

[Network424]
Mode = 2
Address = 0x53F1
Type = 4

[Network200]
Mode = 2
Address = 0x5400
Type = 4

[Network_RECHECK]
Mode = 2
Address = 0x7266
Type = 7

[Network_STOP]
Mode = 2
Address = 0x5D31
Type = 8

[Network_END]
Mode = 2
Address = 0x5D3A
Type = 9

[Network_RESET]
Mode = 2
Address = 0x720DD
Type = 10

[linkCable fake begin]
Mode = 2
Address = 0x7202
Type = 16

[linkCable fake end]
Mode = 2
Address = 0x7260
Type = 17

[linkCable block input]
Mode = 2
Address = 0x7245
Type = 18

;[save game start]
;Mode = 2
;Address = 0x59E6
;Type = 19

[save game end]
Mode = 2
Address = 0x5A0C
Type = 20

;93 A7 A4 7F AB A8 AD AA 7F A7
;at 93
[Change_MSG]
Mode = 1
Address = 0xA29DC
Fixcode = a20: 8F AB A4 A0 B2 A4 7F A2 AE AC A4 7F A0 A6 A0 A8 AD E7 57 00

[fight_ret]
Mode = 1
Address = 0x3EEB8
Fixcode = 0xC9

[fight_ret_c]
Mode = 2
Address = 0x3EEB8
Type = 98

; The effect_no decide which animation will be played.
; So we use it as a condition value. The address of effect_no is 0xd07c
; a7 c0 3e 05 ea
;    and    a                                A7                 
;    ret    nz                               C0
;                             
;    ld    a,5                              3E 05
;    ld    (anime_buf),a                    EA
;     
;                               
;effect_select_rdy:           
;    ld    (effect_no),a                                  
;                             
;    call    put_wait             
;                             
;    ld    a,B_EFFECT_SELECT     


;rsm033659 
;no151 mega punch
[FPA 001 Begin]               
Mode = 3                      
Type = 0                      
Address = 0x7816F            
MotionBEnable0 = 3            
MotionBlur0 = 21 
MotionBEnable1 = 3 
MotionBlur1 = 21                
ConditionType = 11             
ConditionValueA = a38: 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 4f cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 7c d0  
ConditionValueB = a38: 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00  
ConditionValueC = a38: 8c 00 84 00 86 00 80 00 8f 00 05 00 00 00 92 00 84 00 8b 00 85 00 83 00 05 00 00 00 84 00 97 00 8f 00 8b 00 05 00  


[FPA 001 End]                                               
Mode = 3                                                    
Type = 1                                                    
Address = 0x78175                                           
ConditionType = 0                                           
ConditionValueA = a12: 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0 
ConditionValueB = a12: 00 00 00 00 00 00 00 00 00 00 00 00 
ConditionValueC = a12: 8c 00 84 00 86 00 80 00 8f 00 05 00 
                                    
                                    
;rsm032916    
;no117 guillotine                
[FPA 002 Begin]                     
Mode = 3                            
Type = 0                            
Address = 0x7817C                   
MotionBEnable0 = 3                  
MotionBlur0 = 9   
MotionBEnable1 = 3                  
MotionBlur1 = 8                    
ConditionType = 0                   
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0         
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00         
ConditionValueC = a10: 86 00 94 00 88 00 8b 00 0c 00 

[FPA 002 End]                 
Mode = 3                      
Type = 1                      
Address = 0x78179           
ConditionType = 0             
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0 
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00 
ConditionValueC = a10: 86 00 94 00 88 00 8b 00 0c 00 


;rsm041307 
;no150 mega kick
[FPA 003 Begin]               
Mode = 3                      
Type = 0                      
Address = 0x7817F            
MotionBEnable0 = 3            
MotionBlur0 = 25  
MotionBEnable1 = 3 
MotionBlur1 = 21                 
ConditionType = 0             
ConditionValueA = a12: 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0  
ConditionValueB = a12: 00 00 00 00 00 00 00 00 00 00 00 00  
ConditionValueC = a12: 8c 00 84 00 86 00 80 00 8a 00 19 00 


;rsm001929 
;no123 bubble beam
[FPA 004 Begin]                           
Mode = 3                                   
Type = 0                                   
Address = 0x7818c                         
MotionBEnable0 = 3                         
MotionBlur0 = 30                             
ConditionType = 0                          
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0                                            
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00  
ConditionValueC = a10: 81 00 94 00 81 00 81 00 3d 00 

[FPA 004 End]                         
Mode = 3                              
Type = 1                              
Address = 0x78d86                     
ConditionType = 11                     
ConditionValueA = a24: 4b cf 4c cf 4d cf 4e cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0  
ConditionValueB = a24: 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 
ConditionValueC = a24: 81 00 94 00 81 00 81 00 3d 00 00 00 8c 00 84 00 86 00 80 00 8a 00 19 00 
 

;rsm103658 
;no116 hyper beam
[FPA 005 Begin]                                                 
Mode = 3               
Type = 0               
Address = 0x7819B         
MotionBEnable0 = 1        
MotionBlur0 = 5    
MotionBEnable1 = 1                   
MotionBlur1 = 5 
ConditionType = 0                                     
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0    
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00    
ConditionValueC = a10: 87 00 98 00 8f 00 84 00 3f 00    

[FPA 005 End]                      
Mode = 3                           
Type = 1                           
Address = 0x78178                 
ConditionType = 0                  
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0              
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00              
ConditionValueC = a10: 87 00 98 00 8f 00 84 00 3f 00        


;rsm133358
;no57 thunderbolt
[FPA 006 Begin]                                                 
Mode = 3               
Type = 0               
Address = 0x78187       
MotionBEnable0 = 3        
MotionBlur0 = 30    
ConditionType = 0                                     
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0  
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00  
ConditionValueC = a10: 93 00 87 00 94 00 8d 00 55 00  
   
                         
[FPA 006 End]       
Mode = 3                 
Type = 1                 
Address = 0x78106
ConditionType = 0                     
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0    
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00 
ConditionValueC = a10: 93 00 87 00 94 00 8d 00 55 00 

;rsm152340  
;no159 reflect                                  
[FPA 007 Begin]                                                   
Mode = 3                 
Type = 0                 
Address = 0x781c2        
MotionBEnable0 = 1       
MotionBlur0 = 6 
MotionBEnable1 = 1       
MotionBlur1 = 5 
ConditionType = 0               
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0       
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00       
ConditionValueC = a10: 91 00 84 00 85 00 8b 00 73 00                
                         
[FPA 007 End]       
Mode = 3                 
Type = 1                 
Address = 0x78107
ConditionType = 0               
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0   
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00   
ConditionValueC = a10: 91 00 84 00 85 00 8b 00 73 00  

;rsm171812  
;no156 dream eater                               
[FPA 008 Begin]                                                   
Mode = 3                 
Type = 0                 
Address = 0x78e4c 
MotionBEnable0 = 3       
MotionBlur0 = 10 
MotionBEnable1 = 3       
MotionBlur1 = 7 
ConditionType = 0               
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0  
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00 
ConditionValueC = a10: 83 00 91 00 84 00 80 00 8a 00          
                         
[FPA 008 End]       
Mode = 3                 
Type = 1                 
Address = 0x78176
ConditionType = 0               
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 4f cf 7c d0 
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00 00 00
ConditionValueC = a10: 81 00 8b 00 88 00 99 00 99 00 3b 00

;rsm174650   
;no36 spore                       
[FPA 009 Begin]                       
Mode = 3                              
Type = 0                              
Address = 0x7818A                     
MotionBEnable0 = 3                    
MotionBlur0 = 8  
MotionBEnable1 = 3                    
MotionBlur1 = 8                      
ConditionType = 0                     
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0           
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00           
ConditionValueC = a10: 92 00 8f 00 8e 00 91 00 93 00           
                                      

;rsm152115
;no12 rock slide                      
[FPA 010 Begin]                       
Mode = 3                              
Type = 0                              
Address = 0x7818F                     
MotionBEnable0 = 3                    
MotionBlur0 = 27                      
ConditionType = 0                     
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0      
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00      
ConditionValueC = a10: 91 00 8e 00 82 00 8a 00 9d 00      
                                      
[FPA 010 End]                         
Mode = 3                              
Type = 1                              
Address = 0x78D8D                    
ConditionType = 11                     
ConditionValueA = a100: 4b cf 4c cf 4d cf 4e cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 4f cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 4f cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 7c d0 00 00 4b cf 4c cf 4d cf 4e cf 7c d0  
ConditionValueB = a100: 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00
ConditionValueC = a100: 83 00 91 00 84 00 80 00 8a 00 00 00 91 00 8e 00 82 00 8a 00 9d 00 00 00 92 00 8f 00 8e 00 91 00 93 00 00 00 92 00 84 00 8b 00 85 00 83 00 05 00 00 00 92 00 84 00 8b 00 85 00 83 00 78 00 00 00 82 00 8e 00 8d 00 85 00 92 00 5d 00 00 00 84 00 97 00 8f 00 8b 00 99 00 00 00 84 00 97 00 8f 00 8b 00 05 00


;explosion  
;No76 explosion                                             
[FPA 76 Begin]                                                  
Mode = 3                                                         
Type = 0                                                         
Address = 0x78186                                              
MotionBEnable0 = 3                                               
MotionBlur0 = 28                                                 
ConditionType = 0                                                
ConditionValueA = a10: 4b cf 4c cf 4d cf 4e cf 7c d0                    
ConditionValueB = a10: 00 00 00 00 00 00 00 00 00 00                    
ConditionValueC = a10: 84 00 97 00 8f 00 8b 00 99 00  


;No56 self-destruct                                                 
[FPA 56 Begin]                                                 
Mode = 3                                                        
Type = 0                                                        
Address = 0x78183                                               
MotionBEnable0 = 3                                              
MotionBlur0 = 23                                                
ConditionType = 0                                               
ConditionValueA = a12: 4b cf 4c cf 4d cf 4e cf 4f cf 7c d0      
ConditionValueB = a12: 00 00 00 00 00 00 00 00 00 00 00 00      
ConditionValueC = a12: 92 00 84 00 8b 00 85 00 83 00 78 00   


;No131 blizzard                                                                                                           
[FPA 131 Begin]                                                                                                                                 
Mode = 3                                                              
Type = 0                                                              
Address = 0x78180                                                     
MotionBEnable0 = 3                                                    
MotionBlur0 = 26                                                      
ConditionType = 0                                                     
ConditionValueA = a12: 4b cf 4c cf 4d cf 4e cf 4f cf 7c d0            
ConditionValueB = a12: 00 00 00 00 00 00 00 00 00 00 00 00            
ConditionValueC = a12: 81 00 8b 00 88 00 99 00 99 00 3b 00           


;confusion                                                     
[FPA conf Begin]                                                      
Mode = 3                                                                                     
Type = 0                                                             
Address = 0x3ef0a                                                  
MotionBEnable1 = 3                                                   
MotionBlur1 = 21                                                     
ConditionType = 0                                                     
ConditionValueA = a12: 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0            
ConditionValueB = a12: 00 00 00 00 00 00 00 00 00 00 00 00           
ConditionValueC = a12: 82 00 8e 00 8d 00 85 00 92 00 5d 00  

;phychic                                                   
[FPA phy Begin]                                                                                                                
Mode = 3                                                   
Type = 0                                                   
Address = 0x3ef0d                                          
MotionBEnable1 = 3                                         
MotionBlur1 = 21                                           
ConditionType = 0                                          
ConditionValueA = a12: 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0 
ConditionValueB = a12: 00 00 00 00 00 00 00 00 00 00 00 00 
ConditionValueC = a12: 8f 00 92 00 98 00 82 00 88 00 5e 00    

[FPA phy End]                                                                                    
Mode = 3                                                                                         
Type = 1                                                                                         
Address = 0x7918d                                                                                
ConditionType = 0                                                                                                                                
ConditionValueA = a12: 4b cf 4c cf 4d cf 4e cf 50 cf 7c d0   
ConditionValueB = a12: 00 00 00 00 00 00 00 00 00 00 00 00   
ConditionValueC = a12: 8f 00 92 00 98 00 82 00 88 00 5e 00

this should be for US red version


This isn't easy to say, but…
Music and ASM hacker

Offline

#2 2016-03-06 12:34:03

Ammako
Member
Registered: 2016-03-06
Post 1/158

Re: Pokemon Red VC patches

What about Yellow? That one has a few more interesting changes (especially Jynx's sprite having a 5th color in its palette.)

Offline

#3 2016-03-07 00:11:47

Tauwasser
Member
Registered: 2010-10-16
Post 442/452

Re: Pokemon Red VC patches

Ammako wrote:

especially Jynx's sprite having a 5th color in its palette

That's just a good use of the black and white that every sprite uses, see http://bulbapedia.bulbagarden.net/wiki/ … 29#Sprites

cYa,

Tauwasser

Offline

#4 2016-03-07 00:43:26

Ammako
Member
Registered: 2016-03-06
Post 6/158

Re: Pokemon Red VC patches

I'm not sure I understand. The Yellow VC sprite has black, purple, red, yellow and white.

Offline

#5 2016-03-07 01:51:19

Mateo
Member
From: The Sims 4
Registered: 2009-11-25
Post 3,264/3,578

Re: Pokemon Red VC patches

Because the top rows of the sprite load one palette (which uses purple instead of black) and the bottom rows load a second palette, which uses black as it normally would.

Offline

#6 2016-03-07 02:16:06

Ammako
Member
Registered: 2016-03-06
Post 7/158

Re: Pokemon Red VC patches

Ahh, gotcha; thanks for the clarification. Didn't know that was possible.

Last edited by Ammako (2016-03-07 02:16:54)

Offline

#7 2016-03-07 02:39:06

Mateo
Member
From: The Sims 4
Registered: 2009-11-25
Post 3,265/3,578

Re: Pokemon Red VC patches

Originally, it was setup to only load one palette per sprite, but clearly they decided to rework that a little for the VC release. So it's possible, but you're right in thinking that wasn't how it originally worked.

Offline

#8 2016-03-08 15:00:37

FroggestSpirit
Member
Registered: 2012-03-12
Post 268/300
Website

Re: Pokemon Red VC patches

Upon further inspection, the patches have nothing to do with palettes 5 and 6 blanking out. I was also able to confirm that only colors 2-4 of palettes 5 and 6 get overwritten with 0xFFFF.
This leads me to think the code responsible for that is in the emulator. It seems to update, because leaving the palette index as 1 (FF68=1) in the color hack after palettes are updated, palettes 5 and 6 in the VC flicker white when moving


This isn't easy to say, but…
Music and ASM hacker

Offline

#9 2016-03-09 23:50:44

Fotomac
Member
Registered: 2015-10-25
Post 173/332

Re: Pokemon Red VC patches

Mateo wrote:

Originally, it was setup to only load one palette per sprite, but clearly they decided to rework that a little for the VC release. So it's possible, but you're right in thinking that wasn't how it originally worked.

I suspect a certain controversy had something to do with it...

Offline

#10 2016-03-12 22:23:39

lusentoj
Member
From: Sweden
Registered: 2016-02-29
Post 10/31

Re: Pokemon Red VC patches

Oh, this is interesting! I've bought Green for my 3DS and was wondering what kind of changes they'd made. I have a gameboy cartridge of it too, but I'm not overly familiar with the games so I wouldn't notice any differences.

(Off-topic but I'm REALLY disappointed that the games aren't in color in the 3DS' emulator!!)

Last edited by lusentoj (2016-03-12 22:24:21)

Offline

#11 2016-06-27 20:14:02

Crystal_
Member
From: Spain
Registered: 2012-09-16
Post 393/450
Website

Re: Pokemon Red VC patches

Anybody knows how the RNG is handled in link battles on the vc? The "fight_ret" patch completely breaks the original prng functionality.

Offline

Board footer

Powered by FluxBB