NWN2

NWN2 specific content.

VFX Constants

The ACR sometimes makes reference to Visual Effects, as expressed as integers. This is the list of VFXes that Obsidian provides us-- I have not tested the validity of every one of these, but most should work. If one does not, we should look into whether it's depreciated and remove it from the list.

 

As a rule VFX_FNF_ visuals go away, no matter what you do, after a short time.

VFX_DUR_ visuals are capable of lingering for a long time.

VFX_IMP_ visuals only appear for a flash (like the impact of a magic weapon hitting someone)

VFX_COM_ visuals are usually the same, but are so labeled because they appear everywhere (that is, common)

int VFX_NONE = -1;
int VFX_DUR_BLUR = 0;
int VFX_DUR_DARKNESS = 1;
int VFX_DUR_ENTANGLE = 2;
int VFX_DUR_FREEDOM_OF_MOVEMENT = 3;
int VFX_DUR_GLOBE_INVULNERABILITY = 4;
int VFX_DUR_INVISIBILITY = 6;
int VFX_DUR_MIND_AFFECTING_NEGATIVE = 7;
int VFX_DUR_MIND_AFFECTING_POSITIVE = 8;
int VFX_DUR_GHOSTLY_VISAGE = 9;
int VFX_DUR_ETHEREAL_VISAGE = 10;
int VFX_DUR_PROT_BARKSKIN = 11;
int VFX_DUR_PROT_GREATER_STONESKIN = 12;
int VFX_DUR_PROT_PREMONITION = 13;
int VFX_DUR_PROT_SHADOW_ARMOR = 14;
int VFX_DUR_PROT_STONESKIN = 15;
int VFX_DUR_SANCTUARY = 16;
int VFX_DUR_WEB = 17;
int VFX_FNF_DISPEL = 19;
int VFX_FNF_DISPEL_DISJUNCTION = 20;
int VFX_FNF_DISPEL_GREATER = 21 ;
int VFX_FNF_FIREBALL = 22 ;
int VFX_FNF_FIRESTORM = 23 ;
int VFX_FNF_IMPLOSION = 24 ;
int VFX_FNF_MASS_HEAL = 26 ;
int VFX_FNF_MASS_MIND_AFFECTING = 27 ;
int VFX_FNF_METEOR_SWARM = 28 ;
int VFX_FNF_NATURES_BALANCE = 29 ;
int VFX_FNF_PWSTUN = 31 ;
int VFX_FNF_SUMMON_GATE = 32 ;
int VFX_FNF_SUMMON_MONSTER_1 = 33 ;
int VFX_FNF_SUMMON_MONSTER_2 = 34 ;
int VFX_FNF_SUMMON_MONSTER_3 = 35 ;
int VFX_FNF_SUMMON_UNDEAD = 36 ;
int VFX_FNF_SUNBEAM = 37 ;
int VFX_FNF_TIME_STOP = 38 ;
int VFX_FNF_WEIRD = 40 ;
int VFX_FNF_WORD = 41 ;
int VFX_IMP_AC_BONUS = 42 ;
int VFX_IMP_ACID_L = 43 ;
int VFX_IMP_ACID_S = 44 ;
int VFX_IMP_BLIND_DEAF_M = 46 ;
int VFX_IMP_BREACH = 47 ;
int VFX_IMP_CONFUSION_S = 48 ;
int VFX_IMP_DAZED_S = 49 ;
int VFX_IMP_DEATH = 50 ;
int VFX_IMP_DISEASE_S = 51 ;
int VFX_IMP_DISPEL = 52 ;
int VFX_IMP_DISPEL_DISJUNCTION = 53 ;
int VFX_IMP_DIVINE_STRIKE_FIRE = 54 ;
int VFX_IMP_DIVINE_STRIKE_HOLY = 55 ;
int VFX_IMP_DOMINATE_S = 56 ;
int VFX_IMP_DOOM = 57 ;
int VFX_IMP_FEAR_S = 58 ;
int VFX_IMP_FLAME_M = 60 ;
int VFX_IMP_FLAME_S = 61 ;
int VFX_IMP_FROST_L = 62 ;
int VFX_IMP_FROST_S = 63 ;
int VFX_IMP_GREASE = 64 ;
int VFX_IMP_HASTE = 65 ;
int VFX_IMP_HEALING_G = 66 ;
int VFX_IMP_HEALING_L = 67 ;
int VFX_IMP_HEALING_M = 68 ;
int VFX_IMP_HEALING_S = 69 ;
int VFX_IMP_HEALING_X = 70 ;
int VFX_IMP_HOLY_AID = 71 ;
int VFX_IMP_KNOCK = 72 ;
int VFX_IMP_LIGHTNING_M = 74 ;
int VFX_IMP_LIGHTNING_S = 75 ;
int VFX_IMP_MAGBLUE = 76 ;
int VFX_IMP_NEGATIVE_ENERGY = 81 ;
int VFX_DUR_PARALYZE_HOLD = 82 ;
int VFX_IMP_POISON_L = 83 ;
int VFX_IMP_POISON_S = 84 ;
int VFX_IMP_POLYMORPH = 85 ;
int VFX_IMP_PULSE_COLD = 86 ;
int VFX_IMP_PULSE_FIRE = 87 ;
int VFX_IMP_PULSE_HOLY = 88 ;
int VFX_IMP_PULSE_NEGATIVE = 89 ;
int VFX_IMP_RAISE_DEAD = 90 ;
int VFX_IMP_REDUCE_ABILITY_SCORE = 91 ;
int VFX_IMP_REMOVE_CONDITION = 92 ;
int VFX_IMP_SILENCE = 93 ;
int VFX_IMP_SLEEP = 94 ;
int VFX_IMP_SLOW = 95 ;
int VFX_IMP_SONIC = 96 ;
int VFX_IMP_STUN = 97 ;
int VFX_IMP_SUNSTRIKE = 98 ;
int VFX_IMP_UNSUMMON = 99 ;
int VFX_COM_SPECIAL_BLUE_RED = 100 ;
int VFX_COM_SPECIAL_PINK_ORANGE = 101 ;
int VFX_COM_SPECIAL_RED_WHITE = 102 ;
int VFX_COM_SPECIAL_RED_ORANGE = 103 ;
int VFX_COM_SPECIAL_WHITE_BLUE = 104 ;
int VFX_COM_SPECIAL_WHITE_ORANGE = 105 ;
int VFX_COM_BLOOD_REG_WIMP = 106 ;
int VFX_COM_BLOOD_LRG_WIMP = 107 ;
int VFX_COM_BLOOD_CRT_WIMP = 108 ;
int VFX_COM_BLOOD_REG_RED = 109 ;
int VFX_COM_BLOOD_REG_GREEN = 110 ;
int VFX_COM_BLOOD_REG_YELLOW = 111 ;
int VFX_COM_BLOOD_LRG_RED = 112 ;
int VFX_COM_BLOOD_LRG_GREEN = 113 ;
int VFX_COM_BLOOD_LRG_YELLOW = 114 ;
int VFX_COM_BLOOD_CRT_RED = 115 ;
int VFX_COM_BLOOD_CRT_GREEN = 116 ;
int VFX_COM_BLOOD_CRT_YELLOW = 117 ;
int VFX_COM_SPARKS_PARRY = 118 ;
int VFX_COM_UNLOAD_MODEL = 120 ;
int VFX_COM_CHUNK_RED_SMALL = 121 ;
int VFX_COM_CHUNK_RED_MEDIUM = 122 ;
int VFX_COM_CHUNK_GREEN_SMALL = 123 ;
int VFX_COM_CHUNK_GREEN_MEDIUM = 124 ;
int VFX_COM_CHUNK_YELLOW_SMALL = 125 ;
int VFX_COM_CHUNK_YELLOW_MEDIUM = 126 ;
int VFX_DUR_SPELLTURNING = 138;
int VFX_IMP_IMPROVE_ABILITY_SCORE = 139;
int VFX_IMP_CHARM = 140;
int VFX_IMP_MAGICAL_VISION = 141;
int VFX_IMP_EVIL_HELP = 144;
int VFX_IMP_GOOD_HELP = 145;
int VFX_IMP_DEATH_WARD = 146;
int VFX_DUR_ELEMENTAL_SHIELD = 147;
int VFX_DUR_LIGHT = 148;
int VFX_IMP_MAGIC_PROTECTION = 149;
int VFX_IMP_SUPER_HEROISM = 150;
int VFX_FNF_STORM = 151;
int VFX_IMP_ELEMENTAL_PROTECTION = 152;
int VFX_DUR_LIGHT_BLUE_5 = 153;
int VFX_DUR_LIGHT_BLUE_10 = 154;
int VFX_DUR_LIGHT_BLUE_15 = 155;
int VFX_DUR_LIGHT_BLUE_20 = 156;
int VFX_DUR_LIGHT_YELLOW_5 = 157;
int VFX_DUR_LIGHT_YELLOW_10 = 158;
int VFX_DUR_LIGHT_YELLOW_15 = 159;
int VFX_DUR_LIGHT_YELLOW_20 = 160;
int VFX_DUR_LIGHT_PURPLE_5 = 161;
int VFX_DUR_LIGHT_PURPLE_10 = 162;
int VFX_DUR_LIGHT_PURPLE_15 = 163;
int VFX_DUR_LIGHT_PURPLE_20 = 164;
int VFX_DUR_LIGHT_RED_5 = 165;
int VFX_DUR_LIGHT_RED_10 = 166;
int VFX_DUR_LIGHT_RED_15 = 167;
int VFX_DUR_LIGHT_RED_20 = 168;
int VFX_DUR_LIGHT_ORANGE_5 = 169;
int VFX_DUR_LIGHT_ORANGE_10 = 170;
int VFX_DUR_LIGHT_ORANGE_15 = 171;
int VFX_DUR_LIGHT_ORANGE_20 = 172;
int VFX_DUR_LIGHT_WHITE_5 = 173;
int VFX_DUR_LIGHT_WHITE_10 = 174;
int VFX_DUR_LIGHT_WHITE_15 = 175;
int VFX_DUR_LIGHT_WHITE_20 = 176;
int VFX_DUR_LIGHT_GREY_5 = 177;
int VFX_DUR_LIGHT_GREY_10 = 178;
int VFX_DUR_LIGHT_GREY_15 = 179;
int VFX_DUR_LIGHT_GREY_20 = 180;
int VFX_IMP_MIRV = 181;
int VFX_DUR_DARKVISION = 182;
int VFX_FNF_SOUND_BURST = 183;
int VFX_FNF_STRIKE_HOLY = 184;
int VFX_FNF_LOS_EVIL_10 = 185;
int VFX_FNF_LOS_EVIL_20 = 186;
int VFX_FNF_LOS_EVIL_30 = 187;
int VFX_FNF_LOS_HOLY_10 = 188;
int VFX_FNF_LOS_HOLY_20 = 189;
int VFX_FNF_LOS_HOLY_30 = 190;
int VFX_FNF_LOS_NORMAL_10 = 191;
int VFX_FNF_LOS_NORMAL_20 = 192;
int VFX_FNF_LOS_NORMAL_30 = 193;
int VFX_IMP_HEAD_ACID = 194;
int VFX_IMP_HEAD_FIRE = 195;
int VFX_IMP_HEAD_SONIC = 196;
int VFX_IMP_HEAD_ELECTRICITY = 197;
int VFX_IMP_HEAD_COLD = 198;
int VFX_IMP_HEAD_HOLY = 199;
int VFX_IMP_HEAD_NATURE = 200;
int VFX_IMP_HEAD_HEAL = 201;
int VFX_IMP_HEAD_MIND = 202;
int VFX_IMP_HEAD_EVIL = 203;
int VFX_IMP_HEAD_ODD = 204;
int VFX_DUR_CESSATE_NEUTRAL = 205;
int VFX_DUR_CESSATE_POSITIVE = 206;
int VFX_DUR_CESSATE_NEGATIVE = 207;
int VFX_DUR_MIND_AFFECTING_DISABLED = 208;
int VFX_DUR_MIND_AFFECTING_DOMINATED= 209;
int VFX_BEAM_COLD = 211;
int VFX_BEAM_MIND = 213;
int VFX_BEAM_ODD = 215;
int VFX_BEAM_FIRE_LASH = 216;
int VFX_IMP_DEATH_L = 217;
int VFX_DUR_MIND_AFFECTING_FEAR = 218;
int VFX_FNF_SUMMON_CELESTIAL = 219;
int VFX_DUR_GLOBE_MINOR = 220;
int VFX_IMP_RESTORATION_LESSER = 221;
int VFX_IMP_RESTORATION = 222;
int VFX_IMP_RESTORATION_GREATER = 223;
int VFX_DUR_PROTECTION_ELEMENTS = 224;
int VFX_DUR_PROTECTION_GOOD_MINOR = 225;
int VFX_DUR_PROTECTION_GOOD_MAJOR = 226;
int VFX_DUR_PROTECTION_EVIL_MINOR = 227;
int VFX_DUR_PROTECTION_EVIL_MAJOR = 228;
int VFX_DUR_MAGICAL_SIGHT = 229;
int VFX_DUR_WEB_MASS = 230;
int VFX_FNF_ICESTORM = 231;
int VFX_DUR_PARALYZED = 232;
int VFX_IMP_MIRV_FLAME = 233;
int VFX_IMP_DESTRUCTION = 234;
int VFX_COM_CHUNK_RED_LARGE = 235;
int VFX_COM_CHUNK_BONE_MEDIUM = 236;
int VFX_COM_BLOOD_SPARK_SMALL = 237;
int VFX_COM_BLOOD_SPARK_MEDIUM = 238;
int VFX_COM_BLOOD_SPARK_LARGE = 239;
int VFX_DUR_GHOSTLY_PULSE = 240;
int VFX_FNF_HORRID_WILTING = 241;
int VFX_DUR_BLINDVISION = 242;
int VFX_DUR_LOWLIGHTVISION = 243;
int VFX_DUR_ULTRAVISION = 244;
int VFX_DUR_MIRV_ACID = 245;
int VFX_IMP_HARM = 246;
int VFX_DUR_BLIND = 247;
int VFX_DUR_ANTI_LIGHT_10 = 248;
int VFX_DUR_MAGIC_RESISTANCE = 249;
int VFX_IMP_MAGIC_RESISTANCE_USE = 250;
int VFX_IMP_GLOBE_USE = 251;
int VFX_IMP_WILL_SAVING_THROW_USE = 252;
int VFX_IMP_SPIKE_TRAP = 253;
int VFX_IMP_SPELL_MANTLE_USE = 254;
int VFX_IMP_FORTITUDE_SAVING_THROW_USE = 255;
int VFX_IMP_REFLEX_SAVE_THROW_USE = 256;
int VFX_FNF_GAS_EXPLOSION_ACID = 257;
int VFX_FNF_GAS_EXPLOSION_EVIL = 258;
int VFX_FNF_GAS_EXPLOSION_NATURE = 259;
int VFX_FNF_GAS_EXPLOSION_FIRE = 260;
int VFX_FNF_GAS_EXPLOSION_GREASE = 261;
int VFX_FNF_GAS_EXPLOSION_MIND = 262;
int VFX_FNF_SMOKE_PUFF = 263;
int VFX_IMP_PULSE_WATER = 264;
int VFX_IMP_PULSE_WIND = 265;
int VFX_IMP_PULSE_NATURE = 266;
int VFX_DUR_AURA_COLD = 267;
int VFX_DUR_AURA_FIRE = 268;
int VFX_DUR_AURA_POISON = 269;
int VFX_DUR_AURA_DISEASE = 270;
int VFX_DUR_AURA_ODD = 271;
int VFX_DUR_AURA_SILENCE = 272;
int VFX_IMP_AURA_HOLY = 273;
int VFX_IMP_AURA_UNEARTHLY = 274;
int VFX_IMP_AURA_FEAR = 275;
int VFX_IMP_AURA_NEGATIVE_ENERGY = 276;
int VFX_DUR_BARD_SONG = 277;
int VFX_FNF_HOWL_MIND = 278;
int VFX_FNF_HOWL_ODD = 279;
int VFX_COM_HIT_FIRE = 280;
int VFX_COM_HIT_FROST = 281;
int VFX_COM_HIT_ELECTRICAL = 282;
int VFX_COM_HIT_ACID = 283;
int VFX_COM_HIT_SONIC = 284;
int VFX_FNF_HOWL_WAR_CRY = 285;
int VFX_FNF_SCREEN_SHAKE = 286;
int VFX_FNF_SCREEN_BUMP = 287;
int VFX_COM_HIT_NEGATIVE = 288;
int VFX_COM_HIT_DIVINE = 289;
int VFX_FNF_HOWL_WAR_CRY_FEMALE = 290;
int VFX_DUR_AURA_DRAGON_FEAR = 291;
int VFX_DUR_FLAG_RED = 303;
int VFX_DUR_FLAG_BLUE = 304;
int VFX_DUR_FLAG_GOLD = 305;
int VFX_DUR_FLAG_PURPLE = 306;
int VFX_DUR_TENTACLE = 346;
int VFX_DUR_PETRIFY = 351;
int VFX_DUR_FREEZE_ANIMATION = 352;
int VFX_COM_CHUNK_STONE_SMALL = 353;
int VFX_COM_CHUNK_STONE_MEDIUM = 354;
int VFX_BEAM_SILENT_LIGHTNING = 307;
int VFX_BEAM_SILENT_FIRE = 308;
int VFX_BEAM_SILENT_COLD = 309;
int VFX_BEAM_SILENT_HOLY = 310;
int VFX_BEAM_SILENT_MIND = 311;
int VFX_BEAM_SILENT_EVIL = 312;
int VFX_BEAM_SILENT_ODD = 313;
int VFX_DUR_BIGBYS_INTERPOSING_HAND = 314;
int VFX_IMP_BIGBYS_FORCEFUL_HAND = 315;
int VFX_DUR_BIGBYS_CLENCHED_FIST = 316;
int VFX_DUR_BIGBYS_CRUSHING_HAND = 317;
int VFX_DUR_BIGBYS_GRASPING_HAND = 318;
int VFX_DUR_CALTROPS = 319;
int VFX_DUR_SMOKE = 320;
int VFX_DUR_PIXIEDUST = 321;
int VFX_FNF_DECK = 322;
int VFX_DUR_CUTSCENE_INVISIBILITY = 355;
int VFX_DUR_IOUNSTONE = 403;
int VFX_IMP_TORNADO = 407;
int VFX_DUR_GLOW_LIGHT_BLUE = 408;
int VFX_DUR_GLOW_PURPLE = 409;
int VFX_DUR_GLOW_BLUE = 410;
int VFX_DUR_GLOW_RED = 411;
int VFX_DUR_GLOW_LIGHT_RED = 412;
int VFX_DUR_GLOW_YELLOW = 413;
int VFX_DUR_GLOW_LIGHT_YELLOW = 414;
int VFX_DUR_GLOW_GREEN = 415;
int VFX_DUR_GLOW_LIGHT_GREEN = 416;
int VFX_DUR_GLOW_ORANGE = 417;
int VFX_DUR_GLOW_LIGHT_ORANGE = 418;
int VFX_DUR_GLOW_BROWN = 419;
int VFX_DUR_GLOW_LIGHT_BROWN = 420;
int VFX_DUR_GLOW_GREY = 421;
int VFX_DUR_GLOW_WHITE = 422;
int VFX_DUR_GLOW_LIGHT_PURPLE = 423;
int VFX_DUR_GHOST_TRANSPARENT = 424;
int VFX_DUR_GHOST_SMOKE = 425;
int VFX_DUR_GLYPH_OF_WARDING = 445;
int VFX_FNF_SOUND_BURST_SILENT = 446;
int VFX_FNF_ELECTRIC_EXPLOSION = 459;
int VFX_IMP_DUST_EXPLOSION = 460;
int VFX_IMP_PULSE_HOLY_SILENT = 461;
int VFX_DUR_DEATH_ARMOR = 463;
int VFX_HIT_HELLBALL_AOE = 464; // AFW-OEI 05/04/2007
int VFX_DUR_ICESKIN = 465;
int VFX_FNF_SWINGING_BLADE = 473;
int VFX_DUR_INFERNO = 474;
int VFX_FNF_DEMON_HAND = 475;
int VFX_DUR_STONEHOLD = 476;
int VFX_FNF_MYSTICAL_EXPLOSION = 477;
int VFX_DUR_GHOSTLY_VISAGE_NO_SOUND = 478;
int VFX_DUR_GHOST_SMOKE_2 = 479;
int VFX_DUR_FLIES = 480;
int VFX_FNF_SUMMONDRAGON = 481;
int VFX_BEAM_FIRE_W = 482;
int VFX_BEAM_FIRE_W_SILENT = 483;
int VFX_BEAM_CHAIN = 484;
int VFX_BEAM_BLACK = 485;
int VFX_IMP_WALLSPIKE = 486;
int VFX_FNF_GREATER_RUIN = 487;
int VFX_FNF_UNDEAD_DRAGON = 488;
int VFX_DUR_PROT_EPIC_ARMOR = 495;
int VFX_FNF_SUMMON_EPIC_UNDEAD = 496;
int VFX_DUR_PROT_EPIC_ARMOR_2 = 497;
int VFX_DUR_INFERNO_CHEST = 498;
int VFX_DUR_IOUNSTONE_RED = 499;
int VFX_DUR_IOUNSTONE_BLUE = 500;
int VFX_DUR_IOUNSTONE_YELLOW = 501;
int VFX_DUR_IOUNSTONE_GREEN = 502;
int VFX_IMP_MIRV_ELECTRIC = 503;
int VFX_COM_CHUNK_RED_BALLISTA = 504;
int VFX_DUR_INFERNO_NO_SOUND = 505;
int VFX_DUR_SPELL_SHIELD = 512;
int VFX_DUR_SPELL_SHIELD_OF_FAITH = 513;
int VFX_DUR_SPELL_SANCTUARY = 514;
int VFX_DUR_SPELL_CHARM_PERSON = 515;
int VFX_DUR_SPELL_CHARM_MONSTER = 516;
int VFX_DUR_SPELL_BURNING_HANDS = 517;
int VFX_BEAM_SHOCKING_GRASP = 518;
int VFX_DUR_SPELL_BLIND_DEAF = 519;
int VFX_DUR_SPELL_FALSE_LIFE = 520;
int VFX_BEAM_ABJURATION = 521;
int VFX_BEAM_CONJURATION = 522;
int VFX_BEAM_CURES = 523;
int VFX_BEAM_DIVINATION = 524;
int VFX_BEAM_ENCHANTMENT = 525;
int VFX_BEAM_EVOCATION = 526;
int VFX_BEAM_ILLUSION = 527;
int VFX_BEAM_NECROMANCY = 528;
int VFX_BEAM_TRANSMUTATION = 529;
int VFX_HIT_SPELL_ABJURATION = 530;
int VFX_HIT_SPELL_CONJURATION = 531;
int VFX_HIT_SPELL_DIVINATION = 532;
int VFX_HIT_SPELL_ENCHANTMENT = 533;
int VFX_HIT_SPELL_EVOCATION = 534;
int VFX_HIT_SPELL_ILLUSION = 535;
int VFX_HIT_SPELL_NECROMANCY = 536;
int VFX_HIT_SPELL_TRANSMUTATION = 537;
int VFX_DUR_SPELL_ACIDFOG = 538;
int VFX_DUR_SPELL_BLESS = 539;
int VFX_DUR_SPELL_DOM_ANIMAL = 540;
int VFX_DUR_SPELL_DOM_MONSTER = 541;
int VFX_DUR_SPELL_DOM_PERSON = 542;
int VFX_DUR_SPELL_FEEBLEMIND = 543;
int VFX_DUR_SPELL_PRAYER = 544;
int VFX_BEAM_PRISMATIC_SPRAY = 545;
int VFX_DUR_SPELL_PRISMATIC_SPRAY = 546;
int VFX_HIT_SPELL_SEARING_LIGHT = 547;
int VFX_HIT_SPELL_DISPLACEMENT = 548;
int VFX_DUR_SPELL_CAUSE_FEAR = 549;
int VFX_HIT_SPELL_FINGER_OF_DEATH = 550;
int VFX_HIT_SPELL_POISON = 551;
int VFX_HIT_AOE_ABJURATION = 552;
int VFX_HIT_AOE_CONJURATION = 553;
int VFX_HIT_AOE_DIVINATION = 554;
int VFX_HIT_AOE_ENCHANTMENT = 555;
int VFX_HIT_AOE_EVOCATION = 556;
int VFX_HIT_AOE_ILLUSION = 557;
int VFX_HIT_AOE_NECROMANCY = 558;
int VFX_HIT_AOE_TRANSMUTATION = 559;
int VFX_HIT_AOE_ACID = 560;
int VFX_HIT_AOE_ELDRITCH = 561;
int VFX_HIT_AOE_EVIL = 562;
int VFX_HIT_AOE_FIRE = 563;
int VFX_HIT_AOE_HOLY = 564;
int VFX_HIT_AOE_ICE = 565;
int VFX_HIT_AOE_LIGHTNING = 566;
int VFX_HIT_AOE_MAGIC = 567;
int VFX_HIT_AOE_POISON = 568;
int VFX_HIT_AOE_SONIC = 569;
int VFX_DUR_CONE_ACID = 570;
int VFX_DUR_CONE_ELDRITCH = 571;
int VFX_DUR_CONE_EVIL = 572;
int VFX_DUR_CONE_FIRE = 573;
int VFX_DUR_CONE_HOLY = 574;
int VFX_DUR_CONE_ICE = 575;
int VFX_DUR_CONE_LIGHTNING = 576;
int VFX_DUR_CONE_MAGIC = 577;
int VFX_DUR_CONE_POISON = 578;
int VFX_DUR_CONE_SONIC = 579;
int VFX_HIT_SPELL_ACID = 580;
int VFX_HIT_SPELL_ELDRITCH = 581;
int VFX_HIT_SPELL_EVIL = 582;
int VFX_HIT_SPELL_FIRE = 583;
int VFX_HIT_SPELL_HOLY = 584;
int VFX_HIT_SPELL_ICE = 585;
int VFX_HIT_SPELL_LIGHTNING = 586;
int VFX_HIT_SPELL_MAGIC = 587;
int VFX_HIT_SPELL_SONIC = 588;
int VFX_BEAM_ACID = 589;
int VFX_BEAM_ELDRITCH = 590;
int VFX_BEAM_EVIL = 591;
int VFX_BEAM_FIRE = 592;
int VFX_BEAM_HOLY = 593;
int VFX_BEAM_ICE = 594;
int VFX_BEAM_LIGHTNING = 595;
int VFX_BEAM_MAGIC = 596;
int VFX_BEAM_POISON = 597;
int VFX_BEAM_SONIC = 598;
int VFX_DUR_SPELL_BEAR_ENDURANCE = 599;
int VFX_DUR_SPELL_BULL_STRENGTH = 600;
int VFX_DUR_SPELL_CAT_GRACE = 601;
int VFX_DUR_SPELL_EAGLE_SPLENDOR = 602;
int VFX_DUR_SPELL_FOX_CUNNING = 603;
int VFX_DUR_SPELL_OWL_WISDOM = 604;
int VFX_DUR_SPELL_ENTROPIC_SHIELD = 605;
int VFX_HIT_SPELL_SUMMON_CREATURE = 606;
int VFX_DUR_CONE_COLORSPRAY = 607;
int VFX_DUR_SPELL_MAGE_ARMOR = 608;
int VFX_DUR_SPELL_AID = 609;
int VFX_DUR_SPELL_DIVINE_FAVOR = 610;
int VFX_DUR_SPELL_VIRTUE = 611;
int VFX_HIT_SPELL_INFLICT_1 = 612;
int VFX_HIT_SPELL_INFLICT_2 = 613;
int VFX_HIT_SPELL_INFLICT_3 = 614;
int VFX_HIT_SPELL_INFLICT_4 = 615;
int VFX_HIT_SPELL_INFLICT_5 = 616;
int VFX_HIT_SPELL_INFLICT_6 = 617;
int VFX_DUR_SPELL_BANE = 618;
int VFX_HIT_SPELL_ENLARGE_PERSON = 619;
int VFX_DUR_SPELL_GLOBE_INV_GREAT = 620;
int VFX_DUR_SPELL_GLOBE_INV_LESS = 621;
int VFX_DUR_SPELL_PROT_ARROWS = 622;
int VFX_DUR_SPELL_PROT_ALIGN = 623;
int VFX_DUR_SPELL_PROT_ENERGY = 624;
int VFX_DUR_SPELL_MIND_FOG = 625;
int VFX_HIT_SPELL_FLAMESTRIKE = 626;
int VFX_DUR_WINTER_WOLF_BREATH = 627;
int VFX_DUR_SPELL_RESISTANCE = 628;
int VFX_DUR_SPELL_AMPLIFY = 629;
int VFX_DUR_SPELL_BLESS_WEAPON = 630;
int VFX_DUR_SPELL_CAMOFLAGE = 631;
int VFX_DUR_SPELL_DEATHWATCH = 632;
int VFX_DUR_SPELL_DETECT_UNDEAD = 633;
int VFX_DUR_SPELL_ENDURE_ELEMENTS = 634;
int VFX_DUR_SPELL_EXPEDITIOUS_RETREAT = 635;
int VFX_DUR_SPELL_IDENTIFY = 636;
int VFX_DUR_SPELL_LOWLIGHT_VISION = 637;
int VFX_DUR_SPELL_MAGIC_FANG = 638;
int VFX_DUR_SPELL_MAGIC_WEAPON = 639;
int VFX_DUR_SPELL_RESIST_ENERGY = 640;
int VFX_DUR_SPELL_ULTRAVISION = 641;
int VFX_DUR_SPELL_AURA_OF_GLORY = 642;
int VFX_DUR_SPELL_BARKSKIN = 643;
int VFX_DUR_SPELL_BLINDSIGHT = 644;
int VFX_DUR_SPELL_CLARITY = 645;
int VFX_DUR_SPELL_DEATH_KNELL = 646;
int VFX_DUR_SPELL_FIND_TRAPS = 647;
int VFX_DUR_SPELL_FLAME_WEAPON = 648;
int VFX_DUR_SPELL_GHOSTLY_VISAGE = 649;
int VFX_DUR_SPELL_HEROISM = 650;
int VFX_DUR_SPELL_RAGE = 651;
int VFX_DUR_SPELL_SEE_INVISIBILITY = 652;
int VFX_DUR_SPELL_CLAIRAUD = 653;
int VFX_DUR_SPELL_HASTE = 654;
int VFX_DUR_SPELL_KEEN_EDGE = 655;
int VFX_DUR_SPELL_GOOD_CIRCLE = 656;
int VFX_DUR_SPELL_EVIL_CIRCLE = 657;
int VFX_DUR_SPELL_GREATER_MAGIC_FANG = 658;
int VFX_DUR_SPELL_MAGIC_VESTMENT = 659;
int VFX_DUR_SPELL_GREATER_MAGIC_WEAPON = 660;
int VFX_DUR_SPELL_SPIDERSKIN = 661;
int VFX_DUR_SPELL_WEAPON_OF_IMPACT = 662;
int VFX_DUR_SPELL_ASSAY_RESISTANCE = 663;
int VFX_DUR_SPELL_DEATH_WARD = 664;
int VFX_DUR_SPELL_DIVINE_POWER = 665;
int VFX_DUR_SPELL_HOLY_SWORD = 666;
int VFX_DUR_SPELL_LEGEND_LORE = 667;
int VFX_DUR_SPELL_SPELL_IMMUNITY = 668;
int VFX_DUR_SPELL_STONESKIN = 669;
int VFX_DUR_SPELL_WAR_CRY = 670;
int VFX_DUR_SPELL_AWAKEN = 671;
int VFX_DUR_SPELL_ENERGY_BUFFER = 672;
int VFX_DUR_SPELL_ETHEREAL_VISAGE = 673;
int VFX_DUR_SPELL_GREATER_HEROISM = 674;
int VFX_DUR_SPELL_LESSER_MIND_BLANK = 675;
int VFX_DUR_SPELL_OWL_INSIGHT = 676;
int VFX_DUR_SPELL_LESSER_SPELL_MANTLE = 677;
int VFX_DUR_SPELL_SPELL_RESISTANCE = 678;
int VFX_DUR_SPELL_TRUE_SEEING = 679;
int VFX_DUR_SPELL_CONTROL_UNDEAD = 680;
int VFX_DUR_SPELL_ENERGY_IMMUNITY = 681;
int VFX_DUR_SPELL_STONEBODY = 682;
int VFX_DUR_SPELL_GREATER_STONESKIN = 683;
int VFX_DUR_SPELL_TENSERS_TRANSFORM = 684;
int VFX_DUR_SPELL_AURA_OF_VITALITY = 685;
int VFX_DUR_SPELL_SPELL_MANTLE = 686;
int VFX_DUR_SPELL_BLACKSTAFF = 687;
int VFX_DUR_SPELL_IRON_BODY = 688;
int VFX_DUR_SPELL_MIND_BLANK = 689;
int VFX_DUR_SPELL_PREMONITION = 690;
int VFX_DUR_SPELL_PROTECTION_FROM_SPELLS = 691;
int VFX_DUR_SPELL_GREATER_SPELL_IMMUNITY = 692;
int VFX_DUR_SPELL_ETHEREALNESS = 693;
int VFX_DUR_SPELL_GREATER_SPELL_MANTLE = 694;
int VFX_DUR_SPELL_UNDEATH_ETERNAL_FOE = 695;
int VFX_DUR_SPELL_GOOD_AURA = 696;
int VFX_DUR_SPELL_EVIL_AURA = 697;
int VFX_DUR_SPELL_DISPLACEMENT = 698;
int VFX_DUR_SPELL_VAMPIRIC_TOUCH = 699;
int VFX_DUR_SPELL_BATTLETIDE = 700;
int VFX_DUR_SPELL_VAMPIRIC_TOUCH_VICTIM = 701;
int VFX_DUR_SPELL_BATTLETIDE_VICTIM = 702;
int VFX_DUR_SPELL_DAZE = 703;
int VFX_DUR_SPELL_DOOM = 704;
int VFX_DUR_SPELL_RAY_ENFEEBLE = 705;
int VFX_DUR_SPELL_TASHA_LAUGHTER = 706;
int VFX_DUR_SPELL_HOLD_ANIMAL = 707;
int VFX_DUR_SPELL_HOLD_PERSON = 708;
int VFX_DUR_SPELL_SILENCE = 709;
int VFX_DUR_SPELL_BESTOW_CURSE = 710;
int VFX_DUR_SPELL_CONFUSION = 711;
int VFX_DUR_SPELL_CRUSHING_DESP = 712;
int VFX_DUR_SPELL_FEAR = 713;
int VFX_DUR_SPELL_MAGGOT_INFESTATION = 714;
int VFX_DUR_SPELL_INVISIBILITY_PURGE = 715;
int VFX_DUR_SPELL_SLOW = 716;
int VFX_DUR_SPELL_HOLD_MONSTER = 717;
int VFX_DUR_SPELL_LESSER_SPELL_BREACH = 718;
int VFX_DUR_SPELL_MIND_FOG_VIC = 719;
int VFX_DUR_SPELL_SONG_OF_DISCORD = 720;
int VFX_DUR_SPELL_FLESH_TO_STONE = 721;
int VFX_DUR_SPELL_REPULSION = 722;
int VFX_DUR_SPELL_GREATER_SPELL_BREACH = 723;
int VFX_DUR_SPELL_WORD_OF_FAITH = 724;
int VFX_DUR_SPELL_ENERGY_DRAIN = 725;
int VFX_DUR_SPELL_CONTAGION = 726;
int VFX_DUR_SPELL_GLYPH_WARDING = 727;
int VFX_DUR_SPELL_MAGIC_CIRCLE = 728;
int VFX_DUR_SPELL_CLOUDKILL = 729;
int VFX_DUR_SPELL_INCENDIARY_CLOUD = 730;
int VFX_DUR_SPELL_STINKING_CLOUD = 731;
int VFX_DUR_SPELL_WEB = 732;
int VFX_DUR_SPELL_CLOUD_BEWILDERMENT = 733;
int VFX_DUR_SPELL_PRAYER_VIC = 734;
int VFX_HIT_SPELL_METEOR_SWARM_SML = 735;
int VFX_HIT_SPELL_WAIL_OF_THE_BANSHEE = 736;
int VFX_SPELL_SHADES_DELAYED_FIREBALL = 737;
int VFX_SPELL_SHADES_BUFF = 738;
int VFX_SPELL_SHADES_SUMMON_CREATURE = 739;
int VFX_FEAT_TURN_UNDEAD = 740;
int VFX_INVOCATION_BESHADOWED_BLOW =750;
int VFX_INVOCATION_BESHADOWED_CHAIN =751;
int VFX_INVOCATION_BESHADOWED_CHAIN2 =752;
int VFX_INVOCATION_BESHADOWED_HIT =753;
int VFX_INVOCATION_BESHADOWED_RAY =754;
int VFX_INVOCATION_BEWITCHING_BLOW =755;
int VFX_INVOCATION_BEWITCHING_CHAIN =756;
int VFX_INVOCATION_BEWITCHING_CHAIN2 =757;
int VFX_INVOCATION_BEWITCHING_CONE =758;
int VFX_INVOCATION_BEWITCHING_DOOM =759;
int VFX_INVOCATION_BESHADOWED_CONE =760;
int VFX_INVOCATION_BESHADOWED_DOOM =761;
int VFX_INVOCATION_BEWITCHING_HIT =762;
int VFX_INVOCATION_BEWITCHING_RAY =763;
int VFX_INVOCATION_BRIMSTONE_BLOW =764;
int VFX_INVOCATION_BRIMSTONE_CHAIN =765;
int VFX_INVOCATION_BRIMSTONE_CHAIN2 =766;
int VFX_INVOCATION_BRIMSTONE_CONE =767;
int VFX_INVOCATION_BRIMSTONE_DOOM =768;
int VFX_INVOCATION_BRIMSTONE_HIT =769;
int VFX_INVOCATION_BRIMSTONE_RAY =770;
int VFX_INVOCATION_DRAINING_BLOW =771;
int VFX_INVOCATION_DRAINING_CHAIN =772;
int VFX_INVOCATION_DRAINING_CHAIN2 =773;
int VFX_INVOCATION_DRAINING_CONE =774;
int VFX_INVOCATION_DRAINING_DOOM =775;
int VFX_INVOCATION_DRAINING_HIT =776;
int VFX_INVOCATION_DRAINING_RAY =777;
int VFX_INVOCATION_ELDRITCH_AOE =778;
int VFX_INVOCATION_ELDRITCH_CHAIN =779;
int VFX_INVOCATION_ELDRITCH_CHAIN2 =780;
int VFX_INVOCATION_ELDRITCH_CONE =781;
int VFX_INVOCATION_ELDRITCH_HIT =782;
int VFX_INVOCATION_ELDRITCH_RAY =783;
int VFX_INVOCATION_ELDRITCH_TRAVEL =784;
int VFX_INVOCATION_FRIGHTFUL_BLOW =785;
int VFX_INVOCATION_FRIGHTFUL_CHAIN =786;
int VFX_INVOCATION_FRIGHTFUL_CHAIN2 =787;
int VFX_INVOCATION_FRIGHTFUL_CONE =788;
int VFX_INVOCATION_FRIGHTFUL_DOOM =789;
int VFX_INVOCATION_FRIGHTFUL_HIT =790;
int VFX_INVOCATION_FRIGHTFUL_RAY =791;
int VFX_INVOCATION_HELLRIME_BLOW =792;
int VFX_INVOCATION_HELLRIME_CHAIN =793;
int VFX_INVOCATION_HELLRIME_CHAIN2 =794;
int VFX_INVOCATION_HELLRIME_CONE =795;
int VFX_INVOCATION_HELLRIME_DOOM =796;
int VFX_INVOCATION_HELLRIME_HIT =797;
int VFX_INVOCATION_HELLRIME_RAY =798;
int VFX_INVOCATION_HIDEOUS_BLOW =799;
int VFX_INVOCATION_HIDEOUS_CHAIN =800;
int VFX_INVOCATION_HIDEOUS_CHAIN2 =801;
int VFX_INVOCATION_HIDEOUS_CONE =803;
int VFX_INVOCATION_HIDEOUS_DOOM =804;
int VFX_INVOCATION_HIDEOUS_HIT =805;
int VFX_INVOCATION_HIDEOUS_RAY =806;
int VFX_INVOCATION_NOXIOUS_BLOW =807;
int VFX_INVOCATION_NOXIOUS_CHAIN =808;
int VFX_INVOCATION_NOXIOUS_CHAIN2 =809;
int VFX_INVOCATION_NOXIOUS_CONE =810;
int VFX_INVOCATION_NOXIOUS_DOOM =811;
int VFX_INVOCATION_NOXIOUS_HIT =812;
int VFX_INVOCATION_NOXIOUS_RAY =813;
int VFX_INVOCATION_UTTERDARK_BLOW =814;
int VFX_INVOCATION_UTTERDARK_CHAIN =815;
int VFX_INVOCATION_UTTERDARK_CHAIN2 =816;
int VFX_INVOCATION_UTTERDARK_CONE =817;
int VFX_INVOCATION_UTTERDARK_DOOM =818;
int VFX_INVOCATION_UTTERDARK_HIT =819;
int VFX_INVOCATION_UTTERDARK_RAY =820;
int VFX_INVOCATION_VITRIOLIC_BLOW =821;
int VFX_INVOCATION_VITRIOLIC_CHAIN =822;
int VFX_INVOCATION_VITRIOLIC_CHAIN2 =823;
int VFX_INVOCATION_VITRIOLIC_CONE =824;
int VFX_INVOCATION_VITRIOLIC_DOOM =825;
int VFX_INVOCATION_VITRIOLIC_HIT =826;
int VFX_INVOCATION_VITRIOLIC_RAY =827;
int VFX_DUR_GREASE =828;
int VFX_DUR_STUN =829;
int VFX_COM_BLOOD_REG_BLACK = 830;
int VFX_COM_BLOOD_REG_DUST = 831;
int VFX_HIT_SPELL_BALAGARN_IRON_HORN = 832;
int VFX_INVOCATION_WORD_OF_CHANGING = 833;
int VFX_DUR_AOE_CREEPING_DOOM = 834;
int VFX_DUR_POLYMORPH = 835;
int VFX_HIT_CURE_AOE = 838;
int VFX_HIT_TURN_UNDEAD = 839;
int VFX_PER_AOE_TENACIOUS = 840;
int VFX_DUR_GATE = 841;
int VFX_CAST_BARD_INS = 842;
int VFX_CAST_BARD_SONG = 843;
int VFX_HIT_BARD_COUNTERSONG = 844;
int VFX_HIT_BARD_HAVEN_SONG = 845;
int VFX_HIT_BARD_INS_COMPETENCE = 846;
int VFX_HIT_BARD_INS_COURAGE = 847;
int VFX_HIT_BARD_INS_DEFENSE = 848;
int VFX_HIT_BARD_INS_HEROICS = 849;
int VFX_HIT_BARD_INS_JARRING = 850;
int VFX_HIT_BARD_INS_LEGION = 851;
int VFX_HIT_BARD_INS_REGENERATION = 852;
int VFX_HIT_BARD_INS_SLOWING = 853;
int VFX_HIT_BARD_INS_TOUGHNESS = 854;
int VFX_DUR_BARD_SONG_IRONSKIN = 855;
int VFX_HIT_BARD_SONG_FREEDOM = 856;
int VFX_DUR_INVOCATION_DARKONESLUCK = 857;
int VFX_DUR_INVOCATION_LEAPS_BOUNDS = 858;
int VFX_DUR_INVOCATION_BEGUILE_INFLUENCE = 859;
int VFX_HIT_SPELL_METEOR_SWARM_LRG = 860;
int VFX_DUR_INVOCATION_RETRIBUTIVE_INVISIBILITY = 861;
int VFX_DUR_TAUNT = 862;
int VFX_DUR_NAUSEA = 863;
int VFX_DUR_SICKENED = 864;
int VFX_DUR_CURSESONG = 865;
int VFX_DUR_SLEEP = 866;
int VFX_HIT_BARD_CLOUDMIND = 867;
int VFX_HIT_DROWN = 869;
int VFX_BEAM_GREEN_DRAGON_ACID = 870;
int VFX_CONE_RED_DRAGON_FIRE = 871;
int VFX_DUR_SPELL_MIRROR_IMAGE_1 = 872;
int VFX_CONE_ACID_BREATH = 873;
int VFX_AURA_BLADE_BARRIER = 874;
int VFX_SPELL_HIT_EARTHQUAKE = 875;
int VFX_DUR_SPELL_MIRROR_IMAGE_SELF = 876;
int VFX_DUR_SPELL_CREEPING_DOOM = 877;
int VFX_DUR_INVOCATION_TENACIOUS_PLAGUE = 878;
int VFX_DUR_SPELL_INVISIBILITY_SPHERE = 879;
int VFX_DUR_ITEM_CHOKING_POWDER = 880;
int VFX_DUR_CREATURE_AIR_ELEMENTAL = 881;
int VFX_DUR_RUBUKE_UNDEAD = 882;
int VFX_DUR_REGENERATE = 883;
int VFX_AOE_WEB_OF_PURITY = 884;
int VFX_HIT_CRADLE_OF_RIME = 885;
int VFX_AOE_CRADLE_OF_RIME = 886;
int VFX_DUR_SHADOW_CLOAK = 887;
int VFX_AOE_SHADOW_PLAGUE = 888;
int VFX_DUR_SHADOW_PLAGUE = 889;
int VFX_HIT_AURORA_CHAIN = 890;
int VFX_DUR_AURORA_CHAIN = 891;
int VFX_HIT_CLEANSING_NOVA = 892;
int VFX_DUR_SHINING_SHIELD = 893;
int VFX_DUR_FIRE = 894;
int VFX_CREATURE_ABILITY_DUR_MINDFLAYER = 895;
int VFX_FNF_CRAFT_SELF = 896;
int VFX_FNF_CRAFT_ALCHEMY = 897;
int VFX_FNF_CRAFT_BLACKSMITH = 898;
int VFX_FNF_CRAFT_MAGIC = 899;
int VFX_BEAM_WEB_OF_PURITY = 900;
int VFX_DUR_FIREBALL = 901;
int VFX_DUR_WAUKEEN_HALO = 902;
int VFX_DUR_SOOTHING_LIGHT = 903;
int VFX_DUR_SPELL_MELFS_ACID_ARROW = 904;
int VFX_HIT_SPELL_METEOR_SWARM = 905;
int VFX_DUR_FEAT_SACRED_VENGEANCE = 906;
int VFX_DUR_FEAT_DIVINE_RESISTANCE = 907;
int VFX_SOUND_WEB = 908;
int VFX_SOUND_BLADE = 909;
int VFX_SOUND_ENTANGLE = 910;
int VFX_SOUND_FIRE = 911;
int VFX_SOUND_SPIKE = 912;
int VFX_SOUND_TENTACLE = 913;
int VFX_DUR_FEAT_FIENDISH_RES = 914;
int VFX_SPELL_DUR_CALL_LIGHTNING = 915;
int VFX_SPELL_HIT_CALL_LIGHTNING = 916;
int VFX_SPELL_HIT_SWAMP_LUNG = 917;
int VFX_SPELL_DUR_TORT_SHELL = 918;
int VFX_SPELL_DUR_COCOON = 919;
int VFX_SPELL_DUR_FOUND_STONE = 920;
int VFX_SPELL_BEAM_MOON_BOLT = 921;
int VFX_SPELL_DUR_JAGGED_TOOTH = 922;
int VFX_SPELL_DUR_NATURE_AVATAR = 923;
int VFX_SPELL_DUR_BODY_SUN = 924;
int VFX_SPELL_DUR_STORM_AVATAR = 925;
int VFX_DUR_IOUN_STONE_STR = 926;
int VFX_DUR_IOUN_STONE_DEX = 927;
int VFX_DUR_IOUN_STONE_CON = 928;
int VFX_DUR_IOUN_STONE_INT = 929;
int VFX_DUR_IOUN_STONE_WIS = 930;
int VFX_DUR_IOUN_STONE_CHA = 931;
int VFX_HIT_HELLBALL = 941;
int VFX_INVOCATION_HINDERING_BLOW =942;
int VFX_INVOCATION_HINDERING_CHAIN =943;
int VFX_INVOCATION_HINDERING_CHAIN2 =944;
int VFX_INVOCATION_HINDERING_CONE =945;
int VFX_INVOCATION_HINDERING_DOOM =946;
int VFX_INVOCATION_HINDERING_HIT =947;
int VFX_INVOCATION_HINDERING_RAY =948;
int VFX_INVOCATION_BINDING_BLOW =949;
int VFX_INVOCATION_BINDING_CHAIN =950;
int VFX_INVOCATION_BINDING_CHAIN2 =951;
int VFX_INVOCATION_BINDING_CONE =952;
int VFX_INVOCATION_BINDING_DOOM =953;
int VFX_INVOCATION_BINDING_HIT =954;
int VFX_INVOCATION_BINDING_RAY =955;
int VFX_DUR_SPELL_LIONHEART = 965;
int VFX_DUR_SPELL_DETECT_SPIRITS = 966;
int VFX_DUR_SPELL_SPIRIT_FORM = 967;
int VFX_DUR_SPELL_SPIRIT_JOURNEY = 968;
int VFX_DUR_SPELL_LESSER_VIGOR = 969;
int VFX_DUR_SPELL_VIGOR = 970;
int VFX_DUR_SPELL_MASS_LESSER_VIGOR = 971;
int VFX_DUR_SPELL_VIGOROUS_CYCLE = 972;
int VFX_DUR_SPELL_SUPERIOR_RESISTANCE = 973;
int VFX_DUR_SPELL_RECITATION = 974;
int VFX_DUR_SPELL_LAST_STAND = 975; // AFW-OEI 06/27/2007
int VFX_HIT_SPELL_CURSE_OF_IMPENDING_BLADES = 976; // AFW-OEI 06/27/2007
int VFX_DUR_SACRED_FLAMES = 977; // AFW-OEI 06/28/2007
int VFX_DUR_SPELL_LESSER_VISAGE = 978; // AFW-OEI 06/28/2007
int VFX_DUR_SPELL_VISAGE_GOOD = 979; // AFW-OEI 06/28/2007
int VFX_DUR_SPELL_VISAGE_NEUTRAL = 980; // AFW-OEI 06/28/2007
int VFX_DUR_SPELL_VISAGE_EVIL = 981; // AFW-OEI 06/28/2007
int VFX_HIT_SPELL_DISINTEGRATE = 982; // AFW-OEI 07/02/2007
int VFX_DUR_SPELL_SHADOW_SIMULACRUM = 983; // AFW-OEI 07/02/2007
int VFX_DUR_SPELL_SHROUDING_FOG = 985; // AFW-OEI 07/09/2007
int VFX_DUR_SPELL_POWER_WORD_WEAKEN = 986;
int VFX_DUR_SPELL_POWER_WORD_PETRIFY = 987;
int VFX_DUR_SPELL_POWER_WORD_MALADROIT = 988;
int VFX_DUR_SPELL_POWER_WORD_BLIND = 989;
int VFX_DUR_SPELL_TOUCH_OF_IDIOCY = 990;
int VFX_HIT_SPELL_AVASCULATE = 991;
int VFX_DUR_SPELL_GLACIAL_WRATH = 992;
int VFX_DUR_SPELL_CREEPING_COLD = 993;
int VFX_DUR_SPELL_MASS_CURSE_OF_BLADES = 996;
int VFX_DUR_SPELL_HISS_OF_SLEEP = 997;
int VFX_HIT_SPELL_MASS_FOWL = 998;
int VFX_HIT_SPELL_WALL_OF_DISPEL = 999;
int VFX_HIT_SPELL_ENTROPIC_HUSK = 1000;
int VFX_DUR_SPELL_CURSE_OF_BLADES = 1001;
int VFX_DUR_INNER_ARMOR = 1002;
int VFX_DUR_SPELL_GLASS_DOPPELGANGER = 1003;
int VFX_HIT_SPELL_VAMPIRIC_FEAST = 1004;
int VFX_DUR_SPELL_GREATER_RESISTANCE = 1005;
int VFX_DUR_SPELL_SOLIPSISM = 1006;
int VFX_HIT_SPELL_TOUCH_OF_FATIGUE = 1007;
int VFX_HIT_SPELL_SHOUT = 1008;
int VFX_HIT_SPELL_GREATER_SHOUT = 1009;
int VFX_DUR_SPELL_EPIC_GATE = 1010;
int VFX_DUR_BLAZING_AURA = 1011;
int VFX_HIT_CHASTISE_SPIRITS = 1012;
int VFX_HIT_WEAKEN_SPIRITS = 1013;
int VFX_DUR_RESCUER = 1014;
int VFX_BEAM_RESCUEE = 1015;
int VFX_CAST_SPELL_SPIRIT_EMERGE = 1016;
int VFX_CAST_SPELL_SPIRIT_EMERGE_GOOD = 1017;
int VFX_HIT_BARD_REQUIEM = 1018;
int VFX_HIT_SPELL_BLADEWEAVE = 1020;
int VFX_HIT_SPELL_BLOOD_TO_WATER = 1021;
int VFX_AOE_SPELL_BLOOD_TO_WATER = 1022;
int VFX_HIT_SPELL_BODAKS_GLARE = 1023;
int VFX_SUMMON_SPELL_BODAKS_GLARE = 1024;
int VFX_HIT_SPELL_CASTIGATE = 1025;
int VFX_AOE_SPELL_CASTIGATE = 1026;
int VFX_HIT_SPELL_CONVICTION = 1027;
int VFX_HIT_SPELL_DEHYDRATION = 1028;
int VFX_DUR_SPELL_ANIMALISTIC_POWER = 1029;
int VFX_HIT_SPELL_LIVING_UNDEATH = 1030;
int VFX_HIT_SPELL_HEALING_STING = 1031;
int VFX_HEAL_SPELL_HEALING_STING = 1032;
int VFX_DUR_SPELL_NIGHTSHIELD = 1033;
int VFX_DUR_SPELL_LIVING_UNDEATH = 1034;
int VFX_DUR_SPELL_SYMBOL_OF_DEATH = 1035;
int VFX_DUR_SPELL_SYMBOL_OF_FEAR = 1036;
int VFX_DUR_SPELL_SYMBOL_OF_PAIN = 1037;
int VFX_DUR_SPELL_SYMBOL_OF_PERSUASION = 1038;
int VFX_DUR_SPELL_SYMBOL_OF_SLEEP = 1039;
int VFX_DUR_SPELL_SYMBOL_OF_STUNNING = 1040;
int VFX_DUR_SPELL_SYMBOL_OF_WEAKNESS = 1041;
int VFX_AOE_SYMBOL_SPELL = 1042;
int VFX_AURA_HELLFIRE_BLAST = 1043;
int VFX_AURA_HELLFIRE_SHIELD = 1044;
int VFX_AOE_ETHEREAL_PURGE = 1045;
int VFX_DUR_BOND_OF_FATAL_TOUCH = 1046;
int VFX_HIT_SPELL_REDUCE_PERSON = 1047;
int VFX_HIT_SPELL_SNAKESSWIFTNESS = 1048;

