changed "http" to "https" in URLs
[rocksndiamonds.git] / src / files.c
index 95256480249e9e672862aed626d16d9629e8358f..c07043450023b9650e5102c5d9a9cb45b4e29f55 100644 (file)
@@ -4,7 +4,7 @@
 // (c) 1995-2014 by Artsoft Entertainment
 //                         Holger Schemel
 //                 info@artsoft.org
-//                 http://www.artsoft.org/
+//                 https://www.artsoft.org/
 // ----------------------------------------------------------------------------
 // files.c
 // ============================================================================
@@ -3541,6 +3541,8 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level)
   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++)
@@ -3649,9 +3651,9 @@ static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level)
   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] =
@@ -6792,8 +6794,8 @@ static int SaveLevel_BODY(FILE *file, struct LevelInfo *level)
   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
@@ -7623,10 +7625,10 @@ static int getTapePosSize(struct TapeInfo *tape)
 {
   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
@@ -7634,40 +7636,25 @@ static int getTapePosSize(struct TapeInfo *tape)
   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)
@@ -7705,7 +7692,7 @@ static int LoadTape_HEAD(File *file, int chunk_size, struct TapeInfo *tape)
       }
     }
 
-    tape->event_mask = getGameEventMaskFromTapeEventValue(getFile8Bit(file));
+    setTapeActionFlags(tape, getFile8Bit(file));
 
     ReadUnusedBytesFromFile(file, TAPE_CHUNK_HEAD_UNUSED);
 
@@ -7765,7 +7752,7 @@ static int LoadTape_BODY(File *file, int chunk_size, struct TapeInfo *tape)
       break;
     }
 
-    if (tape->event_mask & GAME_EVENTS_KEYS)
+    if (tape->use_key_actions)
     {
       for (j = 0; j < MAX_PLAYERS; j++)
       {
@@ -7776,7 +7763,7 @@ static int LoadTape_BODY(File *file, int chunk_size, struct TapeInfo *tape)
       }
     }
 
-    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);
@@ -8106,7 +8093,7 @@ static void SaveTape_HEAD(FILE *file, struct TapeInfo *tape)
 
   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);
@@ -8133,14 +8120,14 @@ static void SaveTape_BODY(FILE *file, struct TapeInfo *tape)
 
   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]);
@@ -8520,6 +8507,10 @@ static struct TokenInfo global_setup_tokens[] =
     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"
@@ -9191,6 +9182,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   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;