Jump to content

Grimoire - New spell package for role-playing


steelfeathers

Recommended Posts

Working on a doozy of a spell that I think you all will really enjoy.

 

It's called "Daedric Blessing". It's scroll-only, and it's meant to be cast at various Daedric shrines to get the blessing of the associated daedric lord. The results vary widely, however, based on which lord it is and whether or not you have their favor.... :wink:

 

Think shrines are only good for passive boosts? Think again.

 

 

A preview of some of the effects...

 

Nocturnal: If wearing a full set of Nightengale armor, you will pass unrecognized for 180 seconds, accumulating no bounty. Can only be used once a day.

 

Molag Bal: Gain the power Blood Harvest. For 60 seconds, each strike of your weapon drains <30> health from the target. Can only be used once a day. There might also be an additional 'blessing' based on the mood he's in and what faction you belong to....

 

Peryite: Infected with a plague that lowers health and stamina by 10 points, but makes you immune to diseases and gives you the ability to spit acid, which does 25 points of poison damage per second.

 

Hircine: Gain the ability Hunter's Reflexes. Chance to slow time while an opponent is power attacking. You might also receive an additional 'blessing' based on the phase of the moon.....

 

Sheogorath: Boost 2 random skills by 10 points, lower 1 random skill by 5 points. And get lots and lots of cheese.

 

 

 

 

 

 

EDIT: Also, if you're one of the 5 people who have downloaded the test version, please let me know what you think! Is everything working the way it should? Do some spells fail completely? With so many spells crammed in here, it's very hard for me to test everything thoroughly.

Edited by steelfeathers
Link to comment
Share on other sites

  • Replies 71
  • Created
  • Last Reply

Top Posters In This Topic

Does the Molag bal effect happen immediately? Since it might be less useful if it was activated at his shrine, since you're less likely to be near an enemy.

 

You gain the power immediately, but when you decide to use the power is up to you. (Same thing for the other 'power' blessings)

Edited by steelfeathers
Link to comment
Share on other sites

If you need some more spell ideas (you already have got a lot of them and great ones) I would love to help. I have some more "holy" spell ideas, that I posted a long time ago in the Vigilant of Stendarr mod that was in development. Maybe you have some use for em , I surely don't. http://vigilants.proboards.com/thread/16/holy-powers-ideas

 

oh the irony! I've actually made a spell called Consecration (restoration adept), but I can't get it to work right, so I had to cut it out. It's a rune spell that is supposed to do holy damage to undead and apply healing-over-time to all others, but it always makes the non-undead target hostile, even when the 'hostile' flag isn't set. Oh well...

Thanks for the suggestions, though. :)

Link to comment
Share on other sites

I'm looking to put out an updated beta version in a day or two, so stay tuned. In the meantime, here are more Daedric Blessing effects:

 

 

Malacath: Passive +10 smithing boost, and gain the power Killing Spree. When Killing Spree is triggered, your stamina is boosted by 40 points, and your attack strength grows with every enemy killed. Lasts 120 seconds.

 

