internal static D20SpellData ReadSpellData(BinaryReader reader) { // The rest is mostly packed in 4-bit numbers Span <byte> packedSpellData = stackalloc byte[8]; reader.Read(packedSpellData); var spellEnum = BitConverter.ToInt16(packedSpellData); // The upper 8-bit of the spell enum will bleed into the metamagic data, // but since the unpack function will only consider the lower 24-bit, this doesn't matter var metaMagicPacked = BitConverter.ToUInt32(packedSpellData.Slice(1)); var classCode = packedSpellData[5]; var inventoryIndex = -1; if (packedSpellData[6] != 0xFF) { inventoryIndex = packedSpellData[6]; } var spontCastType = (packedSpellData[7] >> 4) & 0xF; var spellLevel = packedSpellData[7] & 0xF; return(new D20SpellData(spellEnum, classCode, spellLevel, inventoryIndex, MetaMagicData.Unpack(metaMagicPacked), (SpontCastType)spontCastType)); }
public static void ApplyEnlarge(ref MetaMagicData metaMagicData) { // Don't enlarge more than once if (metaMagicData.metaMagicEnlargeSpellCount < 1) { metaMagicData.metaMagicEnlargeSpellCount = 1; } }
private static void ApplyExtend(ref MetaMagicData metaMagicData) { // Don't Extend more than once if (metaMagicData.metaMagicExtendSpellCount < 1) { metaMagicData.metaMagicExtendSpellCount = 1; } }
private static void ApplyEmpower(ref MetaMagicData metaMagicData) { // Don't Empower more than once if (metaMagicData.metaMagicEmpowerSpellCount < 1) { metaMagicData.metaMagicEmpowerSpellCount = 1; } }
// Sudden Widen: Complete Arcane, p. 83 private static void ApplyWiden(ref MetaMagicData metaMagicData) { // Don't widen more than once if (metaMagicData.metaMagicWidenSpellCount < 1) { metaMagicData.metaMagicWidenSpellCount = 1; } }
public void SetSpellData(int spellEnumOrg, int spellClassCode, int spellSlotLevel, int itemSpellData = -1, MetaMagicData metaMagicData = default, SpontCastType spontCastType = default) { this.metaMagicData = metaMagicData; this.spellEnumOrg = spellEnumOrg; this.spellClassCode = spellClassCode; this.itemSpellData = itemSpellData; this.spontCastType = spontCastType; this.spellSlotLevel = spellSlotLevel; }
public static MetaMagicData DispatchMetaMagicModify(this GameObject critter, MetaMagicData data) { var dispatcher = critter.GetDispatcher(); if (dispatcher == null) { return(data); } var dispIo = EvtObjMetaMagic.Default; dispIo.mmData = data; dispatcher.Process(DispatcherType.MetaMagicMod, D20DispatcherKey.NONE, dispIo); return(dispIo.mmData); }
private static void ApplySilent(ref MetaMagicData metaMagicData) { metaMagicData.IsSilent = true; }
public D20SpellData(int spellEnumOrg, int spellClassCode, int spellSlotLevel, int itemSpellData = -1, MetaMagicData metaMagicData = default, SpontCastType spontCastType = default) { SetSpellData(spellEnumOrg, spellClassCode, spellSlotLevel, itemSpellData, metaMagicData, spontCastType); }
private static void ApplyMaximize(ref MetaMagicData metaMagicData) { // Don't Maximize more than once metaMagicData.IsMaximize = true; }
// Sudden Still: Complete Arcane, p. 83 private static void ApplyStill(ref MetaMagicData metaMagicData) { metaMagicData.IsStill = true; }
private static void ApplyQuicken(ref MetaMagicData metaMagicData) { metaMagicData.IsQuicken = true; }