{
reader.get("x", start_position.x);
reader.get("y", start_position.y);
+ stay_on_platform = false;
+ reader.get("stay-on-platform", stay_on_platform);
bbox.set_size(31.8, 31.8);
- sprite = sprite_manager->create("mriceblock");
+ sprite = sprite_manager->create("images/creatures/mr_iceblock/mr_iceblock.sprite");
set_direction = false;
}
-MrIceBlock::MrIceBlock(float pos_x, float pos_y, Direction d)
+MrIceBlock::MrIceBlock(float pos_x, float pos_y, Direction d, bool stay_on_plat = false )
: ice_state(ICESTATE_NORMAL), squishcount(0)
{
start_position.x = pos_x;
start_position.y = pos_y;
+ stay_on_platform = stay_on_plat;
bbox.set_size(31.8, 31.8);
- sprite = sprite_manager->create("mriceblock");
+ sprite = sprite_manager->create("images/creatures/mr_iceblock/mr_iceblock.sprite");
set_direction = true;
initial_direction = d;
}
writer.write_float("x", start_position.x);
writer.write_float("y", start_position.y);
+ writer.write_bool("stay-on-platform", stay_on_platform);
writer.end_list("mriceblock");
}
if(ice_state == ICESTATE_FLAT && flat_timer.check()) {
set_state(ICESTATE_NORMAL);
}
-
+
+ if (ice_state == ICESTATE_NORMAL &&
+ stay_on_platform &&
+ may_fall_off_platform())
+ {
+ dir = (dir == LEFT ? RIGHT : LEFT);
+ sprite->set_action(dir == LEFT ? "left" : "right");
+ physic.set_velocity_x(-physic.get_velocity_x());
+ }
+
BadGuy::active_update(elapsed_time);
}
physic.set_velocity_x(dir == LEFT ? -KICKSPEED : KICKSPEED);
sprite->set_action(dir == LEFT ? "flat-left" : "flat-right");
// we should slide above 1 block holes now...
- bbox.set_size(32.5, 31.8);
+ bbox.set_size(34, 31.8);
break;
case ICESTATE_GRABBED:
flat_timer.stop();