projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnd-20040807-1-src
[rocksndiamonds.git]
/
src
/
editor.c
diff --git
a/src/editor.c
b/src/editor.c
index 5dc75613970142144db6e289a234b90550988c35..de334bb5241a7d9966b7deb138afdd1f8a24c4a5 100644
(file)
--- a/
src/editor.c
+++ b/
src/editor.c
@@
-5509,6
+5509,8
@@
static void ResetUndoBuffer()
undo_buffer_position = -1;
undo_buffer_steps = -1;
CopyLevelToUndoBuffer(UNDO_IMMEDIATE);
undo_buffer_position = -1;
undo_buffer_steps = -1;
CopyLevelToUndoBuffer(UNDO_IMMEDIATE);
+
+ level.changed = FALSE;
}
static void DrawEditModeWindow()
}
static void DrawEditModeWindow()
@@
-5526,15
+5528,18
@@
static void DrawEditModeWindow()
static boolean LevelChanged()
{
static boolean LevelChanged()
{
- boolean
level
_changed = FALSE;
+ boolean
field
_changed = FALSE;
int x, y;
int x, y;
+ if (leveldir_current->readonly)
+ return FALSE;
+
for (y = 0; y < lev_fieldy; y++)
for (x = 0; x < lev_fieldx; x++)
if (Feld[x][y] != level.field[x][y])
for (y = 0; y < lev_fieldy; y++)
for (x = 0; x < lev_fieldx; x++)
if (Feld[x][y] != level.field[x][y])
-
level
_changed = TRUE;
+
field
_changed = TRUE;
- return
level_changed
;
+ return
(level.changed || field_changed)
;
}
static boolean LevelContainsPlayer()
}
static boolean LevelContainsPlayer()
@@
-5542,6
+5547,8
@@
static boolean LevelContainsPlayer()
boolean player_found = FALSE;
int x, y;
boolean player_found = FALSE;
int x, y;
+ return TRUE; /* !!! CURRENTLY DEACTIVATED !!! */
+
for (y = 0; y < lev_fieldy; y++)
for (x = 0; x < lev_fieldx; x++)
if (Feld[x][y] == EL_PLAYER_1 ||
for (y = 0; y < lev_fieldy; y++)
for (x = 0; x < lev_fieldx; x++)
if (Feld[x][y] == EL_PLAYER_1 ||
@@
-5741,6
+5748,8
@@
static boolean CopyCustomElement(int element_old, int element_new,
element_old = (IS_CUSTOM_ELEMENT(element_new) ?
EL_INTERNAL_CLIPBOARD_CUSTOM : EL_INTERNAL_CLIPBOARD_GROUP);
copy_mode = GADGET_ID_CUSTOM_COPY_TO;
element_old = (IS_CUSTOM_ELEMENT(element_new) ?
EL_INTERNAL_CLIPBOARD_CUSTOM : EL_INTERNAL_CLIPBOARD_GROUP);
copy_mode = GADGET_ID_CUSTOM_COPY_TO;
+
+ level.changed = TRUE;
}
else if (IS_CUSTOM_ELEMENT(element_old) && !IS_CUSTOM_ELEMENT(element_new))
{
}
else if (IS_CUSTOM_ELEMENT(element_old) && !IS_CUSTOM_ELEMENT(element_new))
{
@@
-5754,6
+5763,10
@@
static boolean CopyCustomElement(int element_old, int element_new,
return FALSE;
}
return FALSE;
}
+ else
+ {
+ level.changed = TRUE;
+ }
if (copy_mode == GADGET_ID_CUSTOM_COPY_FROM)
{
if (copy_mode == GADGET_ID_CUSTOM_COPY_FROM)
{
@@
-5999,6
+6012,7
@@
static void CopyCustomElementPropertiesToGame(int element)
/* mark that this custom element has been modified */
custom_element.modified_settings = TRUE;
/* mark that this custom element has been modified */
custom_element.modified_settings = TRUE;
+ level.changed = TRUE;
if (level.use_custom_template)
{
if (level.use_custom_template)
{
@@
-6156,6
+6170,7
@@
static void CopyGroupElementPropertiesToGame(int element)
/* mark that this group element has been modified */
element_info[element].modified_settings = TRUE;
/* mark that this group element has been modified */
element_info[element].modified_settings = TRUE;
+ level.changed = TRUE;
}
static void CopyClassicElementPropertiesToGame(int element)
}
static void CopyClassicElementPropertiesToGame(int element)
@@
-7903,6
+7918,8
@@
static int DrawLevelText(int sx, int sy, char letter, int mode)
DrawLevelText(start_sx, sy + 1, 0, TEXT_SETCURSOR);
else
DrawLevelText(0, 0, 0, TEXT_END);
DrawLevelText(start_sx, sy + 1, 0, TEXT_SETCURSOR);
else
DrawLevelText(0, 0, 0, TEXT_END);
+
+ level.changed = TRUE;
}
break;
}
break;
@@
-7991,6
+8008,8
@@
static void CopyLevelToUndoBuffer(int mode)
SetBorderElement();
if (BorderElement != last_border_element)
DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
SetBorderElement();
if (BorderElement != last_border_element)
DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
+
+ level.changed = TRUE;
}
static void RandomPlacement(int new_element)
}
static void RandomPlacement(int new_element)
@@
-8024,24
+8043,21
@@
static void RandomPlacement(int new_element)
for (y = 0; y < lev_fieldy; y++)
if (free_position[x][y])
Feld[x][y] = new_element;
for (y = 0; y < lev_fieldy; y++)
if (free_position[x][y])
Feld[x][y] = new_element;
-
- DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
- CopyLevelToUndoBuffer(UNDO_IMMEDIATE);
-
- return;
}
}
-
- while (num_elements > 0)
+ else
{
{
- x = RND(lev_fieldx);
- y = RND(lev_fieldy);
-
- /* don't place element at the same position twice */
- if (free_position[x][y])
+ while (num_elements > 0)
{
{
- free_position[x][y] = FALSE;
- Feld[x][y] = new_element;
- num_elements--;
+ x = RND(lev_fieldx);
+ y = RND(lev_fieldy);
+
+ /* don't place element at the same position twice */
+ if (free_position[x][y])
+ {
+ free_position[x][y] = FALSE;
+ Feld[x][y] = new_element;
+ num_elements--;
+ }
}
}
}
}
@@
-8414,6
+8430,7
@@
static void HandleCounterButtons(struct GadgetInfo *gi)
{
if (gadget_id == counterbutton_info[counter_id].gadget_id_text)
ModifyEditorCounter(counter_id, *counter_value);
{
if (gadget_id == counterbutton_info[counter_id].gadget_id_text)
ModifyEditorCounter(counter_id, *counter_value);
+
return;
}
}
return;
}
}
@@
-8423,6
+8440,16
@@
static void HandleCounterButtons(struct GadgetInfo *gi)
else
ModifyEditorCounter(counter_id, *counter_value + step);
else
ModifyEditorCounter(counter_id, *counter_value + step);
+ if (counter_id == ED_COUNTER_ID_SELECT_LEVEL)
+ {
+ LoadLevel(level_nr);
+ TapeErase();
+ ResetUndoBuffer();
+ DrawEditModeWindow();
+
+ return;
+ }
+
switch (counter_id)
{
case ED_COUNTER_ID_ELEMENT_CONTENT:
switch (counter_id)
{
case ED_COUNTER_ID_ELEMENT_CONTENT:
@@
-8445,13
+8472,6
@@
static void HandleCounterButtons(struct GadgetInfo *gi)
lev_fieldy = level.fieldy;
break;
lev_fieldy = level.fieldy;
break;
- case ED_COUNTER_ID_SELECT_LEVEL:
- LoadLevel(level_nr);
- TapeErase();
- ResetUndoBuffer();
- DrawEditModeWindow();
- break;
-
default:
break;
}
default:
break;
}
@@
-8461,6
+8481,8
@@
static void HandleCounterButtons(struct GadgetInfo *gi)
(counter_id >= ED_COUNTER_ID_CHANGE_FIRST &&
counter_id <= ED_COUNTER_ID_CHANGE_LAST))
CopyElementPropertiesToGame(properties_element);
(counter_id >= ED_COUNTER_ID_CHANGE_FIRST &&
counter_id <= ED_COUNTER_ID_CHANGE_LAST))
CopyElementPropertiesToGame(properties_element);
+
+ level.changed = TRUE;
}
static void HandleTextInputGadgets(struct GadgetInfo *gi)
}
static void HandleTextInputGadgets(struct GadgetInfo *gi)
@@
-8475,6
+8497,8
@@
static void HandleTextInputGadgets(struct GadgetInfo *gi)
ModifyEditorElementList(); /* update changed button info text */
}
ModifyEditorElementList(); /* update changed button info text */
}
+
+ level.changed = TRUE;
}
static void HandleTextAreaGadgets(struct GadgetInfo *gi)
}
static void HandleTextAreaGadgets(struct GadgetInfo *gi)
@@
-8482,6
+8506,8
@@
static void HandleTextAreaGadgets(struct GadgetInfo *gi)
int type_id = gi->custom_type_id;
strcpy(textarea_info[type_id].value, gi->textarea.value);
int type_id = gi->custom_type_id;
strcpy(textarea_info[type_id].value, gi->textarea.value);
+
+ level.changed = TRUE;
}
static void HandleSelectboxGadgets(struct GadgetInfo *gi)
}
static void HandleSelectboxGadgets(struct GadgetInfo *gi)
@@
-8502,7
+8528,11
@@
static void HandleSelectboxGadgets(struct GadgetInfo *gi)
(type_id >= ED_SELECTBOX_ID_CHANGE_FIRST &&
type_id <= ED_SELECTBOX_ID_CHANGE_LAST) ||
(type_id == ED_SELECTBOX_ID_GROUP_CHOICE_MODE))
(type_id >= ED_SELECTBOX_ID_CHANGE_FIRST &&
type_id <= ED_SELECTBOX_ID_CHANGE_LAST) ||
(type_id == ED_SELECTBOX_ID_GROUP_CHOICE_MODE))
+ {
CopyElementPropertiesToGame(properties_element);
CopyElementPropertiesToGame(properties_element);
+
+ level.changed = TRUE;
+ }
}
static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
}
static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
@@
-8543,6
+8573,8
@@
static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
setElementChangeInfoToDefaults(ei->change);
DrawPropertiesWindow();
setElementChangeInfoToDefaults(ei->change);
DrawPropertiesWindow();
+
+ level.changed = TRUE;
}
else if (type_id == ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE &&
custom_element.num_change_pages > MIN_CHANGE_PAGES)
}
else if (type_id == ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE &&
custom_element.num_change_pages > MIN_CHANGE_PAGES)
@@
-8556,6
+8588,8
@@
static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
setElementChangePages(ei, ei->num_change_pages - 1);
DrawPropertiesWindow();
setElementChangePages(ei, ei->num_change_pages - 1);
DrawPropertiesWindow();
+
+ level.changed = TRUE;
}
}
}
}
@@
-8589,9
+8623,13
@@
static void HandleGraphicbuttonGadgets(struct GadgetInfo *gi)
element_info[EL_INTERNAL_CLIPBOARD_CHANGE].change_page[0] =
ei->change_page[current_change_page];
else if (type_id == ED_GRAPHICBUTTON_ID_PASTE_CHANGE_PAGE)
element_info[EL_INTERNAL_CLIPBOARD_CHANGE].change_page[0] =
ei->change_page[current_change_page];
else if (type_id == ED_GRAPHICBUTTON_ID_PASTE_CHANGE_PAGE)
+ {
ei->change_page[current_change_page] =
element_info[EL_INTERNAL_CLIPBOARD_CHANGE].change_page[0];
ei->change_page[current_change_page] =
element_info[EL_INTERNAL_CLIPBOARD_CHANGE].change_page[0];
+ level.changed = TRUE;
+ }
+
DrawPropertiesWindow();
}
}
DrawPropertiesWindow();
}
}
@@
-8600,6
+8638,8
@@
static void HandleRadiobuttons(struct GadgetInfo *gi)
{
*radiobutton_info[gi->custom_type_id].value =
radiobutton_info[gi->custom_type_id].checked_value;
{
*radiobutton_info[gi->custom_type_id].value =
radiobutton_info[gi->custom_type_id].checked_value;
+
+ level.changed = TRUE;
}
static void HandleCheckbuttons(struct GadgetInfo *gi)
}
static void HandleCheckbuttons(struct GadgetInfo *gi)
@@
-8642,6
+8682,8
@@
static void HandleCheckbuttons(struct GadgetInfo *gi)
DrawEditModeWindow();
}
DrawEditModeWindow();
}
+
+ level.changed = TRUE;
}
static void HandleControlButtons(struct GadgetInfo *gi)
}
static void HandleControlButtons(struct GadgetInfo *gi)
@@
-8907,6
+8949,7
@@
static void HandleControlButtons(struct GadgetInfo *gi)
for (x = 0; x < MAX_LEV_FIELDX; x++)
for (y = 0; y < MAX_LEV_FIELDY; y++)
Feld[x][y] = (button == 1 ? EL_EMPTY : new_element);
for (x = 0; x < MAX_LEV_FIELDX; x++)
for (y = 0; y < MAX_LEV_FIELDY; y++)
Feld[x][y] = (button == 1 ? EL_EMPTY : new_element);
+
CopyLevelToUndoBuffer(GADGET_ID_CLEAR);
DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
CopyLevelToUndoBuffer(GADGET_ID_CLEAR);
DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
@@
-8919,7
+8962,7
@@
static void HandleControlButtons(struct GadgetInfo *gi)
break;
}
break;
}
- if (!LevelContainsPlayer)
+ if (!LevelContainsPlayer
()
)
Request("No Level without Gregor Mc Duffin please !", REQ_CONFIRM);
else
{
Request("No Level without Gregor Mc Duffin please !", REQ_CONFIRM);
else
{
@@
-8936,11
+8979,13
@@
static void HandleControlButtons(struct GadgetInfo *gi)
if (new_level)
Request("Level saved !", REQ_CONFIRM);
if (new_level)
Request("Level saved !", REQ_CONFIRM);
+
+ level.changed = FALSE;
}
break;
case GADGET_ID_TEST:
}
break;
case GADGET_ID_TEST:
- if (!LevelContainsPlayer)
+ if (!LevelContainsPlayer
()
)
Request("No Level without Gregor Mc Duffin please !", REQ_CONFIRM);
else
{
Request("No Level without Gregor Mc Duffin please !", REQ_CONFIRM);
else
{