Skip to content

Integrate my midnight beta with upstream master - #417

Open
yoshimo wants to merge 11 commits into
smaitch:masterfrom
yoshimo:IntegrateMyMidnightBetaWithUpstreamMaster
Open

Integrate my midnight beta with upstream master#417
yoshimo wants to merge 11 commits into
smaitch:masterfrom
yoshimo:IntegrateMyMidnightBetaWithUpstreamMaster

Conversation

@yoshimo

@yoshimo yoshimo commented Mar 30, 2026

Copy link
Copy Markdown
Contributor

This separates quests by minimum build the quest was introduced , preserves comments from both of us and combines the data.

@yoshimo
yoshimo marked this pull request as ready for review March 30, 2026 16:14
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch 3 times, most recently from 80165b7 to 30e0d36 Compare April 2, 2026 16:49
@smaitch

smaitch commented Apr 3, 2026

Copy link
Copy Markdown
Owner

Why would we want to separate the quests by the minimum build the quest was introduced? And why are you putting all the +0 on the prerequisites (you seem to want to verify them for some reason)?

@yoshimo

yoshimo commented Apr 3, 2026

Copy link
Copy Markdown
Contributor Author

Grouping by build seemed logical and makes it easier to separate them for different expansions.
Some of the requirements were assumed on the beta and need to be verified on release. The? tag didn't exist during beta. The +0 is a hack to make stuff visible. I have yet to find a way to update that in bulk and use the new feature.

@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch 9 times, most recently from 57c8b70 to 83910b1 Compare April 5, 2026 22:11
@yoshimo
yoshimo marked this pull request as draft April 5, 2026 22:12
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch 4 times, most recently from e8613c1 to 13a3111 Compare April 6, 2026 10:37
@yoshimo
yoshimo marked this pull request as ready for review April 6, 2026 10:39
@smaitch

smaitch commented Apr 7, 2026

Copy link
Copy Markdown
Owner

OK, I have been doing some researching. It turns out there should only really be a need for two quest lists. One for the MODERN quests, and one for the CLASSIC quests. At the moment, the MODERN quests would be used by Midnight and Mists of Pandaria Classic, while CLASSIC would be used by World of Warcraft Classic and Burning Crusade Anniversary.
Within each quest list we should ensure that only those quests that are actually in the game are used. We can do this by detecting the expansion and ordering the quests by expansion like you said. In this way we can bail out of processing the quests once all the ones available to the current game are found. This should allow Blizzard to progress with their versions and minimize changes needed to Grail.
I would suggest that the start of the Grail-Quests-MODERN.lua (which is just a rename of Grail-Quests-retain.lua) be:

--
-- Grail Quests
-- Written by scott@mithrandir.com

if not Grail.usesModernQuests then return end

-- We use Grail.expansion to determine when we exit the routine because
-- it tells us what expansion we are currently running in, and the quests
-- are grouped by the expansion in which they were added. If we are not
-- running in a high enough expansion we stop processing the file.

-- Quests that have been removed from the game have a negative expansion.

-- Put all the quests that have been removed from the game here.

if Grail.expansion < 0 then return end

-- Put all the Classic quests here

if Grail.expansion < 1 then return end

-- Put all the Burning Crusade quests here

if Grail.expansion < 2 then return end

-- Put all the Wrath of the Lich King quests here

if Grail.expansion < 3 then return end

-- Put all the Cataclysm quests here

if Grail.expansion < 4 then return end

-- Put all the Mists of Pandaria quests here

if Grail.expansion < 5 then return end

-- Put all the Warlords of Draenor quests here

if Grail.expansion < 6 then return end

-- Put all the Legion quests here

if Grail.expansion < 7 then return end

-- Put all the Battle for Azeroth quests here

if Grail.expansion < 8 then return end

-- Put all the Shadowlands quests here

if Grail.expansion < 9 then return end

-- Put all the Dragonflight quests here

if Grail.expansion < 10 then return end

-- Put all the The War Within quests here

if Grail.expansion < 11 then return end

-- Put all the Midnight quests here

We can still have variations of quests if we really need them by checking the release, but that might go away if we just put entries into the different expansions. The comments that were at the start of the file are moved to the end. And the dailyMaximums and weeklyMaximums would still be at the start of the file.

