Skip to content

Commit

Permalink
Fix Up Type-Changing Moves
Browse files Browse the repository at this point in the history
-Make Multi-Attack work
-Natural Gift mechanics polish
-Interactions with type-changing moves and Z-Moves/Max Moves.
  • Loading branch information
Skeli789 committed Mar 4, 2020
1 parent 22699f8 commit d1294d7
Show file tree
Hide file tree
Showing 21 changed files with 232 additions and 127 deletions.
16 changes: 14 additions & 2 deletions assembly/battle_scripts/general_attack_battle_scripts.s
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ BS_001_SetSleep:
attackcanceler
attackstring
ppreduce
callasm CheckIfDarkVoidShouldFail
callasm CheckIfExclusiveMoveShouldFail
jumpifbehindsubstitute BANK_TARGET FAILED
trysetsleep BANK_TARGET BS_StatusMoveFail
accuracycheck BS_MOVE_MISSED_PAUSE 0x0
Expand Down Expand Up @@ -98,6 +98,7 @@ BattleScript_DarkVoidFail:
setword BATTLE_STRING_LOADER CantUseHyperspaceFuryString
printstring 0x184
waitmessage DELAY_1SECOND
orword HIT_MARKER HITMARKER_UNABLE_TO_USE_MOVE
goto BS_MOVE_END

.global BattleScript_PauseResultMessage
Expand Down Expand Up @@ -1961,8 +1962,17 @@ BS_095_Sketch:
.global BS_096_RaiseAttackerSpd1Chance
BS_096_RaiseAttackerSpd1Chance:
setmoveeffect MOVE_EFFECT_SPD_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
jumpifmove MOVE_AURAWHEEL AuraWheelBS
goto BS_STANDARD_HIT

AuraWheelBS:
attackcanceler
attackstring
ppreduce
callasm CheckIfExclusiveMoveShouldFail
accuracycheck BS_MOVE_MISSED 0x0
goto BS_HIT_FROM_DAMAGE_CALC

@;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

.global BS_097_SleepTalk
Expand Down Expand Up @@ -4637,8 +4647,10 @@ BS_220_NaturalGift:
seteffectwithchancetarget
prefaintmoveendeffects 0x0
faintpokemonaftermove
setbyte CMD49_STATE 0x0
cmd49 0x0 0x0
removeitem BANK_ATTACKER
goto BS_MOVE_END
end

