sean-gugler / u4remasteredA2

Ultima IV Remastered for the Apple II
57 stars 7 forks source link

Trainer doesn't seem to work #18

Closed apenney closed 5 days ago

apenney commented 6 days ago

No matter what I do I'm unable to get the trainer to work on a real 2e. I'm booting off a floppy emu, and mashing T during the boot process but I never get to any kind of trainer menu, despite trying several times.

Any debugging I could do to help figure out what might be going on?

sean-gugler commented 6 days ago

Maybe your CAPS LOCK key is off? It must be on to play Ultima IV.

If that's not the issue, I'd be interested in working with you to figure out the problem. On the other hand, if you just want to play the game, I can show you how to patch it so the trainer always starts, without needing to press T at all.

apenney commented 6 days ago

Caps lock was definitely on (I tried both ways, tried pressing t constantly, holding it, etc over a number of boots).

I would try booting from a real disk but unfortunately my disk ][ appears bust so I can’t write it out to a real floppy to try that way either!

sean-gugler commented 6 days ago

Does the game otherwise work? It responds to key presses normally?

If you want to try patching to force the trainer to appear, here are two ways. I've tested these on the Release 1.2.10 disk images in the AppleWin emulator.

  1. If you are comfortable using a hex editor, edit the 'u4program.do' file with your favorite utility. At offset 0x0001A860 you'll find this run of bytes: C1 A4 C5 B4 B0 B0 8D 00 AD 00 C0 C9 54 F0 16 20 Change the two bytes at 0x0001A86B from C9 54 to to A9 00.

  2. Alternatively, you can make the same patch directly on your Apple IIe. Boot your machine with a standard DOS 3.3 disk. Insert the Ultima IV Program disk, and from the Applesoft prompt issue this series of commands:

    ]BLOAD INIT
    ]POKE 16743,169
    ]POKE 16744,0
    ]UNLOCK INIT
    ]BSAVE INIT,A$4000,L$1E6
    ]LOCK INIT
sean-gugler commented 6 days ago

I'm curious what the following Applesoft program will do on your machine. If you can make a blank disk image, boot up with DOS 3.3 and then init your blank with the following program:

10  PRINT  PEEK (49152)
20  PRINT "BOOTING..."
30  FOR A = 1 TO 2000: NEXT
40  PRINT  PEEK (49152)
50  GET I$
60  PRINT I$

]INIT HELLO

On the emulator, this program prints a 0 before "BOOTING" and then, if I press T when I see that message, it prints 212 after a two-second delay.

If I press T immediately upon booting, before I see the message, it prints 212 before the message instead of 0.

What does yours do?

sean-gugler commented 6 days ago

Ok, on further testing, I find that spamming the T button will cause the menu to not appear, even in the emulator.

Can you try with the release disk image, unpatched, just pressing T once during startup? If this works, then I know what to fix and can release an update.

apenney commented 6 days ago

Turns out that's exactly it! My own impatience made me press it too many times, not sure if anything was happening. A single press and then nothing does indeed bring up the menu after a while!

sean-gugler commented 5 days ago

Awesome! Thank you for bringing this to my attention.

Fixed in Release 1.2.11 - mashing the T button will now work as well as pressing it just once. The keypress detection is no longer timing sensitive.