init commit

This commit is contained in:
sShemet
2024-05-10 14:06:43 +05:00
commit 571b9550cc
118 changed files with 22557 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,41 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\Sergey\\source\\repos\\p2epPSX_CDToolkit\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{E92973F5-DC31-4C53-B473-A203A0E6AA29}|p2isPSX_CDToolkit\\p2epPSX_CDToolkit.vbproj|c:\\users\\sergey\\source\\repos\\p2eppsx_cdtoolkit\\p2ispsx_cdtoolkit\\scripttools.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
"RelativeMoniker": "D:0:0:{E92973F5-DC31-4C53-B473-A203A0E6AA29}|p2isPSX_CDToolkit\\p2epPSX_CDToolkit.vbproj|solutionrelative:p2ispsx_cdtoolkit\\scripttools.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "ScriptTools.vb",
"DocumentMoniker": "C:\\Users\\Sergey\\source\\repos\\p2epPSX_CDToolkit\\p2isPSX_CDToolkit\\ScriptTools.vb",
"RelativeDocumentMoniker": "p2isPSX_CDToolkit\\ScriptTools.vb",
"ToolTip": "C:\\Users\\Sergey\\source\\repos\\p2epPSX_CDToolkit\\p2isPSX_CDToolkit\\ScriptTools.vb",
"RelativeToolTip": "p2isPSX_CDToolkit\\ScriptTools.vb",
"ViewState": "AQIAAFoFAAAAAAAAAAAAAHgFAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
"WhenOpened": "2024-05-06T18:10:40.088Z",
"EditorCaption": ""
}
]
}
]
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

