diff --git a/plugins/GSdx/GSCrc.cpp b/plugins/GSdx/GSCrc.cpp index 5bffeb484c..2b2fd43ea4 100644 --- a/plugins/GSdx/GSCrc.cpp +++ b/plugins/GSdx/GSCrc.cpp @@ -94,6 +94,7 @@ CRC::Game CRC::m_games[] = {0x0393B6BE, DBZBT2, EU, 0}, {0xE2F289ED, DBZBT2, JP, 0}, // Sparking Neo! {0xE29C09A3, DBZBT2, KO, 0}, //DragonBall Z Sparking Neo + {0x0BAA4387, DBZBT2, JP, 0}, {0x35AA84D1, DBZBT2, NoRegion, 0}, {0x428113C2, DBZBT3, US, 0}, {0xA422BB13, DBZBT3, EU, 0}, @@ -101,19 +102,24 @@ CRC::Game CRC::m_games[] = {0x983C53D2, DBZBT3, NoRegion, 0}, {0x983C53D3, DBZBT3, NoRegion, 0}, {0x9B0E119F, DBZBT3, KO, 0}, //DragonBall Z Sparking Meteo + {0xF28D21F1, DBZBT3, JP, 0}, {0x72B3802A, SFEX3, US, 0}, {0x71521863, SFEX3, US, 0}, {0x28703748, Bully, US, 0}, + {0x019CFA48, Bully, JP, 0}, {0xC78A495D, BullyCC, US, 0}, {0xC19A374E, SoTC, US, 0}, {0x7D8F539A, SoTC, EU, 0}, {0x0F0C4A9C, SoTC, EU, 0}, {0x877F3436, SoTC, JP, 0}, {0xA17D6AAA, SoTC, KO, 0}, + {0x877B3D35, SoTC, CH, 0}, {0x3122B508, OnePieceGrandAdventure, US, 0}, {0x8DF14A24, OnePieceGrandAdventure, EU, 0}, {0xE446C9F9, OnePieceGrandAdventure, KO, 0}, {0xCA2073B3, OnePieceGrandBattle, KO, 0}, + {0x66953267, OnePieceGrandAdventure, JP, 0}, + {0x947B933B, OnePieceGrandAdventure, US, 0}, {0xB049DD5E, OnePieceGrandBattle, US, 0}, {0x5D02CC5B, OnePieceGrandBattle, NoRegion, 0}, {0x6F8545DB, ICO, US, 0}, @@ -121,12 +127,17 @@ CRC::Game CRC::m_games[] = {0x2DF2C1EA, ICO, KO, 0}, {0x5C991F4E, ICO, NoRegion, 0}, {0x7ACF7E03, ICO, NoRegion, 0}, + {0x29C28734, ICO, CH, 0}, {0xAEAD1CA3, GT4, JP, 0}, {0x30E41D93, GT4, KO, 0}, {0x44A61C8F, GT4, EU, 0}, {0x0086E35B, GT4, EU, 0}, {0x77E61C8A, GT4, US, 0}, {0x33C6E35E, GT4, US, 0}, + {0x7ABDBB5E, GT3, CH, 0}, //GT4中文D9版 + {0x3E9D448A, GT3, CH, 0}, //GT4中文D5版 + {0xAD66643C, GT3, CH, 0}, //GT4中文D9轉D5版 + {0x6810C3BC, GT3, CH, 0}, //GRAN TURISMO Concept 2002 Tokyo-Geneva中文版 {0x85AE91B3, GT3, US, 0}, {0xC220951A, GT3, NoRegion, 0}, {0x60013EBD, GTConcept, EU, 0}, @@ -146,6 +157,8 @@ CRC::Game CRC::m_games[] = {0x3A03D62F, CrashBandicootWoC, EU, 0}, {0x013E349D, ResidentEvil4, US, 0}, {0x6BA2F6B9, ResidentEvil4, NoRegion, 0}, + {0xDBB7A559, ResidentEvil4, US, 0}, + {0x6BA2F6B9, ResidentEvil4, EU, 0}, {0x60FA8C69, ResidentEvil4, JP, 0}, {0x5F254B7C, ResidentEvil4, KO, 0}, {0x72E1E60E, Spartan, NoRegion, 0}, @@ -155,6 +168,7 @@ CRC::Game CRC::m_games[] = {0x1B9B7563, AceCombat4, NoRegion, 0}, {0xEC432B24, Drakengard2, EU, 0}, {0x1648E3C9, Drakengard2, US, 0}, + {0xB7ADB13A, Drakengard2, CH, 0}, //復仇龍騎士2 {0xFC46EA61, Tekken5, JP, 0}, {0x1F88EE37, Tekken5, EU, 0}, {0x1F88BECD, Tekken5, EU, 0}, //language selector... @@ -172,6 +186,9 @@ CRC::Game CRC::m_games[] = {0xE23D532B, GodOfWar, NoRegion, 0}, {0xDF1AF973, GodOfWar, NoRegion, 0}, {0xD6385328, GodOfWar, NoRegion, 0}, + {0x1A85E924, GodOfWar, NoRegion, 0}, //天幻1+2,不能同時使用 + {0xCA052D22, GodOfWar, JP, 0}, + {0x608ACBD3, GodOfWar, CH, 0}, //完美漢化修改版 {0x2F123FD8, GodOfWar2, RU, 0}, {0x2F123FD8, GodOfWar2, US, 0}, {0x44A8A22A, GodOfWar2, EU, 0}, @@ -180,7 +197,12 @@ CRC::Game CRC::m_games[] = {0xF8CD3DF6, GodOfWar2, NoRegion, 0}, {0x0B82BFF7, GodOfWar2, NoRegion, 0}, {0x5990866F, GodOfWar2, NoRegion, 0}, + {0xE96E55BD, GodOfWar2, JP, 0}, + {0xC4C4FD5F, GodOfWar2, CH, 0}, + {0x5990866f, GodOfWar2, NoRegion, 0}, {0xDCD9A9F7, GodOfWar2, NoRegion, 0}, + {0xFA0DF523, GodOfWar2, CH, 0}, //完美漢化修改版D5 + {0x9FEE3466, GodOfWar2, CH, 0}, //完美漢化修改版D9 {0x5D482F18, JackieChanAdv, NoRegion, 0}, {0xF0A6D880, HarvestMoon, US, 0}, {0x75C01A04, NamcoXCapcom, US, 0}, @@ -207,6 +229,8 @@ CRC::Game CRC::m_games[] = {0xFADEBC45, Genji, EU, 0}, {0xB4776FC1, Genji, JP, 0}, {0x56242EC9, Genji, KO, 0}, + {0xCDAF243D, Genji, CH, 0}, + {0x2A5E0B61, Genji, CH, 0}, {0x7D4EA48F, Genji, NoRegion, 0}, {0xE04EA200, StarOcean3, EU, 0}, {0x23A97857, StarOcean3, US, 0}, @@ -237,6 +261,7 @@ CRC::Game CRC::m_games[] = {0xE47C1A9C, SMTDDS2, JP, ZWriteMustNotClear}, // SMT Digital Devil Saga 2 {0x0B8AB37B, RozenMaidenGebetGarden, JP, 0}, {0x1CC39DBD, SuikodenTactics, US, 0}, + {0xB808413B, SuikodenTactics, JP, 0}, //幻想水滸傳狂想曲 {0x3E205556, SuikodenTactics, EU, 0}, {0xB808413B, SuikodenTactics, JP, 0}, {0x64C58FB4, TenchuFS, US, 0}, @@ -272,6 +297,7 @@ CRC::Game CRC::m_games[] = {0x9ABF90FB, LordOfTheRingsTwoTowers, ES, 0}, {0xC0E909E9, LordOfTheRingsTwoTowers, JP, 0}, {0x6898435D, LordOfTheRingsTwoTowers, KO, 0}, + {0xDC2F9B98, LordOfTheRingsTwoTowers, CH, 0}, //魔戒二部曲 {0xEB198738, LordOfTheRingsThirdAge, US, 0}, {0x614F4CF4, LordOfTheRingsThirdAge, EU, 0}, {0x37CD4279, LordOfTheRingsThirdAge, KO, 0}, @@ -293,14 +319,53 @@ CRC::Game CRC::m_games[] = {0x3A446111, CastlevaniaCoD, US, 0}, {0xF321BC38, CastlevaniaCoD, EU, 0}, {0x950876FA, CastlevaniaCoD, KO, 0}, + {0x237B84D3, CastlevaniaCoD, CH, 0}, {0x28270F7D, CastlevaniaLoI, US, 0}, {0x306CDADA, CastlevaniaLoI, EU, 0}, {0xA36CFF6C, CastlevaniaLoI, JP, 0}, {0x9A93FE5D, CastlevaniaLoI, KO, 0}, + {0xA79B0491, NanoBreaker, JP, 0}, + {0x7985D894, FinalFightStreetwise, US, 0}, + {0xED4BF0D3, FinalFightStreetwise, US, 0}, //紅星 + {0xCBB87BF9, EvangelionJo, JP, 0}, //新世紀福音戰士:序 + {0x278A91FD, CaptainTsubasa, JP, 0}, //足球小將翼 + {0xC5B75C7C, Oneechanbara2Special, JP, 0}, //性感女劍士2特別編 + {0xC0659AD1, NarutimateAccel, JP, 0}, //火影忍者疾風傳 + {0xF3D9DFBE, NarutimateAccel, JP, 0}, + {0x59739DDE, Naruto, JP, 0}, //木葉英雄3 + {0xF7786EE4, EternalPoison, JP, 0}, //粉紅劇毒 + {0x2BE55519, EternalPoison, US, 0}, + {0xE01F57EC, LegoBatman, US, 0}, //樂高蝙蝠俠 + {0xE0347841, XE3, JP, 0}, //異域傳說3 + {0xA4E88698, XE3, CH, 0}, + {0x25FC361B, DevilMayCry3, US, 0}, //SE + {0x2F7D8AD5, DevilMayCry3, US, 0}, + {0x0BED0AF9, DevilMayCry3, US, 0}, + {0x79B8A95F, DevilMayCry3, US, 0}, + {0x18C9343F, DevilMayCry3, EU, 0}, //SE + {0x7ADCB24A, DevilMayCry3, EU, 0}, + {0x7F3D692D, DevilMayCry3, CH, 0}, + {0x79C952B0, DevilMayCry3, JP, 0}, //SE + {0x7F3DDEAB, DevilMayCry3, JP, 0}, + {0x1A85E924, DevilMayCry3, CH, 0}, //惡魔獵人3三合一中文特別版 + {0x0a8ef911, ArctheLad, US, 0}, //亞克傳承-精靈之黃昏 + {0x2C5E7DEA, ArctheLad, CH, 0}, + {0xE69E7F58, ArctheLad, US, 0}, //亞克傳承-黑暗之終結 + {0xB1995E29, ShadowofRome, EU, 0}, //羅馬之影 + {0x958DCA28, ShadowofRome, EU, 0}, + {0x57818AF6, ShadowofRome, US, 0}, + {0xF21EE6E0, CrashNburn, US, 0}, + {0x694A998E, TombRaiderUnderworld, JP, 0}, //8代地城奪寶 + {0xB639EB17, TombRaiderAnniversary, US, 0}, + {0xB05805B6, TombRaiderAnniversary, JP, 0}, //十週年紀念版 重返禁地 + {0xBC8B3F50, TombRaiderLegend, US, 0}, //7代傳奇 + {0x08FFF00D, SSX3, JP, 0}, //極限滑雪3 {0x5C891FF1, Black, US, 0}, {0xCAA04879, Black, EU, 0}, {0xADDFF505, Black, EU, 0}, //? {0xB3A9F9ED, Black, JP, 0}, + {0x7838882F, VF4, JP, 0}, + {0xEA131B57, VF4, US, 0}, {0x4F755D39, TyTasmanianTiger, US, 0}, {0xD59D3252, TyTasmanianTiger, EU, 0}, {0x5A1BB2A1, TyTasmanianTiger2, US, 0}, @@ -350,19 +415,77 @@ CRC::Game CRC::m_games[] = {0x98C7B76D, NanoBreaker, US, 0}, {0x7098BE76, NanoBreaker, KO, 0}, {0x9B89F425, NanoBreaker, EU, 0}, + {0xA79B0491, NanoBreaker, JP, 0}, //奈米殺神 {0x519E816B, Kunoichi, US, 0}, //Nightshade {0x3FB419FD, Kunoichi, JP, 0}, + {0x086D198E, Kunoichi, CH, 0}, {0x3B470BBD, Kunoichi, EU, 0}, {0x6BA65DD8, Kunoichi, KO, 0}, {0XD3F182A3, Yakuza, EU, 0}, {0x6F9F99F8, Yakuza, EU, 0}, {0x388F687B, Yakuza, US, 0}, + {0xB7B3800A, Yakuza, JP, 0}, {0xA60C2E65, Yakuza2, EU, 0}, {0x800E3E5A, Yakuza2, EU, 0}, {0x97E9C87E, Yakuza2, US, 0}, + {0xC6B95C48, Yakuza2, JP, 0}, {0x9000252A, SkyGunner, JP, 0}, + {0x93092623, SkyGunner, JP, 0}, {0xA9461CB2, SkyGunner, US, 0}, + {0xB799A60C, SkyGunner, NoRegion, 0}, {0x6848699B, JamesBondEverythingOrNothing, US, 0}, + {0xF7FB054C, Siren, CH, 0}, //死魂曲 + {0x90F4B057, ZettaiZetsumeiToshi2, CH, 0}, + {0xC988ECBB, ZettaiZetsumeiToshi2, JP, 0}, + {0x81CA29BE, VF4EVO, EU, 0}, + {0xC9DEF513, VF4EVO, US, 0}, + {0x7B402694, VF4EVO, KO, 0}, + {0xAB01411F, VF4EVO, JP, 0}, + {0xE11DFA28, Dororo, CH, 0}, + {0x89954774, Dororo, US, 0}, + {0xBD17248E, ShinOnimusha, JP, 0}, + {0xBE17248E, ShinOnimusha, JP, 0}, + {0xB817248E, ShinOnimusha, JP, 0}, + {0x812C5A96, ShinOnimusha, EU, 0}, + {0xFE44479E, ShinOnimusha, US, 0}, + {0xFFDE85E9, ShinOnimusha, US, 0}, + {0xE21404E2, GetaWay, US, 0}, + {0xE78971DF, GetaWayBlackMonday, US, 0}, + {0x1130BF23, SakuraTaisen, CH, 0}, //櫻花大戰熾熱之血 + {0xEF06DBD6, SakuraWarsSoLongMyLove, JP, 0}, //櫻花大戰5 + {0xDD41054D, SakuraWarsSoLongMyLove, US, 0}, //櫻花大戰5 + {0x4A4B623A, FightingBeautyWulong, JP,0}, //格鬥美神武龍 + {0x5AC7E79C, TouristTrophy, CH, 0}, //摩拖車浪漫旅 + {0xA1B3F232, GTASanAndreas, EU, 0}, //俠盜獵車手聖安地列斯 + {0x399A49CA, GTASanAndreas, US, 0}, + {0x60FE139C, GTASanAndreas, JP, 0}, + {0x2615F542, FrontMission5, JP, 0}, + {0xF60255AC, FrontMission5, JP, 0}, + {0xCB783836, FrontMission5, JP, 0}, + {0xAEDAEE99, GodHand, JP, 0}, + {0x6FB69282, GodHand, US, 0}, + {0x9637D496, KnightsOfTheTemple2, JP, 0}, //聖堂騎士團2 + {0x4E811100, UltramanFightingEvolution, JP, 0}, //超能力霸王戰鬥進化重生 + {0x0643F90C, RogueGalaxy, US, 0}, //俠盜銀河 + {0xCDEE4B19, RogueGalaxy, JP, 0}, + {0xF7F181C3, DeathByDegreesTekkenNinaWilliams, CH, 0}, //鐵拳妮娜 + {0x771C3B47, AlpineRacer3, JP, 0}, //阿爾卑斯山滑雪大賽3 + {0x449E1F6B, HummerBadlands, US, 0}, + {0xAEA1B3AD, SengokuBasara, JP, 0}, + {0x5B659BED, Grandia3, JP, 0}, + {0x5B657DAD, Grandia3, US, 0}, + {0x830B6FB1, TalesofSymphonia, JP, 0}, + {0x8409FD51, TalesofDestiny, JP, 0}, //導演剪輯版 + {0xA90CD846, TalesofDestiny, JP, 0}, + {0xC4D0FACC, SDGundamGGeneration, JP, 0}, //世紀戰役 + {0xBBDE6926, SDGundamGGeneration, JP, 0}, //戰魂 + {0x49D60A00, SDGundamGGeneration, JP, 0}, //NEO + {0xFB8554A0, SoulCalibur3, JP, 0}, + {0x027C604C, SoulCalibur3, US, 0}, + {0x24090A12, SoulCalibur3, EU, 0}, + {0xFC0F8A5B, Simple2000Vol114, JP, 0}, + {0x0098F740, SeintoSeiya, NoRegion, 0}, //聖鬥士星矢-黃道十二宮 + {0xBDD9BAAD, UrbanReign, US, 0}, //街頭爭霸 }; hash_map CRC::m_map; diff --git a/plugins/GSdx/GSCrc.h b/plugins/GSdx/GSCrc.h index faddeb7b65..fd2a69371e 100644 --- a/plugins/GSdx/GSCrc.h +++ b/plugins/GSdx/GSCrc.h @@ -83,11 +83,21 @@ public: SMTDDS1, SMTDDS2, RozenMaidenGebetGarden, + EvangelionJo, SuikodenTactics, + CaptainTsubasa, + Oneechanbara2Special, + NarutimateAccel, + Naruto, + EternalPoison, + LegoBatman, + XE3, TenchuWoH, TenchuFS, Sly3, Sly2, + ShadowofRome, + ArctheLad, DemonStone, BigMuthaTruckers, TimeSplitters2, @@ -102,7 +112,14 @@ public: BleachBladeBattlers, CastlevaniaCoD, CastlevaniaLoI, + FinalFightStreetwise, + CrashNburn, + TombRaiderUnderworld, + TombRaiderAnniversary, + TombRaiderLegend, + SSX3, Black, + VF4, TyTasmanianTiger, TyTasmanianTiger2, FFVIIDoC, @@ -127,6 +144,35 @@ public: Yakuza2, SkyGunner, JamesBondEverythingOrNothing, + Siren, + ZettaiZetsumeiToshi2, + VF4EVO, + Dororo, + ShinOnimusha, + GetaWay, + GetaWayBlackMonday, + SakuraTaisen, + SakuraWarsSoLongMyLove, + FightingBeautyWulong, + TouristTrophy, + GTASanAndreas, + FrontMission5, + GodHand, + KnightsOfTheTemple2, + UltramanFightingEvolution, + RogueGalaxy, + DeathByDegreesTekkenNinaWilliams, + AlpineRacer3, + HummerBadlands, + SengokuBasara, + Grandia3, + TalesofSymphonia, + TalesofDestiny, + SDGundamGGeneration, + SoulCalibur3, + Simple2000Vol114, + SeintoSeiya, + UrbanReign, TitleCount, }; @@ -142,6 +188,7 @@ public: DE, IT, ES, + CH, ASIA, KO, RegionCount, diff --git a/plugins/GSdx/GSState.cpp b/plugins/GSdx/GSState.cpp index 9400239698..21f342cb8f 100644 --- a/plugins/GSdx/GSState.cpp +++ b/plugins/GSdx/GSState.cpp @@ -3108,6 +3108,10 @@ bool GSC_ICO(const GSFrameInfo& fi, int& skip) { skip = 1; } + else if(fi.TME && fi.FBP == 0x0800 && (fi.TBP0 == 0x2800 || fi.TBP0 ==0x2c00) && fi.TPSM ==0 && fi.FBMSK == 0) + { + skip = 1; //重影 + } } else { @@ -3258,6 +3262,10 @@ bool GSC_ResidentEvil4(const GSFrameInfo& fi, int& skip) { skip = 176; } + else if(fi.TME && fi.FBP ==0x03100 && (fi.TBP0==0x2a00 ||fi.TBP0==0x3480) && fi.TPSM ==0 && fi.FBMSK == 0) + { + skip = 1; //重影 + } } return true; @@ -3267,10 +3275,27 @@ bool GSC_Spartan(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) + if(g_crc_region == CRC::NoRegion &&fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) { skip = 107; } + if(g_crc_region == CRC::JP && fi.TME && fi.FBP == 0x02180 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x2180 && fi.TPSM == PSM_PSMCT32) + { + skip = 3; + } + else + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } } return true; @@ -3297,7 +3322,11 @@ bool GSC_Drakengard2(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && fi.FBP == 0x026c0 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00a00 && fi.TPSM == PSM_PSMCT32) + if(g_crc_region == CRC::CH && fi.TME && fi.FBP == 0x026c0 && fi.TBP0 == 0x00a00 && fi.FPSM ==2) + { + skip =34; + } + if((g_crc_region == CRC::US || g_crc_region == CRC::EU) && fi.TME && fi.FBP == 0x026c0 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00a00 && fi.TPSM == PSM_PSMCT32) { skip = 64; } @@ -3318,9 +3347,13 @@ bool GSC_Tekken5(const GSFrameInfo& fi, int& skip) { skip = 2; } - else if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0x00FFFFFF) + else if(fi.TME) { - skip = 5; //city at sunset's... sun... + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 24; + } } } @@ -3396,6 +3429,14 @@ bool GSC_GodOfWar2(const GSFrameInfo& fi, int& skip) { skip = 1; // wall of fog } + else if(fi.TPSM == PSM_PSMCT24 && fi.TME && (fi.FBP ==0x1300 ) && (fi.TBP0 ==0x0F00 || fi.TBP0 ==0x1300 || fi.TBP0==0x2b00)) // || fi.FBP == 0x0100 //消水下黑線跟光源 + { + skip = 1; // 重影 + } + else if(fi.TPSM == PSM_PSMCT24 && fi.TME && (fi.FBP ==0x0100 ) && (fi.TBP0==0x2b00 || fi.TBP0==0x2e80)) //480P下2e80 + { + skip = 1; // 水下黑線 + } } } else @@ -3508,7 +3549,15 @@ bool GSC_Genji(const GSFrameInfo& fi, int& skip) { if(fi.TME && fi.FBP == 0x01500 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00e00 && fi.TPSM == PSM_PSMZ16) { - skip = 6; // + skip = 6; //左上方缺塊 + } + else if(fi.TPSM == PSM_PSMCT24 && fi.TME ==0x0001 && fi.TBP0==fi.FBP) + { + skip = 1; // 模糊 + } + else if(fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0) + { + skip = 1; //白霧 } } else @@ -3545,11 +3594,11 @@ bool GSC_ValkyrieProfile2(const GSFrameInfo& fi, int& skip) /*if(fi.TME && (fi.FBP == 0x018c0 || fi.FBP == 0x02180) && fi.FPSM == fi.TPSM && fi.TBP0 >= 0x03200 && fi.TPSM == PSM_PSMCT32) //NTSC only, !(fi.TBP0 == 0x03580 || fi.TBP0 == 0x03960) { skip = 1; //red garbage in lost forest, removes other effects... - } + }*/ if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF) { - skip = 1; //garbage in cutscenes, doesn't remove completely, better use "Alpha Hack" - }*/ + skip = 1; // CMV的豎紋 + } if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) { skip = 1000; // @@ -3570,7 +3619,11 @@ bool GSC_RadiataStories(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) + if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF) + { + skip = 1; // CMV的豎紋 + } + else if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) { skip = 1000; // } @@ -3598,8 +3651,34 @@ bool GSC_HauntingGround(const GSFrameInfo& fi, int& skip) { skip = 1; // bloom } - else if(fi.TME && fi.FBP == fi.TBP0 && fi.TBP0 == 0x3000 && fi.FBMSK == 0xFFFFFF && - GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) + else if(fi.TME && (fi.FBP ==0x2200) && (fi.TBP0 ==0x3a80) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) + { + skip = 1; // 模糊 + } + else if(fi.FBP ==0x2200 && fi.TBP0==0x3000 && fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0) + { + skip = 1; //霧 + } + else if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + + return true; +} + +bool GSC_EvangelionJo(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.TBP0 == 0x2BC0 || (fi.FBP == 0 || fi.FBP == 0x1180) && (fi.FPSM | fi.TPSM) == 0) { skip = 1; } @@ -3612,7 +3691,8 @@ bool GSC_SuikodenTactics(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(!fi.TME && fi.TPSM == PSM_PSMT8H && fi.FPSM == 0 && fi.FBMSK == 0x0FF000000 && fi.TBP0 == 0 && GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) + if( !fi.TME && fi.TPSM == PSM_PSMT8H && fi.FPSM == 0 && + fi.FBMSK == 0x0FF000000 && fi.TBP0 == 0 && GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) { skip = 4; } @@ -3621,6 +3701,137 @@ bool GSC_SuikodenTactics(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_CaptainTsubasa(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x1C00 && !fi.FBMSK) + { + skip = 1; + } + } + return true; +} + +bool GSC_Oneechanbara2Special(const GSFrameInfo& fi, int& skip) +{ +// 高分辨率下重影 + if(skip == 0) + { + if(fi.TPSM == PSM_PSMCT24 && fi.TME && fi.FBP == 0x01180) + { + skip = 1; // 重影 + } + } + + return true; +} + +bool GSC_NarutimateAccel(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x3800 && fi.TBP0 == 0 && (fi.FPSM | fi.TPSM) == 0) + { + skip = 105; + } + else if(!fi.TME && fi.FBP == 0x3800 && fi.TBP0 == 0x1E00 && fi.FPSM == 0 && fi.TPSM == 49 && fi.FBMSK == 0xFF000000) + { + skip = 1; + } + } + else + { + if(fi.FBP == 0 && fi.TBP0 == 0x3800 && fi.TME && (fi.FPSM | fi.TPSM) == 0) + { + skip = 1; + } + } + + return true; +} + +bool GSC_Naruto(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x3800 && fi.TBP0 == 0 && (fi.FPSM | fi.TPSM) == 0) + { + skip = 105; + } + else if(!fi.TME && fi.FBP == 0x3800 && fi.TBP0 == 0x1E00 && fi.FPSM == 0 && fi.TPSM == 49 && fi.FBMSK == 0xFF000000) + { + skip = 0; + } + } + else + { + if(fi.FBP == 0 && fi.TBP0 == 0x3800 && fi.TME && (fi.FPSM | fi.TPSM) == 0) + { + skip = 1; + } + } + + return true; +} + + +bool GSC_EternalPoison(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TPSM == PSM_PSMCT16S && fi.TBP0 == 0x3200) + { + skip = 1; //陰影 + } + } + return true; +} + +bool GSC_LegoBatman(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.TPSM == PSM_PSMZ16 && fi.FPSM == PSM_PSMCT16 && fi.FBMSK == 0x00000) + { + skip = 3; //去黑霧 + } + } + return true; +} + +bool GSC_SakuraTaisen(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(!fi.TME && (fi.FBP == 0x0 || fi.FBP == 0x1180) && (fi.TBP0!=0x3fc0 && fi.TBP0!=0x3c9a && fi.TBP0 !=0x3dec /*fi.TBP0 ==0x38d0 || fi.TBP0==0x3912 ||fi.TBP0==0x3bdc ||fi.TBP0==0x3ab3 ||fi.TBP0<=0x3a92*/) && fi.FPSM == PSM_PSMCT32 && (fi.TPSM == PSM_PSMT8 || fi.TPSM == PSM_PSMT4) && (fi.FBMSK == 0x00FFFFFF || !fi.FBMSK)) + { + skip = 0; //3dec 3fc0 3c9a + } + if(!fi.TME && (fi.FBP | fi.TBP0) !=0 && (fi.FBP | fi.TBP0) !=0x1180 && (fi.FBP | fi.TBP0) !=0x3be0 && (fi.FBP | fi.TBP0) !=0x3c80 && fi.TBP0!=0x3c9a && (fi.FBP | fi.TBP0) !=0x3d80 && fi.TBP0 !=0x3dec&& fi.FPSM == PSM_PSMCT32 && (fi.FBMSK==0)) + { + skip =0; //3dec 3fc0 3c9a + } + if(!fi.TME && (fi.FBP | fi.TBP0) !=0 && (fi.FBP | fi.TBP0) !=0x1180 && (fi.FBP | fi.TBP0) !=0x3be0 && (fi.FBP | fi.TBP0) !=0x3c80 && (fi.FBP | fi.TBP0) !=0x3d80 && fi.TBP0!=0x3c9a && fi.TBP0 !=0x3de && fi.FPSM == PSM_PSMCT32 && (fi.FBMSK==0)) + { + skip =1; //3dec 3fc0 3c9a + } + else if(fi.TME && (fi.FBP == 0 || fi.FBP == 0x1180) && fi.TBP0 == 0x35B8 && fi.TPSM == PSM_PSMT4) + { + skip = 1; + } + else + { + if(!fi.TME && (fi.FBP | fi.TBP0) ==0x38d0 && fi.FPSM == PSM_PSMCT32 ) + { + skip = 1; //3dec 3fc0 3c9a + } + } + } + + return true; +} + bool GSC_Tenchu(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -3674,6 +3885,97 @@ bool GSC_Sly2(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_ShadowofRome(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.FBP && fi.TPSM == PSM_PSMT8H && ( fi.FBMSK ==0x00FFFFFF)) + { + skip =1; //霧 + } + else if(fi.TME ==0x0001 && (fi.TBP0==0x1300 || fi.TBP0==0x0f00) && fi.FBMSK>=0xFFFFFF) + { + skip = 1; //樹林霧和水紋 + } + else if(fi.TME && (fi.FBP >=0x0) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 ==0x0160 ||fi.TBP0==0x01e0 || fi.TBP0<=0x0800) && fi.TPSM == PSM_PSMT8) + { + skip = 1; //速度 + } + else if(fi.TME && (fi.TBP0==0x0700) && (fi.TPSM == PSM_PSMCT32 || fi.TPSM == PSM_PSMCT24)) + { + skip = 1; //模糊 + } + } + + return true; +} + +bool GSC_FFXII(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + return true; +} + +bool GSC_FFX2(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + return true; +} + +bool GSC_FFX(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + return true; +} + +bool GSC_ArctheLad(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + /*if(fi.TPSM == PSM_PSMT8H && fi.FBMSK >= 0xFFFFFFF) + { + skip = 1; + }*/ + } + return true; +} + bool GSC_DemonStone(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -3843,7 +4145,7 @@ bool GSC_Castlevania(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMCT16S && fi.FBMSK == 0x00FFFFFF) + if(fi.TME && fi.FBP == 0 && fi.TBP0 && fi.TPSM == 10 && fi.FBMSK == 0xFFFFFF) { skip = 2; } @@ -3876,6 +4178,96 @@ bool GSC_Black(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_CrashNburn(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + + return true; +} + +bool GSC_TombRaider(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x01000 && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) + { + skip = 1; + } + } + return true; +} + +bool GSC_TombRaiderLegend(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x01000 && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32 && (fi.TBP0 == 0x2b60 ||fi.TBP0 == 0x2b80 || fi.TBP0 == 0x2E60 ||fi.TBP0 ==0x3020 ||fi.TBP0 == 0x3200 || fi.TBP0 == 0x3320)) + { + skip = 1; //花屏 + } + else if(fi.TPSM == PSM_PSMCT32 && (fi.TPSM | fi.FBP)==0x2fa0 && (fi.TBP0==0x2bc0 ) && fi.FBMSK ==0) + { + skip = 2; // 花屏 + } + + + }// ||fi.TBP0 ==0x2F00 + + return true; +} + +bool GSC_TombRaiderUnderWorld(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x01000 && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32 && (fi.TBP0 == 0x2B60 /*|| fi.TBP0 == 0x2EFF || fi.TBP0 ==0x2F00 || fi.TBP0 == 0x3020*/ || fi.TBP0 >= 0x2C01 && fi.TBP0!=0x3029 && fi.TBP0!=0x302d)) + { + skip = 1; //花屏 + } + else if(fi.TPSM == PSM_PSMCT32 && (fi.TPSM | fi.FBP)==0x2c00 && (fi.TBP0 ==0x0ee0) && fi.FBMSK ==0) + { + skip = 2; // 水下黑屏 + } + /*else if(fi.TPSM == PSM_PSMCT16 && (fi.TPSM | fi.FBP)>=0x0 && (fi.TBP0 >=0x0) && fi.FBMSK ==0) + { + skip = 600; // 加速 + }*/ + } + + return true; +} + +bool GSC_SSX3(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + + return true; +} + bool GSC_FFVIIDoC(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -3893,6 +4285,29 @@ bool GSC_FFVIIDoC(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_DevilMayCry3(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + + if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01000 && fi.TPSM == PSM_PSMZ16) + { + skip = 32; + } + if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMZ32 && fi.TBP0 == 0x0800 && fi.TPSM == PSM_PSMT8H) + { + skip = 16; + } + if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x0 && fi.TPSM == PSM_PSMT8H) + { + skip = 24; + } + } + + return true; +} + + bool GSC_StarWarsForceUnleashed(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -3961,28 +4376,6 @@ bool GSC_BlackHawkDown(const GSFrameInfo& fi, int& skip) return true; } -bool GSC_DevilMayCry3(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - - if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01000 && fi.TPSM == PSM_PSMZ16) - { - skip = 32; - } - if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMZ32 && fi.TBP0 == 0x0800 && fi.TPSM == PSM_PSMT8H) - { - skip = 16; - } - if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x0 && fi.TPSM == PSM_PSMT8H) - { - skip = 24; - } - } - - return true; -} - bool GSC_Burnout(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -4062,6 +4455,18 @@ bool GSC_TalesOfLegendia(const GSFrameInfo& fi, int& skip) { skip = 2; } + if(fi.TME && fi.FBP && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x3d80) + { + skip = 1; //左上方缺塊2a00 + } + if(fi.TME && fi.FBP ==0x1c00 && (fi.TBP0==0x2e80 ||fi.TBP0==0x2d80) && fi.TPSM ==0 && fi.FBMSK == 0xff000000) + { + skip = 1; //重影 + } + if(!fi.TME && fi.FBP ==0x2a00 && (fi.TBP0==0x1C00 ) && fi.TPSM ==0 && fi.FBMSK == 0x00FFFFFF) + { + skip = 1; //中毒圖層錯位 + } } return true; @@ -4084,10 +4489,31 @@ bool GSC_Kunoichi(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(!fi.TME && (fi.FBP == 0x0 || fi.FBP == 0x00700 || fi.FBP == 0x00800) && fi.FPSM == PSM_PSMCT32 && (fi.TPSM == PSM_PSMT8 || fi.TPSM == PSM_PSMT4) && fi.FBMSK == 0x00FFFFFF) + if(!fi.TME && (fi.FBP == 0x0 || fi.FBP == 0x00700 || fi.FBP == 0x00800) && fi.FPSM == PSM_PSMCT32 && fi.FBMSK == 0x00FFFFFF) { skip = 3; } + if(fi.TME && (fi.FBP ==0x0700 || fi.FBP==0) && fi.TBP0==0x0e00 && fi.TPSM ==0 && fi.FBMSK == 0) + { + skip = 1; //殺陣黑屏 + } + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + else + { + if(fi.TME && (fi.FBP == 0x0e00) && fi.FPSM == PSM_PSMCT32 && fi.FBMSK == 0xFF000000) + { + skip = 0; + } } return true; @@ -4169,6 +4595,427 @@ bool GSC_JamesBondEverythingOrNothing(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_ZettaiZetsumeiToshi2(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.TPSM == PSM_PSMCT16S && (fi.FBMSK >= 0x6FFFFFFF || fi.FBMSK ==0) ) + { + skip = 1000; + } + else if(fi.TME && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0xFF000000) + { + skip = 2; // 霧 + } + else if((fi.FBP | fi.TBP0)&& fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x3FFF) + { + skip = 1000; + } + + } + else + { + if(!fi.TME && fi.TPSM == PSM_PSMCT32 && fi.FBP==0x1180 && fi.TBP0==0x1180 && (fi.FBMSK ==0)) + { + skip = 0; // + } + if(fi.TME && fi.TPSM == PSM_PSMT4 && fi.FBP && (fi.TBP0!=0x3753)) + { + skip = 0; // + } + if(fi.TME && fi.TPSM == PSM_PSMT8H && fi.FBP ==0x22e0 && fi.TBP0 ==0x36e0 ) + { + skip = 0; // + } + if(!fi.TME && fi.TPSM == PSM_PSMT8H && fi.FBP ==0x22e0 ) + { + skip = 0; // + } + if(fi.TME && fi.TPSM == PSM_PSMT8 && (fi.FBP==0x1180 || fi.FBP==0) && (fi.TBP0 !=0x3764 && fi.TBP0!=0x370f)) + { + skip = 0; // + } + if(fi.TME && fi.TPSM == PSM_PSMCT16S && (fi.FBP==0x1180 )) + { + skip = 2; // + } + + } + + return true; +} + +bool GSC_ShinOnimusha(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + + if(fi.TME && fi.FBP == 0x001000 && (fi.TBP0 ==0 || fi.TBP0 == 0x0800) && fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0x00FFFFFF) + { + skip = 0; //水波紋 沒必要了? + } + else if(fi.TPSM == PSM_PSMCT24 && fi.TME && fi.FBP == 0x01000) // || fi.FBP == 0x00000 + { + skip = 28; // 重影28 30 56 64 + } + else if(fi.FBP && fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0xFFFFFF) + { + skip = 0; //24 33 40 92白霧 沒必要了? + } + else if(fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0xFF000000) + { + skip = 1; //撿東西時的白霧 + } + else if(fi.TME && (fi.TBP0 ==0x1400 || fi.TBP0 ==0x1000 ||fi.TBP0 == 0x1200) && (fi.TPSM == PSM_PSMCT32 || fi.TPSM == PSM_PSMCT24)) + { + skip = 1; + } //消除泛光過度 水紋等光影 + + } + + return true; +} + +bool GSC_XE3(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TPSM == PSM_PSMT8H && fi.FBMSK >= 0xEFFFFFFF) + { + skip = 73; //動畫 + } + else if(fi.TME && fi.FBP ==0x03800 && fi.TBP0 && fi.TPSM ==0 && fi.FBMSK == 0) + { + skip = 1; //重影 + } + /*else if(fi.TPSM ==0x00000 && PSM_PSMCT24 && fi.TME && fi.FBP == 0x03800) + { + skip = 1 ; // 光源 + }*/ + /*else if(fi.TME ==0 && (fi.FBP ==0 ) && fi.FPSM == PSM_PSMCT32 && ( fi.TPSM == PSM_PSMT8 || fi.TPSM == PSM_PSMT4) && (fi.FBMSK == 0x00FFFFFF || fi.FBMSK == 0xFF000000)) + { + skip = 1; //去黑暗 + }*/ + else + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 1; + } + } + } + } + return true; +} + +bool GSC_GetaWay(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if((fi.FBP ==0 || fi.FBP ==0x1180)&& fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0) + { + skip = 1; + } + } + + return true; +} + +bool GSC_SakuraWarsSoLongMyLove(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME==0 && fi.FBP != fi.TBP0 && fi.TBP0 && fi.FBMSK == 0x00FFFFFF) + { + skip = 3; //去黑暗 + } + else if(fi.TME==0 && fi.FBP == fi.TBP0 && (fi.TBP0 ==0x1200 ||fi.TBP0 ==0x1180 ||fi.TBP0 ==0) && fi.FBMSK == 0x00FFFFFF) + { + skip = 3; //去黑暗 + } + else if(fi.TME && (fi.FBP ==0 || fi.FBP ==0x1180) && fi.FPSM == PSM_PSMCT32 && fi.TBP0 ==0x3F3F && fi.TPSM == PSM_PSMT8) + { + skip = 1; //機甲泛光 + } + } + + return true; +} + +bool GSC_FightingBeautyWulong(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.TBP0 ==0x0700 || fi.TBP0 ==0x0a80) && (fi.TPSM == PSM_PSMCT32 || fi.TPSM == PSM_PSMCT24)) + { + skip = 1; + } //消除模糊 + } + + return true; +} + +bool GSC_TouristTrophy(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP >= 0x02f00 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01180) && fi.TPSM == PSM_PSMT8) + { + skip = 770; + } + if(fi.TME && fi.FBP >= 0x02de0 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 ==0 || fi.TBP0==0x1a40 ||fi.TBP0 ==0x2300) && fi.TPSM == PSM_PSMT8) + { + skip = 770; //480P + } + } + + return true; +} + +bool GSC_GTASanAndreas(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP ==0x0a00 || fi.FBP ==0x08c0) && (fi.TBP0 ==0x1b80 || fi.TBP0 ==0x1a40) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) + { + skip = 1; // 重影跟水波紋 + } + } + + return true; +} + +bool GSC_FrontMission5(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0) + { + skip = 1; //動畫 + } + if(fi.TME && (fi.FBP ==0x1000) && (fi.TBP0 ==0x2e00 || fi.TBP0 ==0x3200) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) + { + skip = 1; //影子fi.TBP0 ==0x1f00 + } + } + + return true; +} + +bool GSC_GodHand(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP ==0x0) && (fi.TBP0 ==0x2800) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) + { + skip = 1; // 模糊 + } + } + + return true; +} + +bool GSC_KnightsOfTheTemple2(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0) + { + skip = 1; //重影 + } + else if(fi.TPSM ==0x00000 && PSM_PSMCT24 && fi.TME && (fi.FBP ==0x3400 ||fi.FBP==0x3a00)) + { + skip = 1 ; //光源 + } + } + + return true; +} + +bool GSC_UltramanFightingEvolution(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP==0x2a00 && fi.FPSM == PSM_PSMZ24 && fi.TBP0 == 0x1c00 && fi.TPSM == PSM_PSMZ24) + { + skip = 5; // blur 不損光源 + } + } + + return true; +} + +bool GSC_RogueGalaxy(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.TBP0==0x2c40) && (fi.TPSM == PSM_PSMCT32 || fi.TPSM == PSM_PSMCT24)) + { + skip = 1; //場景閃爍 + } + + } + + return true; +} + +bool GSC_DeathByDegreesTekkenNinaWilliams(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP ==0 ) && fi.TBP0==0x34a0 && (fi.TPSM == PSM_PSMCT32)) + { + skip = 1; //去動畫窗格 + } + else if((fi.FBP ==0x3500)&& fi.TPSM == PSM_PSMT8 && fi.FBMSK == 0xFFFF00FF) + { + skip = 4; //水下白霧 + } + } + if(fi.TME) + { + if((fi.FBP | fi.TBP0 | fi.FPSM | fi.TPSM) && (fi.FBMSK == 0x00FFFFFF )) + { + skip = 1; //動畫速度 + } + } + return true; +} + +bool GSC_AlpineRacer3(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(!fi.TME && fi.FBP == 0 && fi.TBP0>=0 && (fi.TPSM >= 0 ) && (fi.FBMSK ==0x0001 ||fi.FBMSK == 0x00FFFFFF)) + { + skip = 2; //去黑暗 + } + } + + return true; +} + +bool GSC_HummerBadlands(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP ==0x0a00) && (fi.TBP0 ==0x03200 || fi.TBP0==0x3700) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) + { + skip = 1; //影子 + } + } + + return true; +} + +bool GSC_SengokuBasara(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.TBP0==0x1800 ) && fi.FBMSK==0xFF000000) + { + skip = 1; //霧 + } + } + + return true; +} + +bool GSC_Grandia3(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP ==0x0 || fi.FBP ==0x0e00) && (fi.TBP0 ==0x2a00 ||fi.TBP0==0x0e00 ||fi.TBP0==0) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) + { + skip = 1; // 模糊 + } + } + + + return true; +} + +bool GSC_FinalFightStreetwise(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(!fi.TME && (fi.FBP == 0 || fi.FBP == 0x08c0) && fi.FPSM == PSM_PSMCT32 && (fi.TPSM == PSM_PSMT8 || fi.TPSM == PSM_PSMT4) && fi.FBMSK == 0x00FFFFFF) + { + skip = 3; + } + } + + return true; +} + +bool GSC_TalesofSymphonia(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && (fi.FBP >= 0) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x2bc0 || fi.TBP0 <= 0x0200) && (fi.FBMSK==0xFF000000 ||fi.FBMSK==0x00FFFFFF)) + { + skip = 1; //fi.FBMSK==0造成動畫黑屏,加速戰鬥速度 + } + if(fi.TME && (fi.TBP0==0x1180 || fi.TBP0==0x1a40 || fi.TBP0==0x2300) && fi.FBMSK>=0xFF000000) + { + skip = 1; //過場殘影 + } + } + + return true; +} + +bool GSC_SoulCalibur3(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME) + { + // depth textures (bully, mgs3s1 intro, Front Mission 5) + if( (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) || + // General, often problematic post processing + (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) ) + { + skip = 2; + } + } + } + + return true; +} + +bool GSC_Simple2000Vol114(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME==0 && (fi.FBP==0x1500) && (fi.TBP0==0x2c97 || fi.TBP0==0x2ace || fi.TBP0==0x03d0 || fi.TBP0==0x2448) && (fi.FBMSK == 0x0000)) + { + skip = 1; //去影子 + } + if(fi.TME && (fi.FBP==0x0e00) && (fi.TBP0==0x1000) && (fi.FBMSK == 0x0000)) + { + skip = 1; //去迷霧 + } + } + return true; +} +bool GSC_UrbanReign(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP==0x0000 && fi.TBP0==0x3980 && fi.FPSM==fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.TPSM ==0 && fi.FBMSK == 0x0) + { + skip = 1; //黑影 + } + } + return true; +} + #ifdef ENABLE_DYNAMIC_CRC_HACK #define DYNA_DLL_PATH "c:/dev/pcsx2/trunk/tools/dynacrchack/DynaCrcHack.dll" @@ -4356,11 +5203,24 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) map[CRC::ValkyrieProfile2] = GSC_ValkyrieProfile2; map[CRC::RadiataStories] = GSC_RadiataStories; map[CRC::HauntingGround] = GSC_HauntingGround; + map[CRC::EvangelionJo] = GSC_EvangelionJo; map[CRC::SuikodenTactics] = GSC_SuikodenTactics; + map[CRC::CaptainTsubasa] = GSC_CaptainTsubasa; + map[CRC::Oneechanbara2Special] = GSC_Oneechanbara2Special; + map[CRC::NarutimateAccel] = GSC_NarutimateAccel; + map[CRC::Naruto] = GSC_Naruto; + map[CRC::EternalPoison] = GSC_EternalPoison; + map[CRC::LegoBatman] = GSC_LegoBatman; + map[CRC::SakuraTaisen] = GSC_SakuraTaisen; map[CRC::TenchuWoH] = GSC_Tenchu; map[CRC::TenchuFS] = GSC_Tenchu; map[CRC::Sly3] = GSC_Sly3; map[CRC::Sly2] = GSC_Sly2; + map[CRC::ShadowofRome] = GSC_ShadowofRome; + map[CRC::FFXII] = GSC_FFXII; + map[CRC::FFX2] = GSC_FFX2; + map[CRC::FFX] = GSC_FFX; + map[CRC::ArctheLad] = GSC_ArctheLad; map[CRC::DemonStone] = GSC_DemonStone; map[CRC::BigMuthaTruckers] = GSC_BigMuthaTruckers; map[CRC::TimeSplitters2] = GSC_TimeSplitters2; @@ -4372,6 +5232,11 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers; map[CRC::CastlevaniaCoD] = GSC_Castlevania; map[CRC::CastlevaniaLoI] = GSC_Castlevania; + map[CRC::CrashNburn] = GSC_CrashNburn; + map[CRC::TombRaiderUnderworld] = GSC_TombRaiderUnderWorld; + map[CRC::TombRaiderAnniversary] = GSC_TombRaider; + map[CRC::TombRaiderLegend] = GSC_TombRaiderLegend; + map[CRC::SSX3] = GSC_SSX3; map[CRC::Black] = GSC_Black; map[CRC::FFVIIDoC] = GSC_FFVIIDoC; map[CRC::StarWarsForceUnleashed] = GSC_StarWarsForceUnleashed; @@ -4392,6 +5257,30 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) map[CRC::Yakuza2] = GSC_Yakuza2; map[CRC::SkyGunner] = GSC_SkyGunner; map[CRC::JamesBondEverythingOrNothing] = GSC_JamesBondEverythingOrNothing; + map[CRC::ZettaiZetsumeiToshi2] = GSC_ZettaiZetsumeiToshi2; + map[CRC::ShinOnimusha] = GSC_ShinOnimusha; + map[CRC::XE3] = GSC_XE3; + map[CRC::GetaWay] = GSC_GetaWay; + map[CRC::GetaWayBlackMonday] = GSC_GetaWay; + map[CRC::SakuraWarsSoLongMyLove] = GSC_SakuraWarsSoLongMyLove; + map[CRC::FightingBeautyWulong] = GSC_FightingBeautyWulong; + map[CRC::TouristTrophy] = GSC_TouristTrophy; + map[CRC::GTASanAndreas] = GSC_GTASanAndreas; + map[CRC::FrontMission5] = GSC_FrontMission5; + map[CRC::GodHand] = GSC_GodHand; + map[CRC::KnightsOfTheTemple2] = GSC_KnightsOfTheTemple2; + map[CRC::UltramanFightingEvolution] = GSC_UltramanFightingEvolution; + map[CRC::RogueGalaxy] = GSC_RogueGalaxy; + map[CRC::DeathByDegreesTekkenNinaWilliams] = GSC_DeathByDegreesTekkenNinaWilliams; + map[CRC::AlpineRacer3] = GSC_AlpineRacer3; + map[CRC::HummerBadlands] = GSC_HummerBadlands; + map[CRC::SengokuBasara] = GSC_SengokuBasara; + map[CRC::Grandia3] = GSC_Grandia3; + map[CRC::FinalFightStreetwise] = GSC_FinalFightStreetwise; + map[CRC::TalesofSymphonia] = GSC_TalesofSymphonia; + map[CRC::SoulCalibur3] = GSC_SoulCalibur3; + map[CRC::Simple2000Vol114] = GSC_Simple2000Vol114; + map[CRC::UrbanReign] = GSC_UrbanReign; } // TODO: just set gsc in SetGameCRC once