<?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=DragonSphere</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=DragonSphere"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/DragonSphere"/>
	<updated>2026-05-14T02:49:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=11357</id>
		<title>Battle Isle / History Line map format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=11357"/>
		<updated>2023-11-28T13:40:39Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D cell-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 24&amp;amp;times;24&lt;br /&gt;
 | Cell viewport = 10&amp;amp;times;8 fields&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 (and Battle Isle) battlefields are based on 24x24 pixel hexagon fields. The game uses split-screen, so both players only see a 10x8 hex field section, which is scrolled across the map.&lt;br /&gt;
The maps are stored in the form of *.fin and *.shp files in the MAP subdirectory of the game. The *.fin files contain the information about the individual hex fields (terrain and units), the *.shp files about the contents of buildings (resources, contained units, belonging to a side, etc.). &lt;br /&gt;
&lt;br /&gt;
== *.shp File Format ==&lt;br /&gt;
&lt;br /&gt;
The first 51 bytes in the *.shp files represent one of the 51 different military units on each side and indicate whether they are available on the map. If a byte is set to 0, the respective unit can be built in factories, if it is set to 1, the unit is not available.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Unit names of the US version of the game should still be supplemented}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number/Offset !! Unit in History Line 1914-1918&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Spähpanzer&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || A7V&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Gotha &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Zeppelin Staaken&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Junkers J4-10&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Fokker E I.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Fokker E III.&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Albatros&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Fokker DR I&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Fokker D VII&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || Leichte Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Mittlere Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Schwere Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || Bunker&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || Mobile Flak&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Stationäre Flak&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Depoteinheit&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || Elite Infanterie&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || Infanterie&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || Panzerabwehr&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || Pioniere&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Kavallerie&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || Transportwagen&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Ballon&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Schienengeschütz&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Panzerzug&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Truppentransport&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || Patrouillenboot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || Torpedoboot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || U-Boot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || U-Boot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || Transportschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Zerstörer&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || Zerstörer&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || Schlachtschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || Schlachtschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || Voisin&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || Handley&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || DH4&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || Morane&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || DH2&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || Nieuport&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || Spad VII&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || SE5A&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || Spad XIII&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || Sopwith Camel&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || Charron&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || Renault&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || Mark I.&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || St. Chammond&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || Mark IV.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is followed the total number of buildings on the map stored in the next byte. Then follows the data for each building in records of 12 byte size.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || NumBuildings || Number of buildings on the map / records that follow in the file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][NumBuildings][12] || Buildings || Building info (see below)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data structure of the building is as follows. Transport units, such as the transport wagon or troop transport train, are treated as buildings.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Owner || To which side the building belongs (0 = German; 1 = French, 2 = Neutral)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Type || Type of building (0=HQ; 1 = Factory; 2 = Depot; 3 = Transport unit)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Index || xth unit/building of this type&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Resources || How many resources does this building generate per turn&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unknown || {{TODO|The purpose of this byte is not yet known}}&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT8]][7] || Units || Units inside the building/transport unit&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the building records is determined by the position of the building on the map. The map is interpreted by the game row by row from left to right and from top to bottom. Whenever a field with a building entrance is encountered, the next data record is read from the *.shp file. Transport units are treated by the game in the same way as buildings (type 3). However, no empty transport units are stored in the SHP files, but empty buildings are. &lt;br /&gt;
&lt;br /&gt;
== *.fin File Format ==&lt;br /&gt;
The *.fin files start with two word in Motorola byte order (big-endian), indicating the size of the map in hex fields.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max X || Width of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max Y || Height of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Two bytes follow for each hex field of the map. The first byte contains the number of the terrain graphic, the second one the number of a unit standing on the field. If there is no unit on the field, the value of the second byte is 0xFF.&lt;br /&gt;
The map is stored in rows. At the end of each line, History Line 1914-1918 stores an additional field with the values 0xAF and 0xFF and at the end follows a complete additional row with these values, but they are not displayed in the game.&lt;br /&gt;
Except for this additional row/column, the maps in the game Battle Isle are stored identically.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Ground || Terrain of this hex field&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unit || Military unit on this hex field&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The unit number is slightly different from those in the *.shp files. The order is the same, but here each unit has two numbers, depending on which side it belongs to. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number !! Unit in History Line 1914-1918&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || German Spähpanzer &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || French Spähpanzer &lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || German A7V &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || French A7V &lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The terrain graphics have the following numbers:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number !! Terrain description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || plains&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || headquarters (north entrance) german&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || headquarters (north entrance) french&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || headquarters (center)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || headquarters (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || headquarters (northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || headquarters (southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || headquarters (northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || headquarters (southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || factory (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || factory (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || factory (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || factory (east entrance) neutral&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || factory (east entrance) german&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || factory (east entrance) french&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || depot (north entrance) neutral&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || depot (north entrance) german&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || depot (north entrance) french&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || depot (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || depot (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || depot (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || unfinished depot (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || unfinished depot (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || unfinished depot (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || unfinished depot (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || shallow water&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || shallow water (coast southeast+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || shallow water (coast northwest+north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || shallow water (coast southwest+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || shallow water (coast north+northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || shallow water (coast southwest+south+southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || shallow water (coast northwest+north+northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || shallow water (coast north+northwest+southwest+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || shallow water (coast north+northeast+southeast+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || lake&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || harbor (south faces land)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || river (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || river (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || river (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || river (north-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || river (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || river (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || river (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || river (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || river (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || river (northwest-northeast-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || river (north-southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || water&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || deep water&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || house (with tree)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || house (with well)&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || hangars&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || harbor building (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || harbor building (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || light forest (3 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || deep forest (5 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || deep forest (9 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || deep forest (7 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || river (southwest-northeast) with tiny bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || river (north-south) with tiny bridge (east-west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || small cliffs (shallow water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || cliffs (shallow water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || cliff (shallow water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || rugged terrain with barbed wire&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || small mountain&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || hill (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || hill (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || big hill (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || big hill (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || big hill (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || big hill (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || big mountain (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || big mountain (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || big mountain (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || big mountain (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || rocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || rocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || rock&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || plains (tiny rocks/rubble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || plains (small rocks/rubble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || tiny hills&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || slightly rugged terrain&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || rugged terrain&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || rugged terrain with craters&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || rugged terrain with crater&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || rail (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || rail (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || rail (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || rail (southwest-north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || rail (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || rail (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || rail (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || rail (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || rail (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || rail junction (north-south-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || rail junction (south-north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || rail junction (north-south-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || rail (north-south) crossing river (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || rail (north-south) crossing river (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || rail (southwest-northeast) crossing path (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || rail (north-south) crossing path (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || rail (north-south) crossing road (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || rail (northwest-southeast) crossing road (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || rail (southwest-northeast) crossing road (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || rail (north-south) crossing road (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || airfield (north-south) north&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || airfield (north-south) south&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || coast (south-southwest-northwest-north) with road/bridge (nrthwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || road bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || coast (north-northeast-southeast-south) with road/bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E || road bridge (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6F || coast (north-northeast-southeast-south) with road/bridge (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || coast (south-southwest-northwest-north) with road/bridge (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || coast (northwest-north-northeast) with road/bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || road bridge (north south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || coast (southwest-south-southeast) with road/bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || river (northwest-southeast) with road bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || river (southwest-northeast) with road bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || river (north-south) with road bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || docks (west faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || harbor building (south with road)&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || river (southwest-northeast) with path bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || river (northwest-southeast) with path bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || docks with crane (east faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || docks with crane (west faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || docks (east faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || jetty&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || road (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || road (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || road (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || road (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || road (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || road (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || road (southwest-north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || road (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x87 || road (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || road junction (southwest-northeast-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x89 || road junction (northwest-southeast-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || road junction (southwest-northeast-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B || road junction (northwest-southeast-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C || road junction (north-south-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D || road junction (north-south-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || road junction (north-south-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || road junction (north-south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || road crossing (northwest-outheast-southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x91 || road crossing (northwest-northeast-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || path (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x93 || path (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || path (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x95 || path (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x96 || path (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x97 || path (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || path (southwest-north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x99 || path (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || path (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B || path junction (north-south-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || path junction (north-south-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || path junction (north-south-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || path junction (north-south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F || path junction (southwest-northeast-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || path junction (northwest-southeast-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || path junction (southwest-northeast-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA2 || path junction (northwest-southeast-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || path crossing (northwest-southeast-southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || path junction (northwest-northeast-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || trench with barbed wire (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA6 || trench with barbed wire (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA7 || trench (big hole)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || trench junction (northwest-southeast-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || trench junction (southwest-northeast-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || trench (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAB || trench (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || trench (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAD || trench (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAE || non-visible end tile (stop sign)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10920</id>
		<title>TPWM compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10920"/>
		<updated>2023-03-24T10:21:54Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TPWM stands for Turbo Packer by Wolfgang Meyerle. This relatively unknown compression tool was released for the Amiga and Atari ST in the late 1980s and was used by BlueByte (Ubisoft) to compress the data files of many of their games from the early 1990s.&lt;br /&gt;
Files compressed with this packer can be easily recognized by an ID string &amp;quot;TPWM&amp;quot; directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int            bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = Input_Buffer[input_offset];&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
         Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
         output_offset++;&lt;br /&gt;
         if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source: ===&lt;br /&gt;
Article by the author of Turbo Packer in the German Atari ST Magazin TOS, issue 10/1990.&lt;br /&gt;
[https://www.stcarchiv.de/tos1990/10/turbo-packer-samt-quelltext]&lt;br /&gt;
&lt;br /&gt;
[[Category:Compression algorithms]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10919</id>
		<title>TPWM compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10919"/>
		<updated>2023-03-24T09:50:47Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TPWM stands for Turbo Packer by Wolfgang Meyerle. This relatively unknown compression tool was released for the Amiga and Atari ST in the late 1980s and was used by BlueByte (Ubisoft) to compress the data files of many of their games from the early 1990s.&lt;br /&gt;
Files compressed with this packer can be easily recognized by an ID string &amp;quot;TPWM&amp;quot; directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int            bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = Input_Buffer[input_offset];&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
         Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
         output_offset++;&lt;br /&gt;
         if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source: ===&lt;br /&gt;
Article by the author of Turbo Packer in the German Atari ST Magazin TOS, issue 10/1990.&lt;br /&gt;
[https://www.stcarchiv.de/tos1990/10/turbo-packer-samt-quelltext]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10918</id>
		<title>TPWM compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10918"/>
		<updated>2023-03-24T09:49:41Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TPWM stands for Turbo Packer by Wolfgang Meyerle. This relatively unknown compression tool was released for the Amiga and Atari ST in the late 1980s and was used by BlueByte (Ubisoft) to compress the data files of many of their games from the early 1990s.&lt;br /&gt;
Files compressed with this packer can be easily recognized by an ID string &amp;quot;TPWM&amp;quot; directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int            bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
         Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
         output_offset++;&lt;br /&gt;
         if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source: ===&lt;br /&gt;
Article by the author of Turbo Packer in the German Atari ST Magazin TOS, issue 10/1990.&lt;br /&gt;
[https://www.stcarchiv.de/tos1990/10/turbo-packer-samt-quelltext]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10917</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10917"/>
		<updated>2023-03-24T09:34:30Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle ([[TPWM compression]]) and must be unpacked before the file contents can be modified. Fortunately, the game checks whether the files are compressed or not and accepts the data files uncompressed as well. Therefore, modified files do not have to be compressed again.&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10916</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10916"/>
		<updated>2023-03-24T09:34:05Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle ([[TPWM compression]]) and must be unpacked before the file contents can be modified. Fortunately, the game checks whether the files are compressed or not and accepts the data files uncompressed as well. Therefore, modified files do not have to be compressed again.&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10915</id>
		<title>TPWM compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=TPWM_compression&amp;diff=10915"/>
		<updated>2023-03-24T09:32:59Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: Created page with &amp;quot;TPWM stands for Turbo Packer by Wolfgang Meyerle. This relatively unknown compression tool was released for the Amiga and Atari ST in the late 1980s and was used by BlueByte (...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TPWM stands for Turbo Packer by Wolfgang Meyerle. This relatively unknown compression tool was released for the Amiga and Atari ST in the late 1980s and was used by BlueByte (Ubisoft) to compress the data files of many of their games from the early 1990s.&lt;br /&gt;
Files compressed with this packer can be easily recognized by an ID string &amp;quot;TPWM&amp;quot; directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int            bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
         Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
         output_offset++;&lt;br /&gt;
         if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10914</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10914"/>
		<updated>2023-03-24T09:27:45Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle ([[TPWM Compression]]) and must be unpacked before the file contents can be modified. Fortunately, the game checks whether the files are compressed or not and accepts the data files uncompressed as well. Therefore, modified files do not have to be compressed again.&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_library_format&amp;diff=10913</id>
		<title>Battle Isle / History Line library format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_library_format&amp;diff=10913"/>
		<updated>2023-03-24T09:26:00Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = &lt;br /&gt;
 | FAT = At the end of the file&lt;br /&gt;
 | Names = Yes&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
Battle Isle and History Line 1914-1918 use library files in the same file format to store bitmap graphics such as terrain and unit graphics.&lt;br /&gt;
These files are located in the game&#039;s LIB subdirectory and also have the *.lib file extension.&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
The library files are compressed using [[TPWM compression]]. &lt;br /&gt;
Either the complete archive file is compressed once, or the contained bitmaps are compressed individually.&lt;br /&gt;
&lt;br /&gt;
== *.lib file format ==&lt;br /&gt;
The files consist of two sections, the data section and an Idex or FAT to allocate the contained files.&lt;br /&gt;
The first four bytes of the file contain the offset to the first entry of the index or FAT as UINT32LE.&lt;br /&gt;
&lt;br /&gt;
The index/FAT itself consists of 12 byte entries for each contained file/resource. The structure of the entries is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|char[8]||Name of the resource / file name (without extension)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE||Offset to the resource / file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the graphics in the archives does not correspond to the numbers used to denote terrain and units in the games. There are compagnion files for this, with the same name as the .lib file, but with the extension .dat. These simply contain the names of the graphics in an order that corresponds to the numbering in the game, e.g. in the map files.&lt;br /&gt;
&lt;br /&gt;
== Bitmap format ==&lt;br /&gt;
The bitmaps are stored in a separate format, which is minimally different for Battle Isle and History Line 1914-1918:&lt;br /&gt;
&lt;br /&gt;
=== History Line 1914-1918 ===&lt;br /&gt;
&lt;br /&gt;
There are two different types of bitmaps used in the game: 256 colors / 8 bits per pixel, which are used for terrain tiles and fonts and (16 colors / 4 bits per pixel) for the unit graphics and the black and white photos from the 1st World War.&lt;br /&gt;
All bitmaps start with a header:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|char[8]||ID String &amp;quot;INFOILBM&amp;quot; or &amp;quot;ILBM    &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT8||Background color that should not be displayed&lt;br /&gt;
|-&lt;br /&gt;
|UINT8||Bitmap type (0x50 = 4 bits per pixel, 0x55 = 8 bits per pixel)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Unknown / Padding (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Unknown / Padding (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Width of the image in pixels&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Height of the image in pixels&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This header is followed by the image data. All bitmaps of History Line 1914-1918 use four pixel bitplanes and no further compression like RLE or similar. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
The bitmap for a terrain tile is 24x24 pixels and stored with 8 bpp.&lt;br /&gt;
&lt;br /&gt;
Byte 0 contains the color for pixel 0/0&lt;br /&gt;
Byte 1 the one for pixel 4/0&lt;br /&gt;
Byte 2 the one for pixel 8/0&lt;br /&gt;
Byte 3 the one for pixel 12/0&lt;br /&gt;
Byte 4 the one for pixel 16/0&lt;br /&gt;
Byte 5 the one for pixel 20/0&lt;br /&gt;
&lt;br /&gt;
Then the next line continues:&lt;br /&gt;
&lt;br /&gt;
Byte 6 stands for pixel 0/1&lt;br /&gt;
Byte 7 for pixel 4/1 &lt;br /&gt;
and so on&lt;br /&gt;
&lt;br /&gt;
If a column is drawn, it is started again at the top, then with pixel 1/0 and so on.&lt;br /&gt;
&lt;br /&gt;
For bitmaps with 4 bpp, such as the units, nibble are used accordingly and one byte stands for two pixels:&lt;br /&gt;
&lt;br /&gt;
Byte 0 contains the colors for pixel 0/0 and 4/0&lt;br /&gt;
Byte 1 those for pixel 8/0 and 12/0&lt;br /&gt;
etc. &lt;br /&gt;
&lt;br /&gt;
The color palettes can be found as *.pal files in the games main directory. These files simply contain 8 bit RGB values for all 256 colors of a VGA palette. &lt;br /&gt;
The 8 bpp bitmaps are displayed correctly with these palettes, for the 4 bpp bitmaps different areas of the palette can be used:&lt;br /&gt;
&lt;br /&gt;
Add 32 to each color value in the bitmap of a military unit to draw it as a German unit.&lt;br /&gt;
Add 48 to draw it as a French unit.&lt;br /&gt;
Add 64 for the sepia tones of the ancient photos (included in BIGUNIT.LIB).&lt;br /&gt;
&lt;br /&gt;
=== Battle Isle ===&lt;br /&gt;
The structure of the bitmap resources in Battle Isle is very similar to History Line 1914-1918. However, the ID strings are somewhat different. Unit and terrain graphics also start with &amp;quot;INFO&amp;quot;, but the next four characters are a shorthand or abbreviation of the graphic&#039;s name. Examples: &amp;quot;INFOBERG&amp;quot; (&amp;quot;Berg&amp;quot; is the German word for mountain) or &amp;quot;INFOFZA0&amp;quot;.&lt;br /&gt;
Larger images, on the other hand, also have an &amp;quot;INFOILBM&amp;quot; ID.&lt;br /&gt;
&lt;br /&gt;
Also, Battle Isle seems to only have 8 bits per pixel bitmaps. Therefore, the meaning of the type byte in the header still needs to be clarified here. The bitmap data itself is encoded in the same way as the 8 bpp bitmaps from History Line 1914-1918.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:DragonSphere]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_library_format&amp;diff=10912</id>
		<title>Battle Isle / History Line library format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_library_format&amp;diff=10912"/>
		<updated>2023-03-24T09:15:18Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: Created page with &amp;quot;{{Archive Infobox  | MaxFiles =   | FAT = At the end of the file  | Names = Yes  | Metadata = None  | Subdirectories = N  | Compressed = Y  | Encrypted = N  | Hidden = N  | Ga...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = &lt;br /&gt;
 | FAT = At the end of the file&lt;br /&gt;
 | Names = Yes&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
The library files are compressed using [[TPWM compression]]. &lt;br /&gt;
Either the complete archive file is compressed once, or the contained bitmaps are compressed individually.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== *.lib file format ==&lt;br /&gt;
&lt;br /&gt;
The (uncompressed) files consist of two sections, the data section and an Idex or FAT to allocate the contained files.&lt;br /&gt;
The first four bytes of the file contain the offset to the first entry of the index or FAT as UINT32LE.&lt;br /&gt;
&lt;br /&gt;
The index/FAT itself consists of 12 byte entries for each contained file/resource. The structure of the entries is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|char[8]||Name of the resource / file name (without extension)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE||Offset to the resource / file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bitmap format ==&lt;br /&gt;
The bitmaps are stored in a separate format, which is minimally different for Battle Isle and History Line 1914-1918:&lt;br /&gt;
&lt;br /&gt;
=== History Line 1914-1918 ===&lt;br /&gt;
&lt;br /&gt;
There are two different types of bitmaps used in the game: 256 colors / 8 bits per pixel, which are used for terrain tiles and fonts and (16 colors / 4 bits per pixel) for the unit graphics and the black and white photos from the 1st World War.&lt;br /&gt;
All bitmaps start with a header:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|char[8]||ID String &amp;quot;INFOILBM&amp;quot; or &amp;quot;ILBM    &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT8||Background color that should not be displayed&lt;br /&gt;
|-&lt;br /&gt;
|UINT8||Bitmap type (0x50 = 4 bits per pixel, 0x55 = 8 bits per pixel)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Unknown / Padding (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Unknown / Padding (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Width of the image in pixels&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE|| Height of the image in pixels&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This header is followed by the image data. All bitmaps of History Line 1914-1918 use four pixel bitplanes and no further compression like RLE or similar. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
The bitmap for a terrain tile is 24x24 pixels and stored with 8 bpp.&lt;br /&gt;
&lt;br /&gt;
Byte 0 contains the color for pixel 0/0&lt;br /&gt;
Byte 1 the one for pixel 4/0&lt;br /&gt;
Byte 2 the one for pixel 8/0&lt;br /&gt;
Byte 3 the one for pixel 12/0&lt;br /&gt;
Byte 4 the one for pixel 16/0&lt;br /&gt;
Byte 5 the one for pixel 20/0&lt;br /&gt;
&lt;br /&gt;
Then the next line continues:&lt;br /&gt;
&lt;br /&gt;
Byte 6 stands for pixel 0/1&lt;br /&gt;
Byte 7 for pixel 4/1 &lt;br /&gt;
and so on&lt;br /&gt;
&lt;br /&gt;
If a column is drawn, it is started again at the top, then with pixel 1/0 and so on.&lt;br /&gt;
&lt;br /&gt;
For bitmaps with 4 bpp, such as the units, nibble are used accordingly and one byte stands for two pixels:&lt;br /&gt;
&lt;br /&gt;
Byte 0 contains the colors for pixel 0/0 and 4/0&lt;br /&gt;
Byte 1 those for pixel 8/0 and 12/0&lt;br /&gt;
etc. &lt;br /&gt;
&lt;br /&gt;
The color palettes can be found as *.pal files in the games main directory. These files simply contain 8 bit RGB values for all 256 colors of a VGA palette. &lt;br /&gt;
The 8 bpp bitmaps are displayed correctly with these palettes, for the 4 bpp bitmaps different areas of the palette can be used:&lt;br /&gt;
&lt;br /&gt;
Add 32 to each color value in the bitmap of a military unit to draw it as a German unit.&lt;br /&gt;
Add 48 to draw it as a French unit.&lt;br /&gt;
Add 64 for the sepia tones of the ancient photos (included in BIGUNIT.LIB).&lt;br /&gt;
&lt;br /&gt;
=== Battle Isle ===&lt;br /&gt;
The structure of the bitmap resources in Battle Isle is very similar to History Line 1914-1918. However, the ID strings are somewhat different. Unit and terrain graphics also start with &amp;quot;INFO&amp;quot;, but the next four characters are a shorthand or abbreviation of the graphic&#039;s name. Examples: &amp;quot;INFOBERG&amp;quot; (&amp;quot;Berg&amp;quot; is the German word for mountain) or &amp;quot;INFOFZA0&amp;quot;.&lt;br /&gt;
Larger images, on the other hand, also have an &amp;quot;INFOILBM&amp;quot; ID.&lt;br /&gt;
&lt;br /&gt;
Also, Battle Isle seems to only have 8 bits per pixel bitmaps. Therefore, the meaning of the type byte in the header still needs to be clarified here. The bitmap data itself is encoded in the same way as the 8 bpp bitmaps from History Line 1914-1918.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:DragonSphere]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10911</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10911"/>
		<updated>2023-03-24T07:23:14Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle and must be unpacked before the file contents can be modified. Fortunately, the game checks whether the files are compressed or not and accepts the data files uncompressed as well. Therefore, modified files do not have to be compressed again.&lt;br /&gt;
&lt;br /&gt;
Packed files can be recognized by the ID string TPWM directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int            bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
         Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
         output_offset++;&lt;br /&gt;
         if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10909</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10909"/>
		<updated>2023-03-22T11:21:11Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle and must be unpacked before the file contents can be modified. &lt;br /&gt;
Packed files can be recognized by the ID string TPWM directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int            bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
         Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
         output_offset++;&lt;br /&gt;
         if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10908</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10908"/>
		<updated>2023-03-22T11:16:44Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle and must be unpacked before the file contents can be modified. &lt;br /&gt;
Packed files can be recognized by the ID string TPWM directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int   	 bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
         Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
         output_offset++;&lt;br /&gt;
         if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10907</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10907"/>
		<updated>2023-03-22T11:13:09Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle and must be unpacked before the file contents can be modified. &lt;br /&gt;
Packed files can be recognized by the ID string TPWM directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int   	 bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
	 Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
	 output_offset++;&lt;br /&gt;
	 if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10906</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10906"/>
		<updated>2023-03-22T11:09:58Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle and must be unpacked before the file contents can be modified. &lt;br /&gt;
Packed files can be recognized by the ID string TPWM directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. 0xFFF bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int   	 bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
	 Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
	 output_offset++;&lt;br /&gt;
	 if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10905</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10905"/>
		<updated>2023-03-22T11:08:57Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: Added info about the TPWM compression algorithm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle and must be unpacked before the file contents can be modified. &lt;br /&gt;
Packed files can be recognized by the ID string TPWM directly at the beginning of the file. This ID string is followed by four bytes, which is the size of the unpacked data and then the packed data itself. The size of the packed data thus results from the file size - 8;&lt;br /&gt;
The packing algorithm shortens repeating byte sequences with a length between 3 and 18 bytes to 2 bytes. In these 2 bytes, the length of the sequence and the relative offset (max. $fff bytes) is recorded.  Longer sequences are accordingly composed of several such bytes with unpacking information. All other byte sequences remain unchanged.&lt;br /&gt;
In order to determine during unpacking where in the packed file an unpacking information is located instead of normal data bytes, the packer inserts an extra byte whose bits for the next 8 bytes indicate whether they are data bytes or unpacking information.&lt;br /&gt;
&lt;br /&gt;
Here is an example of an unpack routine as C code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int Unpack_TPWM()&lt;br /&gt;
{&lt;br /&gt;
  unsigned char  b1,b2;&lt;br /&gt;
  unsigned short packbyte;&lt;br /&gt;
  int   	 bit, i;&lt;br /&gt;
  unsigned long  input_offset;&lt;br /&gt;
  unsigned long  output_offset;&lt;br /&gt;
  unsigned int   distance;&lt;br /&gt;
  unsigned int   length;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  output_offset = 0;&lt;br /&gt;
  input_offset = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  while ((input_offset &amp;lt; pack_size) &amp;amp;&amp;amp; (output_offset &amp;lt; unpacked_size))&lt;br /&gt;
  {&lt;br /&gt;
   packbyte = GetInputByte(input_offset);&lt;br /&gt;
   input_offset++;&lt;br /&gt;
&lt;br /&gt;
   for (bit = 0; bit &amp;lt;= 7; bit++)&lt;br /&gt;
   {&lt;br /&gt;
     if ((output_offset &amp;gt;= unpacked_size) || (input_offset &amp;gt;= packed_size)) break;&lt;br /&gt;
     packbyte *= 2;&lt;br /&gt;
&lt;br /&gt;
     if (packbyte &amp;gt; 0xFF)&lt;br /&gt;
     {&lt;br /&gt;
       packbyte &amp;amp;= 0x00FF;&lt;br /&gt;
       b1 = Input_Buffer[input_offset];&lt;br /&gt;
       &lt;br /&gt;
       input_offset++;       &lt;br /&gt;
       if (input_offset &amp;gt; packed_size) break;&lt;br /&gt;
       &lt;br /&gt;
       length = (b1 &amp;amp; 0x000F)+2;&lt;br /&gt;
&lt;br /&gt;
       b2 = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       &lt;br /&gt;
       distance = b2 | ((b1 &amp;lt;&amp;lt; 4) &amp;amp; 0x0F00);&lt;br /&gt;
&lt;br /&gt;
       for (i = 0; i &amp;lt;= length; i++)&lt;br /&gt;
       {	  &lt;br /&gt;
	 Output_Buffer[output_offset] = Output_Buffer[output_offset-distance];&lt;br /&gt;
	 output_offset++;&lt;br /&gt;
	 if (output_offset &amp;gt;= unpacked_size) break;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {      &lt;br /&gt;
       Output_Buffer[output_offset] = Input_Buffer[input_offset];&lt;br /&gt;
       input_offset++;&lt;br /&gt;
       output_offset++;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (output_offset &amp;lt; unpacked_size)&lt;br /&gt;
    return -1;&lt;br /&gt;
  else&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Savegame ==&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10904</id>
		<title>Battle Isle / History Line map format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10904"/>
		<updated>2023-03-22T10:37:19Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 24&amp;amp;times;24&lt;br /&gt;
 | Viewport = 10&amp;amp;times;8 fields&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 (and Battle Isle) battlefields are based on 24x24 pixel hexagon fields. The game uses split-screen, so both players only see a 10x8 hex field section, which is scrolled across the map.&lt;br /&gt;
The maps are stored in the form of *.fin and *.shp files in the MAP subdirectory of the game. The *.fin files contain the information about the individual hex fields (terrain and units), the *.shp files about the contents of buildings (resources, contained units, belonging to a side, etc.). &lt;br /&gt;
&lt;br /&gt;
== *.shp File Format ==&lt;br /&gt;
&lt;br /&gt;
The first 51 bytes in the *.shp files represent one of the 51 different military units on each side and indicate whether they are available on the map. If a byte is set to 0, the respective unit can be built in factories, if it is set to 1, the unit is not available.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Unit names of the US version of the game should still be supplemented}}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number/Offset !! Unit in History Line 1914-1918&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Spähpanzer&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || A7V&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Gotha &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Zeppelin Staaken&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Junkers J4-10&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Fokker E I.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Fokker E III.&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Albatros&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Fokker DR I&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Fokker D VII&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || Leichte Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Mittlere Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Schwere Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || Bunker&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || Mobile Flak&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Stationäre Flak&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Depoteinheit&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || Elite Infanterie&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || Infanterie&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || Panzerabwehr&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || Pioniere&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Kavallerie&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || Transportwagen&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Ballon&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Schienengeschütz&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Panzerzug&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Truppentransport&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || Patrouillenboot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || Torpedoboot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || U-Boot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || U-Boot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || Transportschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Zerstörer&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || Zerstörer&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || Schlachtschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || Schlachtschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || Voisin&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || Handley&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || DH4&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || Morane&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || DH2&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || Nieuport&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || Spad VII&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || SE5A&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || Spad XIII&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || Sopwith Camel&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || Charron&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || Renault&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || Mark I.&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || St. Chammond&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || Mark IV.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is followed the total number of buildings on the map stored in the next byte. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || NumBuildings || Number of buildings on the map / records that follow in the file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows the data for each building in records of 12 byte size.&lt;br /&gt;
Transport units, such as the transport wagon or troop transport train, are treated as buildings.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Owner || To which side the building belongs (0 = German; 1 = French, 2 = Neutral)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Type || Type of building (0=HQ; 1 = Factory; 2 = Depot; 3 = Transport unit)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Index || xth unit/building of this type&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Resources || How many resources does this building generate per turn&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unknown || {{TODO|The purpose of this byte is not yet known}}&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT8]][7] || Units || Units inside the building/transport unit&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the building records is determined by the position of the building on the map. The map is interpreted by the game row by row from left to right and from top to bottom. Whenever a field with a building entrance is encountered, the next data record is read from the *.shp file.&lt;br /&gt;
&lt;br /&gt;
== *.fin File Format ==&lt;br /&gt;
The *.fin files start with two word in Motorola byte order (big-endian), indicating the size of the map in hex fields.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max X || Width of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max Y || Height of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Two bytes follow for each hex field of the map. The first byte contains the number of the terrain graphic, the second one the number of a unit standing on the field. If there is no unit on the field, the value of the second byte is 0xFF.&lt;br /&gt;
The map is stored in rows. At the end of each line, History Line 1914-1918 stores an additional field with the values 0xAF and 0xFF and at the end follows a complete additional row with these values, but they are not displayed in the game.&lt;br /&gt;
Except for this additional row/column, the maps in the game Battle Isle are stored identically.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Ground || Terrain of this hex field&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unit || Military unit on this hex field&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The unit number is slightly different from those in the *.shp files. The order is the same, but here each unit has two numbers, depending on which side it belongs to. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number !! Unit in History Line 1914-1918&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || German Spähpanzer &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || French Spähpanzer &lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || German A7V &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || French A7V &lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The terrain graphics have the following numbers:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number !! Terrain description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || plains&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || headquarters (north entrance) german&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || headquarters (north entrance) french&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || headquarters (center)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || headquarters (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || headquarters (northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || headquarters (southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || headquarters (northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || headquarters (southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || factory (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || factory (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || factory (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || factory (east entrance) neutral&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || factory (east entrance) german&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || factory (east entrance) french&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || depot (north entrance) neutral&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || depot (north entrance) german&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || depot (north entrance) french&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || depot (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || depot (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || depot (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || unfinished depot (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || unfinished depot (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || unfinished depot (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || unfinished depot (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || shallow water&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || shallow water (coast southeast+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || shallow water (coast northwest+north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || shallow water (coast southwest+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || shallow water (coast north+northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || shallow water (coast southwest+south+southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || shallow water (coast northwest+north+northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || shallow water (coast north+northwest+southwest+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || shallow water (coast north+northeast+southeast+south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || lake&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || harbor (south faces land)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || river (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || river (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || river (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || river (north-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || river (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || river (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || river (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || river (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || river (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || river (northwest-northeast-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || river (north-southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || water&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || deep water&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || house (with tree)&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || house (with well)&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || hangars&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || harbor building (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || harbor building (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || light forest (3 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || deep forest (5 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || deep forest (9 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || deep forest (7 trees)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || river (southwest-northeast) with tiny bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || river (north-south) with tiny bridge (east-west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || small cliffs (shallow water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || cliffs (shallow water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || cliff (shallow water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || rugged terrain with barbed wire&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || small mountain&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || hill (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || hill (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || big hill (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || big hill (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || big hill (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || big hill (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || big mountain (north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || big mountain (south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || big mountain (west)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || big mountain (east)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || rocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || rocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || rock&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || plains (tiny rocks/rubble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || plains (small rocks/rubble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || tiny hills&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || slightly rugged terrain&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || rugged terrain&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || rugged terrain with craters&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || rugged terrain with crater&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || rail (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || rail (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || rail (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || rail (southwest-north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || rail (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || rail (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || rail (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || rail (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || rail (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || rail junction (north-south-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || rail junction (south-north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || rail junction (north-south-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || rail (north-south) crossing river (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || rail (north-south) crossing river (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || rail (southwest-northeast) crossing path (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || rail (north-south) crossing path (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || rail (north-south) crossing road (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || rail (northwest-southeast) crossing road (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || rail (southwest-northeast) crossing road (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || rail (north-south) crossing road (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || airfield (north-south) north&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || airfield (north-south) south&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || coast (south-southwest-northwest-north) with road/bridge (nrthwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || road bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || coast (north-northeast-southeast-south) with road/bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E || road bridge (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6F || coast (north-northeast-southeast-south) with road/bridge (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || coast (south-southwest-northwest-north) with road/bridge (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || coast (northwest-north-northeast) with road/bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || road bridge (north south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || coast (southwest-south-southeast) with road/bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || river (northwest-southeast) with road bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || river (southwest-northeast) with road bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || river (north-south) with road bridge (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || docks (west faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || harbor building (south with road)&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || river (southwest-northeast) with path bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || river (northwest-southeast) with path bridge (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || docks with crane (east faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || docks with crane (west faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || docks (east faces water)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || jetty&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || road (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || road (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || road (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || road (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || road (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || road (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || road (southwest-north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || road (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x87 || road (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || road junction (southwest-northeast-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x89 || road junction (northwest-southeast-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || road junction (southwest-northeast-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B || road junction (northwest-southeast-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C || road junction (north-south-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D || road junction (north-south-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || road junction (north-south-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || road junction (north-south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || road crossing (northwest-outheast-southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x91 || road crossing (northwest-northeast-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || path (north-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x93 || path (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || path (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x95 || path (south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x96 || path (north-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x97 || path (northwest-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || path (southwest-north)&lt;br /&gt;
|-&lt;br /&gt;
| 0x99 || path (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || path (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B || path junction (north-south-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || path junction (north-south-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || path junction (north-south-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || path junction (north-south-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F || path junction (southwest-northeast-northwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || path junction (northwest-southeast-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || path junction (southwest-northeast-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA2 || path junction (northwest-southeast-southwest)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || path crossing (northwest-southeast-southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || path junction (northwest-northeast-south)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || trench with barbed wire (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA6 || trench with barbed wire (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA7 || trench (big hole)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || trench junction (northwest-southeast-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || trench junction (southwest-northeast-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || trench (southwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAB || trench (northwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || trench (southwest-southeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAD || trench (northwest-northeast)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAE || non-visible end tile (stop sign)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10903</id>
		<title>Battle Isle / History Line map format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10903"/>
		<updated>2023-03-22T09:13:21Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 24&amp;amp;times;24&lt;br /&gt;
 | Viewport = 10&amp;amp;times;8 fields&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 (and Battle Isle) battlefields are based on 24x24 pixel hexagon fields. The game uses split-screen, so both players only see a 10x8 hex field section, which is scrolled across the map.&lt;br /&gt;
The maps are stored in the form of *.fin and *.shp files in the MAP subdirectory of the game. The *.fin files contain the information about the individual hex fields (terrain and units), the *.shp files about the contents of buildings (resources, contained units, belonging to a side, etc.). &lt;br /&gt;
&lt;br /&gt;
== *.shp File Format ==&lt;br /&gt;
&lt;br /&gt;
The first 51 bytes in the *.shp files represent one of the 51 different military units on each side and indicate whether they are available on the map. If a byte is set to 0, the respective unit can be built in factories, if it is set to 1, the unit is not available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number/Offset !! Unit in History Line 1914-1918&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Spähpanzer&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || A7V&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Gotha &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Zeppelin Staaken&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Junkers J4-10&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Fokker E I.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Fokker E III.&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || Albatros&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Fokker DR I&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Fokker D VII&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || Leichte Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || Mittlere Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Schwere Ari&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || Bunker&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || Mobile Flak&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Stationäre Flak&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Depoteinheit&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || Elite Infanterie&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || Infanterie&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || Panzerabwehr&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || Pioniere&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Kavallerie&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || Transportwagen&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Ballon&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Schienengeschtz&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Panzerzug&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Truppentransport&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || Patrouillenboot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || Torpedoboot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || U-Boot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || U-Boot&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || Transportschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Zerstörer&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || Zerstörer&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || Schlachtschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || Schlachtschiff&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || Voisin&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || Handley&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || DH4&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || Morane&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || DH2&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || Nieuport&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || Spad VII&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || SE5A&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || Spad XIII&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || Sopwith Camel&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || Charron&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || Renault&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || Mark I.&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || St. Chammond&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || Mark IV.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is followed the total number of buildings on the map stored in the next byte. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || NumBuildings || Number of buildings on the map / records that follow in the file&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Then follows the data for each building in records of 12 byte size.&lt;br /&gt;
Transport units, such as the transport wagon or troop transport train, are treated as buildings.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Owner || To which side the building belongs (0 = German; 1 = French, 2 = Neutral)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Type || Type of building (0=HQ; 1 = Factory; 2 = Depot; 3 = Transport unit)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Index || xth unit/building of this type&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Resources || How many resources does this building generate per turn&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unknown || Meaning unknown. Must still be found out.&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT8]][7] || Units || Units inside the building/transport unit&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the building records is determined by the position of the building on the map. The map is interpreted by the game row by row from left to right and from top to bottom. Whenever a field with a building entrance is encountered, the next data record is read from the *.shp file.&lt;br /&gt;
&lt;br /&gt;
== *.fin File Format ==&lt;br /&gt;
The *.fin files start with two word in Motorola byte order (big-endian), indicating the size of the map in hex fields.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max X || Width of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max Y || Height of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Two bytes follow for each hex field of the map. The first byte contains the number of the terrain graphic, the second one the number of a unit standing on the field. If there is no unit on the field, the value of the second byte is 0xFF.&lt;br /&gt;
The map is stored in rows. At the end of each line, History Line 1914-1918 stores an additional field with the values 0xAF and 0xFF and at the end follows a complete additional row with these values, but they are not displayed in the game.&lt;br /&gt;
Except for this additional row/column, the maps in the game Battle Isle are stored identically.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Ground || Terrain of this hex field&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unit || Military unit on this hex field&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The unit number is slightly different from those in the *.shp files. The order is the same, but here each unit has two numbers, depending on which side it belongs to. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Number !! Unit in History Line 1914-1918&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || German Spähpanzer &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || French Spähpanzer &lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || German A7V &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || French A7V &lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10902</id>
		<title>Battle Isle / History Line map format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10902"/>
		<updated>2023-03-21T15:33:08Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 24&amp;amp;times;24&lt;br /&gt;
 | Viewport = 10&amp;amp;times;8 fields&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 (and Battle Isle) battlefields are based on 24x24 pixel hexagon fields. The game uses split-screen, so both players only see a 10x8 hex field section, which is scrolled across the map.&lt;br /&gt;
The maps are stored in the form of *.fin and *.shp files in the MAP subdirectory of the game. The *.fin files contain the information about the individual hex fields (terrain and units), the *.shp files about the contents of buildings (resources, contained units, belonging to a side, etc.). &lt;br /&gt;
&lt;br /&gt;
== *.fin File Format ==&lt;br /&gt;
The *.fin files start with two word in Motorola byte order (big-endian), indicating the size of the map in hex fields.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max X || Width of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max Y || Height of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Two bytes follow for each hex field of the map. The first byte contains the number of the terrain graphic, the second one the number of a unit standing on the field. If there is no unit on the field, the value of the second byte is 0xFF.&lt;br /&gt;
The map is stored in rows. At the end of each line, History Line 1914-1918 stores an additional field with the values 0xAF and 0xFF and at the end follows a complete additional row with these values, but they are not displayed in the game.&lt;br /&gt;
Except for this additional row/column, the maps in the game Battle Isle are stored identically.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Ground || Terrain of this hex field&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unit || Military unit on this hex field&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== *.shp File Format ==&lt;br /&gt;
&lt;br /&gt;
The first 51 bytes in the *.shp files represent one of the 51 different military units on each side and indicate whether they are available on the map. If a byte is set to 0, the respective unit can be built in factories, if it is set to 1, the unit is not available.&lt;br /&gt;
&lt;br /&gt;
This is followed by a byte with the total number of buildings on the map. &lt;br /&gt;
&lt;br /&gt;
And then follow the data for each building in records of 12 byte size.&lt;br /&gt;
Transport units, such as the transport wagon or troop transport train, are treated as buildings.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Owner || To which side the building belongs (0=German; 1 =French, 2 = Neutral)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Type || Type of building (0=HQ; 1 = Factory; 2 = Depot; 3 = Transport unit)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Index || xth unit/building of this type&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Resources || How many resources does this building generate per turn&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unknown || Meaning unknown. Must still be found out.&lt;br /&gt;
|-&lt;br /&gt;
|7 x [[UINT8]] || Units || Units inside the building/transport unit&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The order of the building records is determined by the position of the building on the map. The map is interpreted by the game row by row from left to right and from top to bottom. Whenever a field with a building entrance is encountered, the next data record is read from the *.shp file.&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10901</id>
		<title>Battle Isle / History Line map format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10901"/>
		<updated>2023-03-21T14:57:16Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 24&amp;amp;times;24&lt;br /&gt;
 | Viewport = 10&amp;amp;times;8&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 (and Battle Isle) battlefields are based on 24x24 pixel hexagon fields. The game uses split-screen, so both players only see a 10x8 hex field section, which is scrolled across the map.&lt;br /&gt;
The maps are stored in the form of *.fin and *.shp files in the MAP subdirectory of the game. The *.fin files contain the information about the individual hex fields (terrain and units), the *.shp files about the contents of buildings (resources, contained units, belonging to a side, etc.). &lt;br /&gt;
&lt;br /&gt;
== *.fin File Format ==&lt;br /&gt;
The *.fin files start with two word in Motorola byte order (big-endian), indicating the size of the map in hex fields.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max X || Width of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max Y || Height of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Two bytes follow for each hex field of the map. The first byte contains the number of the terrain graphic, the second one the number of a unit standing on the field. If there is no unit on the field, the value of the second byte is 0xFF.&lt;br /&gt;
The map is stored in rows. At the end of each line, History Line 1914-1918 stores an additional field with the values 0xAF and 0xFF and at the end follows a complete additional row with these values, but they are not displayed in the game.&lt;br /&gt;
Except for this additional row/column, the maps in Battle Isle are stored identically.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Ground || Terrain of this hex field&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unit || Military unit on this hex field&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10900</id>
		<title>Battle Isle / History Line map format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Battle_Isle_/_History_Line_map_format&amp;diff=10900"/>
		<updated>2023-03-21T14:56:42Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: Created page with &amp;quot;{{NeedMoreInfo}} {{Map Infobox  | Type = 2D tile-based  | Layers = 1  | Tile size = 24&amp;amp;times;24  | Viewport = 10&amp;amp;times;8  | Games =     {{Game|History Line 1914-1918}} }}  His...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 24&amp;amp;times;24&lt;br /&gt;
 | Viewport = 10&amp;amp;times;8&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|History Line 1914-1918}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 (and Battle Isle) battlefields are based on 24x24 pixel hexagon fields. The game uses split-screen, so both players only see a 10x8 hex field section, which is scrolled across the map.&lt;br /&gt;
The maps are stored in the form of *.fin and *.shp files in the MAP subdirectory of the game. The *.fin files contain the information about the individual hex fields (terrain and units), the *.shp files about the contents of buildings (resources, contained units, belonging to a side, etc.). &lt;br /&gt;
&lt;br /&gt;
== *.fin File Format ==&lt;br /&gt;
The *.fin files start with two word in Motorola byte order (big-endian), indicating the size of the map in hex fields.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max X || Width of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || Max Y || Height of the map in hex fields (+1)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tile Data ==&lt;br /&gt;
Two bytes follow for each hex field of the map. The first byte contains the number of the terrain graphic, the second one the number of a unit standing on the field. If there is no unit on the field, the value of the second byte is 0xFF.&lt;br /&gt;
The map is stored in rows. At the end of each line, History Line 1914-1918 stores an additional field with the values 0xAF and 0xFF and at the end follows a complete additional row with these values, but they are not displayed in the game.&lt;br /&gt;
Except for this additional row/column, the maps in Battle Isle are stored identically.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Ground || Terrain of this hex field&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || Unit || Military unit on this hex field&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10899</id>
		<title>History Line 1914-1918</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=History_Line_1914-1918&amp;diff=10899"/>
		<updated>2023-03-21T14:10:20Z</updated>

		<summary type="html">&lt;p&gt;DragonSphere: Created page with &amp;quot;{{Game Infobox  | Levels = Yes  | Tiles =   | Fullscreen = Yes  | Sound = No  | Music = No  | Text = No  | Story = No  | Interface = No }}  History Line 1914-1918 is a turn-ba...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Yes&lt;br /&gt;
 | Tiles = &lt;br /&gt;
 | Fullscreen = Yes&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
History Line 1914-1918 is a turn-based strategy game released in 1992 for Amiga and PC by German BlueByte GmbH. &lt;br /&gt;
It was published in the U.S. in 1993 under the variant title Great War: 1914-1918.&lt;br /&gt;
The game is a spin-off of the better-known Battle Isle series, which moves the action to the First World War. Therefore it is technically based on the first Battle Isle game, released a year earlier.&lt;br /&gt;
&lt;br /&gt;
All data files of the game are compressed with Turbo Packer by Wolfgang Meyerle and must be unpacked before the file contents can be modified. Packed files can be recognized by the ID string TPWM directly at the beginning of the file.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.fin&lt;br /&gt;
 | Format = [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = These files contain the data for the maps (landscape and starting positions of the units)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.shp&lt;br /&gt;
 | Format =  [[Battle Isle / History Line map format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Information about buildings (raw material revenue, contained units, etc.).&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lbm/*.iff&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Planar BitMap (PBM) LBM files used for fullscreen images and backgrounds.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = parts.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (summer)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = partw.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 8 bpp terrain tile graphics (winter)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = unit.lib&lt;br /&gt;
 | Format = [[Battle Isle / History Line library format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Library file for 4 bpp unit tile graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 8-bit VGA palette&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
=== Savegame ===&lt;br /&gt;
&lt;br /&gt;
The savegames are stored as 00.dat to 09.dat in the game directory. The files contain all data for the running game in binary format. Most of the data is a direct copy of the RAM contents.&lt;br /&gt;
&lt;br /&gt;
[[Category:BlueByte (Ubisoft)]]&lt;/div&gt;</summary>
		<author><name>DragonSphere</name></author>
	</entry>
</feed>