rnd-20091012-1-src
[rocksndiamonds.git] / src / game_sp / export.h
index 8b86c1669e2f84d34727f477d6c1a6286736000f..552e2ecb14a303618088f650666be38f6ec4eb14 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef EXPORT_H
-#define EXPORT_H
+#ifndef GAME_SP_EXPORT_H
+#define GAME_SP_EXPORT_H
 
 /* ========================================================================= */
 /* functions and definitions exported from game_sp to main program           */
@@ -9,22 +9,93 @@
 /* constant definitions                                                      */
 /* ------------------------------------------------------------------------- */
 
+#define SP_MAX_PLAYFIELD_WIDTH         MAX_PLAYFIELD_WIDTH
+#define SP_MAX_PLAYFIELD_HEIGHT                MAX_PLAYFIELD_HEIGHT
+
+#define SP_NUM_LEVELS_PER_PACKAGE      111
+
+#define SP_PLAYFIELD_WIDTH             60
+#define SP_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)
+
+#define SP_FRAMES_PER_SECOND           35
+#define SP_MAX_TAPE_LEN                        64010   /* (see "spfix63.doc") */
+
 
 /* ------------------------------------------------------------------------- */
 /* 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
+  byte UnUsed;
+} SpecialPortType;
+#define HAS_SpecialPortType
+#endif
+
+#ifndef HAS_LevelInfoType
+typedef struct
+{
+  byte UnUsed[4];
+  byte InitialGravity; // 1=on, anything else (0) = off
+  byte Version; // SpeedFixVersion XOR &H20
+  char LevelTitle[23];
+  byte InitialFreezeZonks; // 2=on, anything else (0) = off.  (1=off too!)
+  byte InfotronsNeeded;
+
+  // Number of Infotrons needed. 0 means that Supaplex will count the total
+  // amount of Infotrons in the level, and use the low byte of that number.
+  // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
+  byte SpecialPortCount; // Maximum 10 allowed!
+  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
+
 struct GlobalInfo_SP
 {
 };
 
 struct GameInfo_SP
 {
+  boolean LevelSolved;
+  boolean GameOver;
 };
 
 struct LevelInfo_SP
 {
-  int file_version;
+  LevelInfoType header;
+
+  byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
+
+  int width, height;
+
+  boolean demo_available;
+
+  byte demo[SP_MAX_TAPE_LEN];
+  int demo_length;
 };
 
 struct GraphicInfo_SP
@@ -56,18 +127,23 @@ struct EngineSnapshotInfo_SP
 /* ------------------------------------------------------------------------- */
 
 extern struct GlobalInfo_SP global_sp_info;
+extern struct GameInfo_SP game_sp_info;
 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 struct EngineSnapshotInfo_SP engine_snapshot_sp;
 
+extern void sp_open_all();
+extern void sp_close_all();
+
 extern void InitGameEngine_SP();
 extern void GameActions_SP(byte *, boolean);
 
 extern unsigned int InitEngineRandom_SP(long);
 
 extern void setLevelInfoToDefaults_SP();
-extern boolean LoadNativeLevel_SP(char *);
+extern void copyInternalEngineVars_SP();
+extern boolean LoadNativeLevel_SP(char *, int);
 
 extern void BackToFront_SP(void);
 extern void BlitScreenToBitmap_SP(Bitmap *);
@@ -77,4 +153,4 @@ extern void DrawGameDoorValues_SP();
 extern void LoadEngineSnapshotValues_SP();
 extern void SaveEngineSnapshotValues_SP();
 
-#endif /* EXPORT_H */
+#endif /* GAME_SP_EXPORT_H */