Ultima VII Spell project (Updated 15th Jan 2004) - v5.1
Click here to download
Summary:
The Ultima VII spells & spellbook
Description:
Spells from Ultima VII - there's too many to keep the descriptions of them all updated
Installation:
Open Initializer.cs
After:
[code:1] Register( 209, typeof( Chivalry.SacredJourneySpell ) );
}[/code:1]
Add:
[code:1]
// Cardinal
Register( 340, typeof( Linear.FireworksSpell ) );
Register( 341, typeof( Linear.GlimmerSpell ) );
Register( 342, typeof( Linear.AwakenSpell ) );
Register( 343, typeof( Linear.ThunderSpell ) );
// Register( 344, typeof( Linear.WeatherSpell ) );
// Register( 345, typeof( Linear.IgniteSpell ) );
// Register( 346, typeof( Linear.DouseSpell ) );
// Register( 347, typeof( Linear.HelpSpell ) );
Register( 348, typeof( First.LocateSpell ) );
Register( 349, typeof( First.AwakenAllSpell ) );
Register( 350, typeof( First.DetectTrapSpell ) );
//Register( 351, typeof( First.GreatDouseAllSpell ) );
//Register( 352, typeof( First.GreatIgniteSpell ) );
Register( 353, typeof( Second.EnchantSpell ) );
Register( 354, typeof( Second.FalseCoinSpell ) );
Register( 355, typeof( Second.GreatLightSpell ) );
Register( 356, typeof( Second.DestroyTrapSpell ) );
Register( 357, typeof( Third.SleepSpell ) );
Register( 358, typeof( Third.SwarmSpell ) );
Register( 359, typeof( Third.PeerSpell ) );
Register( 360, typeof( Fourth.SeanceSpell ) );
Register( 361, typeof( Fifth.CharmSpell ) );
Register( 362, typeof( Fifth.DanceSpell ) );
Register( 363, typeof( Fifth.MassSleepSpell ) );
Register( 364, typeof( Sixth.CloneSpell ) );
//Register( 365, typeof( Sixth.CauseFearSpell ) );
Register( 366, typeof( Sixth.FireRingSpell ) );
//Register( 367, typeof( Sixth.MagicStormSpell ) );
Register( 368, typeof( Sixth.TremorSpell ) );
Register( 369, typeof( Sixth.SleepFieldSpell ) );
Register( 370, typeof( Seventh.MassMightSpell ) );
//Register( 371, typeof( Seventh.EnergyMistSpell ) );
Register( 372, typeof( Seventh.MassCharmSpell ) );
Register( 373, typeof( Eighth.InvisibilityAllSpell ) );
Register( 374, typeof( Eighth.DeathVortexSpell ) );
Register( 380, typeof( Eighth.MassDeathSpell ) );
//Register( 381, typeof( Eighth.TimeStopSpell ) );
Register( 382, typeof( Eighth.ArmageddonSpell ) );[/code:1]
Place spell files in your custom folder.
NOTES:
Linear:
Linear spells no longer require any modifications to Spell.cs or SpellCircle.cs. You can go back to using the Distro version of these two scripts.
The Eighth Circle spells registered 380, 381, 382
Under no circumstances should these be common on a shard - Armageddon kills all non-blessed mobiles in the world - caster included. Time Stop will paralyse ALL mobiles in the world except the caster, blessed and unblessed. it will also squeltch the caster for the duration. Mass Death is a smaller version of Armageddon -all mobiles on screen except caster.
Detect Trap Because of the way the client works, you will not be able to see traps on the same screen that you're on when you cast the spell. You have to go a way away and come back. If anyone knows a way to make the client refresh so this isn't an issue, I'd love to know.
UPDATE: 15/1/2004: Exploit fix for Peer - no more taming/spellcasting for eyeballs!
UPDATE: 7/1/2004: Added Mass Charm and Tremor. Fixed bug with Charm that refused to let you charm any minus-skill tames.
UPDATE: 2/1/2004, 8:00pm GMT: Improved both Detect and Destroy (graphics and special message to placer of trap when it's destroyed).
Fixed typo in traps
Updated traps so that the PLACER of the trap does the damage - Minefields can now turn the palcer red!
*grins*
Updated the code to add to PlayerMobile.
Traps (should) no longer hurt players in the same guild. Likewise, with the code below, guilded players should be able to see them.
UPDATE: 2/1/2004 - Added Detect Trap and Destroy Trap. These use the (included) modified HouseTraps code. If you are using Wyatts, this includes the fix to stop the traps vanishing the moment they're placed. If you're using Flasheh's originals, these allow traps to be placed in the wild. The changes to Playermobile, below, are also necessary.
UPDATE: 23/11/2003 - Changed scrolls slightly. Added Mass Death and Fire Ring.
UPDATE: 05/11/2003 - Downgraded spellbook gump to work with 3d client.
Updated Charm - Charmed animals can now be released with it.
Added Peer and Seance.
NECESSARY CORE CHANGES:
Spellbook.cs
Delete your existing one and replace with this one. It contains support for Ancient and Druid spellbooks.
PlayerMobile.cs
Replace the CanSee(Item item) method with this:
[code:1] public override bool CanSee( Item item )
{
if ( m_DesignContext != null && m_DesignContext.Foundation.IsHiddenToCustomizer( item ) )
return false;
if ( item is BaseHouseTrap )
{
BaseHouseTrap trap = item as BaseHouseTrap;
if(trap.Detected)
return true;
else if (Spells.First.DetectTrapSpell.UnderEffect( this ))
return true;
else if(trap.Placer!=null)
{
if(trap.Placer==this||this.GuildFealty==trap.Placer.GuildFealty||Spells.First.DetectTrapSpell.UnderEffect( this ))
return true;
}
else if ( this != trap.Placer && this.AccessLevel == AccessLevel.Player )
return false;
}
return base.CanSee( item );
}[/code:1]
Click here to download
Summary:
The Ultima VII spells & spellbook
Description:
Spells from Ultima VII - there's too many to keep the descriptions of them all updated
Installation:
Open Initializer.cs
After:
[code:1] Register( 209, typeof( Chivalry.SacredJourneySpell ) );
}[/code:1]
Add:
[code:1]
// Cardinal
Register( 340, typeof( Linear.FireworksSpell ) );
Register( 341, typeof( Linear.GlimmerSpell ) );
Register( 342, typeof( Linear.AwakenSpell ) );
Register( 343, typeof( Linear.ThunderSpell ) );
// Register( 344, typeof( Linear.WeatherSpell ) );
// Register( 345, typeof( Linear.IgniteSpell ) );
// Register( 346, typeof( Linear.DouseSpell ) );
// Register( 347, typeof( Linear.HelpSpell ) );
Register( 348, typeof( First.LocateSpell ) );
Register( 349, typeof( First.AwakenAllSpell ) );
Register( 350, typeof( First.DetectTrapSpell ) );
//Register( 351, typeof( First.GreatDouseAllSpell ) );
//Register( 352, typeof( First.GreatIgniteSpell ) );
Register( 353, typeof( Second.EnchantSpell ) );
Register( 354, typeof( Second.FalseCoinSpell ) );
Register( 355, typeof( Second.GreatLightSpell ) );
Register( 356, typeof( Second.DestroyTrapSpell ) );
Register( 357, typeof( Third.SleepSpell ) );
Register( 358, typeof( Third.SwarmSpell ) );
Register( 359, typeof( Third.PeerSpell ) );
Register( 360, typeof( Fourth.SeanceSpell ) );
Register( 361, typeof( Fifth.CharmSpell ) );
Register( 362, typeof( Fifth.DanceSpell ) );
Register( 363, typeof( Fifth.MassSleepSpell ) );
Register( 364, typeof( Sixth.CloneSpell ) );
//Register( 365, typeof( Sixth.CauseFearSpell ) );
Register( 366, typeof( Sixth.FireRingSpell ) );
//Register( 367, typeof( Sixth.MagicStormSpell ) );
Register( 368, typeof( Sixth.TremorSpell ) );
Register( 369, typeof( Sixth.SleepFieldSpell ) );
Register( 370, typeof( Seventh.MassMightSpell ) );
//Register( 371, typeof( Seventh.EnergyMistSpell ) );
Register( 372, typeof( Seventh.MassCharmSpell ) );
Register( 373, typeof( Eighth.InvisibilityAllSpell ) );
Register( 374, typeof( Eighth.DeathVortexSpell ) );
Register( 380, typeof( Eighth.MassDeathSpell ) );
//Register( 381, typeof( Eighth.TimeStopSpell ) );
Register( 382, typeof( Eighth.ArmageddonSpell ) );[/code:1]
Place spell files in your custom folder.
NOTES:
Linear:
Linear spells no longer require any modifications to Spell.cs or SpellCircle.cs. You can go back to using the Distro version of these two scripts.
The Eighth Circle spells registered 380, 381, 382
Under no circumstances should these be common on a shard - Armageddon kills all non-blessed mobiles in the world - caster included. Time Stop will paralyse ALL mobiles in the world except the caster, blessed and unblessed. it will also squeltch the caster for the duration. Mass Death is a smaller version of Armageddon -all mobiles on screen except caster.
Detect Trap Because of the way the client works, you will not be able to see traps on the same screen that you're on when you cast the spell. You have to go a way away and come back. If anyone knows a way to make the client refresh so this isn't an issue, I'd love to know.
UPDATE: 15/1/2004: Exploit fix for Peer - no more taming/spellcasting for eyeballs!
UPDATE: 7/1/2004: Added Mass Charm and Tremor. Fixed bug with Charm that refused to let you charm any minus-skill tames.
UPDATE: 2/1/2004, 8:00pm GMT: Improved both Detect and Destroy (graphics and special message to placer of trap when it's destroyed).
Fixed typo in traps
Updated traps so that the PLACER of the trap does the damage - Minefields can now turn the palcer red!
*grins*
Updated the code to add to PlayerMobile.
Traps (should) no longer hurt players in the same guild. Likewise, with the code below, guilded players should be able to see them.
UPDATE: 2/1/2004 - Added Detect Trap and Destroy Trap. These use the (included) modified HouseTraps code. If you are using Wyatts, this includes the fix to stop the traps vanishing the moment they're placed. If you're using Flasheh's originals, these allow traps to be placed in the wild. The changes to Playermobile, below, are also necessary.
UPDATE: 23/11/2003 - Changed scrolls slightly. Added Mass Death and Fire Ring.
UPDATE: 05/11/2003 - Downgraded spellbook gump to work with 3d client.
Updated Charm - Charmed animals can now be released with it.
Added Peer and Seance.
NECESSARY CORE CHANGES:
Spellbook.cs
Delete your existing one and replace with this one. It contains support for Ancient and Druid spellbooks.
PlayerMobile.cs
Replace the CanSee(Item item) method with this:
[code:1] public override bool CanSee( Item item )
{
if ( m_DesignContext != null && m_DesignContext.Foundation.IsHiddenToCustomizer( item ) )
return false;
if ( item is BaseHouseTrap )
{
BaseHouseTrap trap = item as BaseHouseTrap;
if(trap.Detected)
return true;
else if (Spells.First.DetectTrapSpell.UnderEffect( this ))
return true;
else if(trap.Placer!=null)
{
if(trap.Placer==this||this.GuildFealty==trap.Placer.GuildFealty||Spells.First.DetectTrapSpell.UnderEffect( this ))
return true;
}
else if ( this != trap.Placer && this.AccessLevel == AccessLevel.Player )
return false;
}
return base.CanSee( item );
}[/code:1]