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.