Clavicus: If killed Barbas, you get +15 speech skill; buying and selling prices are 10% better. If you spared Barbas, he might have his own reward for you... :wink: (Hint: It's loyal, fierce, and looks something like this.)

 

Herma Mora: Skill books grant 2 skill levels

 

Mehrunes Dagon: Destruction spells are 15% more powerful

 

Namira: Enemies you attack (or that attack you) have a chance to become infected with a Wasting Disease, which deals 5 damage to health and stamina per second for 30 seconds, and lowers one-handed/two-handed damage by 20 points. You might also find yourself inexplicably surrounded by vermin wherever you go...

 

Azura: +50 magicka

 

Vaermina: If you have her favor, you gain the power Dream Weaver. When triggered, Dream Weaver puts everyone around you to sleep for 3 minutes, restoring 10 health and magicka to you for every person affected. Does not cause hostility. (If you don't have her favor, however, you might find yourself plagued by terrible nightmares...)

 

Sanguine: Removes stamina regen penalty from ale/wine/mead. Consuming alcohol restores more health and stamina, and applies the effect "Loose and Limber", which reduces the damage you take for 30 seconds. While affected by Loose and Limber, you speech skill is increased by 20 points with the opposite sex.

 

 

 

 

Interesting little tidbit - here's the main script for Daedric Blessing. And this is just the script to trigger the effects; some of the blessings have their own massive scripts. I just wanted to show how involved and organic this spell is going to be.

 

(Spoilers if you know how to read code)

 

 

Scriptname zDBDaedricBlessing_cast extends ActiveMagicEffect  

Quest property DA10 auto
Quest property DA01 auto
Quest property DA07 auto
Quest property DA04 auto
Quest property DA13 auto
Quest property DA05 auto
Quest property DA03 auto
Quest property DA06 auto
Quest property DA11 auto
Quest Property PlayerVampireQuest auto

Import zExtendedUtility

Location property ShrineAzura auto
Location property ShrineMehrunes auto
Location property ShrineMeridia auto
Cell property AbandonedHouse auto
Location property VolkiharCastle auto
Cell property PelagiusWing auto
Location property Arcaneum auto
Location property ShrinePeryite auto
Worldspace property BloatedMansGrotto auto
Cell property TwilightSepulcer1 auto
Cell property TwilightSepulcer2 auto
Cell property HaemarsShame02 auto
Location property GiantsGrove auto
Cell property ReachCliffCave01 auto


Actor target

Potion property cheese auto
Armor property weddingWreath auto

bool isAzura = false
bool isMehrunes = false
bool isMeridia = false
bool isMolag = false
bool isSheogorath = false
bool isMora = false
bool isPeryite = false
bool isHircine = false
bool isNocturnal = false
bool isMephala = false
bool isClavicus = false
bool isMalacath = false
bool isNamira = false

Formlist property zpDBSpells auto

Spell property zDBAzuraSpell auto
Spell property zDBMehrunesSpell auto
Spell property zDBMeridiaSpell auto
Spell property zCureDisease auto
Spell property zDBMolagPower auto
Spell property zDBMolagSpell auto
Spell property zVampireDisease auto
Spell property zVampireDiseaseNoCure auto
Spell property zDBSheogorathSpell auto
Spell property zDBMoraSpell auto
Shout property zDBPeryite_spit auto
Spell property zDBPeryiteSpell auto
Spell property BeastForm auto
Spell property zDBHircineSpell auto
Spell property zDBWerewolfTracking auto
Spell property zDBHircine_wolfTotem auto
Spell property zDBHircine_bearTotem auto
Spell Property Immunity auto
Spell Property WerewolfCureDisease auto
Spell property zDBNocturnalSpell auto
Spell property zDBNocturnalShroud auto
Spell property zDBMephalaSpell auto
Spell property zDBClavicusSpell auto
Spell property zDBMalacath_power auto
Spell property zDBMalacathSpell auto
Spell property zDBNamiraSpell auto

Spell property zStagger auto
WordofPower property Word1 auto
WordofPower property Word2 auto
WordofPower property Word3 auto

Keyword property Vampire auto

Faction property VampireFaction auto
Faction property VampirePCFaction auto
Faction property DLC1PlayerVampireLordFaction auto
Faction property DLC1VampireFaction auto
Faction property DLC1DawnguardFaction auto

Sound property evilLaugh auto
Sound property rumble auto
Sound property spurned auto

ImagespaceModifier property zImod auto

Explosion property zExplosion auto

Int curMoonPhase
Int werewolfChance
Int TotemChance
Int murders

float Old_daysPassed
float Cur_daysPassed

Globalvariable property zgBarbasBoon auto
Globalvariable property zgDBTimer auto
Globalvariable property zgSheoFirstTime auto
Globalvariable property zgWasBlessed auto

Actorbase property aDog auto


;................................................................................................................


Event OnEffectStart(Actor akTarget, Actor akCaster)
	target = akTarget

	Old_daysPassed = zgDBTimer.value
	Cur_daysPassed = GetPassedGameDays()
	
	;;Check to see if its been less than a day since last casting this spell, and if you were blessed the last time
	if ( (Cur_daysPassed - Old_daysPassed) < 1 )   &&  (zgWasBlessed.value == 1)
		debug.notification("You may only receive one blessing per day")
		dispel()
	else
		zgDBTimer.setValue(Cur_daysPassed)
		zgWasBlessed.setValue(0)  ;;You havent been blessed today
		Main()
	endif
	
EndEvent

;................................................................................................................

Function Main()

	;;Where are you casting this?
	If !(CheckCell(target.GetParentCell()) )  && !(CheckWorldSpace(target.GetWorldSpace()) )  ;;If the caster is not in one of the cells on the list....
		;;debug.notification("You are not in a cell on the list")
		CheckLocation(target.GetCurrentLocation())
	endif

	if (isAzura)
		;;check if this daedra is mad at you
		if HasFavor(1)
			RemoveSpells()
			target.addspell(zDBAzuraSpell)
		else
			debug.notification("Your prayer goes unanswered...")
		endif

	elseif (isMehrunes)
		if HasFavor(2)
			RemoveSpells()
			target.addspell(zDBMehrunesSpell)
		else
			;;play neg imod here
			spurned.play(target)
			rumble.play(target)
			zStagger.cast(target)
			target.damageAV("Health",50)
			debug.notification("Mehrunes has spurned your prayer.")
		endif

	elseif (isMeridia)
		if HasFavor(3)
			RemoveSpells()
			zCureDisease.cast(target,target)
			target.addSpell(zDBMeridiaSpell)
		else
			;;play imod
			spurned.play(target)
			rumble.play(target)
			zStagger.cast(target,target)
			target.damageAV("Health",50)
			debug.notification("Meridia has spurned your prayer")
		endif

	elseif (isMolag)
		if HasFavor(4)
			RemoveSpells()
			target.addspell(zDBMolagPower)
			if IsVampire(target) || target.hasSpell(BeastForm)
				;;do nothing else if the caster is a vampire or werewolf
			else
				if target.IsInFaction(DLC1DawnguardFaction) || (utility.randomInt(1,5) == 1)
					;;zEvilLaugh.play(target)
					zImod.apply()
					spurned.play(target)
					zStagger.cast(target,target)
					zCureDisease.cast(target,target)  ;;cure diseases to get rid of the normal vampire disease, if you have it
					target.addSpell(zVampireDiseaseNoCure)  ;;even if he likes you, give vampire disease if youre DG. Because hes a dick. 
					utility.wait(1)
					zImod.remove()
				endif
			endif
			;;add place-holder ability
			target.addSpell(zDBMolagSpell)
		else
			;; if he doesnt like you, AND youre dawnguard, damage health and give incurable vampire disease
			if target.IsInFaction(DLC1DawnguardFaction)
				;;zEvilLaugh.play(target)
				debug.notification("A member of the Dawnguard...")
				utility.wait(1)
				debug.notification("You must truly desire my blessing...")
				utility.wait(1)
				target.damageAV("Health",50)
				spurned.play(target)
				rumble.play(target)
				zStagger.cast(target,target)
				if !(IsVampire(target)) && !(target.hasSpell(BeastForm))
					zImod.apply()
					zCureDisease.cast(target,target)
					target.addSpell(zVampireDiseaseNoCure)
					utility.wait(1)
					zImod.remove()
				endif
			else
				debug.notification("Molag Bal has spurned your prayer")
				target.damageAV("Health",50)
				spurned.play(target)
				rumble.play(target)
				zStagger.cast(target,target)
			endif
		endif

	elseif (isSheogorath)
		RemoveSpells()
		target.addSpell(zDBSheogorathSpell,false)
		if (zgSheoFirstTime.value == 0)
			target.additem(weddingWreath,1,true)
			target.equipitem(weddingWreath,false,true)
			Debug.notification("Jolly good choice, mortal! You won't go wrong with my blessing....or will you?")
			zgSheoFirstTime.setValue(1) ;;no more fancy hat for you
		else
			debug.notification("Back again, eh?")
			utility.wait(0.5)
			debug.notification("Here, have some more cheese!")
			utility.wait(0.5)
			debug.notification("No fancy hat for you this time, though.")
		endif
		target.placeatme(cheese,3)
		utility.wait(0.2)
		target.placeatme(cheese,3)
		utility.wait(0.2)
		target.placeatme(cheese,3)

	elseif (isMora)
		if HasFavor(6)
			RemoveSpells()
			target.addspell(zDBMoraSpell)
		else
			debug.notification("Your prayer goes unanswered...")
			;spurned.play(target)
		
		endif

	elseif (isPeryite)
		if HasFavor(7)	
			RemoveSpells()
			game.UnlockWord(Word1)
			game.UnlockWord(Word2)
			game.UnlockWord(Word3)
			target.addShout(zDBPeryite_spit)
			debug.notification("Acid Spray shout added")
			target.addSpell(zDBPeryiteSpell)
		else
			debug.notification("Your prayer goes unanswered...")
			;spurned.play(target)
		endif

	elseif (isHircine)
		if HasFavor(8)
			RemoveSpells()
			target.addspell(zDBHircineSpell)
			
			;;Chance to make bears or wolves friendly
			TotemChance = utility.RandomInt()
			If (TotemChance <= 5)
				target.Addspell(zDBHircine_bearTotem)
			elseif (TotemChance <= 15)
				target.AddSpell(zDBHircine_wolfTotem)
			endif

			curMoonPhase = GetCurrentMoonphase() ;;whats the moon phase
			;;debug.notification(curMoonPhase)   
	
			;;chance to turn player into a werewolf if the moon is full 
			If !(target.hasSpell(BeastForm)) && !(isVampire(target))  && (curMoonPhase == 0)  
				;;debug.notification("Poof! Player is a werewolf.")
				zImod.apply()
				zStagger.cast(target,target)
				spurned.play(target)
				rumble.play(target)
  				WerewolfCureDisease.Cast(Game.GetPlayer())
   				Game.GetPlayer().AddSpell(Immunity, false)
				target.addSpell(zDBWerewolfTracking,false)
				target.addSpell(BeastForm)
				Utility.wait(1)
				zImod.remove()
			endif

		else
			debug.notification("Hircine has spurned your prayer")
			spurned.play(target)
		endif

	elseif (isNocturnal)
		if HasFavor(9)
			RemoveSpells()
			target.addSpell(zDBNocturnalShroud)
			target.addSpell(zDBNocturnalSpell)
		else
			debug.notification("Your prayer goes unanswered...")
			;spurned.play(target)
		endif

	elseif (isClavicus)
		if HasFavor(10)
			RemoveSpells()
			target.addspell(zDBClavicusSpell)
		else
			if (zgBarbasBoon.value == 0) &&  (DA03.IsObjectiveCompleted(200)) ;;you spared Barbas, and you havent gotten his gift
				debug.notification("Clavicus Vile has spurned your prayer")
				spurned.play(target)
				utility.wait(5)
				debug.notification("Don't worry.")
				utility.wait(1)
				debug.notification("Your old pal Barbas has you covered!")
				Actor NewDog = target.placeatme(aDog,1) as Actor
				NewDog.placeatme(zExplosion)
				zgBarbasBoon.setValue(1) ;;Barbas gave you a his gift
				zgWasBlessed.setValue(1)
			else
				debug.notification("Clavicus Vile has spurned your prayer")
				spurned.play(target)
			endif
		endif

	elseif (isMalacath)
		if HasFavor(11)
			RemoveSpells()
			target.addSpell(zDBMalacath_power)
			target.addSpell(zDBMalacathSpell)		
		else
			spurned.play(target)
			rumble.play(target)
			target.damageAV("Health",50)
			debug.notification("Malacath has spurned your prayer")
		endif

	elseif (isNamira)
		if HasFavor(12)
			RemoveSpells()
			target.addSpell(zDBNamiraSpell)
		else
			debug.notification("Your prayer goes unanswered...")
		endif

	elseif (isMephala)
		RemoveSpells()
		target.addSpell(zDBMephalaSpell)

	else
		debug.Notification("Failed to invoke a Daedric Lord...")
		dispel()
	endif



EndFunction


Event OnEffectFinish(Actor akTarget, Actor akCaster)


EndEvent

;-------------------------------------------------------------------------------------

Bool Function CheckCell(Cell akCell)

	If (akCell == AbandonedHouse)
		isMolag = true
		;;debug.notification("You are at Molags shrine")
		return true
	elseif (akCell == PelagiusWing)
		isSheogorath = true
		return true
	elseif (akCell == TwilightSepulcer1) || (akCell == TwilightSepulcer2)
		isNocturnal = true
		return true
	elseif (akCell == HaemarsShame02)
		isClavicus = true
		return true
	elseif (akCell == ReachcliffCave01)
		isNamira = true
		return true
	else
		return false
	endif

EndFunction

;-------------------------------------------------------------------------------------

Bool Function CheckWorldSpace(Worldspace akWS)
		if (akWS == BloatedmansGrotto)
			isHircine = true
			return true
		else
			return false
		endif
EndFunction

;-------------------------------------------------------------------------------------
Function CheckLocation(Location akLocation)
	Location curLocation = akLocation

	;;Check if your location matches a shrine location
	If curLocation == ShrineAzura
		isAzura = true
		return
	endif

	If curLocation == ShrineMehrunes
		isMehrunes = true
		return
	endif

	if curLocation == ShrineMeridia
		isMeridia = true
		return
	endif

	if curLocation == Arcaneum
		isMora = true
		return
	endif

	if curLocation == ShrinePeryite
		isPeryite = true
		return
	endif

	if curLocation == GiantsGrove
		isMalacath = true
		return
	endif

;	if curLocation == BloatedMansGrotto
;		isHircine = true
;		return
;	endif




;	if curLocation == none
;		;;debug.notification("You are nowhere...?")
;		isHircine = true  ;;;++++++++++++++++++++take this out +++++++++++++++++++++
;		return
;	endif

	if (game.QueryStat("Murders") >= 15)
		debug.notification("You are the disciple of Mephala")
		isMephala = true
	endif

EndFunction

;-------------------------------------------------------------------------------------

Bool Function HasFavor(Int akDaedra)
	if akDaedra == 1   ;;Azura
		if (DA01.IsObjectiveFailed(65))
			zgWasBlessed.setValue(1) ;;You were blessed - no more blessings for you today
			return true   ;;Have favor if Nelecar objective was failed > you sided w/ Azura
		else
			return false
		endif

	elseif akDaedra == 2 ;;Mehrunes
		if ( (DA07.GetStage()==150) || (DA07.GetStage() == 200) )
			return false   ;; no favor if quest was failed
		else
			zgWasBlessed.setValue(1)
			return true    
		endif

	elseif akDaedra == 3  ;;Meridia
		if IsVampire(target)
			return false
		else
			zgWasBlessed.setValue(1)
			return true

		endif

	elseif akDaedra == 4   ;;Molag Bal
		if (DA10.IsObjectiveFailed(60) || DA10.IsObjectiveFailed(70) || (DA10.GetStage()==550) )    ;;  failed quest
			;debug.notification("You failed Molags quest")
			return false
		else
			zgWasBlessed.setValue(1)
			return true
		endif

	elseif akDaedra == 5   ;;sheogorath
		zgWasBlessed.setValue(1)
		return true

	elseif akDaedra == 6   ;;Mora
		if (DA04.GetStage() == 100) || (DA04.GetStage() == 200)
			zgWasBlessed.setValue(1)
			return true   ;;Must have completed Transmundane quest to get favor
		else
			return false
		endif
	
	elseif akDaedra == 7   ;;Peryite
		if (DA13.IsObjectiveCompleted(75))    ;;if you completed the quest
			zgWasBlessed.setValue(1)
			return true
		else
			return false  
		endif

	elseif akDaedra == 8  ;;Hircine
		if (DA05.GetStage() == 200)  ;;completed quest
			zgWasBlessed.setValue(1)
			return true
		else
			return false   
		endif

	elseif akDaedra == 9 ;;Nocturnal
		zgWasBlessed.setValue(1)
		return true

	elseif akDaedra == 10  ;;Clavicus
		if (DA03.IsObjectiveCompleted(155))  ;;If you killed Barbas
			zgWasBlessed.setValue(1)
			return true
		else   
			return false
		endif

	elseif akDaedra == 11  ;;Malacath
		if (DA06.IsObjectiveCompleted(120))   ;;completed quest
			zgWasBlessed.setValue(1)
			return true
		else
			return false
		endif

	elseif akDaedra == 12  ;;Namira
		if !(DA11.IsObjectiveFailed(100))  ;;if you didnt turn on Eola
			zgWasBlessed.setValue(1)
			return true
		else
			return false
		endif
	
	endif
EndFunction

;-------------------------------------------------------------------------------------

;;Brute force removal of all other abilities and spells 
Function RemoveSpells()

	Int iIndex = zpDBSpells.GetSize() ; Indices are offset by 1 relative to size
			While iIndex
				iIndex -= 1
				Spell zSpell = zpDBSpells.GetAt(iIndex) As Spell 
				If target.hasSpell(zSpell)
					target.removeSpell(zSpell)
				EndIf
			EndWhile
	
	;;Remove acidspray shout if not Peryite 
	if !(isPeryite)
		target.removeShout(zDBPeryite_spit)
	endif


EndFunction

;-------------------------------------------------------------------------------------

;;Check to see if the player is a vampire
Bool Function IsVampire(Actor akTarget)
	if ( akTarget.hasKeyword(Vampire) || akTarget.IsInFaction(VampireFaction) || akTarget.IsInFaction(VampirePCFaction) \
|| akTarget.IsInFaction(DLC1PlayerVampireLordFaction) || akTarget.IsInFaction(DLC1VampireFaction) )
		return true
	else
		;;debug.notification("You are not a vampire")
		return false
	endif

EndFunction

 

 

Edited by steelfeathers
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...