I hate to be that guy but my eyes just bled a little reading your code. What's wrong with:
if $steps_taken == $steps_per_battle
b = Battle.new
Instead of $alarm_mode? This way you don't have to hardcode magic numbers or have duplicate code in your if-else. It's also a lot easier to extend, you don't have to add another "else" whenever you think of something new.
Of course you can still have $alarm_mode if you need that for other stuff, just set $alarm_mode and $steps_per_battle together when the alarm is activated or deactivated. Finally it's not really a "mode" if it's only on and off (true or false), might as well call it $alarm_active or just $alarm instead.
Because I didn't specifically assign $steps_per_battle. It's for tracking the steps you take outside of battle, Steps per battle would convey the amount of steps taken during a battle. Which is useful if you wanted to do a tactical battle system, but I'm not tracking how many steps are taken during battle.
In other words, it would convey something I'm not going for.
If I wrote $alarm and $steps_taken on the same line it wouldn't work as intended. It just would not. $steps_taken is a sub if/else of alarm mode, because I want a different encounter rate if MC is not proxied.
In other words, alarm is important to notify whether a MCs identity is compromised.
I mean I get you want accurate variable naming. But if I'm going to call it $steps_per_battle, why not go even more specific? $steps_taken_in_battle for in battle navigation and $steps_taken_outside_battle.
That would completely make it have more clarity.