Improve festivals and add dolphins.

This commit is contained in:
Ottermandias 2024-02-05 16:21:21 +01:00
parent 1fefe7366c
commit 42ac507b86
3 changed files with 48 additions and 5 deletions

View file

@ -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 ],
_ => [],
};
}

View file

@ -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)

View file

@ -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<CharacterArmor> 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