Regroup 2.0

Started by Cruzel, October 10, 2019, 01:52:57 PM

Previous topic - Next topic

Cruzel

Because regroup right now is... beyond useless for anything other than helping someone climb a cliff... I  reworked it.   DM's are free to play with the timing/VFX, but what this essentially does is cast a spell that will take just under 16 seconds to complete.

A massive, circular VFX will appear at the PC's chosen teleport location, and  nearby PCs will be able to step inside.  If they are non-hostile to the caster and remain stationary inside the circle... They are teleported to the caster's location after the spell's duration completes.

This allows you to bring allies from afar, from pre-set locations. Basically how teleport works, but in reverse.

[hide]

// Stage 1 : Creates AOE VFX, informing PC's of the teleporting
// Inform PCs that the teleport area is around them and they should move if they don't want to be zapped.
// If hostile to the caster, send a message saying they are aware of the telport but won't be grabbed
//
// Stage 2 : Similar warning, but play VFX indicating they're about to poof:
// Stage 3 : Poof the people, final VFX. LIGHT SHOW!
void PrepTarget(location lTarget, object oCaster, int nStage)
{
object oPC = GetFirstObjectInShape(SHAPE_SPHERE, 4.1, lTarget, FALSE);
effect ePrep = EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE);
effect ePrep2 = EffectVisualEffect(VFX_IMP_MAGIC_PROTECTION);
effect ePoof = EffectVisualEffect(VFX_IMP_UNSUMMON);

  while (GetIsObjectValid(oPC))
     {

        if (GetIsPC(oPC) == TRUE)
          {
            if (GetIsReactionTypeHostile(oCaster, oPC)== FALSE)
              {
                if (nStage == 1)
                 {
                 FloatingTextStringOnCreature("You feel a sense of nausea as conjurative energies flood the area around you... You sense something is trying to pull you to another place, and remaining still will allow them to do so!", oPC, FALSE);
                 }
                else if (nStage == 2)
                 {
                  FloatingTextStringOnCreature("Nausea washes over you growing increasingly intense as the conjurative energies do their work... you sense you will soon be somewhere else, unless you move!", oPC, FALSE);
                  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePrep, oPC, 7.0);
                  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePrep2, oPC);
                  SetLocalLocation(oPC, "lPreRegroup", GetLocation(oPC));
                  DelayCommand(12.0, DeleteLocalLocation(oPC, "lPreRegoup")); //cleanup
                 }
                else if (nStage == 3)
                 {
                    // Check to see if they've moved since stage 2. This will cancel the teleport.
                   if  (GetLocation(oPC) == GetLocalLocation(oPC, "lPreRegroup"))
                   {
                    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, ePoof, GetLocation(oPC));
                    FloatingTextStringOnCreature("Nausea overwhelms you as you are conjured somewhere distant...", oPC, FALSE);
                    JumpToLocation(GetLocation(oCaster));
                   }
                   else if (GetLocation(oPC) != GetLocalLocation(oPC, "lPreRegroup") ) { FloatingTextStringOnCreature("The nausea subsides as your movement has disrupted the spell...", oPC, FALSE); }

                 }
              }

            else
              {
                // No other messaging needed. They just straight up resist if hostile.
                FloatingTextStringOnCreature("You feel a sense of nausea as conjurative energies flood the area... but make a conscious choice to resist the summoner's pull...", oPC, FALSE);

              }

          }
           oPC = GetNextObjectInShape( SHAPE_SPHERE, 4.1, lTarget, FALSE);
     }

}




void main()
{
object oPC = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
location lTarget = GetSpellTargetLocation();  // Replace this with TELEPORT CONFIGURED LOCATION VARIABLE!!!


effect eVis1 = EffectVisualEffect(VFX_FNF_TIME_STOP);
effect eVis2 = EffectVisualEffect(VFX_FNF_IMPLOSION);

/*  COMPARE REGIONS, make sure lTarget is within same region! Also check for warded/teleport blocking!
   if (Region != lTargetRegion) || (region = warded)
     {
      SendMessageToPC(oPC, "The location you attempt to reach is beyond your abilities... nothing happens.");
      return;
     }
*/


/*Lock the caster into a "casting" animation for the duration here. Throw in a concentration script similar to teleport? Not going to re-invent the wheel here.
SetCommandable(FALSE)
Playanimation, etc.
CheckConcentration over duration
SetCommandable(True)
*/

ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis1, lTarget);

PrepTarget(lTarget, oPC, 1);
DelayCommand(4.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis1, lTarget));
DelayCommand(6.0, PrepTarget(lTarget, oPC, 2));  // give warning, grab location to see if they've moved...
DelayCommand(8.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis1, lTarget));
DelayCommand(12.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis1, lTarget));
DelayCommand(12.0, PrepTarget(lTarget, oPC, 2)); // second stage2, just to give people more of a window/confirm movement
DelayCommand(15.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis2, lTarget));
DelayCommand(15.8, PrepTarget(lTarget, oPC, 3));  // port the targets
}

[/hide]

Howlando

Although cool at first though, I'm just not sure something like this would be desirable.

I think a better fix for Regroup would be to somehow let it be used to bring allied PCs to you (if in sight distance), i.e. rescuing someone out of a group of mobs.

Stranger

I most commonly use Regroup scrolls to summon allies over terrain obstacles. For example, if they are trapped inside a strange part of the map, such as a body of water, Regroup tends to circumvent the need to obtain DM assistance. It is broadly useful for teleporting allies through locked doors, reorganizing chokepoints, and (as you described) pulling friends over cliffs.

Your original idea is cool as heck and would probably be more palatable to the DMs if you made it into its own 5th level spell, "Beckon," or whatever you might like. It is effectively as powerful as Teleport, after all.

If you want to remake Regroup, I suggest that you reimagine it as a single target summoning spell that works at long range. Since a dialogue prompt would not work in combat, maybe it could check for a very specific item that is created in the mage's inventory when they cast the spell on themselves, and this "summoning stone" can then be handed off to your allies to verify their consent for your calling spells. I don't know if this is a feasible script.

LoveLess

This spell would definitely be a good one by itself, instead of Recall. It's an extremely interesting spell and it has a ton of potential by itself. This is something I would absolutely love to see in-game as it's own spell.

A possible alternate rework for Recall is allow it to target either yourself or an allied creature. If an allied creature, it is brought to you after X rounds of delay. When targeting yourself, it works as normal.

Kiaring

Just a thought after reading the really cool work by Cruzel: I agree it would be an awesome addition as a new custom spell. Very high level, since it is effectively teleport. I could see this  :o worked into cleric griomoires as a level VI spell perhaps!
Current PC: Acolyte Itziyal Neniarral