NaturalGiftMiss:
attackstring
Expand Down
9 changes: 4 additions & 5 deletions assembly/battle_scripts/item_battle_scripts.s
Original file line number Diff line number Diff line change
Expand Up @@ -507,16 +507,15 @@ BattleScript_RedCard:
jumpifdynamaxed BANK_ATTACKER RedCard_Dynamax
jumpifspecialstatusflag BANK_ATTACKER STATUS3_ROOTED 0x0 RedCard_Ingrain
jumpifability BANK_ATTACKER ABILITY_SUCTIONCUPS RedCard_SuctionCups
copybyte SEED_HELPER TARGET_BANK
copybyte TARGET_BANK USER_BANK
playanimation BANK_TARGET DRAGON_TAIL_BLOW_AWAY_ANIM 0x0
playanimation BANK_ATTACKER DRAGON_TAIL_BLOW_AWAY_ANIM 0x0
callasm ClearAttackerDidDamageOnce
callasm TryRemovePrimalWeatherOnPivot
swapattackerwithtarget @;Puts attacker (who's being switched out) into target
forcerandomswitch RedCardSwapBanksBack

RedCardSwapBanksBack:
copybyte TARGET_BANK SEED_HELPER
swapattackerwithtarget

RedCardEnd:
removeitem BANK_SCRIPTING

Expand Down
68 changes: 58 additions & 10 deletions assembly/data/attack_anim_table.s
Original file line number Diff line number Diff line change
Expand Up @@ -16115,11 +16115,59 @@ ANIM_BEHEMOTH_BASH:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.pool
@Credit to -
@Credit to Skeli
ANIM_AURA_WHEEL:
goto 0x81c6f34 @ANIM_POUND
loadparticle ANIM_TAG_IMPACT
loadparticle ANIM_TAG_SPARK
loadparticle ANIM_TAG_SPARK_2
launchtask AnimTask_pal_fade_particle 0x5 0x5 ANIM_TAG_SPARK 0x0 0xC 0xC 0x303B @;Pinkish-Red Electricity
launchtask AnimTask_pal_fade_particle 0x5 0x5 ANIM_TAG_SPARK_2 0x0 0xC 0xC 0x76E1 @;Blue Electricity
launchtask AnimTask_pal_fade_particle 0x5 0x5 ANIM_TAG_IMPACT 0x0 0xA 0xA 0x303B @;Pinkish-Red
setblends 0x80C
pokespritetoBG side_target
leftopponentbankBG_over_partnerBG 0x1
launchtemplate AURA_WHEEL_ELECTRICITY_BLUE TEMPLATE_ATTACKER | 3, 0x4 0x0 0x0 0x38 0x0
playsound2 0x70 SOUND_PAN_ATTACKER
pause 0x2
launchtemplate AURA_WHEEL_ELECTRICITY_RED TEMPLATE_ATTACKER | 3, 0x4 0x0 0x0 0x38 0x4
playsound2 0x70 SOUND_PAN_ATTACKER
pause 0x2
launchtemplate AURA_WHEEL_ELECTRICITY_BLUE TEMPLATE_ATTACKER | 3, 0x4 0x0 0x0 0x38 0x8
playsound2 0x70 SOUND_PAN_ATTACKER
pause 0x2
launchtemplate AURA_WHEEL_ELECTRICITY_RED TEMPLATE_ATTACKER | 3, 0x4 0x0 0x0 0x38 0xc
playsound2 0x70 SOUND_PAN_ATTACKER
pause 0x2
launchtemplate AURA_WHEEL_ELECTRICITY_BLUE TEMPLATE_ATTACKER | 3, 0x4 0x0 0x0 0x38 0x10
playsound2 0x70 SOUND_PAN_ATTACKER
pause 0x2
launchtemplate AURA_WHEEL_ELECTRICITY_RED TEMPLATE_ATTACKER | 3, 0x4 0x0 0x0 0x38 0x14
playsound2 0x70 SOUND_PAN_ATTACKER
pause 0x2
launchtemplate AURA_WHEEL_ELECTRICITY_BLUE TEMPLATE_ATTACKER | 3, 0x4 0x0 0x0 0x38 0x18
playsound2 0x70 SOUND_PAN_ATTACKER
waitanimation
launchtemplate Template_SlideMonToOffset TEMPLATE_ATTACKER | 2, 0x5 0x0 0x18 0x0 0x0 0x6
pause 0x4
playsound2 0xd6 SOUND_PAN_TARGET
launchtask AnimTask_move_bank 0x2 0x5 bank_target 0x5 0x0 0x17 0x1
launchtemplate Template_Hit 0x4 0x4 0xfff6 0x0 0x1 0x0
launchtask AnimTask_pal_fade_particle 0x5 0x5 ANIM_TAG_SPARK_2 0x2 0xC 0x0 0x76E1 @;Revert blue Electricity
launchtemplate 0x83e6070 TEMPLATE_TARGET | 4, 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 TEMPLATE_TARGET | 4, 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 TEMPLATE_TARGET | 4, 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003
launchtemplate 0x83e6070 TEMPLATE_TARGET | 4, 0x8 0x0 0x0 0x30 0x2c 0xc0 0x28 0x2 0x8003
pause 0x7
launchtemplate Template_SlideMonToOriginalPos TEMPLATE_ATTACKER | 2, 0x3 0x0 0x0 0x9
waitanimation
pokespritefromBG side_target
resetblends
endanimation

.align 2
AURA_WHEEL_ELECTRICITY_BLUE: objtemplate ANIM_TAG_SPARK_2 ANIM_TAG_SPARK_2 OAM_NORMAL_16x16 0x8231CF0 0x0 0x83E7604 0x80ACDE9
AURA_WHEEL_ELECTRICITY_RED: objtemplate ANIM_TAG_SPARK_2 ANIM_TAG_SPARK OAM_NORMAL_16x16 0x8231CF0 0x0 0x83E7604 0x80ACDE9

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.pool
@Credit to Skeli
Expand Down Expand Up @@ -19958,7 +20006,7 @@ FINISH_SPARKSURFER:
waitforBG
makebankvisible bank_target
launchtask 0x80aea11 0x5 0x1 0x4
playsound2 0x6f SOUND_PAN_ATTACKER
playsound2 0x6f SOUND_PAN_TARGET
waitanimation
unloadparticle ANIM_TAG_SPARK
unloadparticle ANIM_TAG_FOCUS_ENERGY
Expand All @@ -19968,16 +20016,16 @@ FINISH_SPARKSURFER:
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x30 0x2c 0xc0 0x28 0x2 0x8003
call SPARKSURF_SPARK_GEYSER
launchtask AnimTask_pal_fade 0xa 0x5 PAL_DEF | PAL_ATK 0x2 0x0 0x10 0x5bff
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x37 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x37 0x2c 0xc0 0x28 0x2 0x8003
call SPARKSURF_SPARK_GEYSER
launchtask 0x80ae8a1 0x5 0x0 @ attacker flicker back
playsound2 0x70 SOUND_PAN_ATTACKER
playsound2 0x70 SOUND_PAN_TARGET
pause 0x4
launchtemplate 0x83e6204 0x2 0x3 0x0 0x10 0x10
pause 0x2
Expand All @@ -19996,11 +20044,11 @@ SPARKSURF_SPARK_GEYSER:
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x5 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x5 0x2c 0xc0 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0x00 0x15 0x2c 0xc0 0x28 0x2 0x8003
pause 0x4
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003
Expand All @@ -20009,15 +20057,15 @@ SPARKSURF_SPARK_GEYSER:
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x5 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x5 0x2c 0xc0 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003
pause 0x4
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffbe 0x5 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffbe 0x5 0x2c 0xc0 0x28 0x2 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003
launchtemplate 0x83e6070 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003
pause 0x1a
Expand Down
4 changes: 4 additions & 0 deletions assembly/data/move_tables.s
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,8 @@ gMetronomeBannedMoves:
.hword MOVE_VCREATE
.hword MOVE_WIDEGUARD
.hword MOVE_OBSTRUCT
.hword MOVE_DARKVOID
.hword MOVE_AURAWHEEL
.hword MOVE_TABLES_TERMIN

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Expand Down Expand Up @@ -757,6 +759,8 @@ gTypeChangeExceptionMoves:
.hword MOVE_STRUGGLE
.hword MOVE_TECHNOBLAST
.hword MOVE_WEATHERBALL
.hword MOVE_MULTIATTACK
.hword MOVE_AURAWHEEL
.hword MOVE_TABLES_TERMIN

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Expand Down
Binary file modified deps/wav2agb.exe
Binary file not shown.
1 change: 1 addition & 0 deletions include/battle_controllers.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ struct ChooseMoveStruct
bool8 megaDone : 1;
bool8 ultraDone : 1;
bool8 dynamaxDone : 1;
bool8 dynamaxed : 1;
bool8 bank;
u8 zPartyIndex;
u16 possibleZMoves[MAX_MON_MOVES];
Expand Down
2 changes: 1 addition & 1 deletion include/new/battle_script_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
*/

//Exported Functions
void CheckIfDarkVoidShouldFail(void);
void CheckIfExclusiveMoveShouldFail(void);
void SetTargetPartner(void);
void SetTargetFoePartner(void);
void SetAttackerPartner(void);
Expand Down
2 changes: 0 additions & 2 deletions include/new/battle_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@ bool8 CheckHealingMove(u16 move);
bool8 CheckSoundMove(u16 move);
bool8 SheerForceCheck(void);
bool8 IsOfType(u8 bank, u8 type);
u8 GetMonType(struct Pokemon* mon, u8 typeId);
bool8 IsMonOfType(struct Pokemon* mon, u8 type);
bool8 LiftProtect(u8 bank);
bool8 ProtectsAgainstZMoves(u16 move, u8 bankAtk, u8 bankDef);
bool8 IsProtectedByMaxGuard(u8 bank);
Expand Down
2 changes: 2 additions & 0 deletions include/new/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ u32 GetBaseStatsTotal(const u16 species);
u8 FindMovePositionInMonMoveset(u16 move, struct Pokemon* mon);
bool8 MoveInMonMoveset(u16 move, struct Pokemon* mon);
bool8 AllHittingMoveWithTypeInMonMoveset(struct Pokemon* mon, u8 moveType);
u8 GetMonType(struct Pokemon* mon, u8 typeId);
bool8 IsMonOfType(struct Pokemon* mon, u8 type);
bool8 CanPartyMonBeGeneralStatused(struct Pokemon* mon);
bool8 CanPartyMonBePutToSleep(struct Pokemon* mon);
bool8 CanPartyMonBePoisoned(struct Pokemon* mon);
Expand Down
2 changes: 1 addition & 1 deletion src/Tables/battle_moves.c
Original file line number Diff line number Diff line change
Expand Up @@ -11299,7 +11299,7 @@ const struct BattleMove gBattleMoves[] =
},

