Pokemon Gen 1 Type Effectiveness glitches
According to Bulbapedia, typed moves against dual type Pokemon (eg Grass vs Water/Flying) do inflict neutral damage, but there is a glitch which causes the 'Not very effective' message:
Dual-type damage misinformation
In Generation I, Pokémon with two types that have a weakness and resistance to the same type receive neutral damage from that type, but the incorrect message is displayed.
For example, Grass-type moves do neutral damage to Gyarados, but if Gyarados is hit by a Grass-type move, the game erroneously states that the attack is "not very effective...".
The 'Not very effective' text caption is triggered by a glitch with the way info messages are chosen and prioritized, which does not respect dual-typing. So for our Grass move v Water/Flying example:
- Grass v Water is checked 4th -> message is set to 'Super Effective'
- Grass v Flying is checked 27th -> message is set to 'Not Very Effective'
...Consequently, in this example, the game chooses the message for scenario #27, returning the wrong message "It's not very effective...".
You can read more about the glitch on Bulbapedia