diff --git a/data/images/creatures/icecrusher/iceblock.xcf b/data/images/creatures/icecrusher/iceblock.xcf index 2183ca2601f..769509f8497 100644 Binary files a/data/images/creatures/icecrusher/iceblock.xcf and b/data/images/creatures/icecrusher/iceblock.xcf differ diff --git a/data/images/creatures/icecrusher/krosh.sprite b/data/images/creatures/icecrusher/krosh.sprite index 1da663d2f29..638f9bb3574 100644 --- a/data/images/creatures/icecrusher/krosh.sprite +++ b/data/images/creatures/icecrusher/krosh.sprite @@ -2,7 +2,7 @@ (action (name "idle") (hitbox 2 0 128 128) - (images "krosh.png" + (images "krosh_main.png" ) ) (action @@ -14,7 +14,22 @@ (action (name "recovering") (hitbox 2 0 128 128) - (images "krosh.png" + (images "krosh_main.png" ) ) + (action + (name "whites") + (hitbox 2 0 128 128) + (images "krosh_whites.png") + ) + (action + (name "lefteye") + (hitbox 2 0 128 128) + (images "krosh_lefteye.png") + ) + (action + (name "righteye") + (hitbox 2 0 128 128) + (images "krosh_righteye.png") + ) ) diff --git a/data/images/creatures/icecrusher/krosh_lefteye.png b/data/images/creatures/icecrusher/krosh_lefteye.png new file mode 100644 index 00000000000..4f87c5a03f2 Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_lefteye.png differ diff --git a/data/images/creatures/icecrusher/krosh_main.png b/data/images/creatures/icecrusher/krosh_main.png new file mode 100644 index 00000000000..3a408385b4e Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_main.png differ diff --git a/data/images/creatures/icecrusher/krosh_righteye.png b/data/images/creatures/icecrusher/krosh_righteye.png new file mode 100644 index 00000000000..fa2857e7c17 Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_righteye.png differ diff --git a/data/images/creatures/icecrusher/krosh_whites.png b/data/images/creatures/icecrusher/krosh_whites.png new file mode 100644 index 00000000000..ae144934871 Binary files /dev/null and b/data/images/creatures/icecrusher/krosh_whites.png differ diff --git a/src/object/icecrusher.cpp b/src/object/icecrusher.cpp index e97fd62b5e2..7fd2f0e3bed 100644 --- a/src/object/icecrusher.cpp +++ b/src/object/icecrusher.cpp @@ -239,7 +239,7 @@ IceCrusher::draw(DrawingContext& context) context.push_target(); context.set_target(DrawingContext::NORMAL); sprite->draw(context, get_pos(), layer); - if(!(state == CRUSHING)) // Remove if eyes are to be animated during crushing + if(!(state == CRUSHING) && sprite->has_action("whites")) { // draw icecrusher's eyes slightly behind lefteye->draw(context, get_pos()+eye_position(false), layer-1); @@ -269,7 +269,7 @@ IceCrusher::found_victim() Vector IceCrusher::eye_position(bool right) { - if(!(state == CRUSHING)) + if(state == IDLE) { Player* player = Sector::current()->get_nearest_player (this->get_bbox ()); if(player) @@ -285,11 +285,18 @@ IceCrusher::eye_position(bool right) const float displacement_y = player_focus_y - crusher_origin_y; const float displacement_mag = pow(pow(displacement_x, 2.0) + pow(displacement_y, 2.0), 0.5); // Determine weighting for eye displacement along x given icecrusher eye shape - int weight = ((displacement_x > 0) == right) ? 1 : 4; + int weight_x = sprite->get_width()/64 * ((displacement_x > 0) == right) ? 1 : 4; + int weight_y = sprite->get_width()/64 * 2; - return Vector(displacement_x/displacement_mag * weight, displacement_y/displacement_mag * 2 - 2); + return Vector(displacement_x/displacement_mag * weight_x, displacement_y/displacement_mag * weight_y - weight_y); } } + else if(state == RECOVERING) + { + // Eyes spin while icecrusher is recovering, giving a dazed impression + return Vector(sin((right ? 1 : -1) * get_pos().y/13) * sprite->get_width()/64 * 2 - (right ? 1 : -1) * sprite->get_width()/64 * 2, + cos(get_pos().y/13) * sprite->get_width()/64 * 2 - sprite->get_width()/64 * 2); + } return Vector(0,0); }