all unique tile combos used in the official DOS port

Discuss PoP1 for DOS here.
Post Reply
User avatar
Norbert
The Prince of Persia
The Prince of Persia
Posts: 5743
Joined: April 9th, 2009, 10:58 pm

all unique tile combos used in the official DOS port

Post by Norbert »

The format below is: tile(group)/modifier

I've ignored the random bits. I've also ignored rooms that are not in use. I've processed 1.0, 1.1, 1.3 and 1.4. All four releases use exactly the same tiles in all locations.

With the modifier bit not set:

0x00/0x00
0x00/0x01
0x00/0x02
0x00/0x03
0x00/0xFF
0x01/0x00
0x01/0x01
0x01/0x02
0x01/0xFF
0x02/0x00
0x03/0x00
0x04/0x01
0x04/0x02
0x06/0x00
0x06/0x06
0x06/0x0C
0x07/0x01
0x08/0x00
0x09/0x00
0x0A/0x01
0x0A/0x02
0x0A/0x05
0x0B/0x00
0x0C/0x00
0x0C/0x01
0x0C/0x02
0x0E/0x00
0x0F/0x00
0x0F/0x01
0x0F/0x05
0x0F/0x06
0x0F/0x0A
0x0F/0x0B
0x0F/0x0D
0x0F/0x0E
0x0F/0x10
0x0F/0x11
0x0F/0x12
0x10/0x00
0x11/0x00
0x12/0x00
0x13/0x00
0x14/0x00
0x14/0x01
0x15/0x00
0x16/0x00
0x19/0x00
0x1A/0x00
0x1B/0x00
0x1C/0x00
0x1D/0x00

With the modifier bit set:

0x01/0x00
0x01/0x01
0x01/0x02
0x01/0xFF
0x02/0x00
0x03/0x00
0x04/0x01
0x04/0x02
0x06/0x00
0x06/0x01
0x06/0x02
0x06/0x03
0x06/0x04
0x06/0x06
0x06/0x0A
0x06/0x0B
0x06/0x0C
0x06/0x0F
0x07/0x02
0x08/0x00
0x0A/0x01
0x0A/0x02
0x0A/0x03
0x0A/0x04
0x0A/0x05
0x0C/0x01
0x0C/0x02
0x0E/0x00
0x0F/0x00
0x0F/0x01
0x0F/0x02
0x0F/0x03
0x0F/0x04
0x0F/0x05
0x0F/0x06
0x0F/0x07
0x0F/0x08
0x0F/0x09
0x0F/0x0A
0x0F/0x0B
0x0F/0x0C
0x0F/0x0D
0x0F/0x0E
0x0F/0x0F
0x0F/0x10
0x0F/0x11
0x0F/0x14
0x10/0x00
0x11/0x00
0x12/0x00
0x13/0x00
0x14/0x00
0x14/0x01
0x15/0x00
0x16/0x00
0x17/0x00
0x18/0x00
0x19/0x00

I modified apoplexy 3.0 to create the above overviews.
Just for the record, below is the code I used; added after line 2109.
After adding this code I ran "apoplexy -x", then I used "sort -u" on the output, and finally I formatted the result for this post.

Code: Select all

static const int arActiveRoomsL0[24] = { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL1[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0 };
static const int arActiveRoomsL2[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL3[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 };
static const int arActiveRoomsL4[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL5[24] = { 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL6[24] = { 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1 };
static const int arActiveRoomsL7[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL8[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL9[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL10[24] = { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 };
static const int arActiveRoomsL11[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL12[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
static const int arActiveRoomsL13[24] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1 };
static const int arActiveRoomsL14[24] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static const int arActiveRoomsL15[24] = { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int iFValue, iBValue, iDoMod;
if (((luLevelNr == 0) && (arActiveRoomsL0[iRoom - 1] == 1)) ||
	((luLevelNr == 1) && (arActiveRoomsL1[iRoom - 1] == 1)) ||
	((luLevelNr == 2) && (arActiveRoomsL2[iRoom - 1] == 1)) ||
	((luLevelNr == 3) && (arActiveRoomsL3[iRoom - 1] == 1)) ||
	((luLevelNr == 4) && (arActiveRoomsL4[iRoom - 1] == 1)) ||
	((luLevelNr == 5) && (arActiveRoomsL5[iRoom - 1] == 1)) ||
	((luLevelNr == 6) && (arActiveRoomsL6[iRoom - 1] == 1)) ||
	((luLevelNr == 7) && (arActiveRoomsL7[iRoom - 1] == 1)) ||
	((luLevelNr == 8) && (arActiveRoomsL8[iRoom - 1] == 1)) ||
	((luLevelNr == 9) && (arActiveRoomsL9[iRoom - 1] == 1)) ||
	((luLevelNr == 10) && (arActiveRoomsL10[iRoom - 1] == 1)) ||
	((luLevelNr == 11) && (arActiveRoomsL11[iRoom - 1] == 1)) ||
	((luLevelNr == 12) && (arActiveRoomsL12[iRoom - 1] == 1)) ||
	((luLevelNr == 13) && (arActiveRoomsL13[iRoom - 1] == 1)) ||
	((luLevelNr == 14) && (arActiveRoomsL14[iRoom - 1] == 1)) ||
	((luLevelNr == 15) && (arActiveRoomsL15[iRoom - 1] == 1)))
{
	iDoMod = 0;
	iFValue = sLevelForeground[iForePos];
	iBValue = sLevelModifier[iBackPos];
	if (iFValue >= 128) { iFValue-=128; }
	if (iFValue >= 64) { iFValue-=64; }
	if (iFValue >= 32) { iFValue-=32; iDoMod = 1; }
	printf ("m:%i 0x%02X/0x%02X\n", iDoMod, iFValue, iBValue);
}
David
The Prince of Persia
The Prince of Persia
Posts: 2846
Joined: December 11th, 2008, 9:48 pm
Location: Hungary

Re: all unique tile combos used in the official DOS port

Post by David »

Norbert wrote:The format below is: tile(group)/modifier
I don't see the parenthesized group anywhere... or did you mean "tile or tilegroup"?
Norbert wrote:Just for the record, below is the code I used; added after line 2109.
Maybe you could have used a two-dimensional array...
Or figure out which rooms are used from the level itself.

I'd add that there are some tiles that are not in LEVELS.DAT, but still used by the game:
0x05 (stuck button), when someone dies on a closer button.
0x0D (mirror), when the exit opens on level 4.
0x1E (torch + broken floor), when a loose floor lands at a torch.
User avatar
Norbert
The Prince of Persia
The Prince of Persia
Posts: 5743
Joined: April 9th, 2009, 10:58 pm

Re: all unique tile combos used in the official DOS port

Post by Norbert »

David wrote:
Norbert wrote:The format below is: tile(group)/modifier
I don't see the parenthesized group anywhere... or did you mean "tile or tilegroup"?
Yes.
Norbert wrote:I'd add that there are some tiles that are not in LEVELS.DAT, but still used by the game: [...]
Right.
All the ones you mentioned are included here.
Post Reply