@yoshimo

yoshimo commented Apr 7, 2026

Copy link
Copy Markdown
Contributor Author

It was also a way to make parsing easier as groups within if-statements are limited in size.
(see the bb88ec4 workaround earlier)
Too bad that 16d7723 broke an entire weekend of fixing the merge conflict and made a new one.

In your new structure we would then introduce new lines and deprecation-tags to override outdated quest info that changed between expansion boundaries, wouldn't we?
Remember the cataclysm or BC where things where removed quite often and changed places.
Remeber 7.3 when quest conditions in suramar were changed

yoshimo added 3 commits April 10, 2026 20:37
Dalaran:
- "Archmage Karlain <Kirin Tor>" (90463) is friendly to both factions
- mark Thrall as Alliance-Friendly for the intro quest to the Legion Shaman Order Hall in Dalaran, Deepholm & Maelstrom

Suramar:
- "Thaedris Feathersong" (99065) is friendly to both factions
- "Thaedris Feathersong" (99093) is friendly to both factions
- "Experimental Withered" (115987) is friendly to both factions
- added locations for the undergrond teleporter quests to the overworld map in Suramar

HighMountain:
- Make "Mayla Highmountain <High Chieftain>" (108434) and "Bolas Skyfeather" (108434) from Thundertotem visible on the HighMountain Map as well
- add Icecrown Citadel and the Veiled Market to ZonesForLootingTreasure
- log Coordinates for earned achievement criteria.
- Harandir,Silvermoon, Eversoong, Quel'thalas, Zul'Aman quest data added
- complete the Siege of Arathihighlands Catchup quest chain
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch from 13a3111 to 62a2969 Compare April 10, 2026 19:32
@yoshimo

yoshimo commented Apr 11, 2026

Copy link
Copy Markdown
Contributor Author

Hopefully i didn't introduce errors with the second rebase
I have hidden a few quests that are unavailable on a lvl81 beginner paladin.

@smaitch

smaitch commented Apr 11, 2026

Copy link
Copy Markdown
Owner

Yes, this change basically means that if there is a change in an expansion we would just have a new line for that quest in the proper expansion. The last quest entry processed is the one that is used in game. You will note that the work has been done for race tags such that old quests that were modified to support Blood Elves, for example, have a version in the older expansion without the Blood Elf tag, and one in later expansions with the Blood Elf. This happens for all race tags (hopefully properly). And of course this can happen for A: or T: tags for NPCs that change, etc.

I have just pushed this latest massive change into the repository. This is a major change. However, I think it is stable right now, but hopefully people will report any issues they find. It should work in all the basic releases that Blizzard has currently (like I have not tried Hardcore or Season of Discovery). However, over time all things like this can be verified.

@yoshimo

yoshimo commented Apr 11, 2026

Copy link
Copy Markdown
Contributor Author

Next time merge my changes before you do the rework ;)

Midnight:
- mark quests in Zul'Aman, Silvermoon and Eversong Woods that are not available immediately as such, including possible prequests if known.
- PreyQuests need more work, they are likely at least lvl90+
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch from c9a6c90 to e8b112c Compare April 16, 2026 21:12
- drycode guard Item-Text, aka book-reads against missing events , make the various sub events more standalone.
- add temporary debug to figure out why Reading Books doesn't log completed quests
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch from e8b112c to c321aa8 Compare April 17, 2026 20:16
- update Eversong Woods & Harandar to current level of research
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch from c321aa8 to 5bbbe3a Compare April 28, 2026 19:17
- attempt to dynamically determine vignettes linked to npcs, quests and reputation
- add a /-Command to manually link vignettes to reputation and quests
- book reads should get tracked more reliably
- try to record Quests that get completed by selecting certain Gossip Options, e.g. ("Stay a while and listen")
- Employ heuristic similiar to vignettes for quest pins on the map
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch from 5bbbe3a to 3ac25b7 Compare April 28, 2026 20:18
@yoshimo

yoshimo commented Apr 28, 2026

Copy link
Copy Markdown
Contributor Author

