not bad idea, yet it seems to me the tag-checking approach much better
void main()
{
int nSpell = GetSpellId();
object oItem = GetSpellCastItem();
string sTag = GetTag(oItem);
if(sTag == "x2_it_acidbomb")
{
DoGrenadeBomb(6,10,1, VFX_IMP_ACID_L, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ACID,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_PER_FOGACID), GetSpellTargetLocation(), RoundsToSeconds(5));
}
else if(sTag == "x2_it_firebomb")
{
DoGrenadeBomb(6,10,1, VFX_IMP_FLAME_M, VFX_FNF_FIREBALL,DAMAGE_TYPE_FIRE,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_PER_FOGFIRE), GetSpellTargetLocation(), RoundsToSeconds(5));
}
else if(sTag == "sh_firebomb001")
{
DoGrenadeBomb(4,1,1,VFX_IMP_FLAME_S,VFX_FNF_FIREBALL,DAMAGE_TYPE_FIRE,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_firebomb002")
{
DoGrenadeBomb(6,1,1,VFX_IMP_FLAME_S,VFX_FNF_FIREBALL,DAMAGE_TYPE_FIRE,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_firebomb003")
{
DoGrenadeBomb(8,1,1,VFX_IMP_FLAME_M,VFX_FNF_FIREBALL,DAMAGE_TYPE_FIRE,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_firebomb004")
{
DoGrenadeBomb(10,1,1,VFX_IMP_FLAME_M,VFX_FNF_FIREBALL,DAMAGE_TYPE_FIRE,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_acidbomb001")
{
DoGrenadeBomb(4,1,1, VFX_IMP_ACID_S, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ACID,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_acidbomb002")
{
DoGrenadeBomb(6,1,1, VFX_IMP_ACID_S, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ACID,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_acidbomb003")
{
DoGrenadeBomb(8,1,1, VFX_IMP_ACID_L, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ACID,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_acidbomb004")
{
DoGrenadeBomb(10,1,1, VFX_IMP_ACID_L, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ACID,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_elebomb001")
{
DoGrenadeBomb(4,1,1,VFX_IMP_LIGHTNING_S, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ELECTRICAL,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_elebomb002")
{
DoGrenadeBomb(6,1,1,VFX_IMP_LIGHTNING_S, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ELECTRICAL,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_elebomb003")
{
DoGrenadeBomb(8,1,1, VFX_IMP_LIGHTNING_M, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ELECTRICAL,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_elebomb004")
{
DoGrenadeBomb(10,1,1,VFX_IMP_LIGHTNING_M, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ELECTRICAL,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_coldbomb001")
{
DoGrenadeBomb(4,1,1,VFX_IMP_FROST_S, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_COLD,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_coldbomb002")
{
DoGrenadeBomb(6,1,1,VFX_IMP_FROST_S, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_COLD,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_coldbomb003")
{
DoGrenadeBomb(8,1,1,VFX_IMP_FROST_L, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_COLD,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_coldbomb004")
{
DoGrenadeBomb(10,1,1,VFX_IMP_FROST_L, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_COLD,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_sonicbomb001")
{
DoGrenadeBomb(4,1,1,VFX_IMP_SONIC, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_SONIC,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_sonicbomb002")
{
DoGrenadeBomb(6,1,1,VFX_IMP_SONIC, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_SONIC,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_sonicbomb003")
{
DoGrenadeBomb(8,1,1,VFX_IMP_SONIC, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_SONIC,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_sonicbomb004")
{
DoGrenadeBomb(10,1,1,VFX_IMP_SONIC, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_SONIC,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
else if(sTag == "sh_uniq_firebomb")
{
DoGrenadeBomb(4,1,d6(),VFX_IMP_FLAME_S,VFX_FNF_FIREBALL,DAMAGE_TYPE_FIRE,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
this way you save many resources, while there would be only minor adjustions in the code for each grenade. Also its easier to understand and implement.