I asked Claude to do it and it did.
Also fixed waterworld https://youtu.be/2bj_SaMMNxs.
I can upload the roms NOT TESTED ON REAL HARDWARE.
Black Knight 2000 competition ROM - changes from stock LA-4
============================================================
CPU ROMs only: bk2k_u26.l4 and bk2k_u27.l4 (sound ROMs are unchanged from stock).
Builds
bk2k_comp_perplayer_locks : per-player jackpot that advances over time (max 4M)
bk2k_comp_fixed_locks : fixed 1M jackpot for every player
Everything else below is identical in both.
CHANGES FROM STOCK
1. Per-player RANSOM letters
Stock: one RANSOM letter count shared by all players and kept between games.
Now: each player has their own count.
2. Jackpot
Stock: one jackpot shared by all players and kept between games (starts 1M, advances with AD47, max 4M).
perplayer build: each player has their own jackpot, same start/advance/max rules.
fixed build: jackpot stays at 1M and never advances.
3. New-game reset
Jackpot and RANSOM letters reset at the start of every new game (stock keeps them between games).
4. Locks Stolen relock
When a player's turn ends the game records how many balls are locked. At that player's next ball start, if
fewer balls are locked than when they left (another player's multiball took them), the drawbridge routine
(u26 $539B, the one the drawbridge/skyway award code uses) runs, and again after each lock that player makes,
once per stolen lock. A player's own multiball does not count.
5. Spin / Lightning Wheel award
Stock: random award, chosen by the game's weighted logic.
Now: fixed order, the same for every player, one award per spin hit, repeating every 16 hits. Each player
has their own position in the order (saved per player in byte $0153). Starts at their first ball.
Order (award index = entry in the game's spin table at u26 $4DD6):
hit 1: 5 hit 5: 9 hit 9: 13 hit 13: 1
hit 2: 10 hit 6: 14 hit 10: 2 hit 14: 6
hit 3: 15 hit 7: 3 hit 11: 7 hit 15: 11
hit 4: 4 hit 8: 8 hit 12: 12 hit 16: 0
Award identity of each index:
0 extra ball lit (skyway) 2 magna save lit 4 drawbridge down (probable)
6 spot RANSOM letter 8 special (probable) 10 kickback lit
12 challenge mode (guess) 14 hurry up (probable)
1,3,5,7,9,11,13,15 the 8 score awards (10k-200k; which index is which score is not mapped)
Skipping: an award that cannot be given right now is skipped and the next in order is used (a skipped award is
not made up later; if all are skipped the current one is given):
0 extra ball: skipped if already lit (flag $18 bit 7) or AD11 max extra balls is 0 / reached
2 magna save: skipped if already lit (flag $12 bit 2)
10 kickback: skipped if already lit (flag $12 bit 6)
8 special: skipped if AD38 percent special is 0
12 challenge: skipped if the mode flags $18 bit 6 or bit 1 are set, or balls are locked
4, 6, 14 and the scores: never skipped
AD34 FREE SPINS works as in stock (default 4 lit spins at the start of each player's game).
6. Defaults (applied on the first-boot NVRAM reset)
AD23 Free Play: YES (stock NO). AD36 (now SHOW COMP INFO) ad display: YES (stock NO).
7. Attract-mode ad text
The T-shirt ad (message-table entries 82-85) now reads:
screen 1: BLACK KNIGHT 2K / COMPETITION MOD screen 2: FIXED SPIN ORDER / GOOD LUCK
Adjustment AD36 (stock name "T-SHIRT DISPLAY") is renamed "SHOW COMP INFO" (the menu line holds 16 characters, so
"SHOW COMP MOD INFO" does not fit). It is still a YES/NO setting that switches this ad on or off (default YES);
it could not be removed or locked on.
8. ROM ID
"563 LAo4" (LA-4) changed to "563 CPo1" (CP-1). The ID is compared with NVRAM at boot, so the first boot with
this ROM resets NVRAM to defaults.
9. Boot ROM test
Each patched 4K page has one adjusted byte so every page of $4000-$FFFF still sums to $80.
LOCATIONS (for reference)
New code: u27 $B1E6 (new-game), $BFC8 (player change + slot helper), $C0BC (relock after each lock);
u26 $5D59 (relock at ball start), $6506 (spin order), $67BE (spin counter init).
Hooks: u26 $5CFB, $5A4D, $5A53, $5007, $5C53 (spin counter init). RAM used: $0540-$0559.
Ad text lines: u26 $6576-$65BB, pointers at u27 $9A18-$9A1F. AD36 name: u26 $65BC-$65CB, pointer at u27 $B15F.
The old random spin code at u26 $6518-$669A is unused (apart from the ad text above).
Adjustable single bytes (u26 file offset = address - $4000):
jackpot start, millions (stock 01): u26 $5D3A jackpot max, millions (stock 04): u26 $57B9
RANSOM start letter 1-5 (stock 01): u26 $4085, $58EC, u27 $B1EA
spin cycle start: u26 $67BF (first award = (value+5) mod 16)
After editing any byte, recompute the page fixup bytes (build.py does this).
Edited by Joe, Today, 02:18 AM.



Top








are all trademarks of VPFORUMS.