From: Loren Petrich <petrich@netcom.com>
Newsgroups: alt.games.marathon
Subject: Analyzing Pathways into Darkness's DPIN resource
Message-ID: <170420000415266828%petrich@netcom.com>
Date: Mon, 17 Apr 2000 11:15:26 GMT
Organization: @Home Network


   As I had discovered earlier, the 'dpin' resource in the PID app
appears to be some extra map data. It has the form of a header with
size 2876 bytes followed by 25 chunks with sizes of 9112 bytes each.
The header is very difficult to puzzle out, but I have had more success
in finding patterns in the chunks for the levels, even if not in
interpreting those patterns.

This is in C/C++ form for convenience; some of the comments may wrap.

// Very speculative

struct PID_DPIN_HdrBlock {
   short Unknown[4];
};

struct PID_DPIN_Header {
   // Nonzero values are very sparse in it, and show little sign of
patterns
   short Unknown1[414];
   // All but the first few of this one's members are {-1, 0, 0, 0} as
shorts
   PID_DPIN_HdrBlock Unknown2[256];
};


// Plausible

struct PID_DPIN_Item {
   // Like the two presumed longs at the beginning of each level in the
map-file data,
   // the upper 2 bytes of each are almost always zero.
   long Unknown1[2];
   // The first one is 192 + some small number
   // The second one is either a small number or 128 + a small number,
   //    something like the (presumed) texture ID in PID_Wall
   // The fourth one is a small number never greater than about 7
   byte Unknown2[4];
   // Always zero
   short Unused;
   // Index to whatever extra items might be present
   // (debris near pillars, stuff at corpses); -1 is none
   short ExtraItem;
};


// No idea what this is
struct PID_DPIN_Unknown {
   short Unknown[4];
};


struct PID_DPIN_Level {
   // These have some pattern of small value / big value,
   // and the first one is sometimes full (all nonzero).
   // THe sum of the two sizes is 300.
   short Unknown1[256];
   short Unknown2[44];
   // Has value {0, 0, -1, 0} when unused
   PID_DPIN_Unknown Unknown3[40];
   // Always either 0 or 1024
   long Unknown4[16];
   // Referenced from PID_Sector::Item and PID_DPIN_Item::ExtraItem;
   // the unused ones are all zeros except for ExtraItem, which is -2.
   PID_DPIN_Item Items[500];
   // Always zero
   byte Unused[128];
};

-- 
Loren Petrich
petrich@netcom.com
Happiness is a fast Macintosh
And a fast train