private void BaseCoatButton_Click(object sender, EventArgs e) { for (uint j = 29; j >= 1 && j <= 29; j--) //Shift all mem back one { Vertex.OriginalVertexMem[j] = Vertex.OriginalVertexMem[j - 1]; } Vertex.OriginalVertexMem[0] = new UInt32[Vertex.CurrentVertexList.Length][]; //Set up new undo level with all combos for (uint i = 0; i < Vertex.CurrentVertexList.Length; i++) { Vertex.OriginalVertexMem[0][i] = new UInt32[2]; uint currentVTX = Vertex.CurrentVertexList[i]; Vertex.OriginalVertexMem[0][i][0] = currentVTX + 12; var BinAndAddr = BinManager.AttainCorrectBin(currentVTX); Vertex.OriginalVertexMem[0][i][1] = BinAndAddr.Item1.ReadFourBytes(BinAndAddr.Item2 + 12); //Initial RGBA } byte R = (byte)Math.Round(RedNum.Value * ((decimal)Brightness.Value / 100)); byte G = (byte)Math.Round(GreenNum.Value * ((decimal)Brightness.Value / 100)); byte B = (byte)Math.Round(BlueNum.Value * ((decimal)Brightness.Value / 100)); byte A = (byte)AlphaNum.Value; UInt32 colour = (uint)((R << 24) | (G << 16) | (B << 8) | A); for (int i = 0; i < Vertex.CurrentVertexList.Length; i++) { var BinAndAddr = BinManager.AttainCorrectBin(Vertex.CurrentVertexList[i]); BinManager.SetVertRGBA(BinAndAddr.Item1, BinAndAddr.Item2, colour, AlphaOnlyCheckbox.Checked); } }
void RenderPanel_KeyDown(object sender, KeyEventArgs e) { keystate = Keyboard.GetState(); switch (e.KeyCode) { case Keys.Z: if (!keystate[Key.ControlLeft] || Vertex.OriginalVertexMem[0] == null) { break; } for (int j = 29; j > 0; j--) { Vertex.EditedVertexMem[j] = Vertex.EditedVertexMem[j - 1]; } //shift all mem back one (make room for redo) Vertex.EditedVertexMem[0] = new UInt32[Vertex.OriginalVertexMem[0].Length][]; for (int i = 0; i < Vertex.EditedVertexMem[0].Length; i++) { Vertex.EditedVertexMem[0][i] = new UInt32[2]; } //set new space to this undo for (uint i = 0; i < Vertex.OriginalVertexMem[0].Length; i++) { uint OriginalVTXValue = Vertex.OriginalVertexMem[0][i][0]; Vertex.EditedVertexMem[0][i][0] = OriginalVTXValue; var BinAndAddr = BinManager.AttainCorrectBin(OriginalVTXValue); Vertex.EditedVertexMem[0][i][1] = BinAndAddr.Item1.ReadFourBytes(BinAndAddr.Item2); //Write @ addr this colour for all addr+rgba in collection } for (uint i = 0; i < Vertex.OriginalVertexMem[0].Length; i++) { var BinAndAddr = BinManager.AttainCorrectBin(Vertex.OriginalVertexMem[0][i][0]); BinAndAddr.Item1.WriteFourBytes(BinAndAddr.Item2, Vertex.OriginalVertexMem[0][i][1]); //Write @ addr this colour for all addr+rgba in collection } for (uint i = 0; i < 29; i++) { Vertex.OriginalVertexMem[i] = Vertex.OriginalVertexMem[i + 1]; } //Shift all mem forward one (forget the undo) break; case Keys.Y: if (!keystate[Key.ControlLeft] || Vertex.EditedVertexMem[0] == null) { break; } for (int j = 29; j > 0; j--) { Vertex.OriginalVertexMem[j] = Vertex.OriginalVertexMem[j - 1]; } //Shift all mem back one (make room for undo) Vertex.OriginalVertexMem[0] = new UInt32[Vertex.EditedVertexMem[0].Length][]; for (int i = 0; i < Vertex.OriginalVertexMem[0].Length; i++) { Vertex.OriginalVertexMem[0][i] = new UInt32[2]; } //set new space to this undo for (uint i = 0; i < Vertex.EditedVertexMem[0].Length; i++) { uint EditedVTXAddr = Vertex.EditedVertexMem[0][i][0]; Vertex.OriginalVertexMem[0][i][0] = EditedVTXAddr; var BinAndAddr = BinManager.AttainCorrectBin(EditedVTXAddr); Vertex.OriginalVertexMem[0][i][1] = BinAndAddr.Item1.ReadFourBytes(BinAndAddr.Item2); //Write @ addr this colour for all addr+rgba in collection } for (uint i = 0; i < Vertex.EditedVertexMem[0].Length; i++) { var BinAndAddr = BinManager.AttainCorrectBin(Vertex.EditedVertexMem[0][i][0]); BinAndAddr.Item1.WriteFourBytes(BinAndAddr.Item2, Vertex.EditedVertexMem[0][i][1]); //Write @ addr this colour for all addr+rgba in collection } for (uint i = 0; i < 29; i++) { Vertex.EditedVertexMem[i] = Vertex.EditedVertexMem[i + 1]; } //Shift all mem forward one (forget the redo) break; case Keys.S: if (!keystate[Key.ControlLeft] || BinNullCheck()) { break; } Cursor.Current = Cursors.WaitCursor; File.WriteAllBytes(currentMainBinPath, BinManager.MainBin.getCurrentBin()); //Ctrl+S to save if (!AlphaBinNullCheck()) { File.WriteAllBytes(currentMainBinPath, BinManager.MainBin.getCurrentBin()); //Ctrl+S to save } StatusLabel.Text = "ROM Saved to " + currentMainBinPath; Cursor.Current = Cursors.Default; break; case Keys.O: if (!keystate[Key.ControlLeft]) { break; } if (!keystate[Key.LShift]) { OpenMainBin(sender, e); //Ctrl+O to open } else if (!BinNullCheck()) { OpenAlphaBin(sender, e); //if ctrl shift is held, it will open alpha bin } break; case Keys.R: if (!keystate[Key.ControlLeft] || BinNullCheck()) { break; } ReloadMainBin(); //Ctrl+O to open if (!AlphaBinNullCheck()) { ReloadAlphaBin(); } break; } }