public override void Init(StoC_0x81_ShowDialog pak)
            {
                questName  = pak.ReadPascalString();                // 0x0c
                questDesc  = pak.ReadPascalString();
                dialogLen  = pak.ReadShort();
                message    = pak.ReadString(dialogLen);
                questID    = pak.ReadShort();
                goalsCount = pak.ReadByte();
                goals      = new string[goalsCount];
                for (int i = 0; i < goalsCount; i++)
                {
#if SKIP_CR_IN_DESCRIPTION
                    questLevel = pak.ReadByte();                 // temporary used
                    goals[i]   = pak.ReadString(questLevel - 1); // 0x0A on end string
                    pak.Skip(1);                                 // skip 0x0A on end string
#else
                    goals[i] = pak.ReadPascalString();
#endif
                }

                moneyReward      = pak.ReadInt();
                rewardExp        = pak.ReadByte();
                baseRewardsCount = pak.ReadByte();
                baseRewards      = new StoC_0x02_InventoryUpdate.Item[baseRewardsCount];
                for (int i = 0; i < baseRewardsCount; i++)
                {
                    StoC_0x02_InventoryUpdate.Item item = new StoC_0x02_InventoryUpdate.Item();
                    item.itemID = pak.ReadShort();
                    item.level  = pak.ReadByte();

                    item.value1 = pak.ReadByte();
                    item.value2 = pak.ReadByte();

                    item.hand = pak.ReadByte();
                    byte temp = pak.ReadByte();                     //WriteByte((byte) ((item.Type_Damage*64) + item.Object_Type));
                    item.damageType  = (byte)(temp >> 6);
                    item.objectType  = (byte)(temp & 0x3F);
                    item.unk1_1112   = pak.ReadByte();
                    item.weight      = pak.ReadShort();
                    item.condition   = pak.ReadByte();
                    item.durability  = pak.ReadByte();
                    item.quality     = pak.ReadByte();
                    item.bonus       = pak.ReadByte();
                    item.bonus_level = pak.ReadByte();
                    item.model       = pak.ReadShort();
                    item.extension   = pak.ReadByte();
                    item.color       = pak.ReadShort();
                    item.flag        = pak.ReadByte();
                    if ((item.flag & 0x08) == 0x08)
                    {
                        item.effectIcon = pak.ReadShort();
                        item.effectName = pak.ReadPascalString();
                    }
                    if ((item.flag & 0x10) == 0x10)
                    {
                        item.effectIcon2 = pak.ReadShort();
                        item.effectName2 = pak.ReadPascalString();
                    }
                    item.effect    = pak.ReadByte();
                    item.name      = pak.ReadPascalString();
                    baseRewards[i] = item;
                }
                optionalRewardsChoiceMax = pak.ReadByte();
                optionalRewardsCount     = pak.ReadByte();
                optionalRewards          = new StoC_0x02_InventoryUpdate.Item[optionalRewardsCount];
                for (int i = 0; i < optionalRewardsCount; i++)
                {
                    StoC_0x02_InventoryUpdate.Item item = new StoC_0x02_InventoryUpdate.Item();
                    item.itemID = pak.ReadShort();
                    item.level  = pak.ReadByte();

                    item.value1 = pak.ReadByte();
                    item.value2 = pak.ReadByte();

                    item.hand = pak.ReadByte();
                    byte temp = pak.ReadByte();                     //WriteByte((byte) ((item.Type_Damage*64) + item.Object_Type));
                    item.damageType  = (byte)(temp >> 6);
                    item.objectType  = (byte)(temp & 0x3F);
                    item.unk1_1112   = pak.ReadByte();
                    item.weight      = pak.ReadShort();
                    item.condition   = pak.ReadByte();
                    item.durability  = pak.ReadByte();
                    item.quality     = pak.ReadByte();
                    item.bonus       = pak.ReadByte();
                    item.bonus_level = pak.ReadByte();
                    item.model       = pak.ReadShort();
                    item.extension   = pak.ReadByte();
                    item.color       = pak.ReadShort();
                    item.flag        = pak.ReadByte();
                    if ((item.flag & 0x08) == 0x08)
                    {
                        item.effectIcon = pak.ReadShort();
                        item.effectName = pak.ReadPascalString();
                    }
                    if ((item.flag & 0x10) == 0x10)
                    {
                        item.effectIcon2 = pak.ReadShort();
                        item.effectName2 = pak.ReadPascalString();
                    }
                    item.effect        = pak.ReadByte();
                    item.name          = pak.ReadPascalString();
                    optionalRewards[i] = item;
                }
            }