Ejemplo n.º 1
0
    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));
    }
Ejemplo n.º 2
0
 public static void ApplyEnlarge(ref MetaMagicData metaMagicData)
 {
     // Don't enlarge more than once
     if (metaMagicData.metaMagicEnlargeSpellCount < 1)
     {
         metaMagicData.metaMagicEnlargeSpellCount = 1;
     }
 }
Ejemplo n.º 3
0
 private static void ApplyExtend(ref MetaMagicData metaMagicData)
 {
     // Don't Extend more than once
     if (metaMagicData.metaMagicExtendSpellCount < 1)
     {
         metaMagicData.metaMagicExtendSpellCount = 1;
     }
 }
Ejemplo n.º 4
0
 private static void ApplyEmpower(ref MetaMagicData metaMagicData)
 {
     // Don't Empower more than once
     if (metaMagicData.metaMagicEmpowerSpellCount < 1)
     {
         metaMagicData.metaMagicEmpowerSpellCount = 1;
     }
 }
Ejemplo n.º 5
0
 // 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;
     }
 }
Ejemplo n.º 6
0
 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);
    }
Ejemplo n.º 8
0
 private static void ApplySilent(ref MetaMagicData metaMagicData)
 {
     metaMagicData.IsSilent = true;
 }
Ejemplo n.º 9
0
 public D20SpellData(int spellEnumOrg, int spellClassCode, int spellSlotLevel, int itemSpellData = -1,
                     MetaMagicData metaMagicData = default, SpontCastType spontCastType = default)
 {
     SetSpellData(spellEnumOrg, spellClassCode, spellSlotLevel, itemSpellData, metaMagicData, spontCastType);
 }
Ejemplo n.º 10
0
 private static void ApplyMaximize(ref MetaMagicData metaMagicData)
 {
     // Don't Maximize more than once
     metaMagicData.IsMaximize = true;
 }
Ejemplo n.º 11
0
 // Sudden Still:  Complete Arcane, p. 83
 private static void ApplyStill(ref MetaMagicData metaMagicData)
 {
     metaMagicData.IsStill = true;
 }
Ejemplo n.º 12
0
 private static void ApplyQuicken(ref MetaMagicData metaMagicData)
 {
     metaMagicData.IsQuicken = true;
 }