<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Diema</id>
	<title>ModdingWiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Diema"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Diema"/>
	<updated>2026-08-12T03:56:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=DAT_Format_(Shadowcaster)&amp;diff=12885</id>
		<title>DAT Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=DAT_Format_(Shadowcaster)&amp;diff=12885"/>
		<updated>2026-08-06T14:50:54Z</updated>

		<summary type="html">&lt;p&gt;Diema: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
[[Shadowcaster]] contains two forms of DAT archive. This page is about the game&#039;s WAD-like game data archives. Another page details the [[Cutscene Format (Shadowcaster)|cutscene DAT format]].&lt;br /&gt;
&lt;br /&gt;
A Shadowcaster game-data archive has the following general structure:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
uint16_t  NumRecords;    // the number of sub-files contained in this archive.&lt;br /&gt;
uint32_t  Directory;     // an offset from the start of this file to the beginning of the record list.&lt;br /&gt;
&lt;br /&gt;
uint8_t DataRegion[...]; // raw sub-file data. there can be hidden sections here; a sub-file&#039;s start does not have to begin right after the end of the previous.&lt;br /&gt;
&lt;br /&gt;
// within each sub-file record is the following format:&lt;br /&gt;
uint32_t Offset;    // offset to the start of the data, from the beginning of the file.&lt;br /&gt;
uint32_t Size;      // the sub-file&#039;s size in bytes.&lt;br /&gt;
uint16_t NameOfs;   // a pointer from the beginning of the directory to a null-terminated string. this can be zero.&lt;br /&gt;
uint16_t Flags;     // in the floppy version, this is always zero. in the CD version, a value of 1 indicates RLE compression.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Record Names ===&lt;br /&gt;
In this format, sub-file records do not have to have a name.&lt;br /&gt;
&lt;br /&gt;
The underlying logic of this is that the game will often request a specific named lump, then refer to unnamed records using an ID offset from that. For example, if the lump named &amp;quot;view&amp;quot; is lump #0, then the game can refer to &amp;quot;view+5&amp;quot; to refer to lump #5, and therefore, lump #5 does not have to store its name. In such a case, &amp;lt;code&amp;gt;NameOfs = 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
By convention, SLADE and MapCaster notate the names of these lumps as ID offsets from the last named entry found.&lt;br /&gt;
&lt;br /&gt;
== Reading a DAT Archive ==&lt;br /&gt;
&amp;lt;small&amp;gt;Adapted from MapCaster GML:&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
NumRecords = buffer_read(buf, buffer_u16);&lt;br /&gt;
Directory = buffer_read(buf, buffer_u32);&lt;br /&gt;
&lt;br /&gt;
buffer_seek(buf, buffer_seek_start, Directory);&lt;br /&gt;
for(z = 0; z &amp;lt; NumRecords; z++) {&lt;br /&gt;
    Records[z] = ds_map_create();&lt;br /&gt;
    &lt;br /&gt;
    r = Records[z];&lt;br /&gt;
    r[? &amp;quot;Offset&amp;quot;] = buffer_read(buf, buffer_u32);&lt;br /&gt;
    r[? &amp;quot;Size&amp;quot;] = buffer_read(buf, buffer_u32);&lt;br /&gt;
    r[? &amp;quot;NameOffset&amp;quot;] = buffer_read(buf, buffer_u16);&lt;br /&gt;
    r[? &amp;quot;Flags&amp;quot;] = buffer_read(buf, buffer_u16);&lt;br /&gt;
    &lt;br /&gt;
    // name all lumps&lt;br /&gt;
    if(r[? &amp;quot;NameOffset&amp;quot;] != 0) {&lt;br /&gt;
        last_name = 0;&lt;br /&gt;
        prev_ofs = buffer_tell(buf);&lt;br /&gt;
        &lt;br /&gt;
        // seek to the name table&lt;br /&gt;
        buffer_seek(buf, buffer_seek_start, Directory + r[? &amp;quot;NameOffset&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
        r[? &amp;quot;Name&amp;quot;] = ReadString(...); // read until 0x00 is encountered&lt;br /&gt;
        &lt;br /&gt;
        // go back to where we were before in reading the directory&lt;br /&gt;
        buffer_seek(buf, buffer_seek_start, prev_ofs);&lt;br /&gt;
    }&lt;br /&gt;
    else {  // if the lump has no name, treat it as being&lt;br /&gt;
            // named as an offset from the previous named lump&lt;br /&gt;
        last_name++;&lt;br /&gt;
        l = Records[z - last_name];&lt;br /&gt;
        r[? &amp;quot;Name&amp;quot;] = l[? &amp;quot;Name&amp;quot;] + &amp;quot;+&amp;quot; + string(last_name);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12884</id>
		<title>Shadowcaster</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12884"/>
		<updated>2026-08-06T14:39:13Z</updated>

		<summary type="html">&lt;p&gt;Diema: Update to also put DAT format spec in, acknowledge a difference between ravdata and cutscene DATs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shadowcaster&#039;&#039;&#039; is a first-person action RPG with a shapeshifting protagonist.  It was developed by [[Raven Software]] and published by [[Origin Systems]].&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
Some of these may only work if a specific version is used.&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://slade.mancubus.net SLADE]&lt;br /&gt;
| Platform = Windows/Mac&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Extract&lt;br /&gt;
| mus = Edit&lt;br /&gt;
| sfx = Edit&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://www.doomworld.com/forum/topic/155625-mapcaster-level-editor-for-shadowcaster/ MapCaster]&lt;br /&gt;
| Platform = Windows&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://github.com/darkhaven3/libby Libby]&lt;br /&gt;
| Platform = Windows, Linux&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[XMI Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Background music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[VOC Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = ravdata.dat&lt;br /&gt;
 | Format = [[DAT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Data archive&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dat&lt;br /&gt;
 | Format = [[Cutscene Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Cutscenes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lib&lt;br /&gt;
 | Format = [[LIB Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Data archive&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.map&lt;br /&gt;
 | Format = [[MAP Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level geometry&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ojt&lt;br /&gt;
 | Format = [[OJT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Static objects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.itm&lt;br /&gt;
 | Format = [[ITM Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Items (wands, potions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.crt&lt;br /&gt;
 | Format = [[CRT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monsters&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.arc&lt;br /&gt;
 | Format = [[ARC Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monster archetypes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.scr&lt;br /&gt;
 | Format = [[SCR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level scripts&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dor&lt;br /&gt;
 | Format = [[DOR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level doors&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = itemtype.nfo&lt;br /&gt;
 | Format = [[NFO Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Item definitions&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/43927-shadowcaster-modding/ RE discussion on the Doomworld forum]&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/51101-shadowcaster-modding-2-the-remoddening/ Further RE discussion on the Doomworld forum]&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/94899-shadowcaster-modding-3-disassembly/ Even more RE discussion on the Doomworld forum, with some disassembly, engine limits and map format investigation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Raven Software]]&lt;br /&gt;
[[Category:Origin Systems]]&lt;br /&gt;
[[Category:3D]]&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12883</id>
		<title>Shadowcaster</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12883"/>
		<updated>2026-08-06T14:29:05Z</updated>

		<summary type="html">&lt;p&gt;Diema: MapCaster has been updated to deal directly with LIB format archives.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shadowcaster&#039;&#039;&#039; is a first-person action RPG with a shapeshifting protagonist.  It was developed by [[Raven Software]] and published by [[Origin Systems]].&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
Some of these may only work if a specific version is used.&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://slade.mancubus.net SLADE]&lt;br /&gt;
| Platform = Windows/Mac&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Extract&lt;br /&gt;
| mus = Edit&lt;br /&gt;
| sfx = Edit&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://www.doomworld.com/forum/topic/155625-mapcaster-level-editor-for-shadowcaster/ MapCaster]&lt;br /&gt;
| Platform = Windows&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://github.com/darkhaven3/libby Libby]&lt;br /&gt;
| Platform = Windows, Linux&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[XMI Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Background music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[VOC Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lib&lt;br /&gt;
 | Format = [[LIB Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Data archive&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.map&lt;br /&gt;
 | Format = [[MAP Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level geometry&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ojt&lt;br /&gt;
 | Format = [[OJT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Static objects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.itm&lt;br /&gt;
 | Format = [[ITM Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Items (wands, potions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.crt&lt;br /&gt;
 | Format = [[CRT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monsters&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.arc&lt;br /&gt;
 | Format = [[ARC Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monster archetypes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.scr&lt;br /&gt;
 | Format = [[SCR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level scripts&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dor&lt;br /&gt;
 | Format = [[DOR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level doors&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = itemtype.nfo&lt;br /&gt;
 | Format = [[NFO Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Item definitions&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/43927-shadowcaster-modding/ RE discussion on the Doomworld forum]&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/51101-shadowcaster-modding-2-the-remoddening/ Further RE discussion on the Doomworld forum]&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/94899-shadowcaster-modding-3-disassembly/ Even more RE discussion on the Doomworld forum, with some disassembly, engine limits and map format investigation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Raven Software]]&lt;br /&gt;
[[Category:Origin Systems]]&lt;br /&gt;
[[Category:3D]]&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=OJT_Format_(Shadowcaster)&amp;diff=12882</id>
		<title>OJT Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=OJT_Format_(Shadowcaster)&amp;diff=12882"/>
		<updated>2026-08-06T14:27:18Z</updated>

		<summary type="html">&lt;p&gt;Diema: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
[[Shadowcaster]] OJT files describe a list of static objects present in a given level. These files are a linear list of 57-byte records with no header.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
uint32_t Tag;              // does not have to necessarily be unique.&lt;br /&gt;
uint32_t Ptr_Prev;         // typically if there is a previous OJT record before this one, this is set to sizeof(ojt_record) (57).&lt;br /&gt;
uint32_t Ptr_Next;         // same as above, but forwards in the file.&lt;br /&gt;
uint8_t  Collision;        // typically zero for a non-solid object, or 1 for a solid one.&lt;br /&gt;
uint8_t  Gravity;          // a bitfield describing the object&#039;s relationship to gravity.&lt;br /&gt;
                           // some known values: 0 = no gravity; 1 = hangs from ceiling; 3 = spawn on ceiling, subject to gravity.&lt;br /&gt;
char     DisplayName[20];  // not used by the game. a string that usually contains the name of the sprite used. seems to be an editor leftover?&lt;br /&gt;
uint32_t Pic;              // a literal lump number from RAVDATA.DAT. This is the graphic the object will use in the 3D view.&lt;br /&gt;
uint32_t Width;            // the object&#039;s width (or &amp;quot;radius&amp;quot; if you prefer), represented in frac-units (0-63 within a tile).&lt;br /&gt;
uint32_t Height;           // same as the above, but the object&#039;s height along Z+.&lt;br /&gt;
uint32_t Unknown;&lt;br /&gt;
uint8_t  TileX;&lt;br /&gt;
uint8_t  TileY;            // the object&#039;s coarse tile X/Y coordinates (0-31 are valid).&lt;br /&gt;
uint8_t  Sides;            // the number of sides the sprite has. for example: 0 = one-sided sprite, 8 = eight-sided sprite (like Doom).&lt;br /&gt;
uint16_t SubTileX;&lt;br /&gt;
uint16_t SubTileY;         // the object&#039;s sub-tile X/Y fractional values (0-63 are valid).&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reading an OJT file ==&lt;br /&gt;
&amp;lt;small&amp;gt;Adapted from MapCaster GML:&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
for(i = 0; i &amp;lt; NumOjtsInFile; i++) {&lt;br /&gt;
	ojt.Tag = buffer_read(ojt_file, buffer_u32);&lt;br /&gt;
	ojt.Ptr_Prev = buffer_read(ojt_file, buffer_u32);&lt;br /&gt;
	ojt.Ptr_Next = buffer_read(ojt_file, buffer_u32);&lt;br /&gt;
	ojt.Collision = buffer_read(ojt_file, buffer_u8);&lt;br /&gt;
	ojt.Gravity = buffer_read(ojt_file, buffer_u8)&lt;br /&gt;
	ojt.DisplayName = ReadString(20);&lt;br /&gt;
	ojt.Pic = buffer_read(ojt_file, buffer_u32);&lt;br /&gt;
	ojt.Width = buffer_read(ojt_file, buffer_u32);&lt;br /&gt;
	ojt.Height = buffer_read(ojt_file, buffer_u32);&lt;br /&gt;
	ojt.Unknown = buffer_read(ojt_file, buffer_u32);&lt;br /&gt;
	ojt.x = buffer_read(ojt_file, buffer_u8) * TILESIZE;  // TILESIZE = 64 in Shadowcaster&lt;br /&gt;
	ojt.y = buffer_read(ojt_file, buffer_u8) * TILESIZE;  // TILESIZE = 64 in Shadowcaster&lt;br /&gt;
	ojt.Sides = buffer_read(ojt_file, buffer_u8);&lt;br /&gt;
	ojt.x += buffer_read(ojt_file, buffer_u16);&lt;br /&gt;
	ojt.y += buffer_read(ojt_file, buffer_u16);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=LIB_Format_(Shadowcaster)&amp;diff=12881</id>
		<title>LIB Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=LIB_Format_(Shadowcaster)&amp;diff=12881"/>
		<updated>2026-08-06T13:23:17Z</updated>

		<summary type="html">&lt;p&gt;Diema: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
[[Shadowcaster]] .lib archives can be considered the &amp;quot;ancestor&amp;quot; of the Doom WAD format. They are mostly similar, realistically only differing in how you are expected to find the sub-file directory.&lt;br /&gt;
&lt;br /&gt;
At the high level, .lib archives consist of a data region, the directory region, and finally the number of records stored at the very end of the file.&lt;br /&gt;
&lt;br /&gt;
=== Data Region ===&lt;br /&gt;
&lt;br /&gt;
The data region is simply every file&#039;s contents, concatenated end-to-end. There can possibly be &amp;quot;hidden&amp;quot; sections; one file does not necessarily need to exactly start at the end of the previous, or itself end at the start of the next.&lt;br /&gt;
&lt;br /&gt;
In the case of .lib files, mostly level data and music are stored; graphics are stored in [[DAT Format (Shadowcaster)|DAT files]].&lt;br /&gt;
&lt;br /&gt;
=== Directory ===&lt;br /&gt;
&lt;br /&gt;
The directory immediately precedes the record count, and consists of a number of 21-byte entries with the following format:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
uint32_t Size;&lt;br /&gt;
uint32_t Offset;  // from beginning of file&lt;br /&gt;
char RecordName[13];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Record Count ===&lt;br /&gt;
&lt;br /&gt;
Determining how many records are stored in the directory is done by seeking to the end of the file and reading the final uint16_t found there.&lt;br /&gt;
&lt;br /&gt;
== Reading a lib file ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;Adapted from MapCaster GML:&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// first, we get the number of records and construct a pointer to the start of the directory&lt;br /&gt;
buffer_seek(Lib, buffer_seek_start, filesize - 2);&lt;br /&gt;
NumRecords = buffer_read(Lib, buffer_u16);&lt;br /&gt;
// offset to the start of the directory:&lt;br /&gt;
Directory = filesize - 2 - (NumRecords * 21);&lt;br /&gt;
&lt;br /&gt;
// seek to the start of the directory&lt;br /&gt;
buffer_seek(Lib, buffer_seek_start, Directory);&lt;br /&gt;
&lt;br /&gt;
// Read all entries until the end&lt;br /&gt;
for(i = 0; i &amp;lt; NumRecords; i++) {&lt;br /&gt;
    Records[i] = ds_map_create();&lt;br /&gt;
    r = Records[i];&lt;br /&gt;
    r[? &amp;quot;Size&amp;quot;] = buffer_read(Lib, buffer_u32);&lt;br /&gt;
    r[? &amp;quot;Offset&amp;quot;] = buffer_read(Lib, buffer_u32);&lt;br /&gt;
    &lt;br /&gt;
    // read the name string&lt;br /&gt;
    r[? &amp;quot;Name&amp;quot;] = ReadString(13);  // directory subfile names are always exactly 13 bytes and follow 8.3 DOS filename convention, and are null-terminated&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SCR_Format_(Shadowcaster)&amp;diff=12880</id>
		<title>SCR Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SCR_Format_(Shadowcaster)&amp;diff=12880"/>
		<updated>2026-07-25T04:35:17Z</updated>

		<summary type="html">&lt;p&gt;Diema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
[[Shadowcaster]] level scripts (*.SCR) control many special effects and level-flow modifications at runtime. Such effects include changing the level environment values (which sky is drawn if any, colored lighting, fog, and darkness), teleporting the player either to a different level (or within the same one), deleting and spawning static objects or items, locking or unlocking doors, and granting metaforms or experience points. These scripts are based on the concept of conditional lists -- that is, in order for an action to take place, a (series of) condition(s) must be satisfied.&lt;br /&gt;
&lt;br /&gt;
There is no header. Script code begins immediately at the start of the file. A single script block consists of a list of conditions followed immediately by a list of function calls, and finally, a terminator. A script may not begin with a function call; this is explicitly treated as invalid data by the game. Conditions always have the following form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;int16_t condition_id;&lt;br /&gt;
uint8_t evaluation_type;&lt;br /&gt;
uint32_t value;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a list of 100 hard-coded conditions the game executable recognizes, many of which are exclusively script-controlled and are not modified directly by the game. In most circumstances, &amp;lt;code&amp;gt;evaluation_type&amp;lt;/code&amp;gt; is set to &amp;lt;code&amp;gt;0x83&amp;lt;/code&amp;gt; to mean &amp;quot;equal to&amp;quot;; other values are not yet fully known. This is followed by an immediate value to compare against. Scripts contain no explicit flow control and rely entirely on these condition evaluations.&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;code&amp;gt;0000 83 05000000&amp;lt;/code&amp;gt; will be satisfied if condition #0 is equal to 5.&lt;br /&gt;
&lt;br /&gt;
A single script block may contain many such condition formulations. The function list is only executed if all such conditions are satisfied. The condition list is finished specifying conditions upon encountering a condition with its highest bit set (0x8000). These are function calls. The game contains a list of 41 hard-coded functions that level scripts may call by ID. A function call follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;int16_t function_id;&lt;br /&gt;
uint8_t numargs;&lt;br /&gt;
uint32_t args[...];&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;code&amp;gt;0F80 01 0D000000&amp;lt;/code&amp;gt; -- function call 15, one argument (0x0D). This plays song ID 13 immediately upon satisfying its preceding condition list.&lt;br /&gt;
&lt;br /&gt;
A function list is finished specifying calls when the game encounters a terminator byte outside of an argument list. A terminator can be 0xFF for single-fire scripts that are &amp;quot;deleted&amp;quot; after they are run, or 0x00 in some cases for repeatable effects. If no more condition/function lists proceed after this terminator byte, the script file is finished.&lt;br /&gt;
&lt;br /&gt;
== Creating a Condition List ==&lt;br /&gt;
&lt;br /&gt;
Condition lists are the first elements in a script, and are the most straightforward to produce, as they always consist of 7-byte records stored one after the other without separation.&lt;br /&gt;
&lt;br /&gt;
Condition lists can be thought of as assembling a single large &amp;quot;if&amp;quot; statement in C/C++-like languages. Once all conditions are satisfied, the functions are then executed.&lt;br /&gt;
&lt;br /&gt;
=== List of Known Conditions ===&lt;br /&gt;
==== Qvars (0x00 - 0x3A) ====&lt;br /&gt;
Quest variables (&amp;quot;qvars&amp;quot; for short to distinguish them from other hardcoded conditions) are not written by the game executable and can freely be used by the script system. They are preserved between levels and even script heap wipes. These only have special meanings based on what you assign to them in a script yourself.&lt;br /&gt;
&lt;br /&gt;
==== player_coarse_x (0x3C) ====&lt;br /&gt;
The X coordinate of the tile the player is currently standing in.&lt;br /&gt;
&lt;br /&gt;
==== player_coarse_y (0x3D) ====&lt;br /&gt;
The Y coordinate of the tile the player is currently standing in.&lt;br /&gt;
&lt;br /&gt;
==== levelid (0x3E) ====&lt;br /&gt;
The level number the player is currently exploring.&lt;br /&gt;
&lt;br /&gt;
==== held_item (0x3F) ====&lt;br /&gt;
The ID within [[NFO Format (Shadowcaster)|itemtype.nfo]] of the object the player is currently holding as their cursor.&lt;br /&gt;
&lt;br /&gt;
==== zeropage (0x40) ====&lt;br /&gt;
Whatever value happens to be in the first 4 bytes in DOS low memory.&lt;br /&gt;
&lt;br /&gt;
==== ceilingflag (0x43) ====&lt;br /&gt;
Whether the ceiling (5) is drawn on this level, or if sky is drawn instead (0).&lt;br /&gt;
&lt;br /&gt;
==== player_mana (0x45) ====&lt;br /&gt;
How much mana the player currently has.&lt;br /&gt;
&lt;br /&gt;
=== Evaluation Types ===&lt;br /&gt;
&lt;br /&gt;
The only properly known evaluation type is 0x83 for &amp;quot;equal to&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The immediate operand value is compared to the value held by the specified condition. If the two are equal, the evaluation passes.&lt;br /&gt;
&lt;br /&gt;
== Creating a Function List ==&lt;br /&gt;
Function lists immediately follow the condition list once you are finished specifying conditions. Please note, however, that *you* are responsible for supplying the correct number of arguments; the game will not sanity check your data (it is possible for example to call &amp;lt;code&amp;gt;SP_Teleport()&amp;lt;/code&amp;gt; with one argument when four are expected, leading to undefined behavior).&lt;br /&gt;
&lt;br /&gt;
All arguments are always uint32_t.&lt;br /&gt;
&lt;br /&gt;
=== List of Known Functions ===&lt;br /&gt;
==== SP_QvarAdd(which_qvar, operand) ====&lt;br /&gt;
Function call #0.&lt;br /&gt;
&amp;lt;code&amp;gt;qvar.value += operand&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SP_QvarSetAdd(which_qvar, base, operand) ====&lt;br /&gt;
Function call #1.&lt;br /&gt;
&amp;lt;code&amp;gt;qvar.value = base + operand&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SP_QvarSet(which_qvar, base) ====&lt;br /&gt;
Function call #2, #3.&lt;br /&gt;
&amp;lt;code&amp;gt;qvar.value = base&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SP_RemoveWall(x, y, ?) ====&lt;br /&gt;
Function call #4.&lt;br /&gt;
&lt;br /&gt;
Removes a north/west wall within the tile at x,y. The &amp;quot;?&amp;quot; operand has unclear meaning at this time.&lt;br /&gt;
&lt;br /&gt;
==== SP_Missile(tilex, tiley, direction, type) ====&lt;br /&gt;
Function call #5.&lt;br /&gt;
&lt;br /&gt;
Spawn a missile at tilex,tiley moving along direction. Direction goes counter-clockwise starting at 0=east in 90-degree increments. In other words, sane values are 0-3.&lt;br /&gt;
&lt;br /&gt;
==== SP_PlaySound(id) ====&lt;br /&gt;
Function call #6.&lt;br /&gt;
&lt;br /&gt;
Play a sound by its internal ID. Some useful values are &amp;lt;code&amp;gt;1 = stone02c.voc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 = chain01b.voc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5 = splat02b.voc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== SP_DeleteObj(tag) ====&lt;br /&gt;
Function call #7.&lt;br /&gt;
&lt;br /&gt;
Find one (or many) [[OJT Format (Shadowcaster)|OJT-format]] object(s) by their tag and delete all found objects from the game.&lt;br /&gt;
&lt;br /&gt;
==== SP_MoveObj(tag, destx, desty, ?) ====&lt;br /&gt;
Function call #8.&lt;br /&gt;
&lt;br /&gt;
Find one (or many) OJT-format object(s) by their tag and instantly move them to the center of the tile at destx,desty.&lt;br /&gt;
&lt;br /&gt;
==== SP_ChangeTile(tilex, tiley, surface, textureid) ====&lt;br /&gt;
Function call #9.&lt;br /&gt;
&lt;br /&gt;
Set the tile&#039;s geometry at tilex,tiley with textureid.&lt;br /&gt;
&lt;br /&gt;
Surface can be: &amp;lt;code&amp;gt; 0 = floor, 1 = ceiling, 2 = north_wall, 3 = west_wall&amp;lt;/code&amp;gt;. If a wall is specified as the surface type and &amp;lt;code&amp;gt;textureid == 0&amp;lt;/code&amp;gt;, that wall and its collision are removed.&lt;br /&gt;
&lt;br /&gt;
==== SP_Teleport(destx, desty, angle, level) ====&lt;br /&gt;
Function call #10.&lt;br /&gt;
&lt;br /&gt;
Fade out the screen using colormap grading; move the player to &amp;lt;code&amp;gt;destx, desty&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;levelid&amp;lt;/code&amp;gt; facing in direction &amp;lt;code&amp;gt;angle&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;angle&amp;lt;/code&amp;gt; ranges from 0-255, with 0 facing east and ascending values rotating counter-clockwise. North is 64, west is 128, and south is 192.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;levelid == 0&amp;lt;/code&amp;gt;, the player is teleported within the current level.&lt;br /&gt;
&lt;br /&gt;
==== SP_SetColorMap(id) ====&lt;br /&gt;
Function call #11.&lt;br /&gt;
&lt;br /&gt;
Immediately set the current rendering color shading table to internal-ID &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ITM_Format_(Shadowcaster)&amp;diff=12879</id>
		<title>ITM Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ITM_Format_(Shadowcaster)&amp;diff=12879"/>
		<updated>2026-07-25T03:47:16Z</updated>

		<summary type="html">&lt;p&gt;Diema: (The struct definition was originally copied from an ImHex pattern, I accidentally left two #includes at the top that aren&amp;#039;t important)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ITM files are found within SHADOW.LIB and contains a list of 42-byte records, each describing one item in the level. An &amp;quot;item&amp;quot; is distinguished from an &amp;quot;[[OJT Format (Shadowcaster)|object]]&amp;quot; in that items can be picked up and placed in the inventory, and typically have some effect when the player interacts with them (or uses them on scripted static objects in the level).&lt;br /&gt;
&lt;br /&gt;
The following structure describes any individual ITM record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int32_t tag;&lt;br /&gt;
    int32_t unknown1;&lt;br /&gt;
    int32_t unknown2;&lt;br /&gt;
    int32_t tilex;&lt;br /&gt;
    int32_t tiley;&lt;br /&gt;
    int32_t unknown3;&lt;br /&gt;
    int32_t itemtype;&lt;br /&gt;
    int32_t stacksize;&lt;br /&gt;
    int32_t charge;&lt;br /&gt;
    int16_t tilesubx;&lt;br /&gt;
    int16_t tilesuby;&lt;br /&gt;
    int16_t unknown4;&lt;br /&gt;
} item_t;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tag ===&lt;br /&gt;
An identifier that scripts can use to address this item. This identifier does not have to be unique.&lt;br /&gt;
&lt;br /&gt;
If the item is referenced in a [[SCR Format (Shadowcaster)|script]], then all items with the referenced tag will be acted upon (such as deleting a group of items at once).&lt;br /&gt;
&lt;br /&gt;
=== tilex, tiley ===&lt;br /&gt;
Defines the &amp;quot;integer&amp;quot; component of the item&#039;s coordinates, in terms of coarse tile coordinates (0-31). X+ is eastward, and Y+ is southward.&lt;br /&gt;
&lt;br /&gt;
=== itemtype ===&lt;br /&gt;
The record ID within [[NFO Format (Shadowcaster)|itemtype.nfo]] that specifies most of this item&#039;s properties, such as what spell to cast when a wand is used and what graphics to display.&lt;br /&gt;
&lt;br /&gt;
=== stacksize ===&lt;br /&gt;
The game technically supports &amp;quot;stacks&amp;quot; of items, but not very well.&lt;br /&gt;
&lt;br /&gt;
You can use this field to specify if this itm contains multiple of the same (for example, a stack of 5 healing potions). In effect, this acts like a multiplier for the &amp;quot;charge&amp;quot; property.&lt;br /&gt;
&lt;br /&gt;
=== charge ===&lt;br /&gt;
How much &amp;quot;mana&amp;quot; or &amp;quot;power&amp;quot; this item contains at spawn. This value is also treated as the maximum mana the item can hold when recharged in a mana pool.&lt;br /&gt;
&lt;br /&gt;
Note however that all effects that an item can use appear to have a fixed amount of mana they require, so it is possible to create &amp;quot;illegal&amp;quot; items that can never store enough mana to execute their effect (you will see &amp;quot;ITEM OUT OF POWER&amp;quot; in the message bar in-game).&lt;br /&gt;
&lt;br /&gt;
=== tilesubx, tilesuby ===&lt;br /&gt;
These form the &amp;quot;fractional&amp;quot; component of the item&#039;s spawn position. Valid values are 0-63, using the same coordinate system as coarse tilex/tiley. This means that storing 0 in these fields will spawn an item at the northwest most corner of its tile.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SCR_Format_(Shadowcaster)&amp;diff=12878</id>
		<title>SCR Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SCR_Format_(Shadowcaster)&amp;diff=12878"/>
		<updated>2026-07-25T03:45:42Z</updated>

		<summary type="html">&lt;p&gt;Diema: Added a note about terminator bytes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Shadowcaster]] level scripts (*.SCR) control many special effects and level-flow modifications at runtime. Such effects include changing the level environment values (which sky is drawn if any, colored lighting, fog, and darkness), teleporting the player either to a different level (or within the same one), deleting and spawning static objects or items, locking or unlocking doors, and granting metaforms or experience points. These scripts are based on the concept of conditional lists -- that is, in order for an action to take place, a (series of) condition(s) must be satisfied.&lt;br /&gt;
&lt;br /&gt;
There is no header. Script code begins immediately at the start of the file. A single script block consists of a list of conditions followed immediately by a list of function calls, and finally, a terminator. A script may not begin with a function call; this is explicitly treated as invalid data by the game. Conditions always have the following form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int16_t condition_id;&lt;br /&gt;
&lt;br /&gt;
uint8_t evaluation_type;&lt;br /&gt;
&lt;br /&gt;
uint32_t value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a list of 100 hard-coded conditions the game executable recognizes, many of which are exclusively script-controlled and are not modified directly by the game. In most circumstances, &amp;lt;code&amp;gt;evaluation_type&amp;lt;/code&amp;gt; is set to &amp;lt;code&amp;gt;0x83&amp;lt;/code&amp;gt; to mean &amp;quot;equal to&amp;quot;; other values are not yet fully known. This is followed by an immediate value to compare against. Scripts contain no explicit flow control and rely entirely on these condition evaluations.&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;code&amp;gt;0000 83 05000000&amp;lt;/code&amp;gt; will be satisfied if condition #0 is equal to 5.&lt;br /&gt;
&lt;br /&gt;
A single script block may contain many such condition formulations. The function list is only executed if all such conditions are satisfied. The condition list is finished specifying conditions upon encountering a condition with its highest bit set (0x8000). These are function calls. The game contains a list of 41 hard-coded functions that level scripts may call by ID. A function call follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int16_t function_id;&lt;br /&gt;
&lt;br /&gt;
uint8_t numargs;&lt;br /&gt;
&lt;br /&gt;
uint32_t args[...];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;code&amp;gt;0F80 01 0D000000&amp;lt;/code&amp;gt; -- function call 15, one argument (0x0D). This plays song ID 13 immediately upon satisfying its preceding condition list.&lt;br /&gt;
&lt;br /&gt;
A function list is finished specifying calls when the game encounters a terminator byte outside of an argument list. A terminator can be 0xFF for single-fire scripts that are &amp;quot;deleted&amp;quot; after they are run, or 0x00 in some cases for repeatable effects. If no more condition/function lists proceed after this terminator byte, the script file is finished.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ITM_Format_(Shadowcaster)&amp;diff=12877</id>
		<title>ITM Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ITM_Format_(Shadowcaster)&amp;diff=12877"/>
		<updated>2026-07-25T03:44:21Z</updated>

		<summary type="html">&lt;p&gt;Diema: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ITM files are found within SHADOW.LIB and contains a list of 42-byte records, each describing one item in the level. An &amp;quot;item&amp;quot; is distinguished from an &amp;quot;[[OJT Format (Shadowcaster)|object]]&amp;quot; in that items can be picked up and placed in the inventory, and typically have some effect when the player interacts with them (or uses them on scripted static objects in the level).&lt;br /&gt;
&lt;br /&gt;
The following structure describes any individual ITM record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;std/mem.pat&amp;gt;&lt;br /&gt;
#include &amp;lt;std/io.pat&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
    int32_t tag;&lt;br /&gt;
    int32_t unknown1;&lt;br /&gt;
    int32_t unknown2;&lt;br /&gt;
    int32_t tilex;&lt;br /&gt;
    int32_t tiley;&lt;br /&gt;
    int32_t unknown3;&lt;br /&gt;
    int32_t itemtype;&lt;br /&gt;
    int32_t stacksize;&lt;br /&gt;
    int32_t charge;&lt;br /&gt;
    int16_t tilesubx;&lt;br /&gt;
    int16_t tilesuby;&lt;br /&gt;
    int16_t unknown4;&lt;br /&gt;
} item_t;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tag ===&lt;br /&gt;
An identifier that scripts can use to address this item. This identifier does not have to be unique.&lt;br /&gt;
&lt;br /&gt;
If the item is referenced in a [[SCR Format (Shadowcaster)|script]], then all items with the referenced tag will be acted upon (such as deleting a group of items at once).&lt;br /&gt;
&lt;br /&gt;
=== tilex, tiley ===&lt;br /&gt;
Defines the &amp;quot;integer&amp;quot; component of the item&#039;s coordinates, in terms of coarse tile coordinates (0-31). X+ is eastward, and Y+ is southward.&lt;br /&gt;
&lt;br /&gt;
=== itemtype ===&lt;br /&gt;
The record ID within [[NFO Format (Shadowcaster)|itemtype.nfo]] that specifies most of this item&#039;s properties, such as what spell to cast when a wand is used and what graphics to display.&lt;br /&gt;
&lt;br /&gt;
=== stacksize ===&lt;br /&gt;
The game technically supports &amp;quot;stacks&amp;quot; of items, but not very well.&lt;br /&gt;
&lt;br /&gt;
You can use this field to specify if this itm contains multiple of the same (for example, a stack of 5 healing potions). In effect, this acts like a multiplier for the &amp;quot;charge&amp;quot; property.&lt;br /&gt;
&lt;br /&gt;
=== charge ===&lt;br /&gt;
How much &amp;quot;mana&amp;quot; or &amp;quot;power&amp;quot; this item contains at spawn. This value is also treated as the maximum mana the item can hold when recharged in a mana pool.&lt;br /&gt;
&lt;br /&gt;
Note however that all effects that an item can use appear to have a fixed amount of mana they require, so it is possible to create &amp;quot;illegal&amp;quot; items that can never store enough mana to execute their effect (you will see &amp;quot;ITEM OUT OF POWER&amp;quot; in the message bar in-game).&lt;br /&gt;
&lt;br /&gt;
=== tilesubx, tilesuby ===&lt;br /&gt;
These form the &amp;quot;fractional&amp;quot; component of the item&#039;s spawn position. Valid values are 0-63, using the same coordinate system as coarse tilex/tiley. This means that storing 0 in these fields will spawn an item at the northwest most corner of its tile.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SCR_Format_(Shadowcaster)&amp;diff=12876</id>
		<title>SCR Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SCR_Format_(Shadowcaster)&amp;diff=12876"/>
		<updated>2026-07-24T04:13:56Z</updated>

		<summary type="html">&lt;p&gt;Diema: Initial draft -- TODO: properly format known conditions and function call IDs; provide a complete, simple example script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Shadowcaster]] level scripts (*.SCR) control many special effects and level-flow modifications at runtime. Such effects include changing the level environment values (which sky is drawn if any, colored lighting, fog, and darkness), teleporting the player either to a different level (or within the same one), deleting and spawning static objects or items, locking or unlocking doors, and granting metaforms or experience points. These scripts are based on the concept of conditional lists -- that is, in order for an action to take place, a (series of) condition(s) must be satisfied.&lt;br /&gt;
&lt;br /&gt;
There is no header. Script code begins immediately at the start of the file. A single script block consists of a list of conditions followed immediately by a list of function calls, and finally, a terminator. A script may not begin with a function call; this is explicitly treated as invalid data by the game. Conditions always have the following form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int16_t condition_id;&lt;br /&gt;
&lt;br /&gt;
uint8_t evaluation_type;&lt;br /&gt;
&lt;br /&gt;
uint32_t value;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is a list of 100 hard-coded conditions the game executable recognizes, many of which are exclusively script-controlled and are not modified directly by the game. In most circumstances, &amp;lt;code&amp;gt;evaluation_type&amp;lt;/code&amp;gt; is set to &amp;lt;code&amp;gt;0x83&amp;lt;/code&amp;gt; to mean &amp;quot;equal to&amp;quot;; other values are not yet fully known. This is followed by an immediate value to compare against. Scripts contain no explicit flow control and rely entirely on these condition evaluations.&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;code&amp;gt;0000 83 05000000&amp;lt;/code&amp;gt; will be satisfied if condition #0 is equal to 5.&lt;br /&gt;
&lt;br /&gt;
A single script block may contain many such condition formulations. The function list is only executed if all such conditions are satisfied. The condition list is finished specifying conditions upon encountering a condition with its highest bit set (0x8000). These are function calls. The game contains a list of 41 hard-coded functions that level scripts may call by ID. A function call follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int16_t function_id;&lt;br /&gt;
&lt;br /&gt;
uint8_t numargs;&lt;br /&gt;
&lt;br /&gt;
uint32_t args[...];&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;code&amp;gt;0F80 01 0D000000&amp;lt;/code&amp;gt; -- function call 15, one argument (0x0D). This plays song ID 13 immediately upon satisfying its preceding condition list.&lt;br /&gt;
&lt;br /&gt;
A function list is finished specifying calls when the game encounters a 0xFF terminator byte outside of an argument list. If no more condition/function lists proceed after this terminator byte, the script file is finished.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Mod-Shadowcaster.png&amp;diff=12875</id>
		<title>File:Mod-Shadowcaster.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Mod-Shadowcaster.png&amp;diff=12875"/>
		<updated>2026-07-24T03:46:17Z</updated>

		<summary type="html">&lt;p&gt;Diema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MAP_Format_(Shadowcaster)&amp;diff=12874</id>
		<title>MAP Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MAP_Format_(Shadowcaster)&amp;diff=12874"/>
		<updated>2026-07-24T03:42:10Z</updated>

		<summary type="html">&lt;p&gt;Diema: (to conform witih the trend set that formats like Rise of the Triad&amp;#039;s RTL format is &amp;quot;2D tile-based&amp;quot;, therefore, so must this be.)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 9&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Shadowcaster}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Shadowcaster]] contains several different file formats used for storing level data. MAP files contain the tile geometry. They are conceptually similar to [[Wolfenstein 3D]] levels, where like data is stored sequentially and different kinds of data are clearly separated into &amp;quot;layers&amp;quot;. However, there is an expanded feature-set.&lt;br /&gt;
&lt;br /&gt;
MAP files all follow the same format and are the same size:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
uint16_t floorpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t floorheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint16_t ceilingpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t ceilingheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint16_t northwallpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t northwallheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint16_t westwallpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t westwallheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t unused[32*32];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any &amp;lt;code&amp;gt;*wallpic&amp;lt;/code&amp;gt; element being set to zero will not be rendered and will not have collision. Floors and ceilings may also be set to zero, but result in rendering garbage. Height values are expressed as growing upwards relative to the player&#039;s perspective (so Z=64 is visibly closer to the floor than Z=128 in first person).&lt;br /&gt;
&lt;br /&gt;
For floor/ceiling elements, the height value describes that of the northwestern-most vertex of that tile; the surrounding tiles (north, northwest, and west) will slope to meet that point. However, this feature is unfinished and results in a Doom-like texture bleeding effect that is usually undesirable.&lt;br /&gt;
&lt;br /&gt;
For wall elements, textures &amp;quot;grow upwards&amp;quot; in the Z+ direction, and the height value in the MAP determines the starting/bottom Z of the texture. Walls will render upwards until either there is no more texture to draw (the texture does not tile), or a ceiling is encountered. The inverse is also true if the texture&#039;s start height is set below the floor.&lt;br /&gt;
&lt;br /&gt;
The game uses a 1D occlusion array to determine wall visibility and clipping, so if there is a gap above or below the wall because of the way its height value is set, no geometry will be rendered behind it (you cannot see into other parts of the level through such a gap). If the level&#039;s environment is set to permit a sky, then sky will be drawn; otherwise, it will be filled with black.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12873</id>
		<title>Shadowcaster</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12873"/>
		<updated>2026-07-24T03:39:42Z</updated>

		<summary type="html">&lt;p&gt;Diema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shadowcaster&#039;&#039;&#039; is a first-person action RPG with a shapeshifting protagonist.  It was developed by [[Raven Software]] and published by [[Origin Systems]].&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
Some of these may only work if a specific version is used.&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://slade.mancubus.net SLADE]&lt;br /&gt;
| Platform = Windows/Mac&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Extract&lt;br /&gt;
| mus = Edit&lt;br /&gt;
| sfx = Edit&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://www.doomworld.com/forum/topic/155625-mapcaster-level-editor-for-shadowcaster/ MapCaster]&lt;br /&gt;
| Platform = Windows&lt;br /&gt;
| grp = No&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://github.com/darkhaven3/libby Libby]&lt;br /&gt;
| Platform = Windows, Linux&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[XMI Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Background music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[VOC Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lib&lt;br /&gt;
 | Format = [[LIB Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Data archive&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.map&lt;br /&gt;
 | Format = [[MAP Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level geometry&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ojt&lt;br /&gt;
 | Format = [[OJT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Static objects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.itm&lt;br /&gt;
 | Format = [[ITM Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Items (wands, potions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.crt&lt;br /&gt;
 | Format = [[CRT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monsters&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.arc&lt;br /&gt;
 | Format = [[ARC Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monster archetypes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.scr&lt;br /&gt;
 | Format = [[SCR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level scripts&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dor&lt;br /&gt;
 | Format = [[DOR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level doors&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = itemtype.nfo&lt;br /&gt;
 | Format = [[NFO Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Item definitions&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/43927-shadowcaster-modding/ RE discussion on the Doomworld forum]&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/51101-shadowcaster-modding-2-the-remoddening/ Further RE discussion on the Doomworld forum]&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/94899-shadowcaster-modding-3-disassembly/ Even more RE discussion on the Doomworld forum, with some disassembly, engine limits and map format investigation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Raven Software]]&lt;br /&gt;
[[Category:Origin Systems]]&lt;br /&gt;
[[Category:3D]]&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:MAP_Format_(Shadowcaster).png&amp;diff=12872</id>
		<title>File:MAP Format (Shadowcaster).png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:MAP_Format_(Shadowcaster).png&amp;diff=12872"/>
		<updated>2026-07-24T03:36:27Z</updated>

		<summary type="html">&lt;p&gt;Diema: A custom Shadowcaster-format MAP built with MapCaster for demonstration purposes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
A custom Shadowcaster-format MAP built with MapCaster for demonstration purposes.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MAP_Format_(Shadowcaster)&amp;diff=12871</id>
		<title>MAP Format (Shadowcaster)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MAP_Format_(Shadowcaster)&amp;diff=12871"/>
		<updated>2026-07-24T03:35:26Z</updated>

		<summary type="html">&lt;p&gt;Diema: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 9&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Shadowcaster}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Shadowcaster]] contains several different file formats used for storing level data. MAP files contain the tile geometry. They are conceptually similar to [[Wolfenstein 3D]] levels, where like data is stored sequentially and different kinds of data are clearly separated into &amp;quot;layers&amp;quot;. However, there is an expanded feature-set.&lt;br /&gt;
&lt;br /&gt;
MAP files all follow the same format and are the same size:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
uint16_t floorpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t floorheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint16_t ceilingpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t ceilingheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint16_t northwallpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t northwallheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint16_t westwallpic[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t westwallheight[32*32];&lt;br /&gt;
&lt;br /&gt;
uint8_t unused[32*32];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any &amp;lt;code&amp;gt;*wallpic&amp;lt;/code&amp;gt; element being set to zero will not be rendered and will not have collision. Floors and ceilings may also be set to zero, but result in rendering garbage. Height values are expressed as growing upwards relative to the player&#039;s perspective (so Z=64 is visibly closer to the floor than Z=128 in first person).&lt;br /&gt;
&lt;br /&gt;
For floor/ceiling elements, the height value describes that of the northwestern-most vertex of that tile; the surrounding tiles (north, northwest, and west) will slope to meet that point. However, this feature is unfinished and results in a Doom-like texture bleeding effect that is usually undesirable.&lt;br /&gt;
&lt;br /&gt;
For wall elements, textures &amp;quot;grow upwards&amp;quot; in the Z+ direction, and the height value in the MAP determines the starting/bottom Z of the texture. Walls will render upwards until either there is no more texture to draw (the texture does not tile), or a ceiling is encountered. The inverse is also true if the texture&#039;s start height is set below the floor.&lt;br /&gt;
&lt;br /&gt;
The game uses a 1D occlusion array to determine wall visibility and clipping, so if there is a gap above or below the wall because of the way its height value is set, no geometry will be rendered behind it (you cannot see into other parts of the level through such a gap). If the level&#039;s environment is set to permit a sky, then sky will be drawn; otherwise, it will be filled with black.&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12870</id>
		<title>Shadowcaster</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12870"/>
		<updated>2026-07-24T03:24:09Z</updated>

		<summary type="html">&lt;p&gt;Diema: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shadowcaster&#039;&#039;&#039; is a first-person action RPG with a shapeshifting protagonist.  It was developed by [[Raven Software]] and published by [[Origin Systems]].&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
Some of these may only work if a specific version is used.&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://slade.mancubus.net SLADE]&lt;br /&gt;
| Platform = Windows/Mac&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Extract&lt;br /&gt;
| mus = Edit&lt;br /&gt;
| sfx = Edit&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://www.doomworld.com/forum/topic/155625-mapcaster-level-editor-for-shadowcaster/ MapCaster]&lt;br /&gt;
| Platform = Windows&lt;br /&gt;
| grp = No&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://github.com/darkhaven3/libby Libby]&lt;br /&gt;
| Platform = Windows, Linux&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[XMI Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Background music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[VOC Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lib&lt;br /&gt;
 | Format = [[LIB Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Data archive&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.map&lt;br /&gt;
 | Format = [[MAP Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level geometry&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ojt&lt;br /&gt;
 | Format = [[OJT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Static objects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.itm&lt;br /&gt;
 | Format = [[ITM Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Items (wands, potions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.crt&lt;br /&gt;
 | Format = [[CRT Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monsters&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.arc&lt;br /&gt;
 | Format = [[ARC Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monster archetypes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.scr&lt;br /&gt;
 | Format = [[SCR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level scripts&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dor&lt;br /&gt;
 | Format = [[DOR Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level doors&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = itemtype.nfo&lt;br /&gt;
 | Format = [[NFO Format (Shadowcaster)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Item definitions&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/43927-shadowcaster-modding/ RE discussion on the Doomworld forum]&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/51101-shadowcaster-modding-2-the-remoddening/ Further RE discussion on the Doomworld forum]&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/94899-shadowcaster-modding-3-disassembly/ Even more RE discussion on the Doomworld forum, with some disassembly, engine limits and map format investigation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Raven Software]]&lt;br /&gt;
[[Category:Origin Systems]]&lt;br /&gt;
[[Category:3D]]&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12869</id>
		<title>Shadowcaster</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Shadowcaster&amp;diff=12869"/>
		<updated>2026-07-24T03:13:14Z</updated>

		<summary type="html">&lt;p&gt;Diema: Start adding stuff known about the game data; further format pages to come&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shadowcaster&#039;&#039;&#039; is a first-person action RPG with a shapeshifting protagonist.  It was developed by [[Raven Software]] and published by [[Origin Systems]].&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
Some of these may only work if a specific version is used.&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://slade.mancubus.net SLADE]&lt;br /&gt;
| Platform = Windows/Mac&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Extract&lt;br /&gt;
| mus = Edit&lt;br /&gt;
| sfx = Edit&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://www.doomworld.com/forum/topic/155625-mapcaster-level-editor-for-shadowcaster/ MapCaster]&lt;br /&gt;
| Platform = Windows&lt;br /&gt;
| grp = No&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://github.com/darkhaven3/libby Libby]&lt;br /&gt;
| Platform = Windows, Linux&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[XMI Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Background music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = N/A&lt;br /&gt;
 | Format = [[VOC Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lib&lt;br /&gt;
 | Format = [[Shadowcaster LIB Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Data archive&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.map&lt;br /&gt;
 | Format = [[Shadowcaster MAP Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level geometry&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ojt&lt;br /&gt;
 | Format = [[Shadowcaster OJT Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Static objects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.itm&lt;br /&gt;
 | Format = [[Shadowcaster ITM Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Items (wands, potions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.crt&lt;br /&gt;
 | Format = [[Shadowcaster CRT Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monsters&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.arc&lt;br /&gt;
 | Format = [[Shadowcaster ARC Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Monster archetypes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.scr&lt;br /&gt;
 | Format = [[Shadowcaster SCR Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level scripts&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dor&lt;br /&gt;
 | Format = [[Shadowcaster DOR Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level doors&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = itemtype.nfo&lt;br /&gt;
 | Format = [[Shadowcaster NFO Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Item definitions&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/43927-shadowcaster-modding/ RE discussion on the Doomworld forum]&lt;br /&gt;
* [http://www.doomworld.com/vb/everything-else/51101-shadowcaster-modding-2-the-remoddening/ Further RE discussion on the Doomworld forum]&lt;br /&gt;
* [https://www.doomworld.com/forum/topic/94899-shadowcaster-modding-3-disassembly/ Even more RE discussion on the Doomworld forum, with some disassembly, engine limits and map format investigation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Raven Software]]&lt;br /&gt;
[[Category:Origin Systems]]&lt;br /&gt;
[[Category:3D]]&lt;/div&gt;</summary>
		<author><name>Diema</name></author>
	</entry>
</feed>