コード例 #1
0
        private void UpdateFOVTilemap()
        {
            var unexploredColor = ((RetroDungeoneerGame)RB.Game).map.unexploredColor;
            var exploredColor   = unexploredColor;

            exploredColor.a = 200;

            for (int x = 0; x < size.width; x++)
            {
                for (int y = 0; y < size.height; y++)
                {
                    var currentFOVTile = fov[x, y];

                    if (currentFOVTile.visible)
                    {
                        RB.MapSpriteSet(C.LAYER_VISIBILITY, new Vector2i(x, y), RB.SPRITE_EMPTY);
                    }
                    else
                    {
                        if (currentFOVTile.explored)
                        {
                            RB.MapSpriteSet(C.LAYER_VISIBILITY, new Vector2i(x, y), S.FOG, exploredColor);
                        }
                        else
                        {
                            RB.MapSpriteSet(C.LAYER_VISIBILITY, new Vector2i(x, y), S.FOG, unexploredColor);
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: Level.cs プロジェクト: svwilke/Spellzee
        /// <summary>
        /// Create the background pattern using random background tiles, and wall frame tiles
        /// </summary>
        private void MakeBackground()
        {
            Vector2i topLeft    = new Vector2i(0, 2);
            Vector2i topRight   = new Vector2i(RB.DisplaySize.width / RB.SpriteSize(0).width, 2);
            Vector2i bottomLeft = new Vector2i(0, RB.DisplaySize.height / RB.SpriteSize(0).height);

            // Background
            for (int x = topLeft.x; x <= topRight.x; x++)
            {
                for (int y = topLeft.y + 1; y <= bottomLeft.y; y++)
                {
                    RB.MapSpriteSet(0, new Vector2i(x, y), RB.SpriteIndex(UnityEngine.Random.Range(0, 4), 3));
                }
            }

            // Frame
            // Horizontal
            for (int x = topLeft.x + 1; x < topRight.x; x++)
            {
                RB.MapSpriteSet(1, new Vector2i(x, topLeft.y), RB.SpriteIndex(4, 3), RB.ROT_90_CW);
            }

            // Vertical
            for (int y = topLeft.y + 1; y <= bottomLeft.y; y++)
            {
                RB.MapSpriteSet(1, new Vector2i(topLeft.x, y), RB.SpriteIndex(4, 3));
                RB.MapSpriteSet(1, new Vector2i(topRight.x, y), RB.SpriteIndex(4, 3));
            }

            // Corners
            RB.MapSpriteSet(1, topLeft, RB.SpriteIndex(6, 3));
            RB.MapSpriteSet(1, topRight, RB.SpriteIndex(6, 3), RB.FLIP_H);
        }
コード例 #3
0
        private void SetTile(int layer, Vector2i pos, Tile tile, Color color)
        {
            if (layer == C.LAYER_TERRAIN)
            {
                terrain[pos.x, pos.y] = tile;
            }

            if (tile.sprite.id != PackedSpriteID.empty.id)
            {
                RB.MapSpriteSet(layer, pos, tile.sprite, color);
            }
            else
            {
                RB.MapSpriteSet(layer, pos, RB.SPRITE_EMPTY);
            }
        }
コード例 #4
0
        /// <summary>
        /// Initialize your game here.
        /// </summary>
        /// <returns>Return true if successful</returns>
        public bool Initialize()
        {
            assets.LoadAll();

            // You can load a spritesheet here
            RB.SpriteSheetSet(assets.spriteSheet);

            RB.EffectSet(RB.Effect.Scanlines, 0.5f);

            EntityFunctions.Initialize();
            S.InitializeAnims();

            SoundSerializer.Initialize();

            InitializeNewGame.InitializeConstants();

            RenderFunctions.Initialize();

            mSceneGame     = new SceneGame();
            mSceneMainMenu = new SceneMainMenu();
            mSceneMessage  = new SceneMessage();

            // Generate tile grid, this is a one time operation, we can keep reusing the grid
            var gridColor = Color.white;

            for (int x = 0; x < RB.MapSize.width; x++)
            {
                for (int y = 0; y < RB.MapSize.height; y++)
                {
                    RB.MapSpriteSet(C.LAYER_GRID, new Vector2i(x, y), S.GRID, gridColor);
                }
            }

            ChangeScene(SceneEnum.MAIN_MENU);

            RB.MapLayerSpriteSheetSet(C.LAYER_GRID, assets.spriteSheet);
            RB.MapLayerSpriteSheetSet(C.LAYER_TERRAIN, assets.spriteSheet);
            RB.MapLayerSpriteSheetSet(C.LAYER_VISIBILITY, assets.spriteSheet);

            // Collect any garbage created during initilization to avoid a performance hiccup later.
            System.GC.Collect();

            return(true);
        }
コード例 #5
0
        /// <summary>
        /// Refresh the RetroBlit tilemap from our current terrain state
        /// </summary>
        public void RefreshTilemap()
        {
            for (int x = 0; x < size.width; x++)
            {
                for (int y = 0; y < size.height; y++)
                {
                    var tile = terrain[x, y];

                    if (tile.sprite.id != PackedSpriteID.empty.id)
                    {
                        RB.MapSpriteSet(C.LAYER_TERRAIN, new Vector2i(x, y), tile.sprite, tile.color);
                    }
                    else
                    {
                        RB.MapSpriteSet(C.LAYER_TERRAIN, new Vector2i(x, y), RB.SPRITE_EMPTY);
                    }
                }
            }

            UpdateFOVTilemap();
        }
コード例 #6
0
        private void DrawSetTile(int x, int y)
        {
            var demo = (DemoReel)RB.Game;

            int      flags     = Random.Range(0, 2) == 0 ? 0 : RB.FLIP_V;
            Rect2i   clipRect  = new Rect2i(x + 16, y + 82, 250, 268);
            Vector2i cameraPos = new Vector2i((int)(Mathf.Sin(RB.Ticks / 50.0f) * 128) + 128, (int)(Mathf.Sin(RB.Ticks / 10.0f) * 16) + 16);
            string   flagsStr  = string.Empty;

            if (flags != 0)
            {
                flagsStr = ", @[email protected]_V";
            }

            RB.MapSpriteSet(0, new Vector2i(Random.Range(0, 38), Random.Range(0, 26)), Random.Range(RB.SpriteIndex(0, 4), RB.SpriteIndex(4, 4)), Color.white, flags);

            RB.ClipSet(clipRect);

            RB.DrawRectFill(clipRect, DemoUtil.IndexToRGB(22));

            RB.CameraSet(cameraPos);
            RB.DrawMapLayer(0);
            RB.CameraReset();
            RB.DrawRect(clipRect, DemoUtil.IndexToRGB(21));

            RB.ClipReset();

            mFormatStr.Set("@C// Set specific tile at specific map layer, sprite flags\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew @MVector2i@N(@L").Append(Random.Range(0, 60)).Append("@N, @L").Append(Random.Range(0, 12)).Append("@N), @L").Append(Random.Range(RB.SpriteIndex(0, 4), RB.SpriteIndex(4, 4))).Append(", 0").Append(flagsStr).Append("@N);\n");
            mFormatStr.Append("@[email protected](@Knew@N @MRect2i@N(@L").Append(clipRect.x).Append("@N, @L").Append(clipRect.y).Append("@N, @L").Append(clipRect.width).Append("@N, @L").Append(clipRect.height).Append("@N));\n");
            mFormatStr.Append("@[email protected](@Knew @MRect2i@N(@L").Append(clipRect.x).Append("@N, @L").Append(clipRect.y).Append("@N, @L").Append(clipRect.width).Append("@N, @L").Append(clipRect.height).Append("@N),\n   @I22);\n");
            mFormatStr.Append("@[email protected](@Knew@N @MVector2i@N(@L").Append(cameraPos.x).Append("@N, @L").Append(cameraPos.y).Append("@N));\n");
            mFormatStr.Append("@[email protected](@L0@N);\n");
            mFormatStr.Append("@[email protected]();\n");
            mFormatStr.Append("@[email protected](@Knew @MRect2i@N(@L").Append(clipRect.x).Append("@N, @L").Append(clipRect.y).Append("@N, @L").Append(clipRect.width).Append("@N, @L").Append(clipRect.height).Append("@N),\n");
            mFormatStr.Append("   @I21);");

            RB.Print(new Vector2i(x, y), DemoUtil.IndexToRGB(5), DemoUtil.HighlightCode(mFormatStr, mFinalStr));
        }
コード例 #7
0
        /// <summary>
        /// Create the background pattern using random background tiles, and wall frame tiles
        /// </summary>
        private void MakeBackground()
        {
            var game = (BrickBustGame)RB.Game;

            Vector2i topLeft    = new Vector2i(0, 2);
            Vector2i topRight   = new Vector2i(RB.DisplaySize.width / game.assets.spriteSheet.grid.cellSize.width, 2);
            Vector2i bottomLeft = new Vector2i(0, RB.DisplaySize.height / game.assets.spriteSheet.grid.cellSize.height);

            // Background
            for (int x = topLeft.x; x <= topRight.x; x++)
            {
                for (int y = topLeft.y + 1; y <= bottomLeft.y; y++)
                {
                    RB.MapSpriteSet(0, new Vector2i(x, y), RB.SpriteIndex(UnityEngine.Random.Range(0, 4), 3));
                }
            }

            // Frame
            // Horizontal
            for (int x = topLeft.x + 1; x < topRight.x; x++)
            {
                RB.MapSpriteSet(1, new Vector2i(x, topLeft.y), RB.SpriteIndex(4, 3), RB.ROT_90_CW);
            }

            // Vertical
            for (int y = topLeft.y + 1; y <= bottomLeft.y; y++)
            {
                RB.MapSpriteSet(1, new Vector2i(topLeft.x, y), RB.SpriteIndex(4, 3));
                RB.MapSpriteSet(1, new Vector2i(topRight.x, y), RB.SpriteIndex(4, 3));
            }

            // Corners
            RB.MapSpriteSet(1, topLeft, RB.SpriteIndex(6, 3));
            RB.MapSpriteSet(1, topRight, RB.SpriteIndex(6, 3), RB.FLIP_H);

            RB.MapLayerSpriteSheetSet(0, game.assets.spriteSheet);
            RB.MapLayerSpriteSheetSet(1, game.assets.spriteSheet);
        }
コード例 #8
0
        /// <summary>
        /// Handle scene entry
        /// </summary>
        public override void Enter()
        {
            base.Enter();

            RB.SpriteSheetSetup(0, "Demos/DemoReel/DemoSpritePack", new Vector2i(16, 16));
            RB.SpriteSheetSetup(1, "Demos/DemoReel/Sprites", new Vector2i(16, 16));
            RB.SpriteSheetSetup(2, "Demos/DemoReel/DemoSpritePack", new Vector2i(8, 8));
            RB.SpriteSheetSet(0);

            mSpriteHero1         = RB.PackedSpriteGet("Characters/Hero1");
            mSpriteHero2         = RB.PackedSpriteGet("Characters/Hero2");
            mSpriteDirtCenter    = RB.PackedSpriteGet("Terrain/DirtCenter");
            mSpriteDirtSide      = RB.PackedSpriteGet("Terrain/DirtSide");
            mSpriteGrassTop      = RB.PackedSpriteGet("Terrain/GrassTop");
            mSpriteGrassTopRight = RB.PackedSpriteGet("Terrain/GrassTopRight");
            mSpriteWater         = RB.PackedSpriteGet("Terrain/Water");

            if (mSpriteHero1.Size.x == 0)
            {
                mBadSpritepack = true;
                return;
            }

            RB.MapSpriteSet(0, new Vector2i(0, 0), mSpriteGrassTopRight, RB.FLIP_H);
            RB.MapSpriteSet(0, new Vector2i(1, 0), mSpriteGrassTop);
            RB.MapSpriteSet(0, new Vector2i(2, 0), mSpriteGrassTop);
            RB.MapSpriteSet(0, new Vector2i(3, 0), mSpriteGrassTopRight);

            RB.MapSpriteSet(0, new Vector2i(0, 1), mSpriteDirtSide, RB.FLIP_H);
            RB.MapSpriteSet(0, new Vector2i(1, 1), mSpriteDirtCenter);
            RB.MapSpriteSet(0, new Vector2i(2, 1), mSpriteDirtCenter);
            RB.MapSpriteSet(0, new Vector2i(3, 1), mSpriteDirtSide);

            mNineSlice = new NineSlice("Other/NinesliceTopLeft", "Other/NinesliceTop", "Other/NinesliceMiddle");

            var glyphs = new List <string>();

            for (int i = 0; i <= 9; i++)
            {
                glyphs.Add("Font/" + i);
            }

            glyphs.Add("Font/colon");

            List <char> chars = new List <char>();

            for (char c = '0'; c <= '9'; c++)
            {
                chars.Add(c);
            }

            chars.Add(':');

            RB.FontSetup(0, chars, glyphs, 0, 1, 1, true);

            var mapping = new string[16];

            for (int i = 0; i < 16; i++)
            {
                mapping[i] = "Terrain/Tiny" + i;
            }

            var tinyMap = RB.MapLoadTMX("Demos/DemoReel/TinyMap");

            RB.MapLoadTMXLayer(tinyMap, "Terrain", 1, mapping);
            RB.MapLayerSpriteSheetSet(1, 2);
        }
コード例 #9
0
        private void DrawTMX(int x, int y)
        {
            var demo = (DemoReel)RB.Game;

            RB.SpriteSheetSet(0);

            mFormatStr.Set("@C// Load sprite packs at runtime just like any other spritesheet!\n");
            mFormatStr.Append("@[email protected](@L0@N, @S\"DemoReel/DemoSpritePack\"@N, @Knew@N @MVector2i@N(@L16@N, @L16@N));\n");
            mFormatStr.Append("\n");
            mFormatStr.Append("@C// Now you can draw sprites using their sprite path and name, there is\n");
            mFormatStr.Append("@C// no need to specify source rectangle, RetroBlit sprite packing\n");
            mFormatStr.Append("@C// creates an internal lookup table that takes care of that for you!\n");

            var outputFrameRect = new Rect2i(x + 130, y + 60, 20, 20);

            DemoUtil.DrawOutputFrame(outputFrameRect, -1, 21, 22);

            if (RB.Ticks % 40 < 20)
            {
                mFormatStr.Append("@[email protected](@S\"Characters/Hero1\"@N, @Knew@N @MVector2i@N(@L32@N, @L48@N));\n");
                RB.DrawSprite("Characters/Hero1", new Vector2i(outputFrameRect.x + 2, outputFrameRect.y + 2));
            }
            else
            {
                mFormatStr.Append("@[email protected](@S\"Characters/Hero2\"@N, @Knew@N @MVector2i@N(@L32@N, @L48@N));\n");
                RB.DrawSprite("Characters/Hero2", new Vector2i(outputFrameRect.x + 2, outputFrameRect.y + 2));
            }

            RB.Print(new Vector2i(x, y), DemoUtil.IndexToRGB(5), DemoUtil.HighlightCode(mFormatStr, mFinalStr));

            y += 90;

            mFormatStr.Set("@C// You can also use sprite packs with tile maps\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L0@N, @L0@N), @S\"Terrain/GrassTopRight\"@N, @[email protected]_H);\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L1@N, @L0@N), @S\"Terrain/GrassTop\"@N);\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L2@N, @L0@N), @S\"Terrain/GrassTop\"@N);\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L3@N, @L0@N), @S\"Terrain/GrassTopRight\"@N);\n");
            mFormatStr.Append("\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L0@N, @L1@N), @S\"Terrain/DirtSide\"@N, @[email protected]_H);\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L1@N, @L1@N), @S\"Terrain/DirtCenter\"@N);\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L2@N, @L1@N), @S\"Terrain/DirtCenter\"@N);\n");
            mFormatStr.Append("@[email protected](@L0@N, @Knew@N @MVector2i@N(@L3@N, @L1@N), @S\"Terrain/DirtSide\"@N);\n");
            mFormatStr.Append("\n");
            mFormatStr.Append("@[email protected](0);");
            RB.Print(new Vector2i(x, y), DemoUtil.IndexToRGB(5), DemoUtil.HighlightCode(mFormatStr, mFinalStr));

            RB.MapSpriteSet(0, new Vector2i(0, 0), mSpriteGrassTopRight, RB.FLIP_H);
            RB.MapSpriteSet(0, new Vector2i(1, 0), mSpriteGrassTop);
            RB.MapSpriteSet(0, new Vector2i(2, 0), mSpriteGrassTop);
            RB.MapSpriteSet(0, new Vector2i(3, 0), mSpriteGrassTopRight);

            RB.MapSpriteSet(0, new Vector2i(0, 1), mSpriteDirtSide, RB.FLIP_H);
            RB.MapSpriteSet(0, new Vector2i(1, 1), mSpriteDirtCenter);
            RB.MapSpriteSet(0, new Vector2i(2, 1), mSpriteDirtCenter);
            RB.MapSpriteSet(0, new Vector2i(3, 1), mSpriteDirtSide);

            outputFrameRect = new Rect2i(x + 105, y + 95, (16 * 4) + 4, (16 * 2) + 4);
            DemoUtil.DrawOutputFrame(outputFrameRect, -1, 21, 22);

            RB.DrawMapLayer(0, new Vector2i(outputFrameRect.x + 2, outputFrameRect.y + 4));

            y += 140;

            mFormatStr.Set("@C// Sometimes it can be useful to get the sprite source rectangle\n");
            mFormatStr.Append("@Kvar@N sprite = @[email protected](@S\"Terrain/Water\"@N);\n");
            mFormatStr.Append("@Kvar@N sourceRect = sprite.SourceRect;\n");
            mFormatStr.Append("sourceRect.x += @L").Append((int)((RB.Ticks / 2) % 16)).Append("@N;\n");
            mFormatStr.Append("@[email protected](sourceRect, @Knew@N @MVector2i@N(@L32@N, @L48@N));\n");
            RB.Print(new Vector2i(x, y), DemoUtil.IndexToRGB(5), DemoUtil.HighlightCode(mFormatStr, mFinalStr));

            outputFrameRect = new Rect2i(x + 130, y + 44, 16 + 4, 16 + 4);
            DemoUtil.DrawOutputFrame(outputFrameRect, -1, 21, 22);

            var sprite     = RB.PackedSpriteGet("Terrain/Water");
            var sourceRect = sprite.SourceRect;

            sourceRect.x    += (int)((RB.Ticks / 2) % 16);
            sourceRect.width = 16;
            RB.DrawCopy(sourceRect, new Vector2i(outputFrameRect.x + 2, outputFrameRect.y + 2));

            y += 72;

            mFormatStr.Set("@C// You can also use sprite packs for custom fonts, nine-slice images,\n");
            mFormatStr.Append("@C// and when loading map layers from TMX files!\n");

            RB.Print(new Vector2i(x, y), DemoUtil.IndexToRGB(5), DemoUtil.HighlightCode(mFormatStr, mFinalStr));

            y += 20;
            mFormatStr.Set("@w444");

            int count = mCounter;
            int ms    = count % 60;

            count /= 60;
            int s = count % 60;

            count /= 60;
            int m = count;

            mFormatStr.Append(m, 2).Append(':').Append(s, 2).Append(':').Append(ms, 2);

            mCounter++;
            if (mCounter >= 60 * 60 * 60)
            {
                mCounter = 0;
            }

            RB.Print(0, new Vector2i(x + 15, y + 8), Color.white, mFormatStr);

            int xGrow = (int)(Mathf.Sin(RB.Ticks / 40.0f) * 20.0f) + 20 + 20;
            int yGrow = (int)(Mathf.Sin(RB.Ticks / 20.0f) * 18.0f) + 18 + 16;

            RB.DrawNineSlice(new Rect2i(x + 130 - (xGrow / 2), y + 18 - (yGrow / 2), xGrow, yGrow), mNineSlice);

            RB.DrawMapLayer(1, new Vector2i(x + 190, y - 1));
        }
コード例 #10
0
        /// <summary>
        /// Update
        /// </summary>
        public override void Update()
        {
            base.Update();

            if (spriteSheet1.status == RB.AssetStatus.Ready &&
                spriteSheet2.status == RB.AssetStatus.Ready &&
                spriteSheet3.status == RB.AssetStatus.Ready &&
                !mSpritePackPostLoadDone)
            {
                RB.SpriteSheetSet(spriteSheet1);

                mSpriteHero1         = RB.PackedSpriteGet("Characters/Hero1");
                mSpriteHero2         = RB.PackedSpriteGet("Characters/Hero2");
                mSpriteDirtCenter    = RB.PackedSpriteGet("Terrain/DirtCenter");
                mSpriteDirtSide      = RB.PackedSpriteGet("Terrain/DirtSide");
                mSpriteGrassTop      = RB.PackedSpriteGet("Terrain/GrassTop");
                mSpriteGrassTopRight = RB.PackedSpriteGet("Terrain/GrassTopRight");
                mSpriteWater         = RB.PackedSpriteGet("Terrain/Water");

                RB.MapSpriteSet(0, new Vector2i(0, 0), mSpriteGrassTopRight, RB.FLIP_H);
                RB.MapSpriteSet(0, new Vector2i(1, 0), mSpriteGrassTop);
                RB.MapSpriteSet(0, new Vector2i(2, 0), mSpriteGrassTop);
                RB.MapSpriteSet(0, new Vector2i(3, 0), mSpriteGrassTopRight);

                RB.MapSpriteSet(0, new Vector2i(0, 1), mSpriteDirtSide, RB.FLIP_H);
                RB.MapSpriteSet(0, new Vector2i(1, 1), mSpriteDirtCenter);
                RB.MapSpriteSet(0, new Vector2i(2, 1), mSpriteDirtCenter);
                RB.MapSpriteSet(0, new Vector2i(3, 1), mSpriteDirtSide);

                RB.MapLayerSpriteSheetSet(0, spriteSheet1);

                mNineSlice = new NineSlice("Other/NinesliceTopLeft", "Other/NinesliceTop", "Other/NinesliceMiddle");

                var glyphs = new List <string>();
                for (int i = 0; i <= 9; i++)
                {
                    glyphs.Add("Font/" + i);
                }

                glyphs.Add("Font/colon");

                List <char> chars = new List <char>();
                for (char c = '0'; c <= '9'; c++)
                {
                    chars.Add(c);
                }

                chars.Add(':');

                font.Setup(chars, glyphs, spriteSheet1, 1, 1, true);

                var mapping = new string[16];
                for (int i = 0; i < 16; i++)
                {
                    mapping[i] = "Terrain/Tiny" + i;
                }

                mMap.Load("Demos/DemoReel/TinyMap");
                mMap.LoadLayer("Terrain", 1, mapping);
                RB.MapLayerSpriteSheetSet(1, spriteSheet3);

                mSpritePackPostLoadDone = true;
            }
        }
コード例 #11
0
        /// <summary>
        /// Initialize your game here.
        /// </summary>
        /// <returns>Return true if successful</returns>
        public bool Initialize()
        {
            // You can load a spritesheet here
            RB.SpriteSheetSetup(0, "Demos/RetroDungeoneer/SpritePack", new Vector2i(16, 16));
            RB.SpriteSheetSet(0);

            var fontSprite = RB.PackedSpriteGet(S.FONT_RETROBLIT_DROPSHADOW);
            var fontPos    = new Vector2i(fontSprite.SourceRect.x + 1, fontSprite.SourceRect.y + 1);

            RB.FontSetup(C.FONT_RETROBLIT_DROPSHADOW, '!', (char)((int)'~' + 8), fontPos, 0, new Vector2i(6, 7), ((int)'~' + 8) - (int)'!' + 1, 1, 1, false);

            RB.MusicSetup(C.MUSIC_MAIN_MENU, "Demos/RetroDungeoneer/Music/ReturnToNowhere");
            RB.MusicSetup(C.MUSIC_GAME, "Demos/RetroDungeoneer/Music/DungeonAmbience");
            RB.MusicSetup(C.MUSIC_DEATH, "Demos/RetroDungeoneer/Music/DeathPiano");
            RB.MusicSetup(C.MUSIC_FOREST, "Demos/RetroDungeoneer/Music/ForestAmbience");

            RB.SoundSetup(C.SOUND_MONSTER_DEATH, "Demos/RetroDungeoneer/Sounds/MonsterDeath");
            RB.SoundSetup(C.SOUND_PLAYER_DEATH, "Demos/RetroDungeoneer/Sounds/PlayerDeath");
            RB.SoundSetup(C.SOUND_FOOT_STEP, "Demos/RetroDungeoneer/Sounds/FootStep");
            RB.SoundSetup(C.SOUND_MONSTER_ATTACK, "Demos/RetroDungeoneer/Sounds/MonsterAttack");
            RB.SoundSetup(C.SOUND_PLAYER_ATTACK, "Demos/RetroDungeoneer/Sounds/PlayerAttack");
            RB.SoundSetup(C.SOUND_INVENTORY, "Demos/RetroDungeoneer/Sounds/Inventory");
            RB.SoundSetup(C.SOUND_DRINK, "Demos/RetroDungeoneer/Sounds/Drink");
            RB.SoundSetup(C.SOUND_MENU_OPEN, "Demos/RetroDungeoneer/Sounds/MenuOpen");
            RB.SoundSetup(C.SOUND_MENU_CLOSE, "Demos/RetroDungeoneer/Sounds/MenuClose");
            RB.SoundSetup(C.SOUND_STAIRS, "Demos/RetroDungeoneer/Sounds/Stairs");
            RB.SoundSetup(C.SOUND_POINTER_SELECT, "Demos/RetroDungeoneer/Sounds/PointerSelect");
            RB.SoundSetup(C.SOUND_SELECT_OPTION, "Demos/RetroDungeoneer/Sounds/SelectOption");
            RB.SoundSetup(C.SOUND_LEVEL_UP, "Demos/RetroDungeoneer/Sounds/LevelUp");
            RB.SoundSetup(C.SOUND_FIREBALL, "Demos/RetroDungeoneer/Sounds/Fireball");
            RB.SoundSetup(C.SOUND_LIGHTNING, "Demos/RetroDungeoneer/Sounds/Lightning");
            RB.SoundSetup(C.SOUND_CONFUSE, "Demos/RetroDungeoneer/Sounds/Confuse");
            RB.SoundSetup(C.SOUND_CHEAT, "Demos/RetroDungeoneer/Sounds/CheatMode");
            RB.SoundSetup(C.SOUND_AGGRO1, "Demos/RetroDungeoneer/Sounds/Aggro1");
            RB.SoundSetup(C.SOUND_AGGRO2, "Demos/RetroDungeoneer/Sounds/Aggro2");
            RB.SoundSetup(C.SOUND_PLAYER_FALL_YELL, "Demos/RetroDungeoneer/Sounds/PlayerFallYell");
            RB.SoundSetup(C.SOUND_PORTAL, "Demos/RetroDungeoneer/Sounds/Portal");
            RB.SoundSetup(C.SOUND_JUMP, "Demos/RetroDungeoneer/Sounds/Jump");
            RB.SoundSetup(C.SOUND_BOW_SHOOT, "Demos/RetroDungeoneer/Sounds/BowShoot");
            RB.SoundSetup(C.SOUND_BOW_HIT, "Demos/RetroDungeoneer/Sounds/BowHit");
            RB.SoundSetup(C.SOUND_WEB, "Demos/RetroDungeoneer/Sounds/Web");
            RB.SoundSetup(C.SOUND_TELEPORT, "Demos/RetroDungeoneer/Sounds/Teleport");
            RB.SoundSetup(C.SOUND_SLIME, "Demos/RetroDungeoneer/Sounds/Slime");

            RB.ShaderSetup(C.SHADER_VIGNETTE, "Demos/RetroDungeoneer/DrawVignette");

            RB.EffectSet(RB.Effect.Scanlines, 0.5f);

            EntityFunctions.Initialize();
            S.InitializeAnims();

            InitializeNewGame.InitializeConstants();

            RenderFunctions.Initialize();

            mSceneGame     = new SceneGame();
            mSceneMainMenu = new SceneMainMenu();
            mSceneMessage  = new SceneMessage();

            // Generate tile grid, this is a one time operation, we can keep reusing the grid
            var gridColor = Color.white;

            for (int x = 0; x < RB.MapSize.width; x++)
            {
                for (int y = 0; y < RB.MapSize.height; y++)
                {
                    RB.MapSpriteSet(C.LAYER_GRID, new Vector2i(x, y), S.GRID, gridColor);
                }
            }

            ChangeScene(SceneEnum.MAIN_MENU);

            // Collect any garbage created during initilization to avoid a performance hiccup later.
            System.GC.Collect();

            return(true);
        }