1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-05-11 17:32:07 +00:00

ru:: rolling saw

This commit is contained in:
Zeno Rogue
2026-04-06 11:47:15 +02:00
parent 09ff94321f
commit 6810d77b29
3 changed files with 35 additions and 0 deletions
+13
View File
@@ -577,6 +577,19 @@ struct located_entity : public entity {
xy default_where() override { return respawn; }
};
struct rollingsaw: public located_entity {
string glyph() override { return "*"; }
color_t color() override { return walls[wWall].color; }
xy siz() override { return {8, 8}; }
string get_name() override { return "rolling saw"; }
void act() override;
int dir, respawn_dir;
xy default_vel() override {
auto dat = get_dat(); return {dat.d * dat.modv * dir, 0};
}
virtual void hs(stater& s) override { s.act("dir", dir, respawn_dir); located_entity::hs(s); }
};
struct timed_orb : public located_entity {
int duration;
xy siz() override { return {18, 18}; }
+16
View File
@@ -1075,4 +1075,20 @@ void guard_event::act() {
}
}
void rollingsaw::act() {
stay_on_screen();
kino();
if(on_floor) {
auto dat = get_dat();
if(abs(vel.x) < 1e-6) {
dir = -dir;
}
vel.x = zero_vel.x + dat.d * dat.modv * dir;
}
if(intersect(get_pixel_bbox(), m.get_pixel_bbox()) && gframeid > invinc_end) {
if(m.reduce_hp(60)) addMessage("The " + hal()->get_name() + " shreds you!");
}
}
}
+6
View File
@@ -377,6 +377,12 @@ void load_room(fhstream& f, cell *c) {
b->base = std::move(r.entities.back());
r.entities.back() = std::move(b);
}
else if(cap == "ROLLINGSAW") {
auto b = std::make_unique<rollingsaw>(); nam(*b);
b->respawn = get_xy();
b->respawn_dir = get_int();
r.entities.emplace_back(std::move(b));
}
else if(cap == "HINT") {
auto b = std::make_unique<hint>();
b->respawn = get_xy(); b->size = get_xy();