From 432c5c5a564504f0fab3cda3898296b006a2d06f Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 14 Sep 2026 22:25:47 -0500 Subject: [PATCH] fix: In Search of the Myreque corrections - 75 nails per rung instead of 10 (225 total), sourced from the 2005-2007 tip.it captures and an OSRS dump; Cyreg now asks for 6 planks, not 3, matching his "three for me, three for you" line and the journal. - Fix ^druid_complete -> ^druidspirit_complete in the Vanstrom requirement check, and the fourth Cyreg multi pointing at cyreg_myreque_enemy instead of cyreg_vigilante. - Add hammering synth on rung repair, drop a stray unreachable mes() and an unused npc uid, and use ~route_get_question for the scholar question header. - Clear the quest's scratch varbits on completion, leaving the bridge rungs repaired. - Add talk-to fallbacks for Sani and Harold once the cutscene state is set. - Replace the "MISSING journal for 67" and "7th question" TODOs with notes explaining why neither applies here, plus timing notes on the repair. --- .../configs/quest_routequest.constant | 5 +- .../scripts/quest_routequest.rs2 | 9 +++ .../scripts/route_cutscene.rs2 | 3 +- .../scripts/routequest_hollow.rs2 | 55 +++++++++++++++---- .../scripts/routequest_journal.rs2 | 6 +- .../scripts/routequest_morton.rs2 | 9 ++- .../scripts/routequest_myreque.rs2 | 9 ++- .../scripts/routequest_vanstorm.rs2 | 2 +- 8 files changed, 77 insertions(+), 21 deletions(-) diff --git a/scripts/quests/quest_routequest/configs/quest_routequest.constant b/scripts/quests/quest_routequest/configs/quest_routequest.constant index 5516ed8a54..4652a1b30a 100644 --- a/scripts/quests/quest_routequest/configs/quest_routequest.constant +++ b/scripts/quests/quest_routequest/configs/quest_routequest.constant @@ -8,7 +8,8 @@ ^routequest_answered_questions = 55 ^routequest_entered_underground = 60 ^routequest_introduced_veliaf = 65 -// vvv - possibly osrs-only state? +// osrs-only state: OSRS splits "gave Veliaf the weapons" from "cutscene begins". +// RS2 does both in one tick, so 67 is unreachable here. Intentionally not defined. //^routequest_gave_weapons = 67 ^routequest_enter_cutscene = 70 // osrs also uses 71-79 that get all pushed in same tick as 80 after cutscene. @@ -24,4 +25,4 @@ ^route_myreque_harold = 1 ^route_myreque_radigrad = 2 ^route_myreque_polmafi = 3 -^route_myreque_ivan = 4 \ No newline at end of file +^route_myreque_ivan = 4 diff --git a/scripts/quests/quest_routequest/scripts/quest_routequest.rs2 b/scripts/quests/quest_routequest/scripts/quest_routequest.rs2 index 41fe574953..731d322481 100644 --- a/scripts/quests/quest_routequest/scripts/quest_routequest.rs2 +++ b/scripts/quests/quest_routequest/scripts/quest_routequest.rs2 @@ -23,6 +23,15 @@ return (true); [queue,routequest_complete] %routequest = ^routequest_complete; +// OSRS: completion clears the quest's scratch state. Verified in a RSProx dump. +// Deliberately does NOT clear %bridgerung1/2/3 (routequestmulti bits 20-22). OSRS zeroes the whole +// varp in one write and then immediately sets the three rungs back to 1 (dump: routequestmulti +// 40927224 -> 0, then bridgerung1/2/3 0 -> 1), so the bridge stays repaired after the quest. Leaving +// the rungs untouched here reaches that same end state. ~resetrungs exists for testing. +%routequestionscorrect = 0; +%routequestionsanswered = 0; +%routequest_myreque_bits = 0; +%roomnum = 0; stat_advance(attack, 6000); stat_advance(defence, 6000); stat_advance(strength, 6000); diff --git a/scripts/quests/quest_routequest/scripts/route_cutscene.rs2 b/scripts/quests/quest_routequest/scripts/route_cutscene.rs2 index 46cd4fb24a..c0c3b522a2 100644 --- a/scripts/quests/quest_routequest/scripts/route_cutscene.rs2 +++ b/scripts/quests/quest_routequest/scripts/route_cutscene.rs2 @@ -62,7 +62,6 @@ def_coord $vanstrom_coord = movecoord($roomcoords, 0, 0, -1); npc_add($veliaf_coord, route_veliaf_hurtz, 1000); npc_add($sani_coord, route_sani_piliu, 1000); %npc_attacking_uid = uid; -def_npc_uid $sani_uid = npc_uid; npc_add($harold_coord, route_harold_evans, 1000); %npc_attacking_uid = uid; @@ -73,7 +72,7 @@ npc_add(movecoord($roomcoords, 5, 0, -3), route_radigad_ponfit, 1000); // https://web.archive.org/web/20060912145604im_/http://www.runeweb.net/Roth/Myreque_Quest/10.PNG // this 2005 guide shows the dialogue in the cutscene without "click here to continue", but by 2007 this is changed // meaning the cutscene was probably reworked at some point in 2006-2007 (maybe darkness of hallowvale) -// the delays and timing here are guessed, cam packets likely need an extra check +//guess, the delays and timing here; cam packets likely need an extra check ~chatnc_cutscene(nc_name(route_veliaf_hurtz), route_veliaf_hurtz, "Hey, what's that mist coming in through the door!|! TEAM WE HAVE A VAMPIRE IN THE ROOM !"); p_delay(3); mes("You see a shifting mist enter the room!"); diff --git a/scripts/quests/quest_routequest/scripts/routequest_hollow.rs2 b/scripts/quests/quest_routequest/scripts/routequest_hollow.rs2 index 62d09b03c4..51c0761211 100644 --- a/scripts/quests/quest_routequest/scripts/routequest_hollow.rs2 +++ b/scripts/quests/quest_routequest/scripts/routequest_hollow.rs2 @@ -46,7 +46,7 @@ minimap_toggle(0); // [7938] [oploc1,harmless_dead_palm_mid] -if(loc_angle = ^loc_north) { +if(loc_angle = ^loc_north) { if(coordz(loc_coord) > coordz(coord)) { mes("You're already on the bridge."); return; @@ -123,6 +123,12 @@ switch_coord (loc_coord) { case default : ~displaymessage(^dm_default); } +// timing note, also applies to oploc1,spooky_tree_base_forbridge +// osrs dump: anim + loc_change + synths on the op tick, busy next tick, then message +// + varbit + inv delete 2 ticks after. here the message/delete/varbit all happen up +// front, so it's the same length but lands 2t early. +// the dump also shows no player movement after a repair, you just walk on yourself. +// runehq 2005 describes it the same way (walk, break, repair, walk). [oploc5,swamp_bridge1] switch_coord (loc_coord) { case 0_54_53_46_35 : mes("This bridge rung already looks fixed; that's why you're able to stand on it."); @@ -134,10 +140,10 @@ switch_coord (loc_coord) { if(~routequest_try_fix_rung = true) { %bridgerung1 = 1; anim(human_smithing, 0); + ~routequest_hammer_sound; p_delay(2); ~forcemove(movecoord(coord, 0, 0, 1)); } - mes("This bridge rung already looks fixed; that's why you're able to stand on it."); case 0_54_53_46_37 : if(%bridgerung2 = ^true) { mes("You have already fixed this part of the bridge."); @@ -146,6 +152,7 @@ switch_coord (loc_coord) { if(~routequest_try_fix_rung = true) { %bridgerung2 = 1; anim(human_smithing, 0); + ~routequest_hammer_sound; p_delay(2); ~forcemove(movecoord(coord, 0, 0, 1)); } @@ -157,21 +164,35 @@ switch_coord (loc_coord) { if(~routequest_try_fix_rung = true) { %bridgerung3 = 1; anim(human_smithing, 0); + ~routequest_hammer_sound; p_delay(2); ~forcemove(movecoord(coord, 0, 0, 1)); } case default : ~displaymessage(^dm_default); } +// guess: dump plays the same synth 3 times at 0/20/40 alongside the anim. +// no 377 equivalent for 2101 that i can find, so hammering stands in. +[proc,routequest_hammer_sound] +sound_synth(hammering, 0, 0); +sound_synth(hammering, 0, 20); +sound_synth(hammering, 0, 40); + [proc,routequest_try_fix_rung]()(boolean) if(inv_total(inv, woodplank) = 0) { // RS3 ~objbox(woodplank, "You'll need a wooden plank in order to repair this.", 200, 0, 0); return (false); } -if(inv_total(inv, nails) < 10) { - // RS3 - mes("You need at least 10 steel nails to repair this."); +// 75 nails per rung, 225 total. +// tip.it guide (says last updated august 10th 2005), same line in the 2005-11-10, +// 2006-06-09 and 2007-06-06 captures: "Each part will take a plank and 75 steel +// nails.", item list says "225 steel nails (make from 15 steel bars), 6 planks". +// global-rs 2008/03 agrees, and the osrs dump goes 225 -> 150 -> 75 -> 0. +// only runehq 2005/01 disagrees (3 planks and 30 nails). +// - https://youtu.be/9FWqA3_PG0c?t=110 +if(inv_total(inv, nails) < 75) { + mes("You need at least 75 steel nails to repair this."); //guess on the wording, rs3 phrasing (quest reworked 2013). the 75 is sourced above return (false); } if(inv_total(inv, hammer) = 0) { @@ -180,7 +201,8 @@ if(inv_total(inv, hammer) = 0) { return (false); } inv_del(inv, woodplank, 1); -inv_del(inv, nails, 10); +inv_del(inv, nails, 75); +//mes("You repair a section of the bridge."); // osrs dump, but not in our revision as this video shows https://youtu.be/9FWqA3_PG0c?t=108 return (true); @@ -196,6 +218,7 @@ switch_coord (loc_coord) { if(~routequest_try_fix_rung = true) { %bridgerung1 = 1; anim(human_smithing, 0); + ~routequest_hammer_sound; p_delay(1); loc_change(swamp_bridge1, 200); p_delay(0); @@ -209,6 +232,7 @@ switch_coord (loc_coord) { if(~routequest_try_fix_rung = true) { %bridgerung2 = 1; anim(human_smithing, 0); + ~routequest_hammer_sound; p_delay(1); loc_change(swamp_bridge1, 200); p_delay(0); @@ -222,6 +246,7 @@ switch_coord (loc_coord) { if(~routequest_try_fix_rung = true) { %bridgerung3 = 1; anim(human_smithing, 0); + ~routequest_hammer_sound; p_delay(1); loc_change(swamp_bridge1, 200); p_delay(0); @@ -247,7 +272,8 @@ if(%routequest < ^routequest_answered_questions) { } [label,route_curpile_multi] -@multi5("I've come to help the Myreque, I've brought weapons.", route_curpile_help, "I don't have to answer you!", router_curpile_dont_answer, "No reason.", route_curpile_no_reason, "I'm lost, can you show me the way out?", route_curpile_lost, "I have to go.", route_curpile_gottago); +//https://youtu.be/9FWqA3_PG0c?t=147 +@multi5("I've come to help the Myreque, I've brought weapons.", route_curpile_help, "I don't have to answer to you!", router_curpile_dont_answer, "No reason.", route_curpile_no_reason, "I'm lost, can you show me the way out?", route_curpile_lost, "I have to go.", route_curpile_gottago); [label,router_curpile_dont_answer] ~chatplayer("I don't have to answer to you!"); @@ -285,7 +311,16 @@ if(~routequest_has_weapons = false) { @route_curpile_question; [proc,route_get_question](int $q)(string) -// RuneHQ mentions a 7th question existing, but I haven't found evidence of it. +// only 6 questions, guard asks 3 of them. +// tip.it (2005, same list in the 2005-11-10, 2006-06-09 and 2007-06-06 captures) +// lists these six and no more. +// later guides have extras, left out: +// runehq 2005/01 adds "What does Myreque mean?" -> "Hidden in Myre" +// global-rs 2008/03 adds that plus "Who is the mercenary from Asgarnia?" -> "Radigad Ponfit" +// and "Who is a bit hot headed?" -> "Harold Evans" +// cyreg's dialogue does cover those answers so they might be real, but nobody +// recorded the wrong options, so adding them means making up distractors. +// if the option lists turn up, add them and bump random(6) in route_curpile_question. switch_int($q) { case 0 : return ("Who is the youngest member of the Myreque?"); case 1 : return ("Name the only female member of the Myreque."); @@ -315,7 +350,7 @@ if($q = 0) { } %routequestionsanswered = calc(%routequestionsanswered + 1); } else if($q = 3) { - def_int $op = ~p_choice5_header("Sani Piliu", 1, "Harold Evans", 2, "Radigad Ponfit", 3, "Polmafi Ferdygris", 4, "Don't know!", 5, "Who was previously a scholar?"); + def_int $op = ~p_choice5_header("Sani Piliu", 1, "Harold Evans", 2, "Radigad Ponfit", 3, "Polmafi Ferdygris", 4, "Don't know!", 5, ~route_get_question($q)); if($op = 4) { %routequestionscorrect = calc(%routequestionscorrect + 1); } @@ -393,4 +428,4 @@ if(%routequestionscorrect = 3) { ~chatnpc("I'm sorry but you only got 2 questions correct! Go on get outa here..."); mes(" : I'm sorry but you only got 2 questions correct! Go on get outa here..."); } -} \ No newline at end of file +} diff --git a/scripts/quests/quest_routequest/scripts/routequest_journal.rs2 b/scripts/quests/quest_routequest/scripts/routequest_journal.rs2 index 141f6890ef..5e9b3cf3c1 100644 --- a/scripts/quests/quest_routequest/scripts/routequest_journal.rs2 +++ b/scripts/quests/quest_routequest/scripts/routequest_journal.rs2 @@ -1,7 +1,9 @@ [if_button,questlist:routequest] // Sourced from rs3 and osrs November 2025 -// MISSING: -// journal for varp value 67 +// Note: no journal entry for varp value 67 (^routequest_gave_weapons). That state is +// OSRS-only, OSRS splits "handed Veliaf the weapons" from "cutscene starts". Here +// route_veliaf_hurtz sets ^routequest_enter_cutscene in the same tick it deletes the +// weapons, so 67 is never observable and needs no journal text. def_string $text; if(%routequest = ^routequest_complete) { $text = "@str@I was set a quest by Vanstrom Klause to deliver weapons @str@to a group called the Myreque. After negotiating with a @str@boatman, fixing a broken rope bridge and answering a @str@guards questions I eventually found the group called the Myreque. "; diff --git a/scripts/quests/quest_routequest/scripts/routequest_morton.rs2 b/scripts/quests/quest_routequest/scripts/routequest_morton.rs2 index 6d28b2a1d4..5e489fe9ad 100644 --- a/scripts/quests/quest_routequest/scripts/routequest_morton.rs2 +++ b/scripts/quests/quest_routequest/scripts/routequest_morton.rs2 @@ -154,7 +154,7 @@ if(%routequest = ^routequest_not_started) { // FOURTH MULTI-PAGE [label,cyreg_interrogate_multi_fourthpage] -@multi5("One mans vigilante is another mans freedom fighter!", cyreg_myreque_enemy, "Who are the Drakans?", cyreg_drakans, "What kind of a man are you to say that you don't care?", cyreg_persuade4, "Why do you say that this place is forsaken?", cyreg_forsaken, "Ok, thanks.", cyreg_exit); +@multi5("One mans vigilante is another mans freedom fighter!", cyreg_vigilante, "Who are the Drakans?", cyreg_drakans, "What kind of a man are you to say that you don't care?", cyreg_persuade4, "Why do you say that this place is forsaken?", cyreg_forsaken, "Ok, thanks.", cyreg_exit); [label,cyreg_vigilante] // OSRS @@ -201,9 +201,12 @@ if($druid_pouches < 5) { } ~chatplayer("I have this druid pouch! This turns the Ghasts visible and I can kill them once I can see them."); ~chatnpc("Very well, You can go! But you'll need to bring me some wood planks first, I need three and you need three."); -// guessed, it's changed in rs3 and osrs both. +//guess, the wording changed in rs3 and osrs both. // rs3 also cares if you actually have nails or hammer, osrs doesn't. rs3 changed the quest around 2013. -if(inv_total(inv, woodplank) < 3) { +// 3 for his boat + 3 for the bridge, so you carry 6 before he takes his cut. +// same as the journal's "6 wooden planks" check and osrs +// ("you'll need to bring me six wooden planks first") +if(inv_total(inv, woodplank) < 6) { ~chatnpc("The bridge you cross later is rotten and may need to be mended, so bring tools and steel metal fixers as well, you may find them useful."); return; } diff --git a/scripts/quests/quest_routequest/scripts/routequest_myreque.rs2 b/scripts/quests/quest_routequest/scripts/routequest_myreque.rs2 index 8da6e4e3ff..f2c7e71a33 100644 --- a/scripts/quests/quest_routequest/scripts/routequest_myreque.rs2 +++ b/scripts/quests/quest_routequest/scripts/routequest_myreque.rs2 @@ -177,6 +177,10 @@ if(%routequest < ^routequest_introduced_veliaf) { ~chatnpc("Sure, go ahead, I'll answer as best as I can."); @sani_multi; } +} else { + // only reachable if ~route_attempt_enter_cutscene bailed (all 4 rooms full) + // after veliaf already set ^routequest_enter_cutscene. same as radigad/polmafi/ivan + mes("This person isn't able to talk to you at this time."); } [label,sani_multi] // RS3 @@ -227,6 +231,9 @@ if(%routequest < ^routequest_introduced_veliaf) { ~chatnpc("Sure, go ahead. I'll answer as best I can."); @harold_multi; } +} else { + // see route_sani_piliu above + mes("This person isn't able to talk to you at this time."); } [label,harold_multi] // RS3 texts @@ -612,4 +619,4 @@ queue(skeleton_hellhound_defeat, 0, 0); [queue,skeleton_hellhound_defeat] if(%routequest = ^routequest_ambush) { %routequest = ^routequest_saved_myreque; -} \ No newline at end of file +} diff --git a/scripts/quests/quest_routequest/scripts/routequest_vanstorm.rs2 b/scripts/quests/quest_routequest/scripts/routequest_vanstorm.rs2 index a78d3ff520..dd01989fa9 100644 --- a/scripts/quests/quest_routequest/scripts/routequest_vanstorm.rs2 +++ b/scripts/quests/quest_routequest/scripts/routequest_vanstorm.rs2 @@ -43,7 +43,7 @@ if(%routequest >= ^routequest_ambush) { if(%routequest = ^routequest_not_started) { ~chatnpc_specific("Vanstrom Klause", route_vanstrom_klause_sitting, "Hello there, how goes it stranger?"); ~chatplayer("Quite well, thanks for asking. How about you?"); - if(%druidspirit < ^druid_complete) { + if(%druidspirit < ^druidspirit_complete) { ~chatnpc_specific("Vanstrom Klause", route_vanstrom_klause_sitting, "Hmm, well, I am a little concerned about some friends of mine. Nothing for you to worry about though."); ~mesbox("You do not meet all of the requirements to start the In Search of the Myreque quest."); return;