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 tag2015, 20 months ago

Summary: Death Speak does not immediately close gumpsULTIMA8: Death Speak does not immediately close gumps

comment:2 by OMGPizzaGuy, 6 months ago

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.

comment:3 by OMGPizzaGuy, 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.

comment:4 by OMGPizzaGuy, 6 months ago

Owner: set to OMGPizzaGuy
Resolution: fixed
Status: newclosed

In ea269e31:

ULTIMA8: Target gump no longer pauses game.
This better matches behavior of orginal game, and fixes usecode behavior for closing item gumps.
Fixes #14032

Note: See TracTickets for help on using tickets.