draconisPW / PWMAngband

A free, multi-player roguelike dungeon exploration game based on Angband
35 stars 12 forks source link

movement speed exploit #547

Closed igroglaz closed 2 years ago

igroglaz commented 2 years ago

Having high movement speed allows you to 'move' toward enemy and attack it more times than BpR which character has.

Eg In T there is Titan race which can't teleport, but has value:0:MOVES[10+1d1] (60 MOVES at lvl 50) - so if you move toward enemy it increase your dps IMMENSELY :hurtrealbad:

reproduce: get +MOVES and stay to test dummy (easier to testi with 1 bpr) and see how much blows you make in logs. Now try to 'move' (with arrow keys) toward dummy (just hold the button) and you will see how you make much more blows

igroglaz commented 2 years ago

morgoth burned like paper https://youtu.be/ayyrHXi5aK4?t=1208

igroglaz commented 2 years ago

also apparently Morgoth and Sauron is not immune to life-leech.. which makes them especially ezpz

draconisPW commented 2 years ago

That sounds like a nasty bug... MOVES should only work on "walking" not "attacking", but I guess if you press movement key and it uses lower energy to do so and at the same time checks if path is blocked and attack enemy, that should explain the problem. I'll check it.

draconisPW commented 2 years ago

In V, energy_use is reset when attacking, so it doesn't use energy_per_move set by walking with MOVES. I need to do the same, so it properly uses a full turn.

draconisPW commented 2 years ago

This is catastrophic. I cannot implement the V system, it would take ages to recode the whole energy system taking into account that the MAng code uses a packet queue that tests whether there is enough energy to execute a command, otherwise it queues it for the future, while V sets the energy to spend and spends it at the end of the turn. I will have to make a "compromise" method of dealing with movement.

draconisPW commented 2 years ago

Fixed. When using the move, jump or run commands, you can only attack something if you have a full turn of energy, not the partial turn given by your movement speed. Note that the check is only made on attacking -- if movement trigger something else like disarming, digging, opening, closing... it will still use a partial turn, there was no way to fully fix MOVES without recoding the entire energy system.