Quest ideas for MM games

The role-playing games (I-X) that started it all and the various spin-offs (including Dark Messiah).

Moderator: Moderators

Eksekk
Peasant
Peasant
Posts: 94
Joined: 19 Jul 2016

Quest ideas for MM games

Postby Eksekk » Jul 12 2021, 22:25

Hey, so in effort to enhance MM modding i've decided to share a few of my quest ideas. You have absolutely full freedom with these, you may use them, modify, though a credit would be nice (but not required). Most quests come with a dungeon they operate on, along with general setting for dungeon atmosphere, though I remind that everything can be changed as you wish. The suggested rewards are only example ones. If any code wizard affliated with MMMerge wants to use this, please excuse my poor attempts at writing a script for these :). Writers, please excuse my poor attempts of writing quest text. As a reminder, you can improve anything that you see fit!

I would be very much inclined if someone experienced in creating scripts with Grayface's MMExtension took a look over my code and wrote if it will work as I intended. In case my intent is not clear, I can of course clarify. If no one volunteers, I will test them myself, maybe tomorrow, maybe a couple of days later.

My comments will be in square brackets: [like this]. You need to replace them all (well, technically not all, but you don't want for players to see my comments do you? :P) to use the quest.

There's "script prerequisite": put this at the beginning of lua file with your quests:

Code: Select all

local A, B, C, D, E, F = 0, 1, 2, 3, 4, 5
local Q = vars.Quests
Also, if you wish to add your own quest idea to this topic, go ahead! write a reply and I'll include your quest along with credit in this post. If you don't know technical details of implementation, but have general idea - write that too, together we'll manage to implement your quest.

So, now onto the quests.

Quest #1
Location: Mage Tower (may also have other types of spellcasters like druids, clerics, necromancers; great versatility - may be at starting point of game by having monsters such as mages from New Sorpigal in MM6, also some exotic monsters using magic like couatls from MM8 or even elementals could be excused (after all the wizards should do something in their free time)). Basic layout idea: like a castle, but narrower corridors. Lots of spiral stairs (they seem magical :D), like these seen in MM7 School of Sorcery or Haunted Mansion. Chests and/or ground can contain preplaced scrolls, spellbooks and wands. Should contain a lot of spell traps (once you enter an area on the floor, a damaging spell makes its way to you)

Transition text: "This old tower looks very menacing. You wonder who would live in such a place."

Objective: Bring a Scroll of Infernal Temptations (message scroll) to quest NPC
Scroll's message: "The writings on this scroll are unintelligible, though the runes are carved with unparalleled precision". (lazy way to avoid writing flavor text, I know :D)

QuestNPC = "Mador Taldarin" (give him some wizardy looking picture)

Script:

Code: Select all

Quest{
	"InfernalTemptationsScroll",
	QuestItem = [item id],  -- quest item index (scroll)
	Gold = 10000,  -- reward: gold (modify as needed)
	Exp = 15000,  -- reward: experience (modify as needed)
	Awards = "Helped Mador Taldarin with his old mage conflict", [don't use this as written, add new award to awards.txt and insert id here],
	NPC = [npc id],
	RewardItem: [wand of shrapmetal item id]
}
.SetTexts{
	Topic = "Quest",
	Give = "Well well, what a fine group of adventurers stand before my eyes. I consider you good enough that you may want to hear my offer. I'm at war with a certain group of magicians from Nighon [modify affliation as needed]. It all started when I tried to summon a devil once to fulfill my wishes, and they overpowered me and stole my scroll which I used to summon him. Without the scroll, I cannot complete the spell and the devil haunts me constantly. The mages might store the scroll in their old tower in [world location]. I will reward you richly once it's done.",
	
	Done = "Wow, you found the scroll! Quick, give it to me, I cannot endure more of this vermin's babbling. Here's your reward: Wand of Shrapmetal",
	Undone = "Please, you are my only hope, continue searching for the scroll!",

	After = "Thanks for solving my unsolvable problem!",
	
	Quest = "Bring a Scroll of Infernal Temptations from Mage Tower to Mador Taldarin in [world location]"
}
Quest #2
Objective: Kill a named mage/cleric/necromancer "Randwulf the Cruel" (make him into a miniboss). To maintain difficulty he should be surrounded with many other mobs.
Define quest item: scales of power (picture can be of a scale radiating magical light). Make quest monster drop this item.
Description: "These scales radiate an otherwordly aura"
QuestNPC = "Ariel Benedictor"

Script:

Code: Select all

Quest{
	"KillMadMage",
	Gold = 6000,  -- reward: gold (modify as needed)
	Exp = 20000,  -- reward: experience (modify as needed)
	QuestItem = [scales of power item id],
	Awards = "Helped Ariel Benedictor kill her main rival", [same note as above applies]
	Done = function()
		evt.All.Add("SkillPoints", 5)
	end,
	NPC = [npc id]
}
.SetTexts{
	Topic = "Quest",
	Give = "Hey, you there! Maybe you will be able to help with my problem. I need a certain person killed. You may ask, why? My response is that he abused me while I was much less experienced than him and caused me to develop less in the realm of magic. Yes, this is vengeance, but vengeance with a good reason. That person is Randwulf the Cruel, a master mage which inhabits mages' tower in [location]. Will you do it for me? And, of course, I will need proof that you've done the deed. Back in the days, he looooved to gloat about his Scales of Power. You will probably find them on him, as he's never without them. There's also another bonus: if you manage to kill him, I will be able to use scales' power to increase Skill Points of every party member by 5.",
	
	Done = "You managed to dispatch him so quickly? You are truly an amazing group of people.",
	Undone = "Do you really feel so about my request as to not do it? Remember the benefits!",

	After = "Thank you so much! I am forever in debt of you.",
	
	Quest = "Kill Randwulf the Cruel in mages' tower in [location] and return to Ariel Benedictor in [location]"
}
Quest #3
Quest Dungeon: some sort of Mines (this quest is good for vanilla, as some sort of mines exist in every MM game (MM6: Snergle's Iron Mines, MM7: Red Dwarf Mines, MM8: Duergars' mines)
Objective: Escort Karn Stonecleaver (shoutout to MM7!; also one less NPC name to think of :D) out of the Mines to his home (npc joins the followers, go with him to his home to complete quest (unfortunately this is not applicable to unmodded MM8 because of lack of NPC followers))

Quest giver: the very NPC

Script:

Code: Select all

Quest{
	"Escort the Dwarf",
	Gold = 4000,  -- reward: gold (modify as needed)
	Exp = 10000,  -- reward: experience (modify as needed) (slightly lower rewards, as this quest will probably be completable just running, without fighting - if that's not the case, adjust accordingly)
	Awards = "Escorted Karn Stonecleaver out of the mines", [same note as above applies]
	NPC = [npc id],
	CheckDone = || Game.GetCurrentHouse == [house ID to which NPC should get escorted],
	Undone = function()
		evt.Add("NPCs", [npc id])
	end
}
.SetTexts{
	Topic = "Quest",
	Give = "What are you doing in these mines? Well, doesn't matter what, because I've got some work for you. I built a base there, so I could mine for precious ores, but now I changed my mind and feel endangered and need to be escorted to my house in [location]. I will reward you upon arrival.",
	
	Done = "Thank you for saving people in trouble!",
	Undone = "Come on, we are almost at the end of the mines, you can do it!",

	After = "Thanks! You are a real lifesaver.",
	
	Quest = "Escort Karn Stonecleaver out of the mines."
}

-- remove NPC on death
function events.DeathMap()
	if Q["Escort the Dwarf"] ~= "Done" then
		evt.MoveNPC{NPC = [npc id], HouseId = [starting house ID]}
	end
end

-- on event handler for entering target house make this modification:

evt.map[yourEventID] = function()
	if Q["Escort the Dwarf"] ~= "Done" then
		evt.MoveNPC{NPC = [npc id], HouseId = [targetHouseID]}
	end
	evt.EnterHouse{Id = [targetHouseID]}
end
Quest #4

Objective: Kill all monsters in the mines from Quest #3
Quest NPC: the same as in Quest #3, quest only shows once you've escorted him out of the mines.

Script:

Code: Select all

KillMonstersQuest{
	"ClearMines",
	{Map = "[map file name]", Monster = {[monster IDs, divided by comma]},
	NPC = [npc id],
	Exp = 15000,
	Gold = 5000,
	CanShow = || Q["Escort the Dwarf"] == "Done"
}
.SetTexts{
	Topic = "Quest",
	Give = "Well, I've got another job for you. I'm thinking on returning to the mines, just because the goods gotten there are so precious, but I'm afraid of monsters that dwell in there. Could you please kill them all for me, so I can be safe?",
	Done = "It's great that you've killed them! Here's your reward.",
	Undone = "Remember, you must kill ALL monsters in the Mines.",
	Quest = "Clear Mines and return to Karn Stonecleaver in [location]",
	Killed = "You have killed all monsters in the Mines!",  -- completion message
}
Quest #5
Location: Abandoned tavern (several interconnected big rooms, lots of desks, chairs, counter with "bartender" (some sort of monster), chests mostly in form of cabinets, as a bonus possible underground cellar with wine racks. Monsters primarily undead, skeletons, ghosts etc.

Objective: Bring aged wine from this tavern

Define quest item: aged wine ("This wine looks very old. You really want to taste it, but you know that Martis wouldn't like it.")
QuestNPC: Martis Certanon
Script:

Code: Select all

Quest{
	"FetchWineFromTavern",
	Gold = 3000,  -- reward: gold (modify as needed)
	Exp = 8000,  -- reward: experience (modify as needed)
	QuestItem = [wine item id],
	Awards = "Fetched Aged Wine for Martis Certanon", [same note as above applies]
	NPC = [npc id]
}
.SetTexts{
	Topic = "Quest",
	Give = "Could you do me a favor? There is an old haunted tavern in [location], which people say houses some of the oldest, finest wine ever. I want you to bring it to me. You will be of course rewarded.",
	
	Done = "YOU SUCCEEDED! Please, give it to me... I need it.",
	Undone = "Did the monsters in this tavern terrify you? Or are you just lazy?",

	After = "Thanks again for fulfilling my wish! I hope you will succeed in whatever you desire.",
	
	Quest = "Bring Aged Wine from old tavern in [location] to Martis Certanon in [location]"
}

Quest #6
Location: ruined temple like on Emerald Island in MM7 (partially tunnels, partially temple)
Objective: pray at altar of pain
QuestNPC: Arden Rathombe
Script:

Code: Select all

local QBitAltar = [free qbit id]
Quest{
	"PrayAtAltarOfPain",
	Gold = 4000,  -- reward: gold (modify as needed)
	Exp = 11000,  -- reward: experience (modify as needed)
	Awards = "Survived praying at altar of pain", [same note as above applies]
	NPC = [npc id],
	CheckDone = || evt.Cmp("QBits", QBitAltar)
}
.SetTexts{
	Topic = "Quest",
	Give = "Do you think you are strong? Yes? Then you should have no problems doing what I tell you. I want you all to pray at the altar of pain in ruined temple in [location]. Should you survive, you will find yourselves stronger. Now, go!",
	
	Done = "I must say I am amazed. Few manage to do this as quickly and survive.",
	Undone = "Are you afraid of pain?",

	After = "Congratulations, you have survived the almost impossible!",
	
	Quest = "Pray at altar of pain and return to Arden Rathombe in [location]"
}

-- this code is handler for clicking on altar
evt.hint[yourEventID] = "Altar"
evt.map[yourEventID] = function()
	Game.ShowStatusText("You pray")
	if evt.Cmp("QBits", QBitAltar) then return end
	evt.DamagePlayer{Player = "All", DamageType = const.Damage.Body, Damage = 50}
	evt.All.Add("BodyResistance", 40)
	evt.Set("QBits", QBitAltar)
end
Quest #7
Objective: get quest item found in dungeon to NPC.
Define quest item: Moon stone ("This stone is unexplicably smooth. Looks like someone polished it up to the point of absurdity. Perhaps someone in [location] can tell you more about it.
Put quest item into one of chests in temple from previous quest
Quest NPC: Usunaar Lufaren (elf)
Script:

Code: Select all

local MoonStoneID = [moon stone id]
Quest{
	"BringMoonStone",
	Gold = 1500,  -- reward: gold (modify as needed)
	Exp = 6000,  -- reward: experience (modify as needed)
	Awards = "Brought Moon Stone to Usunaar Lufaren", [same note as above applies]
	NPC = [npc id],
	QuestItem = MoonStoneID,
	CanShow = evt.All.Cmp("Inventory", MoonStoneID)
}
.SetTexts{
	Topic = "Moon Stone",
	Give = "Hey, that is my old moon stone! Where did you find it? Can you give it back to me?",
	
	Done = "Hey, that is my old moon stone! Where did you find it? Can you give it back to me?",

	Undone = "Did you lose my moon stone again?",

	After = "Thanks for bringing back my item!",
	
	Quest = "Give moon stone to Usunaar Lufaren in [location]."
}
Quest #8
Objective: Bring NPC flower disguised as sprite. Ideally it should be guarded by monsters, but without making it obvious that something is hidden there (if player encounters several monsters guarding a sprite in middle of otherwise empty area, it will be obvious to him)

Quest NPC: Aubron Faeralei (elf)

Define quest item: Flower of Eternity ("A very beautiful plant. You can see a glimpse of every possible colour in its petals if you focus.")

Script:

Code: Select all

local decNameFoE = [flower sprite dec name]
local eventIDFoE = [free event id]
local itemIDFoE = [flower of eternity od]
local npcIDFoE = [npc id]
Quest{
	"BringBackFlowerOfEternity",
	Gold = 3000,  -- reward: gold (modify as needed)
	Exp = 15000,  -- reward: experience (modify as needed)
	Awards = "Brought Flower of Eternity to Aubron Faeralei", [same note as above applies]
	NPC = npcIDFoE,
	QuestItem = itemIDFoE
}
.SetTexts{
	Topic = "Quest",
	Give = "Do you wanna help me? Well, if you do, then there's what you need to do. I need a certain plant, which is named Flower of Eternity. What for, do you ask? Well, it's said to have great magical power, and it would enhance my natural magic abilities tremendously. So, find this flower and bring it back to me, ok? If the legend holds true, this flower may be found in [location]. Its basic appearance is [sprite visual description]",
	
	Done = "YOU MANAGED TO DO THAT? I honestly thought this flower was lost forever, and that legend was false (but I didn't disclose it to you to not discourage you).",

	Undone = "I know it might be very hard to find the flower, but please keep looking!",

	After = "I can't thank you enough for what you've done for me.",
	
	Quest = "Bring back Flower of Eternity to Aubron Faeralei in [location]"
}

-- sprite event handler
evt.hint[eventIDFoE] = "Flower of Eternity"
evt.map[eventIDFoE] = function()
	evt.GiveItem{Id = itemIDFoE}
	evt.SetSprite{Name = decNameFoE, Visible = false}
end
Quest #9
Objective: Infuse Ring of Absorption with powers of Flame of Unending Torment (flames just a sprite/object if you want it to look better)
Location: temple/dungeon of devils (like colony Zod or NWC temple in BDJ's mod)
Define quest items: Ring of Absorption ("A simple old looking ring with a large sapphire. Doesn't look like it can absorb very much energy."), Ring of Absorption (infused) ("After infusion, the ring began to weigh considerably more. The sapphire periodically sparkles with energy.")
Quest NPC: Wraog (orc)
Script:

Code: Select all

local eventIDRoA = [free event id]
local itemIDRoA = [ring of absorption id]
local itemIDRoAInfused = [infused ring of absorption id]
local npcIDRoA = [npc id]
Quest{
	"InfuseRingOfAbsorption",
	Gold = 20000,  -- reward: gold (modify as needed)
	Exp = 50000,  -- reward: experience (modify as needed)
	Awards = "Infused Ring of Absorption for Wraog", [same note as above applies]
	NPC = npcIDRoA,
	QuestItem = itemIDRoAInfused
}
.SetTexts{
	Topic = "Quest",
	Give = "You really want to do an old orc a favor? Very well then. I need much more magical power to further my studies in magic, and just so happens there is a devil temple in [location], which is said to house immense amounts of energy in its flames. Take this ring, it's almost endless container of energy. Once it's full, return to me for your reward.",
	
	Done = "I honestly thought you're gonna perish there. But you succeeded. The best possible outcome. Now I cannot say that they do not happen.",

	Undone = "If you cannot tackle the creatures at this time, maybe try getting stronger?",

	After = "Thanks again for making my studies in magic possible!",
	
	Quest = "Infuse Ring of Absorption and bring it to Wraog in [location]."
}

-- flames event handler
evt.hint[eventIDRoA] = "Flames of Unending Torment"
evt.map[eventIDRoA] = function()
	if not evt.Cmp("Inventory", itemIDRoA) then return end
	evt.Sub("Inventory", itemIDRoA)
	evt.Add("Inventory", itemIDRoAInfused)
end
Quest #10
This one is for MMMerge. Quest given presumably by Verdant.

Define quest items: shards of time (about 6-9)

Place all shards in chests across all 3 continents, prefereably in locations which have least amount of quests associated with them.

Script is provided only for completeness, as I'm sure Merge wizards can come up with something even better :)
Script:

Code: Select all

Quest{
	"GatherShardsOfTime",
	Gold = 10000,  -- reward: gold (modify as needed)
	Exp = 90000,  -- reward: experience (modify as needed)
	Awards = "Gathered Shards of Time for Verdant", [same note as in first quest applies]
	NPC = [verdant npc id],
	QuestItem = {[shard of time item ids separated by ", "]},
	CanShow = [condition to show quest]
}
.SetTexts{
	Topic = "Quest",
	Give = "What? You want another task already? Well, then you'll have it. Some time ago one of our magic devices we use to time travel, uhm, blew up. That caused us mass grief. Recently we're been able to locate where the parts have gone, and just so happens it was three continents you're destined to save. So, if you have some extra time (pun not intended), you will do that, won't you?",
	
	Done = "And as it turns out, you're indeed the heroes I wanted for so long. Even more, besides usual everyday tasks like saving the world, you had enough kindness to help us out. I can't thank you enough.",

	Undone = "I know searching for the shards might be disheartening, but please look for them! It will help us immensely.",

	After = "Thanks again for scavenging entire continents for us!",
	
	Quest = "Gather [number] Shards of Time and bring them to Verdant."
}
Last edited by Eksekk on Jul 18 2021, 19:00, edited 6 times in total.

Eksekk
Peasant
Peasant
Posts: 94
Joined: 19 Jul 2016

Re: Quest ideas for MM games

Postby Eksekk » Jul 14 2021, 18:23

Added three new quests.

Eksekk
Peasant
Peasant
Posts: 94
Joined: 19 Jul 2016

Re: Quest ideas for MM games

Postby Eksekk » Jul 16 2021, 20:11

Added two new quests. Also, for anyone who wants to help, but has hard time thinking of new quests, I prepared several main quest types I have thought of which exist in MM games:
  • fetch item from dungeon
  • kill monster
  • kill all monsters in a given location
  • escort npc
  • interact with an object in dungeon
  • find object in dungeon and search npc which will complete quest (basically first quest type, but without receiving quest beforehand)
  • gather all objects from a set scattered in many places

Eksekk
Peasant
Peasant
Posts: 94
Joined: 19 Jul 2016

Re: Quest ideas for MM games

Postby Eksekk » Jul 18 2021, 18:58

Added two new quests.

AndrewBased
Leprechaun
Leprechaun
Posts: 6
Joined: 20 Dec 2020

Re: Quest ideas for MM games

Postby AndrewBased » Sep 25 2021, 15:25

Dude i love your effort, i wish i could build up a mod (i have an idea for it) but i'm the newbiest


Return to “Might and Magic”

Who is online

Users browsing this forum: No registered users and 26 guests