#define SP_NUM_LEVELS_PER_PACKAGE 111
-#define SP_PLAYFIELD_WIDTH 60
-#define SP_PLAYFIELD_HEIGHT 24
+#define SP_STD_PLAYFIELD_WIDTH 60
+#define SP_STD_PLAYFIELD_HEIGHT 24
#define SP_LEVEL_NAME_LEN 23
#define SP_MAX_SPECIAL_PORTS 10
#define SP_HEADER_SIZE 96
-#define SP_PLAYFIELD_SIZE (SP_PLAYFIELD_WIDTH * \
- SP_PLAYFIELD_HEIGHT)
-#define SP_LEVEL_SIZE (SP_HEADER_SIZE + SP_PLAYFIELD_SIZE)
-
-#if 0
-#define SP_SCREEN_BUFFER_XSIZE (SCR_FIELDX + 2)
-#define SP_SCREEN_BUFFER_YSIZE (SCR_FIELDY + 2)
-#endif
+#define SP_STD_PLAYFIELD_SIZE (SP_STD_PLAYFIELD_WIDTH * \
+ SP_STD_PLAYFIELD_HEIGHT)
+#define SP_MAX_PLAYFIELD_SIZE (SP_MAX_PLAYFIELD_WIDTH * \
+ SP_MAX_PLAYFIELD_HEIGHT)
+#define SP_STD_LEVEL_SIZE (SP_HEADER_SIZE + SP_STD_PLAYFIELD_SIZE)
#define SP_FRAMES_PER_SECOND 35
+
+// use a much higher value to be able to load ultra-long MPX demo files
+// (like for level collection 78, level 88 ("WAITING FOR GODOT AGAIN"))
+// #define SP_MAX_TAPE_LEN 500000
#define SP_MAX_TAPE_LEN 64010 /* (see "spfix63.doc") */
+/* sound actions */
+
+#define actActive 0
+#define actImpact 1
+#define actExploding 2
+#define actDigging 3
+#define actSnapping 4
+#define actCollecting 5
+#define actPassing 6
+#define actPushing 7
+#define actDropping 8
+
+
/* ------------------------------------------------------------------------- */
/* data structure definitions */
/* ------------------------------------------------------------------------- */
#ifndef HAS_SpecialPortType
typedef struct
{
-#if 1
short PortLocation; // = 2*(x+(y*60)) /* big endian format */
-#else
- int PortLocation; // = 2*(x+(y*60))
-#endif
byte Gravity; // 1 = turn on, anything else (0) = turn off
byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
SpecialPortType SpecialPort[10];
byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
byte CheckSumByte; // = CheckSum XOR SpeedByte
-#if 1
short DemoRandomSeed; /* little endian format */
-#else
- int DemoRandomSeed;
-#endif
} LevelInfoType;
#define HAS_LevelInfoType
#endif
{
boolean LevelSolved;
boolean GameOver;
+
+ /* needed for updating panel */
+ int time_played;
+ int infotrons_still_needed;
+ int red_disk_count;
+ int score;
+
+ /* needed for engine snapshots */
+ char **preceding_buffer;
+ int preceding_buffer_size;
+
+ int scroll_xoffset, scroll_yoffset;
};
struct DemoInfo_SP
byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
struct DemoInfo_SP demo;
+
+ /* used for runtime values */
+ struct GameInfo_SP *game_sp;
};
struct GraphicInfo_SP
struct EngineSnapshotInfo_SP
{
struct GameInfo_SP game_sp;
+
+ int PlayField16[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+ byte PlayField8[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+ byte DisPlayField[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
+
+ int AnimationPosTable[SP_MAX_PLAYFIELD_SIZE];
+ byte AnimationSubTable[SP_MAX_PLAYFIELD_SIZE];
+ byte TerminalState[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
};
/* ------------------------------------------------------------------------- */
extern struct GlobalInfo_SP global_sp_info;
-extern struct GameInfo_SP game_sp_info;
+extern struct GameInfo_SP game_sp;
extern struct LevelInfo_SP native_sp_level;
extern struct GraphicInfo_SP graphic_info_sp_object[TILE_MAX][8];
extern struct GraphicInfo_SP graphic_info_sp_player[MAX_PLAYERS][SPR_MAX][8];
extern void sp_open_all();
extern void sp_close_all();
+extern void InitPrecedingPlayfieldMemory();
+extern void InitGfxBuffers_SP();
+
extern void InitGameEngine_SP();
extern void GameActions_SP(byte *, boolean);
-extern unsigned int InitEngineRandom_SP(long);
+extern unsigned int InitEngineRandom_SP(int);
extern void setLevelInfoToDefaults_SP();
extern void copyInternalEngineVars_SP();
-extern boolean LoadNativeLevel_SP(char *, int);
+extern boolean LoadNativeLevel_SP(char *, int, boolean);
+extern void SaveNativeLevel_SP(char *);
+
+extern int getFieldbufferOffsetX_SP();
+extern int getFieldbufferOffsetY_SP();
-extern void BackToFront_SP(void);
extern void BlitScreenToBitmap_SP(Bitmap *);
extern void RedrawPlayfield_SP(boolean);
-extern void DrawGameDoorValues_SP();
extern void LoadEngineSnapshotValues_SP();
-extern void SaveEngineSnapshotValues_SP();
+extern void SaveEngineSnapshotValues_SP(ListNode **);
extern int map_key_RND_to_SP(int);
extern int map_key_SP_to_RND(int);
+extern int getRedDiskReleaseFlag_SP();
+
#endif /* GAME_SP_EXPORT_H */