| 1 |
Public Type LWOPolygon |
| 2 |
NumVe As Integer |
| 3 |
P1 As Integer |
| 4 |
P2 As Integer |
| 5 |
P3 As Integer |
| 6 |
Surfa As Integer |
| 7 |
End Type |
| 8 |
|
| 9 |
Public Type PolDef |
| 10 |
P1 As Integer |
| 11 |
P2 As Integer |
| 12 |
P3 As Integer |
| 13 |
End Type |
| 14 |
|
| 15 |
'Texture Coordinate Entry |
| 16 |
Public Type TXCAentry |
| 17 |
X As Single |
| 18 |
Y As Single |
| 19 |
End Type |
| 20 |
|
| 21 |
'Texture Coordinate Lists |
| 22 |
Public Type TXCA 'Length |
| 23 |
ID As Long '4 |
| 24 |
Version As Long '8 |
| 25 |
Filler(1 To 5) As Long '28 |
| 26 |
NumEntries As Long '32 |
| 27 |
End Type |
| 28 |
|
| 29 |
'Level Data Reference List |
| 30 |
Public Type ONLV 'Length |
| 31 |
ID As Long '4 |
| 32 |
Version As Long '8 |
| 33 |
LevelName As String * 64 '72 |
| 34 |
AKEVid As Long '76 |
| 35 |
OBOAid As Long '80 |
| 36 |
ONMAid As Long '84 |
| 37 |
ONFAid As Long '88 |
| 38 |
ONTAid As Long '92 |
| 39 |
ONSKid As Long '96 |
| 40 |
Unkn As Long '100 |
| 41 |
AISAid As Long '104 |
| 42 |
AITRid As Long '108 |
| 43 |
ONSAid As Long '112 |
| 44 |
OBDCid As Long '116 |
| 45 |
ONOAid As Long '120 |
| 46 |
Fill(1 To 161) As Long '764 |
| 47 |
CRSAid As Long '768 |
| 48 |
End Type |
| 49 |
|
| 50 |
Public Type AGQG |
| 51 |
ID As Long |
| 52 |
unk(1 To 24) As Byte |
| 53 |
NumEntries As Long |
| 54 |
End Type |
| 55 |
|
| 56 |
Public Type AGQGEntry |
| 57 |
VertIndex(1 To 4) As Long |
| 58 |
VertUVIndex(1 To 4) As Long |
| 59 |
LData_1(1 To 4) As Byte |
| 60 |
LData_2(1 To 4) As Byte |
| 61 |
LData_3(1 To 4) As Byte |
| 62 |
LData_4(1 To 4) As Byte |
| 63 |
unk(1 To 2) As Long |
| 64 |
End Type |
| 65 |
|
| 66 |
Public Type AGQREntry |
| 67 |
TexIndex As Integer |
| 68 |
unk As Integer |
| 69 |
End Type |
| 70 |
|
| 71 |
Public Type TXMA |
| 72 |
ID As Long |
| 73 |
shit(1 To 24) As Byte |
| 74 |
NumEntries As Long |
| 75 |
End Type |
| 76 |
|
| 77 |
Public Type TXMAEntry |
| 78 |
TXMP_ID As Long |
| 79 |
End Type |
| 80 |
|
| 81 |
|
| 82 |
|
| 83 |
|
| 84 |
|
| 85 |
Public Sub CExportONLV(Optional FileName As String) |
| 86 |
Form1.StatusBar1.SimpleText = "Status: Extracting LEVEL....." |
| 87 |
Dim ID4 As Long |
| 88 |
Dim I As Long |
| 89 |
Dim L As Long |
| 90 |
Dim LwoP() As LWOPolygon |
| 91 |
Dim OniPol2() As PolDef |
| 92 |
Dim NP As Long |
| 93 |
Dim numb As Long |
| 94 |
|
| 95 |
Dim TXMA1 As TXMA |
| 96 |
Dim AGQR1 As TXMA |
| 97 |
Dim TXCA1 As TXCA |
| 98 |
Dim TXCA_E() As TXCAentry |
| 99 |
Dim TXMA_E() As TXMAEntry |
| 100 |
Dim AGQR_E() As AGQREntry |
| 101 |
Dim TexNames() As String |
| 102 |
|
| 103 |
If FileName = "" Then |
| 104 |
Form1.CD.DialogTitle = "Unpack resource..." |
| 105 |
Form1.CD.FileName = OniEntry(Curr).szTagName |
| 106 |
Form1.CD.Filter = "LightWave (*.lwo)|*.lwo" |
| 107 |
Form1.CD.Flags = &H2 + &H4 |
| 108 |
Form1.CD.ShowSave |
| 109 |
FileName = Form1.CD.FileName |
| 110 |
If FileName = "" Then Exit Sub |
| 111 |
End If |
| 112 |
|
| 113 |
DoEvents |
| 114 |
|
| 115 |
Open DatFile For Binary As #1 |
| 116 |
Get 1, OniEntry(Curr).rDataPosition, ONLV |
| 117 |
For I = 0 To UBound(OniEntry) - 1 |
| 118 |
Get 1, OniEntry(I).rDataPosition, ID4 |
| 119 |
If ID4 = ONLV.AKEVid Then |
| 120 |
Get 1, OniEntry(I).rDataPosition, AKEV |
| 121 |
Exit For |
| 122 |
End If |
| 123 |
Next I |
| 124 |
|
| 125 |
'Find ID of PNTA |
| 126 |
For I = 0 To UBound(OniEntry) - 1 |
| 127 |
Get 1, OniEntry(I).rDataPosition, ID4 |
| 128 |
If ID4 = AKEV.PNTAid Then |
| 129 |
Get 1, OniEntry(I).rDataPosition, PNTA |
| 130 |
ReDim PNTAentry(PNTA.NumEntries - 1) |
| 131 |
Get 1, , PNTAentry |
| 132 |
Exit For |
| 133 |
End If |
| 134 |
Next I |
| 135 |
|
| 136 |
For I = 0 To UBound(OniEntry) - 1 |
| 137 |
Get 1, OniEntry(I).rDataPosition, ID4 |
| 138 |
If ID4 = AKEV.AGQGid Then |
| 139 |
Get 1, OniEntry(I).rDataPosition, AGQG |
| 140 |
ReDim AGQGEntry(AGQG.NumEntries - 1) |
| 141 |
Get 1, , AGQGEntry |
| 142 |
Exit For |
| 143 |
End If |
| 144 |
Next I |
| 145 |
|
| 146 |
'TXCA |
| 147 |
For I = 0 To UBound(OniEntry) - 1 |
| 148 |
Get 1, OniEntry(I).rDataPosition, ID4 |
| 149 |
If ID4 = AKEV.TXCAid Then |
| 150 |
Get 1, OniEntry(I).rDataPosition, TXCA1 |
| 151 |
ReDim TXCA_E(TXCA1.NumEntries - 1) |
| 152 |
Get 1, , TXCA_E |
| 153 |
ReDim Preserve TXCA_E(PNTA.NumEntries - 1) |
| 154 |
Exit For |
| 155 |
End If |
| 156 |
Next I |
| 157 |
|
| 158 |
'TXMA |
| 159 |
For I = 0 To UBound(OniEntry) - 1 |
| 160 |
Get 1, OniEntry(I).rDataPosition, ID4 |
| 161 |
If ID4 = AKEV.TXMAid Then |
| 162 |
Get 1, OniEntry(I).rDataPosition, TXMA1 |
| 163 |
ReDim TXMA_E(TXMA1.NumEntries - 1) |
| 164 |
Get 1, , TXMA_E |
| 165 |
Exit For |
| 166 |
End If |
| 167 |
Next I |
| 168 |
|
| 169 |
'AGQR |
| 170 |
For I = 0 To UBound(OniEntry) - 1 |
| 171 |
Get 1, OniEntry(I).rDataPosition, ID4 |
| 172 |
If ID4 = AKEV.AGQRid Then |
| 173 |
Get 1, OniEntry(I).rDataPosition, AGQR1 |
| 174 |
ReDim AGQR_E(AGQR1.NumEntries - 1) |
| 175 |
Get 1, , AGQR_E |
| 176 |
Exit For |
| 177 |
End If |
| 178 |
Next I |
| 179 |
|
| 180 |
ReDim TexNames(TXMA1.NumEntries - 1) |
| 181 |
|
| 182 |
For I = 0 To TXMA1.NumEntries - 1 |
| 183 |
For L = 0 To UBound(OniEntry) - 1 |
| 184 |
Get 1, OniEntry(L).rDataPosition, ID4 |
| 185 |
If ID4 = TXMA_E(I).TXMP_ID Then |
| 186 |
TexNames(I) = OniEntry(L).szTagName + Ext |
| 187 |
Exit For |
| 188 |
End If |
| 189 |
Next L |
| 190 |
Next I |
| 191 |
|
| 192 |
Close |
| 193 |
'Ok |
| 194 |
' so we have: 3D points, Texture coordinates and list of polygons, |
| 195 |
' end reading, now convert data |
| 196 |
I = 0 |
| 197 |
Open App.Path + "\lwo.tmp" For Binary As #11 |
| 198 |
Form1.StatusBar1.SimpleText = "Status: Extracting LEVEL [Reading Polygons...]" |
| 199 |
Seek 11, 1 |
| 200 |
|
| 201 |
'reading polygons....... |
| 202 |
|
| 203 |
NP = AGQG.NumEntries * 2 |
| 204 |
For I = 0 To AGQG.NumEntries - 1 |
| 205 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 206 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 207 |
NP = NP - 2 |
| 208 |
Case Else |
| 209 |
Select Case Mid$(GetPureFile(TexNames(AGQR_E(I).TexIndex)), 1, 5) |
| 210 |
Case "_DOOR" |
| 211 |
NP = NP - 2 |
| 212 |
Case Else |
| 213 |
Put 11, , TestSwapInt(AGQGEntry(I).VertIndex(1)) |
| 214 |
Put 11, , TestSwapInt(AGQGEntry(I).VertIndex(2)) |
| 215 |
Put 11, , TestSwapInt(AGQGEntry(I).VertIndex(3)) |
| 216 |
Put 11, , TestSwapInt(AGQGEntry(I).VertIndex(3)) |
| 217 |
Put 11, , TestSwapInt(AGQGEntry(I).VertIndex(4)) |
| 218 |
Put 11, , TestSwapInt(AGQGEntry(I).VertIndex(1)) |
| 219 |
End Select |
| 220 |
End Select |
| 221 |
Next I |
| 222 |
|
| 223 |
|
| 224 |
|
| 225 |
ReDim OniPol2(NP - 1) |
| 226 |
ReDim LwoP(NP - 1) |
| 227 |
Get 11, 1, OniPol2 |
| 228 |
|
| 229 |
For I = 0 To NP - 1 |
| 230 |
LwoP(I).NumVe = ISItoMSI(3) |
| 231 |
LwoP(I).P1 = OniPol2(I).P1 |
| 232 |
LwoP(I).P2 = OniPol2(I).P2 |
| 233 |
LwoP(I).P3 = OniPol2(I).P3 |
| 234 |
LwoP(I).Surfa = ISItoMSI(1) |
| 235 |
Next I |
| 236 |
|
| 237 |
I = Empty |
| 238 |
|
| 239 |
Close |
| 240 |
|
| 241 |
On Error Resume Next |
| 242 |
Kill App.Path + "\*.tmp" |
| 243 |
On Error GoTo 0 |
| 244 |
|
| 245 |
Form1.StatusBar1.SimpleText = "Status: Extracting LEVEL [Writing...]" |
| 246 |
Form1.ProgressBar1.Max = PNTA.NumEntries |
| 247 |
Form1.ProgressBar1.Value = 0 |
| 248 |
If LevelType = 5 Or LevelType = 10 Then |
| 249 |
FileName = GetPureFile(FileName) + ".raw" |
| 250 |
End If |
| 251 |
|
| 252 |
For I = 0 To PNTA.NumEntries - 1 |
| 253 |
If PNTAentry(I).X > 2000000.1 Then PNTAentry(I).X = 0 |
| 254 |
If PNTAentry(I).Y > 2000000.1 Then PNTAentry(I).Y = 0 |
| 255 |
If PNTAentry(I).Z > 2000000.1 Then PNTAentry(I).Z = 0 |
| 256 |
If PNTAentry(I).X < -2000000.1 Then PNTAentry(I).X = 0 |
| 257 |
If PNTAentry(I).Y < -2000000.1 Then PNTAentry(I).Y = 0 |
| 258 |
If PNTAentry(I).Z < -2000000.1 Then PNTAentry(I).Z = 0 |
| 259 |
Next I |
| 260 |
|
| 261 |
Select Case LevelType |
| 262 |
Case 1 |
| 263 |
|
| 264 |
Open FileName For Binary As #1 |
| 265 |
Put 1, , "FORM" |
| 266 |
Put 1, , ISLtoMSL(12 + (PNTA.NumEntries * 12) + 8 + 6 + 8 + (NP * 10)) |
| 267 |
Put 1, , "LWOBPNTS" |
| 268 |
Put 1, , ISLtoMSL(PNTA.NumEntries * 12) |
| 269 |
For I = 0 To PNTA.NumEntries - 1 |
| 270 |
Put 1, , SwapFloat(PNTAentry(I).X) |
| 271 |
Put 1, , SwapFloat(PNTAentry(I).Y) |
| 272 |
Put 1, , SwapFloat(PNTAentry(I).Z) |
| 273 |
Form1.ProgressBar1.Value = I |
| 274 |
Next I |
| 275 |
Put 1, , "SRFS" |
| 276 |
Put 1, , ISLtoMSL(6) |
| 277 |
Put 1, , "Level" |
| 278 |
Put 1, , CByte(0) |
| 279 |
Put 1, , "POLS" |
| 280 |
Put 1, , ISLtoMSL(NP * 10) |
| 281 |
Put 1, , LwoP |
| 282 |
Close |
| 283 |
Case 6 |
| 284 |
|
| 285 |
' Convert Oni level to RAW 3D Binary |
| 286 |
Open GetPureFile(FileName) + ".rwb" For Binary As #1 |
| 287 |
For I = 0 To AGQG.NumEntries - 1 |
| 288 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).X |
| 289 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).Y |
| 290 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).Z |
| 291 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(2)).X |
| 292 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(2)).Y |
| 293 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(2)).Z |
| 294 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).X |
| 295 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).Y |
| 296 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).Z |
| 297 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).X |
| 298 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).Y |
| 299 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).Z |
| 300 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(4)).X |
| 301 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(4)).Y |
| 302 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(4)).Z |
| 303 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).X |
| 304 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).Y |
| 305 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).Z |
| 306 |
Next I |
| 307 |
|
| 308 |
Close |
| 309 |
Case 7 |
| 310 |
|
| 311 |
' B3D |
| 312 |
Open GetPureFile(FileName) + ".b3d" For Binary As #1 |
| 313 |
Put 1, , "Big3DbyOleg" |
| 314 |
Put 1, , CLng(1067030938) |
| 315 |
Put 1, , "POINTS " |
| 316 |
Put 1, , CLng(PNTA.NumEntries) |
| 317 |
For I = 0 To PNTA.NumEntries - 1 |
| 318 |
Put 1, , PNTAentry(I).X |
| 319 |
Put 1, , PNTAentry(I).Y |
| 320 |
Put 1, , PNTAentry(I).Z |
| 321 |
Next I |
| 322 |
|
| 323 |
Put 1, , "POLYGONS" |
| 324 |
Put 1, , CLng(NP * 2) |
| 325 |
For I = 0 To AGQG.NumEntries - 1 |
| 326 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 327 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 328 |
'nothing |
| 329 |
Case Else |
| 330 |
Select Case Mid$(GetPureFile(TexNames(AGQR_E(I).TexIndex)), 1, 5) |
| 331 |
Case "_DOOR" |
| 332 |
'nothing |
| 333 |
Case Else |
| 334 |
Put 1, , CLng(3) |
| 335 |
Put 1, , AGQGEntry(I).VertIndex(1) |
| 336 |
Put 1, , AGQGEntry(I).VertIndex(2) |
| 337 |
Put 1, , AGQGEntry(I).VertIndex(3) |
| 338 |
Put 1, , CLng(0) |
| 339 |
Put 1, , CLng(3) |
| 340 |
Put 1, , AGQGEntry(I).VertIndex(3) |
| 341 |
Put 1, , AGQGEntry(I).VertIndex(4) |
| 342 |
Put 1, , AGQGEntry(I).VertIndex(1) |
| 343 |
Put 1, , CLng(0) |
| 344 |
End Select |
| 345 |
End Select |
| 346 |
Next I |
| 347 |
Put 1, , CLng(0) |
| 348 |
Close |
| 349 |
|
| 350 |
Case 8 |
| 351 |
|
| 352 |
'Delete shit from the Oni level |
| 353 |
numb = AGQG.NumEntries |
| 354 |
ReDim Preserve PNTAentry(PNTA.NumEntries + 3) |
| 355 |
PNTAentry(PNTA.NumEntries + 0).X = -9 |
| 356 |
PNTAentry(PNTA.NumEntries + 0).Y = 0 |
| 357 |
PNTAentry(PNTA.NumEntries + 0).Z = -3 |
| 358 |
PNTAentry(PNTA.NumEntries + 1).X = -9 |
| 359 |
PNTAentry(PNTA.NumEntries + 1).Y = 0 |
| 360 |
PNTAentry(PNTA.NumEntries + 1).Z = 8 |
| 361 |
PNTAentry(PNTA.NumEntries + 2).X = 11 |
| 362 |
PNTAentry(PNTA.NumEntries + 2).Y = 0 |
| 363 |
PNTAentry(PNTA.NumEntries + 2).Z = -3 |
| 364 |
PNTAentry(PNTA.NumEntries + 3).X = 11 |
| 365 |
PNTAentry(PNTA.NumEntries + 3).Y = 0 |
| 366 |
PNTAentry(PNTA.NumEntries + 3).Z = 8 |
| 367 |
|
| 368 |
If Form1.mnuDelGarbage.Checked = True Then |
| 369 |
For I = 0 To AGQG.NumEntries - 1 |
| 370 |
Select Case Mid$(GetPureFile(TexNames(AGQR_E(I).TexIndex)), 1, 5) |
| 371 |
Case "_DOOR" |
| 372 |
AGQGEntry(I).VertIndex(1) = PNTA.NumEntries + 0 |
| 373 |
AGQGEntry(I).VertIndex(2) = PNTA.NumEntries + 1 |
| 374 |
AGQGEntry(I).VertIndex(3) = PNTA.NumEntries + 2 |
| 375 |
AGQGEntry(I).VertIndex(4) = PNTA.NumEntries + 3 |
| 376 |
'numb = numb - 1 |
| 377 |
End Select |
| 378 |
Next I |
| 379 |
End If |
| 380 |
|
| 381 |
For I = 0 To AGQG.NumEntries - 1 |
| 382 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 383 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 384 |
AGQGEntry(I).VertIndex(1) = PNTA.NumEntries + 0 |
| 385 |
AGQGEntry(I).VertIndex(2) = PNTA.NumEntries + 1 |
| 386 |
AGQGEntry(I).VertIndex(3) = PNTA.NumEntries + 2 |
| 387 |
AGQGEntry(I).VertIndex(4) = PNTA.NumEntries + 3 |
| 388 |
numb = numb - 1 |
| 389 |
End Select |
| 390 |
Next I |
| 391 |
|
| 392 |
'B3D + materials |
| 393 |
Open GetPureFile(FileName) + ".b3d" For Binary As #1 |
| 394 |
Put 1, , "Big3DbyOleg" |
| 395 |
Put 1, , CLng(1067030938) |
| 396 |
Put 1, , "POINTS " |
| 397 |
Put 1, , CLng(numb * 4) |
| 398 |
|
| 399 |
For I = 0 To AGQG.NumEntries - 1 |
| 400 |
' Begin polygon |
| 401 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 402 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 403 |
'nothing |
| 404 |
Case Else |
| 405 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).X |
| 406 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).Y |
| 407 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(1)).Z |
| 408 |
|
| 409 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(2)).X |
| 410 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(2)).Y |
| 411 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(2)).Z |
| 412 |
|
| 413 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).X |
| 414 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).Y |
| 415 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(3)).Z |
| 416 |
|
| 417 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(4)).X |
| 418 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(4)).Y |
| 419 |
Put 1, , PNTAentry(AGQGEntry(I).VertIndex(4)).Z |
| 420 |
End Select |
| 421 |
' end polygon |
| 422 |
Next I |
| 423 |
|
| 424 |
Put 1, , "POLYGONS" |
| 425 |
Put 1, , CLng(numb * 2) |
| 426 |
L = 0 |
| 427 |
ID4 = 0 |
| 428 |
For I = 0 To AGQG.NumEntries - 1 |
| 429 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 430 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 431 |
'nothing |
| 432 |
Case Else |
| 433 |
Put 1, , CLng(3) |
| 434 |
Put 1, , CLng(L) |
| 435 |
Put 1, , CLng(L + 1) |
| 436 |
Put 1, , CLng(L + 2) |
| 437 |
Put 1, , CLng(ID4) |
| 438 |
Put 1, , CLng(3) |
| 439 |
Put 1, , CLng(L + 2) |
| 440 |
Put 1, , CLng(L + 3) |
| 441 |
Put 1, , CLng(L) |
| 442 |
Put 1, , CLng(ID4) |
| 443 |
ID4 = ID4 + 1 |
| 444 |
L = L + 4 |
| 445 |
End Select |
| 446 |
Next I |
| 447 |
|
| 448 |
Put 1, , CLng(1) |
| 449 |
Put 1, , "TEX_UV " |
| 450 |
Put 1, , CLng(numb * 4) |
| 451 |
L = 0 |
| 452 |
|
| 453 |
For I = 0 To AGQG.NumEntries - 1 |
| 454 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 455 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 456 |
'nothing |
| 457 |
Case Else |
| 458 |
Put 1, , CLng(L) |
| 459 |
L = L + 1 |
| 460 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(1)).X |
| 461 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(1)).Y |
| 462 |
Put 1, , CLng(L) |
| 463 |
L = L + 1 |
| 464 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(2)).X |
| 465 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(2)).Y |
| 466 |
Put 1, , CLng(L) |
| 467 |
L = L + 1 |
| 468 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(3)).X |
| 469 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(3)).Y |
| 470 |
Put 1, , CLng(L) |
| 471 |
L = L + 1 |
| 472 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(4)).X |
| 473 |
Put 1, , TXCA_E(AGQGEntry(I).VertUVIndex(4)).Y |
| 474 |
End Select |
| 475 |
'Put 1, , CSng((-TXCA_E(I).Y) + 1) |
| 476 |
Next I |
| 477 |
|
| 478 |
L = 0 |
| 479 |
Put 1, , "MATERIAL" |
| 480 |
Put 1, , CLng(numb) |
| 481 |
For I = 0 To AGQG.NumEntries - 1 |
| 482 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 483 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 484 |
'nothing |
| 485 |
Case Else |
| 486 |
Put 1, , CLng(1) |
| 487 |
Put 1, , CLng(L) |
| 488 |
Put 1, , CLng(Len(TexNames(AGQR_E(I).TexIndex))) |
| 489 |
Put 1, , TexNames(AGQR_E(I).TexIndex) |
| 490 |
L = L + 1 |
| 491 |
End Select |
| 492 |
Next I |
| 493 |
Close |
| 494 |
|
| 495 |
Open GetPureFile(FileName) + ".tlist" For Binary As #4 |
| 496 |
For I = 0 To AGQR1.NumEntries - 1 |
| 497 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 498 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 499 |
'nothing |
| 500 |
Case Else |
| 501 |
Put 4, , AGQR_E(I).TexIndex |
| 502 |
End Select |
| 503 |
Next I |
| 504 |
Close |
| 505 |
|
| 506 |
Open GetPureFile(FileName) + ".txt" For Output As #4 |
| 507 |
Print #4, CStr(TXMA1.NumEntries) |
| 508 |
For I = 0 To TXMA1.NumEntries - 1 |
| 509 |
Print #4, CStr(GetPureFile(TexNames(I))) |
| 510 |
Next I |
| 511 |
Close |
| 512 |
|
| 513 |
If Form1.mnuB3DLight.Checked = True Then |
| 514 |
Open GetPureFile(FileName) + ".ltcs" For Binary As #4 |
| 515 |
For I = 0 To AGQR1.NumEntries - 1 |
| 516 |
Select Case GetPureFile(TexNames(AGQR_E(I).TexIndex)) |
| 517 |
Case "BLUEGRID02", "_DOOR_FRAME", "", "COLLISION" |
| 518 |
'nothing |
| 519 |
Case Else |
| 520 |
Put 4, , AGQGEntry(I).LData_1 |
| 521 |
Put 4, , AGQGEntry(I).LData_2 |
| 522 |
Put 4, , AGQGEntry(I).LData_3 |
| 523 |
Put 4, , AGQGEntry(I).LData_4 |
| 524 |
End Select |
| 525 |
Next I |
| 526 |
Close |
| 527 |
End If |
| 528 |
End Select |
| 529 |
|
| 530 |
Form1.ProgressBar1.Value = 0 |
| 531 |
Form1.ProgressBar1.Max = UBound(OniEntry) |
| 532 |
|
| 533 |
Form1.StatusBar1.SimpleText = "OK" |
| 534 |
'Dispose |
| 535 |
I = Empty |
| 536 |
NP = Empty |
| 537 |
Erase LwoP |
| 538 |
Erase PNTAentry |
| 539 |
Erase OniPol2 |
| 540 |
Erase AGQGEntry |
| 541 |
Erase AGQR_E |
| 542 |
Erase TXMA_E |
| 543 |
Erase TXCA_E |
| 544 |
Erase TexNames |
| 545 |
End Sub |