changed comments from old to new style (one-line comments only)
[rocksndiamonds.git] / src / game_sp / export.h
index 4438990fde5cd979b4fb9c66cf1b8b01ee844b4a..1ac2d311d4b40cbd6ab90ea0b4b4d47e3f00ba61 100644 (file)
@@ -1,45 +1,60 @@
 #ifndef GAME_SP_EXPORT_H
 #define GAME_SP_EXPORT_H
 
-/* ========================================================================= */
-/* functions and definitions exported from game_sp to main program           */
-/* ========================================================================= */
+// ============================================================================
+// functions and definitions exported from game_sp to main program
+// ============================================================================
 
-/* ------------------------------------------------------------------------- */
-/* constant definitions                                                      */
-/* ------------------------------------------------------------------------- */
+// ----------------------------------------------------------------------------
+// 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_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)
 
 #define SP_FRAMES_PER_SECOND           35
-#define SP_MAX_TAPE_LEN                        64010   /* (see "spfix63.doc") */
 
+// 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")
 
-/* ------------------------------------------------------------------------- */
-/* data structure definitions                                                */
-/* ------------------------------------------------------------------------- */
+
+// 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
+  short PortLocation; // = 2*(x+(y*60))                // big endian format
   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
@@ -65,11 +80,7 @@ typedef struct
   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
+  short DemoRandomSeed;                                // little endian format
 } LevelInfoType;
 #define HAS_LevelInfoType
 #endif
@@ -82,27 +93,43 @@ 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
+  char **preceding_buffer;
+  int preceding_buffer_size;
+
+  int scroll_xoffset, scroll_yoffset;
 };
 
 struct DemoInfo_SP
 {
-  boolean is_available;                /* structure contains valid demo */
+  boolean is_available;                // structure contains valid demo
 
-  int level_nr;                        /* number of corresponding level */
+  int level_nr;                        // number of corresponding level
 
-  int length;                  /* number of demo entries */
-  byte data[SP_MAX_TAPE_LEN];  /* array of demo entries */
+  int length;                  // number of demo entries
+  byte data[SP_MAX_TAPE_LEN];  // array of demo entries
 };
 
 struct LevelInfo_SP
 {
   LevelInfoType header;
+  byte header_raw_bytes[SP_HEADER_SIZE];
 
   int width, height;
 
   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
@@ -120,47 +147,62 @@ struct GraphicInfo_SP
   boolean has_crumbled_graphics;
   boolean preserve_background;
 
-  int unique_identifier;       /* used to identify needed screen updates */
+  int unique_identifier;       // used to identify needed screen updates
 };
 
 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];
 };
 
 
-/* ------------------------------------------------------------------------- */
-/* exported functions                                                        */
-/* ------------------------------------------------------------------------- */
+// ----------------------------------------------------------------------------
+// exported functions
+// ----------------------------------------------------------------------------
 
 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 struct EngineSnapshotInfo_SP engine_snapshot_sp;
 
-extern void sp_open_all();
-extern void sp_close_all();
+void sp_open_all(void);
+void sp_close_all(void);
+
+void InitPrecedingPlayfieldMemory(void);
+void InitGfxBuffers_SP(void);
+
+void InitGameEngine_SP(void);
+void GameActions_SP(byte *, boolean);
+
+unsigned int InitEngineRandom_SP(int);
 
-extern void InitGameEngine_SP();
-extern void GameActions_SP(byte *, boolean);
+void setLevelInfoToDefaults_SP(void);
+void copyInternalEngineVars_SP(void);
+boolean LoadNativeLevel_SP(char *, int, boolean);
+void SaveNativeLevel_SP(char *);
 
-extern unsigned int InitEngineRandom_SP(long);
+int getFieldbufferOffsetX_SP(void);
+int getFieldbufferOffsetY_SP(void);
 
-extern void setLevelInfoToDefaults_SP();
-extern void copyInternalEngineVars_SP();
-extern boolean LoadNativeLevel_SP(char *, int);
+void BlitScreenToBitmap_SP(Bitmap *);
+void RedrawPlayfield_SP(boolean);
 
-extern void BackToFront_SP(void);
-extern void BlitScreenToBitmap_SP(Bitmap *);
-extern void RedrawPlayfield_SP(boolean);
-extern void DrawGameDoorValues_SP();
+void LoadEngineSnapshotValues_SP(void);
+void SaveEngineSnapshotValues_SP(ListNode **);
 
-extern void LoadEngineSnapshotValues_SP();
-extern void SaveEngineSnapshotValues_SP();
+int map_key_RND_to_SP(int);
+int map_key_SP_to_RND(int);
 
-extern int map_key_RND_to_SP(int);
-extern int map_key_SP_to_RND(int);
+int getRedDiskReleaseFlag_SP(void);
 
-#endif /* GAME_SP_EXPORT_H */
+#endif // GAME_SP_EXPORT_H