display-name: "Games/Xargon"
meta: {"Working": ["Tiles", "Sprites"]}

palette-xargon:
   [0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0xE8, 0x9C, 0x7C, 0xC8, 0xF4, 0xF4, 0x84, 0x60, 0xBC,
    0x94, 0xDC, 0xF4, 0xF0, 0x7C, 0xF0, 0xF4, 0xF4, 0x50, 0x50, 0x50, 0x50, 0x50, 0xF4, 0x50, 0xF4,
    0x50, 0x50, 0xF4, 0xF4, 0xF4, 0x50, 0x50, 0xF4, 0x50, 0xF4, 0xB4, 0xA8, 0x00, 0xF4, 0xF4, 0xF4,
    0x00, 0x00, 0x00, 0x2C, 0x2C, 0x2C, 0x4C, 0x4C, 0x4C, 0x5C, 0x5C, 0x5C, 0x7C, 0x7C, 0x7C, 0x88,
    0x88, 0x88, 0xA8, 0xA8, 0xA8, 0xC8, 0xC8, 0xC8, 0x28, 0x34, 0x44, 0x3C, 0x48, 0x5C, 0x54, 0x60,
    0x74, 0x6C, 0x78, 0x88, 0x84, 0x90, 0xA0, 0xA0, 0xAC, 0xB8, 0xC4, 0xC8, 0xD0, 0xE8, 0xE8, 0xE8,
    0x3C, 0x2C, 0x1C, 0x4C, 0x3C, 0x2C, 0x6C, 0x5C, 0x3C, 0x7C, 0x6C, 0x5C, 0x98, 0x88, 0x6C, 0xA8,
    0x98, 0x88, 0xC8, 0xB8, 0xA8, 0xD8, 0xD8, 0xB8, 0x5C, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x7C, 0x1C,
    0x1C, 0x98, 0x2C, 0x2C, 0xA8, 0x4C, 0x4C, 0xC8, 0x6C, 0x6C, 0xD8, 0x98, 0x98, 0xE8, 0xC8, 0xC8,
    0x4C, 0x00, 0x00, 0x64, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x90, 0x00, 0x00, 0xA8, 0x00, 0x00, 0xC0,
    0x00, 0x00, 0xD8, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x6C,
    0x00, 0x00, 0x88, 0x00, 0x00, 0xA8, 0x00, 0x00, 0xB8, 0x00, 0x00, 0xD8, 0x00, 0x00, 0xE8, 0x00,
    0x5C, 0x3C, 0x00, 0x6C, 0x4C, 0x00, 0x7C, 0x5C, 0x00, 0x98, 0x7C, 0x00, 0xA8, 0x88, 0x00, 0xB8,
    0xA8, 0x00, 0xD8, 0xC8, 0x00, 0xE8, 0xE8, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x6C, 0x00, 0x00,
    0x7C, 0x00, 0x00, 0x98, 0x00, 0x00, 0xA8, 0x00, 0x00, 0xB8, 0x00, 0x00, 0xD8, 0x00, 0x00, 0xE8,
    0x00, 0x3C, 0x3C, 0x00, 0x54, 0x54, 0x00, 0x6C, 0x6C, 0x00, 0x80, 0x80, 0x00, 0x9C, 0x9C, 0x00,
    0xB4, 0xB4, 0x00, 0xCC, 0xCC, 0x00, 0xE8, 0xE8, 0x1C, 0x3C, 0x5C, 0x1C, 0x4C, 0x6C, 0x2C, 0x5C,
    0x7C, 0x3C, 0x6C, 0x98, 0x4C, 0x7C, 0xA8, 0x5C, 0x98, 0xB8, 0x6C, 0xA8, 0xD8, 0x88, 0xB8, 0xE8,
    0x7C, 0x00, 0x00, 0x98, 0x00, 0x00, 0xC8, 0x00, 0x00, 0xE8, 0x00, 0x00, 0xE8, 0x6C, 0x00, 0xE8,
    0x98, 0x00, 0xE8, 0xC8, 0x00, 0xE8, 0xE8, 0x00, 0x6C, 0x2C, 0x0C, 0x7C, 0x3C, 0x18, 0x8C, 0x54,
    0x24, 0x9C, 0x68, 0x34, 0xB0, 0x7C, 0x48, 0xC0, 0x94, 0x5C, 0xD4, 0xAC, 0x74, 0xE8, 0xC8, 0x88,
    0x00, 0x2C, 0x2C, 0x00, 0x44, 0x40, 0x00, 0x60, 0x58, 0x00, 0x7C, 0x68, 0x00, 0x94, 0x7C, 0x00,
    0xB0, 0x84, 0x00, 0xCC, 0x90, 0x00, 0xE8, 0x98, 0x3C, 0x1C, 0x0C, 0x4C, 0x2C, 0x0C, 0x6C, 0x3C,
    0x0C, 0x7C, 0x3C, 0x1C, 0x88, 0x4C, 0x1C, 0x98, 0x5C, 0x1C, 0xB8, 0x6C, 0x1C, 0xC8, 0x6C, 0x2C,
    0x30, 0x10, 0x54, 0x44, 0x1C, 0x68, 0x58, 0x30, 0x7C, 0x70, 0x48, 0x94, 0x84, 0x60, 0xAC, 0xA0,
    0x7C, 0xC4, 0xBC, 0x98, 0xDC, 0xDC, 0xC0, 0xF4, 0x38, 0x38, 0x60, 0x48, 0x48, 0x74, 0x5C, 0x5C,
    0x84, 0x70, 0x70, 0x9C, 0x84, 0x84, 0xB0, 0x9C, 0x9C, 0xC8, 0xB4, 0xB4, 0xDC, 0xD0, 0xD0, 0xF4,
    0x7C, 0xC8, 0xF4, 0x60, 0xB0, 0xDC, 0x44, 0x9C, 0xC4, 0x30, 0x88, 0xAC, 0x1C, 0x78, 0x94, 0x0C,
    0x68, 0x7C, 0x00, 0x54, 0x68, 0x00, 0x44, 0x54, 0x30, 0x28, 0x00, 0x44, 0x3C, 0x00, 0x58, 0x50,
    0x04, 0x70, 0x64, 0x0C, 0x80, 0x78, 0x1C, 0x98, 0x8C, 0x2C, 0xAC, 0xA0, 0x3C, 0xC4, 0xB8, 0x54,
    0xF4, 0x88, 0x60, 0xF4, 0xF4, 0x7C, 0x00, 0x70, 0x74, 0x00, 0x88, 0x8C, 0x00, 0xA4, 0xA8, 0x00,
    0xBC, 0xC0, 0x00, 0xD4, 0xD8, 0x00, 0xF0, 0xF4, 0xC0, 0x94, 0x58, 0xB0, 0x7C, 0x44, 0x9C, 0x68,
    0x30, 0x88, 0x58, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
    0x1C, 0x3C, 0x60, 0x1C, 0x4C, 0x70, 0x2C, 0x5C, 0x7C, 0x3C, 0x6C, 0x9C, 0x4C, 0x7C, 0xAC, 0x5C,
    0x98, 0xBC, 0x6C, 0xA8, 0xDC, 0x88, 0xB8, 0xEC, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
    0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
    0x50, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xC8, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x98,
    0x00, 0x00, 0x80, 0x00, 0x00, 0x68, 0x00, 0x00, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
    0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0x00, 0x00, 0x00,
    0x20, 0x2C, 0x38, 0x34, 0x44, 0x54, 0x48, 0x5C, 0x70, 0x64, 0x74, 0x8C, 0x7C, 0x90, 0xA8, 0x98,
    0xAC, 0xC4, 0xB8, 0xC8, 0xE0, 0xDC, 0xE8, 0xFC, 0x00, 0x00, 0x4C, 0x04, 0x08, 0x64, 0x14, 0x1C,
    0x7C, 0x2C, 0x38, 0x94, 0x48, 0x54, 0xB0, 0x68, 0x78, 0xC8, 0x8C, 0x9C, 0xE0, 0xB8, 0xC8, 0xFC,
    0x44, 0x1C, 0x08, 0x58, 0x28, 0x10, 0x70, 0x3C, 0x20, 0x88, 0x50, 0x30, 0xA0, 0x64, 0x44, 0xB8,
    0x7C, 0x5C, 0xD0, 0x98, 0x78, 0xE8, 0xB4, 0x98, 0xC4, 0xAC, 0x5C, 0x00, 0x00, 0x00, 0xE4, 0xC8,
    0xFC, 0xC4, 0xA0, 0xE4, 0x00, 0xB0, 0x00, 0x00, 0xB0, 0x00, 0x00, 0xB0, 0x00, 0x00, 0xB0, 0x00,
    0x00, 0x48, 0x58, 0x84, 0xD0, 0xFC, 0x38, 0xB4, 0xE0, 0x00, 0xA4, 0xC8, 0x00, 0x90, 0xB0, 0x00,
    0x7C, 0x98, 0x00, 0x6C, 0x84, 0x00, 0x58, 0x6C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xA0, 0x74, 0x74, 0x94, 0x80, 0x80, 0x7C, 0x7C, 0x98, 0xF4, 0xF4, 0xF4]