ALFA Encounter Groups

Overview
The ALFA Encounter System provides an easy means for builders to add terrain specific random encounters to module areas. The system is a collection of creatures, scripts, and waypoints, built on top of the ALFA Spawn System, that allows a builder to easily add terrain appropriate random spawns. It is intended to be trivial to implement, and to decrease predictability for spawn groups in a given area.
 
The lowest logical unit is a creature. This is typically a single generic creature from an approved source such as Monsters of Faerun or the Monster Manual. You can spawn them individually in the DM Chooser for live play, but it is not recommended to use them within the toolset directly.
 
Above the creature is a creature group. A group is typically either a specific number of homogenous creatures, like a Kobold Gang EL 1 (1d6 + 3 kobolds), or a group of mixed creatures like an Orc Patrol EL 7 (1d4+4 orcs, 1d2 2nd level orc barbarians, and a 4th level orc leader). You can use these groups directly in your modules, but they can be predictable and subject to farming if the same group always spawns in the same place.
 
Above the creature group is a terrain group. A terrain group is a collection of creatures groups and single creatures appropriate for a given area. So for the Temperate Clear group, you might have a 10% chance of neutral animals, 10% militia patrol, 5% bandits, and so forth.
 
With a basic knowledge of scripting you can also use the predefined creature groups or terrain groups for your own custom areas, and you can modify or customize the scripts specifically for your server.
 
