X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ffiles.c;h=d38858203b8fb2a5e527bedd43e22a28c9cbb18b;hp=2ca9976684473f08bf0f9cbf1fe4954e79b0b1c5;hb=6460301d715f72f7247b3070a5d98c0b56cfdb67;hpb=5ac5eb15bb34f4c10a7146f05eae315d2b7cc12f diff --git a/src/files.c b/src/files.c index 2ca99766..d3885820 100644 --- a/src/files.c +++ b/src/files.c @@ -7623,7 +7623,7 @@ static int getTapePosSize(struct TapeInfo *tape) { int tape_pos_size = 0; - if (!tape->use_mouse) + if (tape->event_mask == GAME_EVENTS_KEYS) tape_pos_size += tape->num_participating_players; else tape_pos_size += 3; // x and y position and mouse button mask @@ -7633,6 +7633,42 @@ static int getTapePosSize(struct TapeInfo *tape) return tape_pos_size; } +static int getGameEventMaskFromTapeEventValue(int value) +{ + switch (value) + { + case TAPE_EVENTS_KEYS_ONLY: + return GAME_EVENTS_KEYS; + + case TAPE_EVENTS_MOUSE_ONLY: + return GAME_EVENTS_MOUSE; + + case TAPE_EVENTS_KEYS_AND_MOUSE: + return GAME_EVENTS_KEYS | GAME_EVENTS_MOUSE; + + default: + return GAME_EVENTS_DEFAULT; + } +} + +static int getTapeEventValueFromGameEventMask(int mask) +{ + switch (mask) + { + case GAME_EVENTS_KEYS: + return TAPE_EVENTS_KEYS_ONLY; + + case GAME_EVENTS_MOUSE: + return TAPE_EVENTS_MOUSE_ONLY; + + case GAME_EVENTS_KEYS | GAME_EVENTS_MOUSE: + return TAPE_EVENTS_KEYS_AND_MOUSE; + + default: + return TAPE_EVENTS_DEFAULT; + } +} + static int LoadTape_VERS(File *file, int chunk_size, struct TapeInfo *tape) { tape->file_version = getFileVersion(file); @@ -7668,7 +7704,7 @@ static int LoadTape_HEAD(File *file, int chunk_size, struct TapeInfo *tape) } } - tape->use_mouse = (getFile8Bit(file) == 1 ? TRUE : FALSE); + tape->event_mask = getGameEventMaskFromTapeEventValue(getFile8Bit(file)); ReadUnusedBytesFromFile(file, TAPE_CHUNK_HEAD_UNUSED); @@ -7728,7 +7764,7 @@ static int LoadTape_BODY(File *file, int chunk_size, struct TapeInfo *tape) break; } - if (tape->use_mouse) + if (tape->event_mask == GAME_EVENTS_MOUSE) { tape->pos[i].action[TAPE_ACTION_LX] = getFile8Bit(file); tape->pos[i].action[TAPE_ACTION_LY] = getFile8Bit(file); @@ -8070,7 +8106,7 @@ static void SaveTape_HEAD(FILE *file, struct TapeInfo *tape) putFile8Bit(file, store_participating_players); - putFile8Bit(file, (tape->use_mouse ? 1 : 0)); + putFile8Bit(file, getTapeEventValueFromGameEventMask(tape->event_mask)); // unused bytes not at the end here for 4-byte alignment of engine_version WriteUnusedBytesToFile(file, TAPE_CHUNK_HEAD_UNUSED); @@ -8097,7 +8133,7 @@ static void SaveTape_BODY(FILE *file, struct TapeInfo *tape) for (i = 0; i < tape->length; i++) { - if (tape->use_mouse) + if (tape->event_mask == GAME_EVENTS_MOUSE) { putFile8Bit(file, tape->pos[i].action[TAPE_ACTION_LX]); putFile8Bit(file, tape->pos[i].action[TAPE_ACTION_LY]);