Exemple #1
0
        // Trigger Event: BeginShake, Break Apart, Reform
        public override bool TriggerEvent(RoomScene room, short gridX, short gridY, short triggerType = 0, short val2 = 0)
        {
            // Break Apart Event
            if (triggerType == (byte)LeafTriggerEvent.BreakApart)
            {
                byte subType = room.tilemap.GetMainSubType(gridX, gridY);

                // Display Leaf Breaking
                ExplodeEmitter.BoxExplosion(room, "Particles/Leaf", gridX * (byte)TilemapEnum.TileWidth + (byte)TilemapEnum.HalfWidth, gridY * (byte)TilemapEnum.TileHeight + (byte)TilemapEnum.HalfHeight);

                // Reforming Leafs will be reformed.
                if (subType == (byte)LeafSubType.InvisibleReform || subType == (byte)LeafSubType.Reform || subType == (byte)LeafSubType.UntouchableReform)
                {
                    room.tilemap.SetTileSubType(gridX, gridY, (byte)LeafSubType.UntouchableReform);
                    room.queueEvents.AddEvent(Systems.timer.Frame + 60, this.tileId, gridX, gridY, (byte)LeafTriggerEvent.Reform);
                }

                // Basic Leaf gets destroyed.
                else
                {
                    room.tilemap.SetMainTile(gridX, gridY, 0, 0);
                }

                room.PlaySound(Systems.sounds.thudTap, 1f, gridX * (byte)TilemapEnum.TileWidth, gridY * (byte)TilemapEnum.TileHeight);
            }

            // Reform Event
            else if (triggerType == (byte)LeafTriggerEvent.Reform)
            {
                room.tilemap.SetTileSubType(gridX, gridY, (byte)LeafSubType.Reform);
            }

            return(true);
        }
Exemple #2
0
        public void DestroyBox(RoomScene room, short gridX, short gridY)
        {
            // Display Particle Effect
            ExplodeEmitter.BoxExplosion(room, "Particles/WoodFrag", gridX * (byte)TilemapEnum.TileWidth + (byte)TilemapEnum.HalfWidth, gridY * (byte)TilemapEnum.TileHeight + (byte)TilemapEnum.HalfHeight);
            room.PlaySound(Systems.sounds.brickBreak, 1f, gridX * (byte)TilemapEnum.TileWidth, gridY * (byte)TilemapEnum.TileHeight);

            // Destroy Brick Tile
            room.tilemap.SetMainTile(gridX, gridY, 0, 0);
        }
Exemple #3
0
        public void DestroyBrick(RoomScene room, short gridX, short gridY)
        {
            // Display Particle Effect
            byte subType = room.tilemap.GetMainSubType(gridX, gridY);

            ExplodeEmitter.BoxExplosion(room, "Particles/Brick" + (subType == (byte)BrickSubType.Gray ? "Gray" : ""), gridX * (byte)TilemapEnum.TileWidth + (byte)TilemapEnum.HalfWidth, gridY * (byte)TilemapEnum.TileHeight + (byte)TilemapEnum.HalfHeight);
            room.PlaySound(Systems.sounds.brickBreak, 1f, gridX * (byte)TilemapEnum.TileWidth, gridY * (byte)TilemapEnum.TileHeight);

            // Destroy Brick Tile
            room.tilemap.SetMainTile(gridX, gridY, 0, 0);
        }
Exemple #4
0
        public override bool ReceiveWound()
        {
            this.room.PlaySound(Systems.sounds.crack, 1f, this.posX + 16, this.posY + 16);
            this.Destroy();             // Can automatically destroy Bones, since it just disappears while bones are left behind.
            //this.Die(DeathResult.Special);

            // Particle Effect (bones exploding)
            ExplodeEmitter.BoxExplosion(this.room, "Particles/Bone", this.posX + (byte)TilemapEnum.HalfWidth, this.posY + (byte)TilemapEnum.HalfHeight);

            return(true);
        }
Exemple #5
0
        public static void Detonate(RoomScene room, int midX, int midY)
        {
            TilemapLevel tilemap = room.tilemap;

            int gridX = (int)Math.Floor((double)(midX / (byte)TilemapEnum.TileWidth));
            int gridY = (int)Math.Floor((double)(midY / (byte)TilemapEnum.TileHeight));

            // Destroy Enemies Within Area of Effect
            List <GameObject> enemiesFound = CollideRect.FindAllObjectsTouchingArea(room.objects[(byte)LoadOrder.Enemy], midX - 144, midY - 96, 288, 192);

            foreach (GameObject enemy in enemiesFound)
            {
                ((Enemy)enemy).Die(DeathResult.Knockout);
            }

            // Heavily Damage Characters Within Area of Effect
            List <GameObject> charsFound = CollideRect.FindAllObjectsTouchingArea(room.objects[(byte)LoadOrder.Character], midX - 144, midY - 96, 288, 192);

            foreach (GameObject character in charsFound)
            {
                ((Character)character).wounds.ReceiveWoundDamage(DamageStrength.Major, true);
                ((Character)character).wounds.ReceiveWoundDamage(DamageStrength.Major, true);
                ((Character)character).wounds.ReceiveWoundDamage(DamageStrength.Major, true);
            }

            // Destroy Certain Tiles Within Area of Effect
            short startX = (short)Math.Max(0, gridX - 3);
            short startY = (short)Math.Max(0, gridY - 2);
            short endX   = (short)Math.Min(tilemap.XCount + (byte)TilemapEnum.GapLeft - 1, gridX + 3);
            short endY   = (short)Math.Min(tilemap.YCount + (byte)TilemapEnum.GapUp - 1, gridY + 2);

            // Locate Tiles: Chompers, Boxes, Bricks, Leafs, etc.
            var tilesFound = tilemap.GetTilesByMainIDsWithinArea(new byte[7] {
                (byte)TileEnum.ChomperFire, (byte)TileEnum.ChomperGrass, (byte)TileEnum.ChomperMetal, (byte)TileEnum.Plant, (byte)TileEnum.Box, (byte)TileEnum.Brick, (byte)TileEnum.Leaf
            }, startX, startY, endX, endY);

            var TileDict = Systems.mapper.TileDict;

            foreach (var tileInfo in tilesFound)
            {
                TileObject tile = TileDict[tileInfo.tileId];

                if (tile is Chomper)
                {
                    ((Chomper)tile).DestroyChomper(room, tileInfo.gridX, tileInfo.gridY);
                }
                else if (tile is Brick)
                {
                    ((Brick)tile).DestroyBrick(room, tileInfo.gridX, tileInfo.gridY);
                }
                else if (tile is Box)
                {
                    ((Box)tile).DestroyBox(room, tileInfo.gridX, tileInfo.gridY);
                }
                else if (tile is Leaf)
                {
                    ((Leaf)tile).TriggerEvent(room, tileInfo.gridX, tileInfo.gridY, 0);
                }
            }

            // Display Particle Effect
            ExplodeEmitter.BoxExplosion(room, "Particles/GrenadeFrag", midX, midY, 20, 15);
            ExplodeEmitter.BoxExplosion(room, "Particles/GrenadeFrag", midX, midY, 70, 50);

            room.PlaySound(Systems.sounds.explosion, 0.4f, midX, midY);

            // Camera Shake
            Systems.camera.BeginCameraShake(35, 6);
        }