static void Main(string[] args) { Console.WriteLine("----- DigiMaster .INA animation generator -----\n"); InaProp prop = GetInitialInfo(); Console.WriteLine($"[+] Creating file: {prop.file_name}.ina"); MemoryStream stream = new MemoryStream(); BinaryWriter bw = new BinaryWriter(stream, Encoding.UTF8); WriteFileHeader(bw, prop); WriteFileContent(bw, prop); // get stream size int streamLen = (int)bw.BaseStream.Length; byte[] buffer = stream.GetBuffer(); Array.Resize(ref buffer, streamLen); Console.WriteLine("Stream len: " + buffer.Length); // write buffer in file string base_dir = Directory.GetCurrentDirectory(); File.WriteAllBytes(base_dir + @"\" + prop.file_name + ".ina", buffer); // close stream & binaryWriter bw.Close(); stream.Close(); // wait for exit this current process Process.GetCurrentProcess().WaitForExit(); }
private static InaProp GetInitialInfo() { Console.Write("Digite o nome do arquivo: "); string file_name = Console.ReadLine(); if (!IsInputFileNameIsValid(file_name)) { Console.WriteLine("[-] Nome de arquivo invalido, ou já existente!"); Console.Read(); Environment.Exit(0); } Console.Write("Nº iddle frames: "); int iddle_frames = int.Parse(Console.ReadLine()); Console.Write("Nº walk frames: "); int walk_frames = int.Parse(Console.ReadLine()); Console.Write("Nº attack frames: "); int attack_frames = int.Parse(Console.ReadLine()); Console.Write("Nº defense frames: "); int defense_frames = int.Parse(Console.ReadLine()); Console.Write("Nº deathing frames: "); int deathing_frames = int.Parse(Console.ReadLine()); Console.Write("Nº death frames: "); int death_frames = int.Parse(Console.ReadLine()); InaProp prop = new InaProp(); prop.file_name = file_name; prop.iddle_frames = iddle_frames; prop.walk_frames = walk_frames; prop.attack_frames = attack_frames; prop.defense_frames = defense_frames; prop.deathing_frames = deathing_frames; prop.death_frames = death_frames; return(prop); }
private static void WriteFileContent(BinaryWriter bw, InaProp prop) { int current_frame = 0; for (int i = 0; i < ANIMATIONS_COUNT; i++) { // write current animation index bw.Write((int)i); // write current animation length bw.Write((int)prop.getAnimationLength(i)); // write allowed faces in the current animation int[] allowedFaces = prop.getAllowDirByAnimation(i); for (int j = 0; j < allowedFaces.Length; j++) { bw.Write((int)allowedFaces[j]); } // write all animation data int IsNextFrame = prop.getRangeAnim(i); int currentCounter = 0; for (int j = 0; j < prop.getAnimationLength(i); j++) { // write unknow data short[] unk = new short[5]; for (int k = 0; k < unk.Length; k++) { unk[k] = -1; bw.Write((short)unk[k]); } // write animation in layers for (int k = 0; k < MAX_LAYERS; k++) { for (int kk = 0; kk < 8; kk++) { if (k == LAYER_ACTIVE_NUM) { bw.Write((byte)1); } else { bw.Write((byte)0); } } if (k != LAYER_ACTIVE_NUM) { bw.Write((short)-1); bw.Write((byte)0); bw.Write((byte)0); bw.Write((byte)0); bw.Write((byte)0); bw.Write((byte)0); } else { bw.Write((short)current_frame); // current frame bw.Write((byte)0); bw.Write((byte)0); bw.Write((byte)0); bw.Write((byte)0); bw.Write((byte)32); currentCounter++; if (currentCounter >= IsNextFrame) { current_frame++; currentCounter = 0; } } } } } }
private static void WriteFileHeader(BinaryWriter bw, InaProp prop) { bw.Write((UInt32)268435457); // write layers_active for (int i = 0; i < MAX_LAYERS; i++) { if (i == LAYER_ACTIVE_NUM) { bw.Write((byte)1); } else { bw.Write((byte)0); } } // write layers_info for (int i = 0; i < MAX_LAYERS; i++) { if (i == LAYER_ACTIVE_NUM) { byte[] layer_use = getLayerInUse(prop.file_name); bw.Write(layer_use); } else { byte[] layer_empty = getLayerEmpty(); bw.Write(layer_empty); } } // write total frames per direction // total_frames = iddle + walk + attack + defense + deathing + death for (int i = 0; i < MAX_LAYERS; i++) { if (i == LAYER_ACTIVE_NUM) { bw.Write((int)prop.getTotalFrames()); } else { bw.Write((int)0); } } // write animations qnt bw.Write((int)ANIMATIONS_COUNT); // write direct faces in animation qnt bw.Write((int)DIRECTIONS_MAX_COUNT); // write faces count by layers count for (int i = 0; i < MAX_LAYERS; i++) { if (i == LAYER_ACTIVE_NUM) { bw.Write((int)DEFAULT_DIRECTION_COUNT); } else { bw.Write((int)0); } } }