X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fleveleditor.c;h=7f014b11cefabfcbabbaf7a3cc389b4050dd50b2;hb=6d9952207d28e19d3448c9e0f8859be19d3acc88;hp=d5b13b4223a93a6020fb799251835a3e82402495;hpb=43ae91e84ae574464a2ff634daa8a16e253b47fa;p=supertux.git diff --git a/src/leveleditor.c b/src/leveleditor.c index d5b13b422..7f014b11c 100644 --- a/src/leveleditor.c +++ b/src/leveleditor.c @@ -8,7 +8,7 @@ * * ***************************************************************************/ -/* December 28, 2003 - January 1st, 2004 */ +/* December 28, 2003 - February 1st, 2004 */ /* leveleditor.c - A built-in level editor for SuperTux by Ricardo Cruz */ @@ -33,13 +33,15 @@ #include "scene.h" /* definitions to aid development */ -#define DONE_LEVELEDITOR 1 +#define DONE_LEVELEDITOR 1 #define DONE_QUIT 2 -#define DONE_CHANGELEVEL 3 +#define DONE_CHANGELEVEL 3 /* definitions that affect gameplay */ #define KEY_CURSOR_SPEED 32 #define KEY_CURSOR_FASTSPEED 64 +// when pagedown/up pressed speed: +#define PAGE_CURSOR_SPEED 13*32 #define CURSOR_LEFT_MARGIN 96 #define CURSOR_RIGHT_MARGIN 512 @@ -83,6 +85,7 @@ void le_activate_bad_guys(void); int level; st_level current_level; char level_subset[100]; +int show_grid; int frame; texture_type selection; @@ -132,13 +135,14 @@ int leveleditor() char str[LEVEL_NAME_MAX]; int done; int x, y, i; /* for cicles */ - int pos_x, cursor_x, cursor_y, fire; + int pos_x, cursor_x, cursor_y, cursor_tile, fire; SDL_Event event; SDLKey key; SDLMod keymod; strcpy(level_subset,"default"); - + show_grid = NO; + level = 1; initmenu(); @@ -186,7 +190,7 @@ int leveleditor() key = event.key.keysym.sym; if(show_menu) { - menu_event(key); + menu_event(&event.key.keysym); break; } switch(key) @@ -206,8 +210,8 @@ int leveleditor() else cursor_x += KEY_CURSOR_FASTSPEED; - if(cursor_x > (current_level.width*32) - 1) - cursor_x = (current_level.width*32) - 1; + if(cursor_x > (current_level.width*32) - 32) + cursor_x = (current_level.width*32) - 32; break; case SDLK_UP: if(fire == DOWN) @@ -239,6 +243,24 @@ int leveleditor() case SDLK_END: cursor_x = (current_level.width * 32) - 32; break; + case SDLK_PAGEUP: + cursor_x -= PAGE_CURSOR_SPEED; + + if(cursor_x < 0) + cursor_x = 0; + break; + case SDLK_PAGEDOWN: + cursor_x += PAGE_CURSOR_SPEED; + + if(cursor_x > (current_level.width*32) - 32) + cursor_x = (current_level.width*32) - 32; + break; + case SDLK_F9: + if(!show_grid) + show_grid = YES; + else + show_grid = NO; + break; case SDLK_PERIOD: le_change(cursor_x, cursor_y, '.'); break; @@ -435,10 +457,28 @@ int leveleditor() for (x = 0; x < 21; ++x) drawshape(x * 32, y * 32, current_level.tiles[y][x + (pos_x / 32)]); +/* draw whats inside stuff when cursor is selecting those */ +cursor_tile = current_level.tiles[cursor_y/32][cursor_x/32]; +switch(cursor_tile) + { + case 'B': + texture_draw(&img_mints, cursor_x - pos_x, cursor_y, NO_UPDATE); + break; + case '!': + texture_draw(&img_golden_herring, cursor_x - pos_x, cursor_y, NO_UPDATE); + break; + case 'x': + case 'y': + case 'A': + texture_draw(&img_distro[(frame / 5) % 4], cursor_x - pos_x, cursor_y, NO_UPDATE); + break; + default: + break; + } + /* Draw the Bad guys: */ for (i = 0; i < num_bad_guys; ++i) { - /* printf("\nbad_guys[%i].alive = %i", i, bad_guys[i].alive); */ if(bad_guys[i].base.alive == NO) continue; /* to support frames: img_bsod_left[(frame / 5) % 4] */ @@ -450,18 +490,26 @@ int leveleditor() texture_draw(&img_money_left[(frame / 5) % 2], ((int)(bad_guys[i].base.x - pos_x)/32)*32, bad_guys[i].base.y, NO_UPDATE); } +/* draw a grid (if selected) */ +if(show_grid) + { + for(x = 0; x < 21; x++) + fillrect(x*32, 0, 1, 480, 225, 225, 225); + for(y = 0; y < 15; y++) + fillrect(0, y*32, 640, 1, 225, 225, 225); + } texture_draw(&selection, ((int)(cursor_x - pos_x)/32)*32, cursor_y, NO_UPDATE); sprintf(str, "%d", current_level.time_left); - drawtext("TIME", 324, 0, letters_blue, NO_UPDATE, 1); - drawtext(str, 404, 0, letters_gold, NO_UPDATE, 1); + text_draw(&blue_text, "TIME", 324, 0, 1, NO_UPDATE); + text_draw(&gold_text, str, 404, 0, 1, NO_UPDATE); sprintf(str, "%s", current_level.name); - drawtext("NAME", 0, 0, letters_blue, NO_UPDATE, 1); - drawtext(str, 80, 0, letters_gold, NO_UPDATE, 1); + text_draw(&blue_text, "NAME", 0, 0, 1, NO_UPDATE); + text_draw(&gold_text, str, 80, 0, 1, NO_UPDATE); - drawtext("F1 for Help", 10, 430, letters_blue, NO_UPDATE, 1); + text_draw(&blue_text, "F1 for Help", 10, 430, 1, NO_UPDATE); if(show_menu) { @@ -506,64 +554,10 @@ int xx, yy; bad_guys[i].base.alive = NO; } -/* Save data for this level: */ -void savelevel(void) -{ - FILE * fi; - char * filename; - int y; - char str[80]; - - /* Save data file: */ - - filename = (char *) malloc(sizeof(char) * (strlen(DATA_PREFIX) + 20) + strlen(level_subset)); - sprintf(filename, "%s/levels/%s/level%d.dat", DATA_PREFIX, level_subset, level); - fi = fopen(filename, "w"); - if (fi == NULL) - { - perror(filename); - st_shutdown(); - free(filename); - exit(-1); - } - free(filename); - - - /* sptrinf("# Level created by SuperTux built-in editor", fi); */ - - fputs(current_level.name, fi); - fputs("\n", fi); - fputs(current_level.theme, fi); - fputs("\n", fi); - sprintf(str, "%d\n", current_level.time_left); /* time */ - fputs(str, fi); - fputs(current_level.song_title, fi); /* song filename */ - sprintf(str, "\n%d\n", current_level.bkgd_red); /* red background color */ - fputs(str, fi); - sprintf(str, "%d\n", current_level.bkgd_green); /* green background color */ - fputs(str, fi); - sprintf(str, "%d\n", current_level.bkgd_blue); /* blue background color */ - fputs(str, fi); - sprintf(str, "%d\n", current_level.width); /* level width */ - fputs(str, fi); - - for(y = 0; y < 15; ++y) - { - fputs(current_level.tiles[y], fi); - fputs("\n", fi); - } - - fclose(fi); - - drawcenteredtext("SAVED!", 240, letters_gold, NO_UPDATE, 1); - flipscreen(); - SDL_Delay(1000); -} - void showhelp() { SDL_Event event; - int done; + int i, done; char *text[] = { "X/x - Brick0", "Y/y - Brick1", @@ -585,17 +579,17 @@ void showhelp() "& - Water", "0-2 - BadGuys", "./Del - Remove tile", + "F9 - Show/Hide Grid", "Esc - Menu"}; - drawcenteredtext("- Help -", 30, letters_red, NO_UPDATE, 2); - drawtext("Keys:", 80, 60, letters_gold, NO_UPDATE, 1); - - int i; + text_drawf(&red_text, "- Help -", 0, 30, A_HMIDDLE, A_TOP, 2, NO_UPDATE); + text_draw(&gold_text, "Keys:", 80, 60, 1, NO_UPDATE); + for(i = 0; i < sizeof(text)/sizeof(char *); i++) - drawtext(text[i], 40, 90+(i*16), letters_blue, NO_UPDATE, 1); + text_draw(&blue_text, text[i], 40, 90+(i*16), 1, NO_UPDATE); - drawcenteredtext("Press Any Key to Continue", 460, letters_gold, NO_UPDATE, 1); + text_drawf(&gold_text, "Press Any Key to Continue", 0, 460, A_HMIDDLE, A_TOP, 1, NO_UPDATE); flipscreen();