Usage
You will need to acquire the latest version of the ALFA Campaign folder, located here, or from a maintainer of the content (currently Ronan or Riotnrrd). Within the campaign folder is a full set of ALFA compliant creatures, along with a set of scripts and waypoints to spawn then in intelligent groups.
 
 
You will need to associate the ALFA-Campaign folder with your module from within the Campaign Editor plugin, then save, then reload to associate them with your module.
 
First, choose an area and terrain in your module to populate. Most areas conform to a loose climate zone; three examples might be temperate plains, southern mountains, or dungeon. Pick a terrain and difficulty that makes sense to you (for instance, you might choose ALFA_Groups->Dungeon->Dungeon EL 1-3 or Dungeon 4-6 for the upper and lower layers of a low level cave). Builders often place lesser dangerous areas close to major roads and towns, where more difficult areas would be in more remote areas. A good mix also ensures there are areas for PC parties of various levels.
 
Next, decide how frequent you want the creatures to be. A general guideline is a small area should have 1 active, a medium 2, and a large area 4, but you can increase or decrease if you like. By default, each individual spawn waypoint is active 50% of the time, but this can be changed by editing the placed waypoint ACR_SPAWN_CHANCE variable. You may want to keep the PCs guessing by dropping a number of waypoints to sum to your desired probability (1x50% spawn is active half of the time, whereas 3x33% chances would mean one would be active on average at a given time, or 8x25% would mean 2 would be active on average, etc). The spawn waypoints will reroll a chance to be active every 3 hours or so, and if destroyed will delay between 1 and 3 real life hours before having a chance to reactivate.
 
 
Finally, place the waypoints. In the Blueprints section, navigate to ALFA_Groups, then pick from Environment or Hostile or Defender spawns. For example, a Temperate Clear area would be ALFA_Groups->Environment->Temperate->Clear EL 1-5. Drop your waypoints away from ATs in sensible locations, and adjust the probability for your spawn waypoints with the ACR_SPAWN_CHANCE as desired. When you restart the server, you should see your creatures start to spawn.
 
 
Current Groups
Each terrain type has a default difficulty range. The Encounter Level (EL) of a spawn is generally appropriate for a party of 4 PCs of that level, so an EL 5 would be appropriate for a group of 4 5th level PCs. For above ground terrains, the difficulty is often higher at night.
 
