From 9e0a1ddb3677e8d6b7f0a428f31e7e5f4fe4c74b Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Fri, 1 Feb 2019 05:45:26 +0100 Subject: [PATCH] IsOnCharacter: properly support subbitmaps (for instance spritesheets) --- src/character.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/character.c b/src/character.c index 2e0a344..688c365 100644 --- a/src/character.c +++ b/src/character.c @@ -644,7 +644,11 @@ SYMBOL_EXPORT bool IsOnCharacter(struct Game* game, struct Character* character, if (test && pixelperfect) { al_invert_transform(&transform); al_transform_coordinates(&transform, &x, &y); - ALLEGRO_COLOR color = al_get_pixel(character->frame->bitmap, (int)x - character->spritesheet->frames[character->pos].x, (int)y - character->spritesheet->frames[character->pos].y); + int xpos = (int)x - character->spritesheet->frames[character->pos].x, ypos = (int)y - character->spritesheet->frames[character->pos].y; + if (xpos < 0 || ypos < 0 || xpos >= al_get_bitmap_width(character->frame->bitmap) || ypos >= al_get_bitmap_height(character->frame->bitmap)) { + return false; + } + ALLEGRO_COLOR color = al_get_pixel(character->frame->bitmap, xpos, ypos); return (color.a > 0.0); }