rnd-20100309-1-src
[rocksndiamonds.git] / src / game_sp / export.h
index ffd787839b2e2b0be04ccd905108ae39e1852dad..9e374dc52e752118fc3068b545105bea0ff75524 100644 (file)
 
 #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)
+#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)
+
+#if 0
+#define SP_SCREEN_BUFFER_XSIZE         (SCR_FIELDX + 2)
+#define SP_SCREEN_BUFFER_YSIZE         (SCR_FIELDY + 2)
+#endif
 
 #define SP_FRAMES_PER_SECOND           35
 #define SP_MAX_TAPE_LEN                        64010   /* (see "spfix63.doc") */
@@ -80,20 +87,42 @@ struct GlobalInfo_SP
 
 struct GameInfo_SP
 {
+  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 */
+  int preceding_buffer_size;
+};
+
+struct DemoInfo_SP
+{
+  boolean is_available;                /* structure contains valid demo */
+
+  int level_nr;                        /* number of corresponding level */
+
+  int length;                  /* number of demo entries */
+  byte data[SP_MAX_TAPE_LEN];  /* array of demo entries */
 };
 
 struct LevelInfo_SP
 {
   LevelInfoType header;
-
-  byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
+  byte header_raw_bytes[SP_HEADER_SIZE];
 
   int width, height;
 
-  boolean demo_available;
+  byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
+
+  struct DemoInfo_SP demo;
 
-  byte demo[SP_MAX_TAPE_LEN];
-  int demo_length;
+  /* used for runtime values */
+  struct GameInfo_SP *game_sp;
 };
 
 struct GraphicInfo_SP
@@ -117,6 +146,14 @@ 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];
 };
 
 
@@ -125,6 +162,7 @@ struct EngineSnapshotInfo_SP
 /* ------------------------------------------------------------------------- */
 
 extern struct GlobalInfo_SP global_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];
@@ -141,6 +179,7 @@ extern unsigned int InitEngineRandom_SP(long);
 extern void setLevelInfoToDefaults_SP();
 extern void copyInternalEngineVars_SP();
 extern boolean LoadNativeLevel_SP(char *, int);
+extern void SaveNativeLevel_SP(char *);
 
 extern void BackToFront_SP(void);
 extern void BlitScreenToBitmap_SP(Bitmap *);
@@ -150,4 +189,7 @@ extern void DrawGameDoorValues_SP();
 extern void LoadEngineSnapshotValues_SP();
 extern void SaveEngineSnapshotValues_SP();
 
+extern int map_key_RND_to_SP(int);
+extern int map_key_SP_to_RND(int);
+
 #endif /* GAME_SP_EXPORT_H */