@smaitch This is my attempt at logging more data about quests, pins, vignettes and possible triggers based on my work on QuestZoneBroker.
Maybe you can draw inspiration from and forward port this and the quest data to the modern architecture you made so we can sync back up. Might be faster than me pulling my hair out trying ;)

yoshimo added 2 commits May 9, 2026 11:47
Midnight:
Harandar:
- "Go Get Orweyna!" (90533) probably requires "Rise of the Haranir" (86898)
- "The Home of the Haranir" (90534) requires "Go Get Orweyna!" (90533)
- "Leave Your Mark" (90535) requires "The Home of the Haranir" (90534)
- "The Former Rootwarden" (91872) does not require "The Blinding Vale: Lightbloom Roots" (93651), may require "Rise of the Haranir" (86898)
- "Buffer Zone" (91873) requires "The Former Rootwarden" (91872)
- "Flare Up" (91874) requires "Natural Remedy" (91875)
- "Natural Remedy" (91875) requires "Buffer Zone" (91873)
- "Tending Hope" (91876) requires "Flare Up" (91874)
- "Light Disturbance" (92732) does not require "The Blinding Vale: Lightbloom Roots" (93651), may require "Rise of the Haranir" (86898) and may require "Fractured" (86650)
- "Light Stroll" (92736) requires "Light Disturbance" (92732)
- "O.K. Bloomer" (92739) requires "Light Carnage" (92737) and probably requires "Potatoad Tots" (92738)
- "Little Monsters" (91376) does not require "The Silence at Fungara Village" (91375), requires "Tell the People What You Have Seen" (86890), probably requires "Fractured" (86650) and probably requires "Seeds of the Rift" (86944)
- "Spawn of the Dead" (91377) does not require "The Silence at Fungara Village" (91375), requires "Tell the People What You Have Seen" (86890), probably requires "Fractured" (86650) and probably requires "Seeds of the Rift" (86944)
- "The Hunter Awaits" (86836) requires "Watch the Den" (86864)
- "The Foundation of Aln" (86851) requires "The Hunter Awaits" (86836)
- "Consequences of Our Duty" (86855) requires "The Hunter Awaits" (86836)
- "Dampening the Call" (86856) requires "The Foundation of Aln" (86851)
- "Grinding Out a Solution" (86859) requires "The Madness Roots Deep" (86858)
- "Before They Grow" (86860) requires "The Madness Roots Deep" (86858)
- "Herding Manifestations" (86861) requires "The Madness Roots Deep" (86858)
- "The Greater They Aln" (86862) requires "Grinding Out a Solution" (86859)
- "Alndust in Right Hands" (86882) requires "Can We Heal This?" (86866)
- "Tell the People What You Have Seen" (86890) requires "At the Root" (86881)
- "Quelling the Frenzy" (86897) requires "The Gift of Aln'hara" (86894)
- "My Brother's Alive!" (90824) probably requires "Tell the People What You Have Seen" (86890) , may require "Seeds of the Rift" (86944) and may require "Fractured" (86650)
- "Meeting My Mentor" (90829) requires "Only the Poisonous Parts" (90827)
- "Doing Is Becoming" (90831) requires "Meeting My Mentor" (90829)
- "The Most Important Thing" (91270) requires "We Ready Now" (91450)
- "Supplicants to the Goddess" (91346) may also require "Fractured" (86650)
- "You Are Legend" (91378) requires "Little Monsters" (91376)
- "Decayed Land" (91379) requires "Little Monsters" (91376)
- "Root Dash Delivery" (91589) requires "Harandar's Kitchen" (91588)
- "The Blinding Vale: Lightbloom Roots" (93651) probably requires "Rise of the Haranir" (86898), does not require "A Grave Concern" (93453)
- "WANTED: Toadshade's Petals" (91982) needs more research
- "The Path Will Reveal Itself" (90830) requires "Meeting My Mentor" (90829)
- "As Her Voice Goes Silent" (90832) requires "The Path Will Reveal Itself" (90830)
- "The Final Rite" (90833) requires "As Her Voice Goes Silent" (90832)
- "Memories in Stone" (91136) requires "Behind the Falls" (91088)
- "Reticent Evil" (91381) requires "Decayed Land" (91379)
- "Harandar's Kitchen" (91588) requires "Carcass Cuisine" (91587)
- "What Doesn't Kill Them" (90619) requires "A Few Fun Guys" (90617)
- "To the Ring" (90620) requires "The Most Important Thing" (91270)
- "Tiny Heroes' Journeys" (90621) requires "To the Ring" (90620)
- "Not-Yet Defeated Champions" (90622) requires "Tiny Heroes' Journeys" (90621)
- "Purloining Petals" (91065) requires "The Blooming Lattice" (91063)
- "Petal Bristles" (91085) requires "The Blooming Lattice" (91063)
- "Nipping the Buds" (91086) requires "The Blooming Lattice" (91063)
- "Behind the Falls" (91088) requires "Nipping the Buds" (91086)
- "We Ready Now" (91450) requires "What Doesn't Kill Them" (90619)
- "Mushrooming Courage" (92616) requires "Tiny Heroes' Journeys" (90621) in your questlog
- "Mushrooming Resilience" (92617) requires "Tiny Heroes' Journeys" (90621) in your questlog
- "Mushrooming Confidence" (92618) requires "Tiny Heroes' Journeys" (90621) in your questlog
- "Gathering Glowshrooms" (90601) requires "Caves of the Cleft" (90963)
- "Gomphusta" (90602) requires "Caves of the Cleft" (90963)
- "Caves of the Cleft" (90963) requires "Rutaani Rescue" (90540)
- "Back on Duty?" (91361) requires "Weeding Out the Unwanted" (91360)
- "De-nest-stration" (91551) requires "A Game of Silence and Shadow" (91550)
- "Feathered Fury" (91552) requires "A Game of Silence and Shadow" (91550)
- "Haranir Never Say Die!" (91553) requires "De-nest-stration" (91551)

