From 4f89f21f99a61dbd9cc05b9f74549d89fb109d5d Mon Sep 17 00:00:00 2001 From: shadowladyngemu Date: Sat, 25 Jun 2011 08:31:42 +0000 Subject: [PATCH] GSdx: CRC hackixes for... The Lord of the Rings: the Third Age (Removing fat stripes on screen). Digimon Rumble Arena 2 (Half screen issue). Star Wars - The Force Unleashed (Hiding HUD and 3d issues. Not perfect and NTSC-U only, not sure if it works with PAL). Star Wars Battlefront 1/2 (Huge VRAM usage issue. NTSC-U only, not sure if it works with others). Black Hawk Down - Team Sabre (Half screen issue and removes the night vision filter which was broken and using a lot of VRAM). Minimal changes to other CRC hackfixes and GameDB. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4766 96395faa-99c1-11dd-bbfe-3dabce05a288 --- bin/GameIndex.dbf | 39 +++++++--- plugins/GSdx/GSCrc.cpp | 17 ++++- plugins/GSdx/GSCrc.h | 7 ++ plugins/GSdx/GSRendererHW.h | 62 ++++++++++++++-- plugins/GSdx/GSState.cpp | 138 ++++++++++++++++++++++++++++++------ 5 files changed, 227 insertions(+), 36 deletions(-) diff --git a/bin/GameIndex.dbf b/bin/GameIndex.dbf index fae00a7502..522573562f 100644 --- a/bin/GameIndex.dbf +++ b/bin/GameIndex.dbf @@ -4803,13 +4803,14 @@ Serial = SLUS-20731 Name = Tony Hawk's Underground Region = NTSC-U Compat = 5 -vuRoundMode = 0 //Crashes without. +vuRoundMode = 0 //Crashes without. --------------------------------------------- Serial = SLUS-20732 Name = Drakengard Region = NTSC-U Compat = 5 -eeClampMode = 3 //characters are visible in-game. +eeClampMode = 3 //characters are visible in-game. +EETimingHack = 1 //flickering textures. --------------------------------------------- Serial = SLUS-20733 Name = Castlevania - Lament of Innocence @@ -6357,7 +6358,7 @@ Compat = 5 Serial = SLUS-21067 Name = Digimon Rumble Arena 2 Region = NTSC-U -Compat = 1 +Compat = 5 FpuCompareHack = 1 --------------------------------------------- Serial = SLUS-21068 @@ -7809,6 +7810,7 @@ Serial = SLUS-21373 Name = Drakengard 2 Region = NTSC-U Compat = 5 +EETimingHack = 1 //flickering textures. --------------------------------------------- Serial = SLUS-21374 Name = Marvel - Ultimate Alliance @@ -8403,7 +8405,8 @@ Region = NTSC-U Serial = SLUS-21498 Name = Naruto - Uzumaki Chronicles Region = NTSC-U -Compat = 4 +Compat = 5 +OPHFLagHack = 1 --------------------------------------------- Serial = SLUS-21499 Name = Evolution GT @@ -8695,6 +8698,7 @@ Compat = 4 Serial = SLUS-21594 Name = Naruto - Uzumaki Chronicles 2 Region = NTSC-U +OPHFLagHack = 1 --------------------------------------------- Serial = SLUS-21595 Name = T.M.N.T. - Teenage Mutant Ninja Turtles @@ -8786,7 +8790,7 @@ Compat = 5 Serial = SLUS-21614 Name = Star Wars - The Force Unleashed Region = NTSC-U -Compat = 4 +Compat = 5 --------------------------------------------- Serial = SLUS-21615 Name = Wild Arms 5 @@ -19446,6 +19450,7 @@ Region = NTSC-J Serial = SLPM-65926 Name = Y's IV - Mask of the Sun - A New Theory Region = NTSC-J +eeClampMode = 3 --------------------------------------------- Serial = SLPM-65927 Name = Forgotten Realms - Demon Stone @@ -25153,7 +25158,7 @@ Region = NTSC-J Serial = SLPS-25074 Name = Project Zero Region = NTSC-J -Compat = 4 +Compat = 5 --------------------------------------------- Serial = SLPS-25075 Name = Sidewinder F @@ -25858,7 +25863,7 @@ Region = NTSC-J Serial = SLPS-25303 Name = Zero - Crimson Butterfly Region = NTSC-J -Compat = 4 +Compat = 5 --------------------------------------------- Serial = SLPS-25304 Name = Beast Sapp @@ -26759,6 +26764,7 @@ Serial = SLPS-25542 Name = Naruto Uzumaki Ninden Region = NTSC-J Compat = 4 +OPHFLagHack = 1 --------------------------------------------- Serial = SLPS-25543 Name = Futakoi - Koi to Mizugi no Survival @@ -27419,6 +27425,7 @@ Region = NTSC-J Serial = SLPS-25714 Name = Naruto - Konoha Spirits Region = NTSC-J +OPHFLagHack = 1 --------------------------------------------- Serial = SLPS-25715 Name = Tales of Destiny @@ -34889,7 +34896,7 @@ Region = PAL-Unk Serial = SLES-52467 Name = dot Hack - Part 2 - Mutation Region = PAL-M5 -Compat = 4 +Compat = 5 --------------------------------------------- Serial = SLES-52468 Name = dot Hack - Part 4 - Quarantine @@ -35290,6 +35297,7 @@ Region = PAL-Unk Serial = SLES-52631 Name = Digimon Rumble Arena 2 Region = PAL-Unk +Compat = 5 FpuCompareHack = 1 --------------------------------------------- Serial = SLES-52636 @@ -37667,6 +37675,7 @@ Region = PAL-Unk Serial = SLES-53794 Name = Drakengard 2 Region = PAL-Unk +EETimingHack = 1 //flickering textures. --------------------------------------------- Serial = SLES-53796 Name = FIFA Street 2 @@ -39465,8 +39474,20 @@ Name = Armored Core - Nexus Region = PAL-Unk --------------------------------------------- Serial = SLES-82038 -Name = Onimusha - Dawn of Dreams +Name = Onimusha - Dawn of Dreams [Disc1] Region = PAL-Unk +[patches = 812C5A96] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] +--------------------------------------------- +Serial = SLES-82039 +Name = Onimusha - Dawn of Dreams [Disc2] +Region = PAL-Unk +[patches = 812C5A96] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] --------------------------------------------- Serial = SLES-82042 Name = Metal Gear Solid 3 - Subsistance [Disc1of2] diff --git a/plugins/GSdx/GSCrc.cpp b/plugins/GSdx/GSCrc.cpp index fcd18fb996..3d6d09610f 100644 --- a/plugins/GSdx/GSCrc.cpp +++ b/plugins/GSdx/GSCrc.cpp @@ -137,7 +137,8 @@ CRC::Game CRC::m_games[] = {0x26689C87, Spartan, JP, 0}, {0x5ED8FB53, AceCombat4, JP, 0}, {0x1B9B7563, AceCombat4, NoRegion, 0}, - {0xEC432B24, Drakengard2, NoRegion, 0}, + {0xEC432B24, Drakengard2, EU, 0}, + {0x1648E3C9, Drakengard2, US, 0}, {0xFC46EA61, Tekken5, JP, 0}, {0x1F88EE37, Tekken5, EU, 0}, {0x1F88BECD, Tekken5, EU, 0}, //language selector... @@ -160,6 +161,8 @@ CRC::Game CRC::m_games[] = {0xE96E55BD, GodOfWar2, JP, 0}, {0xF8CD3DF6, GodOfWar2, NoRegion, 0}, {0x0B82BFF7, GodOfWar2, NoRegion, 0}, + {0x5990866f, GodOfWar2, NoRegion, 0}, + {0xDCD9A9F7, GodOfWar2, NoRegion, 0}, {0x5D482F18, JackieChanAdv, NoRegion, 0}, {0xf0a6d880, HarvestMoon, US, 0}, {0x75c01a04, NamcoXCapcom, US, 0}, @@ -221,6 +224,7 @@ CRC::Game CRC::m_games[] = {0x8164C614, Sly3, EU, 0}, {0x07652DD9, Sly2, US, 0}, {0xFDA1CBF6, Sly2, EU, 0}, + {0x15DD1F6F, Sly2, NoRegion, 0}, {0xA9C82AB9, DemonStone, US, 0}, {0x7C7578F3, DemonStone, EU, 0}, {0x506644B3, BigMuthaTruckers, EU, 0}, @@ -234,6 +238,8 @@ CRC::Game CRC::m_games[] = {0xDC43F2B8, LordOfTheRingsTwoTowers, EU, 0}, {0x9ABF90FB, LordOfTheRingsTwoTowers, ES, 0}, {0xC0E909E9, LordOfTheRingsTwoTowers, JP, 0}, + {0xEB198738, LordOfTheRingsThirdAge, US, 0}, + {0x614F4CF4, LordOfTheRingsThirdAge, EU, 0}, {0xE169BAF8, RedDeadRevolver, US, 0}, {0xE2E67E23, RedDeadRevolver, EU, 0}, {0xEDDD6573, SpidermanWoS, US, 0}, //Web of Shadows @@ -258,6 +264,15 @@ CRC::Game CRC::m_games[] = {0xB3A9F9ED, Black, JP, 0}, {0x4F755D39, TyTasmanianTiger, US, 0}, {0xD59D3252, TyTasmanianTiger, EU, 0}, + {0x44A5FA15, FFVIIDoC, US, 0}, + {0x33F7D21A, FFVIIDoC, EU, 0}, + {0xAFAC88EF, FFVIIDoC, JP, 0}, + {0x568A5C78, DigimonRumbleArena2, US, 0}, + {0x785E22BB, DigimonRumbleArena2, EU, 0}, + {0x879CDA5E, StarWarsForceUnleashed, US, 0}, + {0x503BF9E1, StarWarsBattlefront, US, 0}, + {0x02F4B541, StarWarsBattlefront2, US, 0}, + {0xA8DB29DF, BlackHawkDown, EU, 0}, }; hash_map CRC::m_map; diff --git a/plugins/GSdx/GSCrc.h b/plugins/GSdx/GSCrc.h index 9f4cd021ab..ce9849ad0c 100644 --- a/plugins/GSdx/GSCrc.h +++ b/plugins/GSdx/GSCrc.h @@ -93,6 +93,7 @@ public: TimeSplitters2, ReZ, LordOfTheRingsTwoTowers, + LordOfTheRingsThirdAge, RedDeadRevolver, SpidermanWoS, HeavyMetalThunder, @@ -103,6 +104,12 @@ public: CastlevaniaLoI, Black, TyTasmanianTiger, + FFVIIDoC, + DigimonRumbleArena2, + StarWarsForceUnleashed, + StarWarsBattlefront, + StarWarsBattlefront2, + BlackHawkDown, TitleCount, }; diff --git a/plugins/GSdx/GSRendererHW.h b/plugins/GSdx/GSRendererHW.h index 1e8b2ff2c8..e53b89854f 100644 --- a/plugins/GSdx/GSRendererHW.h +++ b/plugins/GSdx/GSRendererHW.h @@ -158,7 +158,7 @@ class GSRendererHW : public GSRendererT uint32 FBW = m_context->FRAME.FBW; uint32 FPSM = m_context->FRAME.PSM; - if((FBP == 0x00f00 || FBP == 0x00100) && FPSM == PSM_PSMZ24) // ntsc 0xf00, pal 0x100 + if((FBP == 0x00f00 || FBP == 0x00100 || FBP == 0x01280) && FPSM == PSM_PSMZ24) // ntsc 0xf00, pal 0x100, ntsc "HD" 0x1280 { // z buffer clear @@ -254,14 +254,12 @@ class GSRendererHW : public GSRendererT { //only top half of the screen clears m_dev->ClearDepth(ds, 0); - - return false; } return true; } - bool OI_TyTasmanianTiger(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) //fbp 0x3680 ntsc, 0x3200 pal , PSM_PSMCT24 + bool OI_TyTasmanianTiger(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) { uint32 FBP = m_context->FRAME.Block(); uint32 FBW = m_context->FRAME.FBW; @@ -278,6 +276,59 @@ class GSRendererHW : public GSRendererT return true; } + bool OI_DigimonRumbleArena2(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) + { + uint32 FBP = m_context->FRAME.Block(); + uint32 FPSM = m_context->FRAME.PSM; + + if(!PRIM->TME) + { + if((FBP == 0x02300 || FBP == 0x03fc0) && FPSM == PSM_PSMCT32) + { + //half height buffer clear + m_dev->ClearDepth(ds, 0); + } + } + + return true; + } + + bool OI_BlackHawkDown(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) + { + uint32 FBP = m_context->FRAME.Block(); + uint32 FPSM = m_context->FRAME.PSM; + + if(FBP == 0x02000 && FPSM == PSM_PSMZ24) + { + //half height buffer clear + m_dev->ClearDepth(ds, 0); + + return false; + } + + return true; + } + + bool OI_StarWarsForceUnleashed(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) + { + uint32 FBP = m_context->FRAME.Block(); + uint32 FPSM = m_context->FRAME.PSM; + + if(FPSM == PSM_PSMCT24 && FBP == 0x2bc0) + { + m_dev->ClearDepth(ds, 0); + + return false; + } + else if((FBP == 0x36e0 || FBP == 0x34a0) && FPSM == PSM_PSMCT24) + { + m_dev->ClearDepth(ds, 0); + } + + return true; + } + + bool OI_PointListPalette(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) { if(m_vt.m_primclass == GS_POINT_CLASS && !PRIM->TME) @@ -460,6 +511,9 @@ class GSRendererHW : public GSRendererT m_oi_list.push_back(HackEntry(CRC::RozenMaidenGebetGarden, CRC::RegionCount, &GSRendererHW::OI_RozenMaidenGebetGarden)); m_oi_list.push_back(HackEntry(CRC::SpidermanWoS, CRC::RegionCount, &GSRendererHW::OI_SpidermanWoS)); m_oi_list.push_back(HackEntry(CRC::TyTasmanianTiger, CRC::RegionCount, &GSRendererHW::OI_TyTasmanianTiger)); + m_oi_list.push_back(HackEntry(CRC::DigimonRumbleArena2, CRC::RegionCount, &GSRendererHW::OI_DigimonRumbleArena2)); + m_oi_list.push_back(HackEntry(CRC::StarWarsForceUnleashed, CRC::RegionCount, &GSRendererHW::OI_StarWarsForceUnleashed)); + m_oi_list.push_back(HackEntry(CRC::BlackHawkDown, CRC::RegionCount, &GSRendererHW::OI_BlackHawkDown)); m_oo_list.push_back(HackEntry(CRC::DBZBT2, CRC::RegionCount, &GSRendererHW::OO_DBZBT2)); m_oo_list.push_back(HackEntry(CRC::MajokkoALaMode2, CRC::RegionCount, &GSRendererHW::OO_MajokkoALaMode2)); diff --git a/plugins/GSdx/GSState.cpp b/plugins/GSdx/GSState.cpp index dc161c2ef7..fe62f831d9 100644 --- a/plugins/GSdx/GSState.cpp +++ b/plugins/GSdx/GSState.cpp @@ -343,7 +343,7 @@ GSVector2i GSState::GetDeviceSize(int i) }*/ //Fixme : Just slightly better than the hack above - if(m_regs->SMODE2.INT && m_regs->SMODE2.FFMD && h > 1) + if(m_regs->SMODE2.INT && !m_regs->SMODE2.FFMD && h > 1) { if (IsEnabled(0) || IsEnabled(1)) { @@ -2402,13 +2402,12 @@ bool GSC_GodOfWar2(const GSFrameInfo& fi, int& skip) { if(fi.TME) { - if( (fi.FBP == 0x00100 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00100 && fi.TPSM == PSM_PSMCT16 // ntsc + if( fi.FBP == 0x00100 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00100 && fi.TPSM == PSM_PSMCT16 // ntsc || fi.FBP == 0x02100 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x02100 && fi.TPSM == PSM_PSMCT16) // pal - && (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) { skip = 1000; // shadows } - if(fi.FBP == 0x00100 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 & 0x03000) == 0x03000 + if((fi.FBP == 0x00100 || fi.FBP == 0x02100) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 & 0x03000) == 0x03000 && (fi.TPSM == PSM_PSMT8 || fi.TPSM == PSM_PSMT4) && ((fi.TZTST == 2 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 1 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 3 && fi.FBMSK == 0xFF000000))) { @@ -2481,14 +2480,14 @@ bool GSC_SonicUnleashed(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && fi.FPSM == PSM_PSMCT16S && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x00000) + if(fi.TME && fi.FPSM == PSM_PSMCT16S && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT16) { skip = 1000; // shadow } } else { - if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMCT16S && fi.FBMSK == 0x00000) + if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMCT16S) { skip = 2; } @@ -2636,20 +2635,7 @@ bool GSC_SuikodenTactics(const GSFrameInfo& fi, int& skip) return true; } -bool GSC_TenchuWoH(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.TPSM == PSM_PSMZ16 && fi.FPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF) - { - skip = 3; - } - } - - return true; -} - -bool GSC_TenchuFS(const GSFrameInfo& fi, int& skip) +bool GSC_Tenchu(const GSFrameInfo& fi, int& skip) { if(skip == 0) { @@ -2786,6 +2772,26 @@ bool GSC_LordOfTheRingsTwoTowers(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_LordOfTheRingsThirdAge(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(!fi.TME && fi.FBP == 0x03000 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4 && fi.FBMSK == 0xFF000000) + { + skip = 1000; //shadows + } + } + else + { + if (fi.TME && (fi.FBP == 0x0 || fi.FBP == 0x00e00 || fi.FBP == 0x01000) && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x03000 && fi.TPSM == PSM_PSMCT24) + { + skip = 1; + } + } + + return true; +} + bool GSC_RedDeadRevolver(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -2884,6 +2890,88 @@ bool GSC_Black(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_FFVIIDoC(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x01c00 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x02c00 && fi.TPSM == PSM_PSMCT24) + { + skip = 1; + } + } + + return true; +} + +bool GSC_StarWarsForceUnleashed(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP == 0x038a0 || fi.FBP == 0x03ae0) && fi.FPSM == fi.TPSM && fi.TBP0 == 0x02300 && fi.TPSM == PSM_PSMZ24) + { + skip = 1000; //9, shadows + } + } + else + { + if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == fi.TPSM && (fi.TBP0 == 0x034a0 || fi.TBP0 == 0x36e0) && fi.TPSM == PSM_PSMCT16) + { + skip = 2; + } + + } + + return true; +} + +bool GSC_StarWarsBattlefront(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP > 0x0 && fi.FBP < 0x00e00) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 > 0x02000 && fi.TBP0 < 0x02e00) && fi.TPSM == PSM_PSMT8) + { + skip = 1; + } + } + + return true; +} + +bool GSC_StarWarsBattlefront2(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP > 0x01000 && fi.FBP < 0x01e00) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 > 0x0 && fi.TBP0 < 0x00e00) && fi.TPSM == PSM_PSMT8) + { + skip = 1; + } + if(fi.TME && (fi.FBP > 0x01000 && fi.FBP < 0x01e00) && fi.FPSM == PSM_PSMZ32 && (fi.TBP0 > 0x0 && fi.TBP0 < 0x0e00) && fi.TPSM == PSM_PSMT8) + { + skip = 1; + } + } + + return true; +} + +bool GSC_BlackHawkDown(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x00800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01800 && fi.TPSM == PSM_PSMZ16) + { + skip = 2; //wall of fog + } + if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT8) + { + skip = 5; //night filter + } + } + + return true; +} + + bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) { GSFrameInfo fi; @@ -2942,8 +3030,8 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) map[CRC::RadiataStories] = GSC_RadiataStories; map[CRC::HauntingGround] = GSC_HauntingGround; map[CRC::SuikodenTactics] = GSC_SuikodenTactics; - map[CRC::TenchuWoH] = GSC_TenchuWoH; - map[CRC::TenchuFS] = GSC_TenchuFS; + map[CRC::TenchuWoH] = GSC_Tenchu; + map[CRC::TenchuFS] = GSC_Tenchu; map[CRC::Sly3] = GSC_Sly3; map[CRC::Sly2] = GSC_Sly2; map[CRC::DemonStone] = GSC_DemonStone; @@ -2951,12 +3039,18 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) map[CRC::TimeSplitters2] = GSC_TimeSplitters2; map[CRC::ReZ] = GSC_ReZ; map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers; + map[CRC::LordOfTheRingsThirdAge] = GSC_LordOfTheRingsThirdAge; map[CRC::RedDeadRevolver] = GSC_RedDeadRevolver; map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder; map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers; map[CRC::CastlevaniaCoD] = GSC_Castlevania; map[CRC::CastlevaniaLoI] = GSC_Castlevania; map[CRC::Black] = GSC_Black; + map[CRC::FFVIIDoC] = GSC_FFVIIDoC; + map[CRC::StarWarsForceUnleashed] = GSC_StarWarsForceUnleashed; + map[CRC::StarWarsBattlefront] = GSC_StarWarsBattlefront; + map[CRC::StarWarsBattlefront2] = GSC_StarWarsBattlefront2; + map[CRC::BlackHawkDown] = GSC_BlackHawkDown; } // TODO: just set gsc in SetGameCRC once