void
BadGuy::init()
{
- base.x = 0;
- base.y = 0;
+ base.x = start_position.x;
+ base.y = start_position.y;
base.width = 32;
base.height = 32;
mode = NORMAL;
- dying = DYING_NOT;
old_base = base;
dir = LEFT;
seen = false;
specs = badguyspecs_manager->load(badguykind_to_string(kind));
- set_action("hide", "hide");
-
// if we're in a solid tile at start correct that now
if(Sector::current()) {
if(kind != BAD_FLAME && kind != BAD_FISH && kind != BAD_FLAMEFISH && collision_object_map(base))
frozen_timer.init(true);
timer.init(true);
+ dying = DYING_NOT;
+ seen = true;
+
dir = activation_dir;
float dirsign = activation_dir == LEFT ? -1 : 1;
base.width = 66;
base.height = 66;
}
-
- base.x = start_position.x;
- base.y = start_position.y;
- old_base = base;
- seen = true;
}
Surface*
if (start_position.x > scroll_x - X_OFFSCREEN_DISTANCE &&
start_position.x < scroll_x - base.width &&
start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
- start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE)
+ start_position.y < scroll_y + screen->h + Y_OFFSCREEN_DISTANCE)
activate(RIGHT);
else if (start_position.x > scroll_x + screen->w &&
start_position.x < scroll_x + screen->w + X_OFFSCREEN_DISTANCE &&
start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
- start_position.y < scroll_y + Y_OFFSCREEN_DISTANCE)
+ start_position.y < scroll_y + screen->h + Y_OFFSCREEN_DISTANCE)
activate(LEFT);
+ else if (start_position.x > scroll_x - X_OFFSCREEN_DISTANCE &&
+ start_position.x < scroll_x + screen->w + X_OFFSCREEN_DISTANCE &&
+ ((start_position.y > scroll_y + screen->h &&
+ start_position.y < scroll_y + screen->h + Y_OFFSCREEN_DISTANCE) ||
+ (start_position.y > scroll_y - Y_OFFSCREEN_DISTANCE &&
+ start_position.y < scroll_y)))
+ {
+ if(start_position.x < scroll_x - screen->w/2)
+ activate(RIGHT);
+ else
+ activate(LEFT);
+ }
/* Special case for badguys on start of the level.
* If in the future, it's possible to set Tux start pos, this case
* should contemplate that. */
if(!seen)
return;
-
+
switch (kind)
{
case BAD_MRICEBLOCK:
void
BadGuy::draw(DrawingContext& context)
{
+ if(!seen)
+ return;
+
if((dir == LEFT && action_left == "hide") ||
(dir == RIGHT && action_right == "hide"))
return;