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); } } } } }
/// <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); }
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); } }
/// <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); }
/// <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(); }
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)); }
/// <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); }
/// <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); }
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)); }
/// <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; } }
/// <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); }