Ejemplo n.º 1
0
        public override void Press(int cell, Character ch)
        {
            base.Press(cell, ch);

            if (ch != Dungeon.Hero || _enteredArena || !RoomExit.Inside(cell))
            {
                return;
            }

            _enteredArena = true;

            int pos;

            do
            {
                pos = RoomExit.Random();
            }while (pos == cell || Actor.FindChar(pos) != null);

            var boss = Bestiary.Mob(Dungeon.Depth);

            boss.State = boss.HUNTING;
            boss.pos   = pos;
            GameScene.Add(boss);
            boss.Notice();

            MobPress(boss);

            Set(_arenaDoor, Terrain.LOCKED_DOOR);
            GameScene.UpdateMap(_arenaDoor);
            Dungeon.Observe();
        }
Ejemplo n.º 2
0
        public override void Press(int cell, Character hero)
        {
            base.Press(cell, hero);

            if (enteredArena || !OutsideEntraceRoom(cell) || hero != Dungeon.Hero)
            {
                return;
            }

            enteredArena = true;

            var boss = Bestiary.Mob(Dungeon.Depth);

            boss.State = boss.HUNTING;
            do
            {
                boss.pos = pdsharp.utils.Random.Int(Length);
            }while (!passable[boss.pos] || !OutsideEntraceRoom(boss.pos) || Dungeon.Visible[boss.pos]);

            GameScene.Add(boss);

            Set(arenaDoor, Terrain.LOCKED_DOOR);
            GameScene.UpdateMap(arenaDoor);
            Dungeon.Observe();
        }
Ejemplo n.º 3
0
        protected internal override void CreateMobs()
        {
            var mob = Bestiary.Mob(Dungeon.Depth);

            mob.pos = RoomExit.Random();
            mobs.Add(mob);
        }
Ejemplo n.º 4
0
        public override void Press(int cell, Character hero)
        {
            base.Press(cell, hero);

            if (enteredArena || !outsideEntraceRoom(cell) || hero != Dungeon.Hero)
            {
                return;
            }

            enteredArena = true;

            var boss = Bestiary.Mob(Dungeon.Depth);

            boss.State = boss.HUNTING;
            do
            {
                boss.pos = Random.Int(Length);
            }while (!passable[boss.pos] || !outsideEntraceRoom(boss.pos) || Dungeon.Visible[boss.pos]);

            GameScene.Add(boss);

            Set(arenaDoor, Terrain.WALL);
            GameScene.UpdateMap(arenaDoor);
            Dungeon.Observe();

            CellEmitter.Get(arenaDoor).Start(Speck.Factory(Speck.ROCK), 0.07f, 10);
            Camera.Main.Shake(3, 0.7f);
            Sample.Instance.Play(Assets.SND_ROCKS);
        }
Ejemplo n.º 5
0
        private static readonly Mob Dummy; // = new Mob();

        // 0x770088
        public static void Trigger(int pos, Character c)
        {
            if (Dungeon.BossLevel())
            {
                return;
            }

            if (c != null)
            {
                Actor.OccupyCell(c);
            }

            var nMobs = 1;

            if (Random.Int(2) == 0)
            {
                nMobs++;
                if (Random.Int(2) == 0)
                {
                    nMobs++;
                }
            }

            // It's complicated here, because these traps can be activated in chain
            var candidates = new List <int>();

            foreach (var neighbour in Level.NEIGHBOURS8)
            {
                var p = pos + neighbour;
                if (Actor.FindChar(p) == null && (Level.passable[p] || Level.avoid[p]))
                {
                    candidates.Add(p);
                }
            }

            var respawnPoints = new List <int>();

            while (nMobs > 0 && candidates.Count > 0)
            {
                var index = Random.Index(candidates);

                Dummy.pos = candidates[index];
                Actor.OccupyCell(Dummy);

                var cand = candidates[index];
                candidates.RemoveAt(index);
                respawnPoints.Add(cand);

                nMobs--;
            }

            foreach (var point in respawnPoints)
            {
                var mob = Bestiary.Mob(Dungeon.Depth);
                mob.State = mob.WANDERING;
                GameScene.Add(mob, Delay);
                WandOfBlink.Appear(mob, point);
            }
        }
Ejemplo n.º 6
0
        protected internal override void CreateMobs()
        {
#if DEBUG
            return;
#endif

            var nMobs = NMobs();
            for (var i = 0; i < nMobs; i++)
            {
                var mob = Bestiary.Mob(Dungeon.Depth);

                do
                {
                    mob.pos = RandomRespawnCell();
                }while (mob.pos == -1);

                mobs.Add(mob);
                Actor.OccupyCell(mob);
            }
        }