cav->key_score = level->score[SC_KEY];
cav->exit_score = level->score[SC_TIME_BONUS];
+ cav->num_eater_arrays = level->num_yamyam_contents;
+
for (i = 0; i < MAX_ELEMENT_CONTENTS; i++)
for (y = 0; y < 3; y++)
for (x = 0; x < 3; x++)
level->score[SC_KEY] = cav->key_score;
level->score[SC_TIME_BONUS] = cav->exit_score;
- level->num_yamyam_contents = MAX_ELEMENT_CONTENTS;
+ level->num_yamyam_contents = cav->num_eater_arrays;
- for (i = 0; i < level->num_yamyam_contents; i++)
+ for (i = 0; i < MAX_ELEMENT_CONTENTS; i++)
for (y = 0; y < 3; y++)
for (x = 0; x < 3; x++)
level->yamyam_content[i].e[x][y] =
int chunk_size = 0;
int x, y;
- for (y = 0; y < level->fieldy; y++)
- for (x = 0; x < level->fieldx; x++)
+ for (y = 0; y < level->fieldy; y++)
+ for (x = 0; x < level->fieldx; x++)
if (level->encoding_16bit_field)
chunk_size += putFile16BitBE(file, level->field[x][y]);
else
{
int tape_pos_size = 0;
- if (tape->event_mask & GAME_EVENTS_KEYS)
+ if (tape->use_key_actions)
tape_pos_size += tape->num_participating_players;
- if (tape->event_mask & GAME_EVENTS_MOUSE)
+ if (tape->use_mouse_actions)
tape_pos_size += 3; // x and y position and mouse button mask
tape_pos_size += 1; // tape action delay value
return tape_pos_size;
}
-static int getGameEventMaskFromTapeEventValue(int value)
+static void setTapeActionFlags(struct TapeInfo *tape, int value)
{
- switch (value)
- {
- case TAPE_EVENTS_KEYS_ONLY:
- return GAME_EVENTS_KEYS;
+ tape->use_key_actions = FALSE;
+ tape->use_mouse_actions = FALSE;
- case TAPE_EVENTS_MOUSE_ONLY:
- return GAME_EVENTS_MOUSE;
+ if (value != TAPE_USE_MOUSE_ACTIONS_ONLY)
+ tape->use_key_actions = TRUE;
- case TAPE_EVENTS_KEYS_AND_MOUSE:
- return GAME_EVENTS_KEYS | GAME_EVENTS_MOUSE;
-
- default:
- return GAME_EVENTS_DEFAULT;
- }
+ if (value != TAPE_USE_KEY_ACTIONS_ONLY)
+ tape->use_mouse_actions = TRUE;
}
-static int getTapeEventValueFromGameEventMask(int mask)
+static int getTapeActionValue(struct TapeInfo *tape)
{
- 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;
- }
+ return (tape->use_key_actions &&
+ tape->use_mouse_actions ? TAPE_USE_KEY_AND_MOUSE_ACTIONS :
+ tape->use_key_actions ? TAPE_USE_KEY_ACTIONS_ONLY :
+ tape->use_mouse_actions ? TAPE_USE_MOUSE_ACTIONS_ONLY :
+ TAPE_ACTIONS_DEFAULT);
}
static int LoadTape_VERS(File *file, int chunk_size, struct TapeInfo *tape)
}
}
- tape->event_mask = getGameEventMaskFromTapeEventValue(getFile8Bit(file));
+ setTapeActionFlags(tape, getFile8Bit(file));
ReadUnusedBytesFromFile(file, TAPE_CHUNK_HEAD_UNUSED);
break;
}
- if (tape->event_mask & GAME_EVENTS_KEYS)
+ if (tape->use_key_actions)
{
for (j = 0; j < MAX_PLAYERS; j++)
{
}
}
- if (tape->event_mask & GAME_EVENTS_MOUSE)
+ if (tape->use_mouse_actions)
{
tape->pos[i].action[TAPE_ACTION_LX] = getFile8Bit(file);
tape->pos[i].action[TAPE_ACTION_LY] = getFile8Bit(file);
putFile8Bit(file, store_participating_players);
- putFile8Bit(file, getTapeEventValueFromGameEventMask(tape->event_mask));
+ putFile8Bit(file, getTapeActionValue(tape));
// unused bytes not at the end here for 4-byte alignment of engine_version
WriteUnusedBytesToFile(file, TAPE_CHUNK_HEAD_UNUSED);
for (i = 0; i < tape->length; i++)
{
- if (tape->event_mask & GAME_EVENTS_KEYS)
+ if (tape->use_key_actions)
{
for (j = 0; j < MAX_PLAYERS; j++)
if (tape->player_participates[j])
putFile8Bit(file, tape->pos[i].action[j]);
}
- if (tape->event_mask & GAME_EVENTS_MOUSE)
+ if (tape->use_mouse_actions)
{
putFile8Bit(file, tape->pos[i].action[TAPE_ACTION_LX]);
putFile8Bit(file, tape->pos[i].action[TAPE_ACTION_LY]);
TYPE_SWITCH,
&setup.prefer_aga_graphics, "prefer_aga_graphics"
},
+ {
+ TYPE_SWITCH,
+ &setup.prefer_lowpass_sounds, "prefer_lowpass_sounds"
+ },
{
TYPE_SWITCH,
&setup.game_speed_extended, "game_speed_extended"
si->quick_switch = FALSE;
si->input_on_focus = FALSE;
si->prefer_aga_graphics = TRUE;
+ si->prefer_lowpass_sounds = FALSE;
si->game_speed_extended = FALSE;
si->game_frame_delay = GAME_FRAME_DELAY;
si->sp_show_border_elements = FALSE;