25
p2epPSX_CDToolkit.sln Normal file
View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.902
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "p2epPSX_CDToolkit", "p2isPSX_CDToolkit\p2epPSX_CDToolkit.vbproj", "{E92973F5-DC31-4C53-B473-A203A0E6AA29}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E92973F5-DC31-4C53-B473-A203A0E6AA29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E92973F5-DC31-4C53-B473-A203A0E6AA29}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E92973F5-DC31-4C53-B473-A203A0E6AA29}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E92973F5-DC31-4C53-B473-A203A0E6AA29}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9C1C757D-614E-4AEC-A43E-AB1FB7AC5BB7}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,625 @@
Imports System.IO
Imports System.Text
Imports System.IO.Compression
Partial Class Form1
Private Sub ImportCode_Click(sender As Object, e As EventArgs) Handles ImportCode.Click
If Not UserRadio.Checked Then MsgBox("YOU CAN IMPORT ONLY IN USER ISO!!!") : Exit Sub
Dim cd = New ISOTools
'OpensFile
OpenFileDialog1.Multiselect = True
If OpenFileDialog1.ShowDialog <> DialogResult.OK Then Exit Sub
OpenFileDialog1.Multiselect = False
For Each filee In OpenFileDialog1.FileNames
Dim fileInfo = Path.GetFileName(filee)
Dim f = File.ReadAllBytes(filee)
If fileInfo.Contains("SLPS_028.25") Then
cd.saveCDfile(UserPath.Text, 27, UBound(f) + 1, f)
End If
Next
MsgBox(String.Format("Imported {0} files ", UBound(OpenFileDialog1.FileNames) + 1), MsgBoxStyle.Exclamation)
End Sub
Private Sub ExpMainExe_Click(sender As Object, e As EventArgs) Handles ExpMainExe.Click
Dim iso = New ISOTools
Dim fil = iso.getCDfile(getFilnam, 27, 1812408)
SaveFileDialog1.FileName = WorkDir.Text & "SLPS_028.25"
If SaveFileDialog1.ShowDialog <> DialogResult.OK Then Exit Sub
My.Computer.FileSystem.WriteAllBytes(SaveFileDialog1.FileName, fil.ToArray, False)
End Sub
Private Sub Export181RUS_Click(sender As Object, e As EventArgs) Handles Export181RUS.Click
Dim files As New List(Of String)
files = IO.Directory.GetFiles("D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\UnRLE\0057_ALL_SCENERY\", "*.TRNSL").ToList
Dim OutPut_Dir = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\UnRLE\0057_ALL_SCENERY\TRANSLATED_RAW\"
Dim iso = New ISOTools
Dim filnam = getFilnam()
Dim r = New rleTools
For a = 57 To 397
Dim fil = iso.getCDfile(filnam, files1(a).Sector, files1(a).Sizw)
If a = 397 Then
fil = iso.getCDfile(filnam, files1(390).Sector, files1(390).Sizw) 'заменяем последний файл...
My.Computer.FileSystem.WriteAllBytes(OutPut_Dir & a.ToString("D4") & "_orig.bin", fil.ToArray, False) : Continue For
End If
Dim ind = files.FindIndex(Function(x) x.Contains(a.ToString("D4")))
'If file withoout translation
If ind = -1 Then
My.Computer.FileSystem.WriteAllBytes(OutPut_Dir & a.ToString("D4") & "_orig.bin", fil.ToArray, False) : Continue For
End If
Debug.WriteLine("Working On......" & a.ToString("D4"))
DeconstructFile(fil.ToArray) 'here is separated binfile
Dim curfile As rleFile = binFile.Last
Dim RusFile = My.Computer.FileSystem.ReadAllBytes(files(ind))
binFile.Last.Bytes = r.decodeRLEnew(RusFile, curfile).ToArray 'Pack and replace 8th file
'АРХИВИРУЕМ МАССИВ ФАЙЛОВ ДЛЯ ЗАПИСИ В ОДИН ФАЙЛ
Dim lastSectorID As Integer = 0
Dim finalPack = New List(Of Byte)
For Each bin In binFile
'filling sector to end (making sectorgap) in the middle of the file
If bin.SectorID <> lastSectorID Then
Dim gap = 2048 - (finalPack.Count Mod 2048)
For g = 0 To gap - 1
finalPack.Add(0)
Next
End If
'Adding currentfile Sector Size (for at least 0004)
bin.SectorSize = bin.Bytes.Count \ 2048
If bin.Bytes.Count Mod 2048 > 0 Then bin.SectorSize += 1
'adding currentfile and address for 0x0090
finalPack.AddRange(bin.Bytes)
'AddingBytesAfter
For g = 0 To bin.BytesAfter - 1
finalPack.Add(0)
Next
lastSectorID = bin.SectorID
Next
'Fill file to END of Sector
If finalPack.Count Mod 2048 > 0 Then
For g = 1 To (2048 - (finalPack.Count Mod 2048))
finalPack.Add(0)
Next g
End If
My.Computer.FileSystem.WriteAllBytes(OutPut_Dir & a.ToString("D4") & "_rus.bin", finalPack.ToArray, False)
Next
MsgBox("Export Done")
End Sub
Private Sub SceneryImport_Click(sender As Object, e As EventArgs) Handles SceneryImport.Click
If Not UserRadio.Checked Then MsgBox("YOU CAN IMPORT ONLY IN USER ISO!!!") : Exit Sub
If IsNothing(files1) Then MsgBox("PLEASE READ CD FILES FIRST!") : Exit Sub
Dim files = IO.Directory.GetFiles("D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\UnRLE\0057_ALL_SCENERY\TRANSLATED_RAW\", "*.bin").ToList
Dim filesSize = 0
'For Each f In files
' filesSize += My.Computer.FileSystem.GetFileInfo(f).Length
'Next
Dim curSector = files1(57).Sector
Dim max = files1(398).Sector
'MsgBox($"Sectors have - {max - curSector}" & vbCrLf & $"Sectors in files - {filesSize / 2048}") : Exit Sub
Dim iso = New ISOTools
Dim filnam = getFilnam()
For a = 57 To 397
'reading files
Debug.WriteLine("Working On......" & a.ToString("D4"))
Dim ind = files.FindIndex(Function(x) x.Contains(a.ToString("D4")))
If ind = -1 Then Debug.WriteLine("NOT FOUND") : Continue For
Dim impFile = My.Computer.FileSystem.ReadAllBytes(files(ind))
Dim SectorSizw As Integer = (UBound(impFile) + 1) / 2048
'Overload check
If curSector + SectorSizw >= max Then MsgBox("!!!OVERLOAD at file " & a) : Exit For
'debugfile move to end of disk
' If a = 570 Then curSector = 278100
iso.saveCDfile(filnam, curSector, UBound(impFile) + 1, impFile)
'Update SectorNumber and FileSize In FileArray
files1(a).Sizw = UBound(impFile) + 1
files1(a).Sector = curSector
curSector += SectorSizw
Next
'Update FileTable In ISO
iso.UpdateFileListTable(filnam, files1)
MsgBox("Files Imported")
End Sub
Private Sub Export1112RUS_Click(sender As Object, e As EventArgs) Handles Export1112RUS.Click
Dim files As New List(Of String)
files = IO.Directory.GetFiles("D:\Games\PSX\Persona.2.Innocent.Sin\Export\UnRLE\1112_ALL_CITIES_SCRIPTS", "*.TRNSL").ToList
Dim OutPut_Dir = "D:\Games\PSX\Persona.2.Innocent.Sin\Export\UnRLE\1112_ALL_CITIES_SCRIPTS\TRANSLATED_RAW\"
Dim iso = New ISOTools
Dim filnam = getFilnam()
Dim r = New rleTools
For a = 1112 To 1117
Dim fil = iso.getCDfile(filnam, files1(a).Sector, files1(a).Sizw)
Dim ind = files.FindIndex(Function(x) x.Contains(a.ToString("D4")))
'If file withoout translation
If ind = -1 Then
My.Computer.FileSystem.WriteAllBytes(OutPut_Dir & a.ToString("D4") & "_orig.bin", fil.ToArray, False) : Continue For
End If
Debug.WriteLine("Working On......" & a.ToString("D4"))
DeconstructFile(fil.ToArray) 'here is separated binfile
Dim curfile As rleFile = binFile(binFile.Count - 1)
Dim RusFile = My.Computer.FileSystem.ReadAllBytes(files(ind))
binFile(binFile.Count - 1).Bytes = r.decodeRLEnew(RusFile, curfile).ToArray 'Pack and replace 8th file
'АРХИВИРУЕМ МАССИВ ФАЙЛОВ ДЛЯ ЗАПИСИ В ОДИН ФАЙЛ
Dim lastSectorID As Integer = 0
Dim finalPack = New List(Of Byte)
Dim addresses = New List(Of Integer) 'Start Addr for all files
For Each bin In binFile
'filling sector to end (making sectorgap) in the middle of the file
If bin.SectorID <> lastSectorID Then
Dim gap = 2048 - (finalPack.Count Mod 2048)
For g = 0 To gap - 1
finalPack.Add(0)
Next
End If
'Adding currentfile Sector Size (for at least 0004)
bin.SectorSize = bin.Bytes.Count \ 2048
If bin.Bytes.Count Mod 2048 > 0 Then bin.SectorSize += 1
'adding currentfile and address for 0x0090
addresses.Add(finalPack.Count)
finalPack.AddRange(bin.Bytes)
'AddingBytesAfter
For g = 0 To bin.BytesAfter - 1
finalPack.Add(0)
Next
lastSectorID = bin.SectorID
Next
'Fill file to END of Sector
If finalPack.Count Mod 2048 > 0 Then
For g = 1 To (2048 - (finalPack.Count Mod 2048))
finalPack.Add(0)
Next g
End If
'SAVING POINTERS TABLE
SavePointersTableToFile(addresses, OutPut_Dir & a.ToString("D4") & ".pointers", binFile)
My.Computer.FileSystem.WriteAllBytes(OutPut_Dir & a.ToString("D4") & "_rus.bin", finalPack.ToArray, False)
Next
MsgBox("Export Done")
End Sub
Private Sub ConvertEventsForEditing_Click(sender As Object, e As EventArgs) Handles ConvertEventsForEditing.Click
Dim srcDir = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\UnRLE\0057_ALL_SCENERY"
Dim destDir = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\P2EP_Editing\"
Dim files As New List(Of String)
files = IO.Directory.GetFiles(srcDir, "*.txt").ToList
Dim s = New ScriptTools
For Each f In files
Dim a = Path.GetFileName(f)
s.ConvertForEdit(f, destDir & Path.GetFileName(f))
Next
MsgBox("Done!")
End Sub
Private Sub MakePointers_Click(sender As Object, e As EventArgs) Handles MakePointers.Click
If binFile.Count = 0 Or CDFileList.SelectedIndex = -1 Then Exit Sub
Dim fil = MakePointersArray()
If CreateBinDirCheck.Checked And CDFileList.SelectedIndex > -1 Then
Dim cat = WorkDir.Text & Strings.Left(FilnamLabel.Text, 4) & "_" & files1(CDFileList.SelectedIndex).Descript
If Not Directory.Exists(cat) Then
Directory.CreateDirectory(cat)
End If
ExportBinPath.Text = cat & "\"
End If
Dim filename = ExportBinPath.Text & Strings.Left(FilnamLabel.Text, 4)
If japRadio.Checked Then filename &= "_J"
If EngRadio.Checked Then filename &= "_E"
If UserRadio.Checked Then filename &= "_U"
'SAVING POINTERS TABLE
My.Computer.FileSystem.WriteAllBytes(filename & ".pointers", fil.ToArray, False)
'SavePointersTableToFile(addresses, filename & ".pointers", binFile)
'My.Computer.FileSystem.WriteAllBytes(filename & ".TEMPPACK", finalPack.ToArray, False)
Savedlbl.Text = "SAVED TO " & filename
End Sub
Private Sub SearchPointers_Click(sender As Object, e As EventArgs) Handles SearchPointers.Click
If CDFileList.Items.Count = 0 Or CDFileList.SelectedIndex = -1 Then Exit Sub
If Not IsNumeric(CompareBTS.Text) Then Exit Sub
Dim xxx = Convert.ToInt16(CompareBTS.Text)
Dim fil As List(Of Byte) = MakePointersArray()
Dim finfil = New List(Of Byte)
For a = 0 To xxx
If a > fil.Count - 1 Then Exit For
finfil.Add(fil(a))
Next
Dim cd = New ISOTools
Dim exeFile = cd.getCDfile(getFilnam, 27, 1812408)
'search in exe
Dim res = ByteSearch(exeFile.ToArray, finfil.ToArray)
If res > -1 Then MsgBox("FOUND! IN SLPS!" & vbCrLf & "Offset: " & res) : Exit Sub
'all files to video
For a = 0 To 864
Dim curFile = cd.getCDfile(getFilnam, files1(a).Sector, files1(a).Sizw)
'If curFile(0) = 1 Or curFile(0) = 2 Then Continue For 'IF ARCHIVE
'If curFile(1) = 1 Or curFile(1) = 2 Then Continue For
Debug.WriteLine("Searching... " & a)
res = ByteSearch(curFile.ToArray, finfil.ToArray)
If res > -1 Then MsgBox("FOUND! IN file #" & a & vbCrLf & "Offset: " & res) : Exit For
Next
End Sub
Public Function MakePointersArray()
'АРХИВИРУЕМ МАССИВ ФАЙЛОВ ДЛЯ ЗАПИСИ В ОДИН ФАЙЛ
Dim lastSectorID As Integer = 0
Dim finalPack = New List(Of Byte)
Dim addresses = New List(Of Integer) 'Start Addr for all files
For Each bin In binFile
'filling sector to end (making sectorgap) in the middle of the file
If bin.SectorID <> lastSectorID Then
Dim gap = 2048 - (finalPack.Count Mod 2048)
For g = 0 To gap - 1
finalPack.Add(0)
Next
End If
'Adding currentfile Sector Size (for at least 0004)
bin.SectorSize = bin.Bytes.Count \ 2048
If bin.Bytes.Count Mod 2048 > 0 Then bin.SectorSize += 1
addresses.Add(finalPack.Count)
finalPack.AddRange(bin.Bytes)
'AddingBytesAfter
For g = 0 To bin.BytesAfter - 1
finalPack.Add(0)
Next
lastSectorID = bin.SectorID
Next
'Fill file to END of Sector
If finalPack.Count Mod 2048 > 0 Then
For g = 1 To (2048 - (finalPack.Count Mod 2048))
finalPack.Add(0)
Next g
End If
'Making POINTERS TABLE
Dim fil = New List(Of Byte)
For a = 0 To binFile.Count - 1
'Dim curAddr = a * 8 + offset
Dim cursect As Int16 = addresses(a) \ 2048
Dim modSect As Int16 = addresses(a) Mod 2048
fil.Add(BitConverter.GetBytes(modSect)(0))
fil.Add(BitConverter.GetBytes(modSect)(1)) 'BE or LE???
fil.Add(BitConverter.GetBytes(cursect)(0))
fil.Add(BitConverter.GetBytes(cursect)(1)) 'BE or LE???
Dim bts As Integer = binFile(a).Bytes.Count
If Tim8Shift.Checked And binFile(a).Compr = 0 Then bts -= 8 'Its Uncompressed TIM??
fil.Add(BitConverter.GetBytes(bts)(0)) 'Saving Size of file
fil.Add(BitConverter.GetBytes(bts)(1)) 'BE or LE???
fil.Add(BitConverter.GetBytes(bts)(2))
fil.Add(BitConverter.GetBytes(bts)(3))
Next
Return fil
End Function
Private Sub RelpaceTextExecs_Click(sender As Object, e As EventArgs) Handles RelpaceTextExecs.Click
If CDFileList.Items.Count = 0 Or CDFileList.SelectedIndex = -1 Then Exit Sub
Dim sb = New List(Of Byte) From {&HEA, &H68, 0, &HC}
Dim cd = New ISOTools
Dim curFile = cd.getCDfile(getFilnam, files1(CDFileList.SelectedIndex).Sector, files1(CDFileList.SelectedIndex).Sizw)
Dim replaceCount As Integer = 0
For a = 0 To curFile.Count - 1 Step 4
If curFile(a) = sb(0) And curFile(a + 1) = sb(1) And curFile(a + 2) = sb(2) And curFile(a + 3) = sb(3) Then
replaceCount += 1
curFile(a) = 0 : curFile(a + 1) = &H40 : curFile(a + 2) = &H2 : curFile(a + 3) = &HC
End If
Next
cd.saveCDfile(getFilnam, files1(CDFileList.SelectedIndex).Sector, files1(CDFileList.SelectedIndex).Sizw, curFile.ToArray)
MsgBox("Found and replaced " & replaceCount & " text calls.")
End Sub
Private Sub ExportDUNGScripts_Click(sender As Object, e As EventArgs) Handles ExportDUNGScripts.Click
Dim lengths = New List(Of Integer)
lengths.AddRange({232, 228, 328, 336, 328, 336, 328, 336, 316, 332})
Dim DungScr = New List(Of PointerAndSize)
Dim initaddr = 114232
For Each l In lengths
DungScr.Add(New PointerAndSize With {.Addr = initaddr, .Sizw = l})
initaddr += l
Next
DungScr.Add(New PointerAndSize With {.Addr = 119336, .Sizw = 240})
DungScr.Add(New PointerAndSize With {.Addr = 119576, .Sizw = 240})
Dim cd = New ISOTools
Dim txt = New ScriptTools
'Reading filetable and make array
files1 = cd.makeFileList(UserPath.Text)
'files2 = cd.makeFileList(EngISOPath.Text)
Dim CurFile() As Byte = cd.getCDfile(UserPath.Text, files1(736).Sector, files1(736).Sizw).ToArray
'Dim EngFile() As Byte = cd.getCDfile(EngISOPath.Text, files2(736).Sector, files2(736).Sizw).ToArray 'loading files
Dim JRes = New ScriptFile
Dim ERes = New ScriptFile
For Each scr In DungScr
Dim JapBytes(scr.Sizw - 1) As Byte : Dim EngBytes(scr.Sizw - 1) As Byte
Array.Copy(CurFile, scr.Addr, JapBytes, 0, scr.Sizw) 'Array.Copy(EngFile, scr.Addr, EngBytes, 0, scr.Sizw) 'Copying Arrays
txt.ParseResource(JapBytes, JRes) : txt.ParseText(JRes, False)
'txt.ParseResource(EngBytes, ERes) : txt.ParseText(ERes, True)
Dim combText = txt.CombineParsedText(ERes, JRes)
Dim combResData = txt.compileData(JRes)
Dim fil = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\0736_DUNG_SCRIPTS\" & DungScr.IndexOf(scr).ToString("D4") & ".txt"
My.Computer.FileSystem.WriteAllText(fil, combResData & combText, False)
Next
End Sub
Private Sub ConvertContact_Click(sender As Object, e As EventArgs) Handles ExportContact.Click
Dim Japfiles = IO.Directory.GetFiles("D:\Games\PSX\Persona.2.Innocent.Sin\Export\1075_Battle_Contacts", "*_J").ToList
Dim Engfiles = IO.Directory.GetFiles("D:\Games\PSX\Persona.2.Innocent.Sin\Export\1075_Battle_Contacts", "*_E*").ToList
Dim OutPut_Dir = "D:\Games\PSX\Persona.2.Innocent.Sin\Export\1075_Battle_Contacts\Processing\Back\"
Dim scr = New ScriptTools
Dim cnt = 0
For Each fil In Japfiles
Dim contact As String = scr.MakeExportFile(My.Computer.FileSystem.ReadAllBytes(fil), My.Computer.FileSystem.ReadAllBytes(Engfiles(Japfiles.IndexOf(fil))), cnt)
Dim filename = OutPut_Dir & Path.GetFileName(fil) & "_exp.txt"
My.Computer.FileSystem.WriteAllText(filename, contact, False, Encoding.GetEncoding(1251))
Next
MsgBox("Converted " & cnt & " dialogs!", MsgBoxStyle.Information)
End Sub
Private Sub Summon_Export_Click(sender As Object, e As EventArgs) Handles Summon_Export.Click
Dim Japfiles = IO.Directory.GetFiles("D:\Games\PSX\Persona.2.Innocent.Sin\Export\0077_Summon_Text", "*_U").ToList
Dim Engfiles = IO.Directory.GetFiles("D:\Games\PSX\Persona.2.Innocent.Sin\Export\0077_Summon_Text", "*_E*").ToList
Dim OutPut_Dir = "D:\Games\PSX\Persona.2.Innocent.Sin\Export\0077_Summon_Text\Processing\Back\"
Dim scr = New ScriptTools
Dim cnt = 0
For Each fil In Japfiles
Dim contact As String = scr.MakeSummonExport(My.Computer.FileSystem.ReadAllBytes(fil), My.Computer.FileSystem.ReadAllBytes(Engfiles(Japfiles.IndexOf(fil))), cnt)
Dim filename = OutPut_Dir & Path.GetFileName(fil) & "_exp.txt"
My.Computer.FileSystem.WriteAllText(filename, contact, False, Encoding.GetEncoding(1251))
Next
MsgBox("Converted " & cnt & " dialogs!", MsgBoxStyle.Information)
End Sub
Private Sub Convert_Summon_Click(sender As Object, e As EventArgs) Handles Convert_Summon.Click
Dim Japfiles = IO.Directory.GetFiles("D:\Games\PSX\Persona.2.Innocent.Sin\Export\0077_Summon_Text\Processing\", "*.txt").ToList
DialogCounter = 0
Dim txt = New ScriptTools
For Each JFile In Japfiles
Debug.WriteLine("Converting " & JFile)
txt.convertSummonScript(JFile, DialogCounter)
Next
MsgBox("Success! Converted " & UBound(OpenFileDialog1.FileNames) + 1 & " file(s)" & vbCrLf & "Overall Dialogs Count: " & DialogCounter)
End Sub
Private Sub PSP_UNPACK_EVENT_BIN_Click(sender As Object, e As EventArgs) Handles PSP_UNPACK_EVENT_BIN.Click
Dim zips = New List(Of Byte())
Dim fil = My.Computer.FileSystem.ReadAllBytes("D:\Games\PSX\Persona 2 - Innocent Sin USA\PSP_GAME\USRDIR\pack\unpack\event.bin")
Dim filenames = New List(Of String)
For a = 0 To 396
Dim a1 = BitConverter.ToInt32(fil, a * 8)
Dim a2 = BitConverter.ToInt32(fil, a * 8 + 4)
Dim zzz(a2 - a1) As Byte
Array.Copy(fil, a1, zzz, 0, a2 - a1)
Dim fn = ""
For bbb = 0 To 8
fn &= Chr(zzz(bbb + 10))
Next
filenames.Add(fn)
Dim Decomp = DecompressGZip(zzz)
zips.Add(Decomp)
'My.Computer.FileSystem.WriteAllBytes("D:\Games\PSX\Persona 2 - Innocent Sin USA\PSP_GAME\USRDIR\pack\unpack\Event\" & a.ToString("D4") & "_" & (a + 181).ToString("D3") & "_" & fn, Decomp, False)
Next
Dim scr = New ScriptTools
For Each zip In zips
Dim filePack = New List(Of Byte())
Dim startRead As Integer = 48
For a = 0 To 8
Dim a1 = BitConverter.ToInt32(zip, a * 4 + 4)
Dim curFil(a1 - 1) As Byte
Array.Copy(zip, startRead, curFil, 0, a1)
startRead += a1
Dim BA = startRead Mod 16
If BA > 0 Then startRead += 16 - BA
filePack.Add(curFil)
Next
Dim b = zips.IndexOf(zip)
Dim fn = "D:\Games\PSX\Persona 2 - Innocent Sin USA\PSP_GAME\USRDIR\pack\unpack\Event\" & b.ToString("D4") & "_" & (b + 181).ToString("D3") & "_" & filenames(b)
'SAVING 8th LAST FILE!!!
Dim txt = scr.ConvertPSPTextFile(filePack.Last)
' My.Computer.FileSystem.WriteAllBytes(fn & ".txt", filePack.Last, False)
My.Computer.FileSystem.WriteAllText(fn & ".txt", txt, False, Encoding.GetEncoding(1251))
Next
'For Each z In
MsgBox("EXPORTED")
End Sub
Public Function DecompressGZip(bytesToDecompress As Byte()) As Byte()
Using stream As New GZipStream(New MemoryStream(bytesToDecompress), CompressionMode.Decompress)
Const size As Integer = 4096
Dim buffer As Byte() = New Byte(size - 1) {}
Using memoryStream As New MemoryStream()
Dim count As Integer
Do
count = stream.Read(buffer, 0, size)
If count > 0 Then
memoryStream.Write(buffer, 0, count)
End If
Loop While count > 0
Return memoryStream.ToArray()
End Using
End Using
End Function
End Class
Public Class PointerAndSize
Public Addr As Integer
Public Sizw As Integer
End Class

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>

227
p2isPSX_CDToolkit/CityEditor.Designer.vb generated Normal file
View File

@@ -0,0 +1,227 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class CityEditor
Inherits System.Windows.Forms.Form
'Форма переопределяет dispose для очистки списка компонентов.
<System.Diagnostics.DebuggerNonUserCode()>
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Является обязательной для конструктора форм Windows Forms
Private components As System.ComponentModel.IContainer
'Примечание: следующая процедура является обязательной для конструктора форм Windows Forms
'Для ее изменения используйте конструктор форм Windows Form.
'Не изменяйте ее в редакторе исходного кода.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
Me.ID = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.UserTitle = New System.Windows.Forms.TextBox()
Me.Button1 = New System.Windows.Forms.Button()
Me.Button2 = New System.Windows.Forms.Button()
Me.DataGridView1 = New System.Windows.Forms.DataGridView()
Me.EngTitle = New System.Windows.Forms.TextBox()
Me.SaveToISO = New System.Windows.Forms.Button()
Me.Button4 = New System.Windows.Forms.Button()
Me.ChrCount = New System.Windows.Forms.Label()
Me.AreaCount = New System.Windows.Forms.Label()
Me.Column1 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.Column2 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.Column3 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.STAT_E = New System.Windows.Forms.DataGridViewTextBoxColumn()
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'ID
'
Me.ID.Location = New System.Drawing.Point(467, 7)
Me.ID.Name = "ID"
Me.ID.Size = New System.Drawing.Size(138, 20)
Me.ID.TabIndex = 0
Me.ID.Text = "713"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(351, 10)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(99, 13)
Me.Label1.TabIndex = 1
Me.Label1.Text = "DictrictID (713-719)"
'
'UserTitle
'
Me.UserTitle.Location = New System.Drawing.Point(12, 59)
Me.UserTitle.Name = "UserTitle"
Me.UserTitle.Size = New System.Drawing.Size(196, 20)
Me.UserTitle.TabIndex = 2
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(467, 31)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(69, 22)
Me.Button1.TabIndex = 3
Me.Button1.Text = "<<<"
Me.Button1.UseVisualStyleBackColor = True
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(542, 31)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(63, 22)
Me.Button2.TabIndex = 3
Me.Button2.Text = ">>>"
Me.Button2.UseVisualStyleBackColor = True
'
'DataGridView1
'
Me.DataGridView1.AllowUserToAddRows = False
Me.DataGridView1.AllowUserToDeleteRows = False
Me.DataGridView1.AllowUserToResizeRows = False
Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Column1, Me.Column2, Me.Column3, Me.STAT_E})
DataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
DataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window
DataGridViewCellStyle1.Font = New System.Drawing.Font("Consolas", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
DataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText
DataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight
DataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText
DataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
Me.DataGridView1.DefaultCellStyle = DataGridViewCellStyle1
Me.DataGridView1.Location = New System.Drawing.Point(12, 85)
Me.DataGridView1.MultiSelect = False
Me.DataGridView1.Name = "DataGridView1"
Me.DataGridView1.RowHeadersVisible = False
Me.DataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing
DataGridViewCellStyle2.Font = New System.Drawing.Font("Lucida Sans Typewriter", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.DataGridView1.RowsDefaultCellStyle = DataGridViewCellStyle2
Me.DataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect
Me.DataGridView1.Size = New System.Drawing.Size(593, 675)
Me.DataGridView1.TabIndex = 4
'
'EngTitle
'
Me.EngTitle.Location = New System.Drawing.Point(409, 59)
Me.EngTitle.Name = "EngTitle"
Me.EngTitle.Size = New System.Drawing.Size(196, 20)
Me.EngTitle.TabIndex = 2
'
'SaveToISO
'
Me.SaveToISO.Location = New System.Drawing.Point(329, 766)
Me.SaveToISO.Name = "SaveToISO"
Me.SaveToISO.Size = New System.Drawing.Size(166, 40)
Me.SaveToISO.TabIndex = 5
Me.SaveToISO.Text = "SaveToUSERISO"
Me.SaveToISO.UseVisualStyleBackColor = True
'
'Button4
'
Me.Button4.Location = New System.Drawing.Point(208, 783)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(115, 23)
Me.Button4.TabIndex = 6
Me.Button4.Text = "UpdateFileTable??"
Me.Button4.UseVisualStyleBackColor = True
'
'ChrCount
'
Me.ChrCount.AutoSize = True
Me.ChrCount.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.ChrCount.Location = New System.Drawing.Point(189, 36)
Me.ChrCount.Name = "ChrCount"
Me.ChrCount.Size = New System.Drawing.Size(19, 20)
Me.ChrCount.TabIndex = 7
Me.ChrCount.Text = "0"
'
'AreaCount
'
Me.AreaCount.AutoSize = True
Me.AreaCount.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.AreaCount.Location = New System.Drawing.Point(247, 59)
Me.AreaCount.Name = "AreaCount"
Me.AreaCount.Size = New System.Drawing.Size(19, 20)
Me.AreaCount.TabIndex = 8
Me.AreaCount.Text = "0"
'
'Column1
'
Me.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Column1.FillWeight = 35.0!
Me.Column1.HeaderText = "COORDS"
Me.Column1.Name = "Column1"
'
'Column2
'
Me.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Column2.HeaderText = "USER_TEXT"
Me.Column2.Name = "Column2"
'
'Column3
'
Me.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Column3.HeaderText = "ENG_TEXT"
Me.Column3.Name = "Column3"
'
'STAT_E
'
Me.STAT_E.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.STAT_E.FillWeight = 35.0!
Me.STAT_E.HeaderText = "COORDS_E"
Me.STAT_E.Name = "STAT_E"
'
'CityEditor
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(608, 818)
Me.Controls.Add(Me.AreaCount)
Me.Controls.Add(Me.ChrCount)
Me.Controls.Add(Me.Button4)
Me.Controls.Add(Me.SaveToISO)
Me.Controls.Add(Me.DataGridView1)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.EngTitle)
Me.Controls.Add(Me.UserTitle)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.ID)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "CityEditor"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "CityEditor"
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents ID As TextBox
Friend WithEvents Label1 As Label
Friend WithEvents UserTitle As TextBox
Friend WithEvents Button1 As Button
Friend WithEvents Button2 As Button
Friend WithEvents DataGridView1 As DataGridView
Friend WithEvents EngTitle As TextBox
Friend WithEvents SaveToISO As Button
Friend WithEvents Button4 As Button
Friend WithEvents ChrCount As Label
Friend WithEvents AreaCount As Label
Friend WithEvents Column1 As DataGridViewTextBoxColumn
Friend WithEvents Column2 As DataGridViewTextBoxColumn
Friend WithEvents Column3 As DataGridViewTextBoxColumn
Friend WithEvents STAT_E As DataGridViewTextBoxColumn
End Class

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="STAT_E.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,268 @@
Public Class CityEditor
Public files1 As List(Of fileInfo)
Public files2 As List(Of fileInfo)
Public CurFile As rleFile
Public CurFileUnrle As Byte()
Public EngFile As rleFile
Public EngFileUnrle As Byte()
Private Sub DungeonEditor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim cd = New ISOTools
'Reading filetable and make array
files1 = cd.makeFileList(Form1.UserPath.Text)
files2 = cd.makeFileList(Form1.EngISOPath.Text)
LoadDistrict()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If ID.Text = 713 Then
ID.Text = 719
Else
ID.Text -= 1
End If
LoadDistrict()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If ID.Text = 719 Then
ID.Text = 713
Else
ID.Text += 1
End If
LoadDistrict()
End Sub
Public Sub LoadDistrict()
Dim cd = New ISOTools
Dim rle = New rleTools
Form1.DeconstructFile(cd.getCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, files1(ID.Text).Sizw).ToArray) 'here is separated binfile
CurFile = Form1.binFile(Form1.binFile.Count - 2) 'Get Before Last File
CurFileUnrle = CurFile.Bytes.ToArray
Form1.DeconstructFile(cd.getCDfile(Form1.EngISOPath.Text, files2(ID.Text).Sector, files2(ID.Text).Sizw).ToArray) 'here is separated binfile
EngFile = Form1.binFile(Form1.binFile.Count - 2) 'Get Before Last File
EngFileUnrle = EngFile.Bytes.ToArray
'Dim curfile As rleFile = binFile(8)
Dim JapBlock1Len = CurFileUnrle(8)
Dim JapBlock2Len = CurFileUnrle(9)
Dim JapBlockLines = CurFileUnrle(10)
Dim EnBlock1Len = EngFileUnrle(8)
Dim EnBlock2Len = EngFileUnrle(9)
Dim EnBlockLines = EngFileUnrle(10)
Dim JapTextStart = JapBlock1Len * 16 + JapBlock2Len * 8 + 8 + 4 'header 8 + head 4 block
Dim EngTextStart = EnBlock1Len * 16 + EnBlock2Len * 8 + 8 + 4
EngTitle.Text = readEngText(EngTextStart + 4) 'after coords...
UserTitle.Text = readRusText(JapTextStart + 4) 'after coords...
DataGridView1.Rows.Clear()
For a = 1 To JapBlockLines - 1
JapTextStart += 40
EngTextStart += 40 'Move to Next Block...
Dim jap_coords As String = BitConverter.ToInt16(CurFileUnrle, JapTextStart) & " x " & BitConverter.ToInt16(CurFileUnrle, JapTextStart + 2)
Dim japLoc = readRusText(JapTextStart + 4 + 14) ' aftercoords
Dim en_coords As String = BitConverter.ToInt16(CurFileUnrle, EngTextStart) & " x " & BitConverter.ToInt16(CurFileUnrle, EngTextStart + 2)
Dim enLoc = readEngText(JapTextStart + 4 + 14) ' aftercoords
DataGridView1.Rows.Add(jap_coords, japLoc, enLoc, en_coords)
Next
'Do
' If pointer >= endByte Then Exit Do
' Dim status = BitConverter.ToInt16(CurFileUnrle, pointer)
' Dim statusE = EngFileUnrle(pointer)
' pointer += 2
' Dim engString = readEngText(pointer - 1)
' Dim rustext = readRusText(pointer)
' DataGridView1.Rows.Add(status, rustext, engString, statusE)
' pointer += 30
'Loop
End Sub
Public Function readEngText(ByVal Curbt As Integer)
Dim a = ""
Do
If EngFileUnrle(Curbt) = 3 Or EngFileUnrle(Curbt) = 0 Then Exit Do
If EngFileUnrle(Curbt) > 128 Then EngFileUnrle(Curbt) = Asc("-")
a &= Chr(EngFileUnrle(Curbt))
Curbt += 1
Loop
Return a
End Function
Public Function readRusText(ByVal Curbt As Integer)
Dim a = ""
If BitConverter.ToInt16(CurFileUnrle, Curbt) And &H2000 Then
Dim len = BitConverter.ToInt16(CurFileUnrle, Curbt) And &HFF
Curbt += 2
For b = 0 To len - 1
a &= Chr(CurFileUnrle(Curbt))
Curbt += 1
Next
Else
Dim b = BitConverter.ToInt16(CurFileUnrle, Curbt)
Do
Dim curChar = BitConverter.ToInt16(CurFileUnrle, Curbt)
If (curChar < &H1000) Then a &= Form1.chars(curChar)
'a &= CurFileUnrle(Curbt).ToString("X2") & CurFileUnrle(Curbt + 1).ToString("X2")
Curbt += 2
If Curbt >= CurFileUnrle.Count Then Exit Do
b = BitConverter.ToInt16(CurFileUnrle, Curbt)
Loop Until (b And &H1000)
End If
Return a
End Function
Private Sub UserTitle_TextChanged(sender As Object, e As EventArgs) Handles UserTitle.TextChanged
ChrCount.Text = UserTitle.Text.Length
If UserTitle.Text.Length > 14 Then
ChrCount.ForeColor = Color.Red
Else
ChrCount.ForeColor = Color.DarkGreen
End If
End Sub
Private Sub DataGridView1_CurrentCellChanged(sender As Object, e As EventArgs) Handles DataGridView1.CurrentCellChanged
If IsNothing(DataGridView1.CurrentCell) Then Exit Sub
Dim a = DataGridView1.CurrentCell.Value.ToString.Length
AreaCount.Text = a
If a > 20 Then
AreaCount.ForeColor = Color.Red
Else
AreaCount.ForeColor = Color.DarkGreen
End If
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles SaveToISO.Click
'CHANGING FILE!
Dim cd = New ISOTools
Dim rle = New rleTools
'Making title bytes
MakeSaveRussianString(UserTitle.Text, 24, 0)
Dim off As Int32 = BitConverter.ToInt32(CurFileUnrle, 104)
'Dim pointer As Int32 = BitConverter.ToInt32(CurFileUnrle, 104)
Dim endByte As Int32 = BitConverter.ToInt32(CurFileUnrle, 60)
For Each row In DataGridView1.Rows
CurFileUnrle(off) = row.Cells(0).Value
CurFileUnrle(off + 1) = 0
MakeSaveRussianString(Trim(row.Cells(1).Value), 30, off + 2)
off += 32
Next
Form1.DeconstructFile(cd.getCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, files1(ID.Text).Sizw).ToArray) 'here is separated binfile
Dim curfile = Form1.binFile(0)
Dim before = curfile.Bytes.Count
Form1.binFile(0).Bytes = rle.decodeRLEnew(CurFileUnrle, curfile).ToArray
Form1.binFile(0).BytesAfter = 0
Dim after = Form1.binFile(0).Bytes.Count
'Packing
Dim finalPack = New List(Of Byte)
For Each bin In Form1.binFile
finalPack.AddRange(bin.Bytes)
'AddingBytesAfter
For g = 0 To bin.BytesAfter - 1
finalPack.Add(0)
Next
Next
If finalPack.Count Mod 2048 > 0 Then
For g = 1 To (2048 - (finalPack.Count Mod 2048))
finalPack.Add(0)
Next g
End If
Dim beforeSize As Integer = files1(ID.Text).Sizw
If finalPack.Count <= files1(ID.Text).Sizw Then
'If sizw matched
cd.saveCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, finalPack.Count, finalPack.ToArray)
MsgBox("Succesfully Saved!" & vbCrLf & "Bofore: " & before & vbCrLf & "Afta: " & after & vbCrLf & after - before & "b.")
Exit Sub
End If
If MsgBox("finalPack is Bigger than source :(" &
vbCrLf & "Bofore: " & before & vbCrLf & "Afta: " & after & vbCrLf & after - before & "b." &
vbCrLf & "Do you wanna save it to file?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If Form1.SaveFileDialog1.ShowDialog <> DialogResult.OK Then Exit Sub
My.Computer.FileSystem.WriteAllBytes(Form1.SaveFileDialog1.FileName, finalPack.ToArray, False)
End If
'My.Computer.FileSystem.WriteAllBytes("D:\Games\PSX\Persona.2.Innocent.Sin\Export\UnRLE\0097\EDITOR_TEST", CurFileUnrle, False)
End Sub
Public Sub MakeSaveRussianString(ByVal str As String, ByVal maxBytes As Integer, ByVal offs As String)
Dim a = New List(Of Byte)
If str = "0010" Then
For x = 0 To maxBytes - 1 Step 2
CurFileUnrle(offs + x) = 0
CurFileUnrle(offs + x + 1) = &H10
Next
Exit Sub
End If
a.Add(str.Length)
a.Add(&H20)
For x = 0 To str.Length - 1
a.Add(Asc(str(x)))
Next
For x = 0 To maxBytes - str.Length - 3
a.Add(0)
Next
For x = 0 To maxBytes - 1
CurFileUnrle(x + offs) = a(x)
Next
End Sub
End Class

View File

@@ -0,0 +1,227 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class DungeonEditor
Inherits System.Windows.Forms.Form
'Форма переопределяет dispose для очистки списка компонентов.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Является обязательной для конструктора форм Windows Forms
Private components As System.ComponentModel.IContainer
'Примечание: следующая процедура является обязательной для конструктора форм Windows Forms
'Для ее изменения используйте конструктор форм Windows Form.
'Не изменяйте ее в редакторе исходного кода.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
Me.ID = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.UserTitle = New System.Windows.Forms.TextBox()
Me.Button1 = New System.Windows.Forms.Button()
Me.Button2 = New System.Windows.Forms.Button()
Me.DataGridView1 = New System.Windows.Forms.DataGridView()
Me.Column1 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.Column2 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.Column3 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.STAT_E = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.EngTitle = New System.Windows.Forms.TextBox()
Me.SaveToISO = New System.Windows.Forms.Button()
Me.Button4 = New System.Windows.Forms.Button()
Me.ChrCount = New System.Windows.Forms.Label()
Me.AreaCount = New System.Windows.Forms.Label()
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'ID
'
Me.ID.Location = New System.Drawing.Point(358, 5)
Me.ID.Name = "ID"
Me.ID.Size = New System.Drawing.Size(138, 20)
Me.ID.TabIndex = 0
Me.ID.Text = "741"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(242, 8)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(110, 13)
Me.Label1.TabIndex = 1
Me.Label1.Text = "DungeonID (741-788)"
'
'UserTitle
'
Me.UserTitle.Location = New System.Drawing.Point(12, 59)
Me.UserTitle.Name = "UserTitle"
Me.UserTitle.Size = New System.Drawing.Size(196, 20)
Me.UserTitle.TabIndex = 2
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(358, 29)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(69, 22)
Me.Button1.TabIndex = 3
Me.Button1.Text = "<<<"
Me.Button1.UseVisualStyleBackColor = True
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(433, 29)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(63, 22)
Me.Button2.TabIndex = 3
Me.Button2.Text = ">>>"
Me.Button2.UseVisualStyleBackColor = True
'
'DataGridView1
'
Me.DataGridView1.AllowUserToAddRows = False
Me.DataGridView1.AllowUserToDeleteRows = False
Me.DataGridView1.AllowUserToResizeRows = False
Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Column1, Me.Column2, Me.Column3, Me.STAT_E})
DataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
DataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window
DataGridViewCellStyle1.Font = New System.Drawing.Font("Consolas", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
DataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText
DataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight
DataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText
DataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
Me.DataGridView1.DefaultCellStyle = DataGridViewCellStyle1
Me.DataGridView1.Location = New System.Drawing.Point(12, 85)
Me.DataGridView1.MultiSelect = False
Me.DataGridView1.Name = "DataGridView1"
Me.DataGridView1.RowHeadersVisible = False
Me.DataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing
DataGridViewCellStyle2.Font = New System.Drawing.Font("Lucida Sans Typewriter", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.DataGridView1.RowsDefaultCellStyle = DataGridViewCellStyle2
Me.DataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect
Me.DataGridView1.Size = New System.Drawing.Size(484, 675)
Me.DataGridView1.TabIndex = 4
'
'Column1
'
Me.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Column1.FillWeight = 10.0!
Me.Column1.HeaderText = "STATUS"
Me.Column1.Name = "Column1"
'
'Column2
'
Me.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Column2.HeaderText = "USER_TEXT"
Me.Column2.Name = "Column2"
'
'Column3
'
Me.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Column3.HeaderText = "ENG_TEXT"
Me.Column3.Name = "Column3"
'
'STAT_E
'
Me.STAT_E.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.STAT_E.FillWeight = 15.0!
Me.STAT_E.HeaderText = "STAT_E"
Me.STAT_E.Name = "STAT_E"
'
'EngTitle
'
Me.EngTitle.Location = New System.Drawing.Point(300, 59)
Me.EngTitle.Name = "EngTitle"
Me.EngTitle.Size = New System.Drawing.Size(196, 20)
Me.EngTitle.TabIndex = 2
'
'SaveToISO
'
Me.SaveToISO.Location = New System.Drawing.Point(329, 766)
Me.SaveToISO.Name = "SaveToISO"
Me.SaveToISO.Size = New System.Drawing.Size(166, 40)
Me.SaveToISO.TabIndex = 5
Me.SaveToISO.Text = "SaveToUSERISO"
Me.SaveToISO.UseVisualStyleBackColor = True
'
'Button4
'
Me.Button4.Location = New System.Drawing.Point(208, 783)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(115, 23)
Me.Button4.TabIndex = 6
Me.Button4.Text = "UpdateFileTable??"
Me.Button4.UseVisualStyleBackColor = True
'
'ChrCount
'
Me.ChrCount.AutoSize = True
Me.ChrCount.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.ChrCount.Location = New System.Drawing.Point(189, 36)
Me.ChrCount.Name = "ChrCount"
Me.ChrCount.Size = New System.Drawing.Size(19, 20)
Me.ChrCount.TabIndex = 7
Me.ChrCount.Text = "0"
'
'AreaCount
'
Me.AreaCount.AutoSize = True
Me.AreaCount.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.AreaCount.Location = New System.Drawing.Point(247, 59)
Me.AreaCount.Name = "AreaCount"
Me.AreaCount.Size = New System.Drawing.Size(19, 20)
Me.AreaCount.TabIndex = 8
Me.AreaCount.Text = "0"
'
'DungeonEditor
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(507, 818)
Me.Controls.Add(Me.AreaCount)
Me.Controls.Add(Me.ChrCount)
Me.Controls.Add(Me.Button4)
Me.Controls.Add(Me.SaveToISO)
Me.Controls.Add(Me.DataGridView1)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.EngTitle)
Me.Controls.Add(Me.UserTitle)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.ID)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "DungeonEditor"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "DungeonEditor"
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents ID As TextBox
Friend WithEvents Label1 As Label
Friend WithEvents UserTitle As TextBox
Friend WithEvents Button1 As Button
Friend WithEvents Button2 As Button
Friend WithEvents DataGridView1 As DataGridView
Friend WithEvents EngTitle As TextBox
Friend WithEvents SaveToISO As Button
Friend WithEvents Button4 As Button
Friend WithEvents Column1 As DataGridViewTextBoxColumn
Friend WithEvents Column2 As DataGridViewTextBoxColumn
Friend WithEvents Column3 As DataGridViewTextBoxColumn
Friend WithEvents STAT_E As DataGridViewTextBoxColumn
Friend WithEvents ChrCount As Label
Friend WithEvents AreaCount As Label
End Class

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="STAT_E.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,247 @@
Public Class DungeonEditor
Public files1 As List(Of fileInfo)
Public files2 As List(Of fileInfo)
Public CurFile As rleFile
Public CurFileUnrle As Byte()
Public EngFile As rleFile
Public EngFileUnrle As Byte()
Private Sub DungeonEditor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim cd = New ISOTools
'Reading filetable and make array
files1 = cd.makeFileList(form1.UserPath.Text)
files2 = cd.makeFileList(Form1.EngISOPath.Text)
LoadDungeon()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If ID.Text = 741 Then
ID.Text = 788
Else
ID.Text -= 1
End If
LoadDungeon()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If ID.Text = 788 Then
ID.Text = 741
Else
ID.Text += 1
End If
LoadDungeon()
End Sub
Public Sub LoadDungeon()
Dim cd = New ISOTools
Dim rle = New rleTools
Form1.DeconstructFile(cd.getCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, files1(ID.Text).Sizw).ToArray) 'here is separated binfile
CurFile = Form1.binFile(0)
CurFileUnrle = rle.Unrle(CurFile.Bytes).ToArray
Form1.DeconstructFile(cd.getCDfile(Form1.EngISOPath.Text, files2(ID.Text).Sector, files2(ID.Text).Sizw).ToArray) 'here is separated binfile
EngFile = Form1.binFile(0)
EngFileUnrle = rle.Unrle(EngFile.Bytes).ToArray
'Dim curfile As rleFile = binFile(8)
EngTitle.Text = readEngText(0)
UserTitle.Text = readRusText(0)
Dim pointer As Int32 = BitConverter.ToInt32(CurFileUnrle, 104)
Dim endByte As Int32 = BitConverter.ToInt32(CurFileUnrle, 60)
DataGridView1.Rows.Clear()
Do
If pointer >= endByte Then Exit Do
Dim status = BitConverter.ToInt16(CurFileUnrle, pointer)
Dim statusE = EngFileUnrle(pointer)
pointer += 2
Dim engString = readEngText(pointer - 1)
Dim rustext = readRusText(pointer)
DataGridView1.Rows.Add(status, rustext, engString, statusE)
pointer += 30
Loop
End Sub
Public Function readEngText(ByVal Curbt As Integer)
Dim a = ""
Do
If EngFileUnrle(Curbt) = 3 Or EngFileUnrle(Curbt) = 0 Then Exit Do
If EngFileUnrle(Curbt) > 128 Then EngFileUnrle(Curbt) = Asc("-")
a &= Chr(EngFileUnrle(Curbt))
Curbt += 1
Loop
Return a
End Function
Public Function readRusText(ByVal Curbt As Integer)
Dim a = ""
If BitConverter.ToInt16(CurFileUnrle, Curbt) And &H2000 Then
Dim len = BitConverter.ToInt16(CurFileUnrle, Curbt) And &HFF
Curbt += 2
For b = 0 To len - 1
a &= Chr(CurFileUnrle(Curbt))
Curbt += 1
Next
Else
Dim b = BitConverter.ToInt16(CurFileUnrle, Curbt)
Do
Dim curChar = BitConverter.ToInt16(CurFileUnrle, Curbt)
If (curChar < &H1000) Then a &= Form1.chars(curChar)
'a &= CurFileUnrle(Curbt).ToString("X2") & CurFileUnrle(Curbt + 1).ToString("X2")
Curbt += 2
If Curbt >= CurFileUnrle.Count Then Exit Do
b = BitConverter.ToInt16(CurFileUnrle, Curbt)
Loop Until (b And &H1000)
End If
Return a
End Function
Private Sub UserTitle_TextChanged(sender As Object, e As EventArgs) Handles UserTitle.TextChanged
ChrCount.Text = UserTitle.Text.Length
If UserTitle.Text.Length > 14 Then
ChrCount.ForeColor = Color.Red
Else
ChrCount.ForeColor = Color.DarkGreen
End If
End Sub
Private Sub DataGridView1_CurrentCellChanged(sender As Object, e As EventArgs) Handles DataGridView1.CurrentCellChanged
If IsNothing(DataGridView1.CurrentCell) Then Exit Sub
Dim a = DataGridView1.CurrentCell.Value.ToString.Length
AreaCount.Text = a
If a > 20 Then
AreaCount.ForeColor = Color.Red
Else
AreaCount.ForeColor = Color.DarkGreen
End If
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles SaveToISO.Click
'CHANGING FILE!
Dim cd = New ISOTools
Dim rle = New rleTools
'Making title bytes
MakeSaveRussianString(UserTitle.Text, 24, 0)
Dim off As Int32 = BitConverter.ToInt32(CurFileUnrle, 104)
'Dim pointer As Int32 = BitConverter.ToInt32(CurFileUnrle, 104)
Dim endByte As Int32 = BitConverter.ToInt32(CurFileUnrle, 60)
For Each row In DataGridView1.Rows
CurFileUnrle(off) = row.Cells(0).Value
CurFileUnrle(off + 1) = 0
MakeSaveRussianString(Trim(row.Cells(1).Value), 30, off + 2)
off += 32
Next
Form1.DeconstructFile(cd.getCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, files1(ID.Text).Sizw).ToArray) 'here is separated binfile
Dim curfile = Form1.binFile(0)
Dim before = curfile.Bytes.Count
Form1.binFile(0).Bytes = rle.decodeRLEnew(CurFileUnrle, curfile).ToArray
Form1.binFile(0).BytesAfter = 0
Dim after = Form1.binFile(0).Bytes.Count
'Packing
Dim finalPack = New List(Of Byte)
For Each bin In Form1.binFile
finalPack.AddRange(bin.Bytes)
'AddingBytesAfter
For g = 0 To bin.BytesAfter - 1
finalPack.Add(0)
Next
Next
If finalPack.Count Mod 2048 > 0 Then
For g = 1 To (2048 - (finalPack.Count Mod 2048))
finalPack.Add(0)
Next g
End If
Dim beforeSize As Integer = files1(ID.Text).Sizw
If finalPack.Count <= files1(ID.Text).Sizw Then
'If sizw matched
cd.saveCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, finalPack.Count, finalPack.ToArray)
MsgBox("Succesfully Saved!" & vbCrLf & "Bofore: " & before & vbCrLf & "Afta: " & after & vbCrLf & after - before & "b.")
Exit Sub
End If
If MsgBox("finalPack is Bigger than source :(" &
vbCrLf & "Bofore: " & before & vbCrLf & "Afta: " & after & vbCrLf & after - before & "b." &
vbCrLf & "Do you wanna save it to file?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
If Form1.SaveFileDialog1.ShowDialog <> DialogResult.OK Then Exit Sub
My.Computer.FileSystem.WriteAllBytes(Form1.SaveFileDialog1.FileName, finalPack.ToArray, False)
End If
'My.Computer.FileSystem.WriteAllBytes("D:\Games\PSX\Persona.2.Innocent.Sin\Export\UnRLE\0097\EDITOR_TEST", CurFileUnrle, False)
End Sub
Public Sub MakeSaveRussianString(ByVal str As String, ByVal maxBytes As Integer, ByVal offs As String)
Dim a = New List(Of Byte)
If str = "0010" Then
For x = 0 To maxBytes - 1 Step 2
CurFileUnrle(offs + x) = 0
CurFileUnrle(offs + x + 1) = &H10
Next
Exit Sub
End If
a.Add(str.Length)
a.Add(&H20)
For x = 0 To str.Length - 1
a.Add(Asc(str(x)))
Next
For x = 0 To maxBytes - str.Length - 3
a.Add(0)
Next
For x = 0 To maxBytes - 1
CurFileUnrle(x + offs) = a(x)
Next
End Sub
End Class

View File

@@ -0,0 +1,262 @@
Public Class FontTools
Dim drawSurface As Bitmap
Public Colors = New List(Of Color)
Public Function GetColors()
Colors.Add(Color.Black)
Colors.Add(Color.FromArgb(238, 238, 238))
Colors.Add(Color.FromArgb(24, 24, 24))
Colors.Add(Color.FromArgb(156, 156, 156))
Colors.Add(Color.FromArgb(49, 49, 49))
Colors.Add(Color.FromArgb(246, 82, 131))
Colors.Add(Color.FromArgb(24, 24, 24))
Colors.Add(Color.FromArgb(148, 213, 255)) 'Persona2 TEXT PALETTE
Colors.Add(Color.FromArgb(24, 24, 49))
Colors.Add(Color.FromArgb(131, 230, 131))
Colors.Add(Color.FromArgb(24, 24, 24))
Colors.Add(Color.FromArgb(230, 230, 74))
Colors.Add(Color.FromArgb(49, 49, 24))
Colors.Add(Color.FromArgb(255, 131, 49))
Colors.Add(Color.FromArgb(49, 24, 24))
End Function
Public Sub convertTo16()
'DONE
Dim CurByte As Byte
Dim tempByte As Byte
Dim tempByte2 As Byte
Dim tempByte3 As Byte
Dim tempByte4 As Byte
Dim vertCounter As Integer
Dim newFont = New List(Of Byte)
Dim fontRawData = My.Computer.FileSystem.ReadAllBytes("D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export/JapFont.bin")
Dim ReadCounter = 64919
Dim readAddr = 1152
Do
If readAddr >= ReadCounter Then Exit Do
newFont.Add(ReverseBits(fontRawData(readAddr)))
tempByte2 = ReverseBits(fontRawData(readAddr + 1))
newFont.Add(tempByte2 And &HF0)
tempByte3 = ReverseBits(fontRawData(readAddr + 2))
Dim collby3 As Byte = (tempByte3 >> 4)
newFont.Add(tempByte2 << 4 Or collby3) 'Need last 4 bits
tempByte4 = tempByte3 << 4
newFont.Add(tempByte4)
readAddr += 3
vertCounter += 1
If vertCounter = 6 Then
vertCounter = 0
newFont.Add(0)
newFont.Add(0)
newFont.Add(0)
newFont.Add(0)
newFont.Add(0)
newFont.Add(0)
newFont.Add(0)
newFont.Add(0)
End If
Loop
My.Computer.FileSystem.WriteAllBytes("D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]/Export/WatchMyFont.bin.bak", newFont.ToArray, False)
End Sub
'DONE
Public Sub ConvertTo12()
Dim CurByte As Byte
Dim newFont = New List(Of Byte)
Dim tempByte2 As Byte
Dim tempByte3 As Byte
Dim tempByte4 As Byte
If Not My.Computer.FileSystem.FileExists(Form1.WorkDir.Text & "/JapFont.bin") Then MsgBox(Form1.WorkDir.Text & "/JapFont.bin not found. Check Export path!") : Exit Sub
Dim fontHeader As Byte() = My.Computer.FileSystem.ReadAllBytes(Form1.WorkDir.Text & "/JapFont.bin")
ReDim Preserve fontHeader(1151) 'Loading font header (1152 bytes of normal first font)
newFont.AddRange(fontHeader.ToList)
Dim vertCounter As Integer
Dim fontRawData = My.Computer.FileSystem.ReadAllBytes(Form1.WorkDir.Text & "/WatchMyFont.bin")
Dim ReadCounter = 82572
Dim readAddr = 0
Do
If readAddr >= ReadCounter Then Exit Do
newFont.Add(ReverseBits(fontRawData(readAddr)))
tempByte2 = fontRawData(readAddr + 1) And &HF0
tempByte3 = fontRawData(readAddr + 2) >> 4
newFont.Add(ReverseBits(tempByte2 Or tempByte3))
tempByte3 = fontRawData(readAddr + 2) << 4
tempByte4 = fontRawData(readAddr + 3) >> 4
newFont.Add(ReverseBits(tempByte3 Or tempByte4))
readAddr += 4
vertCounter += 1
If vertCounter = 6 Then
readAddr += 8
vertCounter = 0
End If
Loop
'Creating Rus 8x12 Font @ BA00 (47616)
For aaa = 1 To 47616 - newFont.Count
newFont.Add(0)
Next
readAddr = 32 * 32 ' Starting with CHR32 (space)
Do
For a = 0 To 11 '12 rows loop
newFont.Add(ReverseBits(fontRawData(readAddr)))
readAddr += 2 'skip 2 bytes
Next
readAddr += 8 'skip empty 12*4 bytes
Loop While readAddr < 256 * 32 'All symbols readed - exit
For aaa = 1 To 65520 - newFont.Count
newFont.Add(0)
Next
My.Computer.FileSystem.WriteAllBytes(Form1.WorkDir.Text & "/0059_00_0_0_U", newFont.ToArray, False)
MsgBox("OK to /Export/0059_00_0_0_U", MsgBoxStyle.Information)
End Sub
Public Function ReverseBits(x As Byte) As Byte
x = (((x And &HAA) >> 1) Or ((x And &H55) << 1))
x = (((x And &HCC) >> 2) Or ((x And &H33) << 2))
x = (((x And &HF0) >> 4) Or ((x And &HF) << 4))
Return ((x))
End Function
Public Sub DrawChars(ByRef byt As List(Of Byte), ByRef df As Bitmap, ByVal y As Integer, ByRef CurColor As Integer)
Dim curX = 10
Dim curY = 10 + y
'Load Font Here
Dim font = New List(Of List(Of Byte))
Dim fil = My.Computer.FileSystem.ReadAllBytes("D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\WatchMyFont.bin.bak").ToList
Dim charCount As Integer = fil.Count / 32
For x = 0 To fil.Count - 32 Step 32
Dim curChar = New List(Of Byte)
curChar.AddRange(fil.GetRange(x, 32))
font.Add(curChar)
Next
For a = 0 To byt.Count - 2 Step 2
Dim c = byt(a) + byt(a + 1) * 256
If c = &H1120 Or c = &H1131 Then
curX = curX + 12
Continue For
End If
If c = &H122E Then
CurColor = byt(a + 2)
a = a + 2
Continue For
End If
If c = &H1103 Then
y = y + 12
Continue For
End If
'DrawChar(font(c), curX, curY, df, CurColor)
DrawChar(font(c), curX, curY, df, 0)
curX = curX + 12
notDraw:
Next
End Sub
Public Sub DrawChar(ByRef ch As List(Of Byte), ByVal tx As Integer, ByVal ty As Integer, ByRef df As Bitmap, ByRef CurColor As Integer)
Dim ch2 = New List(Of Byte)
For Each C In ch
ch2.Add(ReverseBits(C))
Next
Dim curSize = Form1.PictureBox1.Size
Dim bits = New BitArray(ch2.ToArray)
For x = 0 To 15
For y = 0 To 15
If x + tx >= curSize.Width Or y + ty >= curSize.Height Then Continue For
If Not bits(x + 16 * y) Then Continue For
DrawX2(x + tx, y + ty, df, Colors(CurColor))
Next
Next
Form1.PictureBox1.Invalidate()
End Sub
Public Sub DrawX2(ByRef x As Integer, ByRef y As Integer, ByRef df As Bitmap, ByVal col As Color)
df.SetPixel(x * 2, y * 2, col)
df.SetPixel(x * 2 + 1, y * 2, col)
df.SetPixel(x * 2, y * 2 + 1, col)
df.SetPixel(x * 2 + 1, y * 2 + 1, col)
End Sub
End Class

2212
p2isPSX_CDToolkit/Form1.Designer.vb generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="DataGridViewTextBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="JAP.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SizeB.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Eng.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="EndSec.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Gap.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="OpenFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="SaveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>159, 17</value>
</metadata>
<metadata name="BackgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>296, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
pf5KQlr+OjFC/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUmOl/kpCWv5KQlr+SkJa/kpC
Wv5SY6X+SkJa/joxQv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUmOl/lJj
pf5KQlr+SkJa/kpCWv46MUL+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA//AAH//wAA//8AAH//gAB//4AAf/+AEH//gBB//4AQf/+AAP4fgAD8B4
AA/AGAAfwAAAH8AAAD/jAAA//4AAf//AAP//wAH//+AD///wB///8AP///wB///8A////AH///gB///4
Af//+AH///gB///8A////gf///////////8=
</value>
</data>
</root>

2049
p2isPSX_CDToolkit/Form1.vb Normal file

File diff suppressed because it is too large Load Diff

94
p2isPSX_CDToolkit/Form2.Designer.vb generated Normal file
View File

@@ -0,0 +1,94 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class ScriptParserWin
Inherits System.Windows.Forms.Form
'Форма переопределяет dispose для очистки списка компонентов.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Является обязательной для конструктора форм Windows Forms
Private components As System.ComponentModel.IContainer
'Примечание: следующая процедура является обязательной для конструктора форм Windows Forms
'Для ее изменения используйте конструктор форм Windows Form.
'Не изменяйте ее в редакторе исходного кода.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.ScriptVarCalculated = New System.Windows.Forms.TextBox()
Me.ScriptVarAddr = New System.Windows.Forms.TextBox()
Me.Button2 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.BackColor = System.Drawing.Color.Black
Me.TextBox1.Font = New System.Drawing.Font("Courier New", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TextBox1.ForeColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer))
Me.TextBox1.Location = New System.Drawing.Point(13, 12)
Me.TextBox1.Multiline = True
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both
Me.TextBox1.Size = New System.Drawing.Size(1291, 1312)
Me.TextBox1.TabIndex = 0
Me.TextBox1.WordWrap = False
'
'ScriptVarCalculated
'
Me.ScriptVarCalculated.Location = New System.Drawing.Point(1036, 1330)
Me.ScriptVarCalculated.Name = "ScriptVarCalculated"
Me.ScriptVarCalculated.Size = New System.Drawing.Size(268, 20)
Me.ScriptVarCalculated.TabIndex = 27
'
'ScriptVarAddr
'
Me.ScriptVarAddr.Location = New System.Drawing.Point(545, 1330)
Me.ScriptVarAddr.Name = "ScriptVarAddr"
Me.ScriptVarAddr.Size = New System.Drawing.Size(204, 20)
Me.ScriptVarAddr.TabIndex = 26
'
'Button2
'
Me.Button2.ForeColor = System.Drawing.Color.Black
Me.Button2.Location = New System.Drawing.Point(755, 1330)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(276, 22)
Me.Button2.TabIndex = 25
Me.Button2.Text = "Calculate Script Var Addr"
Me.Button2.UseVisualStyleBackColor = True
'
'ScriptParserWin
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.Gray
Me.ClientSize = New System.Drawing.Size(1316, 1362)
Me.Controls.Add(Me.ScriptVarCalculated)
Me.Controls.Add(Me.ScriptVarAddr)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.TextBox1)
Me.ForeColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "ScriptParserWin"
Me.ShowIcon = False
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "ScriptParser"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents TextBox1 As TextBox
Friend WithEvents ScriptVarCalculated As TextBox
Friend WithEvents ScriptVarAddr As TextBox
Friend WithEvents Button2 As Button
End Class

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,23 @@

Imports System.Runtime.Remoting.Metadata.W3cXsd2001
Public Class ScriptParserWin
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim addr As Integer
'ScriptVarAddr.Text = ScriptVarAddr.Text.ToString("X4")
Try
Dim addrArr = SoapHexBinary.Parse(ScriptVarAddr.Text).Value
addr = addrArr(0) * 256 + addrArr(1)
Catch ex As Exception
MsgBox("error") : Exit Sub
End Try
Dim blockNum = addr >> 5
Dim bits As String = (1 << (addr And &H1F)).ToString("X8")
Dim revBits = bits.Substring(6, 2) & bits.Substring(4, 2) & bits.Substring(2, 2) & bits.Substring(0, 2)
ScriptVarCalculated.Text = "Blk Addr: " & (&H800820E0 + blockNum * 4).ToString("X8") & " | Onbyt: " & revBits
End Sub
End Class

View File

@@ -0,0 +1,157 @@
Imports System
Imports System.IO
Public Class ISOTools
Public Function getCDfile(ByVal ISOname As String, ByVal StartSector As Integer, ByVal FileSize As Integer)
Dim fileArr = New List(Of Byte)
Dim fs As New FileStream(ISOname, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fs)
If Not Form1.Mode2352.Checked Then
Dim SectorsToRead As Integer = FileSize \ 2048
If FileSize Mod 2048 > 0 Then SectorsToRead += 1
Dim bytesToread = 2048
For a = StartSector To SectorsToRead + StartSector - 1
Dim bytepos = a * &H930 + 24
br.BaseStream.Position = bytepos
fileArr.AddRange(br.ReadBytes(2048))
Next
Else
''''''''''READ RAW FILE WITH 2352 MODE!
br.BaseStream.Position = StartSector * &H930
fileArr.AddRange(br.ReadBytes(FileSize))
End If
br.Dispose()
fs.Dispose()
Return fileArr
End Function
Public Function saveCDfile(ByVal ISOname As String, ByVal StartSector As Integer, ByVal FileSize As Integer, ByRef bytes As Byte())
Try
Dim fs As New FileStream(ISOname, FileMode.Open, FileAccess.Write)
Dim br As New BinaryWriter(fs)
If Not Form1.Mode2352.Checked Then
Dim SectorsToWrite As Integer = FileSize \ 2048
If FileSize Mod 2048 > 0 Then
SectorsToWrite += 1
ReDim Preserve bytes(FileSize + (2048 - (FileSize Mod 2048)))
End If
Dim bytecounter = 0
For a = StartSector To SectorsToWrite + StartSector - 1
Dim bytepos = a * &H930 + 24
br.BaseStream.Position = bytepos
br.Write(bytes, bytecounter, 2048)
bytecounter += 2048
Next
Else ''''''''''READ RAW FILE WITH 2352 MODE!
br.BaseStream.Position = StartSector * &H930
br.Write(bytes, 0, FileSize)
End If
br.Dispose()
fs.Dispose()
Catch ex As Exception
MsgBox("Error! Exception: " & vbCrLf & ex.ToString, MsgBoxStyle.Critical)
End Try
End Function
Public Sub UpdateFileListTable(ByVal ISOname As String, ByRef fileInf As List(Of fileInfo))
Dim tab = New List(Of Byte)
For Each fil In fileInf
tab.AddRange(BitConverter.GetBytes(fil.Sector).ToList)
tab.AddRange(BitConverter.GetBytes(fil.Sizw).ToList)
Next
saveCDfile(ISOname, &H17, &H1B88, tab.ToArray)
End Sub
Public Function makeFileList(ByVal ISOname As String)
Dim a = New List(Of fileInfo)
Dim FilesSectors = getCDfile(ISOname, &H17, &H1B88).ToArray
If ISOname.Contains("KUDOS") Then FilesSectors = getCDfile(ISOname, &H31, &H1B88).ToArray
For x = 0 To 880
a.Add(New fileInfo With {.FileID = x, .Sector = Form1.Read32bitNum(FilesSectors, x * 8), .Sizw = Form1.Read32bitNum(FilesSectors, x * 8 + 4)})
Next
Return a
End Function
Public Sub ReallocateDown(ByVal ISOname As String, ByRef fileInf As List(Of fileInfo), ByVal StartFile As Integer, ByVal BySectors As Integer)
'Dim lastSector = fileInf.Last.Sector + (fileInf.Last.Sizw \ 2048)
'If fileInf.Last.Sizw Mod 2048 > 0 Then lastSector += 1
'For a = lastSector To fileInf(StartFile).Sector Step -1
'Next
''Reading eachFile from end and Save it +Bysectors
'For a = 1143 To StartFile Step -1
' fileInf(a).Sector += BySectors
'Next
''UpdateFileListTable(ISOname, fileInf)
End Sub
End Class

