PlayReports.Formatters.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  1. using Gommon;
  2. using Humanizer;
  3. using System;
  4. using System.Buffers.Binary;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. namespace Ryujinx.Ava.Utilities.PlayReport
  8. {
  9. public partial class PlayReports
  10. {
  11. private static FormattedValue BreathOfTheWild_MasterMode(SingleValue value)
  12. => value.Matched.BoxedValue is 1 ? "Playing Master Mode" : FormattedValue.ForceReset;
  13. private static FormattedValue TearsOfTheKingdom_CurrentField(SingleValue value) =>
  14. value.Matched.DoubleValue switch
  15. {
  16. > 800d => "Exploring the Sky Islands",
  17. < -201d => "Exploring the Depths",
  18. _ => "Roaming Hyrule"
  19. };
  20. private static FormattedValue SkywardSwordHD_Rupees(SingleValue value)
  21. => "rupee".ToQuantity(value.Matched.IntValue);
  22. private static FormattedValue SuperMarioOdyssey_AssistMode(SingleValue value)
  23. => value.Matched.BoxedValue is 1 ? "Playing in Assist Mode" : "Playing in Regular Mode";
  24. private static FormattedValue SuperMarioOdysseyChina_AssistMode(SingleValue value)
  25. => value.Matched.BoxedValue is 1 ? "Playing in 帮助模式" : "Playing in 普通模式";
  26. private static FormattedValue SuperMario3DWorldOrBowsersFury(SingleValue value)
  27. => value.Matched.BoxedValue is 0 ? "Playing Super Mario 3D World" : "Playing Bowser's Fury";
  28. private static FormattedValue MarioKart8Deluxe_Mode(SingleValue value)
  29. => value.Matched.StringValue switch
  30. {
  31. // Single Player
  32. "Single" => "Single Player",
  33. // Multiplayer
  34. "Multi-2players" => "Multiplayer 2 Players",
  35. "Multi-3players" => "Multiplayer 3 Players",
  36. "Multi-4players" => "Multiplayer 4 Players",
  37. // Wireless/LAN Play
  38. "Local-Single" => "Wireless/LAN Play",
  39. "Local-2players" => "Wireless/LAN Play 2 Players",
  40. // CC Classes
  41. "50cc" => "50cc",
  42. "100cc" => "100cc",
  43. "150cc" => "150cc",
  44. "Mirror" => "Mirror (150cc)",
  45. "200cc" => "200cc",
  46. // Modes
  47. "GrandPrix" => "Grand Prix",
  48. "TimeAttack" => "Time Trials",
  49. "VS" => "VS Races",
  50. "Battle" => "Battle Mode",
  51. "RaceStart" => "Selecting a Course",
  52. "Race" => "Racing",
  53. _ => FormattedValue.ForceReset
  54. };
  55. private static FormattedValue PokemonSVUnionCircle(SingleValue value)
  56. => value.Matched.BoxedValue is 0 ? "Playing Alone" : "Playing in a group";
  57. private static FormattedValue PokemonSVArea(SingleValue value)
  58. => value.Matched.StringValue switch
  59. {
  60. // Base Game Locations
  61. "a_w01" => "South Area One",
  62. "a_w02" => "Mesagoza",
  63. "a_w03" => "The Pokemon League",
  64. "a_w04" => "South Area Two",
  65. "a_w05" => "South Area Four",
  66. "a_w06" => "South Area Six",
  67. "a_w07" => "South Area Five",
  68. "a_w08" => "South Area Three",
  69. "a_w09" => "West Area One",
  70. "a_w10" => "Asado Desert",
  71. "a_w11" => "West Area Two",
  72. "a_w12" => "Medali",
  73. "a_w13" => "Tagtree Thicket",
  74. "a_w14" => "East Area Three",
  75. "a_w15" => "Artazon",
  76. "a_w16" => "East Area Two",
  77. "a_w18" => "Casseroya Lake",
  78. "a_w19" => "Glaseado Mountain",
  79. "a_w20" => "North Area Three",
  80. "a_w21" => "North Area One",
  81. "a_w22" => "North Area Two",
  82. "a_w23" => "The Great Crater of Paldea",
  83. "a_w24" => "South Paldean Sea",
  84. "a_w25" => "West Paldean Sea",
  85. "a_w26" => "East Paldean Sea",
  86. "a_w27" => "Nouth Paldean Sea",
  87. //TODO DLC Locations
  88. _ => FormattedValue.ForceReset
  89. };
  90. private static FormattedValue SuperSmashBrosUltimate_Mode(SparseMultiValue values)
  91. {
  92. // Check if the PlayReport is for a challenger approach or an achievement.
  93. if (values.Matched.TryGetValue("fighter", out Value fighter) && values.Matched.ContainsKey("reason"))
  94. {
  95. return $"Challenger Approaches - {SuperSmashBrosUltimate_Character(fighter)}";
  96. }
  97. if (values.Matched.TryGetValue("fighter", out fighter) && values.Matched.ContainsKey("challenge_count"))
  98. {
  99. return $"Fighter Unlocked - {SuperSmashBrosUltimate_Character(fighter)}";
  100. }
  101. if (values.Matched.TryGetValue("anniversary", out Value anniversary))
  102. {
  103. return $"Achievement Unlocked - ID: {anniversary}";
  104. }
  105. if (values.Matched.ContainsKey("is_created"))
  106. {
  107. return "Edited a Custom Stage!";
  108. }
  109. if (values.Matched.ContainsKey("adv_slot"))
  110. {
  111. return
  112. "Playing Adventure Mode"; // Doing this as it can be a placeholder until we can grab the character.
  113. }
  114. // Check if we have a match_mode at this point, if not, go to default.
  115. if (!values.Matched.TryGetValue("match_mode", out Value matchMode))
  116. {
  117. return "Smashing";
  118. }
  119. return matchMode.BoxedValue switch
  120. {
  121. 0 when values.Matched.TryGetValue("player_1_fighter", out Value player) &&
  122. values.Matched.TryGetValue("player_2_fighter", out Value challenger)
  123. => $"Last Smashed: {SuperSmashBrosUltimate_Character(challenger)}'s Fighter Challenge - {SuperSmashBrosUltimate_Character(player)}",
  124. 1 => $"Last Smashed: Normal Battle - {SuperSmashBrosUltimate_PlayerListing(values)}",
  125. 2 when values.Matched.TryGetValue("player_1_rank", out Value team)
  126. => team.BoxedValue is 0
  127. ? "Last Smashed: Squad Strike - Red Team Wins"
  128. : "Last Smashed: Squad Strike - Blue Team Wins",
  129. 3 => $"Last Smashed: Custom Smash - {SuperSmashBrosUltimate_PlayerListing(values)}",
  130. 4 => $"Last Smashed: Super Sudden Death - {SuperSmashBrosUltimate_PlayerListing(values)}",
  131. 5 => $"Last Smashed: Smashdown - {SuperSmashBrosUltimate_PlayerListing(values)}",
  132. 6 => $"Last Smashed: Tourney Battle - {SuperSmashBrosUltimate_PlayerListing(values)}",
  133. 7 when values.Matched.TryGetValue("player_1_fighter", out Value player)
  134. => $"Last Smashed: Spirit Board Battle as {SuperSmashBrosUltimate_Character(player)}",
  135. 8 when values.Matched.TryGetValue("player_1_fighter", out Value player)
  136. => $"Playing Adventure Mode as {SuperSmashBrosUltimate_Character(player)}",
  137. 10 when values.Matched.TryGetValue("match_submode", out Value battle) &&
  138. values.Matched.TryGetValue("player_1_fighter", out Value player)
  139. => $"Last Smashed: Classic Mode, Battle {(int)battle.BoxedValue + 1}/8 as {SuperSmashBrosUltimate_Character(player)}",
  140. 12 => $"Last Smashed: Century Smash - {SuperSmashBrosUltimate_PlayerListing(values)}",
  141. 13 => $"Last Smashed: All-Star Smash - {SuperSmashBrosUltimate_PlayerListing(values)}",
  142. 14 => $"Last Smashed: Cruel Smash - {SuperSmashBrosUltimate_PlayerListing(values)}",
  143. 15 when values.Matched.TryGetValue("player_1_fighter", out Value player)
  144. => $"Last Smashed: Home-Run Contest - {SuperSmashBrosUltimate_Character(player)}",
  145. 16 when values.Matched.TryGetValue("player_1_fighter", out Value player1) &&
  146. values.Matched.TryGetValue("player_2_fighter", out Value player2)
  147. => $"Last Smashed: Home-Run Content (Co-op) - {SuperSmashBrosUltimate_Character(player1)} and {SuperSmashBrosUltimate_Character(player2)}",
  148. 17 => $"Last Smashed: Home-Run Contest (Versus) - {SuperSmashBrosUltimate_PlayerListing(values)}",
  149. 18 when values.Matched.TryGetValue("player_1_fighter", out Value player1) &&
  150. values.Matched.TryGetValue("player_2_fighter", out Value player2)
  151. => $"Fresh out of Training mode - {SuperSmashBrosUltimate_Character(player1)} with {SuperSmashBrosUltimate_Character(player2)}",
  152. 58 => $"Last Smashed: LDN Battle - {SuperSmashBrosUltimate_PlayerListing(values)}",
  153. 63 when values.Matched.TryGetValue("player_1_fighter", out Value player)
  154. => $"Last Smashed: DLC Spirit Board Battle as {SuperSmashBrosUltimate_Character(player)}",
  155. _ => "Smashing"
  156. };
  157. }
  158. private static string SuperSmashBrosUltimate_Character(Value value) =>
  159. BinaryPrimitives.ReverseEndianness(
  160. BitConverter.ToInt64(((MsgPack.MessagePackExtendedTypeObject)value.BoxedValue).GetBody(), 0)) switch
  161. {
  162. 0x0 => "Mario",
  163. 0x1 => "Donkey Kong",
  164. 0x2 => "Link",
  165. 0x3 => "Samus",
  166. 0x4 => "Dark Samus",
  167. 0x5 => "Yoshi",
  168. 0x6 => "Kirby",
  169. 0x7 => "Fox",
  170. 0x8 => "Pikachu",
  171. 0x9 => "Luigi",
  172. 0xA => "Ness",
  173. 0xB => "Captain Falcon",
  174. 0xC => "Jigglypuff",
  175. 0xD => "Peach",
  176. 0xE => "Daisy",
  177. 0xF => "Bowser",
  178. 0x10 => "Ice Climbers",
  179. 0x11 => "Sheik",
  180. 0x12 => "Zelda",
  181. 0x13 => "Dr. Mario",
  182. 0x14 => "Pichu",
  183. 0x15 => "Falco",
  184. 0x16 => "Marth",
  185. 0x17 => "Lucina",
  186. 0x18 => "Young Link",
  187. 0x19 => "Ganondorf",
  188. 0x1A => "Mewtwo",
  189. 0x1B => "Roy",
  190. 0x1C => "Chrom",
  191. 0x1D => "Mr Game & Watch",
  192. 0x1E => "Meta Knight",
  193. 0x1F => "Pit",
  194. 0x20 => "Dark Pit",
  195. 0x21 => "Zero Suit Samus",
  196. 0x22 => "Wario",
  197. 0x23 => "Snake",
  198. 0x24 => "Ike",
  199. 0x25 => "Pokémon Trainer",
  200. 0x26 => "Diddy Kong",
  201. 0x27 => "Lucas",
  202. 0x28 => "Sonic",
  203. 0x29 => "King Dedede",
  204. 0x2A => "Olimar",
  205. 0x2B => "Lucario",
  206. 0x2C => "R.O.B.",
  207. 0x2D => "Toon Link",
  208. 0x2E => "Wolf",
  209. 0x2F => "Villager",
  210. 0x30 => "Mega Man",
  211. 0x31 => "Wii Fit Trainer",
  212. 0x32 => "Rosalina & Luma",
  213. 0x33 => "Little Mac",
  214. 0x34 => "Greninja",
  215. 0x35 => "Palutena",
  216. 0x36 => "Pac-Man",
  217. 0x37 => "Robin",
  218. 0x38 => "Shulk",
  219. 0x39 => "Bowser Jr.",
  220. 0x3A => "Duck Hunt",
  221. 0x3B => "Ryu",
  222. 0x3C => "Ken",
  223. 0x3D => "Cloud",
  224. 0x3E => "Corrin",
  225. 0x3F => "Bayonetta",
  226. 0x40 => "Richter",
  227. 0x41 => "Inkling",
  228. 0x42 => "Ridley",
  229. 0x43 => "King K. Rool",
  230. 0x44 => "Simon",
  231. 0x45 => "Isabelle",
  232. 0x46 => "Incineroar",
  233. 0x47 => "Mii Brawler",
  234. 0x48 => "Mii Swordfighter",
  235. 0x49 => "Mii Gunner",
  236. 0x4A => "Piranha Plant",
  237. 0x4B => "Joker",
  238. 0x4C => "Hero",
  239. 0x4D => "Banjo",
  240. 0x4E => "Terry",
  241. 0x4F => "Byleth",
  242. 0x50 => "Min Min",
  243. 0x51 => "Steve",
  244. 0x52 => "Sephiroth",
  245. 0x53 => "Pyra/Mythra",
  246. 0x54 => "Kazuya",
  247. 0x55 => "Sora",
  248. 0xFE => "Random",
  249. 0xFF => "Scripted Entity",
  250. _ => "Unknown"
  251. };
  252. private static string SuperSmashBrosUltimate_PlayerListing(SparseMultiValue values)
  253. {
  254. List<(string Character, int PlayerNumber, int? Rank)> players = [];
  255. foreach (KeyValuePair<string, Value> player in values.Matched)
  256. {
  257. if (player.Key.StartsWith("player_") && player.Key.EndsWith("_fighter") &&
  258. player.Value.BoxedValue is not null)
  259. {
  260. if (!int.TryParse(player.Key.Split('_')[1], out int playerNumber))
  261. continue;
  262. string character = SuperSmashBrosUltimate_Character(player.Value);
  263. int? rank = values.Matched.TryGetValue($"player_{playerNumber}_rank", out Value rankValue)
  264. ? rankValue.IntValue
  265. : null;
  266. players.Add((character, playerNumber, rank));
  267. }
  268. }
  269. players = players.OrderBy(p => p.Rank ?? int.MaxValue).ToList();
  270. return players.Count > 4
  271. ? $"{players.Count} Players - {
  272. players.Take(3)
  273. .Select(p => $"{p.Character}({p.PlayerNumber}){RankMedal(p.Rank)}")
  274. .JoinToString(", ")
  275. }"
  276. : players
  277. .Select(p => $"{p.Character}({p.PlayerNumber}){RankMedal(p.Rank)}")
  278. .JoinToString(", ");
  279. string RankMedal(int? rank) => rank switch
  280. {
  281. 0 => "🥇",
  282. 1 => "🥈",
  283. 2 => "🥉",
  284. _ => ""
  285. };
  286. }
  287. private static FormattedValue NsoEmulator_LaunchedGame(SingleValue value) => value.Matched.StringValue switch
  288. {
  289. #region SEGA Genesis
  290. "m_0054_e" => Playing("Alien Soldier"),
  291. "m_3978_e" => Playing("Alien Storm"),
  292. "m_5234_e" => Playing("ALISIA DRAGOON"),
  293. "m_5003_e" => Playing("Streets of Rage 2"),
  294. "m_4843_e" => Playing("Kid Chameleon"),
  295. "m_2874_e" => Playing("Columns"),
  296. "m_3167_e" => Playing("Comix Zone"),
  297. "m_5007_e" => Playing("Contra: Hard Corps"),
  298. "m_0865_e" => Playing("Ghouls 'n Ghosts"),
  299. "m_0935_e" => Playing("Dynamite Headdy"),
  300. "m_8314_e" => Playing("Earthworm Jim"),
  301. "m_5012_e" => Playing("Ecco the Dolphin"),
  302. "m_2207_e" => Playing("Flicky"),
  303. "m_9432_e" => Playing("Golden Axe II"),
  304. "m_5015_e" => Playing("Golden Axe"),
  305. "m_5017_e" => Playing("Gunstar Heroes"),
  306. "m_0732_e" => Playing("Altered Beast"),
  307. "m_2245_e" or "m_2245_pd" or "m_2245_pf" => Playing("Landstalker"),
  308. "m_1654_e" => Playing("Target Earth"),
  309. "m_7050_e" => Playing("Light Crusader"),
  310. "m_5027_e" => Playing("M.U.S.H.A."),
  311. "m_5028_e" => Playing("Phantasy Star IV"),
  312. "m_9155_e" => Playing("Pulseman"),
  313. "m_5030_e" => Playing("Dr. Robotnik's Mean Bean Machine"),
  314. "m_0098_e" => Playing("Crusader of Centy"),
  315. "m_0098_k" => Playing("신창세기 라그나센티"),
  316. "m_0098_pd" or "m_0098_pf" or "m_0098_ps" => Playing("Soleil"),
  317. "m_5033_e" => Playing("Ristar"),
  318. "m_1987_e" => Playing("MEGA MAN: THE WILY WARS"),
  319. "m_2609_e" => Playing("WOLF OF THE BATTLEFIELD: MERCS"),
  320. "m_3353_e" => Playing("Shining Force II"),
  321. "m_5036_e" => Playing("Shining Force"),
  322. "m_9866_e" => Playing("Sonic The Hedgehog Spinball"),
  323. "m_5041_e" => Playing("Sonic The Hedgehog 2"),
  324. "m_5523_e" => Playing("Space Harrier II"),
  325. "m_0041_e" => Playing("STREET FIGHTER II' : SPECIAL CHAMPION EDITION"),
  326. "m_5044_e" => Playing("STRIDER"),
  327. "m_6353_e" => Playing("Super Fantasy Zone"),
  328. "m_9569_e" => Playing("Beyond Oasis"),
  329. "m_9569_k" => Playing("스토리 오브 도어"),
  330. "m_9569_pd" or "m_9569_ps" => Playing("The Story of Thor"),
  331. "m_9569_pf" => Playing("La Légende de Thor"),
  332. "m_5049_e" => Playing("Shinobi III: Return of the Ninja Master"),
  333. "m_6811_e" => Playing("The Revenge of Shinobi"),
  334. "m_4372_e" => Playing("Thunder Force II"),
  335. "m_1535_e" => Playing("ToeJam & Earl in Panic on Funkotron"),
  336. "m_0432_e" => Playing("ToeJam & Earl"),
  337. "m_5052_e" => Playing("Castlevania: BLOODLINES"),
  338. "m_3626_e" => Playing("VectorMan"),
  339. "m_7955_e" => Playing("Sword of Vermilion"),
  340. "m_0394_e" => Playing("Virtua Fighter 2"),
  341. "m_9417_e" => Playing("Zero Wing"),
  342. #endregion
  343. #region Nintendo 64
  344. "n_1653_e" or "n_1653_p" => Playing("1080º ™ Snowboarding"),
  345. "n_4868_e" or "n_4868_p" => Playing("Banjo Kazooie™"),
  346. "n_1226_e" or "n_1226_p" => Playing("Banjo-Tooie™"),
  347. "n_3083_e" or "n_3083_p" => Playing("Blast Corps"),
  348. "n_3007_e" => Playing("Dr. Mario™ 64"),
  349. "n_4238_e" => Playing("Excitebike™ 64"),
  350. "n_1870_e" => Playing("Extreme G"),
  351. "n_2456_e" => Playing("F-Zero™ X"),
  352. "n_4631_e" => Playing("GoldenEye 007"),
  353. "n_1635_e" => Playing("Harvest Moon 64"),
  354. "n_2225_e" => Playing("Iggy’s Reckin’ Balls"),
  355. "n_1625_e" or "n_1625_p" => Playing("JET FORCE GEMINI™"),
  356. "n_3052_e" => Playing("Kirby 64™: The Crystal Shards"),
  357. "n_4371_e" => Playing("Mario Golf™"),
  358. "n_3013_e" => Playing("Mario Kart™ 64"),
  359. "n_1053_e" or "n_1053_p" => Playing("Mario Party™ 2"),
  360. "n_2965_e" or "n_2965_p" => Playing("Mario Party™ 3"),
  361. "n_4737_e" or "n_4737_p" => Playing("Mario Party™"),
  362. "n_3017_e" => Playing("Mario Tennis™"),
  363. "n_2992_e" or "n_2992_p" => Playing("Paper Mario™"),
  364. "n_3783_e" or "n_3783_p" => Playing("Pilotwings™ 64"),
  365. "n_1848_e" or "n_1848_pd" or "n_1848_pf" => Playing("Pokémon™ Puzzle League"),
  366. "n_3240_e" or "n_3240_pd" or "n_3240_pf" or "n_3240_pi" or "n_3240_ps" => Playing("Pokémon Snap™"),
  367. "n_4590_e" or "n_4590_pd" or "n_4590_pf" or "n_4590_pi" or "n_4590_ps" => Playing("Pokémon Stadium™"),
  368. "n_3309_e" or "n_3309_pd" or "n_3309_pf" or "n_3309_pi" or "n_3309_ps" => Playing("Pokémon Stadium 2™"),
  369. "n_3029_e" => Playing("Sin & Punishment™"),
  370. "n_3030_e" => Playing("Star Fox™ 64"),
  371. "n_3030_p" => Playing("Lylat Wars™"),
  372. "n_3031_e" or "n_3031_p" => Playing("Super Mario 64™"),
  373. "n_4813_e" or "n_4813_p" => Playing("Wave Race™ 64"),
  374. "n_3034_e" => Playing("WIN BACK: COVERT OPERATIONS"),
  375. "n_3034_p" => Playing("OPERATION: WIN BACK"),
  376. "n_3036_e" or "n_3036_p" => Playing("Yoshi's Story™"),
  377. "n_1407_e" or "n_1407_p" => Playing("The Legend of Zelda™: Majora's Mask™"),
  378. "n_3038_e" or "n_3038_p" => Playing("The Legend of Zelda™: Ocarina of Time™"),
  379. #endregion
  380. #region NES
  381. "clv_p_naaae" => Playing("Super Mario Bros.™"),
  382. "clv_p_naabe" => Playing("Super Mario Bros.™: The Lost Levels"),
  383. "clv_p_naace" or "clv_p_naace_sp1" => Playing("Super Mario Bros.™ 3"),
  384. "clv_p_naade" => Playing("Super Mario Bros.™ 2"),
  385. "clv_p_naaee" => Playing("Donkey Kong™"),
  386. "clv_p_naafe" => Playing("Donkey Kong Jr.™"),
  387. "clv_p_naage" => Playing("Donkey Kong™ 3"),
  388. "clv_p_naahe" => Playing("Excitebike™"),
  389. "clv_p_naaje" => Playing("EarthBound Beginnings"),
  390. "clv_p_naame" => Playing("NES™ Open Tournament Golf"),
  391. "clv_p_naane" or "clv_p_naane_sp1" => Playing("The Legend of Zelda™"),
  392. "clv_p_naape" or "clv_p_naape_sp1" => Playing("Kirby's Adventure™"),
  393. "clv_p_naaqe" or "clv_p_naaqe_sp1" or "clv_p_naaqe_sp2" => Playing("Metroid™"),
  394. "clv_p_naare" => Playing("Balloon Fight™"),
  395. "clv_p_naase" or "clv_p_naase_sp1" => Playing("Zelda II - The Adventure of Link™"),
  396. "clv_p_naate" => Playing("Punch-Out!!™ Featuring Mr. Dream"),
  397. "clv_p_naaue" => Playing("Ice Climber™"),
  398. "clv_p_naave" or "clv_p_naave_sp1" => Playing("Kid Icarus™"),
  399. "clv_p_naawe" => Playing("Mario Bros.™"),
  400. "clv_p_naaxe" or "clv_p_naaxe_sp1" => Playing("Dr. Mario™"),
  401. "clv_p_naaye" => Playing("Yoshi™"),
  402. "clv_p_naaze" => Playing("StarTropics™"),
  403. "clv_p_nabce" or "clv_p_nabce_sp1" => Playing("Ghosts'n Goblins™"),
  404. "clv_p_nabre" or "clv_p_nabre_sp1" or "clv_p_nabre_sp2" => Playing("Gradius"),
  405. "clv_p_nacbe" or "clv_p_nacbe_sp1" => Playing("Ninja Gaiden"),
  406. "clv_p_nacce" => Playing("Solomon's Key"),
  407. "clv_p_nacde" => Playing("Tecmo Bowl"),
  408. "clv_p_nacfe" => Playing("Double Dragon"),
  409. "clv_p_nache" => Playing("Double Dragon II: The Revenge"),
  410. "clv_p_nacje" => Playing("River City Ransom"),
  411. "clv_p_nacke" => Playing("Super Dodge Ball"),
  412. "clv_p_nacle" => Playing("Downtown Nekketsu March Super-Awesome Field Day!"),
  413. "clv_p_nacpe" => Playing("The Mystery of Atlantis"),
  414. "clv_p_nacre" => Playing("Soccer"),
  415. "clv_p_nacse" or "clv_p_nacse_sp1" => Playing("Ninja JaJaMaru-kun"),
  416. "clv_p_nacte" => Playing("Ice Hockey"),
  417. "clv_p_nacue" or "clv_p_nacue_sp1" => Playing("Blaster Master"),
  418. "clv_p_nacwe" => Playing("ADVENTURES OF LOLO"),
  419. "clv_p_nacxe" => Playing("Wario's Woods™"),
  420. "clv_p_nacye" => Playing("Tennis"),
  421. "clv_p_nacze" => Playing("Wrecking Crew™"),
  422. "clv_p_nadbe" => Playing("Joy Mech Fight™"),
  423. "clv_p_nadde" or "clv_p_nadde_sp1" => Playing("Star Soldier"),
  424. "clv_p_nadke" => Playing("Tetris®"),
  425. "clv_p_nadle" => Playing("Pro Wrestling"),
  426. "clv_p_nadpe" => Playing("Baseball"),
  427. "clv_p_nadte" or "clv_p_nadte_sp1" => Playing("TwinBee"),
  428. "clv_p_nadue" or "clv_p_nadue_sp1" => Playing("Mighty Bomb Jack"),
  429. "clv_p_nadve" => Playing("Kung-Fu Heroes"),
  430. "clv_p_nadxe" => Playing("City Connection"),
  431. "clv_p_nadye" => Playing("Rygar"),
  432. "clv_p_naeae" => Playing("Crystalis"),
  433. "clv_p_naece" => Playing("Vice: Project Doom"),
  434. "clv_p_naehe" => Playing("Clu Clu Land™"),
  435. "clv_p_naeie" => Playing("VS. Excitebike™"),
  436. "clv_p_naeje" => Playing("Volleyball™"),
  437. "clv_p_naeke" => Playing("JOURNEY TO SILIUS"),
  438. "clv_p_naele" => Playing("S.C.A.T.: Special Cybernetic Attack Team"),
  439. "clv_p_naeme" => Playing("Shadow of the Ninja"),
  440. "clv_p_naene" => Playing("Nightshade"),
  441. "clv_p_naepe" => Playing("The Immortal"),
  442. "clv_p_naeqe" => Playing("Eliminator Boat Duel"),
  443. "clv_p_naere" => Playing("Fire 'n Ice"),
  444. "clv_p_nafce" => Playing("XEVIOUS"),
  445. "clv_p_nagpe" => Playing("DAIVA STORY 6 IMPERIAL OF NIRSARTIA"),
  446. "clv_p_nagqe" => Playing("DIG DUGⅡ"),
  447. "clv_p_nague" => Playing("MAPPY-LAND"),
  448. "clv_p_nahhe" => Playing("Mach Rider™"),
  449. "clv_p_nahje" => Playing("Pinball"),
  450. "clv_p_nahre" => Playing("Mystery Tower"),
  451. "clv_p_nahte" => Playing("Urban Champion™"),
  452. "clv_p_nahue" => Playing("Donkey Kong Jr.™ Math"),
  453. "clv_p_nahve" => Playing("The Mysterious Murasame Castle"),
  454. "clv_p_najae" => Playing("DEVIL WORLD™"),
  455. "clv_p_najbe" => Playing("Golf"),
  456. "clv_p_najpe" => Playing("R.C. PRO-AM™"),
  457. "clv_p_najre" => Playing("COBRA TRIANGLE™"),
  458. "clv_p_najse" => Playing("SNAKE RATTLE N ROLL™"),
  459. "clv_p_najte" => Playing("SOLAR® JETMAN"),
  460. #endregion
  461. #region SNES
  462. "s_2180_e" => Playing("BATTLETOADS™ DOUBLE DRAGON™"),
  463. "s_2179_e" => Playing("BATTLETOADS™ IN BATTLEMANIACS"),
  464. "s_2182_e" => Playing("BIG RUN"),
  465. "s_2156_e" => Playing("Bombuzal"),
  466. "s_2002_e" => Playing("BRAWL BROTHERS"),
  467. "s_2025_e" => Playing("Breath of Fire II"),
  468. "s_2003_e" => Playing("Breath Of Fire"),
  469. "s_2163_e" => Playing("Claymates"),
  470. "s_2150_e" => Playing("Congo's Caper"),
  471. "s_2171_e" => Playing("COSMO GANG THE PUZZLE"),
  472. "s_2004_e" => Playing("Demon's Crest"),
  473. "s_2026_e" => Playing("Kunio-kun no Dodgeball da yo Zen'in Shūgō!"),
  474. "s_2060_e" => Playing("Donkey Kong Country 2: Diddy's Kong Quest"),
  475. "s_2061_e" => Playing("Donkey Kong Country 3: Dixie Kong's Double Trouble!"),
  476. "s_2055_e" => Playing("Donkey Kong Country"),
  477. "s_2139_e" => Playing("DOOMSDAY WARRIOR"),
  478. "s_2051_e" => Playing("EarthBound"),
  479. "s_2162_e" => Playing("Earthworm Jim™ 2"),
  480. "s_2005_e" => Playing("F-ZERO™"),
  481. "s_2183_e" => Playing("FATAL FURY 2"),
  482. "s_2174_e" => Playing("Fighter's History"),
  483. "s_2037_e" => Playing("Harvest Moon"),
  484. "s_2161_e" => Playing("Jelly Boy"),
  485. "s_2006_e" => Playing("Joe & Mac 2: Lost in the Tropics"),
  486. "s_2169_e" => Playing("Caveman Ninja"),
  487. "s_2181_e" => Playing("KILLER INSTINCT™"),
  488. "s_2029_e" or "s_2029_e_sp1" => Playing("Kirby Super Star™"),
  489. "s_2121_e" => Playing("Kirby's Avalanche™"),
  490. "s_2007_e" or "s_2007_e_sp1" => Playing("Kirby's Dream Course™"),
  491. "s_2008_e" or "s_2008_e_sp1" => Playing("Kirby's Dream Land™ 3"),
  492. "s_2172_e" => Playing("Kirby’s Star Stacker™"),
  493. "s_2151_e" => Playing("Magical Drop2"),
  494. "s_2044_e" => Playing("Mario's Super Picross"),
  495. "s_2038_e" => Playing("Natsume Championship Wrestling"),
  496. "s_2140_e" => Playing("Operation Logic Bomb"),
  497. "s_2034_e" => Playing("Panel de Pon"),
  498. "s_2009_e" => Playing("Pilotwings™"),
  499. "s_2010_e" => Playing("Pop'n TwinBee"),
  500. "s_2157_e" => Playing("Prehistorik Man"),
  501. "s_2145_e" => Playing("Psycho Dream"),
  502. "s_2141_e" => Playing("Rival Turf!"),
  503. "s_2152_e" => Playing("SIDE POCKET"),
  504. "s_2158_e" => Playing("Spanky’s™ Quest"),
  505. "s_2031_e" => Playing("Star Fox™ 2"),
  506. "s_2011_e" => Playing("Star Fox™"),
  507. "s_2012_e" => Playing("Stunt Race FX™"),
  508. "s_2032_e" => Playing("Amazing Hebereke"),
  509. "s_2159_e" => Playing("Super Baseball Simulator 1.000"),
  510. "s_2013_e" => Playing("SUPER E.D.F. EARTH DEFENSE FORCE"),
  511. "s_2014_e" => Playing("Smash Tennis"),
  512. "s_2015_e" => Playing("Super Ghouls'n Ghosts™"),
  513. "s_2033_e" => Playing("Super Mario All-Stars™"),
  514. "s_2016_e" or "s_2016_e_sp1" => Playing("Super Mario Kart™"),
  515. "s_2017_e" or "s_2017_e_sp1" => Playing("Super Mario World™"),
  516. "s_2018_e" or "s_2018_e_sp1" => Playing("Super Metroid™"),
  517. "s_2184_e" => Playing("Super Ninja Boy"),
  518. "s_2019_e" or "s_2019_e_sp1" => Playing("Super Punch-Out!!™"),
  519. "s_2020_e" => Playing("Super Puyo Puyo 2"),
  520. "s_2133_e" => Playing("SUPER R-TYPE"),
  521. "s_2021_e" => Playing("Super Soccer"),
  522. "s_2022_e" => Playing("Super Tennis"),
  523. "s_2136_e" => Playing("Sutte Hakkun"),
  524. "s_2142_e" => Playing("The Ignition Factor"),
  525. "s_2143_e" => Playing("The Peace Keepers"),
  526. "s_2146_e" => Playing("Tuff E Nuff"),
  527. "s_2144_e" => Playing("SUPER VALIS Ⅳ"),
  528. "s_2049_e" => Playing("Wild Guns"),
  529. "s_2096_e" => Playing("Wrecking Crew™ '98"),
  530. "s_2023_e" => Playing("Super Mario World™ 2: Yoshi's Island™"),
  531. "s_2024_e" => Playing("The Legend of Zelda™: A Link to the Past™"),
  532. #endregion
  533. #region GameBoy
  534. "c_7224_e" or "c_7224_p" => Playing("Alone in the Dark: The New Nightmare"),
  535. "c_5022_e" => Playing("Blaster Master: Enemy Below"),
  536. "c_3381_e" => Playing("Game & Watch™ Gallery 3"),
  537. "c_0282_e" => Playing("Kirby Tilt ‘n’ Tumble™"),
  538. "c_4471_e" or "c_4471_p" => Playing("Mario Golf™"),
  539. "c_9947_e" => Playing("Mario Tennis™"),
  540. "c_3191_e" or "c_3191_p" or "c_3191_x" => Playing("Pokémon™ Trading Card Game"),
  541. "c_8914_e" or "c_8914_p" => Playing("Quest for Camelot™"),
  542. "c_2648_e" => Playing("Tetris® DX"),
  543. "c_5928_e" => Playing("Wario Land™ 3"),
  544. "c_3996_e" or "c_3996_pd" or "c_3996_pf" => Playing("The Legend of Zelda™: Link's Awakening DX™"),
  545. "c_8852_e" or "c_8852_p" => Playing("The Legend of Zelda™: Oracle of Ages™"),
  546. "c_9130_e" or "c_9130_p" => Playing("The Legend of Zelda™: Oracle of Seasons™"),
  547. "d_6879_e" => Playing("Alleyway™"),
  548. "d_7618_e" => Playing("Baseball"),
  549. "d_6005_e" => Playing("BurgerTime Deluxe"),
  550. "d_7120_e" => Playing("Castlevania Legends"),
  551. "d_2744_e" => Playing("Dr. Mario™"),
  552. "d_1593_e" => Playing("Donkey Kong Land 2™"),
  553. "d_7216_e" => Playing("Donkey Kong Land III™"),
  554. "d_4971_e" => Playing("Donkey Kong Land™"),
  555. "d_7984_e" => Playing("GARGOYLE'S QUEST"),
  556. "d_8212_e" => Playing("Kirby's Dream Land™ 2"),
  557. "d_5661_e" => Playing("Kirby's Dream Land™"),
  558. "d_3837_e" => Playing("MEGA MAN II"),
  559. "d_1965_e" => Playing("MEGA MAN III"),
  560. "d_0194_e" => Playing("MEGA MAN IV"),
  561. "d_1425_e" => Playing("MEGA MAN V"),
  562. "d_9324_e" => Playing("MEGA MAN: DR. WILY'S REVENGE"),
  563. "d_1577_e" => Playing("Metroid™ II - Return of Samus™"),
  564. "d_5124_e" => Playing("Super Mario Land™ 2 - 6 Golden Coins™"),
  565. "d_7970_e" => Playing("Super Mario Land™"),
  566. "d_8484_e" => Playing("Tetris®"),
  567. #endregion
  568. #region GameBoy Advance
  569. "a_9694_e" => Playing("Densetsu no Starfy 1"),
  570. "a_5600_e" => Playing("Densetsu no Starfy 2"),
  571. "a_7565_e" => Playing("Densetsu no Starfy 3"),
  572. "a_6553_e" => Playing("F-ZERO CLIMAX"),
  573. "a_7842_e" or "a_7842_p" => Playing("F-Zero™- GP Legend"),
  574. "a_9283_e" => Playing("F-Zero™ Maximum Velocity"),
  575. "a_3744_e" or "a_3744_x" or "a_3744_y" => Playing("Fire Emblem™"),
  576. "a_8978_d" or "a_8978_e" or "a_8978_f" or "a_8978_i" or "a_8978_s" => Playing("Golden Sun™: The Lost Age"),
  577. "a_3108_d" or "a_3108_e" or "a_3108_f" or "a_3108_i" or "a_3108_s" => Playing("Golden Sun™"),
  578. "a_3654_e" or "a_3654_p" => Playing("Kirby™ & The Amazing Mirror"),
  579. "a_7279_p" => Playing("Kuru Kuru Kururin™"),
  580. "a_7311_e" or "a_7311_p" => Playing("Mario & Luigi™: Superstar Saga"),
  581. "a_6845_e" => Playing("Mario Kart™: Super Circuit™"),
  582. "a_4139_e" or "a_4139_p" => Playing("Metroid™ Fusion"),
  583. "a_6834_e" or "a_6834_p" => Playing("Metroid™: Zero Mission"),
  584. "a_8989_e" or "a_8989_p" => Playing("Pokémon™ Mystery Dungeon: Red Rescue Team"),
  585. "a_9444_e" => Playing("Super Mario™ Advance"),
  586. "a_9901_e" or "a_9901_p" => Playing("Super Mario™ Advance 4: Super Mario Bros.™ 3"),
  587. "a_2939_e" => Playing("Super Mario World™: Super Mario Advance 2"),
  588. "a_2939_p" => Playing("Super Mario World™: Super Mario Advance 2™"),
  589. "a_1302_e" => Playing("WarioWare™, Inc.: Mega Microgame$!"),
  590. "a_1302_p" => Playing("WarioWare™, Inc.: Minigame Mania."),
  591. "a_6960_e" or "a_6960_p" => Playing("Yoshi's Island™: Super Mario™ Advance 3"),
  592. "a_5190_e" or "a_5190_p" => Playing("The Legend of Zelda™: A Link to the Past™ Four Swords"),
  593. "a_8665_e" or "a_8665_p" => Playing("The Legend of Zelda™: The Minish Cap"),
  594. #endregion
  595. _ => FormattedValue.ForceReset
  596. };
  597. }
  598. }