Beispiel #1
0
        /// <summary>
        /// BCKファイルにエディタのデータを書き込む<br/>
        /// <remarks>Write(<param name="filepath">対象のファイルのパス</param>)</remarks>
        /// </summary>
        /// <returns>なし</returns>
        public void Write(string filepath)
        {
            FileStream   fs = new FileStream(filepath, FileMode.Create);
            BinaryWriter bw = new BinaryWriter(fs);

            //J3Dヘッダー書き込み
            bw.Write(Encoding.ASCII.GetBytes("J3D1"));
            bw.Write(Encoding.ASCII.GetBytes("bck1"));
            bw.Write(CS.StringToBytes((0).ToString("X8"))); //チャンクサイズ
            bw.Write(CS.StringToBytes((1).ToString("X8"))); //chunc count 1固定
            bw.Write(BitConverter.GetBytes(0xFFFFFFFF));    //padding 16byte すべてFF 固定
            bw.Write(BitConverter.GetBytes(0xFFFFFFFF));
            bw.Write(BitConverter.GetBytes(0xFFFFFFFF));
            bw.Write(BitConverter.GetBytes(0xFFFFFFFF));

            //チャンクヘッダー位置を保存
            int Ank1_pos = Convert.ToInt32(fs.Position);

            //ANK1ヘッダー書き込み
            bw.Write(Encoding.ASCII.GetBytes("ANK1"));
            bw.Write(BitConverter.GetBytes(0x00000000));
            bw.Write(CS.StringToByte(Txt_Roop_Mode.Text));                 //roopmode
            bw.Write(CS.StringToByte(Txt_Rot_Frac.Text));                  //rotfrac
            bw.Write(CS.StringToShort_byte(Txt_Total_Frame.Text));         //フレーム数
            bw.Write(CS.StringToShort_byte(Txt_Bone_Num.Text));            //ボーン数
            bw.Write(CS.StringToShort_byte((dgv2.Rows.Count).ToString())); //sca count
            bw.Write(CS.StringToShort_byte((dgv3.Rows.Count).ToString())); //rot count
            bw.Write(CS.StringToShort_byte((dgv4.Rows.Count).ToString())); //tra count
            bw.Write(CS.StringToBytes((0x40).ToString("X8")));             //anim offset
            bw.Write(BitConverter.GetBytes(0x00000000));                   //sca offset
            bw.Write(BitConverter.GetBytes(0x00000000));                   //rot offsett
            bw.Write(BitConverter.GetBytes(0x00000000));                   //tra offsett
            bw.Write(Encoding.ASCII.GetBytes("Made by Penguin Made by J3DB"));

            //BCK_Systemクラスのインスタンス作成
            BCK_System bcksys = new BCK_System();

            //アニメーションテーブルを書き込む
            bcksys.Anim_Writer(bw);

            //パディングを書き込む
            bcksys.Padding_Writer(bw, fs.Position);

            //スケールテーブルを書き込む
            int scale_pos = Convert.ToInt32(fs.Position);

            bcksys.Scale_Trans_Writer(bw, dgv2, "Scale_Value");

            //パディングを書き込む
            bcksys.Padding_Writer(bw, fs.Position);

            //ローテーションテーブルの書き込みと設定
            bcksys.Mode_Checker((Int16.Parse(Txt_Bone_Num.Text)), 1, false);
            int rotation_pos = Convert.ToInt32(fs.Position);

            bcksys.Rotate_Writer(bw, dgv3, "Rotation_Value");
            bcksys.Mode_Checker((Int16.Parse(Txt_Bone_Num.Text)), 1, true);

            //パディングを書き込む
            bcksys.Padding_Writer(bw, fs.Position);

            //トランスレートテーブルの書き込み
            int trans_pos = Convert.ToInt32(fs.Position);

            bcksys.Scale_Trans_Writer(bw, dgv4, "Translation_Value");

            //パディングを書き込み
            bcksys.Padding_Writer(bw, fs.Position);

            //チャンク末尾を記録
            int Ank_Last = Convert.ToInt32(fs.Position);

            //追記
            bw.Seek(0x8, SeekOrigin.Begin);
            bw.Write(CS.StringToBytes((Ank_Last).ToString("X8")));

            bw.Seek(0x38, SeekOrigin.Begin);
            bw.Write(CS.StringToBytes((scale_pos - Ank1_pos).ToString("X8")));

            bw.Seek(0x3C, SeekOrigin.Begin);
            bw.Write(CS.StringToBytes((rotation_pos - Ank1_pos).ToString("X8")));

            bw.Seek(0x40, SeekOrigin.Begin);
            bw.Write(CS.StringToBytes((trans_pos - Ank1_pos).ToString("X8")));

            //書き込みの終了処理
            bw.Close();
            fs.Close();

            //ステータスバー設定
            tssl2.Text = Path.GetFileName(filepath) + "を保存しました";
        }
