public Form1() { Form = this; InitializeComponent(); _upnp = new UPnPWrapper(); _upnp.Available += UpnpOnAvailable; if (_upnp.UPnPAvailable) { UpnpOnAvailable(_upnp, EventArgs.Empty); } _upnp.Initialize(); //if Patches does not exist, make it! Directory.CreateDirectory(PATCHES_DIR); string[] fileEntries = Directory.GetFiles(PATCHES_DIR); foreach (var file in fileEntries) { string fileName = Path.GetFileName(file); //file is the full path of the file, fileName is only the file's name (with extension) string ressourcesParallel = RESSOURCES_DIR + fileName; byte[] buffer = File.ReadAllBytes(file); //this version allows overwriting existing files in Ressources. Not uncommenting just in case this method is unfavored. //File.Copy(file, ressourcesParallel, true); if (File.Exists(ressourcesParallel)) { File.Delete(ressourcesParallel); } for (int i = 0; i < buffer.Length; i += 4) { byte[] newBuffer = buffer.Skip(i).Take(4).ToArray(); newBuffer = newBuffer.Reverse().ToArray(); using (var fs = new FileStream(ressourcesParallel, FileMode.OpenOrCreate, FileAccess.Write)) { fs.Seek(i, SeekOrigin.Current); fs.Write(newBuffer, 0, newBuffer.Length); } } } //moving this outside so we don't read the bans file for every file in the patches directory! if (File.Exists(BANDS_FILE)) { foreach (var line in File.ReadAllLines(BANDS_FILE)) { _bands += line + " "; } } // TODO: Change this according to OS _memory = new WindowsEmulatorAccessor(); this.Text = "Net64 Tool v" + Form1.MAJOR_VERSION + "." + Form1.MINOR_VERSION + " Hotfix"; }
public ServerConnection(string address, string port, IEmulatorAccessor memory, Form1 gui) { _ws = new WebSocket("ws://" + address + ":" + port); _gui = gui; _memory = memory; _ws.OnMessage += (sender, e) => { onMessage(e); }; _ws.OnOpen += (sender, e) => { //Console.WriteLine("Connected"); _gui.AddChatMessage("[SERVER]", "Connected"); byte[] payload = new byte[Form1.HANDSHAKE_LENGTH]; payload[0] = (byte)PacketType.Handshake; payload[1] = (byte)Form1.COMPAT_MAJOR_VERSION; payload[2] = (byte)Form1.COMPAT_MINOR_VERSION; payload[3] = (byte)_gui.GetCharacter(); string username = _gui.GetUsername(); if (string.IsNullOrWhiteSpace(username)) { username = getRandomUsername(); _gui.SetUsername(username); } byte[] usernameBytes = Encoding.ASCII.GetBytes(username); int len = usernameBytes.Length; if (len > 24) // Arbitrary max length { len = 24; } payload[4] = (byte)len; Array.Copy(usernameBytes, 0, payload, 5, len); _ws.Send(payload); SetMessage("connected"); }; _ws.OnError += (sender, e) => { MessageBox.Show(null, e.Message + "\n\n" + e.Exception, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); }; _ws.OnClose += (sender, e) => { _memory.WriteMemory(0x365FFC, new byte[1], 1); _gui.AddChatMessage("[SERVER]", "Disconnected"); SetMessage("disconnected"); MessageBox.Show(null, "Server closed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); }; _ws.Connect(); }
public static void setCharacter(string character, IEmulatorAccessor mem) { if (character == "Mario") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x01 }, 1); } if (character == "Luigi") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x02 }, 1); } if (character == "Yoshi") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x03 }, 1); } if (character == "Wario") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x04 }, 1); } if (character == "Peach") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x05 }, 1); } if (character == "Toad") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x06 }, 1); } if (character == "Waluigi") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x07 }, 1); } if (character == "Rosalina") { //int bytesWritten = 0; mem.WriteMemory(0x365FF3, new byte[] { 0x08 }, 1); } }
public static void setMessage(string msg, IEmulatorAccessor mem) { //int bytesWritten = 0; byte[] buffer = Encoding.ASCII.GetBytes(msg.Where(isPrintable).ToArray()); byte[] newArray = new byte[buffer.Length + 4]; buffer.CopyTo(newArray, 0); for (int i = 0; i < newArray.Length; i += 4) { byte[] newBuffer = newArray.Skip(i).Take(4).ToArray(); newBuffer = newBuffer.Reverse().ToArray(); mem.WriteMemory(0x367684 + i, newBuffer, newBuffer.Length); } byte[] overWriteBuffer = new byte[] { 0x00, 0x00, 0x00, 0x00 }; //overWriteBuffer = overWriteBuffer.Reverse().ToArray(); mem.WriteMemory(0x367680, overWriteBuffer, overWriteBuffer.Length); }
public static void setCharacterAll(int character, IEmulatorAccessor mem) { mem.WriteMemory(0x365FF3, new byte[] { (byte)character }, 1); }