[MOVE_AURAWHEEL] =
{ //ANIM TODO
{
.effect = EFFECT_SPEED_UP_1_HIT,
.power = 110,
.type = TYPE_ELECTRIC,
Expand Down
2 changes: 1 addition & 1 deletion src/Tables/battle_tower_spreads.h
Original file line number Diff line number Diff line change
Expand Up @@ -22830,7 +22830,7 @@ const struct BattleTowerSpread gFrontierSpreads[] =
.moves =
{
MOVE_DARKPULSE,
MOVE_AIRCUTTER,
MOVE_HURRICANE,
MOVE_HEATWAVE,
MOVE_NASTYPLOT,
},
Expand Down
10 changes: 5 additions & 5 deletions src/attackcanceler.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
#include "../include/new/dynamax.h"
#include "../include/new/form_change.h"
#include "../include/new/general_bs_commands.h"
#include "../include/new/util.h"
#include "../include/new/item.h"
#include "../include/new/move_tables.h"
#include "../include/new/util.h"
/*
attackcanceler.c
Handles any logic for discerning if a move can be used or is effective, eg. mold breaker, flinch status, truant, etc.
Expand Down Expand Up @@ -806,10 +807,9 @@ static u8 AtkCanceller_UnableToUseMove(void)
case CANCELLER_NATURAL_GIFT:
if (gCurrentMove == MOVE_NATURALGIFT &&
(ABILITY(gBankAttacker) == ABILITY_KLUTZ
|| GetPocketByItemId(ITEM(gBankAttacker)) != POCKET_BERRY_POUCH
|| AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBankAttacker, ABILITY_UNNERVE, 0, 0)
|| IsMagicRoomActive()
|| gNewBS->EmbargoTimers[gBankAttacker]))
|| !IsBerry(ITEM(gBankAttacker))
|| IsMagicRoomActive()
|| gNewBS->EmbargoTimers[gBankAttacker]))
{
gBattlescriptCurrInstr = BattleScript_ButItFailed - 2;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
Expand Down
26 changes: 20 additions & 6 deletions src/battle_script_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,28 @@ extern const u8* gBattleScriptsForMoveEffects[];
extern const species_t gTelekinesisBanList[];
extern const struct FlingStruct gFlingTable[];

void CheckIfDarkVoidShouldFail(void)
void CheckIfExclusiveMoveShouldFail(void)
{
#ifdef SPECIES_DARKRAI
if (gCurrentMove == MOVE_DARKVOID
&& SPECIES(gBankAttacker) != SPECIES_DARKRAI
&& !gNewBS->MoveBounceInProgress)
bool8 fail = FALSE;
u16 species = SPECIES(gBankAttacker);

switch (gCurrentMove) {
case MOVE_DARKVOID:
#ifdef SPECIES_DARKRAI
if (species != SPECIES_DARKRAI && !gNewBS->MoveBounceInProgress)
fail = TRUE;
#endif
break;
case MOVE_AURAWHEEL:
#ifdef SPECIES_MORPEKO
if (species != SPECIES_MORPEKO && species != SPECIES_MORPEKO_HANGRY)
fail = TRUE;
#endif
break;
}

if (fail)
gBattlescriptCurrInstr = BattleScript_DarkVoidFail - 5;
#endif
}

void SetTargetPartner(void)
Expand Down
18 changes: 0 additions & 18 deletions src/battle_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,24 +321,6 @@ bool8 IsOfType(u8 bank, u8 type)
return FALSE;
}

u8 GetMonType(struct Pokemon* mon, u8 typeId)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);

if (typeId == 0)
return (gBattleTypeFlags & BATTLE_TYPE_CAMOMONS) ? GetCamomonsTypeByMon(mon, 0) : gBaseStats[species].type1;
else
return (gBattleTypeFlags & BATTLE_TYPE_CAMOMONS) ? GetCamomonsTypeByMon(mon, 1) : gBaseStats[species].type2;
}

bool8 IsMonOfType(struct Pokemon* mon, u8 type)
{
u8 type1 = GetMonType(mon, 0);
u8 type2 = GetMonType(mon, 1);

return type1 == type || type2 == type;
}

bool8 LiftProtect(u8 bank)
{
if ((gProtectStructs[bank].protected && !IsDynamaxed(bank))
Expand Down
2 changes: 1 addition & 1 deletion src/cmd49.c
Original file line number Diff line number Diff line change
Expand Up @@ -1143,7 +1143,7 @@ void atk49_moveend(void) //All the effects that happen after a move is used
{
gNewBS->NoSymbiosisByte = TRUE;
gForceSwitchHelper = Force_Switch_Red_Card;
gBattlescriptCurrInstr = BattleScript_Atk49; //Cancel's U-Turn and Volt Switch
gBattlescriptCurrInstr = BattleScript_Atk49; //Cancels U-Turn, Volt Switch, and Natural Gift
gActiveBattler = gBattleScripting->bank = gNewBS->originalTargetBackup = banks[i];
gLastUsedItem = ITEM(banks[i]);
BattleScriptPushCursor();
Expand Down
Loading

0 comments on commit d1294d7

Please sign in to comment.