Second commit
This commit is contained in:
commit
36840f3ad4
999 files changed
+61364
No files matched your search
@@ -0,0 +1,304 @@
|
||||
//
|
||||
// This file is part of the Tremble package by Tiny Goose.
|
||||
// Copyright (c) 2024-2026 TinyGoose Ltd., All Rights Reserved.
|
||||
//
|
||||
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace TinyGoose.Tremble
|
||||
{
|
||||
public class WadPalette
|
||||
{
|
||||
private Color32[] m_Colours;
|
||||
public ref Color32 Get(int pos) => ref m_Colours[pos];
|
||||
|
||||
private static WadPalette s_QuakePalette;
|
||||
public static WadPalette QuakePalette
|
||||
{
|
||||
get
|
||||
{
|
||||
if (s_QuakePalette == null)
|
||||
{
|
||||
s_QuakePalette = new()
|
||||
{
|
||||
m_Colours = new Color32[]
|
||||
{
|
||||
new(0x00, 0x00, 0x00, 0xFF),
|
||||
new(0x0F, 0x0F, 0x0F, 0xFF),
|
||||
new(0x1F, 0x1F, 0x1F, 0xFF),
|
||||
new(0x2F, 0x2F, 0x2F, 0xFF),
|
||||
new(0x3F, 0x3F, 0x3F, 0xFF),
|
||||
new(0x4B, 0x4B, 0x4B, 0xFF),
|
||||
new(0x5B, 0x5B, 0x5B, 0xFF),
|
||||
new(0x6B, 0x6B, 0x6B, 0xFF),
|
||||
new(0x7B, 0x7B, 0x7B, 0xFF),
|
||||
new(0x8B, 0x8B, 0x8B, 0xFF),
|
||||
new(0x9B, 0x9B, 0x9B, 0xFF),
|
||||
new(0xAB, 0xAB, 0xAB, 0xFF),
|
||||
new(0xBB, 0xBB, 0xBB, 0xFF),
|
||||
new(0xCB, 0xCB, 0xCB, 0xFF),
|
||||
new(0xDB, 0xDB, 0xDB, 0xFF),
|
||||
new(0xEB, 0xEB, 0xEB, 0xFF),
|
||||
new(0x0F, 0x0B, 0x07, 0xFF),
|
||||
new(0x17, 0x0F, 0x0B, 0xFF),
|
||||
new(0x1F, 0x17, 0x0B, 0xFF),
|
||||
new(0x27, 0x1B, 0x0F, 0xFF),
|
||||
new(0x2F, 0x23, 0x13, 0xFF),
|
||||
new(0x37, 0x2B, 0x17, 0xFF),
|
||||
new(0x3F, 0x2F, 0x17, 0xFF),
|
||||
new(0x4B, 0x37, 0x1B, 0xFF),
|
||||
new(0x53, 0x3B, 0x1B, 0xFF),
|
||||
new(0x5B, 0x43, 0x1F, 0xFF),
|
||||
new(0x63, 0x4B, 0x1F, 0xFF),
|
||||
new(0x6B, 0x53, 0x1F, 0xFF),
|
||||
new(0x73, 0x57, 0x1F, 0xFF),
|
||||
new(0x7B, 0x5F, 0x23, 0xFF),
|
||||
new(0x83, 0x67, 0x23, 0xFF),
|
||||
new(0x8F, 0x6F, 0x23, 0xFF),
|
||||
new(0x0B, 0x0B, 0x0F, 0xFF),
|
||||
new(0x13, 0x13, 0x1B, 0xFF),
|
||||
new(0x1B, 0x1B, 0x27, 0xFF),
|
||||
new(0x27, 0x27, 0x33, 0xFF),
|
||||
new(0x2F, 0x2F, 0x3F, 0xFF),
|
||||
new(0x37, 0x37, 0x4B, 0xFF),
|
||||
new(0x3F, 0x3F, 0x57, 0xFF),
|
||||
new(0x47, 0x47, 0x67, 0xFF),
|
||||
new(0x4F, 0x4F, 0x73, 0xFF),
|
||||
new(0x5B, 0x5B, 0x7F, 0xFF),
|
||||
new(0x63, 0x63, 0x8B, 0xFF),
|
||||
new(0x6B, 0x6B, 0x97, 0xFF),
|
||||
new(0x73, 0x73, 0xA3, 0xFF),
|
||||
new(0x7B, 0x7B, 0xAF, 0xFF),
|
||||
new(0x83, 0x83, 0xBB, 0xFF),
|
||||
new(0x8B, 0x8B, 0xCB, 0xFF),
|
||||
new(0x00, 0x00, 0x00, 0xFF),
|
||||
new(0x07, 0x07, 0x00, 0xFF),
|
||||
new(0x0B, 0x0B, 0x00, 0xFF),
|
||||
new(0x13, 0x13, 0x00, 0xFF),
|
||||
new(0x1B, 0x1B, 0x00, 0xFF),
|
||||
new(0x23, 0x23, 0x00, 0xFF),
|
||||
new(0x2B, 0x2B, 0x07, 0xFF),
|
||||
new(0x2F, 0x2F, 0x07, 0xFF),
|
||||
new(0x37, 0x37, 0x07, 0xFF),
|
||||
new(0x3F, 0x3F, 0x07, 0xFF),
|
||||
new(0x47, 0x47, 0x07, 0xFF),
|
||||
new(0x4B, 0x4B, 0x0B, 0xFF),
|
||||
new(0x53, 0x53, 0x0B, 0xFF),
|
||||
new(0x5B, 0x5B, 0x0B, 0xFF),
|
||||
new(0x63, 0x63, 0x0B, 0xFF),
|
||||
new(0x6B, 0x6B, 0x0F, 0xFF),
|
||||
new(0x07, 0x00, 0x00, 0xFF),
|
||||
new(0x0F, 0x00, 0x00, 0xFF),
|
||||
new(0x17, 0x00, 0x00, 0xFF),
|
||||
new(0x1F, 0x00, 0x00, 0xFF),
|
||||
new(0x27, 0x00, 0x00, 0xFF),
|
||||
new(0x2F, 0x00, 0x00, 0xFF),
|
||||
new(0x37, 0x00, 0x00, 0xFF),
|
||||
new(0x3F, 0x00, 0x00, 0xFF),
|
||||
new(0x47, 0x00, 0x00, 0xFF),
|
||||
new(0x4F, 0x00, 0x00, 0xFF),
|
||||
new(0x57, 0x00, 0x00, 0xFF),
|
||||
new(0x5F, 0x00, 0x00, 0xFF),
|
||||
new(0x67, 0x00, 0x00, 0xFF),
|
||||
new(0x6F, 0x00, 0x00, 0xFF),
|
||||
new(0x77, 0x00, 0x00, 0xFF),
|
||||
new(0x7F, 0x00, 0x00, 0xFF),
|
||||
new(0x13, 0x13, 0x00, 0xFF),
|
||||
new(0x1B, 0x1B, 0x00, 0xFF),
|
||||
new(0x23, 0x23, 0x00, 0xFF),
|
||||
new(0x2F, 0x2B, 0x00, 0xFF),
|
||||
new(0x37, 0x2F, 0x00, 0xFF),
|
||||
new(0x43, 0x37, 0x00, 0xFF),
|
||||
new(0x4B, 0x3B, 0x07, 0xFF),
|
||||
new(0x57, 0x43, 0x07, 0xFF),
|
||||
new(0x5F, 0x47, 0x07, 0xFF),
|
||||
new(0x6B, 0x4B, 0x0B, 0xFF),
|
||||
new(0x77, 0x53, 0x0F, 0xFF),
|
||||
new(0x83, 0x57, 0x13, 0xFF),
|
||||
new(0x8B, 0x5B, 0x13, 0xFF),
|
||||
new(0x97, 0x5F, 0x1B, 0xFF),
|
||||
new(0xA3, 0x63, 0x1F, 0xFF),
|
||||
new(0xAF, 0x67, 0x23, 0xFF),
|
||||
new(0x23, 0x13, 0x07, 0xFF),
|
||||
new(0x2F, 0x17, 0x0B, 0xFF),
|
||||
new(0x3B, 0x1F, 0x0F, 0xFF),
|
||||
new(0x4B, 0x23, 0x13, 0xFF),
|
||||
new(0x57, 0x2B, 0x17, 0xFF),
|
||||
new(0x63, 0x2F, 0x1F, 0xFF),
|
||||
new(0x73, 0x37, 0x23, 0xFF),
|
||||
new(0x7F, 0x3B, 0x2B, 0xFF),
|
||||
new(0x8F, 0x43, 0x33, 0xFF),
|
||||
new(0x9F, 0x4F, 0x33, 0xFF),
|
||||
new(0xAF, 0x63, 0x2F, 0xFF),
|
||||
new(0xBF, 0x77, 0x2F, 0xFF),
|
||||
new(0xCF, 0x8F, 0x2B, 0xFF),
|
||||
new(0xDF, 0xAB, 0x27, 0xFF),
|
||||
new(0xEF, 0xCB, 0x1F, 0xFF),
|
||||
new(0xFF, 0xF3, 0x1B, 0xFF),
|
||||
new(0x0B, 0x07, 0x00, 0xFF),
|
||||
new(0x1B, 0x13, 0x00, 0xFF),
|
||||
new(0x2B, 0x23, 0x0F, 0xFF),
|
||||
new(0x37, 0x2B, 0x13, 0xFF),
|
||||
new(0x47, 0x33, 0x1B, 0xFF),
|
||||
new(0x53, 0x37, 0x23, 0xFF),
|
||||
new(0x63, 0x3F, 0x2B, 0xFF),
|
||||
new(0x6F, 0x47, 0x33, 0xFF),
|
||||
new(0x7F, 0x53, 0x3F, 0xFF),
|
||||
new(0x8B, 0x5F, 0x47, 0xFF),
|
||||
new(0x9B, 0x6B, 0x53, 0xFF),
|
||||
new(0xA7, 0x7B, 0x5F, 0xFF),
|
||||
new(0xB7, 0x87, 0x6B, 0xFF),
|
||||
new(0xC3, 0x93, 0x7B, 0xFF),
|
||||
new(0xD3, 0xA3, 0x8B, 0xFF),
|
||||
new(0xE3, 0xB3, 0x97, 0xFF),
|
||||
new(0xAB, 0x8B, 0xA3, 0xFF),
|
||||
new(0x9F, 0x7F, 0x97, 0xFF),
|
||||
new(0x93, 0x73, 0x87, 0xFF),
|
||||
new(0x8B, 0x67, 0x7B, 0xFF),
|
||||
new(0x7F, 0x5B, 0x6F, 0xFF),
|
||||
new(0x77, 0x53, 0x63, 0xFF),
|
||||
new(0x6B, 0x4B, 0x57, 0xFF),
|
||||
new(0x5F, 0x3F, 0x4B, 0xFF),
|
||||
new(0x57, 0x37, 0x43, 0xFF),
|
||||
new(0x4B, 0x2F, 0x37, 0xFF),
|
||||
new(0x43, 0x27, 0x2F, 0xFF),
|
||||
new(0x37, 0x1F, 0x23, 0xFF),
|
||||
new(0x2B, 0x17, 0x1B, 0xFF),
|
||||
new(0x23, 0x13, 0x13, 0xFF),
|
||||
new(0x17, 0x0B, 0x0B, 0xFF),
|
||||
new(0x0F, 0x07, 0x07, 0xFF),
|
||||
new(0xBB, 0x73, 0x9F, 0xFF),
|
||||
new(0xAF, 0x6B, 0x8F, 0xFF),
|
||||
new(0xA3, 0x5F, 0x83, 0xFF),
|
||||
new(0x97, 0x57, 0x77, 0xFF),
|
||||
new(0x8B, 0x4F, 0x6B, 0xFF),
|
||||
new(0x7F, 0x4B, 0x5F, 0xFF),
|
||||
new(0x73, 0x43, 0x53, 0xFF),
|
||||
new(0x6B, 0x3B, 0x4B, 0xFF),
|
||||
new(0x5F, 0x33, 0x3F, 0xFF),
|
||||
new(0x53, 0x2B, 0x37, 0xFF),
|
||||
new(0x47, 0x23, 0x2B, 0xFF),
|
||||
new(0x3B, 0x1F, 0x23, 0xFF),
|
||||
new(0x2F, 0x17, 0x1B, 0xFF),
|
||||
new(0x23, 0x13, 0x13, 0xFF),
|
||||
new(0x17, 0x0B, 0x0B, 0xFF),
|
||||
new(0x0F, 0x07, 0x07, 0xFF),
|
||||
new(0xDB, 0xC3, 0xBB, 0xFF),
|
||||
new(0xCB, 0xB3, 0xA7, 0xFF),
|
||||
new(0xBF, 0xA3, 0x9B, 0xFF),
|
||||
new(0xAF, 0x97, 0x8B, 0xFF),
|
||||
new(0xA3, 0x87, 0x7B, 0xFF),
|
||||
new(0x97, 0x7B, 0x6F, 0xFF),
|
||||
new(0x87, 0x6F, 0x5F, 0xFF),
|
||||
new(0x7B, 0x63, 0x53, 0xFF),
|
||||
new(0x6B, 0x57, 0x47, 0xFF),
|
||||
new(0x5F, 0x4B, 0x3B, 0xFF),
|
||||
new(0x53, 0x3F, 0x33, 0xFF),
|
||||
new(0x43, 0x33, 0x27, 0xFF),
|
||||
new(0x37, 0x2B, 0x1F, 0xFF),
|
||||
new(0x27, 0x1F, 0x17, 0xFF),
|
||||
new(0x1B, 0x13, 0x0F, 0xFF),
|
||||
new(0x0F, 0x0B, 0x07, 0xFF),
|
||||
new(0x6F, 0x83, 0x7B, 0xFF),
|
||||
new(0x67, 0x7B, 0x6F, 0xFF),
|
||||
new(0x5F, 0x73, 0x67, 0xFF),
|
||||
new(0x57, 0x6B, 0x5F, 0xFF),
|
||||
new(0x4F, 0x63, 0x57, 0xFF),
|
||||
new(0x47, 0x5B, 0x4F, 0xFF),
|
||||
new(0x3F, 0x53, 0x47, 0xFF),
|
||||
new(0x37, 0x4B, 0x3F, 0xFF),
|
||||
new(0x2F, 0x43, 0x37, 0xFF),
|
||||
new(0x2B, 0x3B, 0x2F, 0xFF),
|
||||
new(0x23, 0x33, 0x27, 0xFF),
|
||||
new(0x1F, 0x2B, 0x1F, 0xFF),
|
||||
new(0x17, 0x23, 0x17, 0xFF),
|
||||
new(0x0F, 0x1B, 0x13, 0xFF),
|
||||
new(0x0B, 0x13, 0x0B, 0xFF),
|
||||
new(0x07, 0x0B, 0x07, 0xFF),
|
||||
new(0xFF, 0xF3, 0x1B, 0xFF),
|
||||
new(0xEF, 0xDF, 0x17, 0xFF),
|
||||
new(0xDB, 0xCB, 0x13, 0xFF),
|
||||
new(0xCB, 0xB7, 0x0F, 0xFF),
|
||||
new(0xBB, 0xA7, 0x0F, 0xFF),
|
||||
new(0xAB, 0x97, 0x0B, 0xFF),
|
||||
new(0x9B, 0x83, 0x07, 0xFF),
|
||||
new(0x8B, 0x73, 0x07, 0xFF),
|
||||
new(0x7B, 0x63, 0x07, 0xFF),
|
||||
new(0x6B, 0x53, 0x00, 0xFF),
|
||||
new(0x5B, 0x47, 0x00, 0xFF),
|
||||
new(0x4B, 0x37, 0x00, 0xFF),
|
||||
new(0x3B, 0x2B, 0x00, 0xFF),
|
||||
new(0x2B, 0x1F, 0x00, 0xFF),
|
||||
new(0x1B, 0x0F, 0x00, 0xFF),
|
||||
new(0x0B, 0x07, 0x00, 0xFF),
|
||||
new(0x00, 0x00, 0xFF, 0xFF),
|
||||
new(0x0B, 0x0B, 0xEF, 0xFF),
|
||||
new(0x13, 0x13, 0xDF, 0xFF),
|
||||
new(0x1B, 0x1B, 0xCF, 0xFF),
|
||||
new(0x23, 0x23, 0xBF, 0xFF),
|
||||
new(0x2B, 0x2B, 0xAF, 0xFF),
|
||||
new(0x2F, 0x2F, 0x9F, 0xFF),
|
||||
new(0x2F, 0x2F, 0x8F, 0xFF),
|
||||
new(0x2F, 0x2F, 0x7F, 0xFF),
|
||||
new(0x2F, 0x2F, 0x6F, 0xFF),
|
||||
new(0x2F, 0x2F, 0x5F, 0xFF),
|
||||
new(0x2B, 0x2B, 0x4F, 0xFF),
|
||||
new(0x23, 0x23, 0x3F, 0xFF),
|
||||
new(0x1B, 0x1B, 0x2F, 0xFF),
|
||||
new(0x13, 0x13, 0x1F, 0xFF),
|
||||
new(0x0B, 0x0B, 0x0F, 0xFF),
|
||||
new(0x2B, 0x00, 0x00, 0xFF),
|
||||
new(0x3B, 0x00, 0x00, 0xFF),
|
||||
new(0x4B, 0x07, 0x00, 0xFF),
|
||||
new(0x5F, 0x07, 0x00, 0xFF),
|
||||
new(0x6F, 0x0F, 0x00, 0xFF),
|
||||
new(0x7F, 0x17, 0x07, 0xFF),
|
||||
new(0x93, 0x1F, 0x07, 0xFF),
|
||||
new(0xA3, 0x27, 0x0B, 0xFF),
|
||||
new(0xB7, 0x33, 0x0F, 0xFF),
|
||||
new(0xC3, 0x4B, 0x1B, 0xFF),
|
||||
new(0xCF, 0x63, 0x2B, 0xFF),
|
||||
new(0xDB, 0x7F, 0x3B, 0xFF),
|
||||
new(0xE3, 0x97, 0x4F, 0xFF),
|
||||
new(0xE7, 0xAB, 0x5F, 0xFF),
|
||||
new(0xEF, 0xBF, 0x77, 0xFF),
|
||||
new(0xF7, 0xD3, 0x8B, 0xFF),
|
||||
new(0xA7, 0x7B, 0x3B, 0xFF),
|
||||
new(0xB7, 0x9B, 0x37, 0xFF),
|
||||
new(0xC7, 0xC3, 0x37, 0xFF),
|
||||
new(0xE7, 0xE3, 0x57, 0xFF),
|
||||
new(0x7F, 0xBF, 0xFF, 0xFF),
|
||||
new(0xAB, 0xE7, 0xFF, 0xFF),
|
||||
new(0xD7, 0xFF, 0xFF, 0xFF),
|
||||
new(0x67, 0x00, 0x00, 0xFF),
|
||||
new(0x8B, 0x00, 0x00, 0xFF),
|
||||
new(0xB3, 0x00, 0x00, 0xFF),
|
||||
new(0xD7, 0x00, 0x00, 0xFF),
|
||||
new(0xFF, 0x00, 0x00, 0xFF),
|
||||
new(0xFF, 0xF3, 0x93, 0xFF),
|
||||
new(0xFF, 0xF7, 0xC7, 0xFF),
|
||||
new(0xFF, 0xFF, 0xFF, 0xFF),
|
||||
new(0x9F, 0x5B, 0x53, 0xFF)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return s_QuakePalette;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public readonly struct WadEntry
|
||||
{
|
||||
public int Address { get; init; }
|
||||
public int Size { get; init; }
|
||||
public char Type { get; init; }
|
||||
public string Name { get; init; }
|
||||
}
|
||||
|
||||
public record WadFile
|
||||
{
|
||||
public List<WadEntry> Entries { get; init; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 81577f4367354726bf894c329ef36a6c
|
||||
timeCreated: 1722844184
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 277805
|
||||
packageName: Tremble - Map Importer
|
||||
packageVersion: 1.11.1
|
||||
assetPath: Assets/Tremble/IO/WAD/WadFile.cs
|
||||
uploadId: 939664
|
||||
@@ -0,0 +1,102 @@
|
||||
//
|
||||
// This file is part of the Tremble package by Tiny Goose.
|
||||
// Copyright (c) 2024-2026 TinyGoose Ltd., All Rights Reserved.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Experimental.Rendering;
|
||||
|
||||
namespace TinyGoose.Tremble
|
||||
{
|
||||
public class WadParser
|
||||
{
|
||||
private readonly StreamReadIO m_Stream;
|
||||
|
||||
public WadParser(string filename)
|
||||
{
|
||||
m_Stream = new(filename);
|
||||
}
|
||||
|
||||
public void WriteTextureToFile(in WadEntry entry, string outFile)
|
||||
{
|
||||
m_Stream.Seek(entry.Address);
|
||||
|
||||
string name = m_Stream.ReadString(16);
|
||||
int width = m_Stream.ReadInt32();
|
||||
int height = m_Stream.ReadInt32();
|
||||
m_Stream.SkipBytes(16);
|
||||
|
||||
byte[] palettedTextureData = m_Stream.ReadBytes(width * height);
|
||||
byte[] rgbTextureData = new byte[palettedTextureData.Length * 3];
|
||||
|
||||
// Copy paletted to RGB, flipping as we go
|
||||
for (int x = 0; x < width; x++)
|
||||
{
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
int readOffset = y * width + x;
|
||||
|
||||
int invY = height - y - 1;
|
||||
int writeOffset = (invY * width + x) * 3;
|
||||
|
||||
ref Color32 colour = ref WadPalette.QuakePalette.Get(palettedTextureData[readOffset]);
|
||||
|
||||
rgbTextureData[writeOffset + 0] = colour.r;
|
||||
rgbTextureData[writeOffset + 1] = colour.g;
|
||||
rgbTextureData[writeOffset + 2] = colour.b;
|
||||
}
|
||||
}
|
||||
|
||||
byte[] pngBytes = ImageConversion.EncodeArrayToPNG(rgbTextureData, GraphicsFormat.R8G8B8_UNorm, (uint)width, (uint)height);
|
||||
File.WriteAllBytes(outFile, pngBytes);
|
||||
}
|
||||
|
||||
public WadFile Parse()
|
||||
{
|
||||
m_Stream.Seek(0);
|
||||
|
||||
string magic = new(m_Stream.ReadChars(4));
|
||||
if (!magic.EqualsInvariant("wad2"))
|
||||
{
|
||||
Debug.LogError($"File was not a WAD2 :(");
|
||||
return default;
|
||||
}
|
||||
|
||||
int numEntries = m_Stream.ReadInt32();
|
||||
int dirOffset = m_Stream.ReadInt32();
|
||||
|
||||
m_Stream.Seek(dirOffset);
|
||||
|
||||
List<WadEntry> entries = new(numEntries);
|
||||
for (int entryIdx = 0; entryIdx < numEntries; entryIdx++)
|
||||
{
|
||||
int entryAddress = m_Stream.ReadInt32();
|
||||
int entrySize = m_Stream.ReadInt32();
|
||||
m_Stream.SkipBytes(4);
|
||||
char type = (char)m_Stream.ReadByte();
|
||||
m_Stream.SkipBytes(3);
|
||||
string name = new(m_Stream.ReadString(16));
|
||||
|
||||
// Skip anything that's not a texture
|
||||
if (type != 'D')
|
||||
continue;
|
||||
|
||||
entries.Add(new()
|
||||
{
|
||||
Address = entryAddress,
|
||||
Size = entrySize,
|
||||
Type = type,
|
||||
Name = name.Replace('*', '_') // * is not a valid name for an asset!
|
||||
});
|
||||
}
|
||||
|
||||
return new()
|
||||
{
|
||||
Entries = entries
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f8ecbbe775a9445a9f8f2148c4a06be2
|
||||
timeCreated: 1722843896
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 277805
|
||||
packageName: Tremble - Map Importer
|
||||
packageVersion: 1.11.1
|
||||
assetPath: Assets/Tremble/IO/WAD/WadParser.cs
|
||||
uploadId: 939664
|
||||
Reference in new issue
Block a user