Silvermoon:
- "Feeding the Flame" (90777) not immediately available, needs more research
- "Rising Storm" (92061) probably requires "De Amani Never Die", "Emergency" & "Regrets of the Past" storylines as well
- "Looming Shadows" (91084) needs more research
- "The War Beyond the Roots" (95324) requires "Rise of the Haranir" (86898)
- "Silvermoon Negotiations" requires "Light's Last Stand" (86852)
- "Murder Row: Acting the Part" (90819) requires "Murder Row: Loose Lips" (90818)
- "Murder Row: Harbored Secrets" (90821) requires "Murder Row: Acting the Part" (90819)
- "Murder Row: One Fel Swoop" (90822) requires "Murder Row: Harbored Secrets" (90821)

Zul'Aman:
- "Send Dem Home" (91835) requires "Dirty Deeps" (91833)
- "Respect de Totem" (91836) requires "Dirty Deeps" (91833)
- "De Vile Diminished" (91838) requires "Dirty Deeps" (91833)
- "Sacrifice Denied" (91839) requires "One Will Not Rise" (91840)
- "One Will Not Rise" (91840) requires "Send Dem Home" (91835)
- "Dirty Deeps" (91833) may require "Dreaming of Spiders" (91409), may just require lvl 90, needs more research

Isle of Quel'Danas:
- "A Voice from the Light" (88719) requires "Midnight" (91281)
- "Champions of Quel'Danas" (86770) requires "Last Bastion of the Light" (86769)
- "Where Heroes Hold" (86780) requires "Last Bastion of the Light" (86769)
- "The Hour of Need" (86805) requires "Where Heroes Hold" (86780)
- "Luminous Wings" (86806) requires "The Hour of Need" (86805)
- "Ethereal Eradication" (86811) requires "Severing the Void" (91274)
- "Light's Arsenal" (86848) requires "Severing the Void" (91274)
- "Broken Sun" (86850) requires "Wrath Unleashed" (86849)
- "My Son" (89271) requires "Last Bastion of the Light" (86769)
- "Light's Last Stand" (86852) requires "Broken Sun" (86850)

