X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fgame_sp%2Fexport.h;h=1956c3a0a551145a099c4a49f4cff1103f84f85c;hp=f54bb28aee2c012a4b1405d5e4a0a630147393ba;hb=855700d73bbef8bb1248fe0ac735738478d6044b;hpb=572a4bab20b6f36ef1a4782094b27ac5a703a476 diff --git a/src/game_sp/export.h b/src/game_sp/export.h index f54bb28a..1956c3a0 100644 --- a/src/game_sp/export.h +++ b/src/game_sp/export.h @@ -14,25 +14,39 @@ #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 */ /* ------------------------------------------------------------------------- */ @@ -40,11 +54,7 @@ #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 @@ -70,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 } LevelInfoType; #define HAS_LevelInfoType #endif @@ -87,6 +93,18 @@ 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 @@ -109,6 +127,9 @@ struct LevelInfo_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 @@ -132,6 +153,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]; }; @@ -140,33 +169,40 @@ struct EngineSnapshotInfo_SP /* ------------------------------------------------------------------------- */ 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 */