added re-defining editor graphics for "effects" elements for BD engine
authorHolger Schemel <info@artsoft.org>
Sat, 23 Mar 2024 18:18:31 +0000 (19:18 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 23 Mar 2024 18:18:39 +0000 (19:18 +0100)
src/init.c
src/tools.c
src/tools.h

index 28d8aae2271a5bc73202fd4a0e10e25e891bf84f..7c19e260bf3e6054ca6d5030e6de4dc52ad57aba 100644 (file)
@@ -1271,6 +1271,19 @@ static void InitElementSpecialGraphicInfo(void)
       action = -1;
     }
 
+    // for BD effect editor graphics, replace element with effect element, if exists
+    if (action != -1 && special == GFX_SPECIAL_ARG_EDITOR)
+    {
+      int element_bd = map_element_RND_to_BD_effect(element, action);
+      int element_ef = map_element_BD_to_RND_cave(element_bd);
+
+      if (element_ef != EL_UNKNOWN)
+      {
+       element = element_ef;
+       action = -1;
+      }
+    }
+
     if (element >= MAX_NUM_ELEMENTS)
       continue;
 
index 26df75352df7bb0345e1c4bf7b5a8ad081ffd93e..babb4987171bd73559191c0429f79aed62e64432 100644 (file)
@@ -7491,6 +7491,50 @@ int map_element_RND_to_BD_cave(int element_rnd)
   return mapping_RND_to_BD[element_rnd];
 }
 
+int map_element_RND_to_BD_effect(int element_rnd, int action)
+{
+  static unsigned short mapping_RND_to_BD[NUM_FILE_ELEMENTS][NUM_ACTIONS];
+  static boolean mapping_initialized = FALSE;
+
+  if (!mapping_initialized)
+  {
+    int i, j;
+
+    // return "O_UNKNOWN" for all undefined elements in mapping array
+    for (i = 0; i < NUM_FILE_ELEMENTS; i++)
+      for (j = 0; j < NUM_ACTIONS; j++)
+       mapping_RND_to_BD[i][j] = O_UNKNOWN;
+
+    for (i = 0; bd_object_mapping_list[i].element_bd != -1; i++)
+    {
+      int element_rnd = bd_object_mapping_list[i].element_rnd;
+      int element_bd  = bd_object_mapping_list[i].element_bd;
+      int action      = bd_object_mapping_list[i].action;
+
+      if (action != -1)
+       mapping_RND_to_BD[element_rnd][action] = element_bd;
+    }
+
+    mapping_initialized = TRUE;
+  }
+
+  if (element_rnd < 0 || element_rnd >= NUM_FILE_ELEMENTS)
+  {
+    Warn("invalid RND element %d", element_rnd);
+
+    return O_UNKNOWN;
+  }
+
+  if (action < 0 || action >= NUM_ACTIONS)
+  {
+    Warn("invalid action %d", action);
+
+    return O_UNKNOWN;
+  }
+
+  return mapping_RND_to_BD[element_rnd][action];
+}
+
 int map_element_BD_to_RND_cave(int element_bd)
 {
   static unsigned short mapping_BD_to_RND[O_MAX_ALL];
index 97fa4c958326661077833a1ae237a9cbc487aff3..afad2e37948a973739006a7dcd05143f0745c2c1 100644 (file)
@@ -230,6 +230,7 @@ void CreateToolButtons(void);
 void FreeToolButtons(void);
 
 int map_element_RND_to_BD_cave(int);
+int map_element_RND_to_BD_effect(int, int);
 int map_element_BD_to_RND_cave(int);
 int map_element_BD_to_RND_game(int);