{ lib , fetchFromMega , fetchFromMediafire , fetchurl , mkWindowsApp , wine , wineArch , unzip , makeDesktopItem , makeDesktopIcon , copyDesktopItems , copyDesktopIcons , legacy-version ? false }: let uid = "pkmn-infinite-fusion"; in mkWindowsApp rec { pname = "Pokemon Infinite Fusion"; version = if legacy-version then "4.9.2" else "5.2.1"; meta.homepage = "https://www.pokecommunity.com/showthread.php?t=347883"; meta.description = "This game re-introduces the DNA Splicers from Black and White 2... Except this time, you can use it on EVERY Pokémon!"; dontUnpack = true; src = if legacy-version then fetchFromMega rec { name = "infinitefusion_${version}-full.zip"; url = "https://mega.nz/file/kg9UxbAI#G-bG8rv1HkOqTkza4R1TCcNFihc0C9ir21GtcMD6FPo"; hash = "sha256-YTEVoQ6Dml5XBb9jSkzKHCWs4MAtdULSsnkJHp7uUCY="; assert_exists = [ name ]; } else fetchFromMediafire rec { name = "infinitefusion_preloaded_${version}_full.zip"; url = "https://www.mediafire.com/file/2eqpi1qq74yl1gb/infinitefusion_preloaded_5.2.1_full.zip/file"; hash = "sha256-JyalBh2ikwAbNm1SUg2oYXnLKbg2jG0ZmBUjoFOhGuk="; assert_exists = [ name ]; }; inherit wine wineArch; nativeBuildInputs = [ copyDesktopItems copyDesktopIcons ]; installPhase = '' runHook preInstall ln -s $out/bin/.launcher $out/bin/${lib.escapeShellArg pname} runHook postInstall ''; winAppInstall = '' ${unzip}/bin/unzip ${src} -d "$WINEPREFIX/drive_c/${uid}" '' + lib.optionalString legacy-version '' mkdir -vp "$WINEPREFIX/drive_c/windows/fonts" cp -v "$WINEPREFIX/drive_c/${uid}/Fonts/"* "$WINEPREFIX/drive_c/windows/fonts/" ''; # v5+ fileMap."$HOME/.local/share/${uid}/AppData/infinitefusion" = "drive_c/users/$USER/AppData/Roaming/infinitefusion"; # legacy fileMap."$HOME/.local/share/${uid}/Saved Games" = "drive_c/users/$USER/Saved Games"; winAppRun = if legacy-version then '' $WINE start /unix "$WINEPREFIX"/drive_c/${uid}/Game.exe "$ARGS" '' else '' $WINE start /unix "$WINEPREFIX"/drive_c/${uid}/"Pokemon Infinite Fusion".exe "$ARGS" ''; desktopItems = [ (makeDesktopItem { name = pname; exec = pname; icon = uid; desktopName = pname; categories = ["Game"]; }) ]; desktopIcon = makeDesktopIcon { name = uid; icoIndex = 0; src = fetchurl { url = "https://static.wikia.nocookie.net/infinitefusion/images/e/e6/Site-logo.png"; hash = "sha256-TupD2OHsJnH/SntZUqvjoBvIZziRN+Wv8S0nMLQ7UQE="; }; }; }