// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#include <config.h>
+
#include <iostream>
#include <fstream>
#include <vector>
#include "resources.h"
#include "app/gettext.h"
#include "misc.h"
+#include "scene.h"
-#define map_message_TIME 2800
+#define map_message_TIME 2.8
Menu* worldmap_menu = 0;
std::cerr << "Warning: no image specified for tile " << id
<< ".\nIgnoring...\n" << std::endl;
- for(int i = 0; i < filenames.size(); i++)
+ for(int i = 0; static_cast<unsigned int>(i) < filenames.size(); i++)
{
Surface* image = new Surface(
datadir + "/images/worldmap/" + filenames[i], true);
tile->images.push_back(image);
}
- tile->anim_speed = 25;
- reader.read_int("anim-speed", tile->anim_speed);
+ tile->anim_fps = 1;
+ reader.read_float("anim-fps", tile->anim_fps);
if (id >= int(tiles.size()))
{
if(special_tile && !special_tile->map_message.empty() &&
!special_tile->passive_message)
- worldmap->passive_message_timer.stop();
+ worldmap->passive_message_timer.start(0);
stop();
}
else
if(images.size() > 1)
{
- size_t frame
- = ((global_frame_counter*25) / anim_speed) % images.size();
+ size_t frame = size_t(global_time * anim_fps) % images.size();
context.draw_surface(images[frame], pos, LAYER_TILES);
}
enter_level = false;
name = "<no title>";
- music = "SALCON.MOD";
-
- global_frame_counter = 0;
- frame_timer.init(true);
+ music = "salcon.mod";
total_stats.reset();
}
}
lisp_free(root_obj);
+
+ delete tux;
+ tux = new Tux(this);
}
void WorldMap::get_level_title(Level& level)
WorldMap::get_input()
{
enter_level = false;
-
+ SDLKey key;
+
SDL_Event event;
while (SDL_PollEvent(&event))
{
break;
case SDL_KEYDOWN:
- switch(event.key.keysym.sym)
- {
- case SDLK_ESCAPE:
- on_escape_press();
- break;
- case SDLK_LCTRL:
- case SDLK_RETURN:
- enter_level = true;
- break;
+ key = event.key.keysym.sym;
- case SDLK_LEFT:
- tux->set_direction(D_WEST);
- break;
- case SDLK_RIGHT:
- tux->set_direction(D_EAST);
- break;
- case SDLK_UP:
- tux->set_direction(D_NORTH);
- break;
- case SDLK_DOWN:
- tux->set_direction(D_SOUTH);
- break;
-
- default:
- break;
- }
+ if(key == SDLK_ESCAPE)
+ on_escape_press();
+ else if(key == SDLK_RETURN || key == keymap.power)
+ enter_level = true;
+ else if(key == SDLK_LEFT || key == keymap.power)
+ tux->set_direction(D_WEST);
+ else if(key == SDLK_RIGHT || key == keymap.right)
+ tux->set_direction(D_EAST);
+ else if(key == SDLK_UP || key == keymap.up ||
+ key == keymap.jump)
+ // there might be ppl that use jump as up key
+ tux->set_direction(D_NORTH);
+ else if(key == SDLK_DOWN || key == keymap.down)
+ tux->set_direction(D_SOUTH);
break;
case SDL_JOYHATMOTION:
void
WorldMap::update(float delta)
{
- if(!frame_timer.check())
- {
- frame_timer.start(25);
- global_frame_counter++;
- }
-
if (enter_level && !tux->is_moving())
{
/* Check special tile action */
// do a shriking fade to the level
shrink_fade(Vector((level->pos.x*32 + 16 + offset.x),(level->pos.y*32 + 16
+ offset.y)), 500);
- GameSession session(datadir + "/levels/" + level->name,
+ GameSession session(level->name,
ST_GL_LOAD_LEVEL_FILE, level->vertical_flip,
&level->statistics);
{
if (i->pos == tux->get_tile_pos())
{
- if(i->title == "")
- get_level_title(*i);
+ if(i->title == "")
+ get_level_title(*i);
- context.draw_text(white_text, i->title,
- Vector(screen->w/2, screen->h - white_text->get_height() - 30),
- CENTER_ALLIGN, LAYER_FOREGROUND1);
+ context.draw_text(white_text, i->title,
+ Vector(screen->w/2,
+ screen->h - white_text->get_height() - 30),
+ CENTER_ALLIGN, LAYER_FOREGROUND1);
- i->statistics.draw_worldmap_info(context);
- }
+ i->statistics.draw_worldmap_info(context);
break;
+ }
}
for(SpecialTiles::iterator i = special_tiles.begin(); i != special_tiles.end(); ++i)
{
/* Display an in-map message in the map, if any as been selected */
if(!i->map_message.empty() && !i->passive_message)
context.draw_text(gold_text, i->map_message,
- Vector(screen->w/2, screen->h - white_text->get_height() - 60),
+ Vector(screen->w/2,
+ screen->h - white_text->get_height() - 60),
CENTER_ALLIGN, LAYER_FOREGROUND1);
break;
}
writer->write_string("map", map_filename);
writer->write_int("lives", player_status.lives);
writer->write_int("distros", player_status.lives);
+ writer->write_int("max-score-multiplier", player_status.max_score_multiplier);
writer->start_list("tux");
reader.read_int("lives", player_status.lives);
reader.read_int("distros", player_status.distros);
+ reader.read_int("max-score-multiplier", player_status.max_score_multiplier);
if (player_status.lives < 0)
player_status.lives = START_LIVES;