Opened 3 years ago

Last modified 2 years ago

#12019 new defect

ULTIMA8: Bentic talks to himself during conversation

Reported by: vvs- Owned by:
Priority: low Component: Engine: Ultima
Version: Keywords:
Cc: Game: Ultima VIII: Pagan

Description

During conversation with Avatar Bentic keeps talking to himself while reading a book. This corrupts parts of the conversation text.

SCUMMVM commit 55a7e05439b6204bd7f9e62e568cc32dda772359 on Linux.

Change History (7)

comment:1 by mduggan, 3 years ago

Thanks for the report - I will take a look at this. I think this it's the same problem as Darion walking around the training area while you try to talk to him - the scheduled actions should be paused while talking so I have to work out how that happens in the original.

comment:2 by vvs-, 3 years ago

AFAIK this should be the same in all Ultima games, so you can make NPCs to skip their schedules entirely by talking to them at the right moment. This can be used to cheat or workaround bugs, e.g. before Dermot stuck in the inn in Ultima IX's Britannia.

comment:3 by mduggan, 3 years ago

I had a deeper look at the usecode(script) and these events should be blocked.

Here's my investigation notes for my own memory:

  • Use and Schedule event code are the same as the disassembly of the original game
  • Usecode class ids are all correct (adjusted from shape nos as the original game does)
  • Implementation of 0x78 (exclude) opcode is correct
  • BENTIC::enterFastArea():
    • kills any 0x205 type processes
    • spawns BENTIC::3A25 (proctype 0x205, not marked exclusive) which:
      • stops any animations
      • does another animation
      • gets a random value between 0x3C and 0x64
      • waits for that many timer ticks
      • spawns BENTIC::3AA1 (proctype 0x205, not marked exclusive) where he barks the book reading notes ("I never knew that..", "Fascinating!" etc)
  • BENTIC::use() is exclusive proctype 0x207, and spawns METHOD::0E4F which is a general conversation intro which:
    • checks if the npc is dead and:
      • If dead, kills proctype 0x207(use)
      • If not, kills proctype 0x205(scheduled actions), 0x200, 0x0F0(animation), 0x204(pathfinding), and sets avatar in stasis, has them say random things if the avatar is invisible, sets the somebodyTalking global, etc.

So this *should* kill the process, but for some reason it doesn't? I will try tracing it around this bit to see why.

Last edited 3 years ago by mduggan (previous) (diff)

comment:4 by mduggan, 3 years ago

I played with this some more and I'm having trouble reproducing the problem. Do you know if it's possible to do anything particular before talking to him that causes it to happen?

comment:5 by vvs-, 3 years ago

Now that you've said it I found it difficult to reproduce, indeed.

From my many attempts only few succeeded. It seems that it depends on Bentic's animation frame, though. If he is motionless then I can't reproduce it, and when I click on him while he turns pages he seems to continue talking. But I'm not absolutely sure, of course.

comment:6 by sev-, 3 years ago

Summary: Bentic talks to himself during conversationULTIMA8: Bentic talks to himself during conversation

comment:7 by mduggan, 2 years ago

Priority: normallow

Dropping priority as it's a fairly minor bug and seems hard to reproduce.

Note: See TracTickets for help on using tickets.