port->FreezeEnemies = 0;
}
+ /* set raw header bytes (used for subsequent buffer zone) to "hardware" */
+ for (i = 0; i < SP_HEADER_SIZE; i++)
+ native_sp_level.header_raw_bytes[i] = 0x20;
+
native_sp_level.demo.is_available = FALSE;
native_sp_level.demo.length = 0;
}
void copyInternalEngineVars_SP()
{
int i, x, y;
+ int count;
LInfo = native_sp_level.header;
DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
PlayField16 = REDIM_1D(sizeof(int), -FieldWidth, FieldMax);
- for (i = 0, y = 0; y < native_sp_level.height; y++)
+#if 1
+
+#if 0
+ /* fill preceding playfield buffer zone with (indestructible) "hardware" */
+ for (i = -FieldWidth; i < 0; i++)
+ PlayField16[i] = 0x20;
+#endif
+
+ count = 0;
+ for (y = 0; y < native_sp_level.height; y++)
+ for (x = 0; x < native_sp_level.width; x++)
+ PlayField8[count++] = native_sp_level.playfield[x][y];
+
+ /* add raw header bytes to subsequent playfield buffer zone */
+ for (i = 0; i < SP_HEADER_SIZE; i++)
+ PlayField8[count++] = native_sp_level.header_raw_bytes[i];
+
+ for (i = 0; i < count; i++)
+ {
+ PlayField16[i] = PlayField8[i];
+ DisPlayField[i] = PlayField8[i];
+ PlayField8[i] = 0;
+ }
+
+#else
+
+ for (i = 0; y = 0; y < native_sp_level.height; y++)
{
for (x = 0; x < native_sp_level.width; x++)
{
}
}
+#endif
+
if (native_sp_level.demo.is_available)
{
DemoAvailable = True;
FreezeZonks = LInfo.InitialFreezeZonks;
#if 1
- /* set by main game tape code directly */
+ /* this is set by main game tape code to native random generator directly */
#else
#if 1
/* random seed used for recorded demos */
header->DemoRandomSeed = getFile16BitLE(file); /* yes, little endian */
+ // header->DemoRandomSeed = getFile16BitBE(file); /* !!! TEST ONLY !!! */
#if 0
printf("::: file.c: DemoRandomSeed == %d\n", header->DemoRandomSeed);
header->InfotronsNeeded &= 0xff; /* only use low byte -- see above */
}
+ /* read raw level header bytes (96 bytes) */
+
+ fseek(file, -(SP_HEADER_SIZE), SEEK_CUR); /* rewind file */
+ for (i = 0; i < SP_HEADER_SIZE; i++)
+ native_sp_level.header_raw_bytes[i] = fgetc(file);
+
/* also load demo tape, if available */
if (demo_available)
((name_first == '?' || name_first == '1') &&
(name_last == '?' || name_last == '1'));
- /* correct leading multipart level meta information in level name */
- for (i = 0; i < SP_LEVEL_NAME_LEN && header->LevelTitle[i] == name_first; i++)
- header->LevelTitle[i] = '-';
-
- /* correct trailing multipart level meta information in level name */
- for (i = SP_LEVEL_NAME_LEN - 1; i >= 0 && header->LevelTitle[i] == name_last; i--)
- header->LevelTitle[i] = '-';
+ if (is_multipart_level)
+ {
+ /* correct leading multipart level meta information in level name */
+ for (i = 0;
+ i < SP_LEVEL_NAME_LEN && header->LevelTitle[i] == name_first;
+ i++)
+ header->LevelTitle[i] = '-';
+
+ /* correct trailing multipart level meta information in level name */
+ for (i = SP_LEVEL_NAME_LEN - 1;
+ i >= 0 && header->LevelTitle[i] == name_last;
+ i--)
+ header->LevelTitle[i] = '-';
+ }
/* ---------- check for normal single level ---------- */