crawl / crawl

Dungeon Crawl: Stone Soup official repository
https://crawl.develz.org/
Other
2.3k stars 1.34k forks source link

no warning for unwielding distortion weapons as coglin #3842

Open cfcfcfcfcfcfcfcfcfcf opened 3 months ago

cfcfcfcfcfcfcfcfcfcf commented 3 months ago

PLATFORM and OS or BROWSER: webtiles

DCSS VERSION AND GAME INFORMATION: 0.32-a0-1316-gbd61dd866b

DESCRIPTION: a warning was not given when unwielding a distortion weapon

EXTRA FILES: Things that are here: a +5 demon whip of flaming; a +0 plate armour You're wielding all the weapons you can. Replace which one? (? for menu, Esc to cancel) < or a - the +0 hand axe "Imegezob" {distort, rC+ Int+3 SInv}; > or b - a +4 demon trident {Shedsu-nefertum} You start parting from your weapon. You continue parting from the +0 hand axe "Imegezob" {distort, rC+ Int+3 SInv}. x4 You whisper farewell to the +0 hand axe "Imegezob". You finish parting from the +0 hand axe "Imegezob" {distort, rC+ Int+3 SInv}. You start attuning to your weapon. You continue attuning to your +5 demon whip of flaming. You are cast into the Abyss! This branch contains the abyssal rune of Zot. You continue attuning to your +5 demon whip of flaming. x4 You finish attuning to your +5 demon whip of flaming. Your +5 demon whip of flaming bursts into flame! You welcome your +5 demon whip of flaming "Conrad" into your grasp. You regained 3 hp, and now have 20/102 hp.

NormalPerson7 commented 3 months ago

I would also think "You are cast into the Abyss" should happen before, and interrupt, the equipping of your new weapon.

NormalPerson7 commented 2 months ago

Upon further investigation, the issue is that check_old_item_warning always returns true immediately for coglins, with a nearby comment saying that this is because the check for distortion (and inscriptions/artefact props) is supposed to be deferred until unwielding happens. unwield_weapon does this check properly, so when you try to unwield a distortion weapon as a coglin with w- it does prompt, but do_wield_weapon does not do this check, because that function assumes check_old_item_warning does it, and thus switching away from a distortion weapon to a different weapon as a coglin does not prompt (regardless of hand).

I looked into fixing this, and at some point I might have another go, but the code in invent.cc is awfully messy and outdated in a way that makes the fix more challenging than perhaps it should be.

The issue I noted above with the timing of "You are cast into the Abyss" is a separate bug for coglins. It appears that after unwielding a distortion weapon as a coglin, the unwield effect only occurs on the next turn (5 auts after the unwield delay ends, to be precise) - this is extremely jarring when you unwield a distortion weapon with w-.

A third issue I discovered, and I don't know if it's related, is that the interrupt prompt from being banished by distortion (and this possibly applies to other things too, I haven't tested) occurs before the terrain in the Abyss actually generates on screen, meaning it's hard for the player to judge whether they should continue equipping their new weapon or not.