Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.IO
- Public Class dyoWorker
- Enum ObjectType
- last = -1
- obj = 0
- CommonControl = 2
- Item = 4
- Mover = 5
- Ship = 6
- End Enum
- Enum AIType
- Monster = 2
- ClockWorks = 4
- Pet = 5
- BigMuscle = 6
- Krrr = 7
- Bear = 8
- Monster2 = 100
- Meteonyker = 10
- End Enum
- Structure dyoData
- Public typ As Integer 'Type
- Public rot As Single 'Y-Rotation in degree
- Public axs() As Single 'Axis Rotation (x,y,z)
- Public pos() As Single 'position (x,y,z)
- Public scl() As Single 'scale (x,y,z)
- Public sai As Integer 'Set AI
- Public oid As Integer 'Object ID
- Public uk0 As Integer 'unknown 0
- Public ait As Integer 'AI Type
- Public uk1 As Integer 'unknown 1
- Public nme As Byte() 'Name -> inscript
- Public ub0 As Byte() 'unknown byte 0 -> ingame name (mover)
- Public ub1 As Byte() 'unknown byte 1 -> txtfile (mover) : deprecated, uses worlddialog.txt
- Public uk2 As Integer 'unknown 2
- Public uk3 As Integer 'unknown 3
- Public ucd As UInteger 'Unknown Condition
- End Structure 'dyoData
- Private Const IN_NAME As String = "test.dyo"
- Private Const OF_NAME As String = "out.dyo"
- Dim dyoGlobal() As dyoData
- Public Sub New()
- Dim fr As BinaryReader = New BinaryReader(File.OpenRead(IN_NAME))
- Dim count As Integer = 0
- While True
- Dim objectType As ObjectType = CType(fr.ReadInt32, ObjectType)
- If (objectType = objectType.last) Then
- Exit While
- End If
- Dim dData As New dyoData
- dData.typ = objectType
- dData.rot = fr.ReadSingle
- ReDim Preserve dData.axs(0) : dData.axs(0) = fr.ReadSingle
- ReDim Preserve dData.axs(1) : dData.axs(1) = fr.ReadSingle
- ReDim Preserve dData.axs(2) : dData.axs(2) = fr.ReadSingle
- ReDim Preserve dData.pos(0) : dData.pos(0) = fr.ReadSingle
- ReDim Preserve dData.pos(1) : dData.pos(1) = fr.ReadSingle
- ReDim Preserve dData.pos(2) : dData.pos(2) = fr.ReadSingle
- ReDim Preserve dData.scl(0) : dData.scl(0) = fr.ReadSingle
- ReDim Preserve dData.scl(1) : dData.scl(1) = fr.ReadSingle
- ReDim Preserve dData.scl(2) : dData.scl(2) = fr.ReadSingle
- dData.sai = fr.ReadInt32
- dData.oid = fr.ReadInt32
- dData.uk0 = fr.ReadInt32
- dData.ait = CType(fr.ReadInt32, AIType)
- dData.uk1 = fr.ReadInt32
- Select Case (objectType)
- Case objectType.CommonControl
- dData.ucd = UInteger.Parse(fr.ReadUInt32)
- Select Case dData.ucd
- Case &H80000000UI
- dData.ub0 = New Byte(431) {} : fr.ReadBytes(432)
- Case &H90000000UI
- dData.ub0 = New Byte(87) {} : fr.ReadBytes(88)
- dData.ub1 = New Byte(280) {} : fr.ReadBytes(280)
- Case Else
- dData.ub0 = New Byte(391) {} : fr.ReadBytes(392)
- End Select
- Case objectType.Mover
- dData.ub0 = tidyByteAr(fr.ReadBytes(64), 64)
- dData.ub1 = tidyByteAr(fr.ReadBytes(32))
- dData.nme = tidyByteAr(fr.ReadBytes(32))
- dData.uk2 = fr.ReadInt32
- dData.uk3 = fr.ReadInt32
- End Select
- ReDim Preserve dyoGlobal(count) : dyoGlobal(count) = dData
- count += 1
- End While
- fr.Close()
- save() 'saving.. ;) -> only 4 testing
- End Sub
- Private Function tidyByteAr(ByVal input As Byte(), Optional ByVal length As Integer = 32) As Byte()
- Dim empty() As Byte : empty = New Byte(length - 1) {}
- Dim i As Integer
- For i = 0 To input.Length - 1 Step 1
- empty(i) = input(i)
- If input(i) = &H0 Then
- For x As Integer = i To empty.Length - 1 Step 1 : empty(x) = &H0 : Next
- Exit For
- End If
- Next
- Return empty
- End Function
- Private Sub save()
- Dim bw As BinaryWriter = New BinaryWriter(File.OpenWrite(OF_NAME))
- For Each item As dyoData In dyoGlobal
- bw.Write(item.typ)
- bw.Write(item.rot)
- bw.Write(item.axs(0)) : bw.Write(item.axs(1)) : bw.Write(item.axs(2))
- bw.Write(item.pos(0) / 4.0F) : bw.Write(item.pos(1)) : bw.Write(item.pos(2) / 4.0F)
- bw.Write(item.scl(0)) : bw.Write(item.scl(1)) : bw.Write(item.scl(2))
- bw.Write(item.sai)
- bw.Write(item.oid)
- bw.Write(item.uk0)
- bw.Write(item.ait)
- bw.Write(item.uk1)
- Select Case item.typ
- Case ObjectType.Mover
- bw.Write(item.ub0)
- bw.Write(item.ub1)
- bw.Write(item.nme)
- bw.Write(item.uk2)
- bw.Write(item.uk3)
- Case ObjectType.CommonControl
- bw.Write(item.ucd)
- bw.Write(item.ub0)
- If Not item.ub1 Is Nothing Then : bw.Write(item.ub1) : End If
- End Select
- Next
- bw.Write(-1)
- bw.Close()
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement