X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=7c4976892e53c51f0c3796312c0aa99f6be592e2;hb=046d80f9a1b3fad9d4d3d3aa92dcb3689849aebf;hp=ee7fe4e58942403d9a98ae51274dee45b79c515f;hpb=d0893e6987c21c25ec137438a18cfe1288362139;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index ee7fe4e5..7c497689 100644 --- a/src/editor.c +++ b/src/editor.c @@ -10,24 +10,24 @@ * q99492@pbhrzx.uni-paderborn.de * *----------------------------------------------------------* * editor.c * -* * -* Letzte Aenderung: 15.06.1995 * ***********************************************************/ #include "editor.h" #include "screens.h" -#include "game.h" #include "tools.h" #include "misc.h" +#include "buttons.h" +#include "files.h" static int level_xpos,level_ypos; static BOOL edit_mode; static BOOL name_typing; -static int element_shift; static int new_element1 = EL_MAUERWERK; static int new_element2 = EL_LEERRAUM; static int new_element3 = EL_ERDREICH; -static int editor_element[] = + +int element_shift; +int editor_element[] = { EL_SPIELFIGUR, EL_LEERRAUM, @@ -36,13 +36,18 @@ static int editor_element[] = EL_BETON, EL_MAUERWERK, + EL_MAUER_LEBT, EL_FELSBODEN, + EL_SIEB_LEER, + EL_SIEB2_LEER, + EL_KOKOSNUSS, + EL_BOMBE, EL_EDELSTEIN, EL_DIAMANT, - EL_KOKOSNUSS, - EL_BOMBE, + EL_EDELSTEIN2, + EL_EDELSTEIN3, EL_MORAST_LEER, EL_MORAST_VOLL, @@ -52,12 +57,12 @@ static int editor_element[] = EL_KAEFER, EL_FLIEGER, EL_MAMPFER, - EL_ZOMBIE, + EL_MAMPFER2, + EL_ZOMBIE, EL_PACMAN, EL_DYNAMIT_AUS, EL_DYNAMIT, - EL_ABLENK_AUS, EL_BADEWANNE1, EL_SALZSAEURE, @@ -70,15 +75,25 @@ static int editor_element[] = EL_UNSICHTBAR, EL_TROPFEN, - EL_AMOEBE1, - EL_AMOEBE2, - EL_AMOEBE3, + EL_AMOEBE_TOT, + EL_AMOEBE_NASS, + EL_AMOEBE_NORM, + EL_AMOEBE_VOLL, EL_LIFE, EL_LIFE_ASYNC, + EL_ABLENK_AUS, + + EL_ERZ_EDEL, + EL_ERZ_DIAM, + EL_ERZ_EDEL2, + EL_ERZ_EDEL3, + + EL_ZEIT_VOLL, + EL_ZEIT_LEER, - EL_ERZ_1, - EL_ERZ_2, + EL_DYNABOMB_NR, + EL_DYNABOMB_SZ, /* EL_BIRNE_AUS, @@ -189,7 +204,7 @@ static int editor_element[] = EL_CHAR_UE, EL_CHAR_COPY }; -static int elements_in_list = sizeof(editor_element)/sizeof(int); +int elements_in_list = sizeof(editor_element)/sizeof(int); void DrawLevelEd() { @@ -275,20 +290,21 @@ void DrawControlWindow() ClearWindow(); + /* Inhalt der Mampfer */ DrawText(ED_COUNT_GADGET_XPOS+1,SY+6, "Contents of a smashed cruncher:",FS_SMALL,FC_YELLOW); for(i=0;i<4;i++) for(y=0;y<4;y++) for(x=0;x<4;x++) { DrawMiniElement(1+5*i+x,2+y,EL_ERDREICH); XFillRectangle(display,drawto,gc, - SX+(2+5*i)*MINI_TILEX-MINI_TILEX/2-1, - SY+(3)*MINI_TILEY-MINI_TILEY/2-1, + SX+(1+5*i)*MINI_TILEX+MINI_TILEX/2-1, + SY+(2)*MINI_TILEY+MINI_TILEY/2-1, 3*MINI_TILEX+2,3*MINI_TILEY+2); } XCopyArea(display,drawto,drawto,gc, - SX+MINI_TILEX,SY+2*MINI_TILEY, + SX+1*MINI_TILEX,SY+2*MINI_TILEY, 4*5*MINI_TILEX,5*MINI_TILEY, - SX+MINI_TILEX-MINI_TILEX/2,SY+2*MINI_TILEY-MINI_TILEY/2); + SX+1*MINI_TILEX-MINI_TILEX/2,SY+2*MINI_TILEY-MINI_TILEY/2); for(i=0;i<4;i++) { for(y=0;y<3;y++) for(x=0;x<3;x++) @@ -299,6 +315,21 @@ void DrawControlWindow() int2str(i+1,1),FS_SMALL,FC_YELLOW); } + /* Inhalt der Amöbe */ + for(y=0;y<2;y++) for(x=0;x<2;x++) + { + DrawMiniElement(29+x,26+y,EL_ERDREICH); + XFillRectangle(display,drawto,gc, + SX+29*MINI_TILEX+MINI_TILEX/2-1, + SY+26*MINI_TILEY+MINI_TILEY/2-1, + MINI_TILEX+2,MINI_TILEY+2); + } + XCopyArea(display,drawto,drawto,gc, + SX+29*MINI_TILEX,SY+26*MINI_TILEY, + 3*MINI_TILEX,3*MINI_TILEY, + SX+29*MINI_TILEX-MINI_TILEX/2,SY+26*MINI_TILEY-MINI_TILEY/2); + DrawMiniElement(29,26,level.amoebe_inhalt); + for(i=0;i<11+3+2;i++) { XCopyArea(display,pix[PIX_DOOR],drawto,gc, @@ -357,7 +388,7 @@ void DrawControlWindow() DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+10*ED_COUNT_TEXT_YSIZE, "Score for each 10 seconds left",FS_SMALL,FC_YELLOW); DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+11*ED_COUNT_TEXT_YSIZE, - "Speed of the amoeba",FS_SMALL,FC_YELLOW); + "Speed of the amoeba / Content",FS_SMALL,FC_YELLOW); DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+12*ED_COUNT_TEXT_YSIZE, "Time for magic wall",FS_SMALL,FC_YELLOW); DrawText(ED_COUNT_TEXT_XPOS,ED_COUNT_TEXT_YPOS+13*ED_COUNT_TEXT_YSIZE, @@ -952,6 +983,25 @@ void LevelEd(int mx, int my, int button) } } + if (mx>=SX+29*MINI_TILEX && mx=SY+26*MINI_TILEY && my3) + return; + + new_element = (button==1 ? new_element1 : + button==2 ? new_element2 : + button==3 ? new_element3 : 0); + + if (new_element != level.amoebe_inhalt) + { + level.amoebe_inhalt = new_element; + DrawMiniElement(29,26,new_element); + } + } + if (mx>=SX+1*MINI_TILEX && mx=SY+2*MINI_TILEY && my=0 && pressed) - { - pressed = FALSE; - DrawEditButton(edit_button[choice] | ED_BUTTON_RELEASED); - } - else if (ON_EDIT_BUTTON(mx,my) && EDIT_BUTTON(mx,my)==choice) - { - if (!pressed) - DrawEditButton(edit_button[choice] | ED_BUTTON_PRESSED); - pressed = TRUE; - if (edit_button[choice]!=ED_BUTTON_CTRL && - edit_button[choice]!=ED_BUTTON_FILL) - return_code = 1<=0 && pressed) - { - pressed = FALSE; - DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_RELEASED); - } - else if (ON_CTRL_BUTTON(mx,my) && CTRL_BUTTON(mx,my)==choice && !pressed) - { - pressed = TRUE; - DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_PRESSED); - } - } - } - else /* Maustaste wieder losgelassen */ - { - if (ON_CTRL_BUTTON(mx,my) && CTRL_BUTTON(mx,my)==choice && pressed) - { - DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_RELEASED); - return_code = 1<<(choice+6); - choice = -1; - pressed = FALSE; - } - else - { - choice = -1; - pressed = FALSE; - } - } - - BackToFront(); - return(return_code); -} - -int CheckElemButtons(int mx, int my, int button) -{ - int return_code = -1; - static int choice = -1; - static BOOL pressed = FALSE; - - if (button) - { - if (!motion_status) /* Maustaste neu gedrückt */ - { - if (ON_ELEM_BUTTON(mx,my)) - { - choice = ELEM_BUTTON(mx,my); - pressed = TRUE; - DrawElemButton(choice,ED_BUTTON_PRESSED); - if (choice==ED_BUTTON_EUP || - choice==ED_BUTTON_EDOWN) - return_code = choice; - } - } - else /* Mausbewegung bei gedrückter Maustaste */ - { - if ((!ON_ELEM_BUTTON(mx,my) || ELEM_BUTTON(mx,my)!=choice) && - choice>=0 && pressed) - { - pressed = FALSE; - DrawElemButton(choice,ED_BUTTON_RELEASED); - } - else if (ON_ELEM_BUTTON(mx,my) && ELEM_BUTTON(mx,my)==choice) - { - if (!pressed) - DrawElemButton(choice,ED_BUTTON_PRESSED); - pressed = TRUE; - if (choice==ED_BUTTON_EUP || - choice==ED_BUTTON_EDOWN) - return_code = choice; - } - } - } - else /* Maustaste wieder losgelassen */ - { - if (ON_ELEM_BUTTON(mx,my) && ELEM_BUTTON(mx,my)==choice && pressed) - { - DrawElemButton(choice,ED_BUTTON_RELEASED); - if (choice!=ED_BUTTON_EUP && - choice!=ED_BUTTON_EDOWN) - return_code = choice; - choice = -1; - pressed = FALSE; - } - else - { - choice = -1; - pressed = FALSE; - } - } - - BackToFront(); - return(return_code); -} - -int CheckCountButtons(int mx, int my, int button) -{ - int return_code = -1; - static int choice = -1; - static BOOL pressed = FALSE; - - if (button) - { - if (!motion_status) /* Maustaste neu gedrückt */ - { - if (ON_COUNT_BUTTON(mx,my)) - { - choice = COUNT_BUTTON(mx,my); - pressed = TRUE; - DrawCountButton(choice,ED_BUTTON_PRESSED); - return_code = choice; - } - } - else /* Mausbewegung bei gedrückter Maustaste */ - { - if ((!ON_COUNT_BUTTON(mx,my) || COUNT_BUTTON(mx,my)!=choice) && - choice>=0 && pressed) - { - pressed = FALSE; - DrawCountButton(choice,ED_BUTTON_RELEASED); - } - else if (ON_COUNT_BUTTON(mx,my) && COUNT_BUTTON(mx,my)==choice) - { - if (!pressed) - DrawCountButton(choice,ED_BUTTON_PRESSED); - pressed = TRUE; - return_code = choice; - } - } - } - else /* Maustaste wieder losgelassen */ - { - if (ON_COUNT_BUTTON(mx,my) && COUNT_BUTTON(mx,my)==choice && pressed) - { - DrawCountButton(choice,ED_BUTTON_RELEASED); - choice = -1; - pressed = FALSE; - } - else - { - choice = -1; - pressed = FALSE; - } - } - - BackToFront(); - return(return_code); -}