public MDRDungeon LoadDungeon(Stream source) { SetupInput(source, 20); MDRDungeon result = new MDRDungeon(); try { //find how many levels there are int floors = data.ReadMDRWord(); //make sure it's reasonable if ((floors > 255) || (floors < 1)) { throw new Exception("Invalid number of levels in file, found " + floors + " expecting between 1 and 255"); } //stub fixed width and height result.Initialize(32, 32, floors); for (int level = 1; level <= floors; level++) { result.Floor[level] = ReadMap(level); result.Floor[level].FloorNumber = level; if (result.Floor[level].Width != 32 || result.Floor[level].Height != 32) { throw new Exception("Floors must all have the standard dimentions. We expecting 32x32 but found " + result.Floor[level].Width + "x" + result.Floor[level].Height); } } } finally { data.Close(); } return(result); }
/** * Deletes current gamestate (characters, explored map etc) and creates default data. * This will causes all characters, maps, etc to be lost */ public void Reset() { if (!CoM.GameDataLoaded) { throw new Exception("Can not reset save file until game data has been loaded."); } SpawnManager = new SpawnManager(); // Store. Store = new MDRStore(); Store.SetDefault(); GameStats.AddDefaultStats(); // Explored dungeon. ExploredDungeon = new MDRDungeon(); ExploredDungeon.Initialize(CoM.Dungeon.Width, CoM.Dungeon.Height, CoM.Dungeon.Floors); // characters and party CharacterList = loadFromStore <MDRCharacterLibrary>("DefaultCharacters"); PartyList = loadFromStore <MDRPartyLibrary>("DefaultParty"); Trace.Log("Save file reset."); _loaded = true; }
/** Loads all the static data, this includes things like monsters, items, etc. These values do not change as the game progresses */ public static void LoadGameData() { DateTime startTime = DateTime.Now; Trace.Log("Loading game data:"); DamageTypes = LoadLibrary <MDRDamageTypeLibrary, MDRDamageType>("DamageTypes", 0, true); Skills = LoadLibrary <MDRSkillLibrary, MDRSkill>("Skills", 0, true); SpellClasses = LoadLibrary <MDRSpellClassLibrary, MDRSpellClass>("SpellClasses"); Spells = LoadLibrary <MDRSpellLibrary, MDRSpell>("Spells"); Races = LoadLibrary <MDRRaceLibrary, MDRRace>("Races"); Guilds = LoadLibrary <MDRGuildLibrary, MDRGuild>("Guilds"); ItemClasses = LoadLibrary <MDRItemClassLibrary, MDRItemClass>("ItemClasses"); ItemTypes = LoadLibrary <MDRItemTypeLibrary, MDRItemType>("ItemTypes"); Items = LoadLibrary <MDRItemLibrary, MDRItem>("Items"); MonsterClasses = LoadLibrary <MDRMonsterClassLibrary, MDRMonsterClass>("MonsterClasses"); MonsterTypes = LoadLibrary <MDRMonsterTypeLibrary, MDRMonsterType>("MonsterTypes"); Monsters = LoadLibrary <MDRMonsterLibrary, MDRMonster>("Monsters"); // stub: import dungeon var importer = new MapImporter(); Dungeon = importer.LoadDungeon(Util.ResourceToStream("Data/MDATA11")); //Dungeon = LoadData<MDRDungeon>("Dungeon", 2.0f); Trace.Log("Game data loading completed in " + (DateTime.Now - startTime).TotalMilliseconds.ToString("0.0") + "ms."); _gameDataLoaded = true; }
/** Restores game from save file. */ public void Load() { Util.Assert(CoM.GameDataLoaded, "Data must be loaded before loading a save file."); DateTime startTime = DateTime.Now; GameStats = loadFromStoreDefault <GameRecords>("GameStats"); Store = loadFromStoreDefault <MDRStore>("Store"); ExploredDungeon = loadFromStoreDefault <MDRDungeon>("ExploredDungeon"); CharacterList = loadFromStoreDefault <MDRCharacterLibrary>("Characters"); PartyList = loadFromStoreDefault <MDRPartyLibrary>("Parties"); SpawnManager = loadFromStoreDefault <SpawnManager>("SpawnData"); Trace.Log("Save file loading completed in " + (DateTime.Now - startTime).TotalMilliseconds.ToString("0.0") + "ms."); _loaded = true; UpdateCharacterRecords(true); }