public int GetEvadeIntFromFlag(EvadeCapValues evadeCapFlag) { int evadeCap; switch (evadeCapFlag) { case EvadeCapValues.veryLow: evadeCap = 0xE1; break; case EvadeCapValues.low: evadeCap = 0xE6; break; case EvadeCapValues.medLow: evadeCap = 0xEB; break; case EvadeCapValues.medium: evadeCap = 0xF0; break; case EvadeCapValues.medHigh: evadeCap = 0xF5; break; case EvadeCapValues.high: evadeCap = 0xFA; break; case EvadeCapValues.extreme: evadeCap = 0xFC; break; case EvadeCapValues.insane: evadeCap = 0xFF; break; default: evadeCap = 0xF0; break; } return(evadeCap); }
public void TransformFinalFormation(FinalFormation formation, EvadeCapValues evadeClampFlag, MT19337 rng) { if (formation == FinalFormation.None) // This shouldnt be possible, but we are still checking anyways to be safe. { return; } Blob finalBattle = Get(FormationsOffset + ChaosFormationIndex * FormationSize, FormationSize); if (formation == FinalFormation.Random) { formation = (FinalFormation)rng.Between(2, Enum.GetValues(typeof(FinalFormation)).Length - 1); // First two are None and Random System.Diagnostics.Debug.Assert(formation != FinalFormation.None); System.Diagnostics.Debug.Assert(formation != FinalFormation.Random); } switch (formation) { case FinalFormation.WarMECHsAndFriends: finalBattle[TypeOffset] = 0x2C; // Big/Small Enemy mix, and the Astos/Madpony/Badman/WarMECH patterns finalBattle[GFXOffset] = 0x03; // WarMECH Badman N/A N/A finalBattle[IDsOffset + 0] = Enemy.WarMech; finalBattle[IDsOffset + 1] = Enemy.Evilman; finalBattle[QuantityOffset + 0] = 0x22; finalBattle[QuantityOffset + 1] = 0x66; finalBattle[PalettesOffset + 0] = 0x2F; finalBattle[PalettesOffset + 1] = 0x17; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; case FinalFormation.KaryAndTiamat: finalBattle[TypeOffset] = 0x2B; // Big/Small Enemy mix, and the Dragon2 pattern finalBattle[GFXOffset] = 0x05; // Dragon Dragon N/A N/A finalBattle[IDsOffset + 0] = Enemy.Kary2; finalBattle[IDsOffset + 1] = Enemy.Tiamat2; finalBattle[QuantityOffset + 0] = 0x11; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[PalettesOffset + 0] = 0x08; finalBattle[PalettesOffset + 1] = 0x0A; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; case FinalFormation.TheFundead: finalBattle[TypeOffset] = 0x24; // Eye pattern finalBattle[GFXOffset] = 0x0B; // Eye / Geist finalBattle[IDsOffset + 0] = Enemy.Lich2; finalBattle[IDsOffset + 1] = Enemy.Phantom; finalBattle[QuantityOffset + 0] = 0x22; finalBattle[QuantityOffset + 1] = 0x44; finalBattle[PalettesOffset + 0] = 0x03; finalBattle[PalettesOffset + 1] = 0x17; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. // Scale up the Fundead enemies if we end up with them. They're too weak otherwise. ScaleSingleEnemyStats(Enemy.Lich2, 140, 140, false, null, false, 100, 100, GetEvadeIntFromFlag(evadeClampFlag)); ScaleSingleEnemyStats(Enemy.Phantom, 120, 120, false, null, false, 100, 100, GetEvadeIntFromFlag(evadeClampFlag)); break; case FinalFormation.TimeLoop: finalBattle[TypeOffset] = 0x0B; // 9Small + Garland pattern finalBattle[GFXOffset] = 0x2A; // Garland Garland Garland N/A finalBattle[IDsOffset + 0] = Enemy.Garland; finalBattle[IDsOffset + 1] = Enemy.Chaos; finalBattle[IDsOffset + 2] = Enemy.Garland; finalBattle[QuantityOffset + 0] = 0x08; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[QuantityOffset + 2] = 0x88; finalBattle[PalettesOffset + 0] = 0x00; finalBattle[PalettesOffset + 1] = 0x00; finalBattle[PaletteAsignmentOffset] = 0x01; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; case FinalFormation.KrakensAndSahags: finalBattle[TypeOffset] = 0x21; // 2/4 + Sahag Pattern finalBattle[GFXOffset] = 0x0F; // BigEye BigEye Sahag Sahag finalBattle[IDsOffset + 0] = Enemy.Kraken; finalBattle[IDsOffset + 1] = Enemy.Kraken2; finalBattle[IDsOffset + 2] = Enemy.RSahag; finalBattle[IDsOffset + 3] = Enemy.WzSahag; finalBattle[QuantityOffset + 0] = 0x11; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[QuantityOffset + 2] = 0x24; finalBattle[QuantityOffset + 3] = 0x44; finalBattle[PalettesOffset + 0] = 0x08; finalBattle[PalettesOffset + 1] = 0x0B; finalBattle[PaletteAsignmentOffset] = 0x51; // Palette Assignment in top nibble, 1 in bottom for unrunnable. BoostEnemyMorale(Enemy.RSahag); BoostEnemyMorale(Enemy.WzSahag); break; case FinalFormation.SnakePit: finalBattle[TypeOffset] = 0x03; // 9 Small + Asp pattern finalBattle[GFXOffset] = 0x00; // Asp Asp Asp Asp finalBattle[IDsOffset + 0] = Enemy.Asp; finalBattle[IDsOffset + 1] = Enemy.Tiamat; finalBattle[IDsOffset + 2] = Enemy.Tiamat2; finalBattle[IDsOffset + 3] = Enemy.Cobra; finalBattle[QuantityOffset + 0] = 0x16; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[QuantityOffset + 2] = 0x11; finalBattle[QuantityOffset + 3] = 0x66; finalBattle[PalettesOffset + 0] = 0x3C; finalBattle[PaletteAsignmentOffset] = 0x01; // Palette Assignment in top nibble, 1 in bottom for unrunnable. BoostEnemyMorale(Enemy.Asp); BoostEnemyMorale(Enemy.Cobra); break; } Put(FormationsOffset + ChaosFormationIndex * FormationSize, finalBattle); }
public void TransformFinalFormation(FinalFormation formation, EvadeCapValues evadeClampFlag) { Blob finalBattle = Get(FormationsOffset + ChaosFormationIndex * FormationSize, FormationSize); switch (formation) { case FinalFormation.WarMECHsAndFriends: finalBattle[TypeOffset] = 0x2C; // Big/Small Enemy mix, and the Astos/Madpony/Badman/WarMECH patterns finalBattle[GFXOffset] = 0x03; // WarMECH Badman N/A N/A finalBattle[IDsOffset + 0] = 0x76; // WarMECH (battle stats, etc) finalBattle[IDsOffset + 1] = 0x70; // EvilMan finalBattle[QuantityOffset + 0] = 0x22; finalBattle[QuantityOffset + 1] = 0x66; finalBattle[PalettesOffset + 0] = 0x2F; finalBattle[PalettesOffset + 1] = 0x17; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; case FinalFormation.KaryAndTiamat: finalBattle[TypeOffset] = 0x2B; // Big/Small Enemy mix, and the Dragon2 pattern finalBattle[GFXOffset] = 0x05; // Dragon Dragon N/A N/A finalBattle[IDsOffset + 0] = 0x7A; // Kary2 finalBattle[IDsOffset + 1] = 0x7E; // Tiamat2 finalBattle[QuantityOffset + 0] = 0x11; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[PalettesOffset + 0] = 0x08; finalBattle[PalettesOffset + 1] = 0x0A; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; case FinalFormation.TheFundead: finalBattle[TypeOffset] = 0x24; // Eye pattern finalBattle[GFXOffset] = 0x0B; // Eye / Geist finalBattle[IDsOffset + 0] = 0x78; // Lich2 finalBattle[IDsOffset + 1] = 0x33; // Phantom finalBattle[QuantityOffset + 0] = 0x22; finalBattle[QuantityOffset + 1] = 0x44; finalBattle[PalettesOffset + 0] = 0x03; finalBattle[PalettesOffset + 1] = 0x17; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. // Scale up the Fundead enemies if we end up with them. They're too weak otherwise. ScaleSingleEnemyStats(0x78, 140, 140, false, false, null, false, 100, 100, GetEvadeIntFromFlag(evadeClampFlag)); ScaleSingleEnemyStats(0x33, 120, 120, false, false, null, false, 100, 100, GetEvadeIntFromFlag(evadeClampFlag)); break; case FinalFormation.TimeLoop: finalBattle[TypeOffset] = 0x0B; // 9Small + Garland pattern finalBattle[GFXOffset] = 0x2A; // Garland Garland Garland N/A finalBattle[IDsOffset + 0] = 0x69; // Garland finalBattle[IDsOffset + 1] = 0x7F; // Chaos finalBattle[IDsOffset + 2] = 0x69; // Garland finalBattle[QuantityOffset + 0] = 0x08; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[QuantityOffset + 2] = 0x88; finalBattle[PalettesOffset + 0] = 0x00; finalBattle[PalettesOffset + 1] = 0x00; finalBattle[PaletteAsignmentOffset] = 0x01; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; } Put(FormationsOffset + ChaosFormationIndex * FormationSize, finalBattle); }
public void TransformFinalFormation(FinalFormation formation, EvadeCapValues evadeClampFlag, MT19337 rng) { if (formation == FinalFormation.None) // This shouldnt be possible, but we are still checking anyways to be safe. { return; } Blob finalBattle = Get(FormationsOffset + ChaosFormationIndex * FormationSize, FormationSize); if (formation == FinalFormation.Random) { formation = (FinalFormation)rng.Between(1, Enum.GetValues(typeof(FinalFormation)).Length - 2); // First is None, last is Random System.Diagnostics.Debug.Assert(formation != FinalFormation.None); System.Diagnostics.Debug.Assert(formation != FinalFormation.Random); } switch (formation) { case FinalFormation.WarMECHsAndFriends: finalBattle[TypeOffset] = 0x2C; // Big/Small Enemy mix, and the Astos/Madpony/Badman/WarMECH patterns finalBattle[GFXOffset] = 0x03; // WarMECH Badman N/A N/A finalBattle[IDsOffset + 0] = 0x76; // WarMECH (battle stats, etc) finalBattle[IDsOffset + 1] = 0x70; // EvilMan finalBattle[QuantityOffset + 0] = 0x22; finalBattle[QuantityOffset + 1] = 0x66; finalBattle[PalettesOffset + 0] = 0x2F; finalBattle[PalettesOffset + 1] = 0x17; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; case FinalFormation.KaryAndTiamat: finalBattle[TypeOffset] = 0x2B; // Big/Small Enemy mix, and the Dragon2 pattern finalBattle[GFXOffset] = 0x05; // Dragon Dragon N/A N/A finalBattle[IDsOffset + 0] = 0x7A; // Kary2 finalBattle[IDsOffset + 1] = 0x7E; // Tiamat2 finalBattle[QuantityOffset + 0] = 0x11; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[PalettesOffset + 0] = 0x08; finalBattle[PalettesOffset + 1] = 0x0A; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; case FinalFormation.TheFundead: finalBattle[TypeOffset] = 0x24; // Eye pattern finalBattle[GFXOffset] = 0x0B; // Eye / Geist finalBattle[IDsOffset + 0] = 0x78; // Lich2 finalBattle[IDsOffset + 1] = 0x33; // Phantom finalBattle[QuantityOffset + 0] = 0x22; finalBattle[QuantityOffset + 1] = 0x44; finalBattle[PalettesOffset + 0] = 0x03; finalBattle[PalettesOffset + 1] = 0x17; finalBattle[PaletteAsignmentOffset] = 0x41; // Palette Assignment in top nibble, 1 in bottom for unrunnable. // Scale up the Fundead enemies if we end up with them. They're too weak otherwise. ScaleSingleEnemyStats(0x78, 140, 140, false, false, null, false, 100, 100, GetEvadeIntFromFlag(evadeClampFlag)); ScaleSingleEnemyStats(0x33, 120, 120, false, false, null, false, 100, 100, GetEvadeIntFromFlag(evadeClampFlag)); break; case FinalFormation.TimeLoop: finalBattle[TypeOffset] = 0x0B; // 9Small + Garland pattern finalBattle[GFXOffset] = 0x2A; // Garland Garland Garland N/A finalBattle[IDsOffset + 0] = 0x69; // Garland finalBattle[IDsOffset + 1] = 0x7F; // Chaos finalBattle[IDsOffset + 2] = 0x69; // Garland finalBattle[QuantityOffset + 0] = 0x08; finalBattle[QuantityOffset + 1] = 0x11; finalBattle[QuantityOffset + 2] = 0x88; finalBattle[PalettesOffset + 0] = 0x00; finalBattle[PalettesOffset + 1] = 0x00; finalBattle[PaletteAsignmentOffset] = 0x01; // Palette Assignment in top nibble, 1 in bottom for unrunnable. break; } Put(FormationsOffset + ChaosFormationIndex * FormationSize, finalBattle); }