void InitialConditions()
        {
            Color[] _unit    = new Color[w * h];
            Color[] _data    = new Color[w * h];
            Color[] _extra   = new Color[w * h];
            Color[] _target  = new Color[w * h];
            Color[] _random  = new Color[w * h];
            Color[] _tiles   = new Color[w * h];
            Color[] _corpses = new Color[w * h];

            CurrentData.GetData(_data);

            var rnd = new System.Random();

            for (int i = 0; i < w; i++)
            {
                for (int j = 0; j < h; j++)
                {
                    _random[i * h + j]  = new Color(rnd.IntRange(0, 256), rnd.IntRange(0, 256), rnd.IntRange(0, 256), rnd.IntRange(0, 256));
                    _corpses[i * h + j] = new Color(0, 0, 0, 0);
                    _tiles[i * h + j]   = new Color(2, rnd.Next(0, 11), 30, 0);

                    // Random units
                    //if (rnd.NextDouble() > 0.85f)
                    //{
                    //    int dir = rnd.Next(1, 5);

                    //    int action = (int)(255f * SimShader.UnitAction.Attacking);

                    //    int g = 0;
                    //    int b = 0;

                    //    int player = rnd.Next(1, 2);
                    //    int team = player;
                    //    int type = rnd.Next(1, 2);

                    //    _unit[i * h + j] = new Color(type, player, team, 0);
                    //    _data[i * h + j] = new Color(dir, g, b, action);
                    //    _extra[i * h + j] = new Color(0, 0, 0, 0);
                    //    _target[i * h + j] = new Color(rnd.Next(0, 4), rnd.Next(0, 256), rnd.Next(0, 4), rnd.Next(0, 256));
                    //}
                    //else
                    //{
                    //    _unit[i * h + j] = new Color(0, 0, 0, 0);
                    //    _data[i * h + j] = new Color(0, 0, 0, 0);
                    //    _extra[i * h + j] = new Color(0, 0, 0, 0);
                    //    _target[i * h + j] = new Color(0, 0, 0, 0);
                    //}
                }
            }

            // Gold mine gride
            //for (int i = 0; i < w; i += 50)
            //for (int j = 0; j < h; j += 50)
            //{
            //    Create.MakeBuilding(vec(i,j), SimShader.UnitType.GoldMine, Player.None, Team.None, i, j, w, h, _unit, _data, _target);
            //}

            CurrentUnits.SetData(_unit);
            PreviousUnits.SetData(_unit);

            CurrentData.SetData(_data);
            PreviousData.SetData(_data);

            Extra.SetData(_extra);

            TargetData.SetData(_target);

            RandomField.SetData(_random);

            Tiles.SetData(_tiles);
            Corpses.SetData(_corpses);
        }
    public static void LoadRandMission()
    {
        SqliteDataReader reader = LocalDatabase.Instance.ReadFullTable("RandomQuest_List");

        reader.Read();
        while (reader.Read())
        {
            MissionCommonData data = new MissionCommonData();
            RandomField       rf   = new RandomField();
            int strid;
            data.m_Type = MissionType.MissionType_Sub;

            data.m_ID          = Convert.ToInt32(reader.GetString(reader.GetOrdinal("ID")));
            strid              = Convert.ToInt32(reader.GetString(reader.GetOrdinal("MissionName")));
            data.m_MissionName = PELocalization.GetString(strid);
            data.m_MaxNum      = Convert.ToInt32(reader.GetString(reader.GetOrdinal("MaxNum")));

            string   strtmp  = reader.GetString(reader.GetOrdinal("TargetIDList"));
            string[] tmplist = strtmp.Split(';');
            string[] tmplist1, tmplist2;

            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                TargetListInfo tli;
                tli.listid = new List <int>();
                tmplist1   = tmplist[i].Split(',');
                for (int m = 0; m < tmplist1.Length; m++)
                {
                    tli.listid.Add(Convert.ToInt32(tmplist1[m]));
                }

                rf.TargetIDMap.Add(tli);
            }


            strtmp  = reader.GetString(reader.GetOrdinal("Get_DemandItem"));
            tmplist = strtmp.Split(',');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                tmplist1 = tmplist[i].Split('_');
                if (tmplist1.Length != 2)
                {
                    continue;
                }

                MissionIDNum tmp;
                tmp.id  = Convert.ToInt32(tmplist1[0]);
                tmp.num = Convert.ToInt32(tmplist1[1]);
                data.m_Get_DemandItem.Add(tmp);
            }

            strtmp  = reader.GetString(reader.GetOrdinal("Get_DeleteItem"));
            tmplist = strtmp.Split(',');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                tmplist1 = tmplist[i].Split('_');
                if (tmplist1.Length != 2)
                {
                    continue;
                }

                MissionIDNum tmp;
                tmp.id  = Convert.ToInt32(tmplist1[0]);
                tmp.num = Convert.ToInt32(tmplist1[1]);
                data.m_Get_DeleteItem.Add(tmp);
            }

            strtmp  = reader.GetString(reader.GetOrdinal("Get_MissionItem"));
            tmplist = strtmp.Split(',');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                tmplist1 = tmplist[i].Split('_');
                if (tmplist1.Length != 2)
                {
                    continue;
                }

                MissionIDNum tmp;
                tmp.id  = Convert.ToInt32(tmplist1[0]);
                tmp.num = Convert.ToInt32(tmplist1[1]);
                data.m_Get_MissionItem.Add(tmp);
            }

            strtmp  = reader.GetString(reader.GetOrdinal("CoRewardItem"));
            tmplist = strtmp.Split(';');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                tmplist1 = tmplist[i].Split(',');
                List <MissionIDNum> tmp = new List <MissionIDNum>();
                for (int j = 0; j < tmplist1.Length; j++)
                {
                    tmplist2 = tmplist1[j].Split('_');
                    if (tmplist2.Length != 2)
                    {
                        continue;
                    }

                    MissionIDNum idNum;
                    idNum.id  = Convert.ToInt32(tmplist2[0]);
                    idNum.num = Convert.ToInt32(tmplist2[1]);
                    tmp.Add(idNum);
                }

                if (tmp.Count == 0)
                {
                    continue;
                }

                rf.RewardMap.Add(tmp);
            }

            strtmp  = reader.GetString(reader.GetOrdinal("CoRemoveItem"));
            tmplist = strtmp.Split(',');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                tmplist1 = tmplist[i].Split('_');
                if (tmplist1.Length != 2)
                {
                    continue;
                }

                MissionIDNum tmp;
                tmp.id  = Convert.ToInt32(tmplist1[0]);
                tmp.num = Convert.ToInt32(tmplist1[1]);
                data.m_Com_RemoveItem.Add(tmp);
            }

            strid = Convert.ToInt32(reader.GetString(reader.GetOrdinal("Description")));
            data.m_Description = PELocalization.GetString(strid);

            strtmp  = reader.GetString(reader.GetOrdinal("player_talk"));
            tmplist = strtmp.Split(',');
            if (tmplist.Length == 2)
            {
                data.m_PlayerTalk[0] = Convert.ToInt32(tmplist[0]);
                data.m_PlayerTalk[1] = Convert.ToInt32(tmplist[1]);
            }
            else if (tmplist.Length == 1 && tmplist[0] != "0")
            {
                data.m_PlayerTalk[0] = Convert.ToInt32(tmplist[0]);
                data.m_PlayerTalk[1] = 0;
            }

            strtmp  = reader.GetString(reader.GetOrdinal("TalkOP"));
            tmplist = strtmp.Split(';');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                TargetListInfo tli;
                tli.listid = new List <int>();
                tmplist1   = tmplist[i].Split(',');
                for (int m = 0; m < tmplist1.Length; m++)
                {
                    tli.listid.Add(Convert.ToInt32(tmplist1[m]));
                }

                rf.TalkOPMap.Add(tli);
            }

            strtmp  = reader.GetString(reader.GetOrdinal("TalkIN"));
            tmplist = strtmp.Split(';');
            for (int i = 0; i < tmplist.Length; i++)
            {
                //if (tmplist[i] == "0")
                //    continue;

                TargetListInfo tli;
                tli.listid = new List <int>();
                tmplist1   = tmplist[i].Split(',');
                for (int m = 0; m < tmplist1.Length; m++)
                {
                    tli.listid.Add(Convert.ToInt32(tmplist1[m]));
                }

                rf.TalkINMap.Add(tli);
            }


            strtmp  = reader.GetString(reader.GetOrdinal("TalkED"));
            tmplist = strtmp.Split(';');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                TargetListInfo tli;
                tli.listid = new List <int>();
                tmplist1   = tmplist[i].Split(',');
                for (int m = 0; m < tmplist1.Length; m++)
                {
                    tli.listid.Add(Convert.ToInt32(tmplist1[m]));
                }

                rf.TalkEDMap.Add(tli);
            }

            if (Convert.ToInt32(reader.GetString(reader.GetOrdinal("bGiveUp"))) == 0)
            {
                data.m_bGiveUp = false;
            }
            else
            {
                data.m_bGiveUp = true;
            }

            strtmp  = reader.GetString(reader.GetOrdinal("TalkOP_SP"));
            tmplist = strtmp.Split(';');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                TargetListInfo tli;
                tli.listid = new List <int>();
                tmplist1   = tmplist[i].Split(',');
                for (int m = 0; m < tmplist1.Length; m++)
                {
                    tli.listid.Add(Convert.ToInt32(tmplist1[m]));
                }

                rf.TalkOPSMap.Add(tli);
            }

            strtmp  = reader.GetString(reader.GetOrdinal("TalkIN_SP"));
            tmplist = strtmp.Split(';');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                TargetListInfo tli;
                tli.listid = new List <int>();
                tmplist1   = tmplist[i].Split(',');
                for (int m = 0; m < tmplist1.Length; m++)
                {
                    tli.listid.Add(Convert.ToInt32(tmplist1[m]));
                }

                rf.TalkINSMap.Add(tli);
            }

            strtmp  = reader.GetString(reader.GetOrdinal("TalkED_SP"));
            tmplist = strtmp.Split(';');
            for (int i = 0; i < tmplist.Length; i++)
            {
                if (tmplist[i] == "0")
                {
                    continue;
                }

                TargetListInfo tli;
                tli.listid = new List <int>();
                tmplist1   = tmplist[i].Split(',');
                for (int m = 0; m < tmplist1.Length; m++)
                {
                    tli.listid.Add(Convert.ToInt32(tmplist1[m]));
                }

                rf.TalkEDSMap.Add(tli);
            }

            strtmp = reader.GetString(reader.GetOrdinal("NextQuest"));
            if (strtmp != "0")
            {
                tmplist = strtmp.Split(',');
                for (int i = 0; i < tmplist.Length; i++)
                {
                    data.m_EDID.Add(Convert.ToInt32(tmplist[i]));
                }
            }

            m_RandomFieldMap.Add(data.m_ID, rf);
            m_RandMisMap.Add(data.m_ID, data);
        }
    }