ALFA_Groups->Defender (adventurers, dwarven or elven teams, halfling scouts, merchants, etc)
ALFA_Groups->Dungeon-> Dungeon - EL 1-3
ALFA_Groups->Temperate>Temperate Clear (EL1-5)
ALFA_Groups->Temperate>Temperate Hills (EL 2-9)
ALFA_Groups->Hostile (Animals, constructs, humanoids, lycanthropes, etc)
 
Technical Notes:
- Click on any waypoint and see the description field to determine the number and type of creatures spawned for that waypoint
- The waypoints use scripts defined in as_group_<name>. Examine the scripts to see how they are made
- To create your own encounters, you can copy a waypoint, and edit the ACR_SPAWN_GROUP_1 variable to point to your custom script. Then, copy any existing group script and save it with the name as_group_<new group>. You can then call other groups with any probability, or add your own creatures into the mix.

ALFA Release Notes v1.88

Change Log

IMPORTANT TO ALL MODULE MAINTAINERS: In this update, acr_time_i has changed. All quests with scripted cooldowns, and all functionality that relies on persistent time will have its timers set up, and will believe itself (just this once) to have fired several years in the future. This was due to a bug in the calculation of timestamps, which caused an integer overflow and correcting it may require a conversion. The tech team is available to apply these corrections if they become necessary.

