diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-07 14:31:23 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-07 14:31:23 -0400 |
commit | f7742a68ae57ffa9e7b965c6cc816f7977b9e467 (patch) | |
tree | 028de59ef25f7e353b5eebb2c31b1fec4fae99c1 /src | |
parent | 12562aa2d42e1692aff319b091258d5c24a9e040 (diff) |
AddPseudoFieldObject
Diffstat (limited to 'src')
-rw-r--r-- | src/field_map_obj.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 819721773..c434ee7db 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1,6 +1,7 @@ // Includes #include "global.h" +#include "malloc.h" #include "sprite.h" #include "rom4.h" #include "field_player_avatar.h" @@ -30,6 +31,7 @@ void sub_8096518(struct MapObject *, struct Sprite *); /*static*/ void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); /*static*/ void GetFieldObjectMovingCameraOffset(s16 *, s16 *); /*static*/ struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8, u8, u8); +/*static*/ void sub_808E894(u16); // ROM data @@ -618,3 +620,28 @@ void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObje { MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObjectTemplate->graphicsId, mapObjectTemplate->movementType, spriteTemplate, subspriteTables); } + +u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) +{ + struct SpriteTemplate *spriteTemplate; + const struct SubspriteTable *subspriteTables; + struct Sprite *sprite; + u8 spriteIdx; + + spriteTemplate = malloc(sizeof(struct SpriteTemplate)); + MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, callback, spriteTemplate, &subspriteTables); + if (spriteTemplate->paletteTag != 0xffff) + { + sub_808E894(spriteTemplate->paletteTag); + } + spriteIdx = CreateSprite(spriteTemplate, x, y, subpriority); + free(spriteTemplate); + + if (spriteIdx != MAX_SPRITES && subspriteTables != NULL) + { + sprite = &gSprites[spriteIdx]; + SetSubspriteTables(sprite, subspriteTables); + sprite->subspriteMode = 2; + } + return spriteIdx; +} |