You should be able to get the Y coordinate by this line of code
char1 = Characters["name1"].CharacterPosition
char2 = Characters["name2"].CharacterPosition
You could then compare them like that
IF char2.y >= (char1.y-10) AND char2.y <= (char1.y+10) THEN
To be in a range of 10, or if you want it to be exact
IF char1.y == char2.y THEN
For the bullet i suppose you could use animation, first you would start the animation
startAnimation(Animations["bullet"])
Then you would set the position for the animation based on where the character currently is
ActiveAnimations["bullet"].CurrentPosition = { x = char1.x, y = (char1.y-X)}
// You would need to calc the number of pixels you want to offeset the bullet for the X
And you could then animate the bullet with the To function
ActiveAnimations["bullet"]:to(200, { CurrentPosition = { x = char2.x, y = (char1.y-X)} }, easeQuintOut)
And i'm not sure if this would actually work, i didn't test it, but hopefully it will give you an idea.