Repository navigation
hero knocking back monster A into B gets B angry at hero #1653
Description
Activity
The easiest, narrowest fix to this issue is simply to exempt quest guardians/leader from getting angry at the player when a monster is knocked back into them (or just do it broadly for all monsters). Maybe commute this to an alignment penalty for "disrespect".
When monster A knocks the hero back into monster B, does monster B immediately get mad and grudge monster A? If not, why not?
Short answer, because there's currently no infrastructure for a monster aggro-ing a specific other monster (rather than an entire species), and even if there were, the aggro is limited to when they happen to randomly walk adjacent to each other; there's no code in place for prioritizing/pathfinding among multiple targets (e.g. monster A and the hero).
Unfortunately this would mean adding a vector to every monster object, which means heap memory management in C, so my hopes are not high.
Probably a mextra struct would be the correct implementation, given that monsters would only rarely have one and that's the sort of case mextra is for? But it wouldn't surprise me if this is so marginal that only a variant really committed to realistic monster decision-making would implement it.
Maybe you should be able to make hostile soldiers/watchmen peaceful with potions of booze
Seems unrelated to the rest of this, unless you meant to imply quest guardians should also be included here? (Even then, there are certain quest guardians it should probably not work on for flavor reasons, like roshi, abbots, and acolytes.)
Not sure I like the suggestion to extend #offer so that what it does depends on context like whether you're standing on an altar. Obvious question - what would it do when you are standing on the Minetown altar and you want to pacify an angry watchman?
g-branden-robinson commented
on Aug 8, 2026 ContributorAuthorMore actionsThe easiest, narrowest fix to this issue is simply to exempt quest guardians/leader from getting angry at the player when a monster is knocked back into them (or just do it broadly for all monsters).
That would solve the problem I encountered, and another one I'm worried that might exist, which is that any monster who gets hurtled into by anything due to anyone's action blames the hero for it.
Maybe commute this to an alignment penalty for "disrespect".
That would have reasonable flavor. There should be intelligible in-game feedback for this.
You_feel("that knocking your foes into your allies is a bad idea.");(If hallucinating: "that you're bowling in the wrong lane.")
When monster A knocks the hero back into monster B, does monster B immediately get mad and grudge monster A? If not, why not?
Short answer, because there's currently no infrastructure for a monster aggro-ing a specific other monster (rather than an entire species), and even if there were, the aggro is limited to when they happen to randomly walk adjacent to each other; there's no code in place for prioritizing/pathfinding among multiple targets (e.g. monster A and the hero).
Oh, I thought there was for some reason. When facing a line of foes, like elves in a hallway, I try to dispatch them quickly enough that I don't really catch whether "monster infighting" occurs.
Unfortunately this would mean adding a vector to every monster object, which means heap memory management in C, so my hopes are not high.
Probably a mextra struct would be the correct implementation, given that monsters would only rarely have one and that's the sort of case mextra is for? But it wouldn't surprise me if this is so marginal that only a variant really committed to realistic monster decision-making would implement it.
Yeah, I figured the cost/benefit ratio was likely poor.
Maybe you should be able to make hostile soldiers/watchmen peaceful with potions of booze
Seems unrelated to the rest of this, unless you meant to imply quest guardians should also be included here?
That was the seed of it--it occurred to me that it's hard to pile up that many scrolls of taming. But I lost discipline and started brainstorming.
(Even then, there are certain quest guardians it should probably not work on for flavor reasons, like roshi, abbots, and acolytes.)
I'd have thought so, too, before I dated an East Asian woman. Apparently in that part of the world they have jokes about Buddhist monks and clergy that are easily as ribald as any we have about, say, Catholic priests...
Not sure I like the suggestion to extend #offer so that what it does depends on context like whether you're standing on an altar. Obvious question - what would it do when you are standing on the Minetown altar and you want to pacify an angry watchman?
I can answer that!
There is an altar to FOOBAR here. Make offering? (y/n)If no, go to the cursor-driven targeting routine, accepting only adjacent monsters, of course.
But maybe this would be a better application for
#chat, which I feel doesn't fulfill its potential as a gameplay action.Rambling aside:
I tried once to write my own Roguelike from scratch. I had too many ideas and picked a bad implementation language for my purposes (Python). Things got really slow really fast. I next tried with some kind of "build your own Roguelike from this kit" project, but by the time I had fully reconstructed the example, I was unhappy with the interface limitations, and had lost my desire to stepwise refine it into what I wanted. It was bolted to PDCurses with no UI abstraction layer. It rendered the textual part of the screen in an ugly way because it wanted square character cells for the map area (which does make sense). I wanted UI abstraction and real ncurses, but I didn't understand ncurses well enough to write for it.
Years later, I solved one of my problems. After submitting a couple of hundred patches to ncurses's man pages, I understand its API much better. Time will tell if I ever embark on a third attempt at a Roguelike.
That would solve the problem I encountered, and another one I'm worried that might exist, which is that any monster who gets hurtled into by anything due to anyone's action blames the hero for it.
Without going to find the code, I am reasonably sure that whatever angers the monster checks svc.context.mon_moving, because most code that conditionally angers based on whether it was the hero's actions checks that.
You_feel("that knocking your foes into your allies is a bad idea.");
(If hallucinating: "that you're bowling in the wrong lane.")Personally I'd go with a "[The guardian] gives you a disapproving glare." The bowling message is fun but not sure it would fit with this alternative.
I'd have thought so, too, before I dated an East Asian woman. Apparently in that part of the world they have jokes about Buddhist monks and clergy that are easily as ribald as any we have about, say, Catholic priests...
Yeah, but all the guardians you see in the game are under the watchful eye of the leader, so any "spiritually pure" types are probably not going to be taking bribes like that where the leader will know about it.
But maybe this would be a better application for
#chat, which I feel doesn't fulfill its potential as a gameplay action.Agreed, this fits better in #chat, and #chat would benefit from more complex interactions with monsters. Some variants implement a #give command, but I prefer expanding #chat over adding a new command.
Reacted by Umbire
Scenario:
Playing dwarven valkyrie in debug mode, because I play too cautiously for real. In a real game, this game-ending mistake would have upset me.
Arrive on "Home 1" in the quest. Wielding Mjollnir, to signal that I am a worthy Viking to my Quest Leader, whom I have not yet met. Get to the front door of the Norn's house only to find 2 fire giants (the first of whom busts the door down to get at me) and some fire ants. Kill the giants. Prepare to employ tinning kit on them.
Fire ant shows up, indoors. Swing Mjollnir to kill it. The digital dice roll, and I knock it back...into "peaceful warrior".
Warrior is peaceful no more. Oops.
Nor are his buddies.
Nor is the Norn.
Wuh-oh.
The Norn walks over, utters the text corresponding to failing the alignment check 7 times (no warning, no second chance), and kicks my ass sideways (stethoscope says level 19 to my 11). I refuse to die many times, wishing for potions of full healing and blessed scrolls of taming. I can get the warriors calmed down one by one but the Norn is impervious, I guess from its MR 90.
I suppose the existing behavior could be justified on the basis of "well, yeah, you can still win the game with a blemished alignment record if you haul ass out of there as soon as you see the Norn coming, level up a lot, come back and kill it and all its friends. Good luck, jerk!"
But I wonder if this scenario was contemplated by the knockback code implementors.
Questions/ideas:
#offercommand for exactly this purpose, so it has an application somewhere other than an altar.)