private void EggList_search() { int min = (int)n_min.Value; int max = (int)n_max.Value; uint[] st = { (uint)L_status0a.Value, (uint)L_status1a.Value, (uint)L_status2a.Value, (uint)L_status3a.Value, }; uint[] status = { st[0], st[1], st[2], st[3] }; var tiny = new TinyMT(status, new TinyMTParameter(0x8f7011ee, 0xfc78ff1f, 0x3793fdff)); List <DataGridViewRow> list = new List <DataGridViewRow>(); L_dataGridView.Rows.Clear(); var rng = getRNGSettings(); int frameCount = 0; for (int i = 1; i <= max; i++) { //statusの更新 tiny.status.CopyTo(st, 0); EggRNGSearch.EggRNGResult result = rng.Generate(st); int ctr = result.FramesUsed; result.FramesUsed = frameCount; frameCount += ctr; if (i >= min) { var row = getRow(i, rng, result, L_dataGridView); list.Add(row); } // Continue adjacents rng.tiny.status.CopyTo(tiny.status, 0); } L_dataGridView.Rows.AddRange(list.ToArray()); L_dataGridView.CurrentCell = null; }
private void search() { int min = (int)s_min.Value; int max = (int)s_max.Value; uint[] st = { (uint)status0.Value, (uint)status1.Value, (uint)status2.Value, (uint)status3.Value, }; uint[] status = { st[0], st[1], st[2], st[3] }; var tiny = new TinyMT(status, new TinyMTParameter(0x8f7011ee, 0xfc78ff1f, 0x3793fdff)); List <DataGridViewRow> list = new List <DataGridViewRow>(); k_dataGridView.Rows.Clear(); var setting = getSettings(); var rng = getRNGSettings(); for (int i = 0; i < min; i++) { tiny.nextState(); } for (int i = min; i <= max; i++, tiny.nextState()) { //statusの更新 tiny.status.CopyTo(st, 0); EggRNGSearch.EggRNGResult result = rng.Generate(st); if (!frameMatch(result, setting)) { continue; } list.Add(getRow(i, rng, result, k_dataGridView)); } k_dataGridView.Rows.AddRange(list.ToArray()); k_dataGridView.CurrentCell = null; }
public EggRNGResult Generate(uint[] seed) { tiny = new TinyMT(seed, new TinyMTParameter(0x8f7011ee, 0xfc78ff1f, 0x3793fdff)); EggRNGResult egg = new EggRNGResult(); seed.CopyTo(egg.Seed, 0); FramesUsed = 0; // Reset Frame Counter //最初の消費 Initial Consumption egg.row_r = getRand(); //性別 Gender if (GenderRandom) { egg.Gender = getRand() % 252 >= GenderRatio ? 0 : 1; } else if (GenderMale) { egg.Gender = 0; } else if (GenderFemale) { egg.Gender = 1; } else { egg.Gender = 2; } //性格 -- Nature egg.Nature = (int)(getRand() % 25); //両親変わらず -- Both_Everstone //Chooses which parent if necessary; users should not intermix with Power items either. if (Both_Everstone) { egg.BE_InheritParents = (int)(getRand() & 1); } //特性 -- Ability egg.Ability = getRandomAbility(ParentAbility, getRand() % 100); egg.InheritStats = new uint[InheritIVs]; egg.InheritParents = new uint[InheritIVs]; //両親パワー系 -- Both_PowerItem //Chooses which parent if necessary if (Both_PowerItems) { egg.InheritParents[0] = (getRand() & 1) == 0 ? (uint)0 : 1; egg.InheritStats[0] = egg.InheritParents[0] == 0 ? (uint)MalePowerStat : (uint)FemalePowerStat; } else if (PowerItems) { egg.InheritParents[0] = MalePowerStat > -1 ? (uint)0 : 1; egg.InheritStats[0] = egg.InheritParents[0] == 0 ? (uint)MalePowerStat : (uint)FemalePowerStat; } //遺伝箇所 -- IV Inheritance for (int i = 0; i < InheritIVs; i++) { if ((i == 0) && PowerItems) { continue; } repeat: egg.InheritStats[i] = getRand() % 6; // Scan for duplicate IV for (int k = 0; k < i; k++) { if (egg.InheritStats[k] == egg.InheritStats[i]) { goto repeat; } } egg.InheritParents[i] = getRand() & 1; } //基礎個体値 -- Base IVs for (int j = 0; j < 6; j++) { egg.BaseIV[j] = (int)(getRand() & 0x1F); } egg.InheritIVs(pre_parent, post_parent); //暗号化定数 -- Encryption Constant egg.EC = getRand(); //性格値判定 -- PID Rerolls for (int i = PIDRerolls; i > 0; i--) { egg.PID = getRand(); egg.PSV = ((egg.PID >> 16) ^ (egg.PID & 0xFFFF)) >> 4; if (!SearchOtherTSV && ConciderTSV && egg.PSV == TSV) { egg.Shiny = true; break; } } //ボール消費 -- Ball Inheritance if (Homogeneous) // Same Species (no Ditto) { egg.Ball = getRand() % 100 >= 50 ? 0 : 1; } //something getRand(); egg.FramesUsed = FramesUsed; return(egg); }