From 4938a33a95b559fe8ab7b80221721870f103d3b4 Mon Sep 17 00:00:00 2001 From: Ovenbread Date: Sat, 16 May 2026 22:34:21 -0700 Subject: [PATCH 1/4] Init journal and archaeologist. --- scripts/general/configs/quest.constant | 1 + scripts/general/scripts/quests.rs2 | 4 + .../scripts/archaeologist.rs2 | 227 ++++++++++ .../scripts/deserttreasure_journal.rs2 | 387 ++++++++++++++++++ 4 files changed, 619 insertions(+) create mode 100644 scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 create mode 100644 scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 diff --git a/scripts/general/configs/quest.constant b/scripts/general/configs/quest.constant index 0f37409d6f..e8a4f28f39 100644 --- a/scripts/general/configs/quest.constant +++ b/scripts/general/configs/quest.constant @@ -68,6 +68,7 @@ ^blackknight_questpoints = 3 ^cook_questpoints = 1 ^demon_questpoints = 3 +^deserttreasure_questpoints = 3 ^doric_questpoints = 1 ^dragon_questpoints = 2 ^druid_questpoints = 4 diff --git a/scripts/general/scripts/quests.rs2 b/scripts/general/scripts/quests.rs2 index 55fe65d32b..ec2a1a9134 100644 --- a/scripts/general/scripts/quests.rs2 +++ b/scripts/general/scripts/quests.rs2 @@ -229,6 +229,9 @@ if (%priestperil >= ^priestperil_complete) { if (%druidspirit = ^druidspirit_complete) { $questpoints = add($questpoints, ^druidspirit_questpoints); } +if (%deserttreasure = ^deserttreasure_complete) { + $questpoints = add($questpoints, ^deserttreasure_questpoints); +} if (%death_equiproom = ^death_complete) { $questpoints = add($questpoints, ^death_questpoints); } @@ -302,6 +305,7 @@ if (testbit(%ibanmulti, ^upass_started_bit) = ^true & %upass ! ^upass_complete) ~send_quest_progress_colour(questlist:crest, %crestquest, ^crest_complete); ~send_quest_progress_colour(questlist:desertrescue, %desertrescue, ^desertrescue_complete); ~send_quest_progress_colour(questlist:itwatchtower, %itwatchtower, ^itwatchtower_complete); +~send_quest_progress_colour(questlist:deserttreasure, %deserttreasure, ^deserttreasure_complete); ~send_quest_progress_colour(questlist:legends, %legendsquest, ^legends_complete); ~send_quest_progress_colour(questlist:elemental_workshop, %elemental_workshop_bits, sub(pow(2, ^elemental_workshop_complete), 1)); ~send_quest_progress_colour(questlist:priestperil, %priestperil, ^priestperil_complete); diff --git a/scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 b/scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 new file mode 100644 index 0000000000..73b1697fbe --- /dev/null +++ b/scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 @@ -0,0 +1,227 @@ +[opnpc1,fourdiamonds_indiana] +switch_int (%deserttreasure) { + case 0 : + @archaeologist_quest_stage_0; + case 1, 2 : + @archaeologist_quest_stage_1_2; + case 3 : + @archaeologist_quest_stage_3; + case 4 : + @archaeologist_quest_stage_4; + case 5 : + @archaeologist_quest_stage_5; + case 6, 7, 8 : + @archaeologist_quest_stage_6_7_8; + case 9, 10, 11, 12, 13 : + @archaeologist_quest_stage_9; + case 14 : + @archaeologist_quest_stage_10; + case ^deserttreasure_complete : + @archaeologist_quest_stage_complete; +} + +[label,archaeologist_quest_stage_0] +~chatplayer("Hello there."); +// Check quest requirements +if (%itexamlevel = ^itexam_complete & %desertrescue >= ^desertrescue_complete & (%ikov >= ^ikov_completed_armadyl | %ikov >= ^ikov_completed_lucien) & %priestperil >= ^priest_complete & %waterfall_quest >= ^waterfall_complete & %troll_quest >= ^troll_complete & stat_base(slayer) >= 10 & stat_base(firemaking) >= 50 & stat_base(magic) >= 50 & stat_base(thieving) >= 50) { + @archaeologist_stage_0_req_satisfied; +} else { + ~mesbox("He seems to be lost in his own thoughts..."); +} + +[label,archaeologist_stage_0_req_satisfied] +~chatnpc("Howdy stranger. What brings you out to these parts?"); +@archaeologist_stage_0_options; + +[label,archaeologist_stage_0_options] +@multi4( + "What are you doing here?", archaeologist_doing_here, + "Do you have any quests?", archaeologist_have_quests, + "Who are you?", archaeologist_who_are_you, + "Nothing really.", archaeologist_nothing_really +); + +[label,archaeologist_doing_here] +~chatplayer("Nothing much - What are you doing here?|It doesn't seem like there's much to do out here in the|desert!"); +~chatnpc("Well, that's where you'd be wrong.|I work for the Archaeological Society of Varrock, and|have been excavating around here recently."); +~chatnpc("Was there something you specifically wanted?"); +@archaeologist_stage_0_options; + +[label,archaeologist_have_quests] +~chatplayer("Do you have any quests?|Call it a hunch, but you look like the type of man who|might..."); +~chatnpc("Well, it's funny you should say that.|I'm not sure if I would really call it a quest as such,|but I found this ancient stone tablet in one of my|excavations, and it would really help me out if you"); +~chatnpc("could go and take it back to the digsite for me and get|it examined."); +~chatnpc("It's very old, and I don't recognise any of the|inscriptions on it."); +@multi2( + "Yes, I'll help you.", archaeologist_accept_quest, + "No thanks, I don't want to help.", archaeologist_decline_quest +); + +[label,archaeologist_accept_quest] +inv_add(inv, four_diamonds_etchings, 1); +~chatplayer("Sure, I was heading that way anyway.|Any particular person at the digsite you want me to|talk to?"); +~chatnpc("His name's Terry Balando. Give it to nobody but him.|I'm sorry, I can't entrust you with the actual tablet I|found, but it is far too valuable to give away, but I took|these etchings - they should be enough for him to make"); +~chatnpc("a preliminary translation on.|Come back and let me know what he says, I would hate|to waste my time excavating anything that isn't worth|my time as a world famous archaeologist!"); +if (%deserttreasure = 0) { + %deserttreasure = 1; +} + +[label,archaeologist_decline_quest] +~chatplayer("No thanks. Playing delivery boy doesn't really sound like much fun to me."); +~chatnpc("Well, okay. Can't say as I blame you for thinking that. I'll go take it there myself later I guess."); + +[label,archaeologist_who_are_you] +~chatplayer("Who are you, anyway?"); +~chatnpc("You don't recognize me???|I am the world famous Asgarnia Smith, Archaeologist|extraordinaire!"); +~chatnpc("I am the one who discovered the long forgotten|Temple of Ikov!|The one who unearthed the strange trap filled arena|in Brimhaven!"); +~chatnpc("I'm the leading archaeological expert of our time!|I was voted archaeologist of the year four years|running by the Varrock Herald! Are you REALLY|sure you've never heard of me?"); +~chatplayer("No, I really haven't."); +~chatnpc("Well then, I'm confused.|Why did you come over and speak to me if you don't|know who I am? What do you want?"); +@archaeologist_stage_0_options; + +[label,archaeologist_nothing_really] +~chatplayer("Nothing really. I'm just wandering around for no good reason."); +~chatnpc("Uh-huh. Well, if you'll excuse me, I have a lot more work to do before I can bed down for the night."); + +[label,archaeologist_quest_stage_1_2] +~chatnpc("So what did Terry Balando say about those etchings? Did he give you a translation for me?"); +~chatplayer("Um...yeah...about that... I kind of didn't go and speak to him yet..."); +~chatnpc("Well what are you waiting for? A written invitation? All I want you to do is take those etchings up to the digsite for me!"); +~chatplayer("Okay, I'll do that then."); + +[label,archaeologist_quest_stage_3] +~chatplayer("Hello there."); +~chatnpc("So what did Terry Balando say about those etchings? Did he give you a translation for me?"); +if (inv_total(inv, four_diamonds_translation_primer) >= 1) { + @archaeologist_has_translation; +} else { + @archaeologist_no_translation; +} + +[label,archaeologist_no_translation] +~chatplayer("Yeah, he did. But I don't have it with me."); +~chatnpc("..."); +~chatnpc("I see."); +~chatnpc("Well could you go and get me that translation? It could be vital!"); + +[label,archaeologist_has_translation] +~chatplayer("Yeah, he did. I have it here in this book."); +~chatnpc("Did you take a read of this? It will do you good to understand how this profession works. Here, have a read."); +@multi2( + "Read book", archaeologist_read_book, + "Don't read book", archaeologist_dont_read_book +); + +[label,archaeologist_read_book] +// Custom trigger context used to open interfaces safely in modern systems +//~open_book_interface(fancy_book_3_49); + +[label,archaeologist_dont_read_book] +~chatplayer("Yeah, I did. Kind of boring really."); +~chatnpc("Excellent. Just give me a moment to read this, and talk to me again in a second."); +if (%deserttreasure = 3) { + inv_del(inv, four_diamonds_translation_primer, 1); + %deserttreasure = 4; +} + +[label,archaeologist_quest_stage_4] +~chatplayer("Hello there."); +~chatnpc("Hmmm. Interesting. It seems to me like there's some kind of treasure hidden out in the desert."); +~chatnpc("So what do you say? Fancy being a treasure hunter like me?"); +~chatplayer("Uh... don't you mean archaeologist?"); +~chatnpc("Yeeees... An archaeologist..."); +~chatnpc("It's all this hot sun getting to me I think."); +~chatnpc("Well anyway, let's just assume there is a treasure hidden in the desert somewhere, and let's just say for the sake of argument that maybe if I found a big stash of gold and treasure I wouldn't necessarily just hand it|all over to the Museum of Varrock."); +~chatnpc("Let's also say, purely hypothetically, that if there were such a big stash of treasure and someone were to help me find it, then that hypothetical person might be entitled to, oh, let's say a purely for the sake of|argument thirty percent split..."); +~chatplayer("Fifty percent."); +~chatnpc("That's right!"); +~chatnpc("A purely for the sake of argument fifty-fifty split on this hypothetical treasure, should it exist..."); +~chatnpc("Do you see where I'm going with this?"); +~chatplayer("You want me to help you find some treasure for a fifty percent share, as long as I don't tell anybody, and your reputation as an esteemed archaeologist with the Museum of Varrock remains intact, and nobody|discovers you're actually just a treasure hunter?"); +~chatnpc("Uh... yes, but the way you said it makes it sound like I'm doing something wrong..."); +~chatnpc("So what do you say? Partners?"); +@archaeologist_stage_4_options; + +[label,archaeologist_stage_4_options] +@multi2( + "Help him", archaeologist_help_him, + "Don't help him", archaeologist_dont_help_him +); + +[label,archaeologist_help_him] +~chatplayer("Well... I guess nobody is really going to lose out on anything, and we don't even know if there is any treasure..."); +~chatplayer("Aw, go on then. Count me in."); +~chatnpc("Good ! Well, if we split up we'll be able to find treasure quicker."); +~chatnpc("I'll continue searching around here in this Bedabin Camp, you head due South to the Bandit Village. If either of us find anything, we'll come find each other and say what, okay?"); +~chatnpc("You head due South, see what you can find out about this tablet."); +if (%deserttreasure = 4) { + %deserttreasure = 5; +} + +[label,archaeologist_dont_help_him] +~chatplayer("This all sounds very immoral, and I don't want any part of your seedy little schemes."); +~chatnpc("Aw, c'mon, cut me a break here man! Look, nobody is really getting hurt, right? This treasure is either going to lie around in some underground ruin, or lie around in some museum for|people to look at!"); +~chatnpc("It makes sense for the people to go to all the risk to get a little payback for it, right? Besides, anything of real historical value we can hand over to the museum - we'll just keep the cash for|ourselves!"); +~chatnpc("C'mon... what do you say? Partners?"); +@multi2( + "Help him", archaeologist_help_him, + "Don't help him", archaeologist_decline_permanently +); + +[label,archaeologist_decline_permanently] +~chatplayer("I don't trust anything about your little scheme, including you! I want nothing to do with this!"); +~chatnpc("Eh, you'll come running back when you realize just how much money we could be talking here."); +~chatnpc("I'll see you again when you come crawling back, begging to be cut in on the deal."); + +[label,archaeologist_quest_stage_5] +~chatplayer("Hello there."); +~chatnpc("Hello again. You find any signs of that treasure yet?"); +~chatplayer("Not yet..."); +~chatnpc("Well, head south to that bandit camp. I bet if there's anything out here, they'll know about it. Don't let on it might be valuable though! Those thieves will steal it as soon as look at you!"); + +[label,archaeologist_quest_stage_6_7_8] +~chatplayer("Hello there."); +~chatnpc("Hello again. You find any signs of that treasure yet?"); +~chatplayer("Not as such... Although I think I'm onto something of a promising lead..."); +~chatplayer("Did you ever hear of something called the Diamonds of Azzanadra?"); +~chatnpc("Diamonds of Azzanadra? That sounds very promising indeed!"); +~chatplayer("So you have heard of them?"); +~chatnpc("Nope, never heard of them before, but you said diamonds! Diamonds are always promising!"); + +[label,archaeologist_quest_stage_9] +~chatplayer("Hello there."); +~chatnpc("Hello again.|How's the treasure hunting going?"); +~chatplayer("Well, I've found four diamonds."); +~chatnpc("What?|But you've been gone ages!"); +~chatnpc("C'mon, you can be square with me, you must have found|more treasure than just four measly diamonds by now!"); +~chatplayer("No, I really haven't."); +~chatnpc("Hmmm.|Well, okay a deal is a deal.|Hand two of them over."); +~chatplayer("Actually, I think I'm going to need them to gain access to|the real treasure..."); +~chatnpc("REALLY?|Great, I love treasure!"); +~chatnpc("Don't worry about two measly diamonds if you think|they'll lead to something better!"); +~chatnpc("I don't usually get out of bed for less than a hundred|gold bars!"); + +[label,archaeologist_quest_stage_10] +~chatplayer("Hello there."); +~chatnpc("Hello again, apprentice archaeologist.|How's the treasure hunting going?"); +~chatplayer("Well... I found four diamonds..."); +~chatnpc("Great!|Pass me my share, and it's a good job all around!"); +~chatplayer("Um... sorry, I can't."); +~chatnpc("Huh?|You're not trying to break a deal here are ya???"); +~chatplayer("No, it's just...|There were these weird pillars around this pyramid..."); +~chatnpc("Yes?"); +~chatplayer("Um...|Well..."); +~chatplayer("They kind of...|ate the diamonds..."); +~chatnpc("Pyramid columns ate your diamonds?|That's a crazy story kid."); +~chatnpc("Why would you go putting diamonds into them in the|first place anyway?|Diamonds!|Of all things!"); +~chatplayer("Well, I have this feeling there is some better|treasure inside that pyramid, and I needed to put the|diamonds in to gain entrance."); +~chatnpc("Well what are you wasting time talking to me for?"); +~chatnpc("Go get me some treasure, pal!"); + +[label,archaeologist_quest_stage_complete] +~chatplayer("Hello there."); +~chatnpc("Hello again. You find any signs of that treasure yet?"); +~chatplayer("Well... not as such, but I unleashed a powerful demon|from its tomb in return for unbelievable magical power."); +~chatnpc("So... no gold then?"); +~chatplayer("Not as such, no. Sorry about that."); +~chatnpc("Aw... I was hoping to go abroad on holiday|this year. Maybe I'll go check out Karamja next, I hear|there's treasure to be found there..."); \ No newline at end of file diff --git a/scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 b/scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 new file mode 100644 index 0000000000..a010cad984 --- /dev/null +++ b/scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 @@ -0,0 +1,387 @@ +[if_button,questlist:deserttreasure] +def_string $x; +def_string $n = "Desert Treasure"; +// ::tele 0,49,47 + +// fd_ means four diamonds +// fd_fw_warningspam - I think this is the warning the fire warrior doing shit + +// I need the following rsprox +// - What happens if I try to enter the smokey well before starting DT? // https://forums.d2jsp.org/topic.php?t=50680900 "it says he doesn't wanna go in for no reason..." +// - What does the archaeologist say before the start of the diamond, or collecting 1,2,3,4 diamonds? +// - The entire subquests for each one at EVERY point. Lots of videos do not capture the questlog. + + +if(%deserttreasure = 0) { +$x = append($x, "@dbl@I can start this quest by speaking to @dre@The Archaeologist@dbl@|"); + $x = append($x, "@dbl@who is exploring the @dre@Bedabin Camp@dbl@ South West of the|"); + $x = append($x, "@dre@Shantay Pass@dbl@.|"); + $x = append($x, "@dbl@To complete this quest I will need:|"); + // Skill Requirements + if (stat_base(slayer) >= 10) { + $x = append($x, "@str@Level 10 Slayer|"); + } else { + $x = append($x, "@dre@Level 10 Slayer|"); + } + if (stat_base(firemaking) >= 50) { + $x = append($x, "@str@Level 50 Firemaking|"); + } else { + $x = append($x, "@dre@Level 50 Firemaking|"); + } + if (stat_base(magic) >= 50) { + $x = append($x, "@str@Level 50 Magic|"); + } else { + $x = append($x, "@dre@Level 50 Magic|"); + } + if (stat_base(thieving) >= 50) { + $x = append($x, "@str@Level 53 Thieving|"); + } else { + $x = append($x, "@dre@Level 53 Thieving|"); + } + + if (%itexamlevel = ^itexam_complete & %desertrescue >= ^desertrescue_complete & (%ikov >= ^ikov_completed_armadyl | %ikov >= ^ikov_completed_lucien) & %priestperil >= ^priest_complete & %waterfall_quest >= ^waterfall_complete & %troll_quest >= ^troll_complete) { + $x = append($x, "@dbl@I have completed all of the required quests:|"); + } else { + $x = append($x, "@dbl@I must have completed the following quests:|"); + } + + // Quest Requirements + if (%itexamlevel = ^itexam_complete) { + $x = append($x, "@str@The Digsite Quest|"); + } else { + $x = append($x, "@dre@The Digsite Quest|"); + } + if (%desertrescue >= ^desertrescue_complete) { + $x = append($x, "@str@The Tourist Trap|"); + } else { + $x = append($x, "@dre@The Tourist Trap|"); + } + if (%ikov >= ^ikov_completed_armadyl | %ikov >= ^ikov_completed_lucien) { + $x = append($x, "@str@The Temple of Ikov|"); + } else { + $x = append($x, "@dre@The Temple of Ikov|"); + } + if (%priestperil >= ^priest_complete) { + $x = append($x, "@str@Priest In Peril|"); + } else { + $x = append($x, "@dre@Priest In Peril|"); + } + if (%waterfall_quest >= ^waterfall_complete) { + $x = append($x, "@str@Waterfall Quest|"); + } else { + $x = append($x, "@dre@Waterfall Quest|"); + } + if (%troll_quest >= ^troll_complete) { + $x = append($x, "@str@Troll Stronghold|"); + } else { + $x = append($x, "@dre@Troll Stronghold|"); + } + ~quest_journal($n, $x); + return; +} + +// Stage 1 +if (%deserttreasure = 1) { +$x = append($x, "@dbl@The @dre@archaeologist@dbl@ has given me some @dre@etchings from a@dbl@|"); +$x = append($x, "@dre@stone tablet@dbl@ that he discovered in the desert somewhere,|"); +$x = append($x, "@dbl@and asked me to take it to an archaeological expert called|"); +$x = append($x, "@dre@Terry Balando@dbl@ at the Varrock @dre@digsite@dbl@.|"); + ~quest_journal($n, $x); + return; +} + +// Stage 2 +if (%deserttreasure = 2) { + $x = append($x, "@str@I took some etchings of a stone tablet discovered by the|"); + $x = append($x, "@str@archaeologist in the desert to Terry Balando at the|"); + $x = append($x, "@str@Varrock digsite.|"); + $x = append($x, "@dbl@I should get the @dre@translation notes@dbl@ from @dre@Terry Balando@dbl@|"); + ~quest_journal($n, $x); + return; +} + +// Stage 3 +if (%deserttreasure = 3) { + $x = append($x, "@str@I took some etchings of a stone tablet discovered by the|"); + $x = append($x, "@str@archaeologist in the desert to Terry Balando at the|"); + $x = append($x, "@str@Varrock digsite.|"); + $x = append($x, "@dbl@Terry Balando made some quick @dre@translation notes@dbl@ of the|"); + $x = append($x, "@dbl@tablet and asked me to return them to the @dre@archaeologist@dbl@ in|"); + $x = append($x, "@dbl@the @dre@Bedabin Camp@dbl@.|"); + ~quest_journal($n, $x); + return; +} + +// Stage 4 +if (%deserttreasure = 4) { + $x = append($x, "@str@I took some etchings of a stone tablet discovered by the|"); + $x = append($x, "@str@archaeologist in the desert to Terry Balando at the|"); + $x = append($x, "@str@Varrock digsite.|"); + $x = append($x, "@str@He made a rough translation, which I returned to the|"); + $x = append($x, "@str@archaeologist.|"); + $x = append($x, "@dbl@I should find out what the @dre@archaeologist@dbl@ has to say about|"); + $x = append($x, "@dbl@the @dre@translation notes@dbl@.|"); + ~quest_journal($n, $x); + return; +} + +// Stage 5 +$x = append($x, "@str@The archaeologist I met in the desert seemed to think that|"); +$x = append($x, "@str@there was some hidden treasure in the desert somewhere,|"); +$x = append($x, "@str@I agreed to help him find it in return for a fifty percent|"); +$x = append($x, "@str@share of whatever we found.|"); +if (%deserttreasure = 5) { + $x = append($x, "@dbl@I should head South to the @dre@Bandit Camp@dbl@ and try to find out|"); + $x = append($x, "@dbl@more about this @dre@treasure@dbl@.|"); + ~quest_journal($n, $x); + return; +} + +// Stage 6 +$x = append($x, "@str@I headed South and found a Bandit Camp.|"); +$x = append($x, "@str@After some searching, the barman let slip some|"); +$x = append($x, "@str@information about the 'Four Diamonds of Azzanadra'.|"); +if (%deserttreasure = 6) { + $x = append($x, "@dbl@I should ask around the @dre@Bandit Camp@dbl@ and see if anyone|"); + $x = append($x, "@dbl@else has any information about the @dre@Four Diamonds of@dbl@|"); + $x = append($x, "@dre@Azzanadra@dbl@|"); + ~quest_journal($n, $x); + return; +} +// Stage 7 +$x = append($x, "@str@I asked around the Bandit Camp and discovered someone|"); +$x = append($x, "@str@who was willing to help me find the diamonds, by using a|"); +$x = append($x, "@str@magic spell and some scrying glasses.|"); +if (%deserttreasure = 7) { + $x = append($x, "@dbl@To make the scrying glasses I need to bring the following|"); + $x = append($x, "@dbl@items to Eblis:|"); + if (%fd_magiclog >= 12) { + $x = append($x, "@str@I have brought him all 12 Magic logs|"); + } else { + $x = append($x, "@dre@12 Magic logs@dbl@|"); + } + if (%fd_steelbar >= 6) { + $x = append($x, "@str@I have brought him all 6 Steel bars|"); + } else { + $x = append($x, "@dre@6 Steel bars@dbl@|"); + } + if (%fd_glass >= 6) { + $x = append($x, "@str@I have brought him all 6 Molten glass|"); + } else { + $x = append($x, "@dre@6 Molten glass@dbl@|"); + } + + if (%fd_bones >= 1) { + $x = append($x, "@str@I have brought him some bones|"); + } else { + $x = append($x, "@dre@Some bones@dbl@|"); + } + if (%fd_ash >= 1) { // assuming standard variable hooks for the remaining items + $x = append($x, "@str@I have brought him some ash|"); + } else { + $x = append($x, "@dre@Some ash@dbl@|"); + } + if (%fd_charcoal >= 1) { + $x = append($x, "@str@I have brought him some charcoal|"); + } else { + $x = append($x, "@dre@Some charcoal@dbl@|"); + } + if (%fd_bloodrune >= 1) { + $x = append($x, "@str@I have brought him a blood rune|"); + } else { + $x = append($x, "@dre@A blood rune@dbl@|"); + } + ~quest_journal($n, $x); + return; +} + +// Stage 8 --> 10 (to try to match varbit 358, value 10 is when Eblis appears at mirrors.) +if (%deserttreasure = 8) { + $x = append($x, "@str@I brought Eblis the ingredients so that he could cast the|"); + $x = append($x, "@str@spell to see the places touched by the magic of the|"); + $x = append($x, "@str@diamonds.|"); + $x = append($x, "@dbl@I should head @dre@East into the desert@dbl@ and meet Eblis where he|"); + $x = append($x, "@dbl@has set up the scrying glasses, and use them to try and|"); + $x = append($x, "@dbl@track down the @dre@Four Diamonds of Azzanadra@dbl@.|"); + ~quest_journal($n, $x); + return; +} + +// Stage 9 +if (%deserttreasure = 9) { + $x = append($x, "@str@I brought Eblis the ingredients so that he could cast the|"); + $x = append($x, "@str@spell to see the places touched by the magic of the|"); + $x = append($x, "@str@diamonds.|"); + // Appears when you use the scrying glasses? or maybe appears when you clear all 4 diamonds? + $x = append($x, "|"); + $x = append($x, "@str@I headed East into the desert and used the scrying|"); + $x = append($x, "@str@glasses set up for me there by Eblis to try and find the|"); + $x = append($x, "@str@Four Diamonds of Azzanadra.|"); + $x = append($x, "|"); + // DIAMOND OF BLOOD (DESSOUS) + if (%fdvw_subquest = 4) { + $x = append($x, "@str@I defeated a vampire named Dessous to claim the Diamond|"); + $x = append($x, "@str@of Blood.|"); + } else if (%fdvw_subquest >= 3) { + $x = append($x, "@str@I discovered that the location of the Diamond of Blood was|"); + $x = append($x, "@str@somewhere in Morytania, and in the possession of a|"); + $x = append($x, "@str@vampire warrior named Dessous.|"); + $x = append($x, "@str@I don't fully trust Malek, but he has agreed to help me kill|"); + $x = append($x, "@str@Dessous.|"); + $x = append($x, "@str@I made a special blessed pot, filled with blood, garlic and|"); + $x = append($x, "@str@spices, which I used to lure Dessous from his tomb.|"); + $x = append($x, "@str@I managed to defeat the vampire warrior Dessous, but|"); + $x = append($x, "@str@there was no sign of the Diamond of Blood anywhere.|"); + $x = append($x, "@dbl@I should find out what game @dre@Malek@dbl@ has been playing with|"); + $x = append($x, "@dbl@me, and where I can actually find the @dre@Diamond of Blood@dbl@.|"); + } else if (%fdvw_subquest >= 2) { + $x = append($x, "@str@I discovered that the location of the Diamond of Blood was|"); + $x = append($x, "@str@somewhere in Morytania, and in the possession of a|"); + $x = append($x, "@str@vampire warrior named Dessous.|"); + $x = append($x, "@str@I don't fully trust Malek, but he has agreed to help me kill|"); + $x = append($x, "@str@Dessous.|"); + $x = append($x, "@dbl@Apparently I can find an old @dre@assistant of Count Draynor@dbl@ in|"); + $x = append($x, "@dbl@the @dre@sewers of Draynor Village@dbl@, who will be able to help me|"); + $x = append($x, "@dbl@make a @dre@sacrificial pot@dbl@|"); + $x = append($x, "@dbl@I then need to take that @dre@sacrificial pot@dbl@ to @dre@Entrana@dbl@ and get|"); + $x = append($x, "@dbl@it blessed by the @dre@head priest@dbl@|"); + $x = append($x, "@dbl@When I have done that, I should return to @dre@Malak@dbl@, and he will|"); + $x = append($x, "@dbl@provide me with some @dre@fresh blood@dbl@|"); + $x = append($x, "@dbl@I then need to add @dre@garlic@dbl@ and @dre@spices@dbl@ to the pot in order to|"); + $x = append($x, "@dbl@lure Dessous from his tomb.|"); + $x = append($x, "@dbl@When I have done all of this, I must @dre@kill Dessous!@dbl@|"); + } else if (%fdvw_subquest >= 1) { + $x = append($x, "@str@I discovered that the location of the Diamond of Blood was|"); + $x = append($x, "@str@somewhere in Morytania, and in the possession of a|"); + $x = append($x, "@str@vampire warrior named Dessous.|"); + $x = append($x, "@dbl@I should speak to @dre@Malek@dbl@ again and find out how exactly I|"); + $x = append($x, "@dbl@can kill @dre@Dessous@dbl@.|"); + } else { + $x = append($x, "@dbl@I can use the @dre@scrying glasses@dbl@ to help find the|"); + $x = append($x, "@dre@Diamond of Blood@dbl@.|"); + } + $x = append($x, "|"); + + // DIAMOND OF SMOKE (FAREED) + if (%fd_killed_firewarrior >= 1) { + $x = append($x, "@str@I defeated a fire warrior, and now have the Diamond of|"); + $x = append($x, "@str@Smoke.|"); + } else if (%fd_firechest >= 1) { + $x = append($x, "@str@I entered a smokey well and lit up the path. I found a|"); + $x = append($x, "@str@key in a chest.|"); + $x = append($x, "@dbl@I should find out what the @dre@key@dbl@ unlocks.|"); + } else { + $x = append($x, "@dbl@I can use the @dre@scrying glasses@dbl@ to help find the|"); + $x = append($x, "@dre@Diamond of Smoke@dbl@.|"); + } + $x = append($x, "|"); + + // DIAMOND OF ICE (KAMIL) + if (%fd_icewarrior_subquest = 6) { + $x = append($x, "@str@I defeated a warrior named Kamil, and now have the|"); + $x = append($x, "@str@Diamond of Ice.|"); + } else if (%fd_icewarrior_subquest >= 3) { + $x = append($x, "@str@I met a crying ice troll child to the North of Trollheim.|"); + $x = append($x, "@str@I managed to cheer him up slightly with a sweet treat.|"); + $x = append($x, "@str@After speaking with him, I discovered that his parents had|"); + $x = append($x, "@str@been hurt by a 'bad man' who had the Diamond of Ice, and I|"); + $x = append($x, "@str@agreed to help him rescue them.|"); + $x = append($x, "@str@While heading through the icy area, I was attacked by an|"); + $x = append($x, "@str@ice warrior named Kamil, and managed to defeat him.|"); + $x = append($x, "@str@Was this the 'bad man' the troll child has spoken of?|"); + $x = append($x, "@dbl@I should head further into the icy area to try and find|"); + $x = append($x, "@dbl@them.|"); + } else if (%fd_icewarrior_subquest >= 2) { + $x = append($x, "@str@I met a crying ice troll child to the North of Trollheim.|"); + $x = append($x, "@str@I managed to cheer him up slightly with a sweet treat.|"); + $x = append($x, "@str@After speaking with him, I discovered that his parents had|"); + $x = append($x, "@str@been hurt by a 'bad man' who had the Diamond of Ice, and I|"); + $x = append($x, "@str@agreed to help him rescue them.|"); + $x = append($x, "@dbl@I should head further into the icy area to try and find|"); + $x = append($x, "@dbl@them.|"); + } else if (%fd_icewarrior_subquest >= 1) { // probably [fd_trollchild_intro] + $x = append($x, "@str@I met a crying ice troll child to the North of Trollheim.|"); + $x = append($x, "@dbl@I should cheer him up with something sweet.|"); + } else { + $x = append($x, "@dbl@I can use the @dre@scrying glasses@dbl@ to help find the|"); + $x = append($x, "@dre@Diamond of Ice@dbl@.|"); + } + $x = append($x, "|"); + + // DIAMOND OF SHADOW (DAMIS) + if (%fd_shadowwarrior_quest = 4) { + $x = append($x, "@str@I defeated a warrior named Damis, and now have the|"); + $x = append($x, "@str@Diamond of Shadow.|"); + } else if (%fd_shadowwarrior_quest >= 3) { + $x = append($x, "@str@A travelling merchant named Rasolo had some information|"); + $x = append($x, "@str@about the Diamond of Shadow.|"); + $x = append($x, "@str@Apparently it was owned by an invisible warrior, who I|"); + $x = append($x, "@str@needed a special ring to see.|"); + $x = append($x, "@str@Rasolo owned such a ring, but would only trade it in return|"); + $x = append($x, "@str@for a gilded cross stolen from him by a bandit named|"); + $x = append($x, "@str@Laheeb.|"); + $x = append($x, "@str@I found Laheeb's treasure chest, and managed to bypass|"); + $x = append($x, "@str@the traps on it to take the gilded cross, which I returned to|"); + $x = append($x, "@str@Rasolo.|"); + $x = append($x, "@str@In return, he gave me the Ring of Visibility.|"); + $x = append($x, "@dbl@I should put the @dre@Ring of Visibility@dbl@ on and try and find the|"); + $x = append($x, "@dbl@hidden home of @dre@Damis@dbl@ - Rasolo suggested it was very|"); + $x = append($x, "@dbl@close by to where he is...|"); + } else if (%fd_shadowwarrior_quest >= 2) { + $x = append($x, "@str@A travelling merchant named Rasolo had some information|"); + $x = append($x, "@str@about the Diamond of Shadow.|"); + $x = append($x, "@str@Apparently it was owned by an invisible warrior, who I|"); + $x = append($x, "@str@needed a special ring to see.|"); + $x = append($x, "@str@Rasolo owned such a ring, but would only trade it in return|"); + $x = append($x, "@str@for a gilded cross stolen from him by a bandit named|"); + $x = append($x, "@str@Laheeb.|"); + $x = append($x, "@str@I found Laheeb's treasure chest, and managed to bypass|"); + $x = append($x, "@str@the traps on it to take the gilded cross.|"); + $x = append($x, "@dbl@I need to return the @dre@gilded cross@dbl@ to @dre@Rasolo@dbl@.|"); + } else if (%fd_shadowwarrior_quest >= 1) { + $x = append($x, "@str@A travelling merchant named Rasolo had some information|"); + $x = append($x, "@str@about the Diamond of Shadow.|"); + $x = append($x, "@str@Apparently it was owned by an invisible warrior, who I|"); + $x = append($x, "@str@needed a special ring to see.|"); + $x = append($x, "@str@Rasolo owned such a ring, but would only trade it in return|"); + $x = append($x, "@str@for a gilded cross stolen from him by a bandit named|"); + $x = append($x, "@str@Laheeb.|"); + $x = append($x, "@dbl@I need to find @dre@Laheeb's loot@dbl@ and retrieve the stolen @dre@gilded@dbl@|"); + $x = append($x, "@dre@cross@dbl@.|"); + } else { + $x = append($x, "@dbl@I can use the @dre@scrying glasses@dbl@ to help find the|"); + $x = append($x, "@dre@Diamond of Shadow@dbl@.|"); + } + ~quest_journal($n, $x); + return; +} + +// Stage 10 +$x = append($x, "@str@I found all four diamonds using this spell|"); +if (%deserttreasure = 10) { + $x = append($x, "@dbl@Now that I have recovered all of the @dre@Diamonds of@dbl@|"); + $x = append($x, "@dre@Azzanadra@dbl@ I should take them all to @dre@Eblis@dbl@ and find out what|"); + $x = append($x, "@dbl@is so special about them.|"); +} + +// Stage 11 +if (%deserttreasure = 11) { + $x = append($x, "@dbl@I should explore the @dre@pyramid@dbl@ and see what @dre@treasure@dbl@ awaits|"); + $x = append($x, "@dbl@me!|"); + ~quest_journal($n, $x); + return; +} + +// Stage 100 (Quest Complete) +if (%deserttreasure = 100) { + $x = append($x, "@str@At the heart of the pyramid I found a strange being, who|"); + $x = append($x, "@str@gave me some powerful new magic spells.|"); + $x = append($x, "@str@I can switch between my old spells and my new spells any|"); + $x = append($x, "@str@time by using the altar there, and can avoid the traps by|"); + $x = append($x, "@str@using the secret passage.|"); + $x = append($x, "|"); + $x = append($x, "|"); + $x = append($x, "QUEST COMPLETE!"); + ~quest_journal($n, $x); + return; +} \ No newline at end of file From 4e19925d4838ed01e868f62d7d08303c667e728b Mon Sep 17 00:00:00 2001 From: Ovenbread Date: Sat, 16 May 2026 23:03:55 -0700 Subject: [PATCH 2/4] Extend archaeological expert from digsite. --- .../scripts/archaeological_expert.rs2 | 63 +++++++++++++++++++ .../scripts/arcaeological_expert.rs2 | 2 +- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 scripts/quests/quest_deserttreasure/scripts/archaeological_expert.rs2 diff --git a/scripts/quests/quest_deserttreasure/scripts/archaeological_expert.rs2 b/scripts/quests/quest_deserttreasure/scripts/archaeological_expert.rs2 new file mode 100644 index 0000000000..0d96eabf30 --- /dev/null +++ b/scripts/quests/quest_deserttreasure/scripts/archaeological_expert.rs2 @@ -0,0 +1,63 @@ +[label,archaeological_expert_desert_treasure] +switch_int (%deserttreasure) { + case 1 : + @terry_quest_stage_1; + case 2 : + @terry_quest_stage_2; + case 3 : + @terry_quest_stage_3; + case 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 : + @terry_quest_stage_4_plus; + case default : + @archaeological_expert_quest_complete; +} + +[label,terry_quest_stage_4_plus] +~chatnpc("Hello again.|Was that translation any use to Asgarnia?"); +~chatplayer("I think it was, thanks!"); + +[label,terry_quest_stage_3] +if (inv_total(inv, four_diamonds_translation_primer) >= 1) { + @terry_stage_3_has_translation; +} else { + @terry_stage_3_lost_translation; +} + +[label,terry_stage_3_has_translation] +~chatnpc("Hello again.|Was that translation any use to Asgarnia?"); +~chatplayer("I, uh, kind of didn't take it to him yet..."); +~chatnpc("Whyever not?|You're the strangest delivery I've ever met!"); + +[label,terry_stage_3_lost_translation] +~chatplayer("I lost that translation you gave me..."); +~chatnpc("Oh, no matter, I mostly remember what it said anyway!|Here you go!"); +inv_add(inv, four_diamonds_translation_primer, 1); + +[label,terry_quest_stage_2] +inv_add(inv, four_diamonds_translation_primer, 1); +~chatnpc("There you go, that book contains the sum of my|translating ability. If you would be so kind as to take|that back to Asgarnia, I think it will reassure him that|he is on the"); +~chatnpc("right track for a find of great archaeological importance!"); +~chatplayer("Wow! You write really quickly don't you?"); +~chatnpc("What can I say? It's a skill I picked up through my|many years of taking field notes!"); +if (%deserttreasure = 2) { + %deserttreasure = 3; +} + +[label,terry_quest_stage_1] +~chatplayer("Hello, are you Terry Balando?"); +~chatnpc("That's right, who wants to know...?"); +~chatnpc("Ah yes, I recognise you! You're the fellow who found that|strange artefact about Zaros for the museum, aren't you?|What can I do for you now?"); +~chatplayer("That's right. I was in the desert down by the|Bedabin Camp, and I found an archaeologist who asked|me to deliver this to you."); +~chatnpc("You spoke to the legendary Asgarnia Smith???|Quickly, let me see what he had to give you! He is|always at the forefront of archaeological breakthroughs!"); +inv_del(inv, four_diamonds_etchings, 1); +~chatplayer("So what does the inscription say? Anything interesting?"); +~chatnpc("This... this is fascinating! These cuneiforms seem to|predate even the settlement we are excavating here...|Yes, yes, this is most interesting indeed!"); +~chatplayer("Can you translate it for me?"); +~chatnpc("Well, I am not familiar with this particular language, but|the similarities inherent in the pictographs seem to show|a prevalent trend towards a syllabary consistent with|the phonemes we have discovered in this excavation!"); +~chatplayer("Um... So, can you translate it for me or not?"); +~chatnpc("Well, unfortunately this is the only example of this|particular language I have ever seen, but I might be|able to make a rough translation, of sorts..."); +~chatnpc("It might be slightly obscure on the finer details, but it|should be good enough to understand the rough meaning|of what was originally written. Please, just wait a|moment, I will write up what I can"); +~chatnpc("translate into a journal for you. Then you can take it|back to Asgarnia, I think he will be extremely|interested in the translation!"); +if (%deserttreasure = 1) { + %deserttreasure = 2; +} diff --git a/scripts/quests/quest_itexam/scripts/arcaeological_expert.rs2 b/scripts/quests/quest_itexam/scripts/arcaeological_expert.rs2 index a3df4384d7..e5f3634e37 100644 --- a/scripts/quests/quest_itexam/scripts/arcaeological_expert.rs2 +++ b/scripts/quests/quest_itexam/scripts/arcaeological_expert.rs2 @@ -2,7 +2,7 @@ def_int $progress = ~itexam_progress; if ($progress = ^itexam_complete) { - @archaeological_expert_quest_complete; + @archaeological_expert_desert_treasure; // Previously archaeological_expert_quest_complete } else if ($progress < ^itexam_mineshaft_permit) { ~chatplayer("Hello. Who are you?"); ~chatnpc("Good day to you. My name is Terry Balando; I am an expert on digsite finds."); From c7862aeaf7ce35a7715eacd4e1ddd001b07349b0 Mon Sep 17 00:00:00 2001 From: Ovenbread Date: Mon, 18 May 2026 12:17:38 -0700 Subject: [PATCH 3/4] Some key final parts coded as they can be rare. --- scripts/_unpack/377/all.varbit | 185 ------------------ scripts/_unpack/377/all.varp | 9 - .../configs/deserttreasure.constant | 16 ++ .../configs/deserttreasure.varbit | 184 +++++++++++++++++ .../configs/deserttreasure.varp | 8 + .../scripts/bartender.rs2 | 116 +++++++++++ .../scripts/deserttreasure_journal.rs2 | 7 +- .../scripts/quest_deserttreasure.rs2 | 80 ++++++++ 8 files changed, 408 insertions(+), 197 deletions(-) create mode 100644 scripts/quests/quest_deserttreasure/configs/deserttreasure.constant create mode 100644 scripts/quests/quest_deserttreasure/configs/deserttreasure.varbit create mode 100644 scripts/quests/quest_deserttreasure/configs/deserttreasure.varp create mode 100644 scripts/quests/quest_deserttreasure/scripts/bartender.rs2 create mode 100644 scripts/quests/quest_deserttreasure/scripts/quest_deserttreasure.rs2 diff --git a/scripts/_unpack/377/all.varbit b/scripts/_unpack/377/all.varbit index a85a155943..30fc8edf0a 100644 --- a/scripts/_unpack/377/all.varbit +++ b/scripts/_unpack/377/all.varbit @@ -1703,191 +1703,6 @@ basevar=alternate_spells startbit=0 endbit=0 -[deserttreasure] -basevar=deserttreasuremain -startbit=0 -endbit=14 - -[fd_trollchild_intro] -basevar=deserttreasurevarbit -startbit=0 -endbit=0 - -[fd_torch_count1] -basevar=deserttreasurevarbit -startbit=1 -endbit=1 - -[fd_torch_count2] -basevar=deserttreasurevarbit -startbit=2 -endbit=2 - -[fd_torch_count3] -basevar=deserttreasurevarbit -startbit=3 -endbit=3 - -[fd_torch_count4] -basevar=deserttreasurevarbit -startbit=4 -endbit=4 - -[fd_firechest] -basevar=deserttreasurevarbit -startbit=5 -endbit=5 - -[fd_magiclog] -basevar=deserttreasurevarbit -startbit=6 -endbit=17 - -[fd_steelbar] -basevar=deserttreasurevarbit -startbit=18 -endbit=23 - -[fd_glass] -basevar=deserttreasurevarbit -startbit=24 -endbit=29 - -[fd_bones] -basevar=deserttreasurevarbit -startbit=30 -endbit=30 - -[fd_ash] -basevar=deserttreasurevarbit -startbit=31 -endbit=31 - -[fd_charcoal] -basevar=deserttreasurevarbit2 -startbit=0 -endbit=0 - -[fd_bloodrune] -basevar=deserttreasurevarbit2 -startbit=1 -endbit=1 - -[fdvw_cutscene] -basevar=deserttreasurevarbit2 -startbit=2 -endbit=2 - -[fdvw_subquest] -basevar=deserttreasurevarbit2 -startbit=3 -endbit=6 - -[fd_fw_warningspam] -basevar=deserttreasurevarbit2 -startbit=7 -endbit=7 - -[fd_killed_ninja] -basevar=deserttreasurevarbit2 -startbit=8 -endbit=8 - -[fd_killed_firewarrior] -basevar=deserttreasurevarbit2 -startbit=9 -endbit=9 - -[fd_icewarrior_dead] -basevar=deserttreasurevarbit2 -startbit=10 -endbit=10 - -[fd_icewarrior_trollskilled] -basevar=deserttreasurevarbit2 -startbit=11 -endbit=15 - -[fd_icewarrior_bootshint] -basevar=deserttreasurevarbit2 -startbit=16 -endbit=16 - -[fd_icewarrior_dadfree] -basevar=deserttreasurevarbit2 -startbit=17 -endbit=17 - -[fd_icewarrior_mumfree] -basevar=deserttreasurevarbit2 -startbit=18 -endbit=18 - -[fd_icewarrior_subquest] -basevar=deserttreasurevarbit2 -startbit=19 -endbit=23 - -[fd_shadowwarrior_quest] -basevar=deserttreasurevarbit2 -startbit=24 -endbit=28 - -[fd_banditchest_disarmed] -basevar=deserttreasurevarbit2 -startbit=29 -endbit=29 - -[fd_shadowwar_intro] -basevar=deserttreasurevarbit2 -startbit=30 -endbit=30 - -[fd_firewargate] -basevar=deserttreasurevarbit2 -startbit=31 -endbit=31 - -[fd_column_fire] -basevar=deserttreasuremain -startbit=15 -endbit=15 - -[fd_column_shadow] -basevar=deserttreasuremain -startbit=16 -endbit=16 - -[fd_column_ice] -basevar=deserttreasuremain -startbit=17 -endbit=17 - -[fd_column_blood] -basevar=deserttreasuremain -startbit=18 -endbit=18 - -[fd_got_zaros_staff] -basevar=deserttreasuremain -startbit=19 -endbit=19 - -[fd_mirror_present] -basevar=deserttreasuremain -startbit=20 -endbit=20 - -[fd_ladder_present] -basevar=deserttreasuremain -startbit=21 -endbit=21 - -[fd_pyramid_timer] -basevar=deserttreasuremain -startbit=22 -endbit=31 - [ics_ent_open] basevar=ics_little_multi startbit=20 diff --git a/scripts/_unpack/377/all.varp b/scripts/_unpack/377/all.varp index 1b71bce220..b756b73633 100644 --- a/scripts/_unpack/377/all.varp +++ b/scripts/_unpack/377/all.varp @@ -728,15 +728,6 @@ transmit=yes [alternate_spells] -[deserttreasuremain] -transmit=yes - -[deserttreasurevarbit] -transmit=yes - -[deserttreasurevarbit2] -transmit=yes - [ics_little_multi] transmit=yes diff --git a/scripts/quests/quest_deserttreasure/configs/deserttreasure.constant b/scripts/quests/quest_deserttreasure/configs/deserttreasure.constant new file mode 100644 index 0000000000..35d05f2c5d --- /dev/null +++ b/scripts/quests/quest_deserttreasure/configs/deserttreasure.constant @@ -0,0 +1,16 @@ +^deserttreasture_not_started = 0 +^deserttreasure_receive_etchings = 1 +^deserttreasure_gave_etchings = 2 +^deserttreasure_received_translation = 3 +^deserttreasure_gave_translation = 4 +^deserttreasure_agreed_help = 5 +^deserttreasure_bought_beer = 6 +^deserttreasure_asked_about_four_diamonds= 7 +^deserttreasure_knows_about_four_diamonds= 8 +^deserttreasure_eblis_start_gathering_ingredients = 9 +^deserttreasure_eblis_to_meet_at_mirrors = 10 // Elbis appears at the mirrors only at 10 +^deserttreasure_start_collecting_diamonds = 11 +^deserttreasure_all_diamonds_held = 12 +^deserttreasure_eblis_talked_to_about_diamonds = 13 // If you skip this its ok. +^deserttreasure_all_diamonds_placed = 14 // pyramid opens +// ^deserttreasure_complete = 15 \ No newline at end of file diff --git a/scripts/quests/quest_deserttreasure/configs/deserttreasure.varbit b/scripts/quests/quest_deserttreasure/configs/deserttreasure.varbit new file mode 100644 index 0000000000..c1feb28ade --- /dev/null +++ b/scripts/quests/quest_deserttreasure/configs/deserttreasure.varbit @@ -0,0 +1,184 @@ +[deserttreasure] +basevar=deserttreasuremain +startbit=0 +endbit=14 + +[fd_trollchild_intro] +basevar=deserttreasurevarbit +startbit=0 +endbit=0 + +[fd_torch_count1] +basevar=deserttreasurevarbit +startbit=1 +endbit=1 + +[fd_torch_count2] +basevar=deserttreasurevarbit +startbit=2 +endbit=2 + +[fd_torch_count3] +basevar=deserttreasurevarbit +startbit=3 +endbit=3 + +[fd_torch_count4] +basevar=deserttreasurevarbit +startbit=4 +endbit=4 + +[fd_firechest] +basevar=deserttreasurevarbit +startbit=5 +endbit=5 + +[fd_magiclog] +basevar=deserttreasurevarbit +startbit=6 +endbit=17 + +[fd_steelbar] +basevar=deserttreasurevarbit +startbit=18 +endbit=23 + +[fd_glass] +basevar=deserttreasurevarbit +startbit=24 +endbit=29 + +[fd_bones] +basevar=deserttreasurevarbit +startbit=30 +endbit=30 + +[fd_ash] +basevar=deserttreasurevarbit +startbit=31 +endbit=31 + +[fd_charcoal] +basevar=deserttreasurevarbit2 +startbit=0 +endbit=0 + +[fd_bloodrune] +basevar=deserttreasurevarbit2 +startbit=1 +endbit=1 + +[fdvw_cutscene] +basevar=deserttreasurevarbit2 +startbit=2 +endbit=2 + +[fdvw_subquest] +basevar=deserttreasurevarbit2 +startbit=3 +endbit=6 + +[fd_fw_warningspam] +basevar=deserttreasurevarbit2 +startbit=7 +endbit=7 + +[fd_killed_ninja] +basevar=deserttreasurevarbit2 +startbit=8 +endbit=8 + +[fd_killed_firewarrior] +basevar=deserttreasurevarbit2 +startbit=9 +endbit=9 + +[fd_icewarrior_dead] +basevar=deserttreasurevarbit2 +startbit=10 +endbit=10 + +[fd_icewarrior_trollskilled] +basevar=deserttreasurevarbit2 +startbit=11 +endbit=15 + +[fd_icewarrior_bootshint] +basevar=deserttreasurevarbit2 +startbit=16 +endbit=16 + +[fd_icewarrior_dadfree] +basevar=deserttreasurevarbit2 +startbit=17 +endbit=17 + +[fd_icewarrior_mumfree] +basevar=deserttreasurevarbit2 +startbit=18 +endbit=18 + +[fd_icewarrior_subquest] +basevar=deserttreasurevarbit2 +startbit=19 +endbit=23 + +[fd_shadowwarrior_quest] +basevar=deserttreasurevarbit2 +startbit=24 +endbit=28 + +[fd_banditchest_disarmed] +basevar=deserttreasurevarbit2 +startbit=29 +endbit=29 + +[fd_shadowwar_intro] +basevar=deserttreasurevarbit2 +startbit=30 +endbit=30 + +[fd_firewargate] +basevar=deserttreasurevarbit2 +startbit=31 +endbit=31 + +[fd_column_fire] +basevar=deserttreasuremain +startbit=15 +endbit=15 + +[fd_column_shadow] +basevar=deserttreasuremain +startbit=16 +endbit=16 + +[fd_column_ice] +basevar=deserttreasuremain +startbit=17 +endbit=17 + +[fd_column_blood] +basevar=deserttreasuremain +startbit=18 +endbit=18 + +[fd_got_zaros_staff] +basevar=deserttreasuremain +startbit=19 +endbit=19 + +[fd_mirror_present] +basevar=deserttreasuremain +startbit=20 +endbit=20 + +[fd_ladder_present] +basevar=deserttreasuremain +startbit=21 +endbit=21 + +[fd_pyramid_timer] +basevar=deserttreasuremain +startbit=22 +endbit=31 diff --git a/scripts/quests/quest_deserttreasure/configs/deserttreasure.varp b/scripts/quests/quest_deserttreasure/configs/deserttreasure.varp new file mode 100644 index 0000000000..fa306b89b2 --- /dev/null +++ b/scripts/quests/quest_deserttreasure/configs/deserttreasure.varp @@ -0,0 +1,8 @@ +[deserttreasuremain] +transmit=yes + +[deserttreasurevarbit] +transmit=yes + +[deserttreasurevarbit2] +transmit=yes \ No newline at end of file diff --git a/scripts/quests/quest_deserttreasure/scripts/bartender.rs2 b/scripts/quests/quest_deserttreasure/scripts/bartender.rs2 new file mode 100644 index 0000000000..7808e9f427 --- /dev/null +++ b/scripts/quests/quest_deserttreasure/scripts/bartender.rs2 @@ -0,0 +1,116 @@ +[opnpc1,fourdiamonds_bartender] +switch_int (%deserttreasure) { + case 0, 1, 2, 3, 4 : + @bartender_quest_early; + case 5 : + @bartender_quest_stage_5; + case 6 : + @bartender_quest_stage_6; + case 7, 8, 9, 10, 11, 12, 13, 14 : + @bartender_quest_stage_7_plus; + case ^deserttreasure_complete : + @bartender_quest_complete; +} + +[label,bartender_quest_early] +~chatnpc("Get out of here. I have nothing to say to the likes of you."); + +[label,bartender_quest_stage_5] +~chatnpc("If you're not buying anything, I have nothing to say|to you."); +@multi2( + "Ask about Desert Treasure", bartender_ask_treasure_unbought, + "Buy a drink", bartender_buy_drink_check +); + +[label,bartender_ask_treasure_unbought] +~chatplayer("As I understand it there's some kind of hidden|treasure in these parts..."); +~chatnpc("Look around . Does it looks like there's any|treasure near here?"); +~chatnpc("If I were you I'd get lost before someone takes a|dislike to your face and removes it for you."); + +[label,bartender_buy_drink_check] +if (inv_total(inv, coins) >= 650) { + @bartender_has_coins; +} else { + @bartender_no_coins; +} + +[label,bartender_has_coins] +~chatnpc("What's that? You wanna buy a beer? It'll cost ya|650 coins."); +@multi2( + "Buy a beer", bartender_confirm_purchase, + "Don't buy anything", bartender_cancel_purchase +); + +[label,bartender_confirm_purchase] +inv_del(inv, coins, 650); +inv_add(inv, beer, 1); +if (%deserttreasure = 5) { + %deserttreasure = 6; +} +~chatnpc("There you go. Now get out, we don't like your sort|around here."); + +[label,bartender_cancel_purchase] +~chatnpc("Get out of my bar then! We don't like your sort|round here!"); + +[label,bartender_no_coins] +~chatnpc("You ain't got the 650 coins it costs to buy it, and|I'm glad 'cos I didn't want to serve you anyway."); + + +[label,bartender_quest_stage_6] +~chatnpc("You've had your drink, now get out of here. I have|nothing to say to the-"); +~chatplayer("No, Wait! Look, I'm here on an archaeological|expedition for the Museum of Varrock."); +~chatplayer("I am only here looking for artefacts..."); +~chatnpc("Oh really? Our inheritance is only sand and death.|What do you expect to find out here in this desert|forsaken by the gods?"); +@multi3( + "I heard about treasure...", bartender_about_treasure, + "I heard about four diamonds...", bartender_about_diamonds, + "I heard about a fortress...", bartender_about_fortress +); + +[label,bartender_about_treasure] +~chatplayer("As I understand it there's some kind of hidden|treasure in these parts..."); +~chatnpc("Look around . Does it looks like there's any|treasure near here?"); +~chatnpc("If I were you I'd get lost before someone takes a|dislike to your face and removes it for you."); + +[label,bartender_about_diamonds] +~chatplayer("I heard a rumour about four diamonds or crystals..."); +~chatnpc("The four diamonds of Azzanadra??? How came you to|know of this?"); +~chatplayer("You've heard of them then?"); +~chatnpc("It's just a fairy tale for children. Maybe one of the|village elders might know more, but it's not really|something I care about."); +~chatnpc("Now get out of here, your sort isn't welcome in my|bar."); +if (%deserttreasure = 6) { + %deserttreasure = 7; +} + +[label,bartender_about_fortress] +~chatplayer("Certain things have led me to believe there may be|some kind of ruined fortress around here..."); +~chatnpc("Doubt it. What in the world would someone need to|guard against in the middle of this desert?"); +~chatnpc("A bad attack of sand? I think you're on the wrong|track, mister so-called archaeologist."); + + +[label,bartender_quest_stage_7_plus] +@bartender_stage_7_bought; + +[label,bartender_stage_7_bought] +~chatnpc("You've had your drink, now get out of here. I have|nothing to say to the-"); +~chatplayer("No, Wait! Look, I'm here on an archaeological|expedition for the Museum of Varrock."); +~chatplayer("I am only here looking for artefacts..."); +~chatnpc("Oh really? Our inheritance is only sand and death.|What do you expect to find out here in this desert|forsaken by the gods?"); +@multi4( + "I heard about treasure...", bartender_about_treasure, + "I heard about four diamonds...", bartender_about_diamonds, + "I heard about a fortress...", bartender_about_fortress, + "I heard of the Diamonds of Azzanadra.", bartender_about_azzanadra_legend +); + +[label,bartender_about_azzanadra_legend] +~chatplayer("Tell me all you know about the Diamonds of Azzanadra."); +~chatnpc("Not that I think it's any of your business, but when|I was a child I remember hearing the legend."); +~chatnpc("I don't recall it particularly well, other than they|are said to contain an incredible power."); +~chatnpc("If you really want to hear more about it you'd be best|off finding someone who cares about the past, and the|history of this area, and stop bothering me."); +if (%deserttreasure = 7) { + %deserttreasure = 8; +} + +[label,bartender_quest_complete] +~chatnpc("So you're the that freed Azzanadra, huh?|Fair play to ya. What will you have?"); \ No newline at end of file diff --git a/scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 b/scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 index a010cad984..33a1fe24e2 100644 --- a/scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 +++ b/scripts/quests/quest_deserttreasure/scripts/deserttreasure_journal.rs2 @@ -4,7 +4,7 @@ def_string $n = "Desert Treasure"; // ::tele 0,49,47 // fd_ means four diamonds -// fd_fw_warningspam - I think this is the warning the fire warrior doing shit +// fd_fw_warningspam - I think this is the warning for the torch lighting warnings? // I need the following rsprox // - What happens if I try to enter the smokey well before starting DT? // https://forums.d2jsp.org/topic.php?t=50680900 "it says he doesn't wanna go in for no reason..." @@ -125,7 +125,7 @@ if (%deserttreasure = 4) { return; } -// Stage 5 +// Stage 5,6,7 $x = append($x, "@str@The archaeologist I met in the desert seemed to think that|"); $x = append($x, "@str@there was some hidden treasure in the desert somewhere,|"); $x = append($x, "@str@I agreed to help him find it in return for a fifty percent|"); @@ -137,7 +137,7 @@ if (%deserttreasure = 5) { return; } -// Stage 6 +// Stage 8 $x = append($x, "@str@I headed South and found a Bandit Camp.|"); $x = append($x, "@str@After some searching, the barman let slip some|"); $x = append($x, "@str@information about the 'Four Diamonds of Azzanadra'.|"); @@ -148,6 +148,7 @@ if (%deserttreasure = 6) { ~quest_journal($n, $x); return; } + // Stage 7 $x = append($x, "@str@I asked around the Bandit Camp and discovered someone|"); $x = append($x, "@str@who was willing to help me find the diamonds, by using a|"); diff --git a/scripts/quests/quest_deserttreasure/scripts/quest_deserttreasure.rs2 b/scripts/quests/quest_deserttreasure/scripts/quest_deserttreasure.rs2 new file mode 100644 index 0000000000..dc41a12057 --- /dev/null +++ b/scripts/quests/quest_deserttreasure/scripts/quest_deserttreasure.rs2 @@ -0,0 +1,80 @@ + + + + +// Stage 10 + +[proc,desert_treasure_oblix_check](obj $last_useitem, obj $pillar_object)(boolean) +if (last_useitem = fd_blood_diamond | last_useitem = fd_icediamond | last_useitem = fd_diamond_fire | last_useitem = fd_dark_diamond ) { + if (stat_base(magic) < 50) { + mes("You are not a powerful enough mage to breach the protective aura."); + mes("You need a magic level of at least 50 to enter the Pyramid."); + return (false); + } + if (%deserttreasure < 10) { + // INAUTHENTIC + // Maybe possible to get diamond and place them into the column immediately? + mes("You need all 4 diamonds with you."); + return (false); + } + if (last_useitem = $pillar_object) { + mes("The diamond is absorbed into the pillar."); + return (true); + } else { + mes("That doesn't appear to be the correct diamond..."); + } +} else { + ~displaymessage(^dm_default); + return (false); +} + + +[oplocu,desert_treasure_oblix1] +if (~desert_treasure_oblix_check(last_useitem, fd_blood_diamond) = true) { + inv_del(inv, last_useitem, 1); + %fd_column_blood = 1; +} + +[oplocu,desert_treasure_oblix2] +if (~desert_treasure_oblix_check(last_useitem, fd_diamond_fire) = true) { + inv_del(inv, last_useitem, 1); + %fd_column_fire = 1; +} + +[oplocu,desert_treasure_oblix3] +if (~desert_treasure_oblix_check(last_useitem, fd_icediamond) = true) { + inv_del(inv, last_useitem, 1); + %fd_column_ice = 1; +} + +[oplocu,desert_treasure_oblix4] +if (~desert_treasure_oblix_check(last_useitem, fd_dark_diamond) = true) { + inv_del(inv, last_useitem, 1); + %fd_column_shadow = 1; +} + +// Stage 14 + +[oploc1,four_diamonds_door_1] +if (%deserttreasure = ^deserttreasure_all_diamonds_placed) { + +} else { + mes("A mystical power has sealed this door..."); +} +[oploc1,four_diamonds_door_mirror] +if (%deserttreasure = ^deserttreasure_all_diamonds_placed) { + +} else { + mes("A mystical power has sealed this door..."); +} + + +// Stage Complete + +// What this fuck is this typo +[oploc1,desert_trasure_back_door_skew] +if (%deserttreasure = ^deserttreasure_complete) { + +} else { + mes("This passage does not seem to lead anywhere..."); +} \ No newline at end of file From b2f869c39230eebf8fc022aa31adf4150ca80507 Mon Sep 17 00:00:00 2001 From: Ovenbread Date: Mon, 18 May 2026 13:44:34 -0700 Subject: [PATCH 4/4] Added the translation primer book. --- scripts/general/scripts/book.rs2 | 2 ++ .../scripts/archaeologist.rs2 | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/scripts/general/scripts/book.rs2 b/scripts/general/scripts/book.rs2 index aeb29fd95b..7171ed6fcc 100644 --- a/scripts/general/scripts/book.rs2 +++ b/scripts/general/scripts/book.rs2 @@ -19,6 +19,7 @@ switch_obj (%open_book) { case book_of_binding : @book_flip_page(^book_direction_backward, 0, 4, book_of_binding_page); case elemental_workshop_shield_book : @book_flip_page(^book_direction_backward, 0, 1, elemental_shield_book); case golem_notes : @book_flip_page(^book_direction_backward, 0, 9, golem_notes); + case four_diamonds_translation_primer : @book_flip_page(^book_direction_backward, 0, 9, four_diamonds_translation_primer_book); case rcu_instruction_book : @book_flip_page(^book_direction_backward, 0, ^abyssal_notes_book_total_pages, rcu_instruction_book); } p_delay(0); @@ -41,6 +42,7 @@ switch_obj (%open_book) { case book_of_binding : @book_flip_page(^book_direction_forward, 0, 4, book_of_binding_page); case elemental_workshop_shield_book : @book_flip_page(^book_direction_forward, 0, 1, elemental_shield_book); case golem_notes : @book_flip_page(^book_direction_forward, 0, 9, golem_notes); + case four_diamonds_translation_primer : @book_flip_page(^book_direction_forward, 0, 9, four_diamonds_translation_primer_book); case rcu_instruction_book : @book_flip_page(^book_direction_forward, 0, ^abyssal_notes_book_total_pages, rcu_instruction_book); } p_delay(0); diff --git a/scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 b/scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 index 73b1697fbe..ba1165ff63 100644 --- a/scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 +++ b/scripts/quests/quest_deserttreasure/scripts/archaeologist.rs2 @@ -112,7 +112,23 @@ if (inv_total(inv, four_diamonds_translation_primer) >= 1) { "Don't read book", archaeologist_dont_read_book ); +[opheld1,four_diamonds_translation_primer] +@archaeologist_read_book; + [label,archaeologist_read_book] +%book_page = 0; +%open_book = four_diamonds_translation_primer; +@book_flip_page(0, 0, 5, four_diamonds_translation_primer_book); + +[proc,four_diamonds_translation_primer_book] +switch_int (%book_page) { + case 0 : ~book("Translation Primer", "This is a rough|translation of the stone|tablet brought to me by|courier earlier today.|||The cuneiforms of this|particular tablet are far|different to anything I|have previously seen in|my career as an|archaeological expert.||Where possible I have|given as accurate a|translation as possible, but|some of the words I have|attempted to translate|hold different meanings|depending upon their|intonation and context;|Due to my unfamiliarity"); + case 1 : ~book("Translation Primer", "with this language, I have|given possible translations|for these words wherever|I have encountered them.|Wherever I have a word|in brackets, it is a word|which has many meanings|depending on the context,|although the general|meaning should be clear|to even a casual study.|||Hopefully this translation|will help you in your|excavations Asgarnia, and|as usual I look forward|to seeing what relics you|bring back to the|Museum of Varrock this|time!|Your friend, as always,"); + case 2 : ~book("Translation Primer", "Terry Balando|||||||||||Translation follows:|||(There are some missing|sentence fragments here,|presumably from a stone|tablet preceding this one|which you have not yet|discovered)||...the permanent"); + case 3 : ~book("Translation Primer", "(exile/journey) of the|people ended.|And so it came to pass,|that deep in the|(fiery/uncomfortable)|desert, the gods|(argued/decided) amongst|themselves that the|(fortress/home) would be|the (selected/chosen) place|that would|(imprison/conceal) the|(wealth/power).|Thus (guarded/protected)|by the (unusually archaic|word here, I believe it|means either the sick or|the dead depending on|context) and|(defended/trapped) by the|(diamonds/crystals) of|(this word is"); + case 4 : ~book("Translation Primer", "untranslatable). So it was|that the gods left the four|(diamonds/crystals) as the|(key/secret).|(Guarded/Protected) by|the (again, this word has|no modern equivalent)|and held by the|(worthy/strong) so that|the (wealth/power) might|forever be|(imprisoned/concealed).||||||||||"); + case 5 : ~book("Translation Primer", "There seems to be some|further missing|information continued|onto a further tablet, but|from this preliminary|translation I think you|may be onto something|very big indeed!|||"); +} // Custom trigger context used to open interfaces safely in modern systems //~open_book_interface(fancy_book_3_49);