Advertisement
namofure

Untitled

Apr 12th, 2025 (edited)
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.72 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Drawing;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms;
  9. using System.Collections;
  10. using System.Runtime.CompilerServices;
  11. using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button;
  12. using DQMJ2P_Randomizer.Properties;
  13.  
  14. namespace viewer_test
  15. {
  16. public partial class Form1 : Form
  17. {
  18.  
  19. public class Randomizer
  20. {
  21. public static Random random = new Random();
  22. private static List<int> RandomClasses = new List<int>();
  23.  
  24. public static RandomPrmData GenerateRandom(HashSet<int> usedClasses, RandomizerSettings Setting)
  25. {
  26. RandomPrmData RandomPrm = new RandomPrmData();
  27.  
  28. List<List<int>> TypeValues = new List<List<int>>()
  29. {
  30. new List<int> { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 },
  31. new List<int> { 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 },
  32. new List<int> { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38 },
  33. new List<int> { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 },
  34. new List<int> { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58 },
  35. new List<int> { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68 },
  36. new List<int> { 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78 },
  37. new List<int> { 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88 },
  38. };
  39.  
  40. if (checkbox1 && TypeValues.Count >= 8)
  41. {
  42. TypeValues.RemoveAt(7);
  43. }
  44. if (checkbox2)
  45. {
  46. for (int i = 0; i < TypeValues.Count; i++)
  47. {
  48. TypeValues[i].RemoveAt(TypeValues[i].Count - 1);
  49. }
  50. }
  51.  
  52. int TypeIndex = random.Next(TypeValues.Count);
  53. List<int> TypeRnage = TypeValues[TypeIndex];
  54.  
  55. List<List<int>> TaiseiValues = new List<List<int>>()
  56. {
  57. new List<int> { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 },
  58. new List<int> { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
  59. new List<int> { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27 },
  60. new List<int> { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 },
  61. new List<int> { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47 },
  62. new List<int> { 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57 },
  63. new List<int> { 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67 },
  64. new List<int> { 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77 },
  65. };
  66.  
  67.  
  68. int TaiseiIndex1 = random.Next(TaiseiValues.Count);
  69. int TaiseiIndex2 = random.Next(TaiseiValues.Count);
  70. int TaiseiIndex3 = random.Next(TaiseiValues.Count);
  71. int TaiseiIndex4 = random.Next(TaiseiValues.Count);
  72. int TaiseiIndex5 = random.Next(TaiseiValues.Count);
  73. int TaiseiIndex6 = random.Next(TaiseiValues.Count);
  74. int TaiseiIndex7 = random.Next(TaiseiValues.Count);
  75. int TaiseiIndex8 = random.Next(TaiseiValues.Count);
  76. int TaiseiIndex9 = random.Next(TaiseiValues.Count);
  77. int TaiseiIndex10 = random.Next(TaiseiValues.Count);
  78. int TaiseiIndex11 = random.Next(TaiseiValues.Count);
  79. int TaiseiIndex12 = random.Next(TaiseiValues.Count);
  80. int TaiseiIndex13 = random.Next(TaiseiValues.Count);
  81. int TaiseiIndex14 = random.Next(TaiseiValues.Count);
  82.  
  83.  
  84. List<int> TaiseiRnage1 = TaiseiValues[TaiseiIndex1];
  85. List<int> TaiseiRnage2 = TaiseiValues[TaiseiIndex2];
  86. List<int> TaiseiRnage3 = TaiseiValues[TaiseiIndex3];
  87. List<int> TaiseiRnage4 = TaiseiValues[TaiseiIndex4];
  88. List<int> TaiseiRnage5 = TaiseiValues[TaiseiIndex5];
  89. List<int> TaiseiRnage6 = TaiseiValues[TaiseiIndex6];
  90. List<int> TaiseiRnage7 = TaiseiValues[TaiseiIndex7];
  91. List<int> TaiseiRnage8 = TaiseiValues[TaiseiIndex8];
  92. List<int> TaiseiRnage9 = TaiseiValues[TaiseiIndex9];
  93. List<int> TaiseiRnage10 = TaiseiValues[TaiseiIndex10];
  94. List<int> TaiseiRnage11 = TaiseiValues[TaiseiIndex11];
  95. List<int> TaiseiRnage12 = TaiseiValues[TaiseiIndex12];
  96. List<int> TaiseiRnage13 = TaiseiValues[TaiseiIndex13];
  97. List<int> TaiseiRnage14 = TaiseiValues[TaiseiIndex14];
  98.  
  99. RandomPrm.Type1 = (byte)TypeRnage[random.Next(TypeRnage.Count)];
  100.  
  101. if (checkbox3)
  102. {
  103. int min = Setting.MinPrm;
  104. int max = Setting.MaxPrm;
  105.  
  106. if (min > max)
  107. {
  108. int temp = min;
  109. min = max;
  110. max = temp;
  111. }
  112.  
  113. RandomPrm.MAXHP = random.Next(min, max);
  114. RandomPrm.MAXMP = random.Next(min, max);
  115. RandomPrm.Attack = random.Next(min, max);
  116. RandomPrm.Defense = random.Next(min, max);
  117. RandomPrm.Speed = random.Next(min, max);
  118. RandomPrm.Inteligence = random.Next(min, max);
  119. }
  120. else
  121. {
  122. RandomPrm.MAXHP = random.Next(500, 1000);
  123. RandomPrm.MAXMP = random.Next(500, 1000);
  124. RandomPrm.Attack = random.Next(500, 1000);
  125. RandomPrm.Defense = random.Next(500, 1000);
  126. RandomPrm.Speed = random.Next(500, 1000);
  127. RandomPrm.Inteligence = random.Next(500, 1000);
  128. }
  129.  
  130. RandomPrm.Equip = (byte)random.Next(112, 255);
  131. RandomPrm.Skill = (byte)random.Next(1, 255);
  132.  
  133. if (checkbox4)
  134. {
  135. RandomPrm.GrowSpeed = 1;
  136. }
  137. else
  138. {
  139. RandomPrm.GrowSpeed = (byte)random.Next(1, 10);
  140. }
  141.  
  142.  
  143. RandomPrm.Taisei1 = (byte)TaiseiRnage1[random.Next(TaiseiRnage1.Count)];
  144. RandomPrm.Taisei2 = (byte)TaiseiRnage2[random.Next(TaiseiRnage2.Count)];
  145. RandomPrm.Taisei3 = (byte)TaiseiRnage3[random.Next(TaiseiRnage3.Count)];
  146. RandomPrm.Taisei4 = (byte)TaiseiRnage4[random.Next(TaiseiRnage4.Count)];
  147. RandomPrm.Taisei5 = (byte)TaiseiRnage5[random.Next(TaiseiRnage5.Count)];
  148. RandomPrm.Taisei6 = (byte)TaiseiRnage6[random.Next(TaiseiRnage6.Count)];
  149. RandomPrm.Taisei7 = (byte)TaiseiRnage7[random.Next(TaiseiRnage7.Count)];
  150. RandomPrm.Taisei8 = (byte)TaiseiRnage8[random.Next(TaiseiRnage8.Count)];
  151. RandomPrm.Taisei9 = (byte)TaiseiRnage9[random.Next(TaiseiRnage9.Count)];
  152. RandomPrm.Taisei10 = (byte)TaiseiRnage10[random.Next(TaiseiRnage10.Count)];
  153. RandomPrm.Taisei11 = (byte)TaiseiRnage11[random.Next(TaiseiRnage11.Count)];
  154. RandomPrm.Taisei12 = (byte)TaiseiRnage12[random.Next(TaiseiRnage12.Count)];
  155. RandomPrm.Taisei13 = (byte)TaiseiRnage13[random.Next(TaiseiRnage13.Count)];
  156. RandomPrm.Taisei14 = (byte)TaiseiRnage14[random.Next(TaiseiRnage14.Count)];
  157.  
  158.  
  159. RandomClasses.Clear();
  160. for (int i = 1; i <= 447; i++)
  161. {
  162. RandomClasses.Add(i);
  163. }
  164.  
  165. int ClassIndex = random.Next(RandomClasses.Count);
  166.  
  167. RandomPrm.Class =ClassIndex;
  168.  
  169. RandomClasses.RemoveAt(ClassIndex);
  170.  
  171. //Console.WriteLine("ClassIndex: " + Class);
  172. Console.WriteLine("RandomPrm.Class: " + RandomPrm.Class);
  173.  
  174. List<byte> TraitPool = new List<byte>();
  175. for (byte i = 1; i <= 250; i++)
  176. TraitPool.Add(i);
  177.  
  178. RandomPrm.Trait1 = ExtractRandomTrait(TraitPool);
  179. RandomPrm.Trait2 = ExtractRandomTrait(TraitPool);
  180. RandomPrm.Trait3 = ExtractRandomTrait(TraitPool);
  181. RandomPrm.Trait4 = ExtractRandomTrait(TraitPool);
  182.  
  183. return RandomPrm;
  184. }
  185.  
  186. private static byte ExtractRandomTrait(List<byte> TraitPool)
  187. {
  188. if (TraitPool.Count == 0) return 0;
  189. int index = random.Next(TraitPool.Count);
  190. byte value = TraitPool[index];
  191. TraitPool.RemoveAt(index);
  192. return value;
  193. }
  194.  
  195. public static byte[] ToByteArray(RandomPrmData RandomPrm)
  196. {
  197. List<byte> byteArray = new List<byte>();
  198.  
  199. byte[] Unknown1 = new byte[4];
  200. byte[] Unknown2 = new byte[4];
  201. byte[] Unknown3 = new byte[3];
  202. byte[] Unknown4 = new byte[20];
  203. byte[] Unknown5 = new byte[4];
  204. byte[] GrowPrm = { 0x01, 0x01, 0x01, 0x19, 0x13, 0x1A, 0x1A, 0x13, 0x19, 0x14,
  205. 0x14, 0x17, 0x10, 0x1A, 0x18, 0x18, 0x12, 0x1A, 0x1A, 0x19,
  206. 0x12, 0x15, 0x16, 0x15, 0x12, 0x15, 0x1A };
  207.  
  208. List<int> ClassList = Enumerable.Range(1, 447).ToList();
  209.  
  210. int ClassIndex = random.Next(ClassList.Count);
  211. int Class = ClassList[ClassIndex];
  212. ClassList.RemoveAt(ClassIndex);
  213.  
  214.  
  215. //byte[] Class = BitConverter.GetBytes((short)RandomPrm.Class);
  216.  
  217. random.NextBytes(Unknown1);
  218. random.NextBytes(Unknown2);
  219. random.NextBytes(Unknown3);
  220. random.NextBytes(Unknown4);
  221. random.NextBytes(Unknown5);
  222.  
  223. //byteArray.AddRange(Unknown1);
  224. byteArray.Add((byte)RandomPrm.Type1);
  225. //byteArray.Add((byte)RandomPrm.Type2);
  226. byteArray.AddRange(BitConverter.GetBytes((short)Class));
  227. //byteArray.AddRange(Unknown2);
  228. //byteArray.Add((byte)RandomPrm.Camera);
  229. //byteArray.AddRange(Unknown3);
  230. byteArray.AddRange(BitConverter.GetBytes((short)RandomPrm.MAXHP));
  231. byteArray.AddRange(BitConverter.GetBytes((short)RandomPrm.MAXMP));
  232. byteArray.AddRange(BitConverter.GetBytes((short)RandomPrm.Attack));
  233. byteArray.AddRange(BitConverter.GetBytes((short)RandomPrm.Defense));
  234. byteArray.AddRange(BitConverter.GetBytes((short)RandomPrm.Speed));
  235. byteArray.AddRange(BitConverter.GetBytes((short)RandomPrm.Inteligence));
  236. //byteArray.AddRange(Unknown4);
  237. byteArray.Add(RandomPrm.Taisei1);
  238. byteArray.Add(RandomPrm.Taisei2);
  239. byteArray.Add(RandomPrm.Taisei3);
  240. byteArray.Add(RandomPrm.Taisei4);
  241. byteArray.Add(RandomPrm.Taisei5);
  242. byteArray.Add(RandomPrm.Taisei6);
  243. byteArray.Add(RandomPrm.Taisei7);
  244. byteArray.Add(RandomPrm.Taisei8);
  245. byteArray.Add(RandomPrm.Taisei9);
  246. byteArray.Add(RandomPrm.Taisei10);
  247. byteArray.Add(RandomPrm.Taisei11);
  248. byteArray.Add(RandomPrm.Taisei12);
  249. byteArray.Add(RandomPrm.Taisei13);
  250. byteArray.Add(RandomPrm.Taisei14);
  251. byteArray.Add(RandomPrm.Equip);
  252. byteArray.Add(RandomPrm.Trait1);
  253. byteArray.Add(RandomPrm.Trait2);
  254. byteArray.Add(RandomPrm.Trait3);
  255. byteArray.Add(RandomPrm.Trait4);
  256. byteArray.Add(RandomPrm.GrowSpeed);
  257. byteArray.AddRange(GrowPrm);
  258. byteArray.Add(RandomPrm.Skill);
  259. //byteArray.AddRange(Unknown5);
  260.  
  261. return byteArray.ToArray();
  262. }
  263. }
  264.  
  265. private void button1_Click(object sender, EventArgs e)
  266. {
  267. Random random = new Random();
  268.  
  269.  
  270. int RandomOffset = 0x6994C6C;
  271.  
  272. int CombinationOffset = 0x6994400; //412
  273. int Combination2POffset = 0x6993C00; //1422
  274. int CombinationTypeOffset = 0x6994200; //348
  275.  
  276. if (string.IsNullOrEmpty(currentFilePath))
  277. {
  278. return;
  279. }
  280.  
  281. using (SaveFileDialog sfd = new SaveFileDialog())
  282. {
  283. sfd.Filter = "nds Files (*.nds)|*.nds|All Files (*.*)|*.*";
  284. sfd.FileName = Path.GetFileNameWithoutExtension(currentFilePath) + "_Randomized.nds";
  285.  
  286. if (sfd.ShowDialog() == DialogResult.OK)
  287. {
  288. string newFilePath = sfd.FileName;
  289.  
  290. // 元のファイルをコピー
  291. File.Copy(currentFilePath, newFilePath, true);
  292.  
  293. // 使用されたClassを管理するための集合
  294. HashSet<int> usedClasses = new HashSet<int>();
  295.  
  296. using (FileStream fs = new FileStream(newFilePath, FileMode.Open, FileAccess.Write))
  297. {
  298. for (int i = 1; i <= 447; i++) //447
  299. {
  300. // ランダムなPrmDataを生成
  301. RandomPrmData RandomPrm = Randomizer.GenerateRandom(usedClasses, this.Setting);
  302.  
  303. // バイトデータに変換
  304. byte[] data = Randomizer.ToByteArray(RandomPrm);
  305.  
  306. // 5 バイト目を書き込む
  307. fs.Seek(RandomOffset, SeekOrigin.Begin);
  308. fs.Seek(4, SeekOrigin.Current); // 1〜4 をスキップ
  309. fs.Write(data, 0, 1);
  310.  
  311.  
  312. // 7〜8 バイト目を書き込む
  313. fs.Seek(1, SeekOrigin.Current); // 6 をスキップ
  314. fs.Write(data, 1, 2);
  315.  
  316. // 17〜28 バイト目を書き込む
  317. fs.Seek(8, SeekOrigin.Current); // 9〜16 をスキップ
  318. fs.Write(data, 3, 12);
  319.  
  320. // 49〜96 バイト目を書き込む
  321. fs.Seek(20, SeekOrigin.Current); // 29〜48 をスキップ
  322. fs.Write(data, 15, 48);
  323.  
  324. //80byte
  325. RandomOffset += 100;
  326. }
  327.  
  328. for (int i = 1; i <= 103; i++) //Combination
  329. {
  330. fs.Seek(CombinationOffset, SeekOrigin.Begin);
  331. fs.WriteByte(0x1E);
  332. fs.WriteByte(0x00);
  333. fs.WriteByte(0x27);
  334. fs.WriteByte(0x00);
  335. CombinationOffset += 1;
  336. }
  337.  
  338. for (int i = 1; i <= 237; i++) //Combination2P
  339. {
  340. byte[] RandomCombination = new byte[6];
  341. int DescendantIndex = 0x150;
  342. int Ancestor1Index = random.Next(1, 447);
  343. int Ancestor2Index = random.Next(1, 447);
  344.  
  345. byte[] Descendants = BitConverter.GetBytes((ushort)DescendantIndex);
  346. byte[] Ancestor1 = BitConverter.GetBytes((ushort)Ancestor1Index);
  347. byte[] Ancestor2 = BitConverter.GetBytes((ushort)Ancestor2Index);
  348.  
  349. Array.Copy(Descendants, 0, RandomCombination, 0, 2);
  350. Array.Copy(Ancestor1, 0, RandomCombination, 2, 2);
  351. Array.Copy(Ancestor2, 0, RandomCombination, 4, 2);
  352.  
  353. fs.Seek(Combination2POffset, SeekOrigin.Begin);
  354. fs.Write(RandomCombination, 0, 6);
  355. Combination2POffset += 6;
  356.  
  357. }
  358.  
  359. for (int i = 1; i <= 57; i++) //CombinationType
  360. {
  361. byte[] RandomCombination = new byte[6];
  362. int DescendantIndex = random.Next(1, 447);
  363. int Ancestor1Index = random.Next(1, 447);
  364. int Ancestor2Index = random.Next(1, 8);
  365.  
  366. byte[] Descendants = BitConverter.GetBytes((ushort)DescendantIndex);
  367. byte[] Ancestor1 = BitConverter.GetBytes((ushort)Ancestor1Index);
  368. byte[] Ancestor2 = BitConverter.GetBytes((ushort)Ancestor2Index);
  369.  
  370. Array.Copy(Descendants, 0, RandomCombination, 0, 2);
  371. Array.Copy(Ancestor1, 0, RandomCombination, 2, 2);
  372. Array.Copy(Ancestor2, 0, RandomCombination, 4, 2);
  373.  
  374. fs.Seek(CombinationTypeOffset, SeekOrigin.Begin);
  375. fs.Write(RandomCombination, 0, 6);
  376. CombinationTypeOffset += 6;
  377. }
  378.  
  379. }
  380. }
  381. }
  382.  
  383. }
  384. }
  385. }
  386.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement