242 lines
8.7 KiB
VB.net
242 lines
8.7 KiB
VB.net
Imports System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox
|
|
|
|
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 SecondVariant_CheckedChanged(sender As Object, e As EventArgs) Handles SecondVariant.CheckedChanged
|
|
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 - 3 + Convert.ToInt32(SecondVariant.Checked)) 'Get Before Last File
|
|
CurFileUnrle = rle.UnrleNocompr(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 - 3 + Convert.ToInt32(SecondVariant.Checked)) 'Get Before Last File
|
|
EngFileUnrle = rle.UnrleNocompr(EngFile.Bytes).ToArray
|
|
'Dim curfile As rleFile = binFile(8)
|
|
|
|
Dim JapBlock1Len = CurFileUnrle(0)
|
|
Dim JapBlock2Len = CurFileUnrle(1)
|
|
Dim JapBlockLines = CurFileUnrle(2)
|
|
Dim EnBlock1Len = EngFileUnrle(0)
|
|
Dim EnBlock2Len = EngFileUnrle(1)
|
|
Dim EnBlockLines = EngFileUnrle(2)
|
|
|
|
Dim JapTextStart = JapBlock1Len * 16 + JapBlock2Len * 8 + 4 'header 8 + head 4 block
|
|
Dim EngTextStart = EnBlock1Len * 16 + EnBlock2Len * 8 + 4
|
|
|
|
Try
|
|
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_X As String = BitConverter.ToInt16(CurFileUnrle, JapTextStart)
|
|
Dim jap_Y As Integer = 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_X, jap_Y, japLoc, enLoc, en_coords)
|
|
Next
|
|
|
|
Catch ex As Exception
|
|
MsgBox("Error reading this district. Try another variant.")
|
|
End Try
|
|
|
|
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
|
|
|
|
'Dim curfile As rleFile = binFile(8)
|
|
|
|
Dim JapBlock1Len = CurFileUnrle(0)
|
|
Dim JapBlock2Len = CurFileUnrle(1)
|
|
Dim JapBlockLines = CurFileUnrle(2)
|
|
|
|
Dim JapTextStart = JapBlock1Len * 16 + JapBlock2Len * 8 + 4 'header 8 + head 4 block
|
|
|
|
MakeSaveRussianString(UserTitle.Text, 14, JapTextStart + 4)
|
|
CurFileUnrle(18) = 0
|
|
CurFileUnrle(19) = 10
|
|
|
|
|
|
For Each row In DataGridView1.Rows
|
|
|
|
JapTextStart += 40
|
|
Dim xxx = Convert.ToInt16(row.Cells(0).Value)
|
|
Dim yyy = Convert.ToInt16(row.Cells(1).Value)
|
|
CurFileUnrle(JapTextStart) = BitConverter.GetBytes(xxx)(0)
|
|
CurFileUnrle(JapTextStart + 1) = BitConverter.GetBytes(xxx)(1)
|
|
CurFileUnrle(JapTextStart + 2) = BitConverter.GetBytes(yyy)(0)
|
|
CurFileUnrle(JapTextStart + 3) = BitConverter.GetBytes(yyy)(1)
|
|
Dim japLoc = readRusText(JapTextStart + 4 + 14)
|
|
MakeSaveRussianString(Trim(row.Cells(2).Value), 22, JapTextStart + 4 + 14)
|
|
Next
|
|
|
|
Form1.DeconstructFile(cd.getCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, files1(ID.Text).Sizw).ToArray) 'Deconstruct again!
|
|
Form1.binFile(Form1.binFile.Count - 3 + Convert.ToInt32(SecondVariant.Checked)).Bytes = rle.attachNoCompressionHeader(CurFile, CurFileUnrle).ToArray
|
|
|
|
'Packing
|
|
Dim finalPack = New List(Of Byte)
|
|
For Each bin In Form1.binFile
|
|
finalPack.AddRange(bin.Bytes)
|
|
|
|
'Adding SectorGaps (ONLY FOR CITY DISTRICTS!!!!!!!)
|
|
Dim gap = 2048 - (finalPack.Count Mod 2048)
|
|
For g = 0 To gap - 1
|
|
finalPack.Add(0)
|
|
Next
|
|
|
|
Next
|
|
|
|
|
|
Dim beforePackSize As Integer = cd.getCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, files1(ID.Text).Sizw).Count
|
|
|
|
If finalPack.Count = beforePackSize Then
|
|
'If sizw matched
|
|
|
|
cd.saveCDfile(Form1.UserPath.Text, files1(ID.Text).Sector, finalPack.Count, finalPack.ToArray)
|
|
|
|
ElseIf MsgBox($"finalPack is not match source :( {vbCrLf} Source size {beforePackSize}{vbCrLf} Final Pack Size {finalPack.Count} {vbCrLf} Wanna save it to a file for inspect?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
|
My.Computer.FileSystem.WriteAllBytes(Form1.SaveFileDialog1.FileName, finalPack.ToArray, False)
|
|
End If
|
|
|
|
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 zzz = 0 To maxBytes - 1 Step 2
|
|
CurFileUnrle(offs + zzz) = 0
|
|
CurFileUnrle(offs + zzz + 1) = &H10
|
|
Next
|
|
Exit Sub
|
|
|
|
End If
|
|
|
|
|
|
a.Add(str.Length)
|
|
a.Add(&H20)
|
|
For zzz = 0 To str.Length - 1
|
|
a.Add(Asc(str(zzz)))
|
|
Next
|
|
' a.Add(0)
|
|
' a.Add(&H10)
|
|
|
|
For zzz = 0 To maxBytes - str.Length - 3
|
|
a.Add(0)
|
|
Next
|
|
For zzz = 0 To maxBytes - 1
|
|
CurFileUnrle(zzz + offs) = a(zzz)
|
|
Next
|
|
End Sub
|
|
|
|
|
|
End Class |