public IActionResult Randomize() { var vm = new RandomizeViewModel { File = null, Seed = Blob.Random(4).ToHex(), Flags = Flags.FromJson(System.IO.File.ReadAllText(Path.Combine(Startup.GetPresetsDirectory(), "default.json"))) }; vm.FlagsInput = Flags.EncodeFlagsText(vm.Flags); return(View(vm)); }
public async Task <IActionResult> Randomize(RandomizeViewModel viewModel) { // Easier to just early return here and not have to verify viewModel.File != null repeatedly. if (!ModelState.IsValid) { return(View(viewModel)); } if (viewModel.File.Length < 256 * 1024 || viewModel.File.Length > (256 + 8) * 1024) { ModelState.AddModelError("File", "Unexpected file length, FF1 ROM should be close to 256 kB."); } var rom = await FF1Rom.CreateAsync(viewModel.File.OpenReadStream()); if (!rom.Validate()) { ModelState.AddModelError("File", "File does not appear to be a valid FF1 NES ROM."); } if (!ModelState.IsValid) { return(View(viewModel)); } rom.Randomize(Blob.FromHex(viewModel.Seed), viewModel.Flags); var filename = viewModel.File.FileName; var pathIndex = filename.LastIndexOfAny(new[] { '\\', '/' }); filename = pathIndex == -1 ? filename : filename.Substring(pathIndex + 1); var extensionIndex = filename.LastIndexOf('.'); var newFilename = extensionIndex == -1 ? filename : filename.Substring(0, extensionIndex); newFilename = $"{newFilename}_{viewModel.Seed}_{Flags.EncodeFlagsText(viewModel.Flags)}.nes"; Response.StatusCode = 200; Response.ContentLength = rom.TotalLength; Response.ContentType = "application/octet-stream"; Response.Headers.Add("Content-Disposition", $"attachment; filename=\"{newFilename}\""); await rom.SaveAsync(Response.Body); Response.Body.Close(); return(new EmptyResult()); }
public IActionResult Randomize() { var vm = new RandomizeViewModel { File = null, Seed = Blob.Random(4).ToHex(), Flags = new Flags { Treasures = true, NPCItems = true, NPCFetchItems = false, Shops = true, MagicShops = false, MagicLevels = true, MagicPermissions = false, Rng = true, EnemyScripts = false, EnemySkillsSpells = true, EnemyStatusAttacks = true, OrdealsPillars = true, TitansTrove = true, MapOpenProgression = false, IncentivizeFreeNPCs = true, IncentivizeFetchNPCs = false, IncentivizeFetchItems = false, IncentivizeMarsh = true, IncentivizeMarshKeyLocked = false, IncentivizeVolcano = false, IncentivizeConeria = true, IncentivizeEarth = true, IncentivizeIceCave = true, IncentivizeOrdeals = true, IncentivizeSeaShrine = false, IncentivizeSkyPalace = false, IncentivizeTail = true, IncentivizeMasamune = true, IncentivizeOpal = true, IncentivizeRibbon = true, IncentivizeRibbon2 = false, Incentivize65K = false, IncentivizeBad = false, IncentivizeDefCastArmor = false, IncentivizeOffCastArmor = false, IncentivizeOtherCastArmor = false, IncentivizeDefCastWeapon = false, IncentivizeOffCastWeapon = false, IncentivizeOtherCastWeapon = false, EarlySarda = true, EarlySage = true, CrownlessOrdeals = true, FreeBridge = false, FreeAirship = false, EasyMode = false, NoPartyShuffle = true, SpeedHacks = true, IdentifyTreasures = true, Dash = true, BuyTen = true, HouseMPRestoration = true, WeaponStats = true, ChanceToRun = true, SpellBugs = true, EnemyStatusAttackBug = true, ForcedPartyMembers = 0, PriceScaleFactor = 3.0, EnemyScaleFactor = 1.5, ExpMultiplier = 2.5, ExpBonus = 250, FunEnemyNames = false, PaletteSwap = false, TeamSteak = false, ModernBattlefield = false, Music = MusicShuffle.None } }; vm.FlagsInput = vm.Flags.GetString(); return(View(vm)); }
public IActionResult Randomize() { var vm = new RandomizeViewModel { File = null, Seed = Blob.Random(4).ToHex(), Flags = new Flags { Treasures = true, NPCItems = true, IncentivizeKingConeria = true, IncentivizePrincess = true, IncentivizeMatoya = false, IncentivizeBikke = true, IncentivizeElfPrince = false, IncentivizeAstos = true, IncentivizeNerrick = false, IncentivizeSmith = true, IncentivizeSarda = true, IncentivizeCanoeSage = true, IncentivizeCubeBot = true, IncentivizeFairy = false, IncentivizeLefein = true, IncentivizeMarsh = true, IncentivizeVolcano = true, IncentivizeConeria = false, IncentivizeEarth = true, IncentivizeIceCave = false, IncentivizeOrdeals = true, IncentivizeSeaShrine = true, IncentivizeBridge = true, IncentivizeLute = true, IncentivizeShip = true, IncentivizeCrown = true, IncentivizeCrystal = false, IncentivizeHerb = false, IncentivizeKey = true, IncentivizeTnt = false, IncentivizeCanal = true, IncentivizeRuby = true, IncentivizeRod = true, IncentivizeCanoe = true, IncentivizeFloater = true, IncentivizeTail = true, IncentivizeBottle = false, IncentivizeOxyale = true, IncentivizeSlab = true, IncentivizeChime = true, IncentivizeCube = true, IncentivizeAdamant = true, IncentivizeXcalber = false, IncentivizeMasamune = true, IncentivizeRibbon = false, IncentivizeRibbon2 = false, IncentivizePowerGauntlet = true, IncentivizeWhiteShirt = true, IncentivizeBlackShirt = false, IncentivizeOpal = true, Incentivize65K = false, IncentivizeBad = false, Shops = true, MagicShops = false, MagicLevels = true, MagicPermissions = false, Rng = true, EnemyScripts = true, EnemySkillsSpells = true, EnemyStatusAttacks = true, EnemyFormationsUnrunnable = true, EnemyFormationsSurprise = true, EarlyRod = true, EarlyCanoe = true, EarlyOrdeals = true, EarlyBridge = true, NoPartyShuffle = true, SpeedHacks = true, IdentifyTreasures = true, Dash = true, BuyTen = true, WaitWhenUnrunnable = true, HouseMPRestoration = true, WeaponStats = true, ChanceToRun = true, SpellBugs = true, EnemyStatusAttackBug = true, FunEnemyNames = true, PaletteSwap = true, TeamSteak = true, ModernBattlefield = true, Music = MusicShuffle.None, ForcedPartyMembers = 1, PriceScaleFactor = 3.0, EnemyScaleFactor = 1.5, ExpMultiplier = 3.0, ExpBonus = 100, EasyMode = false, Ordeals = true, MapConeriaDwarves = true, MapVolcanoIceRiver = true, MapTitansTrove = true } }; vm.FlagsInput = vm.Flags.GetString(); return(View(vm)); }