Opened 22 months ago
Closed 6 months ago
#14032 closed defect (fixed)
ULTIMA8: Death Speak does not immediately close gumps
Reported by: | OMGPizzaGuy | Owned by: | OMGPizzaGuy |
---|---|---|---|
Priority: | normal | Component: | Engine: Ultima |
Version: | Keywords: | ||
Cc: | Game: | Ultima VIII: Pagan |
Description
If Death Speak is cast, not all GUMPS close immediately and you are unable to use the cross hairs to manipulate any GUMPS. The paper doll gump closes immediately, while open inventory closes after target picked (process added but not immediate execution?) and minimap does not close.
Original game immediately closes all gumps.
This can be quickly tested with Cheat::Toggle, clicking the Avatar to get the cheat menu and casting the spell from the fire category.
The original game also has the cheat menu when cheats are enabled:
https://wiki.ultimacodex.com/wiki/Cheating_in_Ultima_VIII
Change History (4)
comment:1 by , 20 months ago
Summary: | Death Speak does not immediately close gumps → ULTIMA8: Death Speak does not immediately close gumps |
---|
comment:2 by , 6 months ago
comment:3 by , 6 months ago
The function that closes items appears to correctly find each item and check if it is an NPC. If so, it closes the gump immediately. Otherwise it calls Item::I_use, which spawns a usecode process that will eventually close the gump. Then the current usecode process calls TargetGump::I_target, which immediately opens the target gump, which is modal and prevents other processes from running.
The solution might be to alter TargetGump::I_target to spawn a process instead to start the target gump when it runs. However, it's worth noting that target in the original game is not modal, so we could also try simply changing to that.
Closing gumps appears to be handled by Func_36E7 FREE::36E7.
This function searches for items and closes their gumps. This means non-item-relative gumps, like the minimap, cannot close from this function without associating it to an item.