Exemple #1
0
        /// <summary>
        /// Returns color index for specified item parameter. (MATERIAL for ex)
        /// </summary>
        private static int GetItemColorSlot(ModifierDb.Mod mod, string name)
        {
            // Get string pointer (aka color name)
            FieldInfo colptr  = typeof(ModifierDb.Mod).GetField(name);
            string    colname = (string)colptr.GetValue(mod);

            if (colname == null)
            {
                return(-1);
            }
            // Fetch digit on the end of the string (COLOR#)
            return(int.Parse(colname.Substring(colname.Length - 1)) - 1);
        }
Exemple #2
0
        /// <summary>
        /// Responsible for drawing complex object such as NPCs
        /// </summary>
        private Bitmap GetObjectImageSpecial(Map.Object obj, ThingDb.Thing tt, bool shadow = false)
        {
            Bitmap result = null;
            int    index = -1, monsterSprite = 0;

            int[]    icols; Color[] ncols;
            Sequence playerSeq = null;

            // Get monster sprite from direction
            if (tt.SpriteStates.Count > 0 && tt.Xfer == "MonsterXfer")
            {
                int framesPerDir = tt.SpriteStates[0].Animation.Frames.Count / 8;
                monsterSprite = framesPerDir * MonsterXfer.NOX_DIRECT_ANIM[obj.GetExtraData <MonsterXfer>().DirectionId];;
            }
            // Get NPC sprite from direction
            if (tt.Xfer == "NPCXfer")
            {
                playerSeq = FindPlayerSequence("IDLE", "NAKED");

                if (playerSeq != null)
                {
                    int framesPerDir = playerSeq.Frames.Length / 8;
                    monsterSprite = framesPerDir * MonsterXfer.NOX_DIRECT_ANIM[obj.GetExtraData <NPCXfer>().DirectionId];;
                }
            }
            switch (tt.DrawType)
            {
            case "MonsterDraw":
                index  = tt.SpriteStates[0].Animation.Frames[monsterSprite];
                result = mapRenderer.VideoBag.GetBitmap(index);
                break;

            case "MaidenDraw":
                index = tt.SpriteStates[0].Animation.Frames[monsterSprite];

                // Convert colors
                ncols = obj.GetExtraData <MonsterXfer>().MaidenBodyColors;
                icols = new int[6];
                for (int i = 0; i < 6; i++)
                {
                    icols[i] = ncols[i].ToArgb();
                }
                // Get dyncolor
                result = mapRenderer.VideoBag.GetBitmapDynamic(index, icols);
                break;

            case "NPCDraw":
                index = playerSeq.Frames[monsterSprite];
                if (shadow)
                {
                    result = mapRenderer.VideoBag.GetBitmap(index);
                    break;
                }
                // Convert colors
                ncols = obj.GetExtraData <NPCXfer>().NPCColors;
                icols = new int[6];
                for (int i = 0; i < 6; i++)
                {
                    icols[i] = ncols[i].ToArgb();
                }
                // Get dyncolor
                result = mapRenderer.VideoBag.GetBitmapDynamic(index, icols);
                break;

            case "ArmorDraw":
            case "WeaponDraw":
                if (ModifierDb.Mods.ContainsKey(tt.Name) && tt.SpriteAnimFrames.Count > 0 && !shadow)
                {
                    ModifierDb.Mod mod = ModifierDb.Mods[tt.Name];
                    // build color array
                    icols = new int[] {
                        mod.COLOR1.ToArgb(),
                            mod.COLOR2.ToArgb(),
                            mod.COLOR3.ToArgb(),
                            mod.COLOR4.ToArgb(),
                            mod.COLOR5.ToArgb(),
                            mod.COLOR6.ToArgb(),
                    };

                    // retrieve enchantments
                    string[] enchs = null;
                    switch (tt.Xfer)
                    {
                    case "ArmorXfer":
                        enchs = obj.GetExtraData <ArmorXfer>().Enchantments;
                        break;

                    case "AmmoXfer":
                        enchs = obj.GetExtraData <AmmoXfer>().Enchantments;
                        break;

                    case "WeaponXfer":
                        enchs = obj.GetExtraData <WeaponXfer>().Enchantments;
                        break;
                    }
                    // replace enchantment colors
                    if (enchs != null)
                    {
                        // find color slots (-1 = none)
                        int[] eslot = { GetItemColorSlot(mod, "EFFECTIVENESS"),
                                        GetItemColorSlot(mod, "MATERIAL"),
                                        GetItemColorSlot(mod, "PRIMARYENCHANTMENT"),
                                        GetItemColorSlot(mod, "SECONDARYENCHANTMENT") };

                        // DO IT
                        for (int i = 0; i < 4; i++)
                        {
                            int    slot = eslot[i];
                            string name = enchs[i];
                            if (ModifierDb.Mods.ContainsKey(name) && slot >= 0)
                            {
                                icols[slot] = ModifierDb.Mods[name].COLOR.ToArgb();
                            }
                        }
                    }

                    // Get dyncolor
                    index  = tt.SpriteAnimFrames[0];
                    result = mapRenderer.VideoBag.GetBitmapDynamic(index, icols);
                }
                else
                {
                    index = tt.SpriteMenuIcon;
                    //index = tt.SpritePrettyImage;
                    result = mapRenderer.VideoBag.GetBitmap(index);
                }
                break;
            }

            if (index >= 0)
            {
                drawOffsetX = mapRenderer.VideoBag.DrawOffsets[index][0];
                drawOffsetY = mapRenderer.VideoBag.DrawOffsets[index][1];
            }
            return(result);
        }