Old school D&D uses few opposed rolls (with the exception of attack versus AC and damage versus HP). A spell saving throw, for example, requires the same roll if you're the target of a first-level elf or a 14th level magic-user. As I've noticed before:
But, basically, any roll in which the possibility of success relies on both your skill/power and your opponents' skill/power can be considered an opposed rolls. Which is very common today, but NOT usually the case with old school D&D. Saving throws, moving silently, hear noise, etc., were often used without any regard for the opposition's capabilities. Traditionally, there is no "contest" between move silently and hear noise, for example; these abilities are "self referential", relying solely on the character attempting them.
There are some opposed rolls in old school D&D, but they are often disguised and made complicated for no apparent reason. For example, giving the thief a 5% penalty to pick pocket for each level of the victim beyond level 5 is identical to just adding +1 per level on a d20 roll after level 5. Turn Undead is also a opposed roll between the cleric's level and the undead's HD.
The lesson here, I think, is that because D&D is a "class & level" game, opposed rolls should always take level into consideration. Used in this way, opposed rolls reinforce the "class and level" aspect of the game in a way that "rolling under ability score" does not.
Dispel magic is another good example. Some creatures work similarly (e.g., the phase spider, which I use as an example below, imposes a -4 penalty to poison save in the RC, unlike an "ordinary" giant spider).
This bothers me, since I happen to like opposed rolls. AND I enjoy aspects from both old school and contemporary D&D. So when I wrote Dark Fantasy Basic, I used opposed rolls, despite fearing it would make the game harder to use with OS/OSR modules.
I failed to see how to have both within the same system; either the roll is self-referential ("roll 12+ to save versus poison - any poison") or the difficulty is defined by your foe ("roll 12+ to resist giant spider poison, but you need 16+ if the spider is huge like Shelob the great").
And this changes the game fundamentally, since it affects the very essence of how saving throws work.
Maybe you already realized that I missed an obvious solution...
Here it is: use the old school method, but, as an optional rule, add the difference in HD to the roll.
Lets say you're a 3rd level fighter, and your poison save is 14. When facing a 2 HD snake, you get a +1 bonus, needing only 13 or more to succeed. But when facing a 8 HD phase spider, you get a -5 penalty.
If you're using target 20, this is even easier; just add your level to your roll and try to roll 20+, or , if using the optional rule, add TWICE your level to your roll and try to roll 20+monster HD.
Use this if you want high HD monsters and heroes to be significantly stronger against low-level creatures. Which I like; the 5e purple worm causing 3d6+9 damage plus 12d6 poison on a failed save seems more reasonable to me than 1d8 plus save versus death.
There are a few problems with this approach. It's too fiddly, and not strictly necessary; it requires one additional step; it makes the poison of a purple worm deadly 100% of the times against that 3rd level fighter (fighting a purple worms at level 3 is a bad idea anyway... and the same would happen in 5e); and we have to consider how to count PC's HD after level 9 (especially if you're going all the way to 36).
Also... I like how Dark Fantasy Basic turned out. 1d20+stat+skill, versus 1d20+HD, and that's it. Works well, and you could hardly make it simpler. Maybe I should do the opposite then: use the DFB method and leave the fixed target as an optional rule (say, roll 20+ to succeed against anything).
Anyway... its a start!