Eversong Woods:
- "Captured Information" (90551) requires "Signs of the Struggle" (90549)
- "Survive" (86892) requires "Expeditious Retreat" (86887)
- "Cutting off the Head" (90556) requires "Leave Ashes in Your Wake" (90554)
- fix broken Vignette Names in the SavedVars
- import known german vignette names
- learn vignette names when in range and overwrite broken/unknown ones
- dump vignettes without names as TomTom Waypoints
- offer a comnmand to dump QuestHub Pin data
- offer a commmand to dump TaskQuests, aka BonusObjectives
- offer a command to dump all QuestPin Data for debug reasons
- check for questpins that are new or gone on map open after accepting new quests as well
- check for new questpins right after a zone change despite possible false positive links.
- silence snapshot comparison chat output when done automatically
- add hook to Gossip-Closed to track quests that are completed on gossip like "Stay a while and listen".
@yoshimo
yoshimo force-pushed the IntegrateMyMidnightBetaWithUpstreamMaster branch from 3ac25b7 to 1ea56bb Compare May 9, 2026 09:59
yoshimo added 2 commits June 23, 2026 09:50
Eversong Woods:
- "The Wayward Magister" (86621) requires "Silvermoon Must Know" (86745)
- "Chance Meeting" (86622) requires "The First to Know" (90907)
- "Void Walk With Me" (86636) requires "To Deatholme" (86635)
- "What's Left" (86639) requires "Anything but Reprieve" (86637)
- "An Impasse" (86646) requires "Gods Before Us" (86644)
- "Past Redemption" (86649) requires "Light Guide Us" (86648)
- "Paved in Ash" (86735) requires "The Missing Magister" (90494)
- "Cargo Conspiracy" (87392) probably requires "Paved in Ash" (86735)
- "Facing the Sun" (87399) requires "Luminous Wings" (86806) and probably requires "Silvermoon Must Know" (86745)
- "Trials and Tabulations" (87455) may requirs "Light's Last Stand" (86852) and may also require "Paved in Ash" (86735)
- "Souvenirs Scattered" (87456) requires "Trials and Tabulations" (87455)
- "What We Do Best" (87457) requires "Trials and Tabulations" (87455)
- "Reenact the Crime" (88977) may require either "Paved in Ash" (86736) or "Paved in Ash" (86735) , "Second Time's a Choice" (94388) may be a breadcrumb
- "Tracking the Trail" (88978) may require either "Paved in Ash" (86736) or "Paved in Ash" (86735) , "Second Time's a Choice" (94388) may be a breadcrumb
- "The First to Know" (90907) requires "Appeal to the Void" (86623)
- "The Missing Magister" (90494) requires "The Battle for Tranquillien" (86632)
- "A Fish!" (91271) probably requires "Silvermoon Must Know" (86745)
- "If You Want It Done Right" (91342) could also require "Paved in Ash" (86735)
- "Range of Knowledge" (91452) could also require "Paved in Ash" (86735)
- "A Ranger's Dream" (94371) may require either "Paved in Ash" (86736) or "Paved in Ash" (86735)

Silvermoon City:
- "A Small Task" (89199) requires "Gold is Gold" (90669)
- "Gold is Gold" (90669) could also require "Light's Last Stand" (86852) & "Paved in Ash" (86736)
- "Mad to Measure" (91386) could also require "Paved in Ash" (86735)
- "Career Counseling" (94393) could also require "Paved in Ash" (86735)
- "Down a Peg" (94396) could also require "Paved in Ash" (86735)
- "Hounded and Hassled" (92729) could also require "Paved in Ash" (86735)
- "Dogged Disturbances" (92728) requires "Hounded and Hassled" (92729)
- "He Went Thataway" (92868) requires "Dogged Disturbances" (92728)
- "Fishy Dis-pondencies" (92869) requires "He Went Thataway" (92868)

Sunstrider Isle:
- "A Path Not Yet Chosen" (91284) could also require "Light's Last Stand" (86852) & "Paved in Ash" (86736)

Zul'Aman:
- "Break the Blade" (86720) requires "Twilight Bled" (86718)
- "Brutal Feast" (86656) requires "Ahead of the Issue" (89334)
- "Camp Stonewash" (93667) seems to be rep-bound for alts, needs more research
- "There Can Be Only One" (92167) requires "Following Suit" (92166)
@yoshimo

yoshimo commented Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

@smaitch this is the latest version of mining the map and the last version of quest information i had before you made the big changes. It also includes the version before the rewrite
In case you want to get inspired by some of it and include some of it :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants