rnd-20060430-1-src
[rocksndiamonds.git] / src / editor.c
index 4fccecf376ebf57048c8705ce05f6640b763f6fe..631a5756fa9584a3c4969fac84c8c39d82d03da1 100644 (file)
@@ -1550,6 +1550,7 @@ static struct ValueTextInfo options_change_direct_action[] =
   { CE_IMPACT,                 "impact (on something)"         },
   { CE_SMASHED,                        "smashed (from above)"          },
   { CE_VALUE_GETS_ZERO,                "CE value gets 0"               },
+  { CE_SCORE_GETS_ZERO,                "CE score gets 0"               },
 
   { -1,                                NULL                            }
 };
@@ -1576,6 +1577,7 @@ static struct ValueTextInfo options_change_other_action[] =
   { CE_MOVE_OF_X,              "move of"                       },
   { CE_CREATION_OF_X,          "creation of"                   },
   { CE_VALUE_GETS_ZERO_OF_X,   "CE value gets 0 of"            },
+  { CE_SCORE_GETS_ZERO_OF_X,   "CE score gets 0 of"            },
 
   { -1,                                NULL                            }
 };
@@ -1767,11 +1769,13 @@ static struct ValueTextInfo options_action_arg_number[] =
   { CA_ARG_NUMBER_LEVEL_GEMS,  "gems"                          },
   { CA_ARG_NUMBER_LEVEL_SCORE, "score"                         },
   { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value"                     },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        " of"                           },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        " element]"                     },
+  { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value]"                    },
   { CA_ARG_ELEMENT_CV_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_CV_TRIGGER, "trigger"                       },
+  { CA_ARG_UNDEFINED,          " "                             },
+  { CA_ARG_ELEMENT_CS_HEADLINE,        "[CE score]"                    },
+  { CA_ARG_ELEMENT_CS_TARGET,  "target"                        },
+  { CA_ARG_ELEMENT_CS_TRIGGER, "trigger"                       },
 
   { -1,                                NULL                            }
 };
@@ -1802,12 +1806,14 @@ static struct ValueTextInfo options_action_arg_value[] =
   { CA_ARG_NUMBER_LEVEL_GEMS,  "gems"                          },
   { CA_ARG_NUMBER_LEVEL_SCORE, "score"                         },
   { CA_ARG_UNDEFINED,          " "                             },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value"                     },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        " of"                           },
-  { CA_ARG_ELEMENT_CV_HEADLINE,        " element]"                     },
+  { CA_ARG_ELEMENT_CV_HEADLINE,        "[CE value]"                    },
   { CA_ARG_ELEMENT_CV_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_CV_TRIGGER, "trigger"                       },
   { CA_ARG_UNDEFINED,          " "                             },
+  { CA_ARG_ELEMENT_CS_HEADLINE,        "[CE score]"                    },
+  { CA_ARG_ELEMENT_CS_TARGET,  "target"                        },
+  { CA_ARG_ELEMENT_CS_TRIGGER, "trigger"                       },
+  { CA_ARG_UNDEFINED,          " "                             },
   { CA_ARG_ELEMENT_NR_HEADLINE,        "[element]"                     },
   { CA_ARG_ELEMENT_NR_TARGET,  "target"                        },
   { CA_ARG_ELEMENT_NR_TRIGGER, "trigger"                       },
@@ -3369,6 +3375,11 @@ static int editor_el_emerald_mine_club[] =
   EL_EM_DYNAMITE_ACTIVE,
   EL_EMPTY,
   EL_EMPTY,
+
+  EL_YAMYAM_LEFT,
+  EL_YAMYAM_RIGHT,
+  EL_YAMYAM_UP,
+  EL_YAMYAM_DOWN,
 };
 static int *editor_hl_emerald_mine_club_ptr = editor_hl_emerald_mine_club;
 static int *editor_el_emerald_mine_club_ptr = editor_el_emerald_mine_club;
@@ -4216,7 +4227,12 @@ static int editor_el_custom[] =
   EL_TRIGGER_PLAYER,
   EL_TRIGGER_ELEMENT,
   EL_TRIGGER_CE_VALUE,
-  EL_EMPTY
+  EL_TRIGGER_CE_SCORE,
+
+  EL_EMPTY,
+  EL_EMPTY,
+  EL_CURRENT_CE_VALUE,
+  EL_CURRENT_CE_SCORE
 };
 static int *editor_hl_custom_ptr = editor_hl_custom;
 static int *editor_el_custom_ptr = editor_el_custom;
@@ -4616,7 +4632,7 @@ static void ReinitializeElementList()
       if (element >= NUM_FILE_ELEMENTS)
        Error(ERR_WARN, "editor element %d is runtime element", element);
 
-      if (strcmp(getElementInfoText(element), INFOTEXT_UNKNOWN_ELEMENT) == 0)
+      if (strEqual(getElementInfoText(element), INFOTEXT_UNKNOWN_ELEMENT))
        Error(ERR_WARN, "no element description for element %d", element);
     }
   }
@@ -6661,6 +6677,7 @@ static void CopyCustomElementPropertiesToEditor(int element)
      HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT :
      HAS_CHANGE_EVENT(element, CE_SMASHED) ? CE_SMASHED :
      HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO) ? CE_VALUE_GETS_ZERO :
+     HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO) ? CE_SCORE_GETS_ZERO :
      custom_element_change.direct_action);
 
   /* set "change by other element action" selectbox help value */