General Fixes

  • Preception checks are now forcibly rerun after the use of default scripts to change faction (so that previous enemies won't continue to fight and become enemies again, for example).
  • Automated consumable crafting is less likely to produce the already-somewhat-rare free scrolls.
  • Changing combat modes with cooldowns will now function regardless of whether or not they've previously been activated.
  • Lingering effects from having Combat Expertise on while logging out should no longer be available.
  • Combat Expertise is more intelligent about updating when a user changes the contents of their hands.
  • Combat Expertise no longer informs your entire party when you've changed your tactics.
  • The skill focus feats for custom ACR skills now apply the bonus directly to the character, and should thus be more consistent in their function.
  • A series of bugs which came from the ACR accessing operating-system-level information (generally disabling cross-server communication and the player chat interface) are fixed.
  • Random spawn radius on the ACR Spawn System will now spawn the creature in a random spot inside the radius.
  • The architecture around applying damage over time for Vitriolic Blast will now more-reliably count the amount of damage to be dealt through multiple sequential castings of Vitriolic Blast (warlocks should expect only one damage over time to function at a time, but the most recent will be the one it counts from, whereas previously only about 1 in 3 would restart the timer).
  • The ACR Hotfix architecture has improved its architecture, and will no longer disable a server if it cannot apply the update (it will, instead, roll back and restart).
  • Messages sent to a player while they are offline will now be displayed after the PC has finished loading into the module, to make it more likely that the player sees that message.
  • acr_time_i now calculates all of its measures of time from real time in UTC, and provides a series of new functions that report in human-readable real time (rather than real time converted to game time).
  • acr_portal_cnd.ncs (not just .nss) is now in alfa2_acr.hak.
  • Subraces are less likely to be afflicted by movement rate bugs associated with changing appearance or swimming.
  • Many icons are fixed for scrolls of RP spells
  • The previously-advertised undead touch attack is now compiling in alfa2_acr.hak
  • Turn Undead works on any creature with levels in undead, even if that creature's racial type isn't undead.
  • DMFI item examine aborts-- instead of crashing the client-- if it can't find an item to examine.
  • All polymorph effects are removed as part of logging in, to prevent client crashes.
  • acr_vanity_i now uses a generic polymorph, instead of chickens, to prevent spell loss in spellcasters.
  • Raise Dead cast by a DM avatar-- as opposed to a possessed NPC-- no longer applies a level loss.
  • Favored Enemy: Beast can no longer be selected ("Beast" is not a canonical creature type. If you mean displacer beasts and unicorns, you want magical beast; if you mean dire bears and wolves, you want animal; if you want minotaurs, you want monstrous humanoid).
  • Nonlethal damage mode should no longer destroy existing damage penalties (e.g. from alchemical silver).
  • Trade Scrolls can be made from RP spells
  • Intimidate can now be rolled with chat dice. (#inti)
  • Tents and bedrolls can no longer be created during combat-- those who attempt to misuse them will instead be struck repeatedly by the metagame monkey.
  • Word of Recall is available as drd 8 / clr 6, not wiz 8/ clr 6. (wizards seeking to move about in this fashion should use Greater Teleport).
  • Wizards no longer have access to Stone Tell
  • When making an area transition into space near hostile monsters, characters now receive both a spot and a listen check.
  • Flee the Scene no longer sticks the user into a casting animation loop when used at less than the maximum range.
  • Forgery checks are no longer intercepted by fortitude.
  • Phat Lewt checks only allow one search check per person searching.
  • Calls seeking natural hair color are now more reliable.
  • Characters who are bleeding out will lose any standing invisibility effects, under the presumption that anyone who can dismiss invisibility would do so in order to provide healing.
  • Icons are provided for a number of scrolls.

Core System Changes

  • If a character's level is more than 8 higher than a target's CR, that target no longer provides combat XP.

Spell Changes

  • Jump now has a scripted function (providing a general bonus to the jump skill).
  • Glibness now has a scripted function (providing a general bonus to the bluff skill, but only inside of conversations; glibness cannot be used in conjunction with Feint).
  • Magic Weapon and Greater Magic Weapon can now affect monk gloves and ranged weapons (providing an attack bonus, rather than an enhancement bonus, to these; while there is little we can do about the damage discrepancy, this will allow users to pierce /magic damage reduction with these weapons).
  • Mass Camouflage is updated to its level and function from Complete Divine (drd/rgr 4, lasting 10 minutes/lvl).

New Spells

  • Dimensional Anchor is now available as a spell, and has a scripted function (stopping spells such as Etheral Jaunt, Etherealness, Dimension Door, and Flee the Scene).  

New Building Tools and Options

  • acr_tools_i has exposed a GetMasterSpellId() function, which may be used to acquire the source spell of one which was cast from a subradial (for instance, one might use this to tell that Protection from Evil came from Protection from Alignment).
  • The ACR has initialized a system which allows the tracking of effects and adjustments to characters through a PC Skin item. It is currently a fairly-weak system, but it lays the groundwork for future enhancements, correcting synergy bonus calculations, and providing skill foci for ALFA's custom skills.
  • acr_roll_i now contains ACR_Roll, which will roll arbitrary dice and return the result.
  • Feather Fall is available as an item property.
  • acr_hazards_i includes a series of functions which can handle movement and damage related to falling, as well as a series of functions to handle balance (obviously cooperating with the falling portion)
  • acr_environment_i shows the early implementations of functionality to track a region's temperature.
  • Our sample CLRScript project now has a workable sample constructor.
  • Area Transitions which are not two-way linked intentionally (e.g. one trigger, one door, two waypoints) may now have ACR_SAT_NO_WARN set as a local int to 1 to suppress the warning when using them.
  • ACR_GetArmorRulesType should be used instead of NWN2's GetArmorRulesType-- it is available in acr_tools_i
  • There are new KEMO chairs.
  • fx_icebody.sef is available from the core resources.
  • There are now appearance types for differently-sized dragons and lions (of note to builders that the appearance -type-, not its scale, determines the mechanical effects of size. Making a gargantuan creature 1/10th its size won't help its attack bonus or armor class, or make it appropriately vulnerable to tripping, without changing the appearance type).
  • zSpawn's random colors are once again random.
  • Logs will no longer present XP gain when there was none given.
  • Copies of the appearances for playable races with mechanical size set to tiny, small, medium, large, and huge are now available, labeled with (Size) after the names in the toolset. These are not yet attached to any other systems (such as enlarge or reduce person), but may be used for specific niche uses (e.g. fey, giants) now. These appearances do not change the scale of the creature, and they will still need to be manually set to look the size that they are.

New Features

  • #showstate now includes address information on servers.
  • ACR_CreatureBehavior has reached experimental state. Proficient scripters and builders may attempt to fenagle functional creatures out of them, but they remain officially unsupported.
     

ALFA Release Notes v1.87

Change Log

As a note to builders: there is a new release of NWScriptCompiler. Builders should pick it up for use in their building.

As a note to players of Warlocks: there are many changes to invocations in this update. However, this list should be taken as mostly-complete, and Warlock players can expect their class' mechanics to be much more stable going forward. However, the class is not in a high-enough-quality state to allow new characters to take the class, as some portions of its core mechanics remain fundamentally flawed and nearly unfixable.

General Fixes

  • The ACR will no longer allow characters with trailing spaces on their names to be created. 
  • The templates provided with automated crafting now distinguish between arcane and divine
  • Crafting prototypes should no longer appear in duplicate in the craft store.
  • The DMFI renaming tool allows 48 character strings, instead of 32
  • Svirfneblin should have less mysterious trouble swimming
  • Another instance of "Rick" claiming to be a kind of clicking has been removed from the load screens.
  • The "phat lewt" random loot system will now break the weak and fragile items, instead of the heavy and sturdy ones, when bashed.
  • Kuo Toa are closer to their canonical size (about 5' tall)
  • Putting containers in pChests should no longer result in duplicate items.
  • pChests are now less vulnerable to "sticking" open.
  • Automatically-closing doors now look for PCs on both sides of the area transition to see if they're ready to close.
  • NPCs are less prone to dropping excessively-valuable items when slain.
  • A missing music file imported from Icewind Dale is corrected.
  • Stores which are opened with the default NWN2 scripts no longer exibit any of the appraise-related misbehaviors.
  • Killing-related ACR quests will more frequently credit quest advancement if a party member kills the quest creature.
  • Adjusting the appearance of items no longer logs the adjustments as acquiring the item.
  • Changing appearance to a default player appearance no longer sets movement rate to "Slow." However, this does not prevent movement from being broken when changing appearance away from a standard character model-- only between them.
  • If a player logs in with a character with non-default movement, the ACR will automatically correct the movement. However, nwn2server will not recalculate the actual walk speed until the login following. A message explaining as much will be provided when this happens.
  • Weapons will no longer have -5 damage permanently stick on them after disabling subdual damage mode, and previously-bugged weapons can be corrected by equipping them and toggling subdual mode on and off.
  • Subdual Damage turns itself off when a player dies, and bugs of a rapid infinite loop of nonlethal damage fists being created and stripped no longer happen.
  • The subdual damage item property no longer changes the price of the item it's applied to.
  • Precise Strike and Insightful Strike now help subdual damage.
  • Favored enemy bonuses now apply in subdual combat
  • Bardic Inspirations are now treated more-consistently as songs, and now use a daily use of bardic music to activate and are mutually-exclusive with stealth.
  • Young dragons now occupy space and provide a selection GUI more appropriate to their actual size.
  • The ACR Spawn system now works with instanced areas.
  • Instanced areas assume that they need to clean themselves up after a minute of inactivity if no cooldown is specified.
  • Only player characters will count as party members when calculating XP.
  • Reports of the current date won't count the 10th day of a tenday as "day 0" it will correctly report as "day 10."
  • Quarantined characters no longer save to the central vault.
  • Swim actually applies double ACP, as it claims.
  • Swim triggers are better at picking the creature leaving on that event, and are thus less likely to prompt unexplained swim checks on people elsewhere on the server.
  • Many skill descriptions that had invalid text in them are corrected.
  • Darkvision may now be used successfully as an item property.
  • Combat Expertise and Improved Combat Expertise have taken many changes:
    • The armor class bonus provided by (Improved) Combat Expertise may no longer exceed the user's base attack bonus.
    • (Improved) Combat Expertise now provides Dodge AC, instead of Untyped, and thus offers no benefit when flat-footed.
    • (Improved) Combat Expertise is now disabled when casting spells or using spell-casting items.
    • (Improved) Combat Expertise now has a server-side-enforced cooldown of 6 seconds.
    • These changes should cover our standing enforcement issues with Combat Expertise and Improved Combat Expertise. Old orders about how the feats may be used and the penalties for their misuse are thus rendered null.
  • VFX provided by PC tools are now purged during casting of Wildshape, and associated crashes should no longer occur.
  • Forge Ring, Craft Rod, Craft Staff, and Craft Construct have their advertized caster level prerequisites.
  • There is no experience point reward for fighting a creature whose CR is less than your character level by more than 8
  • Wizards automatically learn the new cantrips as part of converting to the new ACR.
  • Sorcerers now gain cantrips on every odd-numbered level to a maximum of 9, instead of 6.
  • The additional availability of orisons may cause higher-level Favored Souls to acquire a couple orisons unexpectedly (there were previously 7 available, but the class was configured to allow up to 9).

Class Changes

  • Rangers now receive Endure Elements as a level 1 spell.
  • Favored Souls no longer receive Haste 3/day at level 17.
  • Though Song of Regeneration and Curse Song were banned long ago, they are removed from feat lists this release.
  • Clerics no longer get access to Control Undead
  • Cleric Domain spells are moved to align with the SRD / Forgotten Realms Campaign Setting / Player's Guide to Faerun where possible. Many of these spells are redundant compared to the typical spell list-- due to NWN2's generally-lax implementation of the domain spell slot, these spells are thus not very visible to clerics who use them.

Spell Changes

  • Word of Faith is split into Holy Word, Blasphemy, Dictum, and Word of Chaos, selecting the appropriate spell based on the caster's alignment when casting. Unlike Word of Faith, these spells are not party friendly, and they may not effect any target with more hit dice than the caster's caster level. Effects applied to targets now must satisfy a caster level requirement (HD <= CL - 10 for death; HD <= CL - 5 for severe effect; HD <= CL -1 for minor effect; HD <= CL for trivial effect). Duration for all effects is random, uneffected by caster level, and shorter for the more-minor effects, on the same pattern as the SRD implementation.
  • See Invisibility now lasts 10 minutes / caster level, instead of 1.
  • Devour Magic is now touch range and single-target only (previously targeted identical to Dispel Magic).
  • Beshadowed Blast now only applies blindness penalties once, and can be appropriately resisted by abilities like Blindsight (previously stacked direct penalties with the blindness effect, making it impossible to resist and doubling penalties on those who weren't protected).
  • The damage over time on Brimstone Blast is now dispellable, and does not stack with itself.
  • The damage over time on Vitriolic Blast is now dispellable, and does not stack with itself.
  • Dark One's Own Luck now only provides a bonus to the lowest saving throw of the caster (though it may be cast multiple times to cycle through the different saving throws), and its bonus is capped by caster level (previously +cha to all saves, no CL cap).
  • The Dead Walk now lasts 1 minute/ level (previously hour/level)
  • Chilling Tentacles no longer applies paralysis. It applies a combination of physical and cold damage, and attempts to grapple targets in the area of effect (previously all magical damage).
  • Entropic Warding's benefits against tracking no longer manifests as a bonus to stealth (previously +4 hide/ms).
  • Flee the Scene is now a short-range dimension door, operating by line of sight (previously 1 hour of haste).
  • Hellrime Blast now lasts 10 minutes, and does not stack with itself (previously 3 rounds).
  • Retributive Invisibility only stuns for 1 round on success (previously 3).
  • Tenacious Plague now creates actual swarms, which occupy space, do not move, and do not stack on top of themselves. Characters caught in a plague's swarm must make a fort save to resist nausea each round they remain; tenacious plague is not party friendly, but the swarms' placement will initially be based on the location of enemy targets (previously, it was a terribly-ineffective damage over time effect).
  • Utterdark Blast's negative levels now last one hour (not permanent).
  • Wall of Perilous Flame now does 2d6 + caster level damage when entered (previously 2d6 + charisma modifier) and 2d4 damage per round (previously 2d6 + charisma modifier)

New Spells

  • Waterbreathing (clr 3, drd 3, sorc/wiz 3, water 3)
  • Alarm (RP only)
  • Analyze Portal (RP only)
  • Animal Messenger (RP only)
  • Arcane Mark (RP only)
  • Arcane Sight (RP only)
  • Augury (RP only)
  • Calm Animals (RP only)
  • Commune with Nature (RP only)
  • Contact Other Plane (RP only)
  • Control Weather (RP only)
  • Create Food and Water (RP only)
  • Create Water (RP only)
  • Dancing Lights (RP only)
  • Delay Poison (RP only)
  • Detect Animals or Plants (RP only)
  • Detect Poison (RP only)
  • Detect Scrying (RP only)
  • Detect Snares and Pits (RP only)
  • Detect Thoughts (RP only)
  • Dimensional Anchor (RP only)
  • Discern Location (RP only)
  • Disguise Self (RP only)
  • Divination (RP only)
  • Feather Fall (RP only)
  • Force Cage (RP only)
  • Gate Seal (RP only)
  • Geas (RP only)
  • Ghost Sound (RP only)
  • Glibness (RP only)
  • Greater Scrying (RP only)
  • Greater Teleport (RP only)
  • Hide from Animals (RP only)
  • Jump (RP only)
  • Know Direction (RP only)
  • Lesser Geas (RP only)
  • Locate Creature (RP only)
  • Locate Object (RP only)
  • Longstrider (RP only)
  • Lullaby (RP only)
  • Mage Hand (RP only)
  • Magic Aura (RP only)
  • Mending (RP only)
  • Message (RP only)
  • Miracle (RP only)
  • Mislead (RP only)
  • Mount (RP only)
  • Nondetection (RP only)
  • Open/Close (RP only)
  • Pass without Trace (RP only)
  • Permanency (RP only)
  • Prestidigitation (RP only)
  • Purify Food and Drink (RP only)
  • Reincarnate (RP only)
  • Scrying (RP only)
  • Sending (RP only)
  • Speak with Animals (RP only)
  • Speak with Dead (RP only)
  • Speak with Plants (RP only)
  • Stone Tell (RP only)
  • Summon Instrument (RP only)
  • Telepathic Bond (RP only)
  • Teleport (RP only)
  • Tongues (RP only)
  • Tree Shape (RP only)
  • Tree Stride (RP only)
  • Undetectable Alignment (RP only)
  • Wall of Force (RP only)
  • Wind Wall (RP only)
  • Wish (RP only)
  • Word of Recall (RP only)
  • Zone of Truth (RP only)

New Controls and Settings

  • The ACR now includes an ACR_HEALTHMONITOR_GAMEOBJECTUPDATE_BACKOFF variable, which can be used to slow game object updates to slower than 600ms, should a server need to improve performance beyond the limits normally provided by the health monitor.

New Building Tools and Options

  • Spike Growth may now be tooled as a spell cast property
  • Shield may now be tooled as a spell cast property
  • There is an available include, acr_notifications_i, which allows builders to send a short message to a GUI off to the right of the screen, combined with a standard icon that reflects our typical depictions of warning / error / FYI / pointer. When clicked, these provide a more-verbose message box of variety that may be selected by the builder.
    • The recommended use for this is in things which are important enough to prompt player acknowledgement, but should not steal focus to do so. For example, spotting tracks as part of a static quest would be an appropriate use of this, as the server window might be too cluttered to notice the message, and if a fight is afoot, a modal form would be hazardous to the players receiving it.
  • There is now an ACR_AddObjectToSpawnPoint function available to explicity add something which was not created by the spawn system to a spawn point, so that it behaves as though it were spawned by the point (including despawning).
  • Vampire is now available as a subrace, to be used to assist in targeting vampire-specific abilities and effects.

New Features

  • DMs may now throw their voices through the typical chat interface. To do so:
    • First, select the creature who you wish to throw your voice to.
    • Enter # followed by a single-digit number 0-9 (for example, #1, #5). The NPC is then "anchored," and you will receive all the conversation it hears if you are out of range to hear it.
    • You may throw your voice to the NPC by using # followed by the number as a preface to send chat to the NPC (for example, #1 Hello world!)
    • PCs may not be anchored in this way.
  • Wizards may throw their voice to their familiars in the same way.
  • DM teams may specify other NPCs as valid to receive voice throwing from a player by specifying the local variable HENCHMAN_LEADER and giving it the value of the player's player ID (and this may be updated dynamically, if for example a player is helping characterize well-known NPCs during an event).
  • Players using a new GSID will be prompted to link their GSIDs to their forum accounts when logging in. The interface is simple, requiring just a click and a log in, and needs to be done only once per GSID.
  • Cross-server communication now allows messages to be sent to the IRC bot on behalf of a player in game.

New Models

  • Models for wings which are compatible with the various non-human-female character models are now available via the toolset.

  • Duodrones are now available as a creature appearance.

  • Hydras are now available as a creature appearance

New Loading Screen

  • Moradin now has a loading screen, which is visible to players of characters with either 10 intelligence or at least 1 rank in knowledge (religion).

Running scripts via IPC requests

Overview

Starting with ACR 1.87, servers support an IPC message type that allows a server to be directed to run a script in-game.  The run script request can come from another server, or from an external source that has database access, such as an external process or a website-driven activity.

Remotely executed script prototype

Scripts that are remotely executed follow a standard prototype:

void main(int SourceServerID, string Argument);

The SourceServerID argument specifies the server ID of the server that initiated the request. This may be zero if the request came from a source other than a server, such as website-based automation. The Argument argument supplies an optional, script-defined parameter provided by the party that created the run script request.

Note that no reliable acknowledgement semantics are provided; if acknowledgement is required, it should be implemented in the form of a reply run script IPC request initiated by the script that was executed (for which the SourceServerID may be used for routing purposes when generating a reply run script request).

Like other IPC requests, a run script request cannot be enqueued to a server that is offline (and will be discarded when the server starts up).

NWScript and C# APIs

From NWScript, a server can request that a script runs on another server with the ACR_RunScriptOnServer function, present in acr_server_ipc_i:

int ACR_RunScriptOnServer(int DestinationServerID, string ScriptName,
    string ScriptArgument);

The API requests that the destination server (whose ID is given by DestinationServerID) runs a script named "ScriptName" (without extension). The ScriptArgument value is passed to the script entrypoint according to the standard prototype.

From C#, the ALFA.ALFADatabase class provides an ACR_RunScriptOnServer API with the same prototype.  (If writing code in the ACR_ServerCommunicator module, the RunScriptOnServer method on the ACR_ServerCommunicator class can be used instead.)

In all cases, a caller must be prepared to deal with a request to run a script that is never processed (for example, the remote server could go offline).

Database record (server_ipc_events)

The server_ipc_events record for a run script request uses the following event code:

const int ACR_SERVER_IPC_EVENT_RUN_SCRIPT = 6;

The SourcePlayerID and DestinationPlayerID columns are not used for this request and must be set to zero. If the source of the request was a game server, its server ID must be listed as the SourceServerID, otherwise zero should be supplied. The destination server is listed as the DestinationServerID.

The EventText column is formatted as follows:

ScriptName:Argument

The :Argument portion may be omitted if the script takes no arguments. Note that the script name, colon delimiter, and argument must still fit within the 256 character limit of the EventText column.

Connecting to the Vault with sshfs

Links :

Sshfs installation

Public key authentification (for automatic reconnection)

Init script that will automatically mount the vault

Important configuration file that will automatically keep the vault connection alive

Installing Samba (if you need it)

Program for automatically starting VirtualBox on Windows.

 

Sshfs installation:

We first need to install sshfs

apt-get install sshfs

 

Then we need to create the local alfa user. 

Create a file with the following in it (replace XXXXX with a password for the alfa user):

cat > alfa.cred

alfa:XXXXX:1001:1001::/home/alfa:/bin/bash

Hit Ctrl-d

Then run:

newusers -r alfa.cred

 

First try to ssh to the central vault host:

ssh alfa@alandfaraway.org

Type in the alfa user password for the central vault (ask IA or TA if you don't know it).

 

Switch to user alfa (local user) :

su - alfa

Create the vault directory

mkdir vault

 

Switch back to root with a logout or ctrl-d.

 

Mount the vault (note you should do that only for testing as we have a better solution below that will automatically mount the vault when Linux starts):

sshfs alfa@alandfaraway.org:/home/alfa/vault /home/alfa/vault -o allow_other,reconnect

Type the alfa user password for the central vault.

 

Switch again to user alfa and try to create a file:

su - alfa

cd vault

cd test

touch test

ls -l test

 

If everything is okay the output of ls should look like this:

-rw-r--r-- 1 alfa alfa 0 Jun 27 21:24 test

 

Public key authentification:

In order to allow reconnecting you must allow public key ssh connections (ie allow to connect without typing the password):

 On the game server linux box as the user called alfa type in:

ssh-keygen -t dsa

(then type three times on return (ie default name for the file, no password, no password)

 

Then copy the public file over to the alandfaraway.org machine:

scp ~/.ssh/id_dsa.pub alandfaraway.org:gameserver.pub

(here replace gameserver with the acronym of your game server - e.g. whl)

 

Then connect to the alfa host:

ssh alandfaraway.org

(you'll still need to type the password here)

cat gameserver.pub >> .ssh/authorized_keys

(this will add the public key to the list of authorized keys)

exit

 

ssh alandfaraway.org

(this time you'll connect without needing to type the password).

 

In order for this to apply to the root user as well do the following:

Login as root using either:

sudo su -

or

su -

 

Create a .ssh directory if it doesn't exist:

mkdir ~/.ssh

Copy over the private key file:

cp /home/alfa/.ssh/id_dsa ~/.ssh/

And try to connect to the alfa vault:

ssh alfa@alandfaraway.org

(you should be able to connect without typing the password).

 

Init script for automatically connecting to the vault when Linux starts:

Here is a script that will automatically connect the vault when the Linux VM starts:

### BEGIN INIT INFO

# Provides: sshfs

# Required-Start:    $remote_fs $syslog $network

# Required-Stop:     $remote_fs $syslog $network

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: sshfs alfa

# Description:       Automatically mounts the alfa vault using sshfs

### END INIT INFO

 

# Author: Patrice Torguet/Hialmar <torguet@gmail.com>

 

# Do NOT "set -e"

 

# PATH should only include /usr/* if it runs after the mountnfs.sh script

PATH=/sbin:/usr/sbin:/bin:/usr/bin

DESC="Automatically mounts the alfa vault using sshfs"

NAME=sshfs

DAEMON=/usr/bin/$NAME

DAEMON_ARGS="alfa@alandfaraway.org:/home/alfa/vault /home/alfa/vault -o allow_other,reconnect,ssh_command=/usr/local/bin/alfa-sshfs-ssh"

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

 

# Exit if the package is not installed

[ -x "$DAEMON" ] || exit 0

 

# Read configuration variable file if it is present

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

 

# Load the VERBOSE setting and other rcS variables

. /lib/init/vars.sh

 

# Define LSB log_* functions.

# Depend on lsb-base (>= 3.2-14) to ensure that this file is present

# and status_of_proc is working.

. /lib/lsb/init-functions

 

#

# Function that starts the daemon/service

#

do_start()

{

   # Return

   #   0 if daemon has been started

   #   1 if daemon was already running

   #   2 if daemon could not be started

 

   date >> /var/log/sshfs.log

   echo 'trying to umount' | tee -a /var/log/sshfs.log

   umount -l /home/alfa/vault || echo "umount failed with error code $?" | tee -a /var/log/sshfs.log

   echo 'cleaning mount point' | tee -a /var/log/sshfs.log

   [ -x "/home/alfa/vault_pbs" ] || mkdir /home/alfa/vault_pbs

   rmdir /home/alfa/vault || mv /home/alfa/vault "/home/alfa/vault_pbs/vault`date +-%Y-%m-%d-%Hh%Mm%Ss`"

   mkdir /home/alfa/vault && chmod a+rwx /home/alfa/vault

   echo 'calling sshfs' | tee -a /var/log/sshfs.log

   $DAEMON $DAEMON_ARGS || return 2

   date >> /var/log/sshfs.log

   echo 'sshfs done' | tee -a /var/log/sshfs.log

 

}

 

#

# Function that stops the daemon/service

#

do_stop()

{

   # Return

   #   0 if daemon has been stopped

   #   1 if daemon was already stopped

   #   2 if daemon could not be stopped

   #   other if a failure occurred

   echo 'umount' | tee -a /var/log/sshfs.log

   umount -l /home/alfa/vault || return 1

 

}

 

case "$1" in

  start)

   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"

   do_start

   case "$?" in

      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

   esac

   ;;

  stop)

   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"

   do_stop

   case "$?" in

      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;

      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;

   esac

   ;;

  status)

       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?

       ;;

  restart|force-reload)

   #

   # If the "reload" option is implemented then remove the

   # 'force-reload' alias

   #

   log_daemon_msg "Restarting $DESC" "$NAME"

   do_stop

   case "$?" in

     0|1)

      do_start

      case "$?" in

         0) log_end_msg 0 ;;

         1) log_end_msg 1 ;; # Old process is still running

         *) log_end_msg 1 ;; # Failed to start

      esac

      ;;

     *)

        # Failed to stop

      log_end_msg 1

      ;;

   esac

   ;;

  *)

   echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2

   exit 3

   ;;

