#ifndef ICEWINDCGAMEEFFECTS_H_
#define ICEWINDCGAMEEFFECTS_H_

#include "CGameEffect.h"

#define ICEWIND_CGAMEEFFECT_COLORGLOWDISSIPATE 232
#define ICEWIND_CGAMEEFFECT_VISUALSPELLHIT 233
#define ICEWIND_CGAMEEFFECT_SNILLOCSSNOWBALLSWARMDAMAGE 234
#define ICEWIND_CGAMEEFFECT_CASTINGGLOW 235
#define ICEWIND_CGAMEEFFECT_PANIC 236
#define ICEWIND_CGAMEEFFECT_MAGICALSTONEDAMAGE 237
#define ICEWIND_CGAMEEFFECT_SAVINGTHROWCHANGE 238
#define ICEWIND_CGAMEEFFECT_SLOWPOISON 239
#define ICEWIND_CGAMEEFFECT_SUMMONINGSPELL 240
#define ICEWIND_CGAMEEFFECT_VAMPIRICTOUCH 241
#define ICEWIND_CGAMEEFFECT_CREATUREAFFECTEDANIMATION 242
#define ICEWIND_CGAMEEFFECT_ANIMATEDEAD 243
#define ICEWIND_CGAMEEFFECT_PRAYER 244
#define ICEWIND_CGAMEEFFECT_PRAYERBAD 245
#define ICEWIND_CGAMEEFFECT_SUMMONINGSPELLMIXED 246
#define ICEWIND_CGAMEEFFECT_BELTYNSBURNINGBLOOD 247
#define ICEWIND_CGAMEEFFECT_SHADOWMONSTERS 248
#define ICEWIND_CGAMEEFFECT_RECITATION 249
#define ICEWIND_CGAMEEFFECT_RECITATIONBAD 250
#define ICEWIND_CGAMEEFFECT_LICHTOUCH 251
#define ICEWIND_CGAMEEFFECT_SOLSSEARINGORB 252
#define ICEWIND_CGAMEEFFECT_OILOFSERPENTSSCALES 253
#define ICEWIND_CGAMEEFFECT_REMOVEEFFECTOFRESOURCE 254
#define ICEWIND_CGAMEEFFECT_SALAMANDERAURA 255
#define ICEWIND_CGAMEEFFECT_UMBERHULKGAZE 256
#define ICEWIND_CGAMEEFFECT_ZOMBIELORDAURA 257
#define ICEWIND_CGAMEEFFECT_IMMUNITYTORESOURCE 258
#define ICEWIND_CGAMEEFFECT_SUMMONCREATURE 259
#define ICEWIND_CGAMEEFFECT_ANIMATIONREMOVE 260
#define ICEWIND_CGAMEEFFECT_IMMUNITYTOEFFECTRESOURCE 261
#define ICEWIND_CGAMEEFFECT_SUMMONPOMABS 262
#define ICEWIND_CGAMEEFFECT_DOMINATE 263
#define ICEWIND_CGAMEEFFECT_STATICCHARGE 264
#define ICEWIND_CGAMEEFFECT_CLOAKOFFEAR 265
#define ICEWIND_CGAMEEFFECT_FORCEMOVEMENTRATE 266
#define ICEWIND_CGAMEEFFECT_REMOVECONFUSION 267
#define ICEWIND_CGAMEEFFECT_EYEOFMIND 268
#define ICEWIND_CGAMEEFFECT_EYEYOFSWORD 269
#define ICEWIND_CGAMEEFFECT_EYEOFMAGE 270
#define ICEWIND_CGAMEEFFECT_EYEOFVENOM 271
#define ICEWIND_CGAMEEFFECT_EYEOFSPIRIT 272
#define ICEWIND_CGAMEEFFECT_EYEOFFORTITUDE 273
#define ICEWIND_CGAMEEFFECT_EYEOFSTONE 274
#define ICEWIND_CGAMEEFFECT_REMOVESEVENEYES 275
#define ICEWIND_CGAMEEFFECT_REMOVEALLOFTYPE 276
#define ICEWIND_CGAMEEFFECT_SOULEATER 277
#define ICEWIND_CGAMEEFFECT_SHROUDOFFLAME 278
#define ICEWIND_CGAMEEFFECT_ANIMALRAGE 279
#define ICEWIND_CGAMEEFFECT_TURNUNDEAD 280
#define ICEWIND_CGAMEEFFECT_VITRIOLICSPHERE 281
#define ICEWIND_CGAMEEFFECT_SUPPRESSHPDISPLAY 282
#define ICEWIND_CGAMEEFFECT_FLOATTEXT 283
#define ICEWIND_CGAMEEFFECT_MACEOFDISRUPTION 284
#define ICEWIND_CGAMEEFFECT_SLEEP 285
#define ICEWIND_CGAMEEFFECT_RANGERTRACKING 286
#define ICEWIND_CGAMEEFFECT_IMMUNITYTOBACKSTAB 287
#define ICEWIND_CGAMEEFFECT_SETSPELLSTATE 288
#define ICEWIND_CGAMEEFFECT_DRAGONGEMCUTSCENE 289
#define ICEWIND_CGAMEEFFECT_IMMUNITYSPELL 290
#define ICEWIND_CGAMEEFFECT_RODOFSMITING 291
#define ICEWIND_CGAMEEFFECT_MAGICALREST 292
#define ICEWIND_CGAMEEFFECT_BEHOLDERDISPELMAGIC 293
#define ICEWIND_CGAMEEFFECT_HARPYWAIL 294
#define ICEWIND_CGAMEEFFECT_JACKALWEREGAZE 295
#define ICEWIND_CGAMEEFFECT_SETGLOBAL 296
#define ICEWIND_CGAMEEFFECT_HIDEINSHADOWS 297
#define ICEWIND_CGAMEEFFECT_SKILLUSEMAGICDEVICE 298
#define ICEWIND_CGAMEEFFECT_HOPELESSNESS 400
#define ICEWIND_CGAMEEFFECT_PROTECTIONFROMEVIL 401
#define ICEWIND_CGAMEEFFECT_APPLYEFFECTSLIST 402
#define ICEWIND_CGAMEEFFECT_ARMOROFFAITH 403
#define ICEWIND_CGAMEEFFECT_NAUSEA 404
#define ICEWIND_CGAMEEFFECT_ENFEEBLEMENT 405
#define ICEWIND_CGAMEEFFECT_FIRESHIELD 406
#define ICEWIND_CGAMEEFFECT_DEATHWARD 407
#define ICEWIND_CGAMEEFFECT_HOLYPOWER 408
#define ICEWIND_CGAMEEFFECT_RIGHTEOUSWRATHOFFAITHFUL 409
#define ICEWIND_CGAMEEFFECT_SUMMONALLY 410
#define ICEWIND_CGAMEEFFECT_SUMMONENEMY 411
#define ICEWIND_CGAMEEFFECT_CHARM 412
#define ICEWIND_CGAMEEFFECT_VISUALEFFECT 413
#define ICEWIND_CGAMEEFFECT_OTILUKESRESILIENTSPHERE 414
#define ICEWIND_CGAMEEFFECT_BARKSKIN 415
#define ICEWIND_CGAMEEFFECT_BLEEDINGWOUNDS 416
#define ICEWIND_CGAMEEFFECT_AREAOFEFFECT 417
#define ICEWIND_CGAMEEFFECT_FREEACTION 418
#define ICEWIND_CGAMEEFFECT_UNCONSCIOUSNESS 419
#define ICEWIND_CGAMEEFFECT_MAGIC_DEATH 420
#define ICEWIND_CGAMEEFFECT_ENTROPYSHIELD 421
#define ICEWIND_CGAMEEFFECT_STORMSHELL 422
#define ICEWIND_CGAMEEFFECT_PROTECTIONFROMELEMENTS 423
#define ICEWIND_CGAMEEFFECT_HOLDUNDEAD 424
#define ICEWIND_CGAMEEFFECT_CONTROLUNDEAD 425
#define ICEWIND_CGAMEEFFECT_AEGIS 426
#define ICEWIND_CGAMEEFFECT_EXECUTIONERSEYES 427
#define ICEWIND_CGAMEEFFECT_BANISH 428
#define ICEWIND_CGAMEEFFECT_WHENSTRUCK 429
#define ICEWIND_CGAMEEFFECT_PROJECTILE 430
#define ICEWIND_CGAMEEFFECT_ENERGYDRAIN 431
#define ICEWIND_CGAMEEFFECT_TORTOISESHELL 432
#define ICEWIND_CGAMEEFFECT_BLINK 433
#define ICEWIND_CGAMEEFFECT_PERSISTANTEFFECT 434
#define ICEWIND_CGAMEEFFECT_DAYBLINDNESS 435
#define ICEWIND_CGAMEEFFECT_DAMAGEREDUCTION 436
#define ICEWIND_CGAMEEFFECT_DISGUISE 437
#define ICEWIND_CGAMEEFFECT_HEROICINSPIRATION 438
#define ICEWIND_CGAMEEFFECT_PREVENTAISLOWDOWN 439
#define ICEWIND_CGAMEEFFECT_BARBARIANRAGE 440
#define ICEWIND_CGAMEEFFECT_MOVEMENTRATEWITHPORTRAIT 441
#define ICEWIND_CGAMEEFFECT_FEATCLEAVE 442
#define ICEWIND_CGAMEEFFECT_PROTECTIONFORMARROWS 443
#define ICEWIND_CGAMEEFFECT_TENSERSTRANSFORMATION 444
#define ICEWIND_CGAMEEFFECT_SLIPPERYMIND 445
#define ICEWIND_CGAMEEFFECT_SMITEEVIL 446
#define ICEWIND_CGAMEEFFECT_RESTORATION 447
#define ICEWIND_CGAMEEFFECT_ALICORNLANCEGLOW 448
#define ICEWIND_CGAMEEFFECT_CALLLIGHTNING 449
#define ICEWIND_CGAMEEFFECT_GLOBEOFINVULNERABILITY 450
#define ICEWIND_CGAMEEFFECT_LOWERRESISTANCE 451
#define ICEWIND_CGAMEEFFECT_BANE 452
#define ICEWIND_CGAMEEFFECT_FEATPOWERATTACK 453
#define ICEWIND_CGAMEEFFECT_FEATEXPERTISE 454
#define ICEWIND_CGAMEEFFECT_FEATARTERIALSTRIKE 455
#define ICEWIND_CGAMEEFFECT_FEATHAMSTRING 456
#define ICEWIND_CGAMEEFFECT_FEATRAPIDSHOT 457