if (file.name like "graphics*")
{
	file-number: 0
    file[64]: i
    {
        unsigned32 offset
		name: "Xargon Image " + i
		palette: palette-xargon
		interpret-as "jill-image"

		at (file.position + (128 * 4))
        {
            unsigned16 size
        }
    
        skip-if ((offset == 0) and (size == 0))
	}
}

if (file.name like "audio*")
{
	folder: "Sounds"
}

if (file.name like "song*")
{
	folder: "Music"
}

if (file.name like "*.doc")
{
	text
}

if (file.name like "screen_3.xr?")
{
	b800-text
}

if (file.name like "screen_?.xr?")
{
	interpret-as "image-PCX"
}

if (file.name like "tiles.xr?")
{
	interpret-as "jill-tile-mapping"
}

if ((file.name like "*.xr1") and !(file.name like ["config.xr1", "end_mac.xr1"]))
{
    //Read tile mapping table
    tile-mapping: [](1000)
    from "tiles.xr1"
    {
        loop while (file.remaining-bytes > 0): i
        {           
            unsigned16 mapCode
            unsigned8 tile
            unsigned8 tileset
            unsigned16 flags
            pascal-string(unsigned8) tilename

            tile-mapping[mapCode] = {
                "tile": tile,
                "tileset": (tileset & 0x3F)
            }
        }
    }

    //Level
    level-bg-ega: 0
    level
    {
        loop (128 * 64): i
        {
            unsigned16 tile-id
            tile-id = tile-id & 0xFFF

            image-name: "graphics.xr1\\xargon image " + tile-mapping[tile-id].tileset + "\\" + tile-mapping[tile-id].tile

            level-object
            {
                sprite: image-name
                offset-x: (i / 64) * 16
                offset-y: (i % 64) * 16
            }
        }
    }
}