diff --git a/Glamourer/Services/CodeService.cs b/Glamourer/Services/CodeService.cs index 77fdcaa..71f1a45 100644 --- a/Glamourer/Services/CodeService.cs +++ b/Glamourer/Services/CodeService.cs @@ -29,10 +29,11 @@ public class CodeService World = 0x010000, Elephants = 0x020000, Crown = 0x040000, + Dolphins = 0x080000, } - public const CodeFlag DyeCodes = CodeFlag.Clown | CodeFlag.World | CodeFlag.Elephants; - public const CodeFlag GearCodes = CodeFlag.Emperor | CodeFlag.World | CodeFlag.Elephants; + public const CodeFlag DyeCodes = CodeFlag.Clown | CodeFlag.World | CodeFlag.Elephants | CodeFlag.Dolphins; + public const CodeFlag GearCodes = CodeFlag.Emperor | CodeFlag.World | CodeFlag.Elephants | CodeFlag.Dolphins; public const CodeFlag RaceCodes = CodeFlag.OopsHyur | CodeFlag.OopsElezen @@ -114,7 +115,9 @@ public class CodeService return null; var badFlags = ~GetMutuallyExclusive(flag); - return v => _enabled = v ? (_enabled | flag) & badFlags : _enabled & ~flag;; + return v => _enabled = v ? (_enabled | flag) & badFlags : _enabled & ~flag; + + ; } public CodeFlag GetCode(string name) @@ -173,6 +176,7 @@ public class CodeService CodeFlag.World => (DyeCodes | GearCodes) & ~CodeFlag.World, CodeFlag.Elephants => (DyeCodes | GearCodes) & ~CodeFlag.Elephants, CodeFlag.Crown => 0, + CodeFlag.Dolphins => (DyeCodes | GearCodes) & ~CodeFlag.Dolphins, _ => 0, }; @@ -198,6 +202,7 @@ public class CodeService CodeFlag.World => [ 0xFD, 0xA2, 0xD2, 0xBC, 0xD9, 0x8A, 0x7E, 0x2B, 0x52, 0xCB, 0x57, 0x6E, 0x3A, 0x2E, 0x30, 0xBA, 0x4E, 0xAE, 0x42, 0xEA, 0x5C, 0x57, 0xDF, 0x17, 0x37, 0x3C, 0xCE, 0x17, 0x42, 0x43, 0xAE, 0xD0 ], CodeFlag.Elephants => [ 0x9F, 0x4C, 0xCF, 0x6D, 0xC4, 0x01, 0x31, 0x46, 0x02, 0x05, 0x31, 0xED, 0xED, 0xB2, 0x66, 0x29, 0x31, 0x09, 0x1E, 0xE7, 0x47, 0xDE, 0x7B, 0x03, 0xB0, 0x3C, 0x06, 0x76, 0x26, 0x91, 0xDF, 0xB2 ], CodeFlag.Crown => [ 0x43, 0x8E, 0x34, 0x56, 0x24, 0xC9, 0xC6, 0xDE, 0x2A, 0x68, 0x3A, 0x5D, 0xF5, 0x8E, 0xCB, 0xEF, 0x0D, 0x4D, 0x5B, 0xDC, 0x23, 0xF9, 0xF9, 0xBD, 0xD9, 0x60, 0xAD, 0x53, 0xC5, 0xA0, 0x33, 0xC4 ], + CodeFlag.Dolphins => [ 0x64, 0xC6, 0x2E, 0x7C, 0x22, 0x3A, 0x42, 0xF5, 0xC3, 0x93, 0x4F, 0x70, 0x1F, 0xFD, 0xFA, 0x3C, 0x98, 0xD2, 0x7C, 0xD8, 0x88, 0xA7, 0x3D, 0x1D, 0x0D, 0xD6, 0x70, 0x15, 0x28, 0x2E, 0x79, 0xE7 ], _ => [], }; } diff --git a/Glamourer/State/FunEquipSet.cs b/Glamourer/State/FunEquipSet.cs index bb56fcb..91e6419 100644 --- a/Glamourer/State/FunEquipSet.cs +++ b/Glamourer/State/FunEquipSet.cs @@ -77,7 +77,8 @@ internal class FunEquipSet new Group(0000, 0, 0137, 2, 0000, 0, 0000, 0, 0000, 0), // Wailing Spirit new Group(0232, 1, 0232, 1, 0279, 1, 0232, 1, 0232, 1), // Eerie Attire new Group(0232, 1, 6036, 1, 0279, 1, 0232, 1, 0232, 1), // Vampire - new Group(0505, 6, 0505, 6, 0505, 6, 0505, 6, 0505, 6) // Manusya Casting + new Group(0505, 6, 0505, 6, 0505, 6, 0505, 6, 0505, 6), // Manusya Casting + new Group(6147, 1, 6147, 1, 6147, 1, 6147, 1, 6147, 1) // Tonberry ); public static readonly FunEquipSet AprilFirst = new @@ -94,7 +95,13 @@ internal class FunEquipSet new Group(0159, 1, 0000, 0, 0000, 0, 0000, 0, 0000, 0), // Slime Crown new Group(6117, 1, 6117, 1, 6117, 1, 6117, 1, 6117, 1), // Clown new Group(6169, 3, 6169, 3, 0279, 1, 6169, 3, 6169, 3), // Chocobo Pajama - new Group(6169, 2, 6169, 2, 0279, 2, 6169, 2, 6169, 2) // Cactuar Pajama + new Group(6169, 2, 6169, 2, 0279, 2, 6169, 2, 6169, 2), // Cactuar Pajama + new Group(6023, 1, 6023, 1, 0000, 0, 0000, 0, 0000, 0), // Swine + new Group(5040, 1, 0000, 0, 0000, 0, 0000, 0, 0000, 0), // Namazu only + new Group(5040, 1, 6023, 1, 0000, 0, 0000, 0, 0000, 0), // Namazu lean + new Group(5040, 1, 6023, 1, 0000, 0, 0000, 0, 0000, 0), // Namazu chonk + new Group(6182, 1, 6182, 1, 0000, 0, 0000, 0, 0000, 0), // Imp + new Group(6147, 1, 6147, 1, 6147, 1, 6147, 1, 6147, 1) // Tonberry ); private FunEquipSet(params Group[] groups) diff --git a/Glamourer/State/FunModule.cs b/Glamourer/State/FunModule.cs index 14fc65a..7ddc42f 100644 --- a/Glamourer/State/FunModule.cs +++ b/Glamourer/State/FunModule.cs @@ -116,6 +116,7 @@ public unsafe class FunModule : IDisposable SetRandomItem(slot, ref armor); break; case CodeService.CodeFlag.Elephants: + case CodeService.CodeFlag.Dolphins: case CodeService.CodeFlag.World when actor.Index != 0: KeepOldArmor(actor, slot, ref armor); break; @@ -168,6 +169,10 @@ public unsafe class FunModule : IDisposable SetElephant(EquipSlot.Body, ref armor[1], stainId); SetElephant(EquipSlot.Head, ref armor[0], stainId); break; + case CodeService.CodeFlag.Dolphins: + SetDolphin(EquipSlot.Body, ref armor[1]); + SetDolphin(EquipSlot.Head, ref armor[0]); + break; case CodeService.CodeFlag.World when actor.Index != 0: _worldSets.Apply(actor, _rng, armor); break; @@ -227,6 +232,32 @@ public unsafe class FunModule : IDisposable 7, // Rose Pink ]; + private static IReadOnlyList DolphinBodies + => + [ + new CharacterArmor(6089, 1, 4), // Toad + new CharacterArmor(6089, 1, 4), // Toad + new CharacterArmor(6089, 1, 4), // Toad + new CharacterArmor(6023, 1, 4), // Swine + new CharacterArmor(6023, 1, 4), // Swine + new CharacterArmor(6023, 1, 4), // Swine + new CharacterArmor(6133, 1, 4), // Gaja + new CharacterArmor(6182, 1, 3), // Imp + new CharacterArmor(6182, 1, 3), // Imp + new CharacterArmor(6182, 1, 4), // Imp + new CharacterArmor(6182, 1, 4), // Imp + ]; + + private void SetDolphin(EquipSlot slot, ref CharacterArmor armor) + { + armor = slot switch + { + EquipSlot.Body => DolphinBodies[_rng.Next(0, DolphinBodies.Count - 1)], + EquipSlot.Head => new CharacterArmor(5040, 1, 0), + _ => armor, + }; + } + private void SetElephant(EquipSlot slot, ref CharacterArmor armor, StainId stainId) { armor = slot switch