extern const char RESREF_EYE_OF_THE_MIND[];
extern const char RESREF_EYE_OF_THE_SWORD[];
extern const char RESREF_EYE_OF_THE_MAGE[];
extern const char RESREF_EYE_OF_VENOM[];
extern const char RESREF_EYE_OF_THE_SPIRIT[];
extern const char RESREF_EYE_OF_FORTITUDE[];
extern const char RESREF_EYE_OF_STONE[];

class IcewindCGameEffectBeltynsBurningBlood : public CGameEffect {
public:
    IcewindCGameEffectBeltynsBurningBlood(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectCastingGlow : public CGameEffect {
public:
    IcewindCGameEffectCastingGlow(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectPrayer : public CGameEffect {
public:
    IcewindCGameEffectPrayer(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectRighteousWrathOfFaithful : public CGameEffect {
public:
    IcewindCGameEffectRighteousWrathOfFaithful(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectRecitation : public CGameEffect {
public:
    IcewindCGameEffectRecitation(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectSavingThrowChange : public CGameEffect {
public:
    IcewindCGameEffectSavingThrowChange(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;

    void sub_55ED90(CGameSprite* pSprite);
    void sub_55EE70(CGameSprite* pSprite);
    void sub_55EFB0(CGameSprite* pSprite);
};

class IcewindCGameEffectSlowPoison : public CGameEffect {
public:
    IcewindCGameEffectSlowPoison(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectVampiricTouch : public CGameEffect {
public:
    IcewindCGameEffectVampiricTouch(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectColorGlowDissipate : public CGameEffect {
public:
    IcewindCGameEffectColorGlowDissipate(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectSummon : public CGameEffect {
public:
    IcewindCGameEffectSummon(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;

    void sub_49DB60(int a1);

    /* 018C */ int field_18C;
    /* 0190 */ int field_190;
};

class IcewindCGameEffectVisualSpellHit : public CGameEffect {
public:
    IcewindCGameEffectVisualSpellHit(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectRemoveEffectOfResource : public CGameEffect {
public:
    IcewindCGameEffectRemoveEffectOfResource(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectSalamanderAura : public CGameEffect {
public:
    IcewindCGameEffectSalamanderAura(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectUmberHulkGaze : public CGameEffect {
public:
    IcewindCGameEffectUmberHulkGaze(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectImmunityToResource : public CGameEffect {
public:
    IcewindCGameEffectImmunityToResource(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectAnimationRemove : public CGameEffect {
public:
    IcewindCGameEffectAnimationRemove(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectImmunityToEffectAndResource : public CGameEffect {
public:
    IcewindCGameEffectImmunityToEffectAndResource(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectDominate : public CGameEffect {
public:
    IcewindCGameEffectDominate(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectStaticCharge : public CGameEffect {
public:
    IcewindCGameEffectStaticCharge(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectCallLightning : public CGameEffect {
public:
    IcewindCGameEffectCallLightning(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectCloakOfFear : public CGameEffect {
public:
    IcewindCGameEffectCloakOfFear(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectForceMovementRate : public CGameEffect {
public:
    IcewindCGameEffectForceMovementRate(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectRemoveConfusion : public CGameEffect {
public:
    IcewindCGameEffectRemoveConfusion(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectEyeOfMind : public CGameEffect {
public:
    IcewindCGameEffectEyeOfMind(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectEyeOfSword : public CGameEffect {
public:
    IcewindCGameEffectEyeOfSword(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectEyeOfMage : public CGameEffect {
public:
    IcewindCGameEffectEyeOfMage(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectEyeOfVenom : public CGameEffect {
public:
    IcewindCGameEffectEyeOfVenom(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectEyeOfSpirit : public CGameEffect {
public:
    IcewindCGameEffectEyeOfSpirit(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectEyeOfFortitude : public CGameEffect {
public:
    IcewindCGameEffectEyeOfFortitude(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectEyeOfStone : public CGameEffect {
public:
    IcewindCGameEffectEyeOfStone(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectRemoveSevenEyes : public CGameEffect {
public:
    IcewindCGameEffectRemoveSevenEyes(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectRemoveAllOfType : public CGameEffect {
public:
    IcewindCGameEffectRemoveAllOfType(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectShroudOfFlame : public CGameEffect {
public:
    IcewindCGameEffectShroudOfFlame(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectAnimalRage : public CGameEffect {
public:
    IcewindCGameEffectAnimalRage(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectTurnUndead : public CGameEffect {
public:
    IcewindCGameEffectTurnUndead(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectVitriolicSphere : public CGameEffect {
public:
    IcewindCGameEffectVitriolicSphere(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectSuppressHPDisplay : public CGameEffect {
public:
    IcewindCGameEffectSuppressHPDisplay(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectFloatText : public CGameEffect {
public:
    IcewindCGameEffectFloatText(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectMaceOfDisruption : public CGameEffect {
public:
    IcewindCGameEffectMaceOfDisruption(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectRangerTracking : public CGameEffect {
public:
    IcewindCGameEffectRangerTracking(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectImmunityToBackstab : public CGameEffect {
public:
    IcewindCGameEffectImmunityToBackstab(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectSetSpellState : public CGameEffect {
public:
    IcewindCGameEffectSetSpellState(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectRodOfSmiting : public CGameEffect {
public:
    IcewindCGameEffectRodOfSmiting(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectMagicalRest : public CGameEffect {
public:
    IcewindCGameEffectMagicalRest(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectBeholderDispelMagic : public CGameEffect {
public:
    IcewindCGameEffectBeholderDispelMagic(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectHarpyWail : public CGameEffect {
public:
    IcewindCGameEffectHarpyWail(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectJackalwereGaze : public CGameEffect {
public:
    IcewindCGameEffectJackalwereGaze(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectSetGlobal : public CGameEffect {
public:
    IcewindCGameEffectSetGlobal(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectHopelessness : public CGameEffect {
public:
    IcewindCGameEffectHopelessness(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectProtectionFromEvil : public CGameEffect {
public:
    IcewindCGameEffectProtectionFromEvil(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite);
};

class IcewindCGameEffectApplyEffectsList : public CGameEffect {
public:
    IcewindCGameEffectApplyEffectsList(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectArmorOfFaith : public CGameEffect {
public:
    IcewindCGameEffectArmorOfFaith(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectNausea : public CGameEffect {
public:
    IcewindCGameEffectNausea(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectEnfeeblement : public CGameEffect {
public:
    IcewindCGameEffectEnfeeblement(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectFireshield : public CGameEffect {
public:
    IcewindCGameEffectFireshield(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectDeathWard : public CGameEffect {
public:
    IcewindCGameEffectDeathWard(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectHolyPower : public CGameEffect {
public:
    IcewindCGameEffectHolyPower(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectVisualEffect : public CGameEffect {
public:
    IcewindCGameEffectVisualEffect(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectOtilukesResilientSphere : public CGameEffect {
public:
    IcewindCGameEffectOtilukesResilientSphere(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectBarkskin : public CGameEffect {
public:
    IcewindCGameEffectBarkskin(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectAreaOfEffect : public CGameEffect {
public:
    IcewindCGameEffectAreaOfEffect(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectFreeAction : public CGameEffect {
public:
    IcewindCGameEffectFreeAction(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectBleedingWounds : public CGameEffect {
public:
    IcewindCGameEffectBleedingWounds(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectUnconsciousness : public CGameEffect {
public:
    IcewindCGameEffectUnconsciousness(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectEntropyShield : public CGameEffect {
public:
    IcewindCGameEffectEntropyShield(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectStormShell : public CGameEffect {
public:
    IcewindCGameEffectStormShell(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectProtectionFromElements : public CGameEffect {
public:
    IcewindCGameEffectProtectionFromElements(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectAegis : public CGameEffect {
public:
    IcewindCGameEffectAegis(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectExecutionersEyes : public CGameEffect {
public:
    IcewindCGameEffectExecutionersEyes(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectWhenStruck : public CGameEffect {
public:
    IcewindCGameEffectWhenStruck(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectProjectile : public CGameEffect {
public:
    IcewindCGameEffectProjectile(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectEnergyDrain : public CGameEffect {
public:
    IcewindCGameEffectEnergyDrain(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectTortoiseShell : public CGameEffect {
public:
    IcewindCGameEffectTortoiseShell(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectBlink : public CGameEffect {
public:
    IcewindCGameEffectBlink(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectPersistantEffect : public CGameEffect {
public:
    IcewindCGameEffectPersistantEffect(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectDamageReduction : public CGameEffect {
public:
    IcewindCGameEffectDamageReduction(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectProtectionFromArrows : public CGameEffect {
public:
    IcewindCGameEffectProtectionFromArrows(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectTensersTransformation : public CGameEffect {
public:
    IcewindCGameEffectTensersTransformation(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectSmiteEvil : public CGameEffect {
public:
    IcewindCGameEffectSmiteEvil(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectRestoration : public CGameEffect {
public:
    IcewindCGameEffectRestoration(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
};

class IcewindCGameEffectAlicornLanceGlow : public CGameEffect {
public:
    IcewindCGameEffectAlicornLanceGlow(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectGlobeOfInvulnerability : public CGameEffect {
public:
    IcewindCGameEffectGlobeOfInvulnerability(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectLowerResistance : public CGameEffect {
public:
    IcewindCGameEffectLowerResistance(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectBane : public CGameEffect {
public:
    IcewindCGameEffectBane(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
    void OnRemove(CGameSprite* pSprite) override;
};

class IcewindCGameEffectFeatPowerAttack : public CGameEffect {
public:
    IcewindCGameEffectFeatPowerAttack(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectFeatExpertise : public CGameEffect {
public:
    IcewindCGameEffectFeatExpertise(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectFeatArterialStrike : public CGameEffect {
public:
    IcewindCGameEffectFeatArterialStrike(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectFeatHamstring : public CGameEffect {
public:
    IcewindCGameEffectFeatHamstring(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

class IcewindCGameEffectFeatRapidShot : public CGameEffect {
public:
    IcewindCGameEffectFeatRapidShot(ITEM_EFFECT* effect, const CPoint& source, LONG sourceID, CPoint target);
    CGameEffect* Copy() override;
    BOOL ApplyEffect(CGameSprite* pSprite) override;
};

#endif /* ICEWINDCGAMEEFFECTS_H_ */
