#NoTrayIcon FileEncoding, UTF-8-RAW #SingleInstance OFF SetBatchLines, -1 SetFormat, float, 0.99 file_path = %1% Loop { if (file_path == "") { default_path := GetDefaultPath() FileSelectFile, file_path, 3, %default_path%, .mateファイルを選択してください, マテリアルファイル(*.mate) } if (ErrorLevel == 1) { ExitApp } if (FileExist(file_path) == "") { Msgbox, ファイルが存在しません file_path := "" } else { break } } file := FileOpen(file_path, "r") if (file.Read(file.ReadChar()) != "CM3D2_MATERIAL") { MsgBox, これはカスタムメイド3D2のマテリアルファイルではありません ExitApp } version := file.ReadInt() value1 := ReadString(file) value2 := ReadString(file) value3 := ReadString(file) value4 := ReadString(file) tex_data := Object() col_data := Object() f_data := Object() Loop { type := ReadString(file) if (type == "end") { break } else if (type == "tex") { pos := GetMaxIndex(tex_data) + 1 tex_data[pos, 1] := ReadString(file) tex_data[pos, 2] := ReadString(file) if (tex_data[pos, 2] == "tex2d") { tex_data[pos, 3] := ReadString(file) tex_data[pos, 4] := ReadString(file) tex_data[pos, 5, 1] := file.ReadFloat() tex_data[pos, 5, 2] := file.ReadFloat() tex_data[pos, 5, 3] := file.ReadFloat() tex_data[pos, 5, 4] := file.ReadFloat() } } else if (type == "col") { pos := GetMaxIndex(col_data) + 1 col_data[pos, 1] := ReadString(file) col_data[pos, 2, 1] := file.ReadFloat() if (col_data[pos, 2, 1] != "null") { col_data[pos, 2, 2] := file.ReadFloat() col_data[pos, 2, 3] := file.ReadFloat() col_data[pos, 2, 4] := file.ReadFloat() } else { col_data[pos, 2, 2] := "" col_data[pos, 2, 3] := "" col_data[pos, 2, 4] := "" } } else if (type == "f") { pos := GetMaxIndex(f_data) + 1 f_data[pos, 1] := ReadString(file) f_data[pos, 2] := file.ReadFloat() } else { MsgBox, 未知のデータがありました(%type%)`n終了します ExitApp } } file.Close() SplitPath, file_path, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive Gui, Add, Text, xm0 ym0 W450, %A_Space%%OutFileName% Gui, Add, Text, x+0 yp+0 W100 H20, %A_Space%%A_Space%ファイルバージョン Gui, Add, Edit, x+0 yp+0 W50 H20 VVversion, %version% Gui, Add, Text, xm0 y+0 W50 H20, %A_Space%%A_Space%値1 Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue1, %value1% Gui, Add, Text, x+0 yp+0 W50 H20, %A_Space%%A_Space%値2 Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue2, %value2% Gui, Add, Text, xm0 y+0 W50 H20, %A_Space%%A_Space%値3 Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue3, %value3% Gui, Add, Text, x+0 yp+0 W50 H20, %A_Space%%A_Space%値4 Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue4, %value4% Gui, Add, Text, xm0 y+5 W50, %A_Space%%A_Space%texture Gui, Add, TreeView, xm0 y+0 W550 H200 -ReadOnly VVtex_data size := GetMaxIndex(tex_data) Loop, %size% { parent := TV_Add(tex_data[A_Index, 1], 0, "Expand") TV_Add(tex_data[A_Index, 2], parent) if (tex_data[A_Index, 2] == "tex2d") { TV_Add(tex_data[A_Index, 3], parent) TV_Add(tex_data[A_Index, 4], parent) vector := TV_Add("色", parent) TV_Add(SetFloat(tex_data[A_Index, 5, 1]), vector) TV_Add(SetFloat(tex_data[A_Index, 5, 2]), vector) TV_Add(SetFloat(tex_data[A_Index, 5, 3]), vector) TV_Add(SetFloat(tex_data[A_Index, 5, 4]), vector) } } Gui, Add, Button, x+0 yp+0 W50 H100 GtexAdd, + Gui, Add, Button, xp+0 y+0 W50 H100 GtexDel, × Gui, Add, Text, xm0 y+5 W50, %A_Space%%A_Space%color Gui, Add, TreeView, xm0 y+0 W550 H150 -ReadOnly VVcol_data size := GetMaxIndex(col_data) Loop, %size% { parent := TV_Add(col_data[A_Index, 1], 0, "Expand") vector := TV_Add("色", parent) TV_Add(SetFloat(col_data[A_Index, 2, 1]), vector) TV_Add(SetFloat(col_data[A_Index, 2, 2]), vector) TV_Add(SetFloat(col_data[A_Index, 2, 3]), vector) TV_Add(SetFloat(col_data[A_Index, 2, 4]), vector) } Gui, Add, Button, x+0 yp+0 W50 H75 GcolAdd, + Gui, Add, Button, xp+0 y+0 W50 H75 GcolDel, × Gui, Add, Text, xm0 y+5 W50, %A_Space%%A_Space%float Gui, Add, TreeView, xm0 y+0 W550 H100 -ReadOnly VVf_data size := GetMaxIndex(f_data) Loop, %size% { parent := TV_Add(f_data[A_Index, 1], 0, "Expand") TV_Add(SetFloat(f_data[A_Index, 2]), parent) } Gui, Add, Button, x+0 yp+0 W50 H50 GfAdd, + Gui, Add, Button, xp+0 y+0 W50 H50 GfDel, × Gui, Add, Button, xm0 y+5 W600 H50 GMySubmit, 上書き保存 Gui, Show, AutoSize return MySubmit: Gui, Submit, NoHide file := FileOpen(file_path, "w") WriteString(file, "CM3D2_MATERIAL") file.WriteInt(Vversion) WriteString(file, Vvalue1) WriteString(file, Vvalue2) WriteString(file, Vvalue3) WriteString(file, Vvalue4) Gui, TreeView, Vtex_data parent_id = 0 Loop { parent_id := TV_GetNext(parent_id) if (parent_id == 0) { break } WriteString(file, "tex") TV_GetText(string, parent_id) WriteString(file, string) child_id := TV_GetChild(parent_id) TV_GetText(string, child_id) WriteString(file, string) if (string == "null") { continue } child_id := TV_GetNext(child_id) TV_GetText(string, child_id) WriteString(file, string) child_id := TV_GetNext(child_id) TV_GetText(string, child_id) WriteString(file, string) child_id := TV_GetNext(child_id) child_id := TV_GetChild(child_id) TV_GetText(string, child_id) file.WriteFloat(string) Loop, 3 { child_id := TV_GetNext(child_id) TV_GetText(string, child_id) file.WriteFloat(string) } } Gui, TreeView, Vcol_data parent_id = 0 Loop { parent_id := TV_GetNext(parent_id) if (parent_id == 0) { break } WriteString(file, "col") TV_GetText(string, parent_id) WriteString(file, string) child_id := TV_GetChild(parent_id) child_id := TV_GetChild(child_id) TV_GetText(string, child_id) file.WriteFloat(string) Loop, 3 { child_id := TV_GetNext(child_id) TV_GetText(string, child_id) file.WriteFloat(string) } } Gui, TreeView, Vf_data parent_id = 0 Loop { parent_id := TV_GetNext(parent_id) if (parent_id == 0) { break } WriteString(file, "f") TV_GetText(string, parent_id) WriteString(file, string) child_id := TV_GetChild(parent_id) TV_GetText(string, child_id) file.WriteFloat(string) } WriteString(file, "end") file.close() SplitPath, file_path, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive MsgBox, %OutFileName%を上書きしました return texAdd: Gui, TreeView, SysTreeView321 InputBox, new_name, , 新規の名前を入力してください, , , , , , , , _ if (ErrorLevel == 0){ parent := TV_Add(new_name, 0, "Expand") TV_Add("tex2d", parent) TV_Add("XXX_XXX", parent) TV_Add("Assets/texture/~*.png", parent) vector := TV_Add("色情報?", parent) TV_Add(1.0, vector) TV_Add(1.0, vector) TV_Add(1.0, vector) TV_Add(1.0, vector) } return texDel: Gui, TreeView, SysTreeView321 parent := TV_GetSelection() if (parent == 0) { MsgBox, 項目を選択してください return } Loop { if (TV_GetParent(parent) != 0) { parent := TV_GetParent(parent) } else { break } } TV_Delete(parent) return colAdd: Gui, TreeView, SysTreeView322 InputBox, new_name, , 新規の名前を入力してください if (ErrorLevel == 0){ parent := TV_Add(new_name, 0, "Expand") vector := TV_Add("色情報", parent) TV_Add(1.0, vector) TV_Add(1.0, vector) TV_Add(1.0, vector) TV_Add(1.0, vector) } return colDel: Gui, TreeView, SysTreeView322 parent := TV_GetSelection() if (parent == 0) { MsgBox, 項目を選択してください return } Loop { if (TV_GetParent(parent) != 0) { parent := TV_GetParent(parent) } else { break } } TV_Delete(parent) return fAdd: Gui, TreeView, SysTreeView323 InputBox, new_name, , 新規の名前を入力してください if (ErrorLevel == 0){ parent := TV_Add(new_name, 0, "Expand") TV_Add(1.0, parent) } return fDel: Gui, TreeView, SysTreeView323 parent := TV_GetSelection() if (parent == 0) { MsgBox, 項目を選択してください return } Loop { if (TV_GetParent(parent) != 0) { parent := TV_GetParent(parent) } else { break } } TV_Delete(parent) return GetMaxIndex(obj) { value := obj.MaxIndex() if (value == "") { return 0 } return value } GetStringLength(string) { count = 0 Loop, Parse, string { if (RegExMatch(A_LoopField, "^[^\x01-\x7E]$") != 0) { count += 3 } else { count += 1 } } return count } ReadString(file, size=-1) { if (size <= -1) { size := 0 chars := Object() Loop { char := file.ReadUChar() chars[A_Index] := char if (char < 128) { break } } num := GetMaxIndex(chars) Loop, %num% { char := chars[A_Index] multi := 256 ** (A_Index - 1) size += char * multi if (1 < A_Index) { size -= (multi / 2) * (char + 1) } } } string := "" count = 0 Loop, 9999 { if (size <= count) { break } s := file.Read(1) string := string . s count += GetStringLength(s) if (GetStringLength(s) == 0) { pos := file.Pos MsgBox, ファイルの読み込みに失敗しました(場所: %pos%)`n終了します ExitApp } } return string } WriteString(file, string) { len := GetStringLength(string) if (128 <= len) { temp := Mod(len, 128) + 128 file.WriteChar(temp) temp := Floor(len / 128) file.WriteChar(temp) } else { file.WriteChar(len) } file.Write(string) } GetDefaultPath() { RegRead, path, HKEY_CURRENT_USER, Software\KISS\カスタムメイド3D2, InstallPath if (ErrorLevel == 0) { path = %path%GameData\ } else { path := A_ScriptDir } return path } SetFloat(f) { f := RegExReplace(f, "(\.0)0+$", "$1") f := RegExReplace(f, "([1-9])0+$", "$1") return f } GuiEscape: GuiClose: ExitApp return