esac

 

:

You have to put it in /etc/init.d (I have named it sshfs) and chmod it (chmod a+x sshfs).

Then type in:

update-rc.d -f sshfs defaults

This will add links in the rc.d directories.

 

Automatic keep alive of the vault connection:

This is a config file for ssh that will let ssh and sshfs send keep alive messages every 15 seconds. 

This file should be called "config" and be in root's .ssh directory.

 

Host *

ServerAliveInterval 15

Host alandfaraway.info

User alfa

IdentityFile ~/.ssh/id_dsa

Host alandfaraway.org

User alfa

IdentityFile ~/.ssh/id_dsa

 

 

SSH wrapper script for secure MySQL tunnel

The SSHFS connection is also used for connecting to MySQL securely.  You must place the following contents in a file at /usr/local/bin/alfa-sshfs-ssh .  That file will be referenced by the sshfs init script.

#!/bin/bash

a=$@
shopt -s extglob
ssh -g -L 3306:127.0.0.1:3306 ${a//-oClearAllForward*([^ ])?( )}

Make the script executable after you have pasted it in:

chmod +x /usr/local/bin/alfa-sshfs-ssh

If the Linux machine is directly connected to the Internet, specify the right interface for the port forward.  Make sure to set up firewall rules for allowing port 3306 inbound, too.  This should NOT be allowed inbound from the internet, just the local LAN (or Windows gameserver instance). 

 

 

Samba install/configuration

If you need samba to access the vault continue, if you don't (Windows VM hosted on a Linux OS) you can stop here.

Samba install:

apt-get install samba

 

Modify samba configuration file so that in the authentication part (it starts with ####### Authentication #######) you have the following uncommented:

security = user

 

And in the Home directory related part (it starts with [homes] you shold have :

read only = no

 

 After this you must do:

/etc/init.d/samba restart

 

On the windows machine you should now be able to type this in a cmd.exe:

net use z \\WindowsIP\alfa

 

VirtualBox auto start for Windows:

I have also managed to start the VirtualBox Linux VM using this:

http://vboxvmservice.sourceforge.net/

 

 

Syndicate content