mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2026-05-11 09:32:05 +00:00
ru:: rolling saw
This commit is contained in:
@@ -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}; }
|
||||
|
||||
@@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user