View File

@@ -0,0 +1,92 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class JapCharCodeGenerator
Inherits System.Windows.Forms.Form
'Форма переопределяет dispose для очистки списка компонентов.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Является обязательной для конструктора форм Windows Forms
Private components As System.ComponentModel.IContainer
'Примечание: следующая процедура является обязательной для конструктора форм Windows Forms
'Для ее изменения используйте конструктор форм Windows Form.
'Не изменяйте ее в редакторе исходного кода.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.TextBox2 = New System.Windows.Forms.TextBox()
Me.Button1 = New System.Windows.Forms.Button()
Me.Button2 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Font = New System.Drawing.Font("Lucida Sans Typewriter", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TextBox1.Location = New System.Drawing.Point(1216, 12)
Me.TextBox1.Multiline = True
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.TextBox1.Size = New System.Drawing.Size(275, 663)
Me.TextBox1.TabIndex = 0
'
'TextBox2
'
Me.TextBox2.Font = New System.Drawing.Font("Lucida Sans Typewriter", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TextBox2.Location = New System.Drawing.Point(12, 12)
Me.TextBox2.Multiline = True
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.TextBox2.Size = New System.Drawing.Size(1198, 663)
Me.TextBox2.TabIndex = 0
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(382, 694)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(121, 23)
Me.Button1.TabIndex = 1
Me.Button1.Text = "Generate >>>>"
Me.Button1.UseVisualStyleBackColor = True
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(569, 694)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(75, 23)
Me.Button2.TabIndex = 2
Me.Button2.Text = "Save!"
Me.Button2.UseVisualStyleBackColor = True
'
'JapCharCodeGenerator
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(1503, 729)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.TextBox1)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "JapCharCodeGenerator"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "JapCharCodeGenerator"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents TextBox1 As TextBox
Friend WithEvents TextBox2 As TextBox
Friend WithEvents Button1 As Button
Friend WithEvents Button2 As Button
End Class

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,54 @@
Public Class JapCharCodeGenerator
Public allText As String
Public curBlock As Integer
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
allText = ""
TextBox2.Text = "Dim chars = New List(Of String)" & vbCrLf
'TextBox2.Text = "d.AddRange({""a"", ""b"", ""c"", ""d""})"
curBlock = 0
Dim accum = ""
Dim t = TextBox1.Text
Dim x = 0
Do
If (t(x) = vbCr And t(x + 1) = vbLf) Or x = t.Length - 1 Then
generateline(accum)
accum = ""
x += 2
Continue Do
End If
accum &= t(x)
x += 1
Loop While x < t.Length - 2
TextBox2.Text = allText
End Sub
Public Sub generateline(accum)
If accum = "---" Then allText &= " 'Block " & curBlock & vbCrLf : curBlock += 1 : Exit Sub
allText &= "chars.AddRange({"
For a = 0 To accum.Length - 1
allText &= """" & accum(a) & """"
If a <> accum.Length - 1 Then allText &= ", "
Next
allText &= "}) '" & accum.Length & vbCrLf
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim f = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\FontCode\AtlusFontAppend.vb"
Dim f2 = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\FontCode\codes_source.txt"
My.Computer.FileSystem.WriteAllText(f2, TextBox1.Text, False)
My.Computer.FileSystem.WriteAllText(f, TextBox2.Text, False)
End Sub
End Class

View File

@@ -0,0 +1,230 @@
Partial Class Form1
Public Sub LoadChars()
chars = New List(Of Char)
'Block 0
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", " ", "", """", "#", "$", "%", "&", "'", "(", ")"}) '14
chars.AddRange({"*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7"}) '14
chars.AddRange({"8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E"}) '14
chars.AddRange({"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S"}) '14
chars.AddRange({"T", "U", "V", "W", "X", "Y", "Z", "[", "¥", "]", " ", "_", "'", "a"}) '14
chars.AddRange({"b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o"}) '14
chars.AddRange({"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}"}) '14
chars.AddRange({"_", "", "", "", "", "", "", "", "", "", "~", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "退", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "·", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 1
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "使", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"X", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", "調"}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 2
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "O", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 3
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "宿", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "氿", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "鹿", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", " ", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", " ", "", "", "", ""}) '14
'Block 4
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", ">", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"殿", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "寿", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 5
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "西", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 6
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"辿", "", "", "", "", "稿", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({" ", " ", " ", " ", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 7
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "忿", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "v", "", "", " ", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "沿", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 8
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", " ", " ", " ", " ", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({" ", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", "綿"}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "-", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "D", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
'Block 9
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "尿", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "駿", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "竿", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"", "", "", "竿", "", "", "", "", "", "", "", "", "", ""}) '14
chars.AddRange({"\"}) '1
chars.AddRange({"\"}) '1
chars.AddRange({"\"}) '1
chars.AddRange({"\"}) '1
End Sub
End Class

View File

@@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' Этот код создан программой.
' Исполняемая версия:4.0.30319.42000
'
' Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
' повторной генерации кода.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'ПРИМЕЧАНИЕ. Этот файл создан автоматически; не изменяйте его самостоятельно. Для внесения изменений
' или, если в ходе сборки обнаружены ошибки в этом файле, перейдите в конструктор проектов
' (перейдите к свойствам проекта или дважды щелкните узел "Мой проект" в
' обозревателе решений), и внесите изменения на вкладке "Приложение".
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.p2isPSX_CDView.Form1
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' Общие сведения об этой сборке предоставляются следующим набором
' атрибутов. Отредактируйте значения этих атрибутов, чтобы изменить
' общие сведения об этой сборке.
' Проверьте значения атрибутов сборки
<Assembly: AssemblyTitle("p2isPSX_CDView")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Microsoft")>
<Assembly: AssemblyProduct("p2isPSX_CDView")>
<Assembly: AssemblyCopyright("Copyright © Microsoft 2021")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
<Assembly: Guid("2f7cd285-77e2-41d0-91e7-6c7ad01b5b12")>
' Сведения о версии сборки состоят из следующих четырех значений:
'
' Основной номер версии
' Дополнительный номер версии
' Номер сборки
' Редакция
'
' Можно задать все значения или принять номера сборки и редакции по умолчанию
' используя "*", как показано ниже:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' Этот код создан программой.
' Исполняемая версия:4.0.30319.42000
'
' Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
' повторной генерации кода.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'Этот класс создан автоматически классом StronglyTypedResourceBuilder
'с помощью такого средства, как ResGen или Visual Studio.
'Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
'с параметром /str или перестройте свой проект VS.
'''<summary>
''' Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("p2isPSX_CDView.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Перезаписывает свойство CurrentUICulture текущего потока для всех
''' обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' Этот код создан программой.
' Исполняемая версия:4.0.30319.42000
'
' Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
' повторной генерации кода.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "Функция автоматического сохранения My.Settings"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.p2isPSX_CDView.My.MySettings
Get
Return Global.p2isPSX_CDView.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

265
p2isPSX_CDToolkit/ScriptCheck.Designer.vb generated Normal file
View File

@@ -0,0 +1,265 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class ScriptCheck
Inherits System.Windows.Forms.Form
'Форма переопределяет dispose для очистки списка компонентов.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Является обязательной для конструктора форм Windows Forms
Private components As System.ComponentModel.IContainer
'Примечание: следующая процедура является обязательной для конструктора форм Windows Forms
'Для ее изменения используйте конструктор форм Windows Form.
'Не изменяйте ее в редакторе исходного кода.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ScriptCheck))
Me.PictureBox1 = New System.Windows.Forms.PictureBox()
Me.Dir = New System.Windows.Forms.TextBox()
Me.ProgressBar1 = New System.Windows.Forms.ProgressBar()
Me.FilesLoad = New System.Windows.Forms.Button()
Me.CurFileText = New System.Windows.Forms.Label()
Me.CurFileName = New System.Windows.Forms.Label()
Me.CurrentDial = New System.Windows.Forms.Label()
Me.DemoText = New System.Windows.Forms.Label()
Me.NxDial = New System.Windows.Forms.Button()
Me.prevDial = New System.Windows.Forms.Button()
Me.NxFile = New System.Windows.Forms.Button()
Me.PrevFile = New System.Windows.Forms.Button()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.IDsrch = New System.Windows.Forms.TextBox()
Me.srch = New System.Windows.Forms.Button()
Me.Label1 = New System.Windows.Forms.Label()
Me.Editor = New System.Windows.Forms.Button()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.Panel1.SuspendLayout()
Me.SuspendLayout()
'
'PictureBox1
'
Me.PictureBox1.BackColor = System.Drawing.Color.Transparent
Me.PictureBox1.ErrorImage = Nothing
Me.PictureBox1.InitialImage = Nothing
Me.PictureBox1.Location = New System.Drawing.Point(0, 0)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(940, 188)
Me.PictureBox1.TabIndex = 0
Me.PictureBox1.TabStop = False
'
'Dir
'
Me.Dir.BackColor = System.Drawing.Color.Black
Me.Dir.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.Dir.ForeColor = System.Drawing.SystemColors.InactiveCaption
Me.Dir.Location = New System.Drawing.Point(183, 26)
Me.Dir.Name = "Dir"
Me.Dir.Size = New System.Drawing.Size(643, 13)
Me.Dir.TabIndex = 1
Me.Dir.Text = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\UnRLE\0057_ALL_SCENER" &
"Y"
'
'ProgressBar1
'
Me.ProgressBar1.Location = New System.Drawing.Point(0, 475)
Me.ProgressBar1.Name = "ProgressBar1"
Me.ProgressBar1.Size = New System.Drawing.Size(940, 10)
Me.ProgressBar1.TabIndex = 2
'
'FilesLoad
'
Me.FilesLoad.Location = New System.Drawing.Point(661, 45)
Me.FilesLoad.Name = "FilesLoad"
Me.FilesLoad.Size = New System.Drawing.Size(165, 23)
Me.FilesLoad.TabIndex = 3
Me.FilesLoad.Text = "Load TRNSL Files"
Me.FilesLoad.UseVisualStyleBackColor = True
'
'CurFileText
'
Me.CurFileText.Font = New System.Drawing.Font("Montserrat", 27.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.CurFileText.ForeColor = System.Drawing.Color.DarkGray
Me.CurFileText.Location = New System.Drawing.Point(492, 106)
Me.CurFileText.Name = "CurFileText"
Me.CurFileText.Size = New System.Drawing.Size(334, 52)
Me.CurFileText.TabIndex = 4
Me.CurFileText.Text = "0 / 0"
Me.CurFileText.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'CurFileName
'
Me.CurFileName.Font = New System.Drawing.Font("Montserrat", 11.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.CurFileName.ForeColor = System.Drawing.Color.DarkGray
Me.CurFileName.Location = New System.Drawing.Point(292, 158)
Me.CurFileName.Name = "CurFileName"
Me.CurFileName.Size = New System.Drawing.Size(534, 29)
Me.CurFileName.TabIndex = 4
Me.CurFileName.Text = "Current File"
Me.CurFileName.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'CurrentDial
'
Me.CurrentDial.Font = New System.Drawing.Font("Montserrat", 20.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.CurrentDial.ForeColor = System.Drawing.Color.DarkGray
Me.CurrentDial.Location = New System.Drawing.Point(596, 195)
Me.CurrentDial.Name = "CurrentDial"
Me.CurrentDial.Size = New System.Drawing.Size(230, 37)
Me.CurrentDial.TabIndex = 4
Me.CurrentDial.Text = "0 / 0"
Me.CurrentDial.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'DemoText
'
Me.DemoText.BackColor = System.Drawing.Color.FromArgb(CType(CType(128, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(0, Byte), Integer))
Me.DemoText.Font = New System.Drawing.Font("Courier New", 15.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.DemoText.ForeColor = System.Drawing.Color.White
Me.DemoText.Location = New System.Drawing.Point(12, 92)
Me.DemoText.Name = "DemoText"
Me.DemoText.Size = New System.Drawing.Size(206, 155)
Me.DemoText.TabIndex = 5
Me.DemoText.Visible = False
'
'NxDial
'
Me.NxDial.Location = New System.Drawing.Point(646, 241)
Me.NxDial.Name = "NxDial"
Me.NxDial.Size = New System.Drawing.Size(180, 38)
Me.NxDial.TabIndex = 6
Me.NxDial.Text = ">>"
Me.NxDial.UseVisualStyleBackColor = True
'
'prevDial
'
Me.prevDial.Location = New System.Drawing.Point(556, 257)
Me.prevDial.Name = "prevDial"
Me.prevDial.Size = New System.Drawing.Size(75, 23)
Me.prevDial.TabIndex = 7
Me.prevDial.Text = "<<"
Me.prevDial.UseVisualStyleBackColor = True
'
'NxFile
'
Me.NxFile.Location = New System.Drawing.Point(751, 80)
Me.NxFile.Name = "NxFile"
Me.NxFile.Size = New System.Drawing.Size(75, 23)
Me.NxFile.TabIndex = 6
Me.NxFile.Text = ">>"
Me.NxFile.UseVisualStyleBackColor = True
'
'PrevFile
'
Me.PrevFile.Location = New System.Drawing.Point(661, 81)
Me.PrevFile.Name = "PrevFile"
Me.PrevFile.Size = New System.Drawing.Size(75, 23)
Me.PrevFile.TabIndex = 7
Me.PrevFile.Text = "<<"
Me.PrevFile.UseVisualStyleBackColor = True
'
'Panel1
'
Me.Panel1.BackgroundImage = CType(resources.GetObject("Panel1.BackgroundImage"), System.Drawing.Image)
Me.Panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch
Me.Panel1.Controls.Add(Me.PictureBox1)
Me.Panel1.Location = New System.Drawing.Point(0, 285)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(931, 188)
Me.Panel1.TabIndex = 9
'
'IDsrch
'
Me.IDsrch.Location = New System.Drawing.Point(492, 80)
Me.IDsrch.Name = "IDsrch"
Me.IDsrch.Size = New System.Drawing.Size(48, 20)
Me.IDsrch.TabIndex = 10
Me.IDsrch.Text = "0181"
'
'srch
'
Me.srch.Location = New System.Drawing.Point(547, 80)
Me.srch.Name = "srch"
Me.srch.Size = New System.Drawing.Size(75, 23)
Me.srch.TabIndex = 11
Me.srch.Text = "GO"
Me.srch.UseVisualStyleBackColor = True
'
'Label1
'
Me.Label1.Font = New System.Drawing.Font("Montserrat", 11.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label1.ForeColor = System.Drawing.Color.DarkGray
Me.Label1.Location = New System.Drawing.Point(315, 75)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(171, 29)
Me.Label1.TabIndex = 4
Me.Label1.Text = "SearchFileID -->"
Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'Editor
'
Me.Editor.Location = New System.Drawing.Point(219, 250)
Me.Editor.Name = "Editor"
Me.Editor.Size = New System.Drawing.Size(130, 23)
Me.Editor.TabIndex = 12
Me.Editor.Text = "Open Editor"
Me.Editor.UseVisualStyleBackColor = True
'
'ScriptCheck
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(64, Byte), Integer))
Me.ClientSize = New System.Drawing.Size(941, 485)
Me.Controls.Add(Me.Editor)
Me.Controls.Add(Me.srch)
Me.Controls.Add(Me.IDsrch)
Me.Controls.Add(Me.PrevFile)
Me.Controls.Add(Me.prevDial)
Me.Controls.Add(Me.NxFile)
Me.Controls.Add(Me.NxDial)
Me.Controls.Add(Me.DemoText)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.CurFileName)
Me.Controls.Add(Me.CurrentDial)
Me.Controls.Add(Me.CurFileText)
Me.Controls.Add(Me.FilesLoad)
Me.Controls.Add(Me.ProgressBar1)
Me.Controls.Add(Me.Dir)
Me.Controls.Add(Me.Panel1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "ScriptCheck"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "ScriptCheck"
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
Me.Panel1.ResumeLayout(False)
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents PictureBox1 As PictureBox
Friend WithEvents Dir As TextBox
Friend WithEvents ProgressBar1 As ProgressBar
Friend WithEvents FilesLoad As Button
Friend WithEvents CurFileText As Label
Friend WithEvents CurFileName As Label
Friend WithEvents CurrentDial As Label
Friend WithEvents DemoText As Label
Friend WithEvents NxDial As Button
Friend WithEvents prevDial As Button
Friend WithEvents NxFile As Button
Friend WithEvents PrevFile As Button
Friend WithEvents Panel1 As Panel
Friend WithEvents IDsrch As TextBox
Friend WithEvents srch As Button
Friend WithEvents Label1 As Label
Friend WithEvents Editor As Button
End Class

View File

@@ -0,0 +1,613 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="Panel1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
RU5ErkJggg==
</value>
</data>
</root>

View File

@@ -0,0 +1,413 @@
Imports IO
Imports IO.Directory
Public Class ScriptCheck
Public files As New List(Of String)
Public CurFilenum As Integer
Public RRes As ScriptFile
Public OverallDial As Integer
Public CurDial As Integer
Public CurX, CurY
Public CurColor As Color
Public CurShadColor As Color
Public IsNewWin As Boolean
Public FontData As List(Of Byte)
Public Colors = New List(Of Color)
'Public CurEow As Integer
Public NextEowPointer As Integer
Public SelectionCount As Integer
Public Cursel As Integer
Dim drawSurface As Bitmap
Private Sub ScriptCheck_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FontData = My.Computer.FileSystem.ReadAllBytes("D:\Games\PSX\Persona.2.Innocent.Sin\Export\0059_00_0_0_U").ToList
Colors.Add(Color.Black)
Colors.Add(Color.FromArgb(238, 238, 238))
Colors.Add(Color.FromArgb(24, 24, 24))
Colors.Add(Color.FromArgb(156, 156, 156))
Colors.Add(Color.FromArgb(49, 49, 49))
Colors.Add(Color.FromArgb(246, 82, 131))
Colors.Add(Color.FromArgb(24, 24, 24))
Colors.Add(Color.FromArgb(148, 213, 255)) 'Persona2 TEXT PALETTE
Colors.Add(Color.FromArgb(24, 24, 49))
Colors.Add(Color.FromArgb(131, 230, 131))
Colors.Add(Color.FromArgb(24, 24, 24))
Colors.Add(Color.FromArgb(230, 230, 74))
Colors.Add(Color.FromArgb(49, 49, 24))
Colors.Add(Color.FromArgb(255, 131, 49))
Colors.Add(Color.FromArgb(49, 24, 24))
drawSurface = New Bitmap(PictureBox1.ClientSize.Width * 5, PictureBox1.ClientSize.Height * 5)
PictureBox1.Image = drawSurface
FilesLoad.PerformClick()
End Sub
'Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
' e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
' e.Graphics.ScaleTransform(3, 3)
' e.Graphics.DrawImage(drawSurface, 0, 0)
'End Sub
Private Sub FilesLoad_Click(sender As Object, e As EventArgs) Handles FilesLoad.Click
files = IO.Directory.GetFiles(Dir.Text, "*.TRNSL").ToList
CurFilenum = 0
CurDial = 0
If files.Count = 0 Then MsgBox("No TRNSL files in init directory!") : Exit Sub
InitFile(0)
End Sub
Public Sub InitFile(ByVal id As Integer)
Dim a = New ScriptTools
RRes = New ScriptFile
a.ParseResource(My.Computer.FileSystem.ReadAllBytes(files(id)), RRes)
' PictureBox2.Parent = PictureBox1
NextEowPointer = 0
OverallDial = RRes.textPointers.Count
CurDial = 0
PrintText()
End Sub
Public Sub PrintText()
If IsNewWin Then ClearWinAndReset()
UpdateCurFileDial()
ShowDialodID(CurDial)
End Sub
Public Sub ClearWinAndReset()
PictureBox1.BackColor = Color.Transparent
PictureBox1.Invalidate()
drawSurface = New Bitmap(PictureBox1.ClientSize.Width * 5, PictureBox1.ClientSize.Height * 5)
PictureBox1.Image = drawSurface
CurX = 4
CurY = 4
IsNewWin = False
End Sub
Public Sub UpdateCurFileDial()
CurFileText.Text = "f: " & CurFilenum + 1 & " / " & files.Count
CurFileName.Text = Split(files(CurFilenum), "\").ToList.Last
CurrentDial.Text = "w: " & CurDial + 1 & " / " & OverallDial
ProgressBar1.Value = CurDial / OverallDial * 100
End Sub
Public Sub ShowDialodID(ByVal id As Integer)
Dim m As List(Of Byte) = RRes.Text
Dim a = RRes.textPointers(id) 'counter
DemoText.Text = ""
If NextEowPointer <> 0 Then a = NextEowPointer
Do
Dim c = get2(m, a)
If c = &H122E Then 'Парсим код цвета текста
CurColor = Colors(get2(m, a + 2))
CurShadColor = Colors(get2(m, a + 2) + 1)
a += 4
GoTo endlineTest
End If
If c = &H1101 Then DemoText.Text &= vbCrLf : CurX = 3 : CurY += 14 : a += 2 : GoTo endlineTest ' Перенос строки
If c = &H1131 Then DemoText.Text &= " " : CurX += 4 : a += 2 : GoTo endlineTest ' Табуляция (+12 пикс)
If c = &H1208 Then DemoText.Text &= "[SelectionMenu][" & get2(m, a + 2) & "]" : SelectionCount = get2(m, a + 2) : Cursel = 0 : a += 4 : GoTo endlineTest ' Пауза 1с при воспроизведении диалога
If c = &H1121 Then
For vv = 0 To 3 : DrawChar(Asc("Суоу"(vv))) : Next
a += 2 : GoTo endlineTest
End If
'Имя игрока
If c = &H1120 Then
For vv = 0 To 4 : DrawChar(Asc("Тацуя"(vv))) : Next
a += 2
GoTo endlineTest 'Фамилия игрока
End If
'Кликуха
If c = 4372 Then
For vv = 0 To 3 : DrawChar(Asc("Тацу"(vv))) : Next
a += 2
GoTo endlineTest 'Кликуха
End If
If c = &H1106 Then
If get2(m, a + 2) = &H1102 Then
If get2(m, a + 4) = &H1103 Then 'Закрыть окна диалога!
IsNewWin = True
NextEowPointer = 0
Exit Do
Else
NextEowPointer = a + 4 'След диалог без закрытия окна
Exit Do
End If
End If
End If
If c = &H1109 Then
If get2(m, a + 2) = &H1102 Then
If get2(m, a + 4) = &H1103 Then 'Выбор варианта ответа!
IsNewWin = True
SelectionCount = 0 : Cursel = 0
a += 6 : GoTo endlineTest
End If
End If
End If
If c = &H1103 Then Exit Do
If c And &H1000 Then 'COMMAND PARSE
Dim comLen = c >> 8
comLen = comLen And &HF 'command length check
'Dim comCode = c And &HFF
a += comLen * 2 'Jump command
GoTo endlineTest
ElseIf c And &H2000 Then 'Если строка в моём однобайтном формате
Dim charNum = c And &HFF
a += 2
For x = 1 To charNum
DemoText.Text &= Chr(m(a))
DrawChar(m(a))
a += 1
Next
If charNum And 1 Then a += 1 'if AND1 - +1
GoTo endlineTest
End If
'draw any char from font!
DrawChar(c)
a += 2
endlineTest:
'Читаем до следующего текст-поинтера или конца массива
If id < RRes.textPointers.Count - 1 Then
If a >= RRes.textPointers(id + 1) Then Exit Do
Else
If a >= m.Count - 1 Then Exit Do
End If
Loop
End Sub
Public Sub DrawChar(ByVal chr As Integer)
Dim f = New FontTools
Dim readAddr = 1152 + 18 * chr '18 bytes per char
'making shadow
For a = 0 To 5
Dim b1 As Byte = FontData(readAddr + (a * 3))
Dim b2 As Byte = FontData(readAddr + (a * 3) + 1)
Dim b3 As Byte = FontData(readAddr + (a * 3) + 2)
Dim b1bits = New BitArray(BitConverter.GetBytes(b1))
Dim b2bits = New BitArray(BitConverter.GetBytes(b2))
Dim b3bits = New BitArray(BitConverter.GetBytes(b3))
For x = 0 To 7
If b1bits(x) Then drawpixel(x + CurX + 1, CurY + 1, True)
Next
Dim addX = CurX + 9
For x = 0 To 7
If b2bits(x) Then drawpixel(x + addX, CurY + 1, True)
If x = 3 Then addX -= 12 : CurY += 1
Next
For x = 0 To 7
If b3bits(x) Then drawpixel(x + CurX + 5, CurY + 1, True)
Next
CurY += 1
Next
CurY -= 12
'making char
For a = 0 To 5
Dim b1 As Byte = FontData(readAddr + (a * 3))
Dim b2 As Byte = FontData(readAddr + (a * 3) + 1)
Dim b3 As Byte = FontData(readAddr + (a * 3) + 2)
Dim b1bits = New BitArray(BitConverter.GetBytes(b1))
Dim b2bits = New BitArray(BitConverter.GetBytes(b2))
Dim b3bits = New BitArray(BitConverter.GetBytes(b3))
For x = 0 To 7
If b1bits(x) Then drawpixel(x + CurX, CurY, False)
Next
Dim addX = CurX + 8
For x = 0 To 7
If b2bits(x) Then drawpixel(x + addX, CurY, False)
If x = 3 Then addX -= 12 : CurY += 1
Next
For x = 0 To 7
If b3bits(x) Then drawpixel(x + CurX + 4, CurY, False)
Next
CurY += 1
Next
PictureBox1.Invalidate()
CurY -= 12
CurX += 6
End Sub
Public Sub drawpixel(ByVal x As Integer, ByVal y As Integer, ByVal isShadow As Boolean)
For a = 0 To 2
For b = 0 To 2
If isShadow Then
drawSurface.SetPixel(x * 3 + a, y * 3 + b, CurShadColor)
Else
drawSurface.SetPixel(x * 3 + a, y * 3 + b, CurColor)
End If
Next
Next
End Sub
Public Function get2(ByRef f As List(Of Byte), ByVal Index As Integer)
Return f(Index) + f(Index + 1) * 256
End Function
Private Sub NxFile_Click(sender As Object, e As EventArgs) Handles NxFile.Click
If CurFilenum = files.Count - 1 Then
CurFilenum = 0
Else
CurFilenum += 1
End If
InitFile(CurFilenum)
UpdateCurFileDial()
End Sub
Private Sub PrevFile_Click(sender As Object, e As EventArgs) Handles PrevFile.Click
If CurFilenum = 0 Then CurFilenum = files.Count
CurFilenum -= 1
InitFile(CurFilenum)
UpdateCurFileDial()
End Sub
Private Sub NxDial_Click(sender As Object, e As EventArgs) Handles NxDial.Click
If NextEowPointer <> 0 Then PrintText() : Exit Sub
If CurDial = OverallDial - 1 Then
CurDial = 0
If CurFilenum <> files.Count - 1 Then
CurFilenum += 1
InitFile(CurFilenum)
UpdateCurFileDial()
End If
Else
CurDial += 1
End If
PrintText()
End Sub
Private Sub srch_Click(sender As Object, e As EventArgs) Handles srch.Click
Dim a = files.FindIndex(Function(x) x.Contains(IDsrch.Text))
If a = -1 Then
MsgBox("File not found :(")
Exit Sub
Else
InitFile(a)
CurFilenum = a
UpdateCurFileDial()
End If
End Sub
Private Sub prevDial_Click(sender As Object, e As EventArgs) Handles prevDial.Click
If CurDial = 0 Then CurDial = OverallDial
NextEowPointer = 0
CurDial -= 1
PrintText()
End Sub
Private Sub Editor_Click(sender As Object, e As EventArgs) Handles Editor.Click
Dim fil = Replace("""C:\Program Files (x86)\Notepad++\Notepad++.exe"" """ & files(CurFilenum) & """", ".TRNSL", "")
Shell(fil)
End Sub
Private Sub ScriptCheck_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Add Then NxDial.PerformClick()
End Sub
End Class

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,687 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class StringsOffsetEditorvb
Inherits System.Windows.Forms.Form
'Форма переопределяет dispose для очистки списка компонентов.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Является обязательной для конструктора форм Windows Forms
Private components As System.ComponentModel.IContainer
'Примечание: следующая процедура является обязательной для конструктора форм Windows Forms
'Для ее изменения используйте конструктор форм Windows Form.
'Не изменяйте ее в редакторе исходного кода.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
Me.FileID = New System.Windows.Forms.TextBox()
Me.Offset = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.Label2 = New System.Windows.Forms.Label()
Me.Label3 = New System.Windows.Forms.Label()
Me.Label4 = New System.Windows.Forms.Label()
Me.Label5 = New System.Windows.Forms.Label()
Me.UserPath = New System.Windows.Forms.TextBox()
Me.EngISOPath = New System.Windows.Forms.TextBox()
Me.JapISOPath = New System.Windows.Forms.TextBox()
Me.LoadBtn = New System.Windows.Forms.Button()
Me.SaveBtn = New System.Windows.Forms.Button()
Me.DataGridView1 = New System.Windows.Forms.DataGridView()
Me.ID = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.JAP = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.Eng = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.Column1 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.RadioFile = New System.Windows.Forms.RadioButton()
Me.RadioSector = New System.Windows.Forms.RadioButton()
Me.SetName = New System.Windows.Forms.TextBox()
Me.Label6 = New System.Windows.Forms.Label()
Me.Button1 = New System.Windows.Forms.Button()
Me.tempSave = New System.Windows.Forms.Button()
Me.tempLoad = New System.Windows.Forms.Button()
Me.SaveSettings = New System.Windows.Forms.Button()
Me.LoadSettings = New System.Windows.Forms.Button()
Me.OffSz = New System.Windows.Forms.Label()
Me.TxtSz = New System.Windows.Forms.Label()
Me.Allsz = New System.Windows.Forms.Label()
Me.YourTxtSz = New System.Windows.Forms.Label()
Me.CurLen = New System.Windows.Forms.Label()
Me.patchFileID = New System.Windows.Forms.TextBox()
Me.PatchFileBtn = New System.Windows.Forms.Button()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.ReplaceAll = New System.Windows.Forms.Button()
Me.PatchFileRadio = New System.Windows.Forms.RadioButton()
Me.PatchExeRadio = New System.Windows.Forms.RadioButton()
Me.patchOffset = New System.Windows.Forms.TextBox()
Me.Label7 = New System.Windows.Forms.Label()
Me.LineModeSimple = New System.Windows.Forms.RadioButton()
Me.GroupBox2 = New System.Windows.Forms.GroupBox()
Me.DontEnglish = New System.Windows.Forms.CheckBox()
Me.OnlyCodes_Mode = New System.Windows.Forms.CheckBox()
Me.LineModeComplex = New System.Windows.Forms.RadioButton()
Me.EngSave = New System.Windows.Forms.Button()
Me.EngOffset = New System.Windows.Forms.TextBox()
Me.Label8 = New System.Windows.Forms.Label()
Me.ListBox1 = New System.Windows.Forms.ListBox()
Me.KudosLoad = New System.Windows.Forms.CheckBox()
Me.Label9 = New System.Windows.Forms.Label()
Me.KUDOSpath = New System.Windows.Forms.TextBox()
Me.FindOffsetInJP = New System.Windows.Forms.Button()
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.GroupBox1.SuspendLayout()
Me.GroupBox2.SuspendLayout()
Me.SuspendLayout()
'
'FileID
'
Me.FileID.Location = New System.Drawing.Point(54, 125)
Me.FileID.Name = "FileID"
Me.FileID.Size = New System.Drawing.Size(100, 20)
Me.FileID.TabIndex = 0
Me.FileID.Text = "0681"
'
'Offset
'
Me.Offset.Location = New System.Drawing.Point(218, 125)
Me.Offset.Name = "Offset"
Me.Offset.Size = New System.Drawing.Size(52, 20)
Me.Offset.TabIndex = 1
Me.Offset.Text = "49376"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(4, 128)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(44, 13)
Me.Label1.TabIndex = 2
Me.Label1.Text = "Number"
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(164, 128)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(54, 13)
Me.Label2.TabIndex = 2
Me.Label2.Text = "JAPOffset"
'
'Label3
'
Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(376, 23)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(102, 13)
Me.Label3.TabIndex = 6
Me.Label3.Text = "User (Modified) .BIN"
'
'Label4
'
Me.Label4.AutoSize = True
Me.Label4.Location = New System.Drawing.Point(54, 62)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(120, 13)
Me.Label4.TabIndex = 7
Me.Label4.Text = "USA EP CD Image .BIN"
'
'Label5
'
Me.Label5.AutoSize = True
Me.Label5.Location = New System.Drawing.Point(54, 23)
Me.Label5.Name = "Label5"
Me.Label5.Size = New System.Drawing.Size(127, 13)
Me.Label5.TabIndex = 8
Me.Label5.Text = "Japan EP CD Image .BIN"
'
'UserPath
'
Me.UserPath.Location = New System.Drawing.Point(376, 38)
Me.UserPath.Name = "UserPath"
Me.UserPath.Size = New System.Drawing.Size(300, 20)
Me.UserPath.TabIndex = 3
Me.UserPath.Text = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Persona 2 - Batsu USER.bin"
'
'EngISOPath
'
Me.EngISOPath.Location = New System.Drawing.Point(54, 77)
Me.EngISOPath.Name = "EngISOPath"
Me.EngISOPath.Size = New System.Drawing.Size(300, 20)
Me.EngISOPath.TabIndex = 4
Me.EngISOPath.Text = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Persona 2 - EP (USA) [Locali" &
"zed - Undub].bin"
'
'JapISOPath
'
Me.JapISOPath.Location = New System.Drawing.Point(54, 39)
Me.JapISOPath.Name = "JapISOPath"
Me.JapISOPath.Size = New System.Drawing.Size(300, 20)
Me.JapISOPath.TabIndex = 5
Me.JapISOPath.Text = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Persona 2 - Batsu (NTSC-J) [" &
"SLPS-02825].bin"
'
'LoadBtn
'
Me.LoadBtn.Location = New System.Drawing.Point(54, 172)
Me.LoadBtn.Name = "LoadBtn"
Me.LoadBtn.Size = New System.Drawing.Size(328, 23)
Me.LoadBtn.TabIndex = 9
Me.LoadBtn.Text = "READ"
Me.LoadBtn.UseVisualStyleBackColor = True
'
'SaveBtn
'
Me.SaveBtn.Location = New System.Drawing.Point(1023, 1095)
Me.SaveBtn.Name = "SaveBtn"
Me.SaveBtn.Size = New System.Drawing.Size(148, 38)
Me.SaveBtn.TabIndex = 9
Me.SaveBtn.Text = "SAVE"
Me.SaveBtn.UseVisualStyleBackColor = True
'
'DataGridView1
'
Me.DataGridView1.AllowUserToAddRows = False
Me.DataGridView1.AllowUserToDeleteRows = False
Me.DataGridView1.AllowUserToResizeRows = False
Me.DataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells
Me.DataGridView1.BackgroundColor = System.Drawing.Color.Gray
Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.ID, Me.JAP, Me.Eng, Me.Column1})
Me.DataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter
Me.DataGridView1.Location = New System.Drawing.Point(12, 221)
Me.DataGridView1.Name = "DataGridView1"
Me.DataGridView1.RowHeadersVisible = False
DataGridViewCellStyle1.Font = New System.Drawing.Font("Consolas", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.DataGridView1.RowsDefaultCellStyle = DataGridViewCellStyle1
Me.DataGridView1.RowTemplate.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
Me.DataGridView1.RowTemplate.DefaultCellStyle.ForeColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
Me.DataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.DataGridView1.Size = New System.Drawing.Size(1433, 863)
Me.DataGridView1.TabIndex = 11
'
'ID
'
Me.ID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.ID.FillWeight = 20.0!
Me.ID.HeaderText = "ID"
Me.ID.Name = "ID"
Me.ID.ReadOnly = True
'
'JAP
'
Me.JAP.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.JAP.HeaderText = "JAP_Str"
Me.JAP.Name = "JAP"
Me.JAP.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable
'
'Eng
'
Me.Eng.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Eng.HeaderText = "Eng_Str"
Me.Eng.Name = "Eng"
Me.Eng.ReadOnly = True
'
'Column1
'
Me.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill
Me.Column1.FillWeight = 50.0!
Me.Column1.HeaderText = "Kudos"
Me.Column1.Name = "Column1"
'
'RadioFile
'
Me.RadioFile.AutoSize = True
Me.RadioFile.Checked = True
Me.RadioFile.Location = New System.Drawing.Point(67, 105)
Me.RadioFile.Name = "RadioFile"
Me.RadioFile.Size = New System.Drawing.Size(68, 17)
Me.RadioFile.TabIndex = 12
Me.RadioFile.TabStop = True
Me.RadioFile.Text = "FILE or"
Me.RadioFile.UseVisualStyleBackColor = True
'
'RadioSector
'
Me.RadioSector.AutoSize = True
Me.RadioSector.Location = New System.Drawing.Point(142, 105)
Me.RadioSector.Name = "RadioSector"
Me.RadioSector.Size = New System.Drawing.Size(88, 17)
Me.RadioSector.TabIndex = 13
Me.RadioSector.Text = "SLPS002825"
Me.RadioSector.UseVisualStyleBackColor = True
'
'SetName
'
Me.SetName.Location = New System.Drawing.Point(472, 64)
Me.SetName.Name = "SetName"
Me.SetName.Size = New System.Drawing.Size(204, 20)
Me.SetName.TabIndex = 16
'
'Label6
'
Me.Label6.AutoSize = True
Me.Label6.Location = New System.Drawing.Point(376, 67)
Me.Label6.Name = "Label6"
Me.Label6.Size = New System.Drawing.Size(73, 13)
Me.Label6.TabIndex = 2
Me.Label6.Text = "SettingsName"
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(42, 1095)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(112, 38)
Me.Button1.TabIndex = 17
Me.Button1.Text = "ClearJapText"
Me.Button1.UseVisualStyleBackColor = True
'
'tempSave
'
Me.tempSave.Location = New System.Drawing.Point(309, 1095)
Me.tempSave.Name = "tempSave"
Me.tempSave.Size = New System.Drawing.Size(112, 38)
Me.tempSave.TabIndex = 17
Me.tempSave.Text = "TempSave"
Me.tempSave.UseVisualStyleBackColor = True
'
'tempLoad
'
Me.tempLoad.Location = New System.Drawing.Point(181, 1094)
Me.tempLoad.Name = "tempLoad"
Me.tempLoad.Size = New System.Drawing.Size(112, 38)
Me.tempLoad.TabIndex = 17
Me.tempLoad.Text = "TempLoad"
Me.tempLoad.UseVisualStyleBackColor = True
'
'SaveSettings
'
Me.SaveSettings.Location = New System.Drawing.Point(576, 92)
Me.SaveSettings.Name = "SaveSettings"
Me.SaveSettings.Size = New System.Drawing.Size(100, 23)
Me.SaveSettings.TabIndex = 9
Me.SaveSettings.Text = "SAVE"
Me.SaveSettings.UseVisualStyleBackColor = True
'
'LoadSettings
'
Me.LoadSettings.Location = New System.Drawing.Point(472, 92)
Me.LoadSettings.Name = "LoadSettings"
Me.LoadSettings.Size = New System.Drawing.Size(100, 23)
Me.LoadSettings.TabIndex = 9
Me.LoadSettings.Text = "LOAD"
Me.LoadSettings.UseVisualStyleBackColor = True
'
'OffSz
'
Me.OffSz.BackColor = System.Drawing.Color.LightGray
Me.OffSz.Location = New System.Drawing.Point(732, 10)
Me.OffSz.Name = "OffSz"
Me.OffSz.Size = New System.Drawing.Size(128, 13)
Me.OffSz.TabIndex = 2
Me.OffSz.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'TxtSz
'
Me.TxtSz.BackColor = System.Drawing.Color.LightGray
Me.TxtSz.Location = New System.Drawing.Point(732, 23)
Me.TxtSz.Name = "TxtSz"
Me.TxtSz.Size = New System.Drawing.Size(128, 13)
Me.TxtSz.TabIndex = 2
Me.TxtSz.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'Allsz
'
Me.Allsz.BackColor = System.Drawing.Color.LightGray
Me.Allsz.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.Allsz.Location = New System.Drawing.Point(732, 36)
Me.Allsz.Name = "Allsz"
Me.Allsz.Size = New System.Drawing.Size(128, 13)
Me.Allsz.TabIndex = 2
Me.Allsz.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'YourTxtSz
'
Me.YourTxtSz.BackColor = System.Drawing.Color.LightGray
Me.YourTxtSz.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.YourTxtSz.Location = New System.Drawing.Point(709, 61)
Me.YourTxtSz.Name = "YourTxtSz"
Me.YourTxtSz.Size = New System.Drawing.Size(151, 13)
Me.YourTxtSz.TabIndex = 2
Me.YourTxtSz.Text = " "
Me.YourTxtSz.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'CurLen
'
Me.CurLen.AutoSize = True
Me.CurLen.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
Me.CurLen.Location = New System.Drawing.Point(253, 198)
Me.CurLen.Name = "CurLen"
Me.CurLen.Size = New System.Drawing.Size(17, 20)
Me.CurLen.TabIndex = 18
Me.CurLen.Text = "''"
'
'patchFileID
'
Me.patchFileID.Location = New System.Drawing.Point(29, 40)
Me.patchFileID.Name = "patchFileID"
Me.patchFileID.Size = New System.Drawing.Size(100, 20)
Me.patchFileID.TabIndex = 19
Me.patchFileID.Text = "0001"
'
'PatchFileBtn
'
Me.PatchFileBtn.Location = New System.Drawing.Point(29, 63)
Me.PatchFileBtn.Name = "PatchFileBtn"
Me.PatchFileBtn.Size = New System.Drawing.Size(246, 23)
Me.PatchFileBtn.TabIndex = 21
Me.PatchFileBtn.Text = "Patch"
Me.PatchFileBtn.UseVisualStyleBackColor = True
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.PatchFileBtn)
Me.GroupBox1.Controls.Add(Me.patchFileID)
Me.GroupBox1.Controls.Add(Me.PatchFileRadio)
Me.GroupBox1.Controls.Add(Me.PatchExeRadio)
Me.GroupBox1.Controls.Add(Me.patchOffset)
Me.GroupBox1.Controls.Add(Me.Label7)
Me.GroupBox1.Enabled = False
Me.GroupBox1.Location = New System.Drawing.Point(883, 12)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(300, 103)
Me.GroupBox1.TabIndex = 22
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "Patch Text Routine Call"
'
'ReplaceAll
'
Me.ReplaceAll.Location = New System.Drawing.Point(912, 128)
Me.ReplaceAll.Name = "ReplaceAll"
Me.ReplaceAll.Size = New System.Drawing.Size(246, 42)
Me.ReplaceAll.TabIndex = 22
Me.ReplaceAll.Text = "Search And Replace All Text Calls"
Me.ReplaceAll.UseVisualStyleBackColor = True
'
'PatchFileRadio
'
Me.PatchFileRadio.AutoSize = True
Me.PatchFileRadio.Checked = True
Me.PatchFileRadio.Location = New System.Drawing.Point(61, 19)
Me.PatchFileRadio.Name = "PatchFileRadio"
Me.PatchFileRadio.Size = New System.Drawing.Size(68, 17)
Me.PatchFileRadio.TabIndex = 12
Me.PatchFileRadio.TabStop = True
Me.PatchFileRadio.Text = "FILE or"
Me.PatchFileRadio.UseVisualStyleBackColor = True
'
'PatchExeRadio
'
Me.PatchExeRadio.AutoSize = True
Me.PatchExeRadio.Location = New System.Drawing.Point(152, 19)
Me.PatchExeRadio.Name = "PatchExeRadio"
Me.PatchExeRadio.Size = New System.Drawing.Size(76, 17)
Me.PatchExeRadio.TabIndex = 13
Me.PatchExeRadio.Text = "SLPS0021"
Me.PatchExeRadio.UseVisualStyleBackColor = True
'
'patchOffset
'
Me.patchOffset.Location = New System.Drawing.Point(175, 40)
Me.patchOffset.Name = "patchOffset"
Me.patchOffset.Size = New System.Drawing.Size(100, 20)
Me.patchOffset.TabIndex = 1
Me.patchOffset.Text = "361460"
'
'Label7
'
Me.Label7.AutoSize = True
Me.Label7.Location = New System.Drawing.Point(240, 26)
Me.Label7.Name = "Label7"
Me.Label7.Size = New System.Drawing.Size(35, 13)
Me.Label7.TabIndex = 2
Me.Label7.Text = "Offset"
'
'LineModeSimple
'
Me.LineModeSimple.AutoSize = True
Me.LineModeSimple.Checked = True
Me.LineModeSimple.Location = New System.Drawing.Point(40, 19)
Me.LineModeSimple.Name = "LineModeSimple"
Me.LineModeSimple.Size = New System.Drawing.Size(56, 17)
Me.LineModeSimple.TabIndex = 23
Me.LineModeSimple.TabStop = True
Me.LineModeSimple.Text = "Simple"
Me.LineModeSimple.UseVisualStyleBackColor = True
'
'GroupBox2
'
Me.GroupBox2.Controls.Add(Me.DontEnglish)
Me.GroupBox2.Controls.Add(Me.OnlyCodes_Mode)
Me.GroupBox2.Controls.Add(Me.LineModeComplex)
Me.GroupBox2.Controls.Add(Me.LineModeSimple)
Me.GroupBox2.Location = New System.Drawing.Point(391, 121)
Me.GroupBox2.Name = "GroupBox2"
Me.GroupBox2.Size = New System.Drawing.Size(234, 68)
Me.GroupBox2.TabIndex = 24
Me.GroupBox2.TabStop = False
Me.GroupBox2.Text = "LinesMode"
'
'DontEnglish
'
Me.DontEnglish.AutoSize = True
Me.DontEnglish.Location = New System.Drawing.Point(114, 19)
Me.DontEnglish.Name = "DontEnglish"
Me.DontEnglish.Size = New System.Drawing.Size(115, 17)
Me.DontEnglish.TabIndex = 25
Me.DontEnglish.Text = "Dont Read English"
Me.DontEnglish.UseVisualStyleBackColor = True
'
'OnlyCodes_Mode
'
Me.OnlyCodes_Mode.AutoSize = True
Me.OnlyCodes_Mode.Location = New System.Drawing.Point(114, 42)
Me.OnlyCodes_Mode.Name = "OnlyCodes_Mode"
Me.OnlyCodes_Mode.Size = New System.Drawing.Size(67, 17)
Me.OnlyCodes_Mode.TabIndex = 24
Me.OnlyCodes_Mode.Text = "FullCode"
Me.OnlyCodes_Mode.UseVisualStyleBackColor = True
'
'LineModeComplex
'
Me.LineModeComplex.AutoSize = True
Me.LineModeComplex.Location = New System.Drawing.Point(40, 42)
Me.LineModeComplex.Name = "LineModeComplex"
Me.LineModeComplex.Size = New System.Drawing.Size(65, 17)
Me.LineModeComplex.TabIndex = 23
Me.LineModeComplex.Text = "Complex"
Me.LineModeComplex.UseVisualStyleBackColor = True
'
'EngSave
'
Me.EngSave.Location = New System.Drawing.Point(529, 1094)
Me.EngSave.Name = "EngSave"
Me.EngSave.Size = New System.Drawing.Size(135, 38)
Me.EngSave.TabIndex = 25
Me.EngSave.Text = "ENG SAVE"
Me.EngSave.UseVisualStyleBackColor = True
'
'EngOffset
'
Me.EngOffset.Location = New System.Drawing.Point(333, 125)
Me.EngOffset.Name = "EngOffset"
Me.EngOffset.Size = New System.Drawing.Size(49, 20)
Me.EngOffset.TabIndex = 1
Me.EngOffset.Text = "20332"
'
'Label8
'
Me.Label8.AutoSize = True
Me.Label8.Location = New System.Drawing.Point(276, 128)
Me.Label8.Name = "Label8"
Me.Label8.Size = New System.Drawing.Size(58, 13)
Me.Label8.TabIndex = 2
Me.Label8.Text = "ENGOffset"
'
'ListBox1
'
Me.ListBox1.FormattingEnabled = True
Me.ListBox1.Location = New System.Drawing.Point(698, 92)
Me.ListBox1.Name = "ListBox1"
Me.ListBox1.Size = New System.Drawing.Size(179, 82)
Me.ListBox1.TabIndex = 26
'
'KudosLoad
'
Me.KudosLoad.AutoSize = True
Me.KudosLoad.Location = New System.Drawing.Point(1258, 80)
Me.KudosLoad.Name = "KudosLoad"
Me.KudosLoad.Size = New System.Drawing.Size(113, 17)
Me.KudosLoad.TabIndex = 27
Me.KudosLoad.Text = "Load Kudos Text?"
Me.KudosLoad.UseVisualStyleBackColor = True
'
'Label9
'
Me.Label9.AutoSize = True
Me.Label9.Location = New System.Drawing.Point(1189, 23)
Me.Label9.Name = "Label9"
Me.Label9.Size = New System.Drawing.Size(69, 13)
Me.Label9.TabIndex = 29
Me.Label9.Text = "KUDOS .BIN"
'
'KUDOSpath
'
Me.KUDOSpath.Location = New System.Drawing.Point(1189, 39)
Me.KUDOSpath.Name = "KUDOSpath"
Me.KUDOSpath.Size = New System.Drawing.Size(262, 20)
Me.KUDOSpath.TabIndex = 28
Me.KUDOSpath.Text = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\P2_KUDOS.bin"
'
'FindOffsetInJP
'
Me.FindOffsetInJP.Location = New System.Drawing.Point(307, 147)
Me.FindOffsetInJP.Name = "FindOffsetInJP"
Me.FindOffsetInJP.Size = New System.Drawing.Size(75, 23)
Me.FindOffsetInJP.TabIndex = 30
Me.FindOffsetInJP.Text = "Find in JP"
Me.FindOffsetInJP.UseVisualStyleBackColor = True
'
'StringsOffsetEditorvb
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.Gray
Me.ClientSize = New System.Drawing.Size(1470, 1140)
Me.Controls.Add(Me.FindOffsetInJP)
Me.Controls.Add(Me.ReplaceAll)
Me.Controls.Add(Me.Label9)
Me.Controls.Add(Me.KUDOSpath)
Me.Controls.Add(Me.KudosLoad)
Me.Controls.Add(Me.ListBox1)
Me.Controls.Add(Me.EngSave)
Me.Controls.Add(Me.GroupBox2)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.CurLen)
Me.Controls.Add(Me.tempLoad)
Me.Controls.Add(Me.tempSave)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.SetName)
Me.Controls.Add(Me.RadioSector)
Me.Controls.Add(Me.RadioFile)
Me.Controls.Add(Me.DataGridView1)
Me.Controls.Add(Me.SaveBtn)
Me.Controls.Add(Me.SaveSettings)
Me.Controls.Add(Me.LoadSettings)
Me.Controls.Add(Me.LoadBtn)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.Label4)
Me.Controls.Add(Me.Label5)
Me.Controls.Add(Me.UserPath)
Me.Controls.Add(Me.EngISOPath)
Me.Controls.Add(Me.JapISOPath)
Me.Controls.Add(Me.YourTxtSz)
Me.Controls.Add(Me.Allsz)
Me.Controls.Add(Me.TxtSz)
Me.Controls.Add(Me.OffSz)
Me.Controls.Add(Me.Label6)
Me.Controls.Add(Me.Label8)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.EngOffset)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.Offset)
Me.Controls.Add(Me.FileID)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.Name = "StringsOffsetEditorvb"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "StringsOffsetEditorvb"
CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit()
Me.GroupBox1.ResumeLayout(False)
Me.GroupBox1.PerformLayout()
Me.GroupBox2.ResumeLayout(False)
Me.GroupBox2.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents FileID As TextBox
Friend WithEvents Offset As TextBox
Friend WithEvents Label1 As Label
Friend WithEvents Label2 As Label
Friend WithEvents Label3 As Label
Friend WithEvents Label4 As Label
Friend WithEvents Label5 As Label
Friend WithEvents UserPath As TextBox
Friend WithEvents EngISOPath As TextBox
Friend WithEvents JapISOPath As TextBox
Friend WithEvents LoadBtn As Button
Friend WithEvents SaveBtn As Button
Friend WithEvents DataGridView1 As DataGridView
Friend WithEvents RadioFile As RadioButton
Friend WithEvents RadioSector As RadioButton
Friend WithEvents SetName As TextBox
Friend WithEvents Label6 As Label
Friend WithEvents Button1 As Button
Friend WithEvents tempSave As Button
Friend WithEvents tempLoad As Button
Friend WithEvents SaveSettings As Button
Friend WithEvents LoadSettings As Button
Friend WithEvents OffSz As Label
Friend WithEvents TxtSz As Label
Friend WithEvents Allsz As Label
Friend WithEvents YourTxtSz As Label
Friend WithEvents CurLen As Label
Friend WithEvents patchFileID As TextBox
Friend WithEvents PatchFileBtn As Button
Friend WithEvents GroupBox1 As GroupBox
Friend WithEvents PatchFileRadio As RadioButton
Friend WithEvents PatchExeRadio As RadioButton
Friend WithEvents patchOffset As TextBox
Friend WithEvents Label7 As Label
Friend WithEvents LineModeSimple As RadioButton
Friend WithEvents GroupBox2 As GroupBox
Friend WithEvents LineModeComplex As RadioButton
Friend WithEvents EngSave As Button
Friend WithEvents OnlyCodes_Mode As CheckBox
Friend WithEvents EngOffset As TextBox
Friend WithEvents Label8 As Label
Friend WithEvents ReplaceAll As Button
Friend WithEvents ListBox1 As ListBox
Friend WithEvents DontEnglish As CheckBox
Friend WithEvents ID As DataGridViewTextBoxColumn
Friend WithEvents JAP As DataGridViewTextBoxColumn
Friend WithEvents Eng As DataGridViewTextBoxColumn
Friend WithEvents Column1 As DataGridViewTextBoxColumn
Friend WithEvents KudosLoad As CheckBox
Friend WithEvents Label9 As Label
Friend WithEvents KUDOSpath As TextBox
Friend WithEvents FindOffsetInJP As Button
End Class

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="JAP.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Eng.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,741 @@
Imports System.IO
Imports System.Runtime.Remoting.Metadata.W3cXsd2001
Public Class StringsOffsetEditorvb
Public files1 As List(Of fileInfo)
Public files2 As List(Of fileInfo)
Public files3 As List(Of fileInfo)
Public files4 As List(Of fileInfo) 'KUDOS
Public CurFile As Byte()
Public EngFile As Byte()
Public JapFile As Byte()
Public KudosFile As Byte()
Public MaximusSize As Integer
Public OffsetsTableSize As Integer
Public TextSize As Integer
Private Sub StringsOffsetEditorvb_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim cd = New ISOTools
'Reading filetable and make array
files1 = cd.makeFileList(UserPath.Text)
files2 = cd.makeFileList(EngISOPath.Text)
files3 = cd.makeFileList(JapISOPath.Text)
files4 = cd.makeFileList(KUDOSpath.Text)
End Sub
Private Sub FindOffsetInJP_Click(sender As Object, e As EventArgs) Handles FindOffsetInJP.Click
Dim cd = New ISOTools
If Not IsNumeric(FileID.Text) Then MsgBox("FILE ID IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
If Not IsNumeric(EngOffset.Text) Then MsgBox("ENG OFFSET IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
If RadioFile.Checked Then
CurFile = cd.getCDfile(UserPath.Text, files1(FileID.Text).Sector, files1(FileID.Text).Sizw).ToArray
EngFile = cd.getCDfile(EngISOPath.Text, files2(FileID.Text).Sector, files2(FileID.Text).Sizw).ToArray
Else
CurFile = cd.getCDfile(UserPath.Text, 27, 1812408).ToArray
EngFile = cd.getCDfile(EngISOPath.Text, 27, 1812408).ToArray
End If
Dim Off = BitConverter.ToInt32(EngFile, EngOffset.Text)
If Off > 1000 Then MsgBox("Error in EngOffset (Kakaya-to Hnya)!", MsgBoxStyle.Critical) : Exit Sub
Dim offsets = New List(Of Integer)
For a = 0 To CurFile.Length - 1 Step 4
If BitConverter.ToInt32(CurFile, a) = Off Then
'Validate table with offsets
If BitConverter.ToInt32(CurFile, a + 4) = Off * 4 + 4 Then offsets.Add(a) 'First_offset * 4 + 4 == must be address after offsets table
End If
Next
If offsets.Count = 0 Then MsgBox("Offsets not found in JAP ISO!", MsgBoxStyle.Critical) : Exit Sub
If offsets.Count = 1 Then Offset.Text = offsets(0) : LoadBtn.PerformClick() : Exit Sub
Dim txt = "Found " & offsets.Count & " offsets.Count" & vbCrLf
For a = 0 To offsets.Count - 1
txt &= offsets(a) & " : " & BitConverter.ToInt32(CurFile, offsets(a)).ToString("X8") & " "
txt &= BitConverter.ToInt32(CurFile, offsets(a) + 4).ToString("X8") & " "
txt &= BitConverter.ToInt32(CurFile, offsets(a) + 8).ToString("X8") & " "
txt &= BitConverter.ToInt32(CurFile, offsets(a) + 12).ToString("X8") & vbCrLf
Next
Dim Input = InputBox(txt & vbCrLf & "Enter offset ID:", "More than 1", "0")
If Not IsNumeric(Input) Then Exit Sub
If Int(Input) > offsets.Count - 1 Then Exit Sub
'Load offset and texts
Offset.Text = offsets(Input) : LoadBtn.PerformClick()
End Sub
Private Sub LoadBtn_Click(sender As Object, e As EventArgs) Handles LoadBtn.Click
Dim cd = New ISOTools
If Not IsNumeric(FileID.Text) Then MsgBox("FILE ID IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
If Not IsNumeric(Offset.Text) Then MsgBox("FILE OFFSET IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
If RadioFile.Checked Then
CurFile = cd.getCDfile(UserPath.Text, files1(FileID.Text).Sector, files1(FileID.Text).Sizw).ToArray
EngFile = cd.getCDfile(EngISOPath.Text, files2(FileID.Text).Sector, files2(FileID.Text).Sizw).ToArray
JapFile = cd.getCDfile(JapISOPath.Text, files3(FileID.Text).Sector, files3(FileID.Text).Sizw).ToArray
KudosFile = cd.getCDfile(KUDOSpath.Text, files4(FileID.Text).Sector, files2(FileID.Text).Sizw).ToArray
Else
CurFile = cd.getCDfile(UserPath.Text, 27, 1812408).ToArray
EngFile = cd.getCDfile(EngISOPath.Text, 27, 1812408).ToArray
JapFile = cd.getCDfile(JapISOPath.Text, 27, 1812408).ToArray
KudosFile = cd.getCDfile(KUDOSpath.Text, 27 + 26, 1812408).ToArray
End If
If BitConverter.ToInt32(CurFile, Offset.Text) > 1000 Then MsgBox("Error in MainfileOffset!", MsgBoxStyle.Critical) : Exit Sub
'If BitConverter.ToInt32(EngFile, Offset.Text) > 1000 Then MsgBox("Error in ENGfileOffset!", MsgBoxStyle.Critical) : Exit Sub
Dim rws As Integer = BitConverter.ToInt32(CurFile, Offset.Text)
Dim reader = Offset.Text + 4
Dim engReader = EngOffset.Text + 4
Dim japRd = 0
Dim engRd = 0
Dim kudRd = 0
Dim estr As String = ""
Dim kstr As String = ""
DataGridView1.Rows.Clear()
For a = 0 To rws - 1
If DontEnglish.Checked Then GoTo dontEnglish
'READING ENG STRING
Dim curAddr As Integer = BitConverter.ToInt32(EngFile, engReader) + EngOffset.Text
estr = ""
Do
Dim chrr = BitConverter.ToUInt16(EngFile, curAddr) 'Reading 2 Bytes!
If chrr = &H96E Then estr &= "[man]" : curAddr += 2 : Continue Do
If chrr = &H96F Then estr &= "[woman]" : curAddr += 2 : Continue Do
If (chrr And &H1000) Or OnlyCodes_Mode.Checked Then
If chrr = &H1101 And BitConverter.ToUInt16(EngFile, curAddr + 2) = &H1106 And
BitConverter.ToUInt16(EngFile, curAddr + 4) = &H1101 And
BitConverter.ToUInt16(EngFile, curAddr + 6) = &H1103 Then estr &= "[END]" : Exit Do
If chrr = &H1136 Then
curAddr += 2
Dim aaa = EngFile(curAddr)
Do Until aaa = 0
estr &= Chr(aaa)
curAddr += 1
aaa = EngFile(curAddr)
Loop
If curAddr And 1 Then curAddr += 1
Continue Do
End If
If chrr = &H1103 Then estr &= "[END311]" : Exit Do
If chrr = &H1101 And BitConverter.ToUInt16(EngFile, curAddr + 2) = &H1103 Then estr &= "[end]" : Exit Do
If chrr = &H1120 Then estr &= " " : curAddr += 2 : Continue Do
If chrr = &H1121 Then estr &= " " : curAddr += 2 : Continue Do
Dim c1 = EngFile(curAddr) : Dim c2 = EngFile(curAddr + 1)
Dim gg = c2 And 15
If OnlyCodes_Mode.Checked Then
estr &= "[" & c1.ToString("X2") & c2.ToString("X2") & "]"
curAddr += 2
Else
For byteskip = 1 To gg
estr &= "[" & c1.ToString("X2") & c2.ToString("X2") & "]"
curAddr += 2
c1 = EngFile(curAddr) : c2 = EngFile(curAddr + 1)
Next
End If
Continue Do
End If
chrr = chrr And 255 : If chrr < 32 Then chrr += 32
estr &= Chr(chrr)
curAddr += 2
Loop
'reading Kudos
If Not KudosLoad.Checked Then GoTo dontEnglish
kstr = ""
curAddr = BitConverter.ToInt32(KudosFile, engReader) + EngOffset.Text
Do
Dim chrr = BitConverter.ToUInt16(KudosFile, curAddr) 'Reading 2 Bytes!
If (chrr And &H1000) Or OnlyCodes_Mode.Checked Then
If chrr = &H1101 And BitConverter.ToUInt16(KudosFile, curAddr + 2) = &H1106 And
BitConverter.ToUInt16(KudosFile, curAddr + 4) = &H1101 And
BitConverter.ToUInt16(KudosFile, curAddr + 6) = &H1103 Then kstr &= "[END]" : Exit Do
If chrr = &H1136 Then
curAddr += 2
Dim aaa = KudosFile(curAddr)
Do Until aaa = 0
kstr &= Chr(aaa)
curAddr += 1
aaa = KudosFile(curAddr)
Loop
If curAddr And 1 Then curAddr += 1
Continue Do
End If
If chrr = &H1103 Then Exit Do
If chrr = &H1101 And BitConverter.ToUInt16(KudosFile, curAddr + 2) = &H1103 Then Exit Do
If chrr = &H1120 Then kstr &= " " : curAddr += 2 : Continue Do
If chrr = &H1121 Then kstr &= " " : curAddr += 2 : Continue Do
Dim c1 = KudosFile(curAddr) : Dim c2 = KudosFile(curAddr + 1)
Dim gg = c2 And 15
If OnlyCodes_Mode.Checked Then
kstr &= "[" & c1.ToString("X2") & c2.ToString("X2") & "]"
curAddr += 2
Else
For byteskip = 1 To gg
kstr &= "[" & c1.ToString("X2") & c2.ToString("X2") & "]"
curAddr += 2
c1 = KudosFile(curAddr) : c2 = KudosFile(curAddr + 1)
Next
End If
Continue Do
End If
chrr = chrr And 255 : If chrr < 32 Then chrr += 32
kstr &= Chr(chrr)
curAddr += 2
Loop
kstr = Unkudos(kstr)
dontEnglish:
'READING JAP STRING
Dim jstr As String = ""
Dim curJAddr As Integer = BitConverter.ToInt32(CurFile, reader) + Offset.Text
Do
If BitConverter.ToInt16(CurFile, curJAddr) And &H2000 Then 'If its my rus text
curJAddr += 2
For x = 0 To CurFile(curJAddr - 2) - 1
jstr &= Chr(CurFile(curJAddr + x))
Next
curJAddr += CurFile(curJAddr - 2)
If curJAddr And 1 Then curJAddr += 1
End If
If LineModeSimple.Checked Then Exit Do
If BitConverter.ToInt16(CurFile, curJAddr) And &H2000 Then Exit Do
'If jstr.Length > 500 Then Exit Do
Dim chrr = BitConverter.ToUInt16(CurFile, curJAddr) 'Reading 2 Bytes!
If chrr = &H96E Then jstr &= "[man]" : curJAddr += 2 : Continue Do
If chrr = &H96F Then jstr &= "[woman]" : curJAddr += 2 : Continue Do
If (chrr And &H1000) Or OnlyCodes_Mode.Checked Then
If chrr = &H1101 And BitConverter.ToUInt16(CurFile, curJAddr + 2) = &H1106 And
BitConverter.ToUInt16(CurFile, curJAddr + 4) = &H1101 And
BitConverter.ToUInt16(CurFile, curJAddr + 6) = &H1103 Then jstr &= "[END]" : Exit Do
If chrr = &H1103 Then jstr &= "[END311]" : Exit Do
If chrr = &H1101 And BitConverter.ToUInt16(CurFile, curJAddr + 2) = &H1103 Then Exit Do 'jstr &= "[end]" : Exit Do
If chrr = &H1120 Then jstr &= " " : curJAddr += 2 : Continue Do
If chrr = &H1121 Then jstr &= " " : curJAddr += 2 : Continue Do
Dim c1 = CurFile(curJAddr) : Dim c2 = CurFile(curJAddr + 1)
Dim gg = c2 And 15
If OnlyCodes_Mode.Checked Then
jstr &= "[" & c1.ToString("X2") & c2.ToString("X2") & "]"
curJAddr += 2
Else
For byteskip = 1 To gg
jstr &= "[" & c1.ToString("X2") & c2.ToString("X2") & "]"
curJAddr += 2
c1 = CurFile(curJAddr) : c2 = CurFile(curJAddr + 1)
Next
End If
Continue Do
End If
'chrr = chrr And 255 : If chrr < 32 Then chrr += 32
'jstr &= CurFile(curJAddr).ToString("X2") & CurFile(curJAddr + 1).ToString("X2")
jstr &= Form1.chars(CurFile(curJAddr) + CurFile(curJAddr + 1) * 256)
curJAddr += 2
Loop
Myscr:
DataGridView1.Rows.Add(a, jstr, estr, kstr)
reader += 4 'shift offset addr
engReader += 4
Next
OffsetsTableSize = BitConverter.ToInt32(JapFile, Offset.Text) * 4 + 4
Dim lastJapStrOffs As Integer = BitConverter.ToInt32(JapFile, OffsetsTableSize + Offset.Text - 4) + Offset.Text
'reading japan table limis
reader = lastJapStrOffs
Do
If JapFile(reader) = 3 And JapFile(reader + 1) = &H11 Then
TextSize = reader + 2 - Offset.Text - OffsetsTableSize
MaximusSize = reader + 2 - Offset.Text
Exit Do
End If
reader += 1
Loop
OffSz.Text = "Offset Table: " & OffsetsTableSize
TxtSz.Text = "Text Size: " & TextSize
Allsz.Text = "OverAll: " & MaximusSize
End Sub
Public Function CompileLine(ByRef str As String)
Dim bts = New List(Of Byte)
Dim c As Integer 'counter
If str.Length = 0 Then Return bts
'OLD JAP TEXT FORMAT
If str(0) = "#" Then
'xx += 1
For xx = 1 To str.Length - 1
bts.Add(Asc(str(xx)))
bts.Add(0)
Next
bts.Add(0)
bts.Add(16) 'Close string
Return bts
End If
'NEW FORMAT
For xx = 0 To str.Length - 1
If str(xx) = "^" Then xx += 1
If str(xx) = "[" Then
Dim skRes As String = getFromSkobki(str, xx)
If skRes = "END" Then
bts.AddRange({1, 17, 6, 17, 1, 17, 3, 17}) : Exit For
End If
If skRes = "end" Then
bts.AddRange({1, 17, 3, 17}) : Exit For
End If
If skRes = "END311" Then
bts.AddRange({3, 17}) : Exit For
End If
If skRes = "man" Then bts.AddRange({110, 9}) : Continue For
If skRes = "woman" Then bts.AddRange({111, 9}) : Continue For
If skRes.Length = 4 Then
bts.AddRange(SoapHexBinary.Parse(skRes).Value.ToList)
End If
Continue For
End If
Dim SimpleTextAccum = New List(Of Byte)
Dim readCounter As Byte = 1
Do
If xx = str.Length Then xx -= 1 : Exit Do
If Asc(str(xx)) < 32 Or Asc(str(xx)) = 91 Then xx -= 1 : Exit Do
SimpleTextAccum.Add(Asc(str(xx)))
xx += 1
Loop
'if 1 or 2 bytes
If SimpleTextAccum.Count = 1 Then bts.AddRange({SimpleTextAccum(0), 0}) : Continue For
If SimpleTextAccum.Count = 2 Then bts.AddRange({SimpleTextAccum(0), 0, SimpleTextAccum(1), 0}) : Continue For
bts.Add(SimpleTextAccum.Count)
bts.Add(&H20) 'command & length
bts.AddRange(SimpleTextAccum) 'attach textline
If SimpleTextAccum.Count And 1 Then bts.Add(0) ' if and 1 - add empty byte
Next
Return bts
End Function
Private Sub SaveBtn_Click(sender As Object, e As EventArgs) Handles SaveBtn.Click
Dim FinalArr = New List(Of Byte)
For a = 0 To OffsetsTableSize - 1
FinalArr.Add(CurFile(a + Offset.Text))
Next
For Each row In DataGridView1.Rows
Dim isSimilar As Boolean = False
Dim curIndx = DataGridView1.Rows.IndexOf(row)
Dim curOffset As Integer = FinalArr.Count
'NEED TO SEARCH SIMILAR STRINGS!!! And MAKE INDEX without ADDING STRING!
For xxx = 0 To curIndx - 1
If DataGridView1.Rows(xxx).Cells(1).Value = row.Cells(1).Value Then
isSimilar = True
curOffset = BitConverter.ToInt32(FinalArr.ToArray, xxx * 4 + 4)
Exit For
End If
Next
Dim offsetAddr As Integer = curIndx * 4 + 4
FinalArr(offsetAddr) = BitConverter.GetBytes(curOffset)(0)
FinalArr(offsetAddr + 1) = BitConverter.GetBytes(curOffset)(1)
FinalArr(offsetAddr + 2) = BitConverter.GetBytes(curOffset)(2)
If isSimilar Then Continue For 'Similar String
Dim curStr = row.Cells(1).Value.ToString
'TEXT ADDING PART
If curStr = "" Then Continue For
If LineModeSimple.Checked And curStr(0) <> "^" And curStr(0) <> "#" Then
FinalArr.AddRange({curStr.Length, &H20}) 'Length Of string
For a = 0 To curStr.Length - 1
FinalArr.Add(Asc(curStr(a)))
Next
If FinalArr.Count And 1 Then FinalArr.Add(0)
Else
FinalArr.AddRange(CompileLine(curStr))
End If
Next
'Saving & importing FIle
If FinalArr.Count > MaximusSize Then MsgBox("SIZE EXCEED! " & FinalArr.Count) : Exit Sub
For a = 0 To FinalArr.Count - 1
CurFile(a + Offset.Text) = FinalArr(a)
Next
Dim cd = New ISOTools
If RadioFile.Checked Then
cd.saveCDfile(UserPath.Text, files1(FileID.Text).Sector, files1(FileID.Text).Sizw, CurFile)
Else
cd.saveCDfile(UserPath.Text, 27, 1812408, CurFile)
End If
MsgBox("Succesfully Saved!", MsgBoxStyle.Information)
'Dim filnam As String = "D:\Games\PSX\Persona.2.Innocent.Sin\Export\0063_SHOPS_CODE\EDITOR\TESTOUTPUT"
'My.Computer.FileSystem.WriteAllBytes(filnam, FinalArr.ToArray, False)
End Sub
Private Sub SaveSettings_Click(sender As Object, e As EventArgs) Handles SaveSettings.Click
If SetName.Text.Count = 0 Then MsgBox("Enter name!") : Exit Sub
Dim filnam As String = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\LINES_EDITOR\"
If RadioFile.Checked Then filnam &= FileID.Text & "_" Else filnam &= "0000_"
filnam &= Offset.Text & "_" & EngOffset.Text & "_" & SetName.Text & ".txt"
My.Computer.FileSystem.WriteAllText(filnam, SetName.Text, False)
End Sub
Private Sub LoadSettings_Click(sender As Object, e As EventArgs) Handles LoadSettings.Click
Form1.OpenFileDialog1.InitialDirectory = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\LINES_EDITOR\"
If Form1.OpenFileDialog1.ShowDialog <> DialogResult.OK Then Exit Sub
Dim fileInfo = Split(Path.GetFileNameWithoutExtension(Form1.OpenFileDialog1.FileName), "_")
Dim Settings() = Split(My.Computer.FileSystem.ReadAllText(Form1.OpenFileDialog1.FileName), vbCrLf)
SetName.Text = Settings(0)
If fileInfo(0) = "0000" Then
RadioFile.Checked = False : RadioSector.Checked = True
FileID.Text = fileInfo(0)
Offset.Text = fileInfo(1)
EngOffset.Text = fileInfo(2)
LoadBtn.PerformClick()
Else
RadioFile.Checked = True : RadioSector.Checked = False
FileID.Text = fileInfo(0)
Offset.Text = fileInfo(1)
EngOffset.Text = fileInfo(2)
LoadBtn.PerformClick()
End If
End Sub
Public Sub CalcYourTextSize()
Dim byteCount = 0
If LineModeSimple.Checked Then
For Each row In DataGridView1.Rows
Dim rrr = row.Cells(1).Value
If Not IsNothing(rrr) Then
If rrr.ToString.Length = 0 Then Continue For
'if jap insert
If rrr(0) = "#" Then
byteCount += (rrr.ToString.Length - 1) * 2 + 2
Else
byteCount += 2 + rrr.ToString.Length
End If
End If
Next
If byteCount > TextSize Then
YourTxtSz.ForeColor = Color.Red
Else
YourTxtSz.ForeColor = Color.Blue
End If
If byteCount And 1 Then byteCount += 1
Else
For Each row In DataGridView1.Rows
Dim curIndx = DataGridView1.Rows.IndexOf(row)
For xxx = 0 To curIndx - 1
If DataGridView1.Rows(xxx).Cells(1).Value = row.Cells(1).Value Then GoTo simil
Next
Dim line As List(Of Byte) = CompileLine(row.Cells(1).Value.ToString) 'Check similar strings
byteCount += line.Count
simil:
Next
End If
YourTxtSz.Text = "Your text sz: " & byteCount
If byteCount > TextSize Then YourTxtSz.ForeColor = Color.Red Else YourTxtSz.ForeColor = Color.Blue
End Sub
Public Function getFromSkobki(ByRef tx As String, ByRef x As Integer)
x = x + 1
Dim accum = ""
Do While tx(x) <> "]"
accum &= tx(x)
x += 1
Loop
Return accum
End Function
Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
CalcYourTextSize()
End Sub
Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
If LineModeComplex.Checked Then Exit Sub
If DataGridView1.CurrentCell.ColumnIndex <> 1 Then Exit Sub
Dim aaa = DataGridView1.CurrentCell
If IsNothing(aaa.Value) Then Exit Sub
Dim ddd = aaa.Value.ToString.Length
CurLen.Text = "Cur. Len.: " & ddd
If ddd > 19 Then CurLen.ForeColor = Color.Red Else CurLen.ForeColor = Color.Blue
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles tempSave.Click
Dim filnam As String = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\LINES_EDITOR\TEMP_TEXT\"
If RadioFile.Checked Then filnam &= FileID.Text & "_" Else filnam &= "0000_"
filnam &= Offset.Text & "_" & SetName.Text & "_TEMP_TEXT.txt"
Dim txt As String = ""
For Each row In DataGridView1.Rows
Dim aaa = DataGridView1.CurrentCell
If IsNothing(row.Cells(1).Value) Then MsgBox("Error reading tgable! Pleasem, resave!") : Exit Sub
txt += row.Cells(1).Value.ToString & vbCrLf
Next
My.Computer.FileSystem.WriteAllText(filnam, txt, False)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles tempLoad.Click
Form1.OpenFileDialog1.InitialDirectory = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\LINES_EDITOR\TEMP_TEXT\"
If Form1.OpenFileDialog1.ShowDialog <> DialogResult.OK Then Exit Sub
Dim txt = Split(My.Computer.FileSystem.ReadAllText(Form1.OpenFileDialog1.FileName), vbCrLf)
ReDim Preserve txt(DataGridView1.Rows.Count - 1)
For Each row In DataGridView1.Rows
row.Cells(1).Value = txt(DataGridView1.Rows.IndexOf(row))
Next
End Sub
Private Sub PatchFileBtn_Click(sender As Object, e As EventArgs) Handles PatchFileBtn.Click
Dim cd = New ISOTools
If Not IsNumeric(patchFileID.Text) Then MsgBox("FILE ID IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
If Not IsNumeric(patchOffset.Text) Then MsgBox("FILE OFFSET IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
Dim patchFile() As Byte
If PatchFileRadio.Checked Then
patchFile = cd.getCDfile(UserPath.Text, files1(patchFileID.Text).Sector, files1(patchFileID.Text).Sizw).ToArray
Else
patchFile = cd.getCDfile(UserPath.Text, 27, 1812408).ToArray
End If
Dim test = BitConverter.ToInt32(patchFile, patchOffset.Text)
If test = 201474048 Then MsgBox("Already patched with 80090000! ;)", MsgBoxStyle.Information) : Exit Sub
If test <> 201352384 Then MsgBox("Wrong 80019300 call!", MsgBoxStyle.Critical) : Exit Sub
patchFile(patchOffset.Text) = 0
patchFile(patchOffset.Text + 1) = &H40
patchFile(patchOffset.Text + 2) = 2
patchFile(patchOffset.Text + 3) = &HC
If PatchFileRadio.Checked Then
cd.saveCDfile(UserPath.Text, files1(patchFileID.Text).Sector, files1(patchFileID.Text).Sizw, patchFile)
Else
cd.saveCDfile(UserPath.Text, 27, 1812408, patchFile)
End If
MsgBox("Succesfull patched.", MsgBoxStyle.Information)
End Sub
Private Sub ReplaceAll_Click(sender As Object, e As EventArgs) Handles ReplaceAll.Click
If Not IsNumeric(patchFileID.Text) Then MsgBox("FILE ID IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
If Not IsNumeric(patchOffset.Text) Then MsgBox("FILE OFFSET IS NOT NUMERIC!", MsgBoxStyle.Critical) : Exit Sub
Dim cd = New ISOTools
Dim patchFile() As Byte
If PatchFileRadio.Checked Then
patchFile = cd.getCDfile(UserPath.Text, files1(FileID.Text).Sector, files1(FileID.Text).Sizw).ToArray
Else
patchFile = cd.getCDfile(UserPath.Text, 27, 1812408).ToArray
End If
Dim overall = 0
For a = 0 To patchFile.Length - 1 Step 4
If a > 500000 Then Exit For 'don't touch my code and jumps if in main EXE
If BitConverter.ToInt32(patchFile, a) = 201353450 Then
patchFile(a) = 0
patchFile(a + 1) = &H40
patchFile(a + 2) = 2
patchFile(a + 3) = &HC
overall += 1
End If
Next
If PatchFileRadio.Checked Then
cd.saveCDfile(UserPath.Text, files1(FileID.Text).Sector, files1(FileID.Text).Sizw, patchFile)
Else
cd.saveCDfile(UserPath.Text, 27, 1812408, patchFile)
End If
MsgBox("Patched " & overall & " text calls!", MsgBoxStyle.Information)
End Sub
Private Sub EngSave_Click(sender As Object, e As EventArgs) Handles EngSave.Click
Dim filnam As String = "D:\Games\PSX\Persona 2 - Batsu (NTSC-J) [SLPS-02825]\Export\LINES_EDITOR\TEMP_TEXT\"
If RadioFile.Checked Then filnam &= FileID.Text & "_" Else filnam &= "0000_"
filnam &= Offset.Text & "_" & SetName.Text & "_ENG_TEXT.txt"
Dim txt As String = ""
For Each row In DataGridView1.Rows
txt += row.Cells(2).Value.ToString & vbCrLf
Next
My.Computer.FileSystem.WriteAllText(filnam, txt, False)
End Sub
Public Function Unkudos(ByRef Str As String)
Str = Str.Replace("V", "л")
Str = Str.Replace("v", "ф")
Str = Str.Replace("D", "Д")
Str = Str.Replace("h", "н")
Str = Str.Replace("j", "у")
Str = Str.Replace("w", "ж")
Str = Str.Replace("W", "Ж")
Str = Str.Replace("z", "ч")
Str = Str.Replace("O", "Ф")
Str = Str.Replace("t", "т")
Str = Str.Replace("Y", "У")
Str = Str.Replace("u", "ю")
Str = Str.Replace("Q", "Э")
Str = Str.Replace("q", "з")
Str = Str.Replace("x", "б")
Str = Str.Replace("m", "м")
Str = Str.Replace("f", "г")
Str = Str.Replace("y", "п")
Str = Str.Replace("n", "и")
Str = Str.Replace("N", "И")
Str = Str.Replace("J", "П")
Str = Str.Replace("Z", "Г")
Str = Str.Replace("g", "ш")
Str = Str.Replace("G", "Ш")
Str = Str.Replace("b", "в")
Str = Str.Replace("d", "д")
Str = Str.Replace("-", "ч")
Str = Str.Replace("S", "б")
Str = Str.Replace("r", "я")
Str = Str.Replace("s", "ы")
Str = Str.Replace("&", "О")
Str = Str.Replace("R", "Я")
Str = Str.Replace("L", "л")
Str = Str.Replace("l", "x")
Return Str
End Function
End Class

Binary file not shown.

View File

@@ -0,0 +1,881 @@

GRF_WILD9
GRF_BJACK
GRF_AROUS
GRF_BINGO
FONTS
TXTIN_COD
GRF_TATSU
EVENTCODE
GR_BTLSPR
GRF_AVAS
EVENT_SPR
EVENTPACK
...
...
...
.
..
...
....
LASTEVENT
GRF_FX
GRF_FX
GRF_FX
GRF_FX
GRF_FX
GRF_FX
GRF_FX
GRF_FX
GRFLASTFX
GRFGAMOVR
LittleFnt
ExtraPack
......
.....
....
...
..
.
.
..
...
....
......
LastExtra
IntrFcTIM
TitleCode
TitleScrn
BattlTxt?
Gfx_Avata
Gfx_Cards
Gfx_Crds2
Gfx_BGs
Gfx_BGs2
CityPack1
CityPack2
CityPack3
CityPack4
CityPack5
CityPack6
CityPack7
CityBGs
City_HUD
EndGamePk
R&DLogo
Dung_HUD
Dung_TEXT
Dung_CODE
DungPack1
DngPkLast
BattlMenu
TxtBattl2
TextBattl
GrfBattle
GrfDemons
PrsnSprts
MenuAvata
PrsnaCard
PrtySprts
FX_SPR
Vid_Intro

Binary file not shown.

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Free.Ports.libpng</name>
</assembly>
<members>
</members>
</doc>

Binary file not shown.

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Free.Ports.zLib</name>
</assembly>
<members>
</members>
</doc>

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>

Binary file not shown.

View File

@@ -0,0 +1,26 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
p2epPSX_CDToolkit
</name>
</assembly>
<members>
<member name="T:p2isPSX_CDView.My.Resources.Resources">
<summary>
Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.ResourceManager">
<summary>
Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.Culture">
<summary>
Перезаписывает свойство CurrentUICulture текущего потока для всех
обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
</summary>
</member>
</members>
</doc>

Binary file not shown.

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
</configuration>

Binary file not shown.

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
</startup>
</configuration>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
p2isPSX_CDToolkit
</name>
</assembly>
<members>
<member name="T:p2isPSX_CDView.My.Resources.Resources">
<summary>
Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.ResourceManager">
<summary>
Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.Culture">
<summary>
Перезаписывает свойство CurrentUICulture текущего потока для всех
обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
</startup>
</configuration>

Binary file not shown.

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
</startup>
</configuration>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

Binary file not shown.

View File

@@ -0,0 +1,26 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
p2epPSX_CDToolkit
</name>
</assembly>
<members>
<member name="T:p2isPSX_CDView.My.Resources.Resources">
<summary>
Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.ResourceManager">
<summary>
Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.Culture">
<summary>
Перезаписывает свойство CurrentUICulture текущего потока для всех
обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
</summary>
</member>
</members>
</doc>

View File

@@ -0,0 +1,75 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class convEventToObj
Inherits System.Windows.Forms.Form
'Форма переопределяет dispose для очистки списка компонентов.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Является обязательной для конструктора форм Windows Forms
Private components As System.ComponentModel.IContainer
'Примечание: следующая процедура является обязательной для конструктора форм Windows Forms
'Для ее изменения используйте конструктор форм Windows Form.
'Не изменяйте ее в редакторе исходного кода.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.TextBox2 = New System.Windows.Forms.TextBox()
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(164, 70)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(436, 232)
Me.Button1.TabIndex = 0
Me.Button1.Text = "COVERT TO OBJ"
Me.Button1.UseVisualStyleBackColor = True
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(164, 44)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(100, 20)
Me.TextBox1.TabIndex = 1
Me.TextBox1.Text = "100"
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(383, 44)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.Size = New System.Drawing.Size(100, 20)
Me.TextBox2.TabIndex = 1
Me.TextBox2.Text = "110"
'
'convEventToObj
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(800, 450)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Button1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
Me.MaximizeBox = False
Me.Name = "convEventToObj"
Me.Text = "convEventToObj"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents Button1 As Button
Friend WithEvents TextBox1 As TextBox
Friend WithEvents TextBox2 As TextBox
End Class

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,317 @@
Imports System.IO
Public Class convEventToObj
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Form1.CDFileList.SelectedIndex < 181 Or Form1.CDFileList.SelectedIndex > 577 Then MsgBox("PLEASE, SELECT PROPER SCENE FILE (181-577)!") : Exit Sub
Dim rle = New rleTools
Dim texWidth As Integer
Dim fileName = "D:\Games\PSX\Persona.2.Innocent.Sin\Export3D\Scene" & Form1.CDFileList.SelectedIndex.ToString("D4")
Dim matName = "Scene" & Form1.CDFileList.SelectedIndex.ToString("D4")
'MAKING TEXTURE
GenerateBigTexture(rle.Unrle(Form1.binFile(0).Bytes).ToArray, fileName, texWidth)
createMaterial(matName, fileName)
'MAKING 3D
Dim fil = rle.Unrle(Form1.binFile(1).Bytes).ToArray
Dim objectsnum = BitConverter.ToInt16(fil, 16)
Dim HZ = BitConverter.ToInt16(fil, 18)
Dim CoordsAddr = BitConverter.ToInt32(fil, 20)
Dim AdditionsAddr = BitConverter.ToInt32(fil, 24)
Dim objects = New List(Of Obj3d)
'init objects
Dim ObjectsPointers = New List(Of Integer)
For a = 0 To objectsnum - 1
ObjectsPointers.Add(BitConverter.ToInt32(fil, 28 + a * 4))
Next
'get all coords
Dim coordsList = New List(Of Coord)
For a = CoordsAddr To AdditionsAddr Step 8
coordsList.Add(New Coord With {.X = BitConverter.ToInt16(fil, a), .Y = BitConverter.ToInt16(fil, a + 2) * -1, .Z = BitConverter.ToInt16(fil, a + 4) * -1})
Next
'resolve objects
For a = 0 To objectsnum - 1
Dim obj = New Obj3d
Dim readAddr = ObjectsPointers(a)
obj.commandNum = BitConverter.ToInt16(fil, readAddr)
obj.id = BitConverter.ToInt32(fil, readAddr + 4)
readAddr += 8 ' Moving to ChunkData
For x = 0 To obj.commandNum - 1 'Creating chunks
obj.chunksAddr.Add(readAddr)
Dim chunkLength = fil(readAddr + 1) * 4
Dim draftChunk(chunkLength - 1) As Byte
readAddr += 4
Array.Copy(fil, readAddr, draftChunk, 0, chunkLength)
obj.chunks.Add(draftChunk)
readAddr += chunkLength
'Getting Coords
Dim poly As New Poly
poly.command = draftChunk(7)
poly.vertNum = 0
poly.Shading = Color.FromArgb(draftChunk(4), draftChunk(5), draftChunk(6))
Select Case poly.command
Case &H20, &H22, &H24, &H25, &H26, &H27, &H30, &H32, &H34, &H36
poly.vertNum = 3
Case &H28, &H2A, &H2C, &H2D, &H2E, &H2F, &H38, &H3A, &H3C, &H3E
poly.vertNum = 4
Case Else
Debug.WriteLine("UNKNOWN COMMAND! " & poly.command & ". Object " & a & ". ChunkAddr " & obj.chunksAddr.Last & ". ")
End Select
'calc Texture Position
Select Case poly.command
Case &H2C, &H2D, &H2E, &H3C, &H3E
Dim TexPage = (draftChunk(22) And 127) - 26
Dim Cind1 = 12 : Dim Cind2 = 20 : Dim Cind3 = 28 : Dim Cind4 = 36
If poly.command = &H3C Or poly.command = &H3E Then
Cind2 = 24 : Cind3 = 36 : Cind4 = 48 : TexPage = (draftChunk(26) And 127) - 26
End If
poly.textureVertexs.add(New TexCoord With {.X = (draftChunk(Cind1) - 1 + TexPage * 128) / texWidth, .Y = 1 - draftChunk(Cind1 + 1) / 256})
poly.textureVertexs.add(New TexCoord With {.X = (draftChunk(Cind2) - 1 + TexPage * 128) / texWidth, .Y = 1 - draftChunk(Cind2 + 1) / 256})
poly.textureVertexs.add(New TexCoord With {.X = (draftChunk(Cind3) - 1 + TexPage * 128) / texWidth, .Y = 1 - draftChunk(Cind3 + 1) / 256})
poly.textureVertexs.add(New TexCoord With {.X = (draftChunk(Cind4) - 1 + TexPage * 128) / texWidth, .Y = 1 - draftChunk(Cind4 + 1) / 256})
End Select
' Dim bbb As Boolean = BitConverter.ToInt16(draftChunk, UBound(draftChunk) - 1) > coordsList.Count - 1
Dim coord1 As Coord = coordsList(BitConverter.ToInt16(draftChunk, UBound(draftChunk) - 7))
Dim coord2 As Coord = coordsList(BitConverter.ToInt16(draftChunk, UBound(draftChunk) - 5))
Dim coord3 As Coord = coordsList(BitConverter.ToInt16(draftChunk, UBound(draftChunk) - 3))
Dim coord4 = New Coord
If poly.vertNum = 4 Then
coord4 = coordsList(BitConverter.ToInt16(draftChunk, UBound(draftChunk) - 1))
poly.coords.AddRange({coord1, coord2, coord3, coord4})
ElseIf poly.vertNum = 3 Then
poly.coords.AddRange({coord1, coord2, coord3})
End If
obj.Polys.Add(poly)
Next
objects.Add(obj)
Next
Dim objfile As String
objfile = "#PERSONA 2 IS SCENE EXPORT /// SERGEY SHEMET" & vbCrLf & "mtllib " & matName & ".mtl" & vbCrLf & vbCrLf
My.Computer.FileSystem.WriteAllText(fileName & ".obj", objfile, False)
Dim vertexcount = 1
Dim texturvertexCount = 1
For zzz = 0 To objects.Count - 1
Debug.WriteLine("Current object " & zzz + 1 & "\" & objects.Count)
Dim verts = ""
Dim surfs = ""
objfile = vbCrLf & vbCrLf & "o Huynya_" & zzz & vbCrLf & vbCrLf
Dim vrtsStrList = New List(Of String)
Dim surfsStrList = New List(Of String)
Dim verTexturList = New List(Of String)
'verTexturList.AddRange({"vt 0.00 0.00", "vt 1.00 0.00", "vt 1.00 1.00", "vt 0.00 1.00"})
Dim curobj As Obj3d = objects(zzz)
For a = 0 To curobj.Polys.Count - 1
For Each pol In curobj.Polys
For Each crd In pol.coords
Dim X As Decimal = crd.X / 100
Dim Y As Decimal = crd.Y / 100
Dim Z As Decimal = crd.Z / 100
vrtsStrList.Add("v " & X.ToString("F5", Globalization.CultureInfo.InvariantCulture) & " " &
Y.ToString("F5", Globalization.CultureInfo.InvariantCulture) & " " &
Z.ToString("F5", Globalization.CultureInfo.InvariantCulture))
Next
For Each texCoord In pol.textureVertexs
Dim X As Decimal = texCoord.X
'Dim X As Decimal = 1 - texCoord.X
Dim Y As Decimal = texCoord.Y
verTexturList.Add("vt " & X.ToString("F5", Globalization.CultureInfo.InvariantCulture) &
" " & Y.ToString("F5", Globalization.CultureInfo.InvariantCulture))
Next
If pol.coords.Count = 4 Then
If pol.texturevertexs.Count = 4 Then
surfsStrList.Add("f " & vertexcount & "/" & texturvertexCount & " " &
vertexcount + 1 & "/" & texturvertexCount + 1 & " " &
vertexcount + 3 & "/" & texturvertexCount + 3 & " " &
vertexcount + 2 & "/" & texturvertexCount + 2)
Else
surfsStrList.Add("f " & vertexcount & " " & vertexcount + 1 & " " & vertexcount + 3 & " " & vertexcount + 2)
End If
End If
If pol.coords.Count = 3 Then
surfsStrList.Add("f " & vertexcount & " " & vertexcount + 2 & " " & vertexcount +1)
End If
vertexcount += pol.coords.Count
texturvertexCount += pol.texturevertexs.Count
Next
Next
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter(fileName & ".obj", True)
file.WriteLine(objfile, True)
'objfile &= verts & vbCrLf
For Each vvv In vrtsStrList
file.WriteLine(vvv, True)
Next
For Each vt In verTexturList
file.WriteLine(vt, True)
Next
objfile = vbCrLf & "usemtl " & matName & vbCrLf & "s off" & vbCrLf & vbCrLf
file.WriteLine(objfile, True)
For Each sss In surfsStrList
file.WriteLine(sss, True)
Next
file.Close()
'If zzz = 3 Then Exit For
Next
MsgBox("DINE")
End Sub
Public Sub GenerateBigTexture(ByRef fil As Byte(), ByVal filnam As String, ByRef texwidth As Integer)
Dim textureCount = BitConverter.ToInt32(fil, 0)
Dim cluts = New List(Of List(Of Byte))
Dim Pics = New List(Of List(Of Byte))
Dim clutsOffs = New List(Of Integer)
Dim picsOffs = New List(Of Integer)
Dim TxOffsets = New List(Of Integer)
For a = 0 To textureCount - 1 Step 2
clutsOffs.Add(BitConverter.ToInt32(fil, a * 4 + 4))
picsOffs.Add(BitConverter.ToInt32(fil, a * 4 + 8))
Next
For Each clut In clutsOffs
Dim cur = clutsOffs.IndexOf(clut)
Dim cltData(539) As Byte
Dim picData(16391) As Byte
Array.Copy(fil, clut, cltData, 0, 540)
Array.Copy(fil, picsOffs(cur), picData, 0, 16392)
Dim cl = New List(Of Byte) : cl.AddRange(cltData.ToList) : cluts.Add(cl)
Dim pc = New List(Of Byte) : pc.AddRange(picData.ToList) : Pics.Add(pc)
Next
Dim png = New pngImage
My.Computer.FileSystem.WriteAllBytes(filnam & ".png", png.makeBigTexturePng(cluts, Pics).ToArray, False)
texwidth = picsOffs.Count * 64
End Sub
Public Sub createMaterial(ByVal matName As String, ByVal filnam As String)
Dim mtl = "#Sergey Shemet Persona2 Material" & vbCrLf & vbCrLf
mtl &= "newmtl " & matName & vbCrLf
mtl &= "Ns 250.000000" & vbCrLf
mtl &= "Ka 1.000000 1.000000 1.000000" & vbCrLf
mtl &= "Kd 0.100061 0.195986 0.082515" & vbCrLf
mtl &= "Ks 0.500000 0.500000 0.500000" & vbCrLf
mtl &= "Ke 0.000000 0.000000 0.000000" & vbCrLf
mtl &= "Ni 1.450000" & vbCrLf
mtl &= "d 1.000000" & vbCrLf
mtl &= "illum 0.5" & vbCrLf
mtl &= "map_Kd " & matName & ".png" & vbCrLf
My.Computer.FileSystem.WriteAllText(filnam & ".mtl", mtl, False)
End Sub
End Class
Public Class Obj3d
Public id As Integer
Public commandNum As Integer
Public chunks = New List(Of Byte())
Public chunksAddr = New List(Of Integer)
Public Polys = New List(Of Poly)
End Class
Public Class Poly
Public coords = New List(Of Coord)
Public vertNum As Byte
Public Shading As Color
Public command As Byte
Public textureVertexs = New List(Of TexCoord)
End Class
Public Class Coord
Public X As Integer
Public Y As Integer
Public Z As Integer
End Class
Public Class TexCoord
Public X As Decimal
Public Y As Decimal
End Class

View File

@@ -0,0 +1,7 @@
' <autogenerated/>
Option Strict Off
Option Explicit On
Imports System
Imports System.Reflection
<Assembly: Global.System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.1", FrameworkDisplayName:=".NET Framework 4.6.1")>

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
1ed733f7ef716e1628c8bd5501a6d0e2fc0850cebfdbf100c59affa0e885c14a

View File

@@ -0,0 +1,26 @@
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2epPSX_CDToolkit.exe.config
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2epPSX_CDToolkit.exe
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2epPSX_CDToolkit.pdb
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2epPSX_CDToolkit.xml
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.libpng.dll
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.zLib.dll
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Zlib.Portable.dll
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.libpng.xml
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.zLib.xml
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Zlib.Portable.xml
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.convEventToObj.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.DungeonEditor.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.Form1.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.Resources.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.ScriptCheck.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.StringsOffsetEditorvb.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2epPSX_CDToolkit.vbproj.GenerateResource.cache
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2epPSX_CDToolkit.vbproj.CoreCompileInputs.cache
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2epPSX_CDToolkit.exe
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2epPSX_CDToolkit.xml
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2epPSX_CDToolkit.pdb
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.JapCharCodeGenerator.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.ScriptParserWin.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.CityEditor.resources
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2epPSX_CDToolkit.vbproj.AssemblyReference.cache
C:\Users\Sergey\source\repos\p2epPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2epPSX_.D2426659.Up2Date

View File

@@ -0,0 +1,26 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
p2epPSX_CDToolkit
</name>
</assembly>
<members>
<member name="T:p2isPSX_CDView.My.Resources.Resources">
<summary>
Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.ResourceManager">
<summary>
Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.Culture">
<summary>
Перезаписывает свойство CurrentUICulture текущего потока для всех
обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
</summary>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
326aa845c4bb0ba74cb72caca3fa7317da39d30e

View File

@@ -0,0 +1,24 @@
C:\Users\ShemetSA.RADIO\Documents\Visual Studio 2015\Projects\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2isPSX_CDToolkit.exe.config
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2isPSX_CDToolkit.exe.config
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2isPSX_CDToolkit.exe
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2isPSX_CDToolkit.pdb
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\p2isPSX_CDToolkit.xml
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDToolkit.vbprojAssemblyReference.cache
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.Form1.resources
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.Resources.resources
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDToolkit.vbproj.GenerateResource.cache
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDToolkit.vbproj.CoreCompileInputs.cache
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDToolkit.exe
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDToolkit.xml
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDToolkit.pdb
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.ScriptCheck.resources
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Zlib.Portable.dll
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Zlib.Portable.xml
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDToolkit.vbproj.CopyComplete
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.StringsOffsetEditorvb.resources
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.DungeonEditor.resources
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.libpng.dll
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.zLib.dll
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.libpng.xml
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\bin\Debug\Free.Ports.zLib.xml
C:\Users\Sergey\source\repos\p2isPSX_CDToolkit\p2isPSX_CDToolkit\obj\Debug\p2isPSX_CDView.convEventToObj.resources

View File

@@ -0,0 +1,26 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>
p2isPSX_CDToolkit
</name>
</assembly>
<members>
<member name="T:p2isPSX_CDView.My.Resources.Resources">
<summary>
Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.ResourceManager">
<summary>
Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
</summary>
</member>
<member name="P:p2isPSX_CDView.My.Resources.Resources.Culture">
<summary>
Перезаписывает свойство CurrentUICulture текущего потока для всех
обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
</summary>
</member>
</members>
</doc>

Some files were not shown because too many files have changed in this diff Show More