Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -24,4 +25,4 @@
^route_myreque_harold = 1
^route_myreque_radigrad = 2
^route_myreque_polmafi = 3
^route_myreque_ivan = 4
^route_myreque_ivan = 4
9 changes: 9 additions & 0 deletions scripts/quests/quest_routequest/scripts/quest_routequest.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 1 addition & 2 deletions scripts/quests/quest_routequest/scripts/route_cutscene.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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, "<p,angry>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!");
Expand Down
55 changes: 45 additions & 10 deletions scripts/quests/quest_routequest/scripts/routequest_hollow.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.");
Expand All @@ -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.");
Expand All @@ -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));
}
Expand All @@ -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) {
Expand All @@ -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);


Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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("<p,neutral>I don't have to answer to you!");
Expand Down Expand Up @@ -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.");
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -393,4 +428,4 @@ if(%routequestionscorrect = 3) {
~chatnpc("<p,angry>I'm sorry but you only got 2 questions correct! Go on get outa here...");
mes("<npc_name> : I'm sorry but you only got 2 questions correct! Go on get outa here...");
}
}
}
Original file line number Diff line number Diff line change
@@ -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. ";
Expand Down
9 changes: 6 additions & 3 deletions scripts/quests/quest_routequest/scripts/routequest_morton.rs2
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -201,9 +201,12 @@ if($druid_pouches < 5) {
}
~chatplayer("<p,neutral>I have this druid pouch! This turns the Ghasts visible and I can kill them once I can see them.");
~chatnpc("<p,neutral>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("<p,neutral>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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,10 @@ if(%routequest < ^routequest_introduced_veliaf) {
~chatnpc("<p,happy>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
Expand Down Expand Up @@ -227,6 +231,9 @@ if(%routequest < ^routequest_introduced_veliaf) {
~chatnpc("<p,happy>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
Expand Down Expand Up @@ -612,4 +619,4 @@ queue(skeleton_hellhound_defeat, 0, 0);
[queue,skeleton_hellhound_defeat]
if(%routequest = ^routequest_ambush) {
%routequest = ^routequest_saved_myreque;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ if(%routequest >= ^routequest_ambush) {
if(%routequest = ^routequest_not_started) {
~chatnpc_specific("Vanstrom Klause", route_vanstrom_klause_sitting, "<p,neutral>Hello there, how goes it stranger?");
~chatplayer("<p,quiz>Quite well, thanks for asking. How about you?");
if(%druidspirit < ^druid_complete) {
if(%druidspirit < ^druidspirit_complete) {
~chatnpc_specific("Vanstrom Klause", route_vanstrom_klause_sitting, "<p,neutral>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;
Expand Down