@@ -6685,6 +6702,7 @@ static void CopyCustomElementPropertiesToEditor(int element)
      HAS_CHANGE_EVENT(element, CE_MOVE_OF_X) ? CE_MOVE_OF_X :
      HAS_CHANGE_EVENT(element, CE_CREATION_OF_X) ? CE_CREATION_OF_X :
      HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO_OF_X) ? CE_VALUE_GETS_ZERO_OF_X :
+     HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO_OF_X) ? CE_SCORE_GETS_ZERO_OF_X :
      custom_element_change.other_action);
 }
 
@@ -6802,6 +6820,7 @@ static void CopyCustomElementPropertiesToGame(int element)
   custom_element_change_events[CE_IMPACT] = FALSE;
   custom_element_change_events[CE_SMASHED] = FALSE;
   custom_element_change_events[CE_VALUE_GETS_ZERO] = FALSE;
+  custom_element_change_events[CE_SCORE_GETS_ZERO] = FALSE;
   custom_element_change_events[custom_element_change.direct_action] =
     custom_element_change_events[CE_BY_DIRECT_ACTION];
 
@@ -6826,6 +6845,7 @@ static void CopyCustomElementPropertiesToGame(int element)
   custom_element_change_events[CE_MOVE_OF_X] = FALSE;
   custom_element_change_events[CE_CREATION_OF_X] = FALSE;
   custom_element_change_events[CE_VALUE_GETS_ZERO_OF_X] = FALSE;
+  custom_element_change_events[CE_SCORE_GETS_ZERO_OF_X] = FALSE;
   custom_element_change_events[custom_element_change.other_action] =
     custom_element_change_events[CE_BY_OTHER_ACTION];
 
@@ -7577,6 +7597,16 @@ static void DrawPropertiesInfo()
   int screen_line = 0;
   int i, x, y;
 
+#if 1
+  if (setup.editor.show_element_token)
+  {
+    DrawTextF(pad_x, pad_y + screen_line++ * font2_height, FONT_TEXT_3,
+             "[%s]", element_info[properties_element].token_name);
+    screen_line++;
+  }
+
+#else
+
 #if DEBUG
   if (IS_CUSTOM_ELEMENT(properties_element))
   {
@@ -7590,6 +7620,7 @@ static void DrawPropertiesInfo()
              "[Group Element %d]", properties_element - EL_GROUP_START + 1);
     screen_line++;
   }
+#endif
 #endif
 
   /* ----- print number of elements / percentage of this element in level */
@@ -7691,6 +7722,10 @@ static struct
   { EL_BD_FIREFLY_DOWN, &level.score[SC_SPACESHIP],    TEXT_SMASHING   },
   { EL_SP_SNIKSNAK,    &level.score[SC_SPACESHIP],     TEXT_SMASHING   },
   { EL_YAMYAM,         &level.score[SC_YAMYAM],        TEXT_SMASHING   },
+  { EL_YAMYAM_LEFT,    &level.score[SC_YAMYAM],        TEXT_SMASHING   },
+  { EL_YAMYAM_RIGHT,   &level.score[SC_YAMYAM],        TEXT_SMASHING   },
+  { EL_YAMYAM_UP,      &level.score[SC_YAMYAM],        TEXT_SMASHING   },
+  { EL_YAMYAM_DOWN,    &level.score[SC_YAMYAM],        TEXT_SMASHING   },
   { EL_DARK_YAMYAM,    &level.score[SC_YAMYAM],        TEXT_SMASHING   },
   { EL_ROBOT,          &level.score[SC_ROBOT],         TEXT_SMASHING   },
   { EL_PACMAN,         &level.score[SC_PACMAN],        TEXT_SMASHING   },
@@ -7841,7 +7876,11 @@ static void DrawPropertiesConfig()
 
     if (IS_AMOEBOID(properties_element))
       MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT);
-    else if (properties_element == EL_YAMYAM)
+    else if (properties_element == EL_YAMYAM ||
+            properties_element == EL_YAMYAM_LEFT ||
+            properties_element == EL_YAMYAM_RIGHT ||
+            properties_element == EL_YAMYAM_UP ||
+            properties_element == EL_YAMYAM_DOWN)
       DrawYamYamContentAreas();
     else if (properties_element == EL_EMC_MAGIC_BALL)
     {
@@ -9919,6 +9958,37 @@ void HandleLevelEditorKeyInput(Key key)
 
        break;
 
+      case KSYM_Insert:
+      case KSYM_Delete:
+       for (i = 0; i < num_editor_elements; i++)
+       {
+         int e = editor_elements[i];
+
+         if ((key == KSYM_Insert &&
+              (e == EL_INTERNAL_CASCADE_CE ||
+               e == EL_INTERNAL_CASCADE_CE_ACTIVE)) ||
+             (key == KSYM_Delete &&
+              (e == EL_INTERNAL_CASCADE_GE ||
+               e == EL_INTERNAL_CASCADE_GE_ACTIVE)))
+           break;
+       }
+
+       if (i < num_editor_elements)
+       {
+         element_shift = i;
+
+         if (element_shift > num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS)
+           element_shift = num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS;
+
+         ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL],
+                      GDI_SCROLLBAR_ITEM_POSITION,
+                      element_shift / ED_ELEMENTLIST_BUTTONS_HORIZ, GDI_END);
+
+         ModifyEditorElementList();
+       }
+
+       break;
+
       case KSYM_Escape:
         if (edit_mode == ED_MODE_DRAWING)
        {