Exemplo n.º 1
0
        public static void IndexNamedData(string dataPath)
        {
            try
            {
                EntryDataIndex fullGuide = new EntryDataIndex();

                foreach (string dir in PathMod.GetModFiles(dataPath, "*" + DataManager.DATA_EXT))
                {
                    string     file = Path.GetFileNameWithoutExtension(dir);
                    int        num  = Convert.ToInt32(file);
                    IEntryData data = (IEntryData)DataManager.LoadData(dir);
                    while (fullGuide.Entries.Count <= num)
                    {
                        fullGuide.Entries.Add(new EntrySummary());
                    }
                    fullGuide.Entries[num] = data.GenerateEntrySummary();
                }

                using (Stream stream = new FileStream(PathMod.ModPath(dataPath + "index.idx"), FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    using (BinaryWriter writer = new BinaryWriter(stream))
                    {
                        IFormatter formatter = new BinaryFormatter();
                        formatter.Serialize(stream, fullGuide);
                    }
                }
            }
            catch (Exception ex)
            {
                DiagManager.Instance.LogError(new Exception("Error importing index at " + dataPath + "\n", ex));
            }
        }
Exemplo n.º 2
0
        public override void ContentChanged(int idx)
        {
            string      dataPath = DataManager.DATA_PATH + DataManager.DataType.Monster.ToString() + "/";
            string      dir      = PathMod.ModPath(dataPath + idx + DataManager.DATA_EXT);
            MonsterData data     = DataManager.LoadData <MonsterData>(dir);
            Dictionary <int, FormFeatureSummary> formSummaries = computeSummary(dataPath, idx, data);

            FeatureData[idx] = formSummaries;
        }
Exemplo n.º 3
0
 public static void RunExtraIndexing(DataManager.DataType conversionFlags)
 {
     //index extra based on triggers
     foreach (BaseData baseData in DataManager.Instance.UniversalData)
     {
         if ((baseData.TriggerType & conversionFlags) != DataManager.DataType.None)
         {
             baseData.ReIndex();
             DataManager.SaveData(PathMod.ModPath(DataManager.MISC_PATH + baseData.FileName + DataManager.DATA_EXT), baseData);
         }
     }
 }
Exemplo n.º 4
0
        public static Bitmap GetTile(TileFrame tileTex)
        {
            long     tilePos = GraphicsManager.TileIndex.GetPosition(tileTex.Sheet, tileTex.TexLoc);
            TileAddr addr    = new TileAddr(tilePos, tileTex.Sheet);

            Bitmap sheet;

            if (tileCache.TryGetValue(addr, out sheet))
            {
                return(sheet);
            }

            if (tilePos > 0)
            {
                try
                {
                    using (FileStream stream = new FileStream(PathMod.ModPath(String.Format(GraphicsManager.TILE_PATTERN, tileTex.Sheet)), FileMode.Open, FileAccess.Read, FileShare.Read))
                    {
                        // Seek to the location of the tile
                        stream.Seek(tilePos, SeekOrigin.Begin);

                        using (BinaryReader reader = new BinaryReader(stream))
                        {
                            //usually handled by basesheet, cheat a little here
                            long   length    = reader.ReadInt64();
                            byte[] tileBytes = reader.ReadBytes((int)length);

                            using (MemoryStream tileStream = new MemoryStream(tileBytes))
                                sheet = new Bitmap(tileStream);
                        }
                    }

                    tileCache.Add(addr, sheet);
                    return(sheet);
                }
                catch (Exception ex)
                {
                    DiagManager.Instance.LogError(new Exception("Error retrieving tile " + tileTex.TexLoc.X + ", " + tileTex.TexLoc.Y + " from Tileset #" + tileTex.Sheet + "\n", ex));
                }
            }
            return(null);
        }
Exemplo n.º 5
0
        public override void ContentChanged(int idx)
        {
            //remove the index from its previous locations
            foreach (Dictionary <int, List <int> > rarityTable in RarityMap.Values)
            {
                foreach (List <int> items in rarityTable.Values)
                {
                    if (items.Remove(idx))
                    {
                        break;
                    }
                }
            }

            //Add it to its new locations
            string   dataPath = DataManager.DATA_PATH + DataManager.DataType.Item.ToString() + "/";
            string   dir      = PathMod.ModPath(dataPath + idx + DataManager.DATA_EXT);
            ItemData data     = DataManager.LoadData <ItemData>(dir);

            computeSummary(idx, data);
        }
Exemplo n.º 6
0
        public static void ReserializeBase()
        {
            {
                string dir  = PathMod.ModPath(DataManager.DATA_PATH + "Universal.bin");
                object data = DataManager.LoadData(dir, DiagManager.Instance.UpgradeBinder);
                DataManager.SaveData(dir, data);
            }

            string editPath = Path.Combine(PathMod.RESOURCE_PATH, "Extensions");

            foreach (string dir in Directory.GetFiles(editPath, "*.op"))
            {
                object data = DataManager.LoadData(dir, DiagManager.Instance.UpgradeBinder);
                DataManager.SaveData(dir, data);
            }

            foreach (string dir in PathMod.GetModFiles(DataManager.FX_PATH, "*.fx"))
            {
                object data = DataManager.LoadData(dir, DiagManager.Instance.UpgradeBinder);
                DataManager.SaveData(dir, data);
            }
        }
Exemplo n.º 7
0
        public static Bitmap GetTileset(string tileset)
        {
            Bitmap sheet;

            if (tilesetCache.TryGetValue(tileset, out sheet))
            {
                return(sheet);
            }

            try
            {
                Loc tileDims = GraphicsManager.TileIndex.GetTileDims(tileset);
                int tileSize = GraphicsManager.TileIndex.GetTileSize(tileset);

                System.Drawing.Bitmap baseBitmap = new System.Drawing.Bitmap(tileDims.X * tileSize, tileDims.Y * tileSize);

                using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(baseBitmap))
                {
                    for (int xx = 0; xx < tileDims.X; xx++)
                    {
                        for (int yy = 0; yy < tileDims.Y; yy++)
                        {
                            long tilePos = GraphicsManager.TileIndex.GetPosition(tileset, new Loc(xx, yy));

                            if (tilePos > 0)
                            {
                                using (FileStream stream = new FileStream(PathMod.ModPath(String.Format(GraphicsManager.TILE_PATTERN, tileset)), FileMode.Open, FileAccess.Read, FileShare.Read))
                                {
                                    // Seek to the location of the tile
                                    stream.Seek(tilePos, SeekOrigin.Begin);

                                    using (BinaryReader reader = new BinaryReader(stream))
                                    {
                                        //usually handled by basesheet, cheat a little here
                                        long   length    = reader.ReadInt64();
                                        byte[] tileBytes = reader.ReadBytes((int)length);

                                        using (MemoryStream tileStream = new MemoryStream(tileBytes))
                                        {
                                            System.Drawing.Bitmap tile = new System.Drawing.Bitmap(tileStream);

                                            graphics.DrawImage(tile, xx * tileSize, yy * tileSize);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }



                using (MemoryStream tileStream = new MemoryStream())
                {
                    baseBitmap.Save(tileStream, System.Drawing.Imaging.ImageFormat.Png);
                    tileStream.Seek(0, SeekOrigin.Begin);
                    sheet = new Bitmap(tileStream);
                }
                tilesetCache.Add(tileset, sheet);
                return(sheet);
            }
            catch (Exception ex)
            {
                DiagManager.Instance.LogError(new Exception("Error retrieving Tileset #" + tileset + "\n", ex));
            }
            return(null);
        }
Exemplo n.º 8
0
        private Dictionary <int, FormFeatureSummary> computeSummary(string dataPath, int num, MonsterData data)
        {
            Dictionary <int, FormFeatureSummary> formFeatureData = new Dictionary <int, FormFeatureSummary>();
            int         family = num;
            MonsterData preEvo = data;

            while (preEvo.PromoteFrom > -1)
            {
                family = preEvo.PromoteFrom;
                string preDir = PathMod.ModPath(dataPath + family + DataManager.DATA_EXT);
                preEvo = DataManager.LoadData <MonsterData>(preDir);
            }
            EvoFlag stage       = EvoFlag.NoEvo;
            bool    evolvedFrom = (data.PromoteFrom > -1);
            bool    evolves     = (data.Promotions.Count > 0);

            if (evolvedFrom && evolves)
            {
                stage = EvoFlag.MidEvo;
            }
            else if (evolvedFrom)
            {
                stage = EvoFlag.FinalEvo;
            }
            else if (evolves)
            {
                stage = EvoFlag.FirstEvo;
            }

            for (int ii = 0; ii < data.Forms.Count; ii++)
            {
                FormFeatureSummary summary = new FormFeatureSummary();
                summary.Family = family;
                summary.Stage  = stage;

                MonsterFormData formData = data.Forms[ii] as MonsterFormData;
                summary.Element1 = formData.Element1;
                summary.Element2 = formData.Element2;

                Stat bestStat  = Stat.HP;
                Stat worstStat = Stat.HP;

                for (int nn = 0; nn < (int)Stat.HitRate; nn++)
                {
                    if (bestStat != Stat.None)
                    {
                        if (formData.GetBaseStat((Stat)nn) > formData.GetBaseStat(bestStat))
                        {
                            bestStat = (Stat)nn;
                        }
                        else if (formData.GetBaseStat((Stat)nn) == formData.GetBaseStat(bestStat))
                        {
                            bestStat = Stat.None;
                        }
                    }
                    if (worstStat != Stat.None)
                    {
                        if (formData.GetBaseStat((Stat)nn) < formData.GetBaseStat(worstStat))
                        {
                            worstStat = (Stat)nn;
                        }
                        else if (formData.GetBaseStat((Stat)nn) == formData.GetBaseStat(worstStat))
                        {
                            worstStat = Stat.None;
                        }
                    }
                }
                summary.BestStat  = bestStat;
                summary.WorstStat = worstStat;

                formFeatureData[ii] = summary;
            }
            return(formFeatureData);
        }
Exemplo n.º 9
0
        static void Main()
        {
            InitDllMap();
            //SetProcessDPIAware();
            //TODO: figure out how to set this switch in appconfig
            AppContext.SetSwitch("Switch.System.Runtime.Serialization.SerializationGuard.AllowFileWrites", true);
            Thread.CurrentThread.CurrentCulture   = CultureInfo.InvariantCulture;
            Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;

            string[] args = Environment.GetCommandLineArgs();
            PathMod.InitExePath(args[0]);
            DiagManager.InitInstance();
            DiagManager.Instance.CurSettings = DiagManager.Instance.LoadSettings();
            DiagManager.Instance.LoadModSettings();
            DiagManager.Instance.UpgradeBinder = new UpgradeBinder();

            try
            {
                DiagManager.Instance.LogInfo("=========================================");
                DiagManager.Instance.LogInfo(String.Format("SESSION STARTED: {0}", String.Format("{0:yyyy/MM/dd HH:mm:ss}", DateTime.Now)));
                DiagManager.Instance.LogInfo("Version: " + Versioning.GetVersion().ToString());
                DiagManager.Instance.LogInfo(Versioning.GetDotNetInfo());
                DiagManager.Instance.LogInfo("=========================================");


                bool logInput  = true;
                bool guideBook = false;
                bool guideCsv  = false;
                GraphicsManager.AssetType convertAssets      = GraphicsManager.AssetType.None;
                DataManager.DataType      convertIndices     = DataManager.DataType.None;
                DataManager.DataType      reserializeIndices = DataManager.DataType.None;
                string        langArgs   = "";
                bool          dev        = false;
                string        quest      = "";
                List <string> mod        = new List <string>();
                bool          buildQuest = false;
                string        playInputs = null;
                for (int ii = 1; ii < args.Length; ii++)
                {
                    if (args[ii] == "-dev")
                    {
                        dev = true;
                    }
                    else if (args[ii] == "-play" && args.Length > ii + 1)
                    {
                        playInputs = args[ii + 1];
                        ii++;
                    }
                    else if (args[ii] == "-lang" && args.Length > ii + 1)
                    {
                        langArgs = args[ii + 1];
                        ii++;
                    }
                    else if (args[ii] == "-nolog")
                    {
                        logInput = false;
                    }
                    else if (args[ii] == "-guide")
                    {
                        guideBook = true;
                    }
                    else if (args[ii] == "-csv")
                    {
                        guideCsv = true;
                    }
                    else if (args[ii] == "-asset")
                    {
                        PathMod.ASSET_PATH = Path.GetFullPath(args[ii + 1]);
                        ii++;
                    }
                    else if (args[ii] == "-raw")
                    {
                        PathMod.DEV_PATH = Path.GetFullPath(args[ii + 1]);
                        ii++;
                    }
                    else if (args[ii] == "-quest")
                    {
                        quest = args[ii + 1];
                        ii++;
                    }
                    else if (args[ii] == "-mod")
                    {
                        int jj = 1;
                        while (args.Length > ii + jj)
                        {
                            if (args[ii + jj].StartsWith("-"))
                            {
                                break;
                            }
                            else
                            {
                                mod.Add(args[ii + jj]);
                            }
                            jj++;
                        }
                        ii += jj - 1;
                    }
                    else if (args[ii] == "-build")
                    {
                        buildQuest = true;
                        ii++;
                    }
                    else if (args[ii] == "-convert")
                    {
                        int jj = 1;
                        while (args.Length > ii + jj)
                        {
                            GraphicsManager.AssetType conv = GraphicsManager.AssetType.None;
                            foreach (GraphicsManager.AssetType type in Enum.GetValues(typeof(GraphicsManager.AssetType)))
                            {
                                if (args[ii + jj].ToLower() == type.ToString().ToLower())
                                {
                                    conv = type;
                                    break;
                                }
                            }
                            if (conv != GraphicsManager.AssetType.None)
                            {
                                convertAssets |= conv;
                            }
                            else
                            {
                                break;
                            }
                            jj++;
                        }
                        ii += jj - 1;
                    }
                    else if (args[ii] == "-index")
                    {
                        int jj = 1;
                        while (args.Length > ii + jj)
                        {
                            DataManager.DataType conv = DataManager.DataType.None;
                            foreach (DataManager.DataType type in Enum.GetValues(typeof(DataManager.DataType)))
                            {
                                if (args[ii + jj].ToLower() == type.ToString().ToLower())
                                {
                                    conv = type;
                                    break;
                                }
                            }
                            if (conv != DataManager.DataType.None)
                            {
                                convertIndices |= conv;
                            }
                            else
                            {
                                break;
                            }
                            jj++;
                        }
                        ii += jj - 1;
                    }
                    else if (args[ii] == "-reserialize")
                    {
                        int jj = 1;
                        while (args.Length > ii + jj)
                        {
                            DataManager.DataType conv = DataManager.DataType.None;
                            foreach (DataManager.DataType type in Enum.GetValues(typeof(DataManager.DataType)))
                            {
                                if (args[ii + jj].ToLower() == type.ToString().ToLower())
                                {
                                    conv = type;
                                    break;
                                }
                            }
                            if (conv != DataManager.DataType.None)
                            {
                                reserializeIndices |= conv;
                            }
                            else
                            {
                                break;
                            }
                            jj++;
                        }
                        ii += jj - 1;
                    }
                }

                DiagManager.Instance.SetupGamepad();
                GraphicsManager.InitParams();

                DiagManager.Instance.DevMode = dev;

                if (quest != "")
                {
                    ModHeader header = PathMod.GetModDetails(Path.Combine(PathMod.MODS_PATH, quest));
                    if (header.IsValid())
                    {
                        PathMod.Quest = header;

                        DiagManager.Instance.LogInfo(String.Format("Loaded quest \"{0}\".", quest));
                    }
                    else
                    {
                        DiagManager.Instance.LogInfo(String.Format("Cannot find quest \"{0}\" in {1}. Falling back to base game.", quest, PathMod.MODS_PATH));
                    }
                }

                if (mod.Count > 0)
                {
                    List <ModHeader> workingMods = new List <ModHeader>();
                    for (int ii = 0; ii < mod.Count; ii++)
                    {
                        ModHeader header = PathMod.GetModDetails(Path.Combine(PathMod.MODS_PATH, mod[ii]));
                        if (header.IsValid())
                        {
                            workingMods.Add(header);
                            DiagManager.Instance.LogInfo(String.Format("Loaded mod \"{0}\".", String.Join(", ", mod[ii])));
                        }
                        else
                        {
                            DiagManager.Instance.LogInfo(String.Format("Cannot find mod \"{0}\" in {1}. It will be ignored.", mod, PathMod.MODS_PATH));
                            mod.RemoveAt(ii);
                            ii--;
                        }
                    }
                    PathMod.Mods = workingMods.ToArray();
                }


                if (playInputs != null)
                {
                    DiagManager.Instance.LoadInputs(playInputs);
                }

                Text.Init();
                if (langArgs != "" && DiagManager.Instance.CurSettings.Language == "")
                {
                    if (langArgs.Length > 0)
                    {
                        DiagManager.Instance.CurSettings.Language = langArgs.ToLower();
                        Text.SetCultureCode(langArgs.ToLower());
                    }
                    else
                    {
                        DiagManager.Instance.CurSettings.Language = "en";
                    }
                }
                Text.SetCultureCode(DiagManager.Instance.CurSettings.Language == "" ? "" : DiagManager.Instance.CurSettings.Language.ToString());

                if (buildQuest)
                {
                    if (!PathMod.Quest.IsValid())
                    {
                        DiagManager.Instance.LogInfo("No quest specified to build.");
                        return;
                    }
                    RogueEssence.Dev.DevHelper.MergeQuest(quest);

                    return;
                }

                if (convertAssets != GraphicsManager.AssetType.None)
                {
                    //run conversions
                    using (GameBase game = new GameBase())
                    {
                        GraphicsManager.InitSystem(game.GraphicsDevice);
                        GraphicsManager.RunConversions(convertAssets);
                    }
                    return;
                }

                if (reserializeIndices != DataManager.DataType.None)
                {
                    DiagManager.Instance.LogInfo("Beginning Reserialization");

                    using (GameBase game = new GameBase())
                    {
                        GraphicsManager.InitSystem(game.GraphicsDevice);
                        GraphicsManager.RebuildIndices(GraphicsManager.AssetType.All);
                    }

                    //we need the datamanager for this, but only while data is hardcoded
                    //TODO: remove when data is no longer hardcoded
                    LuaEngine.InitInstance();
                    DataManager.InitInstance();

                    DataManager.InitDataDirs(PathMod.ModPath(""));
                    RogueEssence.Dev.DevHelper.ReserializeBase();
                    DiagManager.Instance.LogInfo("Reserializing main data");
                    RogueEssence.Dev.DevHelper.Reserialize(reserializeIndices);
                    DiagManager.Instance.LogInfo("Reserializing map data");
                    if ((reserializeIndices & DataManager.DataType.Zone) != DataManager.DataType.None)
                    {
                        RogueEssence.Dev.DevHelper.ReserializeData <Map>(DataManager.DATA_PATH + "Map/", DataManager.MAP_EXT);
                        RogueEssence.Dev.DevHelper.ReserializeData <GroundMap>(DataManager.DATA_PATH + "Ground/", DataManager.GROUND_EXT);
                    }
                    DiagManager.Instance.LogInfo("Reserializing indices");
                    RogueEssence.Dev.DevHelper.RunIndexing(reserializeIndices);

                    DataManager.Instance.UniversalData = (TypeDict <BaseData>)RogueEssence.Dev.DevHelper.LoadWithLegacySupport(PathMod.ModPath(DataManager.MISC_PATH + "Index.bin"), typeof(TypeDict <BaseData>));
                    RogueEssence.Dev.DevHelper.RunExtraIndexing(reserializeIndices);
                    return;
                }

                if (convertIndices != DataManager.DataType.None)
                {
                    //we need the datamanager for this, but only while data is hardcoded
                    //TODO: remove when data is no longer hardcoded
                    LuaEngine.InitInstance();
                    DataManager.InitInstance();
                    DiagManager.Instance.LogInfo("Reserializing indices");
                    DataManager.InitDataDirs(PathMod.ModPath(""));
                    RogueEssence.Dev.DevHelper.RunIndexing(convertIndices);

                    DataManager.Instance.UniversalData = (TypeDict <BaseData>)RogueEssence.Dev.DevHelper.LoadWithLegacySupport(PathMod.ModPath(DataManager.MISC_PATH + "Index.bin"), typeof(TypeDict <BaseData>));
                    RogueEssence.Dev.DevHelper.RunExtraIndexing(convertIndices);
                    return;
                }


                if (guideBook || guideCsv)
                {
                    //print the guidebook in the chosen language
                    //we need the datamanager for this
                    LuaEngine.InitInstance();
                    DataManager.InitInstance();
                    DataManager.Instance.InitData();
                    //just print a guidebook and exit
                    StrategyGuide.PrintMoveGuide(guideCsv);
                    StrategyGuide.PrintItemGuide(guideCsv);
                    StrategyGuide.PrintAbilityGuide(guideCsv);
                    StrategyGuide.PrintEncounterGuide(guideCsv);
                    return;
                }


                //Dev.ImportManager.PrintMoveUsers(PathMod.DEV_PATH+"moves.txt");
                //Dev.ImportManager.PrintAbilityUsers(PathMod.DEV_PATH+"abilities.txt");

                logInput = false; //this feature is disabled for now...
                if (DiagManager.Instance.ActiveDebugReplay == null && logInput)
                {
                    DiagManager.Instance.BeginInput();
                }

                if (DiagManager.Instance.DevMode)
                {
                    InitDataEditor();
                    AppBuilder builder = RogueEssence.Dev.Program.BuildAvaloniaApp();
                    builder.StartWithClassicDesktopLifetime(args);
                }
                else
                {
                    DiagManager.Instance.DevEditor = new EmptyEditor();
                    using (GameBase game = new GameBase())
                        game.Run();
                }
            }
            catch (Exception ex)
            {
                DiagManager.Instance.LogError(ex);
                throw;
            }
        }