// // 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 Entries { get; init; } } }