Вид приза зависит от кадра игры, в котором враг умирает, а не от кадра его анимации.
Если упрощать, то любая игра для NES со случайностью будет зависеть от кадра игры, потому что нет другой случайности, кроме ввода пользователя, который обычно проверяют один раз за кадр.
Т. е. эта фраза ни о чём не говорит. UPD2: Я ошибся, можно представить случайность, которая бы зависела от того же кадра анимации врага (или героя) в момент смерти врага или высчитываться до смерти, т. е. быть без привязки к кадрам игры в момент смерти врага, но и случайность тогда была бы плохой.
В Darkwing Duck устроено так. Есть 4 байта для генерации случайности в RAM $E4-E7 с начальными значениями 88 00 00 00. Каждый кадр производится XOR между одним битом от $E4 и одни битом от $E5, его значение добавляется слева (старший бит) в $E4, а вместе с этим сдвигаются все биты на 1 у $E4-E7 вправо с переходом между собой, как если бы это было одно число из 4 байт, на языке C или Python было бы: u32var = (u32var >> 1) | (((u32var << 6) ^ (u32var << 14)) & 0x80000000). Код с CPU $C2DE:
LDX #$00
LDY #$04
LDA $E4,X ; Почему не LDA $E4 ?
AND #$02
STA $00
LDA $E5,X ; Почему не LDA $E5 ?
AND #$02
EOR $00
CLC
BEQ L_C2F2
SEC
L_C2F2:
ROR $E4,X
INX
DEY
BNE L_C2F2
RTS
Когда нужна случайность, в одном случае складываются RAM $E4 и $E5, сохраняя в $E5, и от этого только 3 младших бита (LDA $E4 / ADC $E5 / STA $E5 / AND #$07). Для случая с врагом складываются уже $E5 и $E6, сохраняя в $E6, значение должно быть между 0x7F и 0xFF (129 значений из 256) от этого берётся 5 младших битов (32 значения) и становится индексом для таблицы предметов, в которой разбросаны значения с повторами для неравномерного распределения (значение на кол-во повторов: 1C * 5, 1D * 8, 22 * 5, 23 * 6, 24 * 3, 25 * 5). Код с CPU $875F (банк 6):
LDA $E5
ADC $E6
STA $E6
CMP #$7F
BCC $87A1 ; Не давать
AND #$1F
TAY
STY $0E
LDA $87A2,Y
UPD: Вдохновение для алгоритма возможно бралось от
https://en.wikipedia.org/wiki/Linear-feedback_shift_register, я не силён в математике.
UPD3: Не по теме. Я думал о случайной генерации поля логической игры для NES: появляется главное меню и при выборе игры будет только ограниченный набор, потому что небольшой диапазон кадров от начала игры. Можно позже увеличивать случайность по доп. нажатиям, но первая партия будет унылой. Как варианты: хранить случайность в сохранении на картридже; использовать специальный маппер с генератором (можно даже не псевдо, а настоящие случайные числа получить); заставить пользователя нажимать разные кнопки перед началом как было в Opera на Java ME.