diff --git a/rogueviz/ru/classes.cpp b/rogueviz/ru/classes.cpp index ff5e22ae..aacafa4f 100644 --- a/rogueviz/ru/classes.cpp +++ b/rogueviz/ru/classes.cpp @@ -532,6 +532,14 @@ struct horoplatform : public moving_platform { } }; +struct length_platform : public moving_platform { + unique_ptr base; int len; + virtual int width() { return len; } + xy location_at(ld t) { return base->location_at(t); } + string get_name() override { return "short " + base->get_name(); } + string get_help() override { return base->get_help(); } + }; + struct cycloid_platform : public moving_platform { moving_platform *base; ld period, shift; diff --git a/rogueviz/ru/load-world.cpp b/rogueviz/ru/load-world.cpp index 653152b3..b6d0f4ee 100644 --- a/rogueviz/ru/load-world.cpp +++ b/rogueviz/ru/load-world.cpp @@ -370,6 +370,17 @@ void load_room(fhstream& f, cell *c) { p = &*b; r.entities.emplace_back(std::move(b)); } + else if(cap == "LENGTH") { + int len = get_int(); + for(auto& p: last_platform) { + auto& f = find_entity(r, p); + auto b = std::make_unique(); + b->len = len; + p = &*b; + b->base = std::move(as_platform(f)); + f = std::move(b); + } + } else if(cap == "SAW") for(auto p: last_platform) { auto& f = find_entity(r, p); auto b = std::make_unique(); nam(*b);