Beispiel #2
0
        /// <summary>
        /// BCKファイルを読み込む<br/>
        /// <remarks>Reader(<param name="filepath">対象のファイルのパス</param>)</remarks>
        /// </summary>
        ///
        /// <returns>なし</returns>
        public void Reader(string filepath)
        {
            //初期化
            dgv1.Rows.Clear();
            dgv2.Rows.Clear();
            dgv3.Rows.Clear();
            dgv4.Rows.Clear();
            debugnum = 0;

            //★処理開始

            //★バイナリ読み込み
            FileStream   fs = new FileStream(filepath, FileMode.Open);
            BinaryReader br = new BinaryReader(fs);

            //★J3Dヘッダー
            Magic_1     = CS.Byte2Char(br);
            Magic_2     = CS.Byte2Char(br);
            File_Size   = CS.Byte2Int(br);
            Chunk_Count = CS.Byte2Int(br);
            Subversion  = CS.Byte2Char(br);
            padding     = CS.Byte2Char(br, 12);

            //★ANK1ヘッダー
            Chunk_Type                  = CS.Byte2Char(br);
            Anim_Size                   = CS.Byte2Int(br);
            Roop_Mode                   = CS.Byte2Int(br, 1);
            Rotation_Frac               = CS.Byte2Int(br, 1);
            Frame_Num                   = CS.Byte2Int(br, 2);
            Bone_Num                    = CS.Byte2Int(br, 2);
            Scale_Table_Count           = CS.Byte2Int(br, 2);
            Rotation_Table_Count        = CS.Byte2Int(br, 2);
            Translation_Table_Count     = CS.Byte2Int(br, 2);
            Animation_Data_Table_Offset = CS.Byte2Int(br);
            Scale_Table_Offset          = CS.Byte2Int(br);
            Rotation_Table_Offset       = CS.Byte2Int(br);
            Translation_Table_Offset    = CS.Byte2Int(br);
            Padding_Data_1              = CS.Byte2Char(br, 28);

            //★値をテキストボックスに
            Txt_Roop_Mode.Text   = Roop_Mode.ToString();
            Txt_Bone_Num.Text    = Bone_Num.ToString();
            Txt_Rot_Frac.Text    = Rotation_Frac.ToString();
            Txt_Total_Frame.Text = Frame_Num.ToString();


            //☆デバッガー
            //☆j3d
            Debugger.Append("マジック1:" + Magic_1);
            Debugger.Append("\r\n" + "マジック2:" + Magic_2);
            Debugger.Append("\r\n" + "ファイルサイズ:" + File_Size);
            Debugger.Append("\r\n" + "チャンクカウント:" + Chunk_Count);
            Debugger.Append("\r\n" + "サブバージョン:" + Subversion);
            Debugger.Append("\r\n" + "パディング:" + padding);
            //☆ank1
            Debugger.Append("\r\n" + "チャンクタイプ:" + Chunk_Type);
            Debugger.Append("\r\n" + "アニメーションサイズ:" + Anim_Size);
            Debugger.Append("\r\n" + "ループモード:" + Roop_Mode);
            Debugger.Append("\r\n" + "回転フラク?:" + Rotation_Frac);
            Debugger.Append("\r\n" + "フレーム数:" + Frame_Num);
            Debugger.Append("\r\n" + "ボーン数:" + Bone_Num);
            Debugger.Append("\r\n" + "スケールテーブルカウント:" + Scale_Table_Count);
            Debugger.Append("\r\n" + "ローテーションテーブルカウント:" + Rotation_Table_Count);
            Debugger.Append("\r\n" + "トランスレートテーブルカウント:" + Translation_Table_Count);
            Debugger.Append("\r\n" + "アニメーションオフセット:" + Animation_Data_Table_Offset);
            Debugger.Append("\r\n" + "スケールテーブルオフセット:" + Scale_Table_Offset);
            Debugger.Append("\r\n" + "ローテーションテーブルオフセット:" + Rotation_Table_Offset);
            Debugger.Append("\r\n" + "トランスレートテーブルオフセット:" + Translation_Table_Offset);
            Debugger.Append("\r\n" + "paddingdata:" + Padding_Data_1);

            //★BCKクラスインスタンス作成
            BCK_System bcksys = new BCK_System();

            //★アニメーショングリッドに書き込み
            bcksys.Animation_Table_File_Reader(br);

            //★パディング2
            bcksys.Padding(br, fs.Position);

            //★スケールテーブルグリッドに書き込み
            for (int l = 0; l < Scale_Table_Count; l++)
            {
                dgv2.Rows.Add(l, string.Format("{0:0.##########}", CS.FromHexString(br)));
                //dgv2.Rows.Add(l, string.Format("{0:F}", CS.Byte2Float(br)));
            }
            //bcksys.Mode_Checker(Bone_Num, 0, true);
            bcksys.Mode_Checker(Bone_Num, 0, true, true);

            //★パディング3
            bcksys.Padding(br, fs.Position);

            //★ローテーションテーブルグリッドに書き込み
            for (int l = 0; l < Rotation_Table_Count; l++)
            {
                dgv3.Rows.Add(l, string.Format("{0}", CS.Byte2Short_noPI(br)));
            }

            bcksys.Mode_Checker(Bone_Num, 1, true);
            bcksys.Mode_Checker(Bone_Num, 1, true, true);

            //★パディング4
            bcksys.Padding(br, fs.Position);

            //★トランスレートテーブルグリッドに書き込み
            for (int l = 0; l < Translation_Table_Count; l++)
            {
                dgv4.Rows.Add(l, string.Format("{0:0.##########}", CS.Byte2Float(br)));
            }
            bcksys.Mode_Checker(Bone_Num, 2, true, true);

            //★パディング5
            bcksys.Padding(br, fs.Position);

            //★ファイルストリーム、バイナリリード終了
            fs.Close();
            br.Close();

            //ステータスバー設定
            tssl2.Text = Path.GetFileName(filepath) + "を開きました";
        }