To add more to spoonsinbunnies's comment, saying obj_enemy_orc.hp references an object not an instance. GM effectively picks an object at random (I think it's based upon creation order but I'm not sure) and checks that one. So if it picks the wrong orc, e.g. an orc who is not having its hp decreased, then even though you are decreasing the correct instances hp, it is not going to be destroyed.
I'm not sure who's step event is referenced by step, but if it is in the orc object, then you don't even need to reference the object id, you can just check if hp < 1. If it is in some other object, you will need to check differently. In this case, I would recommend the with statement:
Code:
with (obj_enemy_orc) {
if (hp < 1) {
instance_destroy();
obj_player.score += 15;
}
}
That will loop through all instances of object obj_enemy_orc and check each one individually to see if the hp is < 1.
Here are some things that might be helpful to read: