The RNG table in the KERNEL.BIN comes into full force in this one. Those values determine what is capable of dropping. There are slots in RAM for a max of at least four items (might be more) being dropped at the end of a battle, but the RNG values usually don't allow that. The (pseudo)code to determine if an item drops or not is as follows:
ItemDrop ( EnemyData, isDrop, AllowRandom, ChanceMultiplier)
{
WORD dropped_item = -1; //no item
for ( int i = 0; i < 4; i++ ) //loop through the enemies' held item data
{
if ( ( EnemyData(136 + i) ) AND C0h ) == isDrop ) //if isDrop is a 0 then we're looking for drop items instead of steal items
{
DropChance = AllowRandom ? 256 : ChanceMultiplier * ( ( EnemyData(136 + i) ) AND 3Fh ) / 256; //special battles (like bosses or WEAPONS) have guaranteed drop rates, otherwise we'll use chance)
/*
* The multiplier is usually worked like this:
*
* ( ( Thiefs_Level + 40 - Targets_Level ) << 9 ) / 100
*
* If Targets_Level = Thiefs_Level it turns out to be 204, but the multiplier won't go higher than 200%
*/
if ( ( RandomRNGByte AND 63h ) <= DropChance )
{
dropped_item = EnemyData(140 + i * 2);
}
}
}
return dropped_item;
}
Basically, in a normal battle, if the random byte AND 63h is less or equal to the item's drop chance * multiplier (which is signed, so you need to be at no fewer than 39 levels below your target enemy to even have a chance) then the item drops. An Eagle Gun (lvl 46) will never drop an X-Potion (rate of 63) if killed by a character at level 7 or below, but a Master Tonberry (Lvl 77) will have a 1:6.452 chance of dropping a Megalixer (rate of
for a level 99 character. A few conditions to this:
The first item an enemy holds that drops, drops.
ex.
The Special Combatant enemy from Reactor 5 has two items to drop. He can drop an Antidote at a rate of 8 and a Grenade at a rate of 2. If the Antidote doesn't drop, the game goes for the Grenade. So there's a 0.8:8, or 1:10, chance that an Antidote will drop. If it doesn't, there is another .8:32, or 1:40, chance that the Grenade will drop. There doesn't seem to be anything else that influences drop rates. I don't see where the game doesn't allow all enemies to drop things.
Like NxK said, the enemy won't drop anything if it has been stolen from.
Back to the issue, this is handled as the enemy dies. So if they don't all die at once the RNG is going to keep moving around. Getting it to cooperate, let alone knowing where the pointer is, is nigh impossible in most cases, but this is relatively easy. Since it just requests a byte the Random Number Set isn't incremented. So you're looking for a certain pattern in the RNGLUT. You need to find a chain of them that all meet that criteria. I'm not certain there are any that do. The RNGLUT may have been constructed in such a way that situations like that are difficult.
Moral is: it CAN produce drops from all enemies (or you wouldn't get drops from single enemy battles like Adamantaimai), but you haven't hit the right string of numbers yet. It would take at least 256 attempts to try all the patterns in the RNGLUT.