Advertisement
Guest User

Untitled

a guest
Jul 29th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 5.56 KB | None | 0 0
  1. Imports System.IO
  2. Public Class dyoWorker
  3.     Enum ObjectType
  4.         last = -1
  5.         obj = 0
  6.         CommonControl = 2
  7.         Item = 4
  8.         Mover = 5
  9.         Ship = 6
  10.     End Enum
  11.  
  12.     Enum AIType
  13.         Monster = 2
  14.         ClockWorks = 4
  15.         Pet = 5
  16.         BigMuscle = 6
  17.         Krrr = 7
  18.         Bear = 8
  19.         Monster2 = 100
  20.         Meteonyker = 10
  21.     End Enum
  22.  
  23.     Structure dyoData
  24.         Public typ As Integer       'Type
  25.         Public rot As Single        'Y-Rotation in degree
  26.         Public axs() As Single      'Axis Rotation (x,y,z)
  27.         Public pos() As Single      'position (x,y,z)
  28.         Public scl() As Single      'scale (x,y,z)
  29.         Public sai As Integer       'Set AI
  30.         Public oid As Integer       'Object ID
  31.         Public uk0 As Integer       'unknown 0
  32.         Public ait As Integer       'AI Type
  33.         Public uk1 As Integer       'unknown 1
  34.         Public nme As Byte()        'Name -> inscript
  35.         Public ub0 As Byte()        'unknown byte 0 -> ingame name (mover)
  36.         Public ub1 As Byte()        'unknown byte 1 -> txtfile (mover) : deprecated, uses worlddialog.txt
  37.         Public uk2 As Integer       'unknown 2
  38.         Public uk3 As Integer       'unknown 3
  39.         Public ucd As UInteger      'Unknown Condition
  40.     End Structure 'dyoData
  41.  
  42.     Private Const IN_NAME As String = "test.dyo"
  43.     Private Const OF_NAME As String = "out.dyo"
  44.  
  45.     Dim dyoGlobal() As dyoData
  46.  
  47.     Public Sub New()
  48.         Dim fr As BinaryReader = New BinaryReader(File.OpenRead(IN_NAME))
  49.  
  50.         Dim count As Integer = 0
  51.         While True
  52.             Dim objectType As ObjectType = CType(fr.ReadInt32, ObjectType)
  53.             If (objectType = objectType.last) Then
  54.                 Exit While
  55.             End If
  56.             Dim dData As New dyoData
  57.             dData.typ = objectType
  58.             dData.rot = fr.ReadSingle
  59.             ReDim Preserve dData.axs(0) : dData.axs(0) = fr.ReadSingle
  60.             ReDim Preserve dData.axs(1) : dData.axs(1) = fr.ReadSingle
  61.             ReDim Preserve dData.axs(2) : dData.axs(2) = fr.ReadSingle
  62.             ReDim Preserve dData.pos(0) : dData.pos(0) = fr.ReadSingle
  63.             ReDim Preserve dData.pos(1) : dData.pos(1) = fr.ReadSingle
  64.             ReDim Preserve dData.pos(2) : dData.pos(2) = fr.ReadSingle
  65.             ReDim Preserve dData.scl(0) : dData.scl(0) = fr.ReadSingle
  66.             ReDim Preserve dData.scl(1) : dData.scl(1) = fr.ReadSingle
  67.             ReDim Preserve dData.scl(2) : dData.scl(2) = fr.ReadSingle
  68.             dData.sai = fr.ReadInt32
  69.             dData.oid = fr.ReadInt32
  70.             dData.uk0 = fr.ReadInt32
  71.             dData.ait = CType(fr.ReadInt32, AIType)
  72.             dData.uk1 = fr.ReadInt32
  73.             Select Case (objectType)
  74.                 Case objectType.CommonControl
  75.                     dData.ucd = UInteger.Parse(fr.ReadUInt32)
  76.                     Select Case dData.ucd
  77.                         Case &H80000000UI
  78.                             dData.ub0 = New Byte(431) {} : fr.ReadBytes(432)
  79.                         Case &H90000000UI
  80.                             dData.ub0 = New Byte(87) {} : fr.ReadBytes(88)
  81.                             dData.ub1 = New Byte(280) {} : fr.ReadBytes(280)
  82.                         Case Else
  83.                             dData.ub0 = New Byte(391) {} : fr.ReadBytes(392)
  84.                     End Select
  85.                 Case objectType.Mover
  86.                     dData.ub0 = tidyByteAr(fr.ReadBytes(64), 64)
  87.                     dData.ub1 = tidyByteAr(fr.ReadBytes(32))
  88.                     dData.nme = tidyByteAr(fr.ReadBytes(32))
  89.                     dData.uk2 = fr.ReadInt32
  90.                     dData.uk3 = fr.ReadInt32
  91.             End Select
  92.             ReDim Preserve dyoGlobal(count) : dyoGlobal(count) = dData
  93.             count += 1
  94.         End While
  95.         fr.Close()
  96.         save() 'saving.. ;) -> only 4 testing
  97.     End Sub
  98.  
  99.     Private Function tidyByteAr(ByVal input As Byte(), Optional ByVal length As Integer = 32) As Byte()
  100.         Dim empty() As Byte : empty = New Byte(length - 1) {}
  101.         Dim i As Integer
  102.         For i = 0 To input.Length - 1 Step 1
  103.             empty(i) = input(i)
  104.             If input(i) = &H0 Then
  105.                 For x As Integer = i To empty.Length - 1 Step 1 : empty(x) = &H0 : Next
  106.                 Exit For
  107.             End If
  108.         Next
  109.         Return empty
  110.     End Function
  111.  
  112.     Private Sub save()
  113.         Dim bw As BinaryWriter = New BinaryWriter(File.OpenWrite(OF_NAME))
  114.  
  115.         For Each item As dyoData In dyoGlobal
  116.             bw.Write(item.typ)
  117.             bw.Write(item.rot)
  118.             bw.Write(item.axs(0)) : bw.Write(item.axs(1)) : bw.Write(item.axs(2))
  119.             bw.Write(item.pos(0) / 4.0F) : bw.Write(item.pos(1)) : bw.Write(item.pos(2) / 4.0F)
  120.             bw.Write(item.scl(0)) : bw.Write(item.scl(1)) : bw.Write(item.scl(2))
  121.             bw.Write(item.sai)
  122.             bw.Write(item.oid)
  123.             bw.Write(item.uk0)
  124.             bw.Write(item.ait)
  125.             bw.Write(item.uk1)
  126.             Select Case item.typ
  127.                 Case ObjectType.Mover
  128.                     bw.Write(item.ub0)
  129.                     bw.Write(item.ub1)
  130.                     bw.Write(item.nme)
  131.                     bw.Write(item.uk2)
  132.                     bw.Write(item.uk3)
  133.                 Case ObjectType.CommonControl
  134.                     bw.Write(item.ucd)
  135.                     bw.Write(item.ub0)
  136.                     If Not item.ub1 Is Nothing Then : bw.Write(item.ub1) : End If
  137.             End Select
  138.         Next
  139.         bw.Write(-1)
  140.         bw.Close()
  141.     End Sub
  142. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement