From 6b7a171dbe46012006c06bb7fde3676d25e38d3e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 23 Sep 2018 14:24:06 +0200 Subject: [PATCH] Ability pop-up fail, maybe will do something about it later --- asm/macros/battle_script.inc | 4 + data/battle_scripts_1.s | 1 + graphics/battle_interface/ability_pop_up.png | Bin 0 -> 343 bytes include/battle_interface.h | 1 + include/constants/battle_script_commands.h | 1 + src/battle_interface.c | 265 +++++++++++++++++++ src/battle_script_commands.c | 3 + 7 files changed, 275 insertions(+) create mode 100644 graphics/battle_interface/ability_pop_up.png diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 393f7f708f..dd9aab55a3 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1501,6 +1501,10 @@ .4byte \ptr .endm + .macro testabilitypopup battler + various \battler, VARIOUS_ABILITY_POPUP + .endm + @ helpful macros .macro setstatchanger stat, stages, down setbyte sSTATCHANGER \stat | \stages << 4 | \down << 7 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 19406a750e..ced9acefe9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1261,6 +1261,7 @@ BattleScript_HitEscapeEnd: end BattleScript_EffectPlaceholder: + testabilitypopup BS_BATTLER_0 attackcanceler printstring STRINGID_NOTDONEYET goto BattleScript_MoveEnd diff --git a/graphics/battle_interface/ability_pop_up.png b/graphics/battle_interface/ability_pop_up.png new file mode 100644 index 0000000000000000000000000000000000000000..4a36c3e697dcbc56485196a2e65756d262d26897 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN2DoVj>32o1(=20fod% zTq8 0) + { + do + { + CpuCopy32(windowTileData + 20, dest + 20, 12); + dest += 32, windowTileData += 32; + arg2--; + } while (arg2 != 0); + } +} + +#define MAX_CHARS_PRINTED 12 + +static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTileData2, u32 x1, u32 x2, u32 y, u32 color1, u32 color2, u32 color3) +{ + u32 windowId, i; + u8 *windowTileData; + u8 text1[MAX_CHARS_PRINTED + 1]; + u8 text2[MAX_CHARS_PRINTED + 1]; + + for (i = 0; i < MAX_CHARS_PRINTED; i++) + { + text1[i] = str[i]; + if (text1[i] == EOS) + break; + } + text1[i] = EOS; + + windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text1, x1, y, color1, color2, color3, &windowId); + TextIntoAbilityPopUp(spriteTileData1, windowTileData, 8); + RemoveWindow(windowId); + + if (i == MAX_CHARS_PRINTED) + { + for (i = 0; i < MAX_CHARS_PRINTED; i++) + { + text2[i] = str[MAX_CHARS_PRINTED + i]; + if (text2[i] == EOS) + break; + } + text2[i] = EOS; + + windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text2, x2, y, color1, color2, color3, &windowId); + TextIntoAbilityPopUp(spriteTileData2, windowTileData, 1); + RemoveWindow(windowId); + } +} + +static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2) +{ + PrintOnAbilityPopUp(gBattleMons[battlerId].nickname, + (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32), + (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32), + 7, 0, + 1, + 2, 7, 1); +} + +static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2) +{ + PrintOnAbilityPopUp(gAbilityNames[ability], + (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256, + (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256, + 7, 1, + 4, + 7, 9, 1); +} + +void CreateAbilityPopUp(u8 battlerId, u32 ability) +{ + u8 spriteId1, spriteId2; + + LoadSpriteSheet(&sSpriteSheet_AbilityPopUp); + LoadSpritePalette(&sSpritePalette_AbilityPopUp); + + spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp1, + sAbilityPopUpCoords[battlerId][0] + ABILITY_POP_UP_POS_X_SLIDE, + sAbilityPopUpCoords[battlerId][1], 0); + spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp2, + sAbilityPopUpCoords[battlerId][0] + ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF, + sAbilityPopUpCoords[battlerId][1], 0); + + StartSpriteAnim(&gSprites[spriteId1], 0); + StartSpriteAnim(&gSprites[spriteId2], 0); + + gSprites[spriteId1].tBattlerId = battlerId; + gSprites[spriteId2].tBattlerId = battlerId; + + PrintBattlerOnAbilityPopUp(battlerId, spriteId1, spriteId2); + PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2); +} + +static void SpriteCb_AbilityPopUp1(struct Sprite *sprite) +{ + if (!sprite->tHide) // Show + { + sprite->pos1.x -= 3; + if (sprite->pos1.x <= sAbilityPopUpCoords[sprite->tBattlerId][0]) + { + sprite->pos1.x = sAbilityPopUpCoords[sprite->tBattlerId][0]; + sprite->tHide = TRUE; + sprite->tFrames = 42; + } + } + else // Hide + { + if (sprite->tFrames == 0) + { + sprite->pos1.x += 3; + if (sprite->pos1.x >= sAbilityPopUpCoords[sprite->tBattlerId][0] + ABILITY_POP_UP_POS_X_SLIDE) + { + DestroySprite(sprite); + FreeSpriteTilesByTag(ABILITY_POP_UP_TAG); + FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + } + } + else + { + sprite->tFrames--; + } + } +} + +static void SpriteCb_AbilityPopUp2(struct Sprite *sprite) +{ + if (!sprite->tHide) // Show + { + sprite->pos1.x -= 3; + if (sprite->pos1.x <= sAbilityPopUpCoords[sprite->tBattlerId][0] + ABILITY_POP_UP_POS_X_DIFF) + { + sprite->pos1.x = sAbilityPopUpCoords[sprite->tBattlerId][0] + ABILITY_POP_UP_POS_X_DIFF; + sprite->tHide = TRUE; + sprite->tFrames = 42; + } + } + else // Hide + { + if (sprite->tFrames == 0) + { + sprite->pos1.x += 3; + if (sprite->pos1.x >= sAbilityPopUpCoords[sprite->tBattlerId][0] + ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF) + { + DestroySprite(sprite); + FreeSpriteTilesByTag(ABILITY_POP_UP_TAG); + FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + } + } + else + { + sprite->tFrames--; + } + } +} diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c352f7521f..12b8f020bc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6776,6 +6776,9 @@ static void atk76_various(void) gBattlescriptCurrInstr += 7; } return; + case VARIOUS_ABILITY_POPUP: + CreateAbilityPopUp(gActiveBattler, ABILITY_SPEED_BOOST); + break; } gBattlescriptCurrInstr += 3;