This patch took some working out!
The patch isn't as generic as first thought there are games (mostly pre 2002) that dont have the hex. However several previous titles that were as yet unfixed are now working in 480p.
Please not that this patch may affect the display aspect ratio is a game request 100h flag (10x11 aspect) or 200h (emu frame rate) it will most likely not happen since it is replaced with 00.
I have contacted copyhunters who has agreed to code a tool to help patch these games.
*
Please always backup your original xbe*
Background to patchI was looking at Broken Sword 3 doing the usual with IDA, searching for 280h, the pointer used in the CreateDevice(x,x,x,x,x,
x,x) call etc - when it all clicked.
The 6th 'x' in CreateDevice(x,x,x,x,x,
x,x) is the struct _D3DPRESENT_PARAMETERS_.
This describes the presentation parameters. It just so happens that this struct holds a Dword 'Flags'.
Flags is what all previous patches have been looking for i.e. patching a 20 (interlaced) /
120 (interlaced 10x11 aspect to 00 (autoslect) / 40 (progressive). Flags can be set to 0,
or to one or more flags ORed together. Within the CreateDevice call the struct is broken down,
'Flags' being the 11th value is stored at +28h.
Below you can see that the original XBE movs edi+28h to edx (mov edx, [edi+28h]), this
however isn't pushed to SetVideoMode this the end (push edx), this means the the 1st arg of the
setVideoMode must be the value for 'Flags'. If i could push a value of 0 and cause it to ignor the
original value of edi+28h then it would cause the display to autoselect 480i/p!
To do this however would mean to 'nop' out 8B 57 28 with 90 90 90 and as you can see push edx (52)
is only one hex a push 0 (6A 00) requires 2. Now its not possible to push 0 at the location of 90 90 90
since the push(s) need to be in order. So to make this patch work the code was rearanged as shown below.
CODE
[b]Original XBE [/b]
8B 57 28 mov edx, [edi+28h]
50 push eax
8B 47 30 mov eax, [edi+30h]
50 push eax
8B 47 2C mov eax, [edi+2Ch]
51 push ecx
8B 4F 04 mov ecx, [edi+4]
52 push edx
call ?SetVideoMode@CMiniport@D3D@@QAEXKKKKW4_D3DFORMAT@@KK@Z; D3D::CMiniport::SetVideoMode(ulong,ulong,ulong,ulong,_D3DFORMAT,ulong,ulong)
8B 57 28 50 8B 47 30-50 8B 47 2C 51 8B 4F 04 52
[b]Patched XBE[/b]
50 push eax
8B 47 30 mov eax, [edi+30h]
50 push eax
8B 47 2C mov eax, [edi+2Ch]
51 push ecx
8B 4F 04 mov ecx, [edi+4]
90 nop
6A 00 push 0
90 nop
call ?SetVideoMode@CMiniport@D3D@@QAEXKKKKW4_D3DFORMAT@@KK@Z; D3D::CMiniport::SetVideoMode(ulong,ulong,ulong,ulong,_D3DFORMAT,ulong,ulong)
50 8B 47 30 50 8B 47 2C 51 8B 4F 04 90 6A 00
The patch 
Replace
8B 57 28 50 8B 47 30-50 8B 47 2C 51 8B 4F 04 52
with:
50 8B 47 30 50 8B 47 2C 51 8B 4F 04 90 6A 00 90Test ResultsHere are the test results.
Green = working in 480i/p autoselection
Red = hex not found
Please update the list with your results as i don't have many of the games on this list available to test.
007: Agent Under Fire (NTSC) Antz Extreme Racing
Battlestar
Broken Sword: The Sleeping Dragon (NTSC)
Broken Sword: The Sleeping Dragon (PAL)Catwoman
Chessmaster
Colin McRae 3Digimon Rumble Arena 2 DVD Region X
Haunted House ***
Headhunter: Redemption
High Roller Casino
Hitman 2: Silent Assassin
Hitman: Contracts
I-Ninja
International Superstar Soccer 2
Knockout Kings 2002
Kung-Fu Chaos (MIX) Mafia
ManhuntMashed
Metal Slug 3 (NTSC)
MLB Slugfest
MLB Slugfest 20-04
Outlaw Golf 2 (PAL)Pro Fishing Challenge
Pro Race Driver
Scooby Doo Night of 100 Frights
Sega GT 2000
Sega GT 2002 (PAL)
Shell Shock: NAM'67SpongeBob SquarePants: Battle for Bikini Bottom
Street Racing Syndicate Star Wars: The Clone Wars
Starsky & Hutch (PAL)
TAK 2: Staff Of Dreams (NTSC)**
Teenage Mutant Ninja Turtles Teenage Mutant Ninja Turtles 2: Battle Nexus (PAL)The Thing
Time Splitters 2 (PAL)*
V8 supercars
Vietcong: Purple Haze
Wallace & Gromit**
Worms 3D (PAL) *
Xbox DVD Playback Kit
XGRA: Extreme Racing (NTSC)* Region locked to PAL.
** already 480p
*** reverts to 480i