static bool walking;
static Timer random_timer;
-static int frame, i;
+static int frame;
static unsigned int last_update_time;
static unsigned int update_time;
-void display_credits();
+void display_text_file(char *filename);
std::vector<st_subset> contrib_subsets;
std::string current_contrib_subset;
{
st_subset subset;
subset.load(level_subsets.item[i]);
- contrib_menu->additem(MN_GOTO, subset.title.c_str(), i, contrib_subset_menu);
+ contrib_menu->additem(MN_GOTO, subset.title.c_str(), i,
+ contrib_subset_menu, i+1);
contrib_subsets.push_back(subset);
}
int index = contrib_menu->check();
if (index != -1)
{
- index -= 2; // FIXME: Hack
+ index -= 1;
if (index >= 0 && index <= int(contrib_subsets.size()))
{
if (current_subset != index)
{
Level level;
level.load(subset.name, i);
- contrib_subset_menu->additem(MN_ACTION, level.name, 0, 0);
+ contrib_subset_menu->additem(MN_ACTION, level.name, 0, 0, i);
}
contrib_subset_menu->additem(MN_HL,"",0,0);
contrib_subset_menu->additem(MN_BACK, "Back", 0, 0);
int index = contrib_subset_menu->check();
if (index != -1)
{
- if (contrib_subset_menu->get_item(index).kind == MN_ACTION)
+ if (contrib_subset_menu->get_item_by_id(index).kind == MN_ACTION)
{
- index -= 1; // FIXME: Hack
std::cout << "Sarting level: " << index << std::endl;
GameSession session(current_contrib_subset, index, ST_GL_PLAY);
session.run();
//World* world = session->get_world();
Level* plevel = session->get_level();
Player* tux = session->get_world()->get_tux();
+
+ session->get_world()->play_music(LEVEL_MUSIC);
/* FIXME:
// update particle systems
}
global_frame_counter++;
- tux->key_event(SDLK_RIGHT,DOWN);
+ tux->key_event((SDLKey) keymap.right,DOWN);
if(random_timer.check())
{
if(walking)
- tux->key_event(SDLK_UP,UP);
+ tux->key_event((SDLKey) keymap.jump,UP);
else
- tux->key_event(SDLK_UP,DOWN);
+ tux->key_event((SDLKey) keymap.jump,DOWN);
}
else
{
{
Menu::current()->event(event);
}
- else
- {
- // FIXME: QUIT signal should be handled more generic, not locally
- if (event.type == SDL_QUIT)
- Menu::set_current(0);
- }
+ // FIXME: QUIT signal should be handled more generic, not locally
+ if (event.type == SDL_QUIT)
+ Menu::set_current(0);
}
/* Draw the background: */
{
switch (main_menu->check())
{
- case 0:
+ case MNID_STARTGAME:
// Start Game, ie. goto the slots menu
update_load_save_game_menu(load_game_menu);
break;
- case 1:
+ case MNID_CONTRIB:
// Contrib Menu
puts("Entering contrib menu");
generate_contrib_menu();
break;
- case 3:
+ case MNID_LEVELEDITOR:
leveleditor(1);
Menu::set_current(main_menu);
break;
- case 4:
- display_credits();
+ case MNID_CREDITS:
+ display_text_file("CREDITS");
Menu::set_current(main_menu);
break;
- case 5:
+ case MNID_QUITMAINMENU:
Menu::set_current(0);
break;
}
/* Pause: */
frame++;
SDL_Delay(25);
-
}
/* Free surfaces: */
#define MAX_VEL 10
#define SPEED 1
#define SCROLL 60
+#define ITEMS_SPACE 4
-void display_credits()
+void display_text_file(char *file)
{
int done;
int scroll, speed;
+ int y;
Timer timer;
- int n,d;
int length;
FILE* fi;
char temp[1024];
string_list_type names;
char filename[1024];
string_list_init(&names);
- sprintf(filename,"%s/CREDITS", datadir.c_str());
+ sprintf(filename,"%s/%s", datadir.c_str(), file);
if((fi = fopen(filename,"r")) != NULL)
{
while(fgets(temp, sizeof(temp), fi) != NULL)
speed = 2;
done = 0;
- n = d = 0;
-
length = names.num_items;
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
draw_background();
- white_big_text->drawf("- Credits -", 0, screen->h-scroll, A_HMIDDLE, A_TOP, 2);
+ if (strcmp(file, "CREDITS") == 0)
+ white_big_text->drawf("- SuperTux " VERSION " -",
+ 0, screen->h-scroll, A_HMIDDLE, A_TOP, 2);
- for(i = 0, n = 0, d = 0; i < length; i++,n++,d++)
+ y = 0;
+ for(int i = 0; i < length; i++)
{
- if(names.item[i] == "")
- n--;
- else
- {
- if(names.item[i][0] == ' ')
- white_small_text->drawf(names.item[i], 0, 60+screen->h+(n*18)+(d*18)-scroll-10, A_HMIDDLE, A_TOP, 1);
- else if(names.item[i][0] == ' ')
- white_text->drawf(names.item[i], 0, 60+screen->h+(n*18)+(d*18)-scroll, A_HMIDDLE, A_TOP, 1);
- else if(names.item[i+1][0] == '-' || names.item[i][0] == '-')
- white_big_text->drawf(names.item[i], 0, 60+screen->h+(n*18)+(d*18)-scroll, A_HMIDDLE, A_TOP, 3);
- else
- blue_text->drawf(names.item[i], 0, 60+screen->h+(n*18)+(d*18)-scroll, A_HMIDDLE, A_TOP, 1);
- }
+ switch(names.item[i][0])
+ {
+ case ' ':
+ white_small_text->drawf(names.item[i], 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 1);
+ y += white_small_text->h+ITEMS_SPACE;
+ break;
+ case ' ':
+ white_text->drawf(names.item[i], 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 1);
+ y += white_text->h+ITEMS_SPACE;
+ break;
+ case '-':
+ white_big_text->drawf(names.item[i], 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 3);
+ y += white_big_text->h+ITEMS_SPACE;
+ break;
+ default:
+ blue_text->drawf(names.item[i], 0, 60+screen->h+y-scroll, A_HMIDDLE, A_TOP, 1);
+ y += blue_text->h+ITEMS_SPACE;
+ break;
+ }
}
flipscreen();
- if(60+screen->h+(n*18)+(d*18)-scroll < 0 && 20+60+screen->h+(n*18)+(d*18)-scroll < 0)
+ if(60+screen->h+y-scroll < 0 && 20+60+screen->h+y-scroll < 0)
done = 1;
scroll += speed;