From 96a6f8a7214b3253e50cf5637c09aae86e2b4c65 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 22 Dec 2025 14:01:43 +0100 Subject: [PATCH] snake improvements --- rogueviz/ru/classes.cpp | 5 ++++- rogueviz/ru/entity.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/rogueviz/ru/classes.cpp b/rogueviz/ru/classes.cpp index 2add1c47..04f3a90f 100644 --- a/rogueviz/ru/classes.cpp +++ b/rogueviz/ru/classes.cpp @@ -639,7 +639,10 @@ struct snake : public enemy { int base_xp() override { return 10; } int max_hp() override { return 30; } virtual int bite() { return 25; } - virtual void hs(stater& s) override { enemy::hs(s); s.act("dir", 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); enemy::hs(s); } }; struct disnake : public snake { diff --git a/rogueviz/ru/entity.cpp b/rogueviz/ru/entity.cpp index 054f75bd..9590c821 100644 --- a/rogueviz/ru/entity.cpp +++ b/rogueviz/ru/entity.cpp @@ -514,10 +514,12 @@ void ghost::act() { void snake::act() { stay_on_screen(); kino(); - if(abs(vel.x) < 1e-6) { + 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; - dir = -dir; } if(intersect(get_pixel_bbox(), m.get_pixel_bbox()) && gframeid > invinc_end) { if(m.reduce_hp(bite())) addMessage("The snake bites you!");