Any
/
vae
/com3d
/[CM3D2]English Mod Tools Pack
/[CM3D2]Various Modding Tools 151220 (English)
/src
/[CM3D2]pmat Editor.ahk
FileEncoding, UTF-8-RAW | |
SetFormat, float, 0.10 | |
file_path = %1% | |
Loop { | |
if (file_path == "") { | |
default_path := GetDefaultPath() | |
FileSelectFile, file_path, 3, %default_path%, Please select a .pmat file, Supported files(*.pmat) | |
} | |
if (ErrorLevel == 1) { | |
ExitApp | |
} | |
if (FileExist(file_path) == "") { | |
Msgbox, This file does not exist | |
file_path := "" | |
} | |
else { | |
break | |
} | |
} | |
file := FileOpen(file_path, "r") | |
if (file.Read(file.ReadChar()) != "CM3D2_PMATERIAL") { | |
MsgBox, This is not a CM3D2 .pmat file | |
ExitApp | |
} | |
data := Object() | |
version := file.ReadInt() | |
int := file.ReadInt() | |
name := ReadString(file) | |
float := SetFloat(file.ReadFloat()) | |
shader := ReadString(file) | |
SplitPath, file_path, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive | |
Gui, Add, Text, xm0 ym0 W300 H20 Center, %A_Space%%OutFileName% | |
Gui, Add, Text, xm0 y+0 W100 H20 Center, File Version | |
Gui, Add, Edit, x+0 yp+0 W200 H20 vVversion, %version% | |
Gui, Add, Text, xm0 y+0 W100 H20 Center, Name hash | |
Gui, Add, Edit, x+0 yp+0 W200 H20 vVint ReadOnly, %int% | |
Gui, Add, Text, xm0 y+0 W100 H20 Center, Material name | |
Gui, Add, Edit, x+0 yp+0 W200 H20 vVname gGname, %name% | |
Gui, Add, Text, xm0 y+0 W100 H20 Center, Priority? | |
Gui, Add, Edit, x+0 yp+0 W200 H20 vVfloat, %float% | |
Gui, Add, Text, xm0 y+0 W100 H20 Center, Shader | |
Gui, Add, Edit, x+0 yp+0 W200 H20 vVshader, %shader% | |
Gui, Add, Button, xm0 y+5 W300 H50 GMySubmit, Save | |
Gui, Show, AutoSize | |
return | |
Gname: | |
Gui, Submit, NoHide | |
hash := string_hash(Vname) | |
GuiControl, Text, Vint, %hash% | |
return | |
MySubmit: | |
Gui, Submit, NoHide | |
file := FileOpen(file_path, "w") | |
WriteString(file, "CM3D2_PMATERIAL") | |
file.WriteInt(Vversion) | |
file.WriteInt(Vint) | |
WriteString(file, Vname) | |
file.WriteFloat(Vfloat) | |
WriteString(file, Vshader) | |
file.close() | |
return | |
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, Failed to read file(Path: %pos%)`nQuit | |
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) | |
} | |
GetMaxIndex(obj) { | |
value := obj.MaxIndex() | |
if (value == "") { | |
return 0 | |
} | |
return value | |
} | |
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 | |
} | |
string_hash(s) { | |
h = 0 | |
Loop, Parse, s | |
{ | |
c := A_LoopField | |
h := (31 * h + Asc(c)) & 0xFFFFFFFF | |
} | |
return ((h + 0x80000000) & 0xFFFFFFFF) - 0x80000000 | |
} | |
GuiEscape: | |
GuiClose: | |
ExitApp | |
return | |