From c4af27b763ac5cbe58fc413cb9fbf4d405d54dd6 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Tue, 5 Aug 2025 00:03:42 +0200 Subject: [PATCH] ru:: icicles can now bounce to return to the top --- rogueviz/ru/classes.cpp | 2 +- rogueviz/ru/entity.cpp | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/rogueviz/ru/classes.cpp b/rogueviz/ru/classes.cpp index 762b896f..3b8f94e0 100644 --- a/rogueviz/ru/classes.cpp +++ b/rogueviz/ru/classes.cpp @@ -653,7 +653,7 @@ struct guineapig : public enemy { }; struct icicle : public enemy { - bool falling; + int state; vector fallframes; xy siz() override { return {10, 10}; } string glyph() override { return "|"; } diff --git a/rogueviz/ru/entity.cpp b/rogueviz/ru/entity.cpp index bed14616..c86f2e08 100644 --- a/rogueviz/ru/entity.cpp +++ b/rogueviz/ru/entity.cpp @@ -802,19 +802,26 @@ void icicle::act() { } regenerate(); } - if(!falling) { + if(state == 0) { auto w = m.where; for(auto f: fallframes) { - if(intersect(get_pixel_bbox_at(f), m.get_pixel_bbox_at(w))) falling = true; + if(intersect(get_pixel_bbox_at(f), m.get_pixel_bbox_at(w))) state = 1; w += m.vel; } } - if(falling) { + if(state == 1) { kino(); - if(on_floor) existing = false; + if(on_floor && vel.y > 0) existing = false; + if(vel.y < 0) state = 2; } - if(intersect(get_pixel_bbox(), m.get_pixel_bbox())) { - if(m.reduce_hp(50)) addMessage("An icicle falls on you!"); + if(state == 2) { + kino(); + if(vel.y >= 0) state = 0; + } + if(state != 0) { + if(intersect(get_pixel_bbox(), m.get_pixel_bbox())) { + if(m.reduce_hp(50)) addMessage("An icicle falls on you!"); + } } }