Пример #1
0
        public void bash_attack(Floor fl, Monster m, gridCoordinate target_coord, Doodad d, Weapon wp)
        {
            bool rolled_max = false;
            int xdif = 0;
            int ydif = 0;
            if (m != null)
            {
                xdif = target_coord.x - my_grid_coord.x;
                ydif = target_coord.y - my_grid_coord.y;
            }
            else
            {
                xdif = d.get_g_coord().x - my_grid_coord.x;
                ydif = d.get_g_coord().y - my_grid_coord.y;
            }

            double multiplier = 1.4;
            if (wp.get_hand_count() == 2)
                multiplier = 1.6;

            int m_hp = 0;
            if(m!= null)
                m_hp = m.hitPoints;

            gridCoordinate opposition_coord = new gridCoordinate(-1, -1);
            if(m != null)
                opposition_coord = target_coord;
            else
                opposition_coord = d.get_g_coord();

            fl.add_effect(wp.get_my_damage_type(), opposition_coord);
            if (m != null)
                attack_monster_in_grid(fl, wp, m.my_Index, target_coord, multiplier, out rolled_max);
            else
                attack_Doodad_in_grid(fl, wp, d.get_my_index(), d.get_g_coord(), multiplier, out rolled_max);

            if (m!= null && m.hitPoints > 0 && m_hp > m.hitPoints)
            {
                if(!m.shove(xdif, ydif, this, fl))
                {
                    fl.add_effect(wp.get_my_damage_type(), target_coord);
                    attack_monster_in_grid(fl, wp, m.my_Index, target_coord, 0.5, out rolled_max);
                }
            }
            wp.set_cooldown(standard_wpn_cooldown);

            if (my_class == Chara_Class.Warrior)
            {
                c_energy += 5 + rGen.Next(2);
                if (rolled_max)
                    c_energy++;
            }
        }
Пример #2
0
        public void whirlwind_attack(Floor fl, Weapon target_weapon)
        {
            bool rolled_max = false;

            List<gridCoordinate> target_coordinates = new List<gridCoordinate>();
            for (int x = my_grid_coord.x - 1; x <= my_grid_coord.x + 1; x++)
                for (int y = my_grid_coord.y - 1; y <= my_grid_coord.y + 1; y++)
                    if(!(x== my_grid_coord.x && y== my_grid_coord.y))
                        target_coordinates.Add(new gridCoordinate(x, y));

            int monster_ID = -1;
            int Doodad_ID = -1;
            for (int i = 0; i < target_coordinates.Count; i++)
            {
                double multiplier = 1.3;
                if (target_weapon.get_hand_count() == 2)
                    multiplier = 1.6;

                if (fl.is_monster_here(target_coordinates[i], out monster_ID))
                    attack_monster_in_grid(fl, target_weapon, monster_ID, target_coordinates[i], multiplier, out rolled_max);

                if (fl.is_destroyable_Doodad_here(target_coordinates[i], out Doodad_ID))
                    attack_Doodad_in_grid(fl, target_weapon, Doodad_ID, target_coordinates[i], multiplier, out rolled_max);

                if (fl.isWalkable(target_coordinates[i]))
                    fl.add_effect(target_weapon.get_my_damage_type(), target_coordinates[i]);
            }
            target_weapon.set_cooldown(standard_wpn_cooldown);

            if (my_class == Chara_Class.Warrior)
            {
                c_energy += 5 + rGen.Next(2);
                if (rolled_max)
                    c_energy++;
            }
        }