summaryrefslogtreecommitdiff
path: root/npc/009-2
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-04-09 13:33:57 -0300
committerJesusaves <cpntb1@ymail.com>2021-04-09 13:33:57 -0300
commitcf18ce071c79ae37e14ea38943e0b1d88da70a7b (patch)
treef9159c9b60b3018300dd22ffba0d797bc5e828e5 /npc/009-2
parent8a4bf716002a017de77fe7df301ef8e4aaf00a2e (diff)
downloadserverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.tar.gz
serverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.tar.bz2
serverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.tar.xz
serverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.zip
Override
Diffstat (limited to 'npc/009-2')
-rw-r--r--npc/009-2/_import.txt25
-rw-r--r--npc/009-2/_warps.txt24
-rwxr-xr-xnpc/009-2/airlia.txt242
-rwxr-xr-xnpc/009-2/alan.txt216
-rwxr-xr-xnpc/009-2/bernard.txt124
-rwxr-xr-xnpc/009-2/doctor.txt86
-rwxr-xr-xnpc/009-2/drunks.txt14
-rwxr-xr-xnpc/009-2/entertainer.txt40
-rwxr-xr-xnpc/009-2/inspector.txt139
-rwxr-xr-xnpc/009-2/kfahr.txt1071
-rwxr-xr-xnpc/009-2/lena.txt119
-rwxr-xr-xnpc/009-2/mapflags.txt2
-rwxr-xr-xnpc/009-2/misc.txt51
-rwxr-xr-xnpc/009-2/nicholas.txt401
-rwxr-xr-xnpc/009-2/nurse.txt538
-rwxr-xr-xnpc/009-2/olana.txt238
-rwxr-xr-xnpc/009-2/peter.txt141
-rwxr-xr-xnpc/009-2/richard.txt6
-rwxr-xr-xnpc/009-2/selim.txt173
-rwxr-xr-xnpc/009-2/shops.txt14
-rwxr-xr-xnpc/009-2/trader.txt150
-rwxr-xr-xnpc/009-2/waitress.txt71
-rwxr-xr-xnpc/009-2/wyara.txt553
-rwxr-xr-xnpc/009-2/yalina.txt10
24 files changed, 4448 insertions, 0 deletions
diff --git a/npc/009-2/_import.txt b/npc/009-2/_import.txt
new file mode 100644
index 00000000..668474fa
--- /dev/null
+++ b/npc/009-2/_import.txt
@@ -0,0 +1,25 @@
+// Map 009-2: Hurnscald Indoor
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/009-2/_warps.txt",
+"npc/009-2/airlia.txt",
+"npc/009-2/alan.txt",
+"npc/009-2/bernard.txt",
+"npc/009-2/doctor.txt",
+"npc/009-2/drunks.txt",
+"npc/009-2/entertainer.txt",
+"npc/009-2/inspector.txt",
+"npc/009-2/kfahr.txt",
+"npc/009-2/lena.txt",
+"npc/009-2/mapflags.txt",
+"npc/009-2/misc.txt",
+"npc/009-2/nicholas.txt",
+"npc/009-2/nurse.txt",
+"npc/009-2/olana.txt",
+"npc/009-2/peter.txt",
+"npc/009-2/richard.txt",
+"npc/009-2/selim.txt",
+"npc/009-2/shops.txt",
+"npc/009-2/trader.txt",
+"npc/009-2/waitress.txt",
+"npc/009-2/wyara.txt",
+"npc/009-2/yalina.txt",
diff --git a/npc/009-2/_warps.txt b/npc/009-2/_warps.txt
new file mode 100644
index 00000000..ec9660d9
--- /dev/null
+++ b/npc/009-2/_warps.txt
@@ -0,0 +1,24 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 009-2: Hurnscald Indoor warps
+009-2,75,23,0 warp #009-2_75_23 1,0,009-2,74,47
+009-2,95,30,0 warp #009-2_95_30 0,0,009-1,59,34
+009-2,130,26,0 warp #009-2_130_26 0,0,009-1,71,31
+009-2,144,26,0 warp #009-2_144_26 1,0,009-2,144,43
+009-2,144,42,0 warp #009-2_144_42 1,0,009-2,144,25
+009-2,155,48,0 warp #009-2_155_48 1,0,009-2,155,63
+009-2,114,46,0 warp #009-2_114_46 1,0,009-2,114,70
+009-2,50,55,0 warp #009-2_50_55 0,0,009-1,35,31
+009-2,74,53,0 warp #009-2_74_53 0,0,009-2,143,78
+009-2,74,46,0 warp #009-2_74_46 1,0,009-2,75,22
+009-2,114,78,0 warp #009-2_114_78 0,0,009-1,72,45
+009-2,114,69,0 warp #009-2_114_69 1,0,009-2,114,45
+009-2,149,67,0 warp #009-2_149_67 0,0,009-1,80,32
+009-2,143,77,0 warp #009-2_143_77 0,0,009-2,74,52
+009-2,155,62,0 warp #009-2_155_62 1,0,009-2,155,46
+009-2,182,67,0 warp #009-2_182_67 1,0,009-1,91,47
+009-2,147,90,0 warp #009-2_147_90 0,0,009-3,173,21
+009-2,27,107,0 warp #009-2_27_107 0,0,009-1,58,47
+009-2,46,50,0 warp #009-2_46_50 0,0,009-2,76,78
+009-2,77,78,0 warp #009-2_77_78 0,0,009-2,47,50
+009-2,31,91,0 warp #009-2_31_91 0,0,009-1,59,41
+009-2,38,105,0 warp #009-2_38_105 0,0,009-7,21,20
diff --git a/npc/009-2/airlia.txt b/npc/009-2/airlia.txt
new file mode 100755
index 00000000..7996181f
--- /dev/null
+++ b/npc/009-2/airlia.txt
@@ -0,0 +1,242 @@
+
+
+
+009-2,123,71,0 script Airlia NPC108,{
+ // Subquest 1a: Caretaker's daughter (initial, once)
+ @LETTER_REWARD_GOLD_INITIAL = 1000;
+ @LETTER_REWARD_EXP_INITIAL = 2000;
+
+ @Q_STATUS_RECIEVED_FIRST_LETTER = 2;
+ @Q_STATUS_DELIVERED_FIRST_LETTER = 3;
+
+ // Subquest 1b: Continued delivery of letters (unlimited)
+ @LETTER_REWARD_GOLD = 42;
+ @LETTER_REWARD_EXP = 500;
+
+ @Q_STATUS_HAS_NO_NEW_LETTER = 4;
+ @Q_STATUS_HAS_NEW_LETTER = 5;
+
+ // Subquest 2a: Fetch those undead drops (initial, once)
+ // TODO: Set sane values below
+ @FETCH_AMOUNT_INITIAL = 50;
+ @FETCH_LABEL_INITIAL$ = "Bone";
+ @FETCH_REWARD_GOLD_INITIAL = 5000;
+ @FETCH_REWARD_EXP_INITIAL = 50000;
+
+ @Q_STATUS_HELP_AIRLIA = 1;
+ @Q_STATUS_INITIAL_FETCH_REWARDED = 2;
+
+ // Subquest 2b: Fetch those undead drops (unlimited)
+ // TODO: Set sane values below
+ @FETCH_AMOUNT = 10;
+ @FETCH_LABEL$ = "DiseasedHeart";
+ @FETCH_REWARD_GOLD = 6000;
+ @FETCH_REWARD_EXP = 40000;
+
+
+ if (QUEST_Airlia == @Q_STATUS_INITIAL_FETCH_REWARDED) goto L_Rewarded;
+ if (QUEST_Airlia == @Q_STATUS_HELP_AIRLIA) goto L_Fetch;
+ if (QUEST_Graveyard_Caretaker > @Q_STATUS_RECIEVED_FIRST_LETTER) goto L_Intro;
+ goto L_Caretaker;
+
+L_Caretaker:
+ mes "[Airlia]";
+ mes "\"Greetings. Do you need a housing permit, or to license your mount?\"";
+ next;
+ if (QUEST_Graveyard_Caretaker < @Q_STATUS_RECIEVED_FIRST_LETTER)
+ menu
+ "Sorry, no.", L_Next,
+ "My what?", L_mount;
+ if (QUEST_Graveyard_Caretaker == @Q_STATUS_RECIEVED_FIRST_LETTER)
+ menu
+ "Sorry, no.", L_Next,
+ "I have a letter from your father.", L_first_reward,
+ "My what?", L_mount;
+ goto L_Next;
+
+L_Next:
+ mes "[Airlia]";
+ mes "\"Nobody ever does...\"";
+ close;
+
+L_mount:
+ // The mention of mounts will certainly gather some interest from players,
+ // this section may be extended.
+ close;
+
+L_first_reward:
+ mes "[Airlia]";
+ mes "\"Oh! Thank you very, very much! Please take this for your trouble.\"";
+ if (@LETTER_REWARD_GOLD_INITIAL > 0)
+ mes "[" + @LETTER_REWARD_GOLD_INITIAL + " GP]";
+ if (@LETTER_REWARD_EXP_INITIAL > 0)
+ mes "[" + @LETTER_REWARD_EXP_INITIAL + " experience points]";
+ Zeny = Zeny + @LETTER_REWARD_GOLD_INITIAL;
+ getexp @LETTER_REWARD_EXP_INITIAL, 0;
+ QUEST_Graveyard_Caretaker = @Q_STATUS_DELIVERED_FIRST_LETTER;
+ close;
+
+L_later_rewards:
+ mes "[Airlia]";
+ mes "\"Oh! Thank you very, very much! Please take this for your trouble.\"";
+ if (@LETTER_REWARD_GOLD > 0)
+ mes "[" + @LETTER_REWARD_GOLD + " GP]";
+ if (@LETTER_REWARD_EXP > 0)
+ mes "[" + @LETTER_REWARD_EXP + " experience points]";
+ Zeny = Zeny + @LETTER_REWARD_GOLD;
+ getexp @LETTER_REWARD_EXP, 0;
+ QUEST_Graveyard_Caretaker = @Q_STATUS_HAS_NO_NEW_LETTER;
+ close;
+
+L_Intro:
+ mes "[Airlia]";
+ mes "\"My poor father, doomed to that awful cemetery.\"";
+ next;
+
+ // CASE REMOVED:
+ // This step is pointless and just forces the player to make a selection that doesn't effect anything.
+ // ALSO it misses the case where QUEST_Graveyard_Caretaker == 3, in this case it proceeds to the message without wasting player clicks
+ // Removing this check will make execution the same for QUEST_Graveyard_Caretaker == 3 and QUEST_Graveyard_Caretaker == 4
+ // If for some reason this is desireable, uncomment it and make sure to catch the extra case mentioned
+ //
+ //if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NO_NEW_LETTER)
+ // menu
+ // "...", -;
+
+ if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER)
+ menu
+ "...", L_Next3,
+ "Oh, I have a letter from him.", L_later_rewards;
+ goto L_Next3;
+
+L_Next3:
+ mes "[Airlia]";
+ mes "\"You know, there are many who believe that each time the undead rise after being killed, they lose mana.";
+ mes "Eventually, there will not be enough mana for them to rise again and they can be at rest. Do you believe this is true?\"";
+ next;
+ menu
+ "I believe so, yes.", L_Intro_mana_loss,
+ "Maybe...", L_Intro_mana_loss,
+ "No, that is not proven.", L_Next1;
+
+L_Next1:
+ mes "[Airlia]";
+ mes "\"Oh...\"";
+ close;
+
+L_Intro_mana_loss:
+ mes "[Airlia]";
+ mes "\"When I am not working, I recruit help for the esteemed Fighters of the Undead, or FoU.";
+ mes "They are an official group effort of the Warriors' Guild and Magicians, you know, a very prestigious group.\"";
+ next;
+ menu
+ "...", L_Intro_fou,
+ "I have heard of them.", L_Intro_fou,
+ "Keep up the good work. I have to go now, bye.", L_close;
+
+L_Intro_fou:
+ mes "[Airlia]";
+ mes "\"If we drain those evil creatures of their mana, I can get my father back. He is getting very old. Will you help us?\"";
+ next;
+ menu
+ "Of course I will.", L_Intro_fight,
+ "Sure, I guess.", L_Intro_fight,
+ "Thanks, but no thanks. I have other business to attend to.", L_close;
+
+L_Intro_fight:
+ mes "[Airlia]";
+ mes "\"Great, just kill any of the undead creatures you can and bring me proof of your work, and I will put in a word for you with the guild.\"";
+ next;
+ menu
+ "I'm on it.", L_Next2,
+ "What sort of proof?", L_Intro_proof;
+
+L_Next2:
+ QUEST_Airlia = @Q_STATUS_HELP_AIRLIA;
+ goto L_close;
+
+L_Intro_proof:
+ mes "[Airlia]";
+ mes "\"Let's say " + @FETCH_AMOUNT_INITIAL + " " + getitemlink(@FETCH_LABEL_INITIAL$) + "s. You don't know how much this means to me, thank you.\"";
+ QUEST_Airlia = @Q_STATUS_HELP_AIRLIA;
+ close;
+
+L_Fetch:
+ mes "[Airlia]";
+ mes "\"Thank you for helping my father.\"";
+ next;
+ mes "\"Have you collected the " + @FETCH_AMOUNT_INITIAL + " " + getitemlink(@FETCH_LABEL_INITIAL$) + "?\"";
+
+ // Make sure to check if the player has a letter to deliver.
+ // If the check is not made then there is a bug, where the player
+ // has a letter but has not completed the initial fetch
+ // and is prevented from turing in the letter until the fetch is completed.
+
+ if (QUEST_Graveyard_Caretaker < @Q_STATUS_HAS_NEW_LETTER)
+ menu
+ "Yes.", L_Fetch_initial_reward,
+ "No.", L_close;
+ if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER)
+ menu
+ "I have another letter from your father.", L_later_rewards,
+ "Yes.", L_Fetch_initial_reward,
+ "No.", L_close;
+ goto L_close;
+
+L_Fetch_initial_reward:
+ if (countitem(@FETCH_LABEL_INITIAL$) < @FETCH_AMOUNT_INITIAL) goto L_Fetch_not_enough;
+ mes "[Airlia]";
+ mes "\"Excellent work. You are definitely a great warrior. I will tell the guild of your deeds.\"";
+ if (@FETCH_REWARD_GOLD_INITIAL > 0)
+ mes "[" + @FETCH_REWARD_GOLD_INITIAL + " GP]";
+ if (@FETCH_REWARD_EXP_INITIAL > 0)
+ mes "[" + @FETCH_REWARD_EXP_INITIAL + " experience points]";
+ delitem @FETCH_LABEL_INITIAL$, @FETCH_AMOUNT_INITIAL;
+ Zeny = Zeny + @FETCH_REWARD_GOLD_INITIAL;
+ getexp @FETCH_REWARD_EXP_INITIAL, 0;
+ QUEST_Airlia = @Q_STATUS_INITIAL_FETCH_REWARDED;
+ next;
+ mes "[Airlia]";
+ // TODO: Write the dialogue when I'm not tired...
+ mes "\"Oh, before you leave. We all must do what we can to stop this tragedy.";
+ mes "If you are willing to keep draining the undead of mana, I will give you what gold I can afford as a token of my gratitude.\"";
+ close;
+
+L_Fetch_later_rewards:
+ if (countitem(@FETCH_LABEL$) < @FETCH_AMOUNT)
+ goto L_Fetch_not_enough;
+ mes "[Airlia]";
+ mes "\"Excellent work. You are definitely a great warrior.\"";
+ if (@FETCH_REWARD_GOLD > 0)
+ mes "[" + @FETCH_REWARD_GOLD + " GP]";
+ if (@FETCH_REWARD_EXP > 0)
+ mes "[" + @FETCH_REWARD_EXP + " experience points]";
+ delitem @FETCH_LABEL$, @FETCH_AMOUNT;
+ Zeny = Zeny + @FETCH_REWARD_GOLD;
+ getexp @FETCH_REWARD_EXP, 0;
+ close;
+
+L_Fetch_not_enough:
+ mes "[Airlia]";
+ mes "\"I'm sorry, I didn't realize you couldn't count. Perhaps when I have some free time, I can help you learn if you'd like.\"";
+ close;
+
+L_Rewarded:
+ mes "[Airlia]";
+ mes "\"Thank you for your help.\"";
+ next;
+ mes "\"Have you collected the " + @FETCH_AMOUNT + " " + getitemlink(@FETCH_LABEL$) + "s?\"";
+ if (QUEST_Graveyard_Caretaker < @Q_STATUS_HAS_NEW_LETTER)
+ menu
+ "Yes.", L_Fetch_later_rewards,
+ "No.", L_close;
+ if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER)
+ menu
+ "I have another letter from your father.", L_later_rewards,
+ "Yes.", L_Fetch_later_rewards,
+ "No.", L_close;
+ goto L_close;
+
+L_close:
+ close;
+}
diff --git a/npc/009-2/alan.txt b/npc/009-2/alan.txt
new file mode 100755
index 00000000..5d3279da
--- /dev/null
+++ b/npc/009-2/alan.txt
@@ -0,0 +1,216 @@
+
+009-2,99,23,0 script Alan NPC125,{
+ @Q_MASK = NIBBLE_0_MASK;
+ @Q_SHIFT = NIBBLE_0_SHIFT;
+
+ @Q_status = ((QUEST_Forestbow_state) & @Q_MASK) >> @Q_SHIFT;
+
+ @BROKENLOG_EXP = 15;
+
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ if (@Q_status == 1) goto L_State_1;
+ if (@Q_status == 2) goto L_State_2;
+ if (@Q_status == 3) goto L_State_3;
+ if (@Q_status == 4) goto L_State_4;
+ if (@Q_status == 5) goto L_State_5;
+
+ mes "[Alan]";
+ mes "\"When you want to buy something then please speak to my apprentice. I am only doing special requests.\"";
+ next;
+ if (@inspector == 1)
+ menu
+ "OK, thanks.", L_close,
+ "Can you make me a really good bow?", L_State_0_1,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ menu
+ "OK, thanks.", L_close,
+ "Can you make me a really good bow?", L_State_0_1;
+
+L_State_0_1:
+ mes "[Alan]";
+ mes "\"You mean like one of my legendary forest bows?\"";
+ next;
+ menu
+ "Yes, that would be nice.", L_Next;
+
+L_Next:
+ mes "[Alan]";
+ mes "\"Sorry, I am not making these anymore.\"";
+ next;
+ menu
+ "Oh, too bad.", L_close,
+ "What? Why not?", L_State_0_2;
+
+L_State_0_2:
+ mes "[Alan]";
+ mes "\"The problem is that I am short of material. My forestbows are not made of regular wood, you know.";
+ mes "They are made of special living wood. And only the best logs of living wood are good enough for them.";
+ mes "I used to get these logs from Jack, the lumberjack. But the last time I asked him for a new delivery he said that he would never again get any for me.\"";
+ @Q_status = 1;
+ callsub S_Update_Var;
+ next;
+ menu
+ "Too bad.", L_close,
+ "Did you ask him why?", L_State_0_3;
+
+L_State_0_3:
+ mes "[Alan]";
+ mes "\"Sure I did. But he just told me to leave him alone. Maybe you could ask him what's wrong?\"";
+ next;
+ menu
+ "OK, I'll ask him.", L_close,
+ "I am sure he got his reasons.", L_State_1;
+
+L_State_1:
+ mes "[Alan]";
+ mes "\"Did you already ask Jack why he won't deliver me any more living wood?\"";
+ next;
+ if (@inspector == 1)
+ menu
+ "No, I haven't had the time yet.", L_close,
+ "No, I didn't find him yet.", L_State_1_1,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ menu
+ "No, I haven't had the time yet.", L_close,
+ "No, I didn't find him yet.", L_State_1_1;
+
+L_State_1_1:
+ mes "[Alan]";
+ mes "\"When you leave my shop just go southwest over the village plaza. You can't miss it.\"";
+ goto L_close;
+
+L_State_2:
+ mes "[Alan]";
+ mes "\"Did you already ask Jack why he won't deliver me any more living wood?\"";
+ next;
+ if (@inspector == 1)
+ menu
+ "Yes, I did. He said that the trees turned into dangerous monsters.", L_Next1,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ if (@inspector != 1)
+ menu
+ "Yes, I did. He said that the trees turned into dangerous monsters.", L_Next1;
+ goto L_Next1;
+
+L_Next1:
+ mes "[Alan]";
+ mes "\"Oh, that's really bad news. Maybe you can do his job?";
+ mes "When you kill some of these tree monsters and bring me their wood I can take a look at them.";
+ mes "Maybe you will find a piece of wood that is strong enough to become one of my forest bows.\"";
+ @Q_status = 3;
+ callsub S_Update_Var;
+ goto L_close;
+
+L_State_3:
+ mes "[Alan]";
+ mes "\"How is the hunt going? Did you bring me any wood?\"";
+ if (countitem("RawLog") < 1)
+ goto L_close;
+ next;
+ if (@inspector == 1)
+ menu
+ "Here, take a look!", L_State_3_try,
+ "Yes, but I need it for something else.", L_close,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ menu
+ "Here, take a look!", L_State_3_try,
+ "Yes, but I need it for something else.", L_close;
+
+L_State_3_try:
+ if (countitem("RawLog") < 1)
+ goto L_No_Log;
+ delitem "RawLog", 1;
+ mes "[Alan]";
+ mes "\"Hmmm... looks ok, but is it strong enough?\"";
+ mes "Alan bends the log over his knee.";
+ next;
+ @Temp1 = rand(20);
+ if (@Temp1 == 0) goto L_State_3_success;
+ mes "The log breaks with a loud crack.";
+ getexp @BROKENLOG_EXP, 0;
+ next;
+ mes "[Alan]";
+ mes "\"Sorry, this log was too weak for one of my forest bows. Now it is junk. Give me another.\"";
+ if (countitem("RawLog") < 1)
+ goto L_close;
+ next;
+ menu
+ "Sure, here you go.", L_State_3_try,
+ "Hey! Stop breaking my stuff!", L_close;
+
+L_State_3_success:
+ mes "Alan tries as hard as he can but the log won't bend.";
+ next;
+ mes "[Alan]";
+ mes "\"Aaah! Yes! That is a really fine piece of wood you brought me. It will make an excellent bow!\"";
+ next;
+ @Q_status = 4;
+ callsub S_Update_Var;
+ goto L_State_4;
+
+L_State_4:
+ mes "[Alan]";
+ mes "\"I can make you a really nice forest bow out of this. I just need 10,000 GP for material and work time.\"";
+ next;
+ if (@inspector == 1)
+ menu
+ "10,000??? What a ripoff!", L_close,
+ "Sure, here you go!", L_State_4_pay,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+ menu
+ "10,000??? What a ripoff!", L_close,
+ "Sure, here you go!", L_State_4_pay;
+
+L_State_4_pay:
+ if (Zeny < 10000)
+ goto L_State_4_nocash;
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_State_4_TooMany;
+ Zeny = Zeny - 10000;
+ getitem "ForestBow", 1;
+ @Q_status = 5;
+ callsub S_Update_Var;
+ mes "[Alan]";
+ mes "\"Here you go - have fun with it.\"";
+ goto L_close;
+
+L_State_4_nocash:
+ mes "[Alan]";
+ mes "\"Seems like you are out of cash.\"";
+ goto L_close;
+
+L_State_4_TooMany:
+ mes "[Alan]";
+ mes "\"Seems like you don't have room for this bow. Come back later.\"";
+ goto L_close;
+
+L_State_5:
+ mes "[Alan]";
+ mes "\"I hope you are satisfied with your forest bow. It is one of my best works.\"";
+ if (@inspector != 1)
+ goto L_close;
+ next;
+ menu
+ "I am!", L_close,
+ "Have you seen anything strange recently that might be connected to the robberies?", L_NohMask_Answer;
+
+L_NohMask_Answer:
+ mes "[Alan]";
+ mes "\"No.\"";
+ goto L_close;
+
+L_No_Log:
+ mes "[Alan]";
+ mes "\"Where should I look at? You don't have a raw log.\"";
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+
+S_Update_Var:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(@Q_MASK) | (@Q_status << @Q_SHIFT));
+ return;
+}
diff --git a/npc/009-2/bernard.txt b/npc/009-2/bernard.txt
new file mode 100755
index 00000000..f9eac878
--- /dev/null
+++ b/npc/009-2/bernard.txt
@@ -0,0 +1,124 @@
+009-2,67,79,0 script Bernard NPC117,{
+ if (QL_SOUP >= 6) goto L_Done3;
+ if (QL_SOUP >= 4) goto L_Done2;
+ if (QL_SOUP == 3) goto L_Progress2;
+ if (QL_SOUP == 2) goto L_Done1;
+ if (QL_SOUP == 1) goto L_Progress;
+
+ @temp = rand(2);
+ if(@temp == 1) goto L_Opening1;
+ goto L_Opening0;
+
+L_Opening0:
+ mes "[Bernard]";
+ mes "\"The fields are crawling with maggots. Where is Mikhail? What is taking them so long?";
+ mes "Could I ask a favor of you?\"";
+ next;
+ goto L_Ask;
+
+L_Opening1:
+ mes "[Bernard]";
+ mes "\"The taste of maggots in soup is... unforgettable, they taste simply divine!";
+ mes "I sent someone to kill me some maggots and they have yet to return. Would you help me kill some?\"";
+ next;
+ goto L_Ask;
+
+L_Ask:
+ menu
+ "Yes.", L_Yes,
+ "No.", L_close;
+
+L_Yes:
+ @temp = rand(2);
+ if(@temp == 1) goto L_Req1;
+ goto L_Req0;
+
+L_Req0:
+ mes "[Bernard]";
+ mes "\"Great! I need a Roasted Maggot for my soup.\"";
+ next;
+ goto L_Set;
+
+L_Req1:
+ mes "[Bernard]";
+ mes "\"Bring me a Roasted Maggot. I'll give you something if you do.\"";
+ next;
+ goto L_Set;
+
+L_Set:
+ QL_SOUP = 1;
+ mes "[Bernard]";
+ mes "\"Please bring it to me!\"";
+ goto L_close;
+
+L_Progress:
+ if (countitem("RoastedMaggot") < 1) goto L_NotEnough;
+ mes "[Bernard]";
+ mes "\"Oooh, perfect! It's perfect!";
+ mes "You brought me my Roasted Maggot! Here, have some cake for your troubles.\"";
+ getinventorylist;
+ if (@inventorylist_count - (countitem("RoastedMaggot") == 1) > 99 - (countitem("CherryCake") == 0) ) goto L_TooMany;
+ delitem "RoastedMaggot", 1;
+ getexp 100, 0;
+ getitem "CherryCake", 5;
+ QL_SOUP = 2;
+ next;
+ mes "\"Now let's see...\"";
+ goto L_close;
+
+L_Progress2:
+ if (countitem("MaggotSlime") < 3) goto L_NotEnough1;
+ mes "[Bernard]";
+ mes "\"Nice! They're perfect, just perfect!";
+ mes "You brought me the 3 Maggot Slimes! Here, have some beer as reward.\"";
+ getinventorylist;
+ if ((@inventorylist_count - (countitem("MaggotSlime") == 3) > 99 - (countitem("Beer") == 0) )) goto L_TooMany;
+ delitem "MaggotSlime", 3;
+ getexp 100, 0;
+ getitem "Beer", 3;
+ QL_SOUP = 4;
+ goto L_close;
+
+L_NotEnough:
+ mes "[Bernard]";
+ mes "\"Oh, please hurry and bring me a Roasted Maggot. I'm yearning for maggot soup!\"";
+ goto L_close;
+
+L_NotEnough1:
+ mes "[Bernard]";
+ mes "\"Please do hurry and bring me 3 Maggot Slimes, so I can finish my soup!\"";
+ goto L_close;
+
+L_Done1:
+ mes "[Bernard]";
+ mes "\"Thank you so much!\"";
+ mes "\"But... something is missing to make the soup creamy.\"";
+ next;
+ mes "\"I need 3 Maggot Slimes for that.\"";
+ mes "\"Bring them to me, and I'll give you something nice.\"";
+ QL_SOUP = 3;
+ goto L_close;
+
+L_Done2:
+ mes "[Bernard]";
+ mes "\"I didn't mention it before, but I also put beer in my soup. I hope you like beer as much as I do, because, you see...\"";
+ next;
+ mes "\"Beer is life!\"";
+ goto L_close;
+
+L_Done3:
+ mes "[Bernard]";
+ mes "\"My help, Mikhail, finally returned with the slimes I needed.";
+ mes "I wonder what took him so long?\"";
+ goto L_close;
+
+L_close:
+ @temp = 0;
+ close;
+
+L_TooMany:
+ next;
+ mes "[Bernard]";
+ mes "\"You don't have room for my reward. I'll wait until you do.\"";
+ goto L_close;
+}
diff --git a/npc/009-2/doctor.txt b/npc/009-2/doctor.txt
new file mode 100755
index 00000000..9d6093cc
--- /dev/null
+++ b/npc/009-2/doctor.txt
@@ -0,0 +1,86 @@
+
+009-2,148,25,0 script Doctor NPC107,{
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ if (getequipid(equip_head) == 616) goto L_Axe;
+ if (getequipid(equip_head) == 621) goto L_EyePatch;
+
+ mes "[Doctor]";
+ mes "\"Hello, can I help you?\"";
+ next;
+
+ if (@inspector == 1)
+ menu
+ "I think I am sick!", L_Cure,
+ "No, I feel fine.", L_Next,
+ "Have you seen anything strange in town? Anything that might have to do with the robberies?", L_NohMask;
+ menu
+ "I think I am sick!", L_Cure,
+ "No, I feel fine.", L_Next;
+
+L_Next:
+ mes "[Doctor]";
+ mes "\"Then please stop wasting my precious time.\"";
+ goto L_close;
+
+L_Cure:
+ mes "[Doctor]";
+ if (sc_check(SC_POISON))
+ goto L_CurePoison;
+ mes "The doctor examines you briefly.";
+ mes "\"Nonsense! You look fine and dandy to me. All you need is a bit more exercise and fresh fruit in your diet!\"";
+ goto L_close;
+
+L_CurePoison:
+ mes "\"Well, well, well! Look at all those green bubbles coming out of your head; that looks like poisoning to me! Did you eat something rotten?\"";
+ next;
+ mes "[Doctor]";
+ mes "The doctor pulls out a syringe and fills it with a white liquid from a jar on his desk.";
+ mes "\"Now hold still, this won't hurt a bit...\"";
+ next;
+ mes "[Doctor]";
+ sc_end(SC_POISON);
+ sc_end(SC_SLOWPOISON);
+ mes "*Ouch!*";
+ mes "\"Next time, be more careful! Make sure to cook any meats before you eat them, and don't eat fish once it starts to smell.\"";
+ goto L_close;
+
+L_Axe:
+ mes "[Doctor]";
+ mes "\"Oh my, what happened to you?\"";
+ next;
+ mes "[Doctor]";
+ mes "\"Wait. Thats just a fake. Shame on you!\"";
+ goto L_close;
+
+L_EyePatch:
+ mes "[Doctor]";
+ mes "\"Would you like a glass eye to replace that eye patch you have? We just got a whole load of them in today. I'll even let you keep the patch as a souvenir.\"";
+ next;
+ menu
+ "Yes, please.", L_EyePatch_GlassEye,
+ "No thank you", L_Next1;
+
+L_Next1:
+ mes "[Doctor]";
+ mes "\"If you change your mind, please come back and see me.\"";
+ goto L_close;
+
+L_EyePatch_GlassEye:
+ mes "[Doctor]";
+ mes "\"Now, where did I put that box of eyes...\"";
+ mes "He goes off to look for them and comes back empty handed.";
+ next;
+ mes "[Doctor]";
+ mes "\"I can't seem to find where I put that box. You should come back later, I may have found them by then.\"";
+ goto L_close;
+
+L_NohMask:
+ mes "[Doctor]";
+ mes "\"No, I haven't seen anything.\"";
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+}
diff --git a/npc/009-2/drunks.txt b/npc/009-2/drunks.txt
new file mode 100755
index 00000000..79794140
--- /dev/null
+++ b/npc/009-2/drunks.txt
@@ -0,0 +1,14 @@
+
+009-2,65,55,0 script Drinker#1 NPC121,{
+ mes "[Binge Drinker]";
+ mes "\"Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!\"";
+ close;
+}
+
+
+009-2,68,55,0 script Drinker#2 NPC121,{
+ mes "[Binge Drinker]";
+ mes "\"I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!\"";
+ //I know it's called "teetotaler". That error is on purpose.
+ close;
+}
diff --git a/npc/009-2/entertainer.txt b/npc/009-2/entertainer.txt
new file mode 100755
index 00000000..13664ffb
--- /dev/null
+++ b/npc/009-2/entertainer.txt
@@ -0,0 +1,40 @@
+
+009-2,61,49,0 script Entertainer NPC165,{
+ mes "[Entertainer]";
+ mes "\"Yes how can I help you?\"";
+ menu
+ "How are you showing emotions above your head?", L_Learn,
+ "Never mind", L_close;
+
+L_Learn:
+ mes "[Entertainer]";
+ mes "\"They are called emotes, I use them to express how I am feeling.";
+ mes "I can teach you if you'd like?\"";
+ menu
+ "Yes please.", L_Learn2,
+ "I don't see the point right now.", L_close;
+
+L_Learn2:
+ mes "[Entertainer]";
+ mes "\"All you have to do is press alt and a number.";
+ mes "The number determines what emotion will be shown.";
+ mes "Some clients will also show an emote shortcut-bar with the F12 button\"";
+ goto L_close;
+
+L_close:
+ close;
+
+OnTimer3000:
+ if(rand(0,1) == 1) goto L_manaplus;
+ emotion rand(EMOTE_DISGUST, EMOTE_BLAH);
+ goto OnInit;
+
+L_manaplus:
+ emotion rand(EMOTE_MEOW, EMOTE_TEARS);
+ goto OnInit;
+
+OnInit:
+ if (debug >= 2) end;
+ initnpctimer;
+ end;
+}
diff --git a/npc/009-2/inspector.txt b/npc/009-2/inspector.txt
new file mode 100755
index 00000000..9310d4ea
--- /dev/null
+++ b/npc/009-2/inspector.txt
@@ -0,0 +1,139 @@
+
+009-2,24,99,0 script Inspector#Hurnscald NPC150,{
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ if (@inspector == 0 && BaseLevel >= 30) goto L_Start;
+ if (@inspector == 1) goto L_AskVillage;
+ if (@inspector == 2) goto L_OldWoman;
+ if (@inspector == 3) goto L_TheaterMask;
+ if (@inspector == 4) goto L_TravelingTroupe;
+ if (@inspector == 5) goto L_OldMan;
+ if (@inspector == 6) goto L_OldMan_2;
+ if (@inspector == 7) goto L_Alibi;
+ if (@inspector == 8) goto L_Alibi_2;
+ if (@inspector == 9) goto L_Alibi_3;
+ if (@inspector == 10) goto L_Satchel;
+ if (@inspector == 11) goto L_Basement;
+ if (@inspector == 12) goto L_Note;
+ if (@inspector == 13) goto L_TravelingTroupe_2;
+ if (@inspector == 14) goto L_Over;
+ if (@inspector == 15) goto L_End;
+ mes "[Inspector]";
+ mes "\"I'm sorry, but I'm busy looking into this string of robberies.\"";
+ goto L_close;
+
+L_Start:
+ mes "\"Hmm...what to do.\"";
+ mes "He looks up and into your face.";
+ next;
+ mes "[Inspector]";
+ mes "\"You look capable, will you help me solve these robberies?\"";
+ next;
+ menu
+ "Yes.", L_Accept,
+ "No.", L_close;
+
+L_Accept:
+ @inspector = 1;
+ callsub S_Update_Mask;
+ mes "[Inspector]";
+ mes "\"Ok then. I'd like you to ask the villagers about the recent string of robberies.\"";
+ goto L_close;
+
+L_AskVillage:
+ mes "[Inspector]";
+ mes "\"Please continue talking to the villagers.\"";
+ goto L_close;
+
+L_OldWoman:
+ mes "[Inspector]";
+ mes "\"Hm...I don't know if I trust her eyesight or memory. See if someone else knows anything.\"";
+ goto L_close;
+
+L_TheaterMask:
+ @inspector = 4;
+ callsub S_Update_Mask;
+ mes "[Inspector]";
+ mes "\"Someone in a theater mask, eh? There was a traveling theater troupe in town recently, but they've moved on to Tulimshar. Please go talk to their leader about this.\"";
+ goto L_close;
+
+L_TravelingTroupe:
+ mes "[Inspector]";
+ mes "\"Please go talk to the leader of the traveling troupe about the theater mask.\"";
+ goto L_close;
+
+L_OldMan:
+ @inspector = 6;
+ callsub S_Update_Mask;
+ mes "[Inspector]";
+ mes "\"Hm...an old man? Could you interrogate him for me?\"";
+ goto L_close;
+
+L_OldMan_2:
+ mes "[Inspector]";
+ mes "\"Have you talked with the old man yet?\"";
+ goto L_close;
+
+L_Alibi:
+ mes "[Inspector]";
+ mes "\"Can you verify that with his wife?\"";
+ goto L_close;
+
+L_Alibi_2:
+ @inspector = 9;
+ callsub S_Update_Mask;
+ mes "[Inspector]";
+ mes "\"Hm...then it couldn't be him. I'm not sure where to go from here, maybe you can find something else. Try talking to everyone again.\"";
+ goto L_close;
+
+L_Alibi_3:
+ mes "[Inspector]";
+ mes "\"Made any progress yet?\"";
+ goto L_close;
+
+L_Satchel:
+ mes "[Inspector]";
+ mes "\"Then go north and investigate!\"";
+ goto L_close;
+
+L_Basement:
+ mes "[Inspector]";
+ mes "\"Did you look over the basement?\"";
+ goto L_close;
+
+L_Note:
+ @inspector = 13;
+ callsub S_Update_Mask;
+ mes "[Inspector]";
+ mes "\"What a strange note. I'll keep track of this, while you return the mask to the troupe.\"";
+ mes "";
+ mes "\"By the way, stay sharp! I may call upon you again.\"";
+ goto L_close;
+
+L_TravelingTroupe_2:
+ mes "[Inspector]";
+ mes "\"Please return the mask to the traveling troupe.\"";
+ goto L_close;
+
+L_Over:
+ @inspector = 15;
+ callsub S_Update_Mask;
+ mes "[Inspector]";
+ mes "\"My men have found all of the stolen items. They were all in the mining camp. We still don't know who did it.\"";
+ mes "[2500 experience points]";
+ getexp 2500, 0;
+ goto L_close;
+
+L_End:
+ mes "[Inspector]";
+ mes "\"Remember to stay sharp. I might need your help on another case.\"";
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+
+S_Update_Mask:
+ QUEST_Hurnscald = (QUEST_Hurnscald & ~(NIBBLE_3_MASK)) | (@inspector << NIBBLE_3_SHIFT);
+ return;
+}
diff --git a/npc/009-2/kfahr.txt b/npc/009-2/kfahr.txt
new file mode 100755
index 00000000..8962e0a7
--- /dev/null
+++ b/npc/009-2/kfahr.txt
@@ -0,0 +1,1071 @@
+
+009-2,67,57,0 script Kfahr NPC125,{
+ @halloween_npc_id = $@halloween_npc_kfahr;
+ callfunc "TrickOrTreat";
+
+ @QS_NEWBIE = 0;
+ @QS_MET_KFAHR = 1;
+ @QS_KNOWS_KFAHR = 2;
+ @QS_KNIFE_QUEST = 3;
+ @QS_KNIFE_QUEST_DONE = 4;
+ @QS_LOST_WRESTLING = 5;
+ @QS_STINGER_QUEST = 6;
+ @QS_STINGER_QUEST_DONE = 7;
+
+ @BLACK_STINGERS_NR = 10;
+ @MUSHROOMS_NR = 10;
+ @SNAKE_SKINS_NR = 10;
+
+ @KNIFE_QUEST_XP = 50000;
+ @STINGER_QUEST_XP = 80000;
+
+ @Q_MASK = NIBBLE_2_MASK;
+ @Q_SHIFT = NIBBLE_2_SHIFT;
+
+ @Q_status = (QUEST_Forestbow_state & @Q_MASK) >> @Q_SHIFT;
+
+ @Q_needs_stinger = ((QUEST_Forestbow_state & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT) > 1;
+
+ if (@Q_status == @QS_KNIFE_QUEST) goto L_Check;
+
+ if (@Q_status == @QS_STINGER_QUEST) goto L_stinger_check;
+
+ if (@Q_status > @QS_NEWBIE) goto L_meet_again;
+
+ mes "[Warrior]";
+ mes "You stand before a battle-scarred, darkly tanned warrior, brimming with muscles.";
+ mes "Just looking at him you smell danger, adventure, excitement...";
+ next;
+ mes "[Warrior]";
+ mes "On second thought, he really could use a bath.";
+ mes "";
+ mes "The warrior turns towards you, grinning broadly.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Why, hello there! Come to visit Kfahr the Warrior to hear of my exploits, have you?\"";
+ mes "He laughs heartily and gives you a slap on the back.";
+ mes "\"Can't blame you, can't blame you at all! Here, take a seat!\"";
+ next;
+ @has_beer = 0;
+ @beer_count = 0;
+ @last_story = 0;
+ @Q_status = @QS_MET_KFAHR;
+ callsub L_Update_Var;
+ goto L_Main_menu;
+
+L_meet_again:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr nods and grins as you greet him.";
+ mes "\"Came back for more stories? Have a seat!\"";
+ next;
+ goto L_Main_menu;
+
+L_Main_menu:
+ if (@Q_status >= @QS_KNOWS_KFAHR)
+ goto L_real_main_menu;
+ menu
+ "Who are you?", L_Next,
+ "Goodbye.", L_End;
+
+L_Next:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs again.";
+ mes "\"Surely you jest! You must have heard of Kfahr, Slayer of Toby Rick the Desert Worm, Raider of the Lost Temple, Hero of Tulimshar?\"";
+ next;
+ menu
+ "Uhm...", L_Next1,
+ "Well...", L_Next1,
+ "To be quite honest...", L_Next1,
+ "Excuse me, someone is, er, whispering me...", L_End;
+
+L_Next1:
+ mes "[Kfahr the Warrior]";
+ mes "\"Ah, I knew it! So you have come to hear some tales about the dangers of the desert? You've come to the right man!\"";
+ next;
+ @Q_status = @QS_KNOWS_KFAHR;
+ callsub L_Update_Var;
+ goto L_real_main_menu;
+
+L_tale_sub:
+ if (@current_story == @last_story)
+ goto L_same_story_abort;
+ if (@has_beer == 0)
+ goto L_out_of_beer_abort;
+ @last_story = @current_story;
+ @has_beer = 0;
+ @story_abort = 0;
+ return;
+
+L_same_story_abort:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr frowns.";
+ mes "\"I only just told you that story. Trust me, the others are worth hearing, too!\"";
+ next;
+ @story_abort = 1;
+ return;
+
+L_out_of_beer_abort:
+ mes "[Kfahr the Warrior]";
+ if (@beer_count > 4)
+ mes "\"I think I've talked 'nuff for now... but thanks for lis'ning!\"";
+ if (@beer_count <= 4)
+ mes "\"Now that's one of my favorite tales, but my throat is just a little too dry to talk about something like that... could you help me out a little here?\"";
+ next;
+ @story_abort = 1;
+ return;
+
+L_real_main_menu:
+ if (@Q_needs_stinger)
+ goto L_long_main_menu;
+
+ menu
+ "What's a Desert Worm?", L_tale_desert_worm,
+ "Desert Temple?", L_tale_desert_temple,
+ "Hero of Tulimshar?", L_tale_hero_tulimshar,
+ "Tell me about the desert!", L_tale_desert,
+ "I want to become as powerful as you!", L_gain_power,
+ "Here, have a beer!", L_Give_beer,
+ "Goodbye!", L_End;
+
+L_long_main_menu:
+ menu
+ "What's a Desert Worm?", L_tale_desert_worm,
+ "Desert Temple?", L_tale_desert_temple,
+ "Hero of Tulimshar?", L_tale_hero_tulimshar,
+ "Tell me about the desert!", L_tale_desert,
+ "I want to become as powerful as you!", L_gain_power,
+ "Have you fought any Golden Scorpions?", L_golden_scorpion,
+ "Here, have a beer!", L_Give_beer,
+ "Goodbye!", L_End;
+
+L_tale_desert_worm:
+ @current_story = 1;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_Main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr smiles and leans back.";
+ mes "\"A desert worm is probably the largest creature you will ever see, larger even than most dragons. It spans a good twenty chains (or six box tosses if you're used to the Imperial system) in length, has a thick, rubbery skin, and teeth as long as my legs.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Most are a darkish gray, except for the young ones; those are more purplish, I've been told. Well, anyway, you hardly ever see one of them in their entirety, you only see the head, if they decide to come out and fight – they tend to burrow under the ground.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"They are terrifying beasts, but lack any intelligent thought whatsoever. They just eat whatever gets in their way. There's nothing out there that can kill one, I think, and they can grow hundreds of years old.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Fortunately, they're kind of rare these days, and mostly roam in the empty deserts far, far south of Tulimshar. They don't like the area too close to the mountains, I think; probably too rocky underground.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr takes a sip from his beer.";
+ mes "\"Anyway. Desert worms are dangerous, as I said, but there was one particularly terrifying one, called Toby Rick. You must've heard of it – the greatest and most dangerous worm, scourge of the trade routes. It could smell humans from miles away.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Most desert worms don't smell or see or feel much, you see. They just notice when something's walking nearby, then jump up and swallow it. But Toby Rick was different. He was a terrifying beast, three times as long as a regular worm.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"So to feed itself, it had learned to smell. That's right, the beast had grown nostrils and learned how to use 'em!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"One day I was hired to protect a caravan going north to Tulimshar, with a friend of mine, old Arvek. He only came along for the fun, of course; it's not as if I really need much help defending a caravan... or at least normally it isn't.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Arvek's fun to have about. His manners are as bad as his breath, but he knows how to make a laugh out of everything. One thing you musnt't ever do with him, though, and that is to try his `homebrew'-- some kind of ale he makes out of maggot slime...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr takes another sip of beer, momentarily irritated as if surprised by the taste.";
+ mes "\"Anyway, This time was different. We were barely three days out in the desert, when we spotted him – `the Black Worm!', the Caravan Master cried, `Over there; it will kill us all!'\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I had barely enough time to draw out my sword, and the beast was upon us! The caravan people were fleeing for their lives, so it was up to me and Arvek to stop it.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"That was madness, of course; no-one takes on a desert worm, if they have a choice. But we didn't; you see, with most desert worms you can just stand still and it won't notice you and pass by. But not with this one!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans forward.";
+ mes "\"So this humongous beast came roaring towards us, a big back hole where the mouth is, spikey fins sticking out to the side, all ready to swallow us all! My sword felt like a toothpick against that monster!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "He pauses, then leans back a little to take another long sip from his beer.";
+ mes "\"So it seemed that our last hour was at hand, that we'd be swallowed and never heard from again!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Aha, but Kfahr doesn't die quite so easily. What happened was this: Me and Arvek charged towards that thing, slashing and stabbing, but our blows would just glance off. The beast roared and just slid by us, slapping us to the side with its fins like maggots, knocking us to the ground.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"It bolted up into the air, and tore down on the caravan, swallowing each and everyone in there in a single big gulp!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Then it turned around towards us. Those fins had hit us pretty badly; I had lost my shield and Arvek his backpack. Better for him, I suppose, but I had been rather fond of that shield – not that it would have helped me much here...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans foward again, nearly knocking over his beer.";
+ mes "\"So the beast charges at the two of us again and we dodge – Arvek left, me right. The beast is smarter than the average desert worm, though, and had expected that – so it bends to the side and swallows poor Arvek, hair and hide and all.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr's eyes sparkle with excitement.";
+ mes "\"It turns around, trying to get me too. I dodge it – left, then the same again, I dodge it right. But it can't go on like that, the beast isn't tiring, but I am...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"So for one instant I think that this might be it, that I might die out here! A worthy death, I suppose, against the king of desert worms! And just as I think that, I bump against something\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr slaps on the table.";
+ mes "\"Arvek's backpack! Doesn't sound terribly exciting, of course – what am I going to do, toss it at the beast and hope that it chokes on it?\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "He grins.";
+ mes "\"But I remember something better. That beast had grown nostrils, right? So it can smell and taste! So I tear open his backpack and pull out that big snakeskin of that disgusting maggot ale of his. It's still filled to the brim.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I quickly put on my gloves again, because I don't want to touch that stuff with my bare skin. The beast is almost upon me, but I have only that one chance – so I squeeze the skin while sticking my thumb into the opening, until I can see the black of its nostrils...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"...and when I think it's almost too late already, I shoot out that revolting brew at the beast's smelling holes, and I hit! Two at once, and up and sideways it rolls, away from me, and roaring and bellowing in pain!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"It roared for a good five minutes, then convulsed... and first it spat out old Arvek, who was a bit irritated at all that because, as he told me, he had `almost pierced the pancreas', whatever that means...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Next it spat out the caravan, and then some other caravan it had plucked off from elswehere. Somehow, everyone from there was still alive, too.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Then it slid away from us, away to the north, but we could see it getting slower and slower.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Two days later we caught up with it, but it was already dead then and had started to smell. We looked around and inside of it, found treasures and remnants of some less fortunate caravans and split them up appropriately.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"(I never told Arvek that it was his brew that killed it; he'd never have forgiven me.)\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"One of the nomads that had been travelling with the other caravan then told me that you could make special kinds of knives and swords and armor out of desert worm bones.\"";
+ next;
+ menu
+ "Hang on... bones in a... worm?", L_worm_bones,
+ "That's neat! Do you have any that I could see?", L_worm_see_bones,
+ "And then?", L_worm_final,
+ "Zzzzzzzz.......", L_End;
+
+L_worm_final:
+ mes "[Kfahr the Warrior]";
+ mes "\"Nothing much else happened on that trip. When we arrived in Tulimshar, people at first didn't believe the story, of course, until we showed them the treasures and the bones. Ah, those were wonderful days...\"";
+ mes "He sighs and leans back, a nostalgic look on his face.";
+ next;
+ goto L_Main_menu;
+
+L_worm_bones:
+ mes "[Kfahr the Warrior]";
+ mes "\"Weren't you listening? A desert worm is not a regular worm; a worm couldn't survive in the desert.\"";
+ next;
+ menu
+ "Do you have any bones that I could see?", L_worm_see_bones,
+ "Never mind that, what happened then?", L_worm_final,
+ "Zzzzzzzz.......", L_End;
+
+L_worm_see_bones:
+ if (@Q_status == @QS_KNIFE_QUEST)
+ goto L_bone_ip;
+ if (@Q_status > @QS_KNIFE_QUEST)
+ goto L_worm_continue2;
+ if (BaseLevel >= 40)
+ goto L_bone_quest;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Of course!\"";
+ mes "He pulls out a strangely curved knife with a yellow-whiteish blade that is almost transparent at the edge.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"When hardened properly, this bone knife can last a lifetime! One of the best knives you will find, too.\"";
+ mes "He puts the knife back into his pocket.";
+ next;
+ goto L_Main_menu;
+
+L_worm_continue2:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs.";
+ mes "\"Just have a look at the knife I gave you if you don't believe me!\"";
+ next;
+ goto L_Main_menu;
+
+L_tale_desert_temple:
+ @current_story = 2;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_Main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Ah, that...\"";
+ mes "Kfahr leans back and takes a sip from his beer.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"That was many years ago, when George and I were just kids. George later became a pirate, you see; he always loved hunting for treasure. But back in those days it was all on level ground.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"George had found a treasure map somewhere... and when I say `found', I mean that in a fairly liberal sense; he always loved those maps, almost as much as the excitement of hunting for treasure.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, that map pointed to a spot in the desert a good day's walk south of Tulimshar. So we grabbed our satchels and coats and packed food and water, and headed there in the evening.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We walked all night. As you know, it's best not to travel during the day if you can avoid it, and we were young and energetic in those days, so that was easily avoided.\"";
+ mes "He sighs and takes another sip.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, when the sun rose in the morning, we still hadn't found the place. So we climbed up on the nearest dune and looked all around to find it.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"But there was nothing, nothing at all. We looked and looked – and suddenly George screamed: While we weren't paying attention to nearby things, scorpions had crept up on us!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"The scorpions had smelled the food we had brought and cut open our satchels, tearing our waterskins and making a mess of our food – and now that they were done with that, they were coming for us!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We didn't have any suitable weapons, and not much of a choice either, so we made a break for it. We ran into the desert, fast as our legs would carry us, and the scorpions after us.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We very nearly didn't make it. There was nothing around but sand, and we had no water, no food – at least we'd had our breakfast already – and the sun kept burning, and burning, and trying to cook us alive.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We had long lost the scorpions, but we were dry like parchment, and exhausted from all the sun and running. So we sat down in the shades of a dune and contemplated our options.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Without water we couldn't last during the day. So our only hope was to find shelter somewhere – except that the only thing around was sand, and the mid-day sun would rob that of all shelter.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"So we resigned to continuing to search for something, anything – it was either that, or die of thirst for sure. The only problem was that we were already so thirsty and it was so bright that we couldn't see nor walk straight anymore.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"So we had barely made it to the top of the next dune when George slipped and rolled down the other side. I wanted to catch him, but I was too dizzy myself, and so I rolled after him.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We seemed to roll down for hours, and I kept feeling dizzier and dizzier; I didn't have the strength to stop. When we arrived at the bottom, I just wanted to lie down and let the sun dry me up.\"";
+ mes "Kfahr takes a deep sip of beer. \"Aaah.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I was being foolish, of course. You should never give up, no matter how hopeless the situation may seem. Anyway, I finally did decide to get up on my knees and look around again...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"...and what I saw right before me, believe it or not, was a giant face of a man, carved into rock – there, in the middle of the desert, half-sunk, a shattered visage!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I pulled George up – I didn't have the strength to speak, but walking seemed to work – and we slowly made our way over to it. We weren't thinking much, just trying to find some shade, so we climbed into that thing's ear.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Inside it felt moist, as if it was a real ear – not that I've climbed inside a real ear, mind you! But that feeling of cool and dampness and water was like a magical healing potion; we suddenly felt strength in our legs again.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"When we looked around, we noticed that there was a passage leading further underground, and long-spent torches on the wall. Fortunately I still had my tinderbox, so I wrapped my shirt around a torch and lighted it.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We climbed down, and soon we heard the dripping of water – we had found an underground water-hole! More than that, we had found a gigantic underground cave, and, at the end of it, a huge portal.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We first drenched ourselves in water – somehow managing not to douse the torch – and drank until we were ready to burst. When we had rested, we went to the portal to have a closer look.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"The portal was made out of bronze, or some similar metal, with images of snakes engraved all over. Curious as we were, we pulled the door open – it wasn't locked or barred in any way – and had a look inside.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"The passages in there were cool and dark, with a ceiling high enough to swallow the light of my torch. There were snakes, quite a few of them, but we were both quick-footed and managed to avoid them.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"There were chambers and inscriptions and more torches, but not a living being besides us and the snakes. Hmm. Though I could have sworn that some of the statues there were following us with their eyes...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"All went well, until George stepped into a trap. A piece of ground just caved in, and if I hadn't grabbed his hand at the last second, he would have ended up on some rusty and probably poisoned spikes on the bottom...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"But I moved too fast, and slipped, and let go of the torch to catch myself with the other hand – and the torch ended up in the bottom of the pit! Well, better the torch than George, I suppose...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Still, we no longer had any light. Being careless, I had gotten my tinderbox wet while we were at the water-hole, so we couldn't make another torch either.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We had the choice between staying by our torch and watching it die, and then follow suit at the hands, or, well, fangs of the snakes, or wandering off in the dark, to be eaten by snakes someplace else.\"";
+ mes "Kfahr empties his beer, looking a bit disappointed.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, we took the latter option. We wandered through the dark, somehow barely avoiding the snakes and the traps, running into walls and hitting our heads on archways, until, suddenly, we saw something shining up ahead.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"That thing was on some kind of pedestal, and it looked like a golden tablet of sorts. We clambered towards it – the only source of light in here, the only thing that could save us – and hesitated.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Should we just take it? This was clearly some kind of temple, so it might be something sacred. George and I argued about it for a while, until I decided to end the discussion – so I simply grabbed it: we needed light.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"At that point, a terrible grinding noise started all around us, as the pedestal began to sink into the ground. We had triggered some ancient trap!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Holes on the walls were opening up, and snakes began to gush out – only now did we realise that we were in a huge, opulent chamber, with gold and gems and images all around! But now it was too late for any looting; we had to run for our lives!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"So we ran from that slithering mass, faster than we ever had! We had no idea where we were going of course, but at least we had light again...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Somehow we got lucky, somehow we escaped. It was evening again when we climbed out of that ear into the desert again, with only our lives and that golden tablet. We only barely made it back to Tulimshar in the morning.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"But we did have the tablet as a proof of what happened.\"";
+ mes "He grins.";
+ mes "\"That was my first real adventure, I think. Ah, those were exciting days.\"";
+ next;
+ menu
+ "Wow.", L_Main_menu,
+ "What happened to the tablet?", L_tale_tablet,
+ "Did you go there again?", L_tale_temple_again,
+ "Zzzzzzz.....", L_End;
+
+L_tale_tablet:
+ mes "[Kfahr the Warrior]";
+ mes "\"Well, we couldn't read it. We later sold it for a good price, to a young travelling archeologist; Doctor Nohlidge or something like that. She said that the engravings described sacrifical practices of an ancient snake cult...\"";
+ mes "He shrugs.";
+ next;
+ goto L_Main_menu;
+
+L_tale_temple_again:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs.";
+ mes "\"Of course we tried to go there again. After seeing all that treasure, George wouldn't give up on it. We tried many times – as did others, from what I've heard – but we never found it again.\"";
+ next;
+ goto L_Main_menu;
+
+L_tale_hero_tulimshar:
+ @current_story = 3;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_Main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Yes, Hero of Tulimshar. That was many years";
+ mes "ago, but I did save the city of Tulimshar from a deadly drought.\"";
+ mes "He grins broadly.";
+ mes "\"And quite a feat that was, let me tell you!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Back in those days, there wasn't much trade with Hurnscald, and Tulimshar was dependent on its own water supply – critically dependent, even.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Now, one day the water people drew from the wells started smelling. The smell was nauseating, and people who drank from it became violently sick.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"So the entire town was without water, except for the water reserves in the cistern. Someone had to act quickly – and of course that someone was me.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"With nothing more than a torch, some light armor and a sword, I climbed down one of the wells. It was a long climb; the wells go down fairly deep.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I noticed that there were some holes in the walls of the wells, with hollow spaces on the sides... Hmm, that reminds me that I still have to check whether the rumors of a labyrinth underneath Tulimshar are true.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Anyway, it took me a long time to get down, and every minute the stench was getting worse – something really bad was down there. I had to stop and tie a wet piece of cloth over my mouth so that I wouldn't inhale all of that nasty stuff.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"My torch was in an even poorer shape – whatever was making that smell had killed the flame, so I soon had to rely on the light from above to see anything.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Finally I arrived at the water level. All Tulimshar wells dip into the same underground lake, which is on the side of a huge underground cavern. And in the midst of that cavern lay – hardly visible through the greenish mist coming from it – a Stinkewyrm!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Stinkewyrms are smaller cousins of dragons, but just as dangerous. They have a green, sticky skin, and, well, they stink. A lot. This one was particularly bad – it had filled up the entire cave with stinkiness!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I climbed down and swam to the shore. The stench was terrible; I had to hold my breath to get closer to the monster. There it was, lying on the ground, snoring, poisoning all our water! So I tried to wake it up to scare it away.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I kicked it. I yelled at it. (Bad mistake, I got some of that stinky stuff in my lungs.) I poked at it with my sword. I even tried to poke it in the eyes, but I couldn't get that close to its mouth – that was where most of the smell was coming from.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"After a few attempts I couldn't take it anymore, so I had myself be pulled up again. It took me a while to recover and to tell the tale. We talked about what could be done, but no-one had an idea.\"";
+ mes "Kfahr takes a deep sip from his beer.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Finally, I came up with something. Stinkewyrms love that terrible stench of theirs, so what should be their natural enemy? Why, soap, of course!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"We couldn't just dump all the soap into the underground lake, of course; the water would be undrinkable again. So we collected some of the soap, and I climbed down again with it.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Having arrived at the bottom, I cut off the biggest of the water buckets and filled it with water – and that was a really big one, I could hardly carry it when it was full. Then I dissolved most the soap, and poured that onto the Stinkewyrm's head.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr laughs.";
+ mes "\"Ah, that caught its attention! You should have seen that dragon roar, as it jumped to its feet and tried to find out who had soaped it! I rushed back to the water and made another bucket of soap water.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"But it had noticed me! And as soon as it had realized where I was, it came after me. Then it stopped, towering right before me, its stench nearly killing me, and grinned that broad, crooked-teeth dragon smile of its kind.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Then it took a deep breath – and I realised that that was probably 'it' for me; Stinkewyrms can breathe fire like real dragons, and I didn't have the time to run back to the water.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"But when it breathed out, only a tiny little flame came out – and a lot of terrible smell that nearly knocked me off my feet.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"For you see, it had generated so much of the deadly smell around itself that even its own fire breath couldn't survive!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"So it stared at me, mouth wide agape – the perfect opening!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I stormed at it and before it could even blink, it had a huge load of bubbly soap water down its throat.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"You should have heard the coughing and shaking! I swear, I thought the roof would collapse as it was jumping and choking...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Bubbles were coming out of its mouth, its nostrils, even its ears! The poor wyrm must have never felt so clean in its life!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"I was out of soap, but the beast didn't know that – so I quickly grabbed another bucket and charged it again.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"And it worked! Seeing me like this again, it ran, squealing, back into the underground caves from where it must have come.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr roars with laughter and slaps his hands on the table.";
+ mes "\"So we defeated it with hygiene! Ah, that was wonderful. After a day, the stench had worn off enough that we could drink the water again, and a week later it was almost completely gone. And of course I was the hero of the day.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr downs the rest of his beer.";
+ mes "\"And from that day on they called me the `Hero of Tulimshar'.\"";
+ next;
+ goto L_Main_menu;
+
+L_tale_desert:
+ @current_story = 4;
+ callsub L_tale_sub;
+ if (@story_abort) goto L_Main_menu;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans back, trying to find the right words to describe the desert.";
+ mes "\"The desert... a cold and lonely place at night, and a hot and lonely place during the day.\"";
+ mes "For someone who apparently spent most of his life in the desert, his insights sometimes seem less than profound.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"The desert is a living hell during some times of the year. Filled with black scorpions and snakes, except for the shadier areas, and mountain snakes if you go further east.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"South of Tulimshar is a fairly protected region; the nomads keep the snakes out of there and you'll find only relatively harmless monsters. But go west from there, to the beach, and it's scorpions and snakes...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"...and east of there you find the old Hatmaker cave, now filled to the brim with snakes! Rumors have it that this was once an oasis, in centuries long gone by, but as far as I'm concerned that pit is just a dump that you best avoid.\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Go further to the east and you'll find ol' Pachua up on the mountain. He seems to have some kind of power over the mountain snakes there; they never attack him. I think he's a bit creepy, personally...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"...but if he offers you some of his tobacco, then by all means give it a try! That stuff is amazing.\"";
+ mes "He laughs, then begins to cough.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Not terribly healthy, though, I s'pose...\"";
+ next;
+ goto L_Main_menu;
+
+L_gain_power:
+ if ((@beer_count - @has_beer) < 1)
+ goto L_story_first;
+ if (@Q_status < @QS_KNIFE_QUEST)
+ goto L_bone_quest;
+
+ mes "[Kfahr the Warrior]";
+ mes "\"Yeees, yes... doesn't everyone?\"";
+ mes "He laughs briefly.";
+ mes "\"Don't worry – you can't become as powerful as I, of course, but if you keep practicing, you can get pretty damn close! Just make sure to pick your opponents carefully, and know when to run to live another day!\"";
+ next;
+ goto L_Main_menu;
+
+L_story_first:
+ mes "[Kfahr the Warrior]";
+ mes "\"That's the spirit! Perhaps you better listen to one of my tales, then!\"";
+ next;
+ goto L_Main_menu;
+
+L_bone_quest:
+ if (@Q_status == @QS_KNIFE_QUEST)
+ goto L_bone_ip;
+ if (@Q_status > @QS_KNIFE_QUEST)
+ goto L_bone_completed;
+ if (BaseLevel < 40)
+ goto L_bone_tooweak;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr stares at you for a moment, then nods.";
+ mes "\"You seem reasonably skilled. I think I may have something that I no longer need, but I don't want to give it to just anyone...\"";
+ mes "He hesitates, obviously trying to make up his mind about something, then continues.";
+ @Q_status = @QS_KNIFE_QUEST;
+ callsub L_Update_Var;
+ next;
+ goto L_bone_ip;
+
+L_bone_ip:
+ mes "[Kfahr the Warrior]";
+ mes "\"Bring me " + @BLACK_STINGERS_NR + " black scorpion stingers and " + @MUSHROOMS_NR + " small mushrooms to prove that you are a competent warrior, and I'll see if I have something for you.\"";
+ mes "He grins.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"But while you are here... perhaps you would like to listen to another story?\"";
+ next;
+ goto L_Main_menu;
+
+L_bone_completed:
+ mes "[Kfahr the Warrior]";
+ mes "\"I really don't have anything else I'd want to give away to make you stronger. Look around a bit yourself! You won't become a hero if you keep begging for help!\"";
+ next;
+ goto L_Main_menu;
+
+L_bone_tooweak:
+ mes "[Kfahr the Warrior]";
+ mes "\"You know, little one, if you keep practicing a little and come back once you're a bit stronger, I might have something for you...\"";
+ mes "He winks.";
+ next;
+ goto L_Main_menu;
+
+L_Check:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr eyes you with unconcealed amusement.";
+ mes "\"Welcome back! Did you bring me the things I asked for?\"";
+ next;
+ menu
+ "Yes, here they are!", L_completecheck,
+ "Er, what were those things again?", L_bone_ip,
+ "No, sorry, I didn't have the time.", L_Main_menu,
+ "I forgot! Let me get them right now.", L_End;
+
+L_completecheck:
+ if (countitem("BlackScorpionStinger") < @BLACK_STINGERS_NR)
+ goto L_missing_stingers;
+ if (countitem("SmallMushroom") < @MUSHROOMS_NR)
+ goto L_missing_mushrooms;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr is delighted.";
+ mes "\"Well done, well done! Now that's what I call Warrior spirit!\"";
+ mes "He laughs, then suddenly stops, turning to you with suspicion in his eyes.";
+ mes "\"You DID get those yourself, didn't you? Not buy them or somesuch...?\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Before you can answer, he laughs and slaps you on the back again.";
+ mes "\"Ah, what am I thinking! Too many years in the desert make you a little suspicious of everyone and everything! Naah, I believe you.\"";
+ mes "He pulls a strangely curved knife out of a side pocket and holds it up to the light. The blade is partly transparent, and looks quite sharp.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"It's a bone knife, carved out of the umplex bone of a desert worm... you can probably guess which one.\"";
+ mes "He grins broadly again, weighing the weapon.";
+ mes "\"It's a little heavy, but one of the best knives you can get. Certainly beats a short sword any time of day.\"";
+ mes "I had the nomads make me a few of them, and I hardly use them nowadays, so I think I can part with this one.";
+ next;
+ if (countitem("BlackScorpionStinger") < @BLACK_STINGERS_NR)
+ goto L_missing_stingers_2;
+ if (countitem("SmallMushroom") < @MUSHROOMS_NR)
+ goto L_missing_mushrooms_2;
+ getinventorylist;
+ if (@inventorylist_count == 100) goto L_Knife_TooMany;
+ mes "[Kfahr the Warrior]";
+ mes "He hands you the knife.";
+ mes "\"Oh, and I think I'll keep those in return; I know someone who will trade them for antidote potions.\"";
+ mes "He pockets the stingers and mushrooms.";
+ mes "[" + @KNIFE_QUEST_XP + " experience points]";
+ @Q_status = @QS_KNIFE_QUEST_DONE;
+ callsub L_Update_Var;
+ delitem "BlackScorpionStinger", @BLACK_STINGERS_NR;
+ delitem "SmallMushroom", @MUSHROOMS_NR;
+ getexp @KNIFE_QUEST_XP, 0;
+ getitem "BoneKnife", 1;
+ next;
+ goto L_Main_menu;
+
+L_Knife_TooMany:
+ mes "[Kfahr the Warrior]";
+ mes "\"You don't have room for this. Come back when you do.\"";
+ close;
+
+L_missing_stingers:
+ mes "[Kfahr the Warrior]";
+ mes "\"No, no... I said " + @BLACK_STINGERS_NR + " black scorpion stingers.";
+ if (countitem("BlackScorpionStinger"))
+ mes "You will need " + (@BLACK_STINGERS_NR - (countitem ("BlackScorpionStinger"))) + " more of those.\"";
+ if (countitem("BlackScorpionStinger") == 0)
+ mes "You didn't bring even a single one!\"";
+ close;
+
+L_missing_stingers_2:
+ mes "[Kfahr the Warrior]";
+ mes "\"You just had " + @BLACK_STINGERS_NR + " black scorpion stingers. What happened to them?";
+ if (countitem("BlackScorpionStinger"))
+ mes "You will need " + (@BLACK_STINGERS_NR - (countitem ("BlackScorpionStinger"))) + " more of those.\"";
+ if (countitem("BlackScorpionStinger") == 0)
+ mes "You didn't bring even a single one!\"";
+ close;
+
+L_missing_mushrooms:
+ mes "[Kfahr the Warrior]";
+ mes "\"No, no... I said " + @MUSHROOMS_NR + " small mushrooms.";
+ if (countitem("SmallMushroom"))
+ mes "You will need " + (@MUSHROOMS_NR - (countitem ("SmallMushroom"))) + " more of those.\"";
+ if (countitem("SmallMushroom") == 0)
+ mes "You didn't bring me even a single little mushroom!\"";
+ close;
+
+L_missing_mushrooms_2:
+ mes "[Kfahr the Warrior]";
+ mes "\"You just had " + @MUSHROOMS_NR + " small mushrooms. What happened to them?";
+ if (countitem("SmallMushroom"))
+ mes "You will need " + (@MUSHROOMS_NR - (countitem ("SmallMushroom"))) + " more of those.\"";
+ if (countitem("SmallMushroom") == 0)
+ mes "You didn't bring me even a single little mushroom!\"";
+ close;
+
+L_stinger_check:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr grins at you.";
+ mes "\"Welcome, welcome! Did you bring me my snake skins?\"";
+ next;
+ menu
+ "Yes, here they are!", L_ss_cc,
+ "No, sorry, I didn't have the time.", L_Main_menu,
+ "I forgot! Let me get them right now.", L_End;
+
+L_ss_cc:
+ if (countitem("SnakeSkin") < @SNAKE_SKINS_NR)
+ goto L_snakeskins_missing;
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_SnakeSkins_TooMany;
+ delitem "SnakeSkin", @SNAKE_SKINS_NR;
+ getitem "GoldenScorpionStinger", 1;
+ @Q_status = @QS_STINGER_QUEST_DONE;
+ callsub L_Update_Var;
+ getexp @STINGER_QUEST_XP, 0;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr takes the skins and pulls a golden scorpion stinger out of his pocket.";
+ mes "\"Well, you've earned it. But be careful – the poison in there is still lethal, after all those years.\"";
+ mes "He hands you the scorpion stinger.";
+ mes "[" + @STINGER_QUEST_XP + " experience points]";
+ next;
+ goto L_Main_menu;
+
+L_snakeskins_missing:
+ mes "[Kfahr the Warrior]";
+ mes "\"No, no... I said " + @SNAKE_SKINS_NR + " snake skins.";
+ if (countitem("SnakeSkin"))
+ mes "You will need " + (@SNAKE_SKINS_NR - (countitem ("SnakeSkin"))) + " more of those.\"";
+ if (countitem("SnakeSkin") == 0)
+ mes "You didn't bring even a single skin!\"";
+ close;
+
+L_SnakeSkins_TooMany:
+ mes "[Kfahr the Warrior]";
+ mes "\"You don't have room for this. Come back when you do.\"";
+ close;
+
+L_Give_beer:
+ if (countitem("Beer") < 1)
+ goto L_player_out_of_beer;
+ if (@has_beer)
+ goto L_enough_beer_for_now;
+ if (@beer_count > 4)
+ goto L_too_much_beer;
+
+ setarray @beermessages$,
+ "Ah yes... a warrior's drink!",
+ "Generous, generous! I like that!",
+ "Hahah! That's just what I needed!",
+ "I love this town! Hurnscaldian hospitality! Mrahahahah!",
+ "A'ight, one more can't hurt, eh?";
+
+ @mesg$ = @beermessages$[@beer_count];
+
+ delitem "Beer", 1;
+ @has_beer = 1;
+ @beer_count = @beer_count + 1;
+
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr is visibly delighted.";
+ mes "\"" + @mesg$ + "\"";
+ mes "He takes a deep sip.";
+ mes "\"Aaah, magnificent!\"";
+
+ if (@beer_count > 4)
+ mes "Kfahr seems quite relaxed now.";
+ next;
+ goto L_Main_menu;
+
+L_enough_beer_for_now:
+ mes "[Kfahr the Warrior]";
+ mes "\"Generous, generous! But I still have plenty in here!\"";
+ mes "He laughs and takes a sip from the beer you gave him earlier.";
+ next;
+ goto L_Main_menu;
+
+L_too_much_beer:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr leans back and sighs heavily.";
+ mes "\"Very, very generous... bu' I think I'm fine for now.\"";
+ mes "He suppresses a burp.";
+ next;
+ goto L_Main_menu;
+
+L_player_out_of_beer:
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr stares at you, then begins to laugh.";
+ mes "\"Mrahahahahaha! Here's the beer! Right, right! Naah, I get it! Save your gold for whatever you need it for! But if you have some spare and want to share a beer, you know where to find me!\"";
+ next;
+ goto L_Main_menu;
+
+L_golden_scorpion:
+ if (@Q_status > @QS_STINGER_QUEST)
+ goto L_gs_over_ask;
+ if (@Q_status == @QS_STINGER_QUEST)
+ goto L_gs_ask_again;
+ if (@Q_status == @QS_LOST_WRESTLING)
+ goto L_gs_wrestle_again;
+
+ mes "[Kfahr the Warrior]";
+ mes "He grins.";
+ mes "\"Fought any? I single-handedly raided a nest of those beasts! Ah, but golden scorpions are almost unheard of in these parts. Why do you ask?\"";
+ next;
+ menu
+ "Never mind, I was just curious.", L_Main_menu,
+ "I need a golden scorpion stinger.", L_Next2;
+
+L_Next2:
+ mes "[Kfahr the Warrior]";
+ mes "\"A golden scorpion stinger? Those are rare and valuable, I hope that you know that!\"";
+ if (BaseLevel < 60)
+ goto L_lowlvl_for_stinger;
+ if (@Q_status < @QS_KNIFE_QUEST)
+ goto L_golden_requires_quest;
+ if (@Q_status < @QS_KNIFE_QUEST_DONE)
+ goto L_golden_requires_done;
+
+ mes "\"Still, you are a warrior of repute. I'll consider giving it to you...\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "A mischievous sparkle lightens up in his eyes.";
+ mes "\"...if you arm-wrestle me for it!\"";
+ next;
+ goto L_gs_wrestle_intro;
+
+L_gs_wrestle_intro:
+ menu
+ "Never!", L_Main_menu,
+ "Wait... what?", L_wrestle_explain,
+ "Bring it on!", L_gs_wrestle;
+
+L_golden_requires_done:
+ mes "He hesitates.";
+ mes "\"But no, this is too valuable. Perhaps if you finish that other quest I gave you...?\".";
+ next;
+ goto L_Main_menu;
+
+L_golden_requires_quest:
+ mes "He hesitates.";
+ mes "\"But no, this is too valuable. I think I should have you prove your worthiness with another quest first...\"";
+ next;
+ goto L_bone_quest;
+
+L_wrestle_explain:
+ mes "[Kfahr the Warrior]";
+ mes "\"Arm wrestling! Arm against arm! And whoever is stronger wins! If you manage to defeat me, I'll give you a little quest for the stinger. How about it?\"";
+ next;
+ goto L_gs_wrestle_intro;
+
+L_lowlvl_for_stinger:
+ mes "\"Well, I have one, but I can't just give it to anyone. Maybe if you train a little and become a worthy warrior I will consider giving it away...\"";
+ next;
+ goto L_Main_menu;
+
+L_gs_over_ask:
+ mes "[Kfahr the Warrior]";
+ mes "\"Is this about the stingers again? I already gave you a golden stinger, I'm not going to part with any more.\"";
+ next;
+ goto L_Main_menu;
+
+L_gs_ask_again:
+ mes "[Kfahr the Warrior]";
+ mes "\"This is about the stinger again, right? Well, just bring me " + @SNAKE_SKINS_NR + " snake skins, and you can have one.\"";
+ next;
+ goto L_Main_menu;
+
+L_gs_wrestle_again:
+ mes "[Kfahr the Warrior]";
+ mes "\"This is about the stinger again, eh? So you want to give it another try?\"";
+ mes "He grins broadly.";
+ next;
+ goto L_gs_wrestle;
+
+L_gs_wrestle:
+ mes "[Kfahr the Warrior]";
+ mes "You sit down. Both of you place your arms on the table, on opposing sides, and grab each other's hands.";
+ next;
+
+ @KFAHR_STR = 70 + @beer_count * 6;
+ @KFAHR_AGI = 60 - @beer_count * 5;
+ @kfahr_stamina = 120;
+
+ @PC_STR = Str;
+ @PC_AGI = Agi;
+ @PC_MAX_STAMINA = Vit + 20;
+ @pc_stamina = @PC_MAX_STAMINA;
+
+ setarray @positions$,
+ "Kfahr's hand is almost on the table.",
+ "Kfahr's hand is pushed back.",
+ "Kfahr and your hands are centered.",
+ "Your hand is pushed back.",
+ "Your hand is almost on the table.";
+
+ @position = 2;
+ @first_round = 1;
+ goto L_wrestle_loop;
+
+L_wrestle_loop:
+ mes "[Arm-wrestling with Kfahr]";
+ mes @positions$[@position];
+ if ((@pc_stamina * 2 <= @PC_MAX_STAMINA) && (@pc_stamina * 4 > @PC_MAX_STAMINA))
+ mes "You feel a little exhausted.";
+ if (@pc_stamina * 4 <= @PC_MAX_STAMINA)
+ mes "You feel very exhausted.";
+ next;
+ menu
+ "Push!", L_wrestle_push,
+ "Hold!", L_wrestle_hold,
+ "Slam!", L_wrestle_slam,
+ "Consider your options", L_wrestle_info;
+
+L_wrestle_info:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "Kfahr is a strong arm-wrestling opponent. Winning against him won't be easy.";
+ mes "Each round you have to choose an action; what you choose determines both your chances of moving each other's arms and how much weaker you get.";
+ next;
+ mes "[Arm-wrestling with Kfahr]";
+ mes "If you PUSH, you may be able to push him back, but if you fail, you will lose more stamina than if you had succeeded.";
+ next;
+ mes "[Arm-wrestling with Kfahr]";
+ mes "If you HOLD, you lose little stamina and may be able to hold him and drain his stength, but you cannot win just by holding.";
+ next;
+ mes "[Arm-wrestling with Kfahr]";
+ mes "If you SLAM, you try to move against him quickly – if you are successful, you may push him back quite a bit, but losing this will drain you badly.";
+ next;
+ goto L_wrestle_loop;
+
+L_wrestle_push:
+ @kfahr_def = @KFAHR_STR;
+ @attack = @PC_STR;
+ @Cost_factor = 2;
+ callsub L_wrestle_attack;
+ if (@result < -1) set @result, -1; // can't push back further than one
+ goto L_wrestle_next;
+
+L_wrestle_hold:
+ @kfahr_def = @KFAHR_STR;
+ @attack = @PC_STR;
+ @Cost_factor = 1;
+ callsub L_wrestle_attack;
+ if (@result < 0) set @result, 0; // hold only
+ goto L_wrestle_next;
+
+L_wrestle_slam:
+ if (@beer_count == 5 && @first_round)
+ goto L_quick_slam;
+ @kfahr_def = @KFAHR_AGI;
+ @attack = @PC_AGI;
+ @Cost_factor = 4;
+ callsub L_wrestle_attack;
+ goto L_wrestle_next;
+
+L_wrestle_attack:
+ @kfahr_stamina_bonus = @kfahr_stamina;
+ @pc_stamina_bonus = @kfahr_stamina;
+
+ if (@kfahr_stamina_bonus > 40)
+ @kfahr_stamina_bonus = 40;
+ if (@pc_stamina_bonus > 40)
+ @pc_stamina_bonus = 40;
+
+ @score = @kfahr_def + @kfahr_stamina_bonus - @attack - @pc_stamina_bonus + rand(20) - rand(20);
+ @result = @score / 10;
+
+ if (@result > 1)
+ @result = 1;
+ if (@result > 0)
+ @kfahr_stamina = @kfahr_stamina - 12;
+ if (@result == 0)
+ @kfahr_stamina = @kfahr_stamina - 16;
+ if (@result < 0)
+ @kfahr_stamina = @kfahr_stamina - 8;
+ if (@result < 0)
+ @pc_stamina = @pc_stamina - (6 * @Cost_factor);
+ if (@result == 0)
+ @pc_stamina = @pc_stamina - (8 * @Cost_factor);
+ if (@result > 0)
+ @pc_stamina = @pc_stamina - (4 * @Cost_factor);
+ if (@kfahr_stamina < 0)
+ @kfahr_stamina = 0;
+ if (@kfahr_stamina < 0)
+ @pc_stamina = 0;
+ return;
+
+L_wrestle_next:
+ @first_round = 0;
+
+ mes "[Arm-wrestling with Kfahr]";
+ if (@result < 0)
+ mes "You manage to push him back!";
+ if (@result == 0)
+ mes "You hold your position!";
+ if (@result > 0)
+ mes "Kfahr pushes you back!";
+ next;
+ @position = @position + @result;
+ if (@position < 0)
+ goto L_wrestle_win;
+ if (@position > 4)
+ goto L_wrestle_lose;
+ goto L_wrestle_loop;
+
+L_wrestle_lose:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "Kfahr slams your hand on the table.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "\"Don't worry! It was a good attempt – but beating Kfahr is not quite so easy!\"";
+ mes "He laughs and slaps you on the shoulder.";
+ mes "\"But come back any time you want to try again!\"";
+ next;
+ @Q_status = @QS_LOST_WRESTLING;
+ callsub L_Update_Var;
+ goto L_Main_menu;
+
+L_quick_slam:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "Your hands have barely touched as you push against him with all your might. His reactions slowed by the beer, Kfahr doesn't stand a chance.";
+ next;
+ goto L_wrestle_win;
+
+L_wrestle_win:
+ mes "[Arm-wrestling with Kfahr]";
+ mes "You slam Kfahr's hand on the table.";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "Kfahr stares first at the hand, then at you, incredulously.";
+ mes "Then he begins to roar with laughter, slapping you on the shoulder.";
+ mes "\"Excellent, excellent! Caught me in a weak moment there, did ya!\"";
+ next;
+ mes "[Kfahr the Warrior]";
+ mes "After calming down, Kfahr outlines your quest.";
+ mes "\"As I promised, I will give you the stinger if you do something for me. Get me " + @SNAKE_SKINS_NR + " snake skins, and I'll let you have it.\"";
+ next;
+ @Q_status = @QS_STINGER_QUEST;
+ callsub L_Update_Var;
+ goto L_Main_menu;
+
+L_End:
+ close;
+
+L_Update_Var:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(@Q_MASK) | (@Q_status << @Q_SHIFT));
+ return;
+}
diff --git a/npc/009-2/lena.txt b/npc/009-2/lena.txt
new file mode 100755
index 00000000..eb99f21f
--- /dev/null
+++ b/npc/009-2/lena.txt
@@ -0,0 +1,119 @@
+
+009-2,146,43,0 script Lena NPC182,{
+ @state = ((QUEST_Hurnscald & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
+
+ if (@state >= 6) goto L_Lena_Done;
+ if (@state == 5) goto L_Lena_Success;
+ if (@state == 4) goto L_LBL_Fail;
+ if (@state == 3) goto L_LBL_Fail;
+ if (@state == 2) goto L_Lena_Bandit_Leader;
+ if (@state == 1) goto L_Lena_Fairy_Hat;
+ if (BaseLevel >= 30) goto L_Lena_Start;
+
+ mes "[Lena]";
+ mes "\"I got ambushed by a group of bandits and one of them stabbed me pretty good. Hopefully I heal up soon so I can fight this menace.\"";
+ next;
+ mes "\"Ah, I wish my dear friend Nickos could be here. He's one of the guards in Tulimshar and he'd know how to deal with those outlaws!\"";
+ goto L_close;
+
+L_Lena_Start:
+ mes "[Lena]";
+ mes "\"While wandering through the forest, I was ambushed by bandits. Though I got them all, one of them stabbed me pretty good. I'm still healing from that encounter. I'm worried that the bandit threat may spread.\"";
+ menu
+ "Don't worry, I can take out some of these scumbags.", L_Lena_Approves,
+ "I think I left my courage in another pair of pants. See you later!", L_Lena_No_Fan;
+
+L_Lena_Approves:
+ @state = 1;
+ callsub S_Update_Var;
+ mes "[Lena]";
+ mes "\"You look like you can handle yourself in a fight. If you can take on this scourge I'll reward you with a hat like mine. In order to prove your mettle, bring me 10 Bandit Hoods so I know they've met their match.\"";
+ areamonster "008-1",25,60,40,65,"Bandit",1064,3, "::";
+ areamonster "011-1",35,40,65,60,"Bandit",1064,3, "::";
+ goto L_close;
+
+L_Lena_No_Fan:
+ mes "[Lena]";
+ mes "\"What will Hurnscald do if these bandits overrun the town? I hope you reconsider.\"";
+ goto L_close;
+
+L_Lena_Fairy_Hat:
+ if (countitem("BanditHood") < 10)
+ goto L_Lena_NotEnough;
+ getinventorylist;
+ if (@inventorylist_count - (countitem("BanditHood")== 10) > 99)
+ goto L_TooMany;
+ @state = 2;
+ callsub S_Update_Var;
+ delitem "BanditHood", 10;
+ getitem "FairyHat", 1;
+ mes "[Lena]";
+ mes "\"Ah, you've brought me the Bandit Hoods. As promised, here is a hat like mine.\"";
+ next;
+ mes "\"Unfortunately, I feel this bandit threat may have grown. Perhaps they are being lead? I noticed many of them seem to hang around a cave just west of Hurnscald. If you could defeat their leader I know they will become less of a threat to Hurnscald. I'll reward you with armor like mine if you do. Sound like something you could do?\"";
+ menu
+ "Consider it done!", L_LBL_Yes,
+ "Woah there, that sounds a bit harder than what I can succeed at.", L_Lena_NoWay;
+
+L_Lena_NotEnough:
+ mes "[Lena]";
+ mes "\"You don't have enough Bandit Hoods to prove you are taking care of this threat. Please come back with 10 Bandit Hoods to show you are taking care of these bandits.\"";
+ goto L_close;
+
+L_Lena_Bandit_Leader:
+ mes "[Lena]";
+ mes "\"I feel this bandit threat may have grown. Perhaps they are being lead? I noticed many of them seem to hang around a cave just west of Hurnscald. If you could defeat their leader I know they will become less of a threat to Hurnscald. I'll reward you with armor like mine if you do. Sound like something you could do?\"";
+ menu
+ "Consider it done!", L_LBL_Yes,
+ "Woah there, that sounds a bit harder than what I can succeed at.", L_Lena_NoWay;
+
+L_LBL_Yes:
+ @state = 3;
+ callsub S_Update_Var;
+ areamonster "008-1",25,60,40,65,"Bandit",1064,3, "::";
+ areamonster "011-1",35,40,65,60,"Bandit",1064,3, "::";
+ mes "[Lena]";
+ mes "\"You have a brave heart. Though I know you can succeed on your own, I recommend finding others to help you defeat the bandit leader. I believe he could pose a significant threat to solitary individuals seeking to challenge him. Good luck!\"";
+ goto L_close;
+
+L_Lena_NoWay:
+ mes "[Lena]";
+ mes "\"That is too bad. Feel free to return at any time. This bandit threat needs to be pushed back.\"";
+ goto L_close;
+
+L_LBL_Fail:
+ @state = 3;
+ callsub S_Update_Var;
+ mes "[Lena]";
+ mes "\"You haven't killed the bandit leader yet. This is a big problem. Please be careful.\"";
+ goto L_close;
+
+L_Lena_Success:
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_TooMany;
+ @state = 6;
+ callsub S_Update_Var;
+ getitem "ForestArmor", 1;
+ mes "[Lena]";
+ mes "\"Excellent! You killed the bandit leader. Here is the armor as I promised you. Safe journeys!\"";
+ goto L_close;
+
+L_Lena_Done:
+ mes "[Lena]";
+ mes "\"Thank you for all your help. With your efforts, we can only hope this scourge doesn't see a resurgence.\"";
+ goto L_close;
+
+L_TooMany:
+ mes "[Lena]";
+ mes "\"You have too many items in your inventory. Please get rid of something so I can reward you.\"";
+ goto L_close;
+
+L_close:
+ @state = 0;
+ close;
+
+S_Update_Var:
+ QUEST_Hurnscald = (QUEST_Hurnscald & ~(NIBBLE_0_MASK) | (@state << NIBBLE_0_SHIFT));
+ return;
+}
diff --git a/npc/009-2/mapflags.txt b/npc/009-2/mapflags.txt
new file mode 100755
index 00000000..599be6f9
--- /dev/null
+++ b/npc/009-2/mapflags.txt
@@ -0,0 +1,2 @@
+//009-2 mapflag town
+//009-2 mapflag resave 009-2,149,43
diff --git a/npc/009-2/misc.txt b/npc/009-2/misc.txt
new file mode 100755
index 00000000..ca100163
--- /dev/null
+++ b/npc/009-2/misc.txt
@@ -0,0 +1,51 @@
+
+009-2,54,49,0 script Note#bar NPC400,{
+ mes "[Note]";
+ mes "\"We refuse service to anyone who:\"";
+ mes "\"• Has a bubblehead\"";
+ mes "\"• Is not properly shaded\"";
+ mes "\"• Can't walk without stopping after every step\"";
+ close;
+ // In case you don't get the joke, know that it's a parody on Illutia.
+}
+
+009-2,109,44,0 script #Book NPC400,{
+ if (getskilllv(SKILL_MAGIC))
+ goto L_Magic;
+ mes "[Bookshelf]";
+ mes "This bookshelf seems to have a selection of diaries and manuscripts, though you can't find anything that strikes you as being particularly interesting.";
+ close;
+
+L_Magic:
+ mes "[Bookshelf]";
+ mes "Browsing through the books, you come across a manuscript entitled 'Notes of Potaffe, On Transmutation.'";
+ next;
+ if (getskilllv(SKILL_MAGIC_TRANSMUTE) < 2)
+ goto L_Magic_boring;
+ mes "[Bookshelf]";
+ mes "Leafing through the manuscript, you find that you can read little of the tiny handwriting and understand only a fraction of what is said.";
+ next;
+ mes "[Bookshelf]";
+ mes "After a while, you stumble across a section that appears to be written somewhat legibly. The author notes that he (or perhaps she?) is describing a completely new transmutation.";
+ next;
+ mes "[Bookshelf]";
+ mes "Excitedly, you turn the page – only to find that it is stuck to the next and can't be freed!";
+ next;
+ mes "[Bookshelf]";
+ mes "The page after that is once again hastily written, with many crossed out words and sections and side remarks such as 'it almost worked' or 'it worked fine yesterday.'";
+ next;
+ mes "[Bookshelf]";
+ mes "The last word on that page is '" + get(.invocation$, "make-iron-powder") + ",' and it's underlined twice with a comment next to it saying 'finally got it right.'";
+ next;
+ mes "[Bookshelf]";
+ mes "Unfortunately, you can't make out what the transmutation is for or even whether it requires any materials...";
+ next;
+ mes "[Bookshelf]";
+ mes "You can't make out anything else of value, so you place the manuscript back in the bookshelf.";
+ close;
+
+L_Magic_boring:
+ mes "[Bookshelf]";
+ mes "Leafing through the manuscript, you find that you understand too little of what is written to make any sense of it.";
+ close;
+}
diff --git a/npc/009-2/nicholas.txt b/npc/009-2/nicholas.txt
new file mode 100755
index 00000000..8071ab35
--- /dev/null
+++ b/npc/009-2/nicholas.txt
@@ -0,0 +1,401 @@
+
+009-2,185,55,0 script Nicholas NPC135,{
+ @SETZER_XP = 100000;
+ @SHIELD_XP = 20000;
+
+ @SHIELD_INITIAL = 0;
+ set @SHIELD_KNOWS_PATCH, 1; // knows that a leather patch is needed
+ set @SHIELD_COMPLETED, 2; // shield completed once
+
+ @SETZER_INITIAL = 0;
+ @SETZER_KNOWS_OIL = 1;
+ @SETZER_KNOWS_STINGER = 2;
+ @SETZER_FLAG_MADE_OIL = 4;
+ @SETZER_FLAG_MADE_SETZER = 8;
+
+ @Q_SETZER_MASK = NIBBLE_3_MASK;
+ @Q_SETZER_SHIFT = NIBBLE_3_SHIFT;
+
+ @Q_SHIELD_MASK = NIBBLE_4_MASK;
+ @Q_SHIELD_SHIFT = NIBBLE_4_SHIFT;
+
+ @Q_SETZER_status = (QUEST_Forestbow_state & @Q_SETZER_MASK) >> @Q_SETZER_SHIFT;
+ @Q_SHIELD_status = (QUEST_Forestbow_state & @Q_SHIELD_MASK) >> @Q_SHIELD_SHIFT;
+
+ mes "[Nicholas]";
+ mes "\"Hello, there! I'm an expert blacksmith. If you get me some Coal and Iron Ingots, I could make you a very valuable shield or helmet.\"";
+ next;
+ menu
+ "I have Iron Ingots!", L_Check,
+ "Where can I get Coal and Iron Ingots?", L_Info,
+ "I'm okay, thanks.", L_Pass;
+
+L_Check:
+ mes "[Nicholas]";
+ mes "\"Let me take a look at how much you have...\"";
+ next;
+ if ( (countitem("IronIngot")<3) || (countitem("Coal") < 6) )
+ goto L_NoItem;
+ if ( (countitem("IronIngot")<6) || (countitem("Coal") < 12) )
+ goto L_StageA;
+ if ( (countitem("IronIngot")<9) || (countitem("Coal") < 18) )
+ goto L_StageB;
+ goto L_StageC;
+
+L_Info:
+ mes "[Nicholas]";
+ mes "\"You can find Coal and Iron Ore in mines. Once you have Coal and Iron Ore, find a smith that will smelt the Iron Ore and cast them into Iron Ingots.\"";
+ next;
+ mes "[Nicholas]";
+ mes "\"Come back here with some Coal and Iron Ingots, and I'll make something nice for you.\"";
+ close;
+
+L_Pass:
+ mes "[Nicholas]";
+ mes "\"Oh, okay. Come back any time.\"";
+ close;
+
+L_StageA:
+ mes "[Nicholas]";
+ mes "\"That's just enough for me to make you a winged Knight's Helmet, but it'll cost you 10,000GP, 6 Coal and 3 Iron Ingots.\"";
+ next;
+ goto L_Main_menu;
+
+L_StageB:
+ mes "[Nicholas]";
+ mes "\"Ahh, with that much Coal and Iron Ingots I can make you one of two helmets, for only 10,000GP, or I can make you a shield, for 20,000GP.\"";
+ mes "";
+ mes "\"What would you like?\"";
+ next;
+ goto L_Main_menu;
+
+L_StageC:
+ mes "[Nicholas]";
+ mes "\"Excellent, that's enough to make three different types of helmet. My fee is 10,000GP. I can also make a shield, but that will cost you 20,000 GP.\"";
+ mes "";
+ mes "\"Which will it be?\"";
+ next;
+ goto L_Main_menu;
+
+L_Main_menu:
+
+ @CHOICE_KNIGHT = 1;
+ @CHOICE_CRUSADE = 2;
+ @CHOICE_WARLORD = 3;
+ @CHOICE_SHIELD = 4;
+ @CHOICE_SETZER = 5;
+ @CHOICE_CANCEL = 6;
+
+ setarray @choice$, "", "", "", "", "", "";
+ @choices_nr = 0;
+ setarray @choice_idx, 0, 0, 0, 0, 0, 0;
+
+ if (countitem("ShortSword") < 1)
+ goto L_Main_menu_post_setzer;
+ @choice$[@choices_nr] = "Can you make my Short Sword better?";
+ @choice_idx[@choices_nr] = @CHOICE_SETZER;
+ @choices_nr = 1 + @choices_nr;
+ goto L_Main_menu_post_setzer;
+
+L_Main_menu_post_setzer:
+
+ if ( (countitem("IronIngot")<3) || (countitem("Coal") <6) )
+ goto L_No_more_helmets;
+ @choice$[@choices_nr] = "Knight's Helmet (3 Iron Ingots & 6 Coal).";
+ @choice_idx[@choices_nr] = @CHOICE_KNIGHT;
+ @choices_nr = 1 + @choices_nr;
+
+ if ( (countitem("IronIngot")<6) || (countitem("Coal") < 12) )
+ goto L_No_more_helmets;
+ @choice$[@choices_nr] = "Crusade Helmet (6 Iron Ingots & 12 Coal).";
+ @choice_idx[@choices_nr] = @CHOICE_CRUSADE;
+ @choices_nr = 1 + @choices_nr;
+
+ @choice$[@choices_nr] = "Steel Shield (6 Iron Ingots & 12 Coal).";
+ @choice_idx[@choices_nr] = @CHOICE_SHIELD;
+ @choices_nr = 1 + @choices_nr;
+
+ if ( (countitem("IronIngot")<9) || (countitem("Coal") < 18) )
+ goto L_No_more_helmets;
+ @choice$[@choices_nr] = "Warlord Helmet (9 Iron Ingots & 18 Coal).";
+ @choice_idx[@choices_nr] = @CHOICE_WARLORD;
+ @choices_nr = 1 + @choices_nr;
+ goto L_No_more_helmets;
+
+L_No_more_helmets:
+ @choice$[@choices_nr] = "No thanks.";
+ @choice_idx[@choices_nr] = @CHOICE_CANCEL;
+ @choices_nr = 1 + @choices_nr;
+ menu
+ @choice$[0], L_MenuItems,
+ @choice$[1], L_MenuItems,
+ @choice$[2], L_MenuItems,
+ @choice$[3], L_MenuItems,
+ @choice$[4], L_MenuItems,
+ @choice$[5], L_MenuItems;
+
+L_MenuItems:
+ @menu = @menu - 1;
+ if (@menu >= @choices_nr)
+ close;
+
+ @choice = @choice_idx[@menu];
+ if (@choice == @CHOICE_KNIGHT)
+ goto L_YesKnight;
+ if (@choice == @CHOICE_CRUSADE)
+ goto L_YesCrusade;
+ if (@choice == @CHOICE_WARLORD)
+ goto L_YesWarlord;
+ if (@choice == @CHOICE_SHIELD)
+ goto L_YesShield;
+ if (@choice == @CHOICE_SETZER)
+ goto L_SetzerQuest;
+ if (@choice == @CHOICE_CANCEL)
+ goto L_End;
+ close;
+
+L_NoItem:
+ mes "[Nicholas]";
+ mes "\"It appears you don't have enough Coal and Iron Ingots for me to work with. Please do come back when you have more, though.\"";
+ close;
+
+L_NoMoney:
+ mes "[Nicholas]";
+ mes "\"Oh dear, it seems you don't have enough money.\"";
+ close;
+
+L_YesKnight:
+ if (Zeny < 10000)
+ goto L_NoMoney;
+ if ( (countitem("IronIngot")<3) || (countitem("Coal") < 6) )
+ goto L_NoItem;
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_TooMany;
+ Zeny = Zeny - 10000;
+ delitem "IronIngot", 3;
+ delitem "Coal", 6;
+ getitem "KnightsHelmet", 1;
+ goto L_Done;
+
+L_YesCrusade:
+ if (Zeny < 10000) goto L_NoMoney;
+ if ( (countitem("IronIngot")<6) || (countitem("Coal") < 12) )
+ goto L_NoItem;
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_TooMany;
+ Zeny = Zeny-10000;
+ delitem "IronIngot", 6;
+ delitem "Coal", 12;
+ getitem "CrusadeHelmet", 1;
+ goto L_Done;
+
+L_YesWarlord:
+ if (Zeny < 10000) goto L_NoMoney;
+ if ( (countitem("IronIngot")<9) || (countitem("Coal") < 18) )
+ goto L_NoItem;
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_TooMany;
+ Zeny = Zeny-10000;
+ delitem "IronIngot", 9;
+ delitem "Coal", 18;
+ getitem "WarlordHelmet", 1;
+ goto L_Done;
+
+L_YesShield:
+ mes "[Nicholas]";
+ mes "Nicholas examines your Iron Ingots.";
+ mes "\"No, this iron is too brittle; for something as large as a shield I need to mix in softer iron. Can I see if you have anything suitable?\"";
+ next;
+ menu
+ "Sure, have a look!", L_Next,
+ "No.", L_Pass;
+
+L_Next:
+ if (countitem("InfantryHelmet") == 1)
+ goto L_MoreInfantry;
+ if (countitem("InfantryHelmet") == 0)
+ goto L_NoInfantry;
+
+ mes "[Nicholas]";
+ mes "Nicholas pulls out two of your Infantry Helmets.";
+ mes "\"I can use those... yes, that should work. Now all I need is a Leather Patch for the handle, and 20,000 GP.\"";
+ if (@Q_SHIELD_status < @SHIELD_KNOWS_PATCH)
+ @Q_SHIELD_status = @SHIELD_KNOWS_PATCH;
+ callsub L_Update_Var;
+ next;
+ menu
+ "Here you are!", L_Next1,
+ "Where can I get a Leather Patch?", L_WhereLeather,
+ "No way.", L_Pass;
+
+L_Next1:
+ if (Zeny < 20000)
+ goto L_ShieldNoZeny;
+ if (countitem("InfantryHelmet") < 2)
+ goto L_ShieldNoInfantry;
+ if (countitem("IronIngot") < 6)
+ goto L_ShieldNoIngot;
+ if (countitem("Coal") < 12)
+ goto L_ShieldNoCoal;
+ if (countitem("LeatherPatch") < 1)
+ goto L_ShdNoLeathPatch;
+ // No inventory check needed, as infantry helms are removed, opening two slots
+
+ mes "[Nicholas]";
+ mes "\"Yes, it looks as if you have all that is needed!\"";
+ mes "You watch Nicholas melt the ingots and helmets and form a shield out of the resulting iron. He then cuts your Leather Patch apart and adds it to the handles.";
+ mes "\"Here is your shield!\"";
+ delitem "InfantryHelmet", 1;
+ delitem "InfantryHelmet", 1;
+ delitem "LeatherPatch", 1;
+ delitem "IronIngot", 6;
+ delitem "Coal", 12;
+ Zeny = Zeny - 20000;
+
+ if (@Q_SHIELD_status < @SHIELD_COMPLETED)
+ getexp @SHIELD_XP, 0;
+ if (@Q_SHIELD_status < @SHIELD_COMPLETED)
+ mes "[" + @SHIELD_XP + " experience points]";
+ set @Q_SHIELD_status, @SHIELD_COMPLETED; // get XP only once
+ callsub L_Update_Var;
+ getitem "SteelShield", 1;
+ close;
+
+L_ShieldNoZeny:
+ mes "[Nicholas]";
+ mes "\"I am sorry, but I must ask that you pay 20,000 GP; this is quality work.\"";
+ close;
+
+L_ShieldNoInfantry:
+ mes "[Nicholas]";
+ mes "\"Now this is strange... I could have sworn that you had two Infantry Helmets right here. Well, come back if you have some more!\"";
+ close;
+
+L_ShieldNoIngot:
+ mes "[Nicholas]";
+ mes "\"How odd... didn't I put your Iron Ingots on the table right here? Well, I will need them back to make the shield.\"";
+ close;
+
+L_ShieldNoCoal:
+ mes "[Nicholas]";
+ mes "\"How odd... didn't I put your Coal on the table right here? Well, I will need it back to make the shield.\"";
+ close;
+
+L_ShdNoLeathPatch:
+ mes "[Nicholas]";
+ mes "\"You don't have a suitable Leather Patch. I'm sorry, but a shield without one would chafe terribly.\"";
+ close;
+
+L_MoreInfantry:
+ mes "[Nicholas]";
+ mes "Nicholas takes your Infantry Helmet and examines it.";
+ mes "\"Yes, this is perfect! If you can bring me another one of those, I can make your shield.\"";
+ close;
+
+L_NoInfantry:
+ mes "[Nicholas]";
+ mes "Nicholas shakes his head.";
+ mes "\"No, none of these items are suitable. Try looking for somewhat large metal items.\"";
+ close;
+
+L_WhereLeather:
+ mes "[Nicholas]";
+ mes "\"Hmm. You should look for someone who can work with some kind of leather. Rumor has it that there is someone in the eastern desert who can, but I haven't been there.\"";
+ close;
+
+L_SetzerQuest:
+ mes "[Nicholas]";
+ if (@Q_SETZER_status & @SETZER_FLAG_MADE_SETZER)
+ mes "\"Another one? Sure, why not.\"";
+ mes "Nicholas examines your Short Sword, then nods.";
+ mes "\"This is good quality. I can make something special out of it, with three ingot bars of iron, six lumps of coal and 50,000 GP -- but I will also need a potion of monster oil.\"";
+ if (@Q_SETZER_status < @SETZER_KNOWS_OIL)
+ @Q_SETZER_status = @SETZER_KNOWS_OIL;
+ callsub L_Update_Var;
+ next;
+ menu
+ "Here you are.", L_Next2,
+ "Monster oil? What's that?", L_ExplainMonsterOil,
+ "HOW much? Nevermind then!", L_Pass;
+
+L_Next2:
+ if (Zeny < 50000)
+ goto L_SetzerNoZeny;
+ if ( (countitem("IronIngot") < 3) || (countitem("Coal") < 6) )
+ goto L_SetzerNoIngot;
+ if (countitem("MonsterOilPotion") < 1)
+ goto L_SetzerNoMonsterOil;
+ if (countitem("ShortSword") < 1)
+ goto L_SetzerNoSword;
+ // No inventory check needed, as the short sword is removed, opening a slot
+
+ mes "[Nicholas]";
+ mes "Nicholas takes the items, heats up your sword and pounds it with a heavy hammer. As you watch, it turns thinner and flatter. Finally he pours the monster oil over it, heats the metal up again and douses it in water.";
+ Zeny = Zeny - 50000;
+ delitem "IronIngot", 3;
+ delitem "Coal", 6;
+ delitem "MonsterOilPotion", 1;
+ delitem "ShortSword", 1;
+ getitem "Setzer", 1;
+ if (!(@Q_SETZER_status & @SETZER_FLAG_MADE_SETZER))
+ mes "[" + @SETZER_XP + " experience points]";
+ if (!(@Q_SETZER_status & @SETZER_FLAG_MADE_SETZER))
+ getexp @SETZER_XP, 1;
+ @Q_SETZER_status = @Q_SETZER_status | @SETZER_FLAG_MADE_SETZER;
+ callsub L_Update_Var;
+ next;
+ mes "[Nicholas]";
+ mes "Nicholas hands you the completed sword. It feels strangely light in your hands.";
+ mes "\"I made it lighter and faster, it should also cut a little better now. This kind of sword is called a Setzer, after a famous gambler who invented it as a weapon in between a knife and a sword.\"";
+ next;
+ mes "[Nicholas]";
+ mes "\"I'm quite happy with this one. Be careful around the edge, though, it is quite sharp!\"";
+ close;
+
+L_ExplainMonsterOil:
+ mes "[Nicholas]";
+ mes "\"Monster oil is a special oil that can be used to harden thin sheets of metal, if used properly. Unfortunately, it is very hard to get. Perhaps one of our local alchemists can help you with it?\"";
+ close;
+
+L_SetzerNoZeny:
+ mes "[Nicholas]";
+ mes "\"I am sorry, but I must ask that you pay 50,000 GP; the kind of weapon I am thinking of is not easy to make.\"";
+ close;
+
+L_SetzerNoIngot:
+ mes "[Nicholas]";
+ mes "\"Without 3 ingots of iron, and six lumps of coal, I can't improve your sword.\"";
+ close;
+
+L_SetzerNoMonsterOil:
+ mes "[Nicholas]";
+ mes "\"I know that monster oil is hard to come by, but I can't do much without it. Ask an alchemist if you need help making it.\"";
+ close;
+
+L_SetzerNoSword:
+ mes "[Nicholas]";
+ mes "\"I will need your old Short Sword as a basis. Please bring it to me first.\"";
+ close;
+
+L_End:
+ close;
+
+L_Done:
+ mes "[Nicholas]";
+ mes "\"Here you go!\"";
+ mes "";
+ mes "\"Come back any time.\"";
+ close;
+
+L_Update_Var:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(@Q_SHIELD_MASK | @Q_SETZER_MASK) | (@Q_SHIELD_status << @Q_SHIELD_SHIFT) | (@Q_SETZER_status << @Q_SETZER_SHIFT));
+ return;
+
+L_TooMany:
+ mes "[Nicholas]";
+ mes "\"You don't have room for it. Come back later when you do.\"";
+ close;
+}
diff --git a/npc/009-2/nurse.txt b/npc/009-2/nurse.txt
new file mode 100755
index 00000000..0eefac54
--- /dev/null
+++ b/npc/009-2/nurse.txt
@@ -0,0 +1,538 @@
+
+
+009-2,147,65,0 script Nurse NPC119,{
+ @halloween_npc_id = $@halloween_npc_nurse;
+ callfunc "TrickOrTreat";
+
+ @SNAKET_AMOUNT = 5;
+ @BSCORPIONST_AMOUNT = 10;
+ // This quest can be done very often: so give less xp
+ @QUEST1_EXP = 300;
+ @ACORNS_AMOUNT = 10;
+ @GREENAPPLE_AMOUNT = 5;
+ @REDAPPLE_AMOUNT = 5;
+ @ORANGE_AMOUNT = 5;
+ @HEALING_AMOUNT = 3;
+ // This quest can be done very often: so give less xp
+ @QUEST2_EXP = 700;
+ @ANTIDOTE_EXP = 10000;
+
+ @Q_poison_MASK = NIBBLE_7_MASK;
+ @Q_poison_SHIFT = NIBBLE_7_SHIFT;
+ @Q_poison = (QUEST_Forestbow_state & @Q_poison_MASK) >> @Q_poison_SHIFT;
+
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ if (@Q_poison == 7) goto L_state7;
+ if (@Q_poison == 6) goto L_state6;
+ if (@Q_poison == 5) goto L_state5;
+ if (@Q_poison == 4) goto L_state4;
+ if (@Q_poison == 3) goto L_state3;
+ if (@Q_poison == 2) goto L_state2;
+ if (@Q_poison == 1) goto L_state1;
+ if (getskilllv(SKILL_POOL)) goto L_state0;
+ goto L_Usual;
+
+L_Usual:
+ mes "[Nurse]";
+ mes "\"How can I help you?\"";
+ next;
+
+ if (@inspector == 1)
+ menu
+ "Oooh, these wounds! They hurt so much!", L_Heal,
+ "I don't feel so well, I might be sick.", L_Doctor,
+ "Have you seen anything out of the ordinary?", L_NohMask,
+ "No, I'm fine.", L_Next;
+ menu
+ "Oooh, these wounds! They hurt so much!", L_Heal,
+ "I don't feel so well, I might be sick.", L_Doctor,
+ "No, I'm fine.", L_Next;
+
+L_Next:
+ mes "[Nurse]";
+ mes "\"Then I would ask you to leave. There are people who really need our help.\"";
+ goto L_close;
+
+L_Doctor:
+ mes "[Nurse]";
+ mes "\"Then you should better see the doctor. He is usually in his office on the 3rd floor.\"";
+ goto L_close;
+
+L_Heal:
+ if (BaseLevel > 20) goto L_NoHeal;
+ mes "[Nurse]";
+ mes "\"Here, let me heal you.\"";
+ next;
+ heal 10000, 10000;
+ goto L_close;
+
+L_NoHeal:
+ mes "[Nurse]";
+ mes "\"I'm sorry but I'm here only to help young people.";
+ mes "Your level is already higher than 20.";
+ mes "You can get some rest in the inn near here.\"";
+ goto L_close;
+
+L_NohMask:
+ mes "[Nurse]";
+ mes "\"I'm too busy here to observe the town.\"";
+ goto L_close;
+
+L_state0:
+ mes "[Nurse]";
+ mes "\"Welcome! You really look like a competent person. Maybe you can help to deal with a problem we have.\"";
+ next;
+ mes "\"We recently had some accidents in the mines. It seems that the creatures in the mines became more aggressive.\"";
+ next;
+ mes "\"Unfortunately, some of them are poisonous and it is very difficult for us to help the miners.\"";
+ next;
+ mes "\"For that reason, I want to do some research on this subject, to create an antidote. But I need help to get some ingredients, someone who is able to deal with the dangerous creatures in the mines.\"";
+ next;
+ menu
+ "I will do what I can. What do you need?", L_firstquest,
+ "I'm really sorry, but I don't think I can help you.", L_Next1;
+
+L_Next1:
+ mes "\"That is disagreeable to hear. Maybe I can find another person to take this task.\"";
+ next;
+ goto L_Usual;
+
+L_firstquest:
+ @Q_poison = 1;
+ callsub S_Update_Var;
+ mes "\"That's great! First, I need some parts of the poisonous creatures.\"";
+ next;
+ goto L_ExplainAgain1;
+
+L_ExplainAgain1:
+ mes "\"Please bring me five tongues of snakes and ten stingers of black scorpions.\"";
+ goto L_close;
+
+L_state1:
+ mes "[Nurse]";
+ mes "\"You are back, wonderful! Did you get what we need for the antidote?\"";
+ next;
+ menu
+ "Actually, I have another question.", L_Usual,
+ "Sorry, I forgot. What shall I bring you?", L_ExplainAgain1,
+ "I have what you asked for.", L_Next2,
+ "I'm still working on that.", L_close;
+
+L_Next2:
+ if (countitem("SnakeTongue") < @SNAKET_AMOUNT || countitem("BlackScorpionStinger") < @BSCORPIONST_AMOUNT)
+ goto L_NotEnough;
+ delitem "SnakeTongue", @SNAKET_AMOUNT;
+ delitem "BlackScorpionStinger", @BSCORPIONST_AMOUNT;
+ getexp @QUEST1_EXP, 0;
+ @Q_poison = 2;
+ callsub S_Update_Var;
+ mes "[Nurse]";
+ mes "\"Very good. Now I have to extract the poison from this, it will take some time.\"";
+ next;
+ mes "\"But there are some other things we will need in any case. It would be courteous if you could get them meanwhile.\"";
+ next;
+ goto L_ExplainAgain2;
+
+L_ExplainAgain2:
+ mes "\"Please bring me ten acorns, five red apples, five green apples and also five oranges. And we need some small healing potions. They will be useful to hold off the baneful effects. Three of them will be enough, I guess.\"";
+ goto L_close;
+
+L_state2:
+ mes "You look at the nurse, who seems to be really tired, with shadows under her eyes. When she recognizes you, she smiles.";
+ mes "[Nurse]";
+ mes "\"I managed to extract the poisonous components. We should be able to create an antidote, if you have everything else we need.\"";
+ next;
+ menu
+ "Actually, I have another question.", L_Usual,
+ "I have a bad memory. Can you tell me again what we need?", L_ExplainAgain2,
+ "I managed to get everything we need.", L_Next3,
+ "I will go and get it.", L_close;
+
+L_Next3:
+ if (countitem("Acorn") < @ACORNS_AMOUNT
+ || countitem("GreenApple") < @GREENAPPLE_AMOUNT
+ || countitem("RedApple") < @REDAPPLE_AMOUNT
+ || countitem("Orange") < @ORANGE_AMOUNT
+ || countitem("SmallHealingPotion") < @HEALING_AMOUNT)
+ goto L_NotEnough;
+ delitem "Acorn", @ACORNS_AMOUNT;
+ delitem "GreenApple", @GREENAPPLE_AMOUNT;
+ delitem "RedApple", @REDAPPLE_AMOUNT;
+ delitem "Orange", @ORANGE_AMOUNT;
+ delitem "SmallHealingPotion", @HEALING_AMOUNT;
+ getexp @QUEST2_EXP, 0;
+ @Q_poison = 3;
+ callsub S_Update_Var;
+ goto L_Chemistry;
+
+L_Chemistry:
+ callsub L_Shuffle_Need;
+ mes "The nurse takes the ingredients you brought and starts to squeeze the fruits and to crush the acorns. Then she put the fruit juices in some complicated looking chemical device.";
+ next;
+ mes "After some minutes, it is blubbering and steaming and a liquid is dripping in a pot under the device.";
+ next;
+ mes "Then she takes the acorn flour and the liquid and goes to a place back in the room, where she does something you don't see.";
+ next;
+ mes "After just a few moments, she comes back with a smiling face, holding two different bottles in her hand.";
+ next;
+ mes "[Nurse]";
+ mes "\"That was easy compared to the things to be done with the stingers and snake tongues.\"";
+ next;
+ mes "Then her facial expression gets more serious.";
+ next;
+ mes "\"When we try to find the right mixture for the antidote, we need to test it.\"";
+ next;
+ mes "\"For that purpose, I will poison you. Then you drink the antidote to see if it works.\"";
+ next;
+ mes "\"If we make a mistake, this might be exhausting and painful, so you should rest a while and prepare yourself.\"";
+ next;
+ mes "\"Come back when you feel ready for that task.\"";
+ goto L_close;
+
+L_state3:
+ mes "[Nurse]";
+ mes "\"Hello my friend. You feel prepared to test the antidote?\"";
+ next;
+ menu
+ "Actually, I have another question.", L_Usual,
+ "Yes, let us begin.",L_Exp_Game;
+
+L_Exp_Game:
+ mes "[Nurse]";
+ mes "\"Listen carefully! I will explain what you need to do.\"";
+ next;
+ mes "\"I have here two different distillates. One is the venom extract, the other one is a stabilizer.\"";
+ next;
+ mes "\"We also have the healing potion.\"";
+ next;
+ mes "\"The problem is that I can only guess the concentration of the venom and the stabilizer. My equipment isn't good enough to determine them precisely.\"";
+ next;
+ mes "\"You need to find the right amount of each ingredient. I will tell you what I can know with my analysis methods.\"";
+ next;
+ mes "\"Shall we start?\"";
+ next;
+ menu
+ "Please explain it again.", L_Exp_Game,
+ "Alright.", L_Game;
+
+L_Game:
+ callsub S_Update_Var;
+ // healing, venom, stabilizer
+ callsub L_Load_Need;
+ //descriptions
+ @desc_length = 6;
+
+ setarray @desc$,"very little","only a little", "little","much", "a lot", "very much", "a huge amount";
+
+ @divisor = @count / @desc_length;
+
+ @hlIndex = (@hlNeed-@offset) /@divisor;
+ @vnIndex = (@vnNeed-@offset) /@divisor;
+ @stIndex = (@stNeed-@offset) /@divisor;
+
+ mes "[Nurse]";
+ mes "\"I guess you need " + @desc$[@hlIndex] + " of the healing potion.\"";
+ next;
+ mes "\"You need " + @desc$[@vnIndex] + " of the venom extracts, I suppose.\"";
+ next;
+ mes "\"As far as I can tell you will need " + @desc$[@stIndex] + " of the stabilizer.\"";
+ next;
+
+ if(@hlNeed/@vnNeed > 1 )
+ mes "\"I see that the healing potions are needed at least " + @hlNeed/@vnNeed + " times as much as the venom.\"";
+ if(@vnNeed/@hlNeed > 1 )
+ mes "\"I see that the venom extracts are needed at least " + @vnNeed/@hlNeed + " times as much as the healing potions.\"";
+ if ( (@hlNeed/@vnNeed > 1 ) || (@vnNeed/@hlNeed > 1 ))
+ next;
+
+ if(@stNeed/@vnNeed > 1 )
+ mes "\"I see that the stabilizer is needed at least " + @stNeed/@vnNeed + " times as much as the venom extracts.\"";
+ if(@vnNeed/@stNeed > 1 )
+ mes "\"I see that the venom extracts are needed at least " + @vnNeed/@stNeed + " times as much as the stabilizer.\"";
+ if ((@vnNeed/@stNeed > 1 ) || (@stNeed/@vnNeed > 1 ))
+ next;
+
+ if(@stNeed/@hlNeed > 1 )
+ mes "\"I see that the stabilizer is needed at least " + @stNeed/@hlNeed + " times as much as the healing potions.\"";
+ if(@hlNeed/@stNeed > 1 )
+ mes "\"I see that the healing potions are needed at least " + @hlNeed/@stNeed + " times as much as the stabilizer.\"";
+ if ((@hlNeed/@stNeed > 1 ) || (@stNeed/@hlNeed > 1 ))
+ next;
+ goto L_choosePut;
+
+L_choosePut:
+ @max = @count+@offset-1;
+ @min = @offset;
+ mes "\"My scale goes up to " + @max + ". I suggest to put at least " + @min +" drops on the scale.\"";
+ next;
+
+ mes "\"How many drops of the healing potion should we use?\"";
+ input @hlPut;
+ if (@hlPut < @offset)
+ goto L_Game_tooless;
+ if (@hlPut > @max)
+ goto L_Game_toomuch;
+
+ mes "\"How many drops of the venom extract potion should we use? \"";
+ input @vnPut;
+ if (@vnPut < @offset)
+ goto L_Game_tooless;
+ if (@vnPut > @max)
+ goto L_Game_toomuch;
+
+ mes "\"How many drops of the stabilizer potion should we use? \"";
+ input @stPut;
+ if (@stPut < @offset)
+ goto L_Game_tooless;
+ if (@stPut > @max)
+ goto L_Game_toomuch;
+
+ mes "The nurse puts the potions together according to your instructions. Then she takes a spoon and stirs it.";
+ next;
+ mes "You take the glass and look suspiciously at the liquid, which has changed to an odd colour.";
+ next;
+ mes "[Nurse]";
+ mes "\"Alright, now I will inject the venom into you, then you should drink the antidote immediately. Are you ready?\"";
+ next;
+ mes "You take a deep breath and nod.";
+ next;
+ mes "The nurse take a scary looking syringe out of a drawer and swabs your arm with disinfection dabber.";
+ next;
+ mes "Then she stings the syringe in your vein and pushs it down. After a few seconds, your heart starts pounding quicker and you begin to sweat all over your body.";
+ next;
+ mes "[Nurse]";
+ mes "\"Drink the antidote!\"";
+ next;
+ mes "You lift the glass to your lips and drink it all at once.";
+ next;
+
+ @Q_poison = @Q_poison + 1;
+
+ if ( (@hlPut > @hlNeed) && (@vnPut > @vnNeed) )
+ goto L_m_hl_m_vn;
+ if ( (@hlPut > @hlNeed) && (@vnPut <= @vnNeed) )
+ goto L_m_hl_l_vn;
+ if ( (@hlPut <= @hlNeed) && (@vnPut > @vnNeed) )
+ goto L_hl_m_vn;
+ if ( (@hlPut < @hlNeed) && (@vnPut < @vnNeed) )
+ goto L_hl_l_vn;
+
+ mes "You feel quite normal.";
+ mes "[Nurse]";
+ mes "\"Oh yes, the concentration of the healing potions and the venom extracts seem to be right.\"";
+ next;
+ @hl_vn_ok = 1;
+ goto L_check_st;
+
+L_m_hl_m_vn:
+ //poison for 3 minutes
+ sc_start SC_POISON, 1, 20;
+ mes "You begin to feel really dizzy. And you feel so light - you can't help yourself and burst out with laughter. What a strange feeling!";
+ next;
+ mes "The nurse looks at you with a really worried look on her face. As you open your mouth to tell her that you feel alright, the content of your stomach finds its way out through your throat and on the floor.";
+ next;
+ mes "The feeling of happiness disappears, but you seem to be still poisoned.";
+ goto L_check_st;
+
+L_m_hl_l_vn:
+ //poison for 1 minute
+ sc_start SC_POISON, 1, 20;
+ mes "You feel the pain of the poison weaken. This seems promising. The thought that you might have been successful makes you feel enormously happy.";
+ next;
+ mes "But a few seconds later, you wonder what was the reason for your happiness.";
+ next;
+ mes "Anyway, what are you doing here? Actually, where are you?";
+ next;
+ mes "You don't care, you feel so great. You start to giggle and laugh uncontrollably. What a wonderful feeling. ";
+ next;
+ mes "Suddenly, the world has some really strange colors. As you watch this woman in front of you changing her color from dark green to a light purple, you become really tired.";
+ next;
+ mes "You lay down on the floor and fall asleep.";
+ next;
+ mes "As you open your eyes again, the nurse shines in your face with a lamp and pulls your eyelids open. Then she nods.";
+ next;
+ mes "\"Very well, you are sober again.\"";
+ next;
+ goto L_check_st;
+
+L_hl_m_vn:
+ // first poison for 10 minutes, player will die anyway
+ sc_start SC_POISON, 1, 20;
+ mes "You feel a sting in your stomach and your heart starts pounding loudly.";
+ next;
+ mes "The room is getting dark.";
+ next;
+ mes "...and darker...";
+ next;
+ mes ".......";
+ // bye bye player!
+ heal -Hp, 0;
+ // close instead of telling how much stabilizer is needed
+ goto L_close;
+ // goto L_check_st;
+
+L_hl_l_vn:
+ //poison for 1 minute
+ sc_start SC_POISON, 1, 20;
+ mes "The antidote seems to have no effect.";
+ goto L_check_st;
+
+L_check_st:
+ if ( (@stPut < @stNeed) )
+ goto L_st;
+ if ( (@stPut > @stNeed) )
+ goto L_m_st;
+ if (@hl_vn_ok == 1)
+ goto L_AllCorrect;
+
+ mes "[Nurse]";
+ mes "\"The amount of the stabilizer seems alright, but we have to think again about the other ingredients.\"";
+ next;
+ goto L_NotAllCorrect;
+
+L_st:
+ mes "[Nurse]";
+ mes "\"It looks like we used not enough of the stabilizer. The antidote will lose its effect after some time.\"";
+ next;
+ goto L_NotAllCorrect;
+
+L_m_st:
+ mes "[Nurse]";
+ mes "\"It looks like we used too much of the stabilizer. The antidote will turn into venom again after some time.\"";
+ next;
+ goto L_NotAllCorrect;
+
+L_AllCorrect:
+ mes "You feel totally normal again.";
+ next;
+ mes "[Nurse]";
+ mes "\"Wonderful! You made it! Now I will be able to help all the people who get poisoned in the mines!\"";
+ next;
+ mes "\"Thank you so much! Oh, and it seems as if you have gained the skill to resist poison someway. This is great.\"";
+ next;
+ mes "\"You should talk to someone who can help you to focus on your skills.\"";
+ next;
+ getexp @ANTIDOTE_EXP, 0;
+ addtoskill SKILL_RESIST_POISON, 1;
+ @Q_poison = 7;
+ callsub S_Update_Var;
+ goto L_close;
+
+L_NotAllCorrect:
+ mes "[Nurse]";
+ mes "\"It didn't work. You are a really brave person. Now you should rest and recover. I hope you won't give up now. Please come back later, so we can try it again.\"";
+ next;
+ goto L_close;
+
+L_state4:
+ mes "The nurse has a worried look in her face.";
+ mes "[Nurse]";
+ mes "\"Hello. I hope you recovered well.\"";
+ next;
+ mes "\"There is enough of the distillates left to have another try.\"";
+ next;
+ mes "\"Oh no, with all that trouble I forgot to label your distillate.\"";
+ next;
+ mes "She holds up two ampullas.";
+ next;
+ mes "\"I hope this one is yours. I'm sorry.\"";
+ next;
+ mes "\"If you feel ok, we could try it again.\"";
+ next;
+ menu
+ "I still feel a bit dizzy, so I don't want to do it now.", L_Usual,
+ "I'm ok. We can try, but please explain again.", L_Exp_Game,
+ "Let's start right now.", L_Game;
+
+L_state5:
+ mes "The nurse looks at you pitifully.";
+ mes "[Nurse]";
+ mes "\"Hello. I'm really sorry for causing you so much pain.\"";
+ next;
+ mes "\"But if we succeed we will be heroes! I will be able to help a lot of people.\"";
+ next;
+ mes "\"Next time you might remind me to label the distillates correctly. I am sorry that it is screwed up again.\"";
+ next;
+ mes "\"There is enough stuff left for one last try.\"";
+ next;
+ mes "\"If we don't get it this time, you will have to get new ingredients.\"";
+ next;
+ mes "\"Do you want to try again?\"";
+ next;
+ menu
+ "I still feel a bit dizzy, so I don't want to do it now.", L_Usual,
+ "I'm ok. We can try, but please explain again.", L_Exp_Game,
+ "Let's start right now.", L_Game;
+
+L_state6:
+ mes "The nurse looks at you pitifully.";
+ mes "[Nurse]";
+ mes "\"There is not enough stuff left for another try.\"";
+ next;
+ mes "\"We should try again, right?\"";
+ @Q_poison = 1;
+ callsub S_Update_Var;
+ goto L_ExplainAgain1;
+
+L_state7: // geschafft
+ mes "[Nurse]";
+ mes "\"Thanks a lot, you can call yourself a true hero now!\"";
+ next;
+ mes "\"I am able to help the poisoned miners quite well now.\"";
+ next;
+ goto L_Usual;
+
+L_NotEnough:
+ mes "[Nurse]";
+ mes "\"This must be a misunderstanding. You don't have all the things I asked you for.\"";
+ if (@Q_poison == 1)
+ goto L_ExplainAgain1;
+ if (@Q_poison == 2)
+ goto L_ExplainAgain2;
+ // the following close *should* never be reached, but who knows, whoever will mess this script up!
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+
+S_Update_Var:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(@Q_poison_MASK) | (@Q_poison << @Q_poison_SHIFT));
+ return;
+
+L_Game_init_vars:
+ @count = 24;
+ @offset = 1;
+ return;
+
+L_Shuffle_Need:
+ callsub L_Game_init_vars;
+ @hlNeed = @offset + rand(@count);
+ @vnNeed = @offset + rand(@count);
+ @stNeed = @offset + rand(@count);
+
+ set $NPC_NURSE,
+ ($NPC_NURSE & ~(BYTE_0_MASK | BYTE_1_MASK | BYTE_2_MASK)
+ | (@hlNeed << BYTE_0_SHIFT)
+ | (@vnNeed << BYTE_1_SHIFT)
+ | (@stNeed << BYTE_2_SHIFT));
+ return;
+
+L_Load_Need:
+ callsub L_Game_init_vars;
+ @hlNeed = ($NPC_NURSE & BYTE_0_MASK) >> BYTE_0_SHIFT;
+ @vnNeed = ($NPC_NURSE & BYTE_1_MASK) >> BYTE_1_SHIFT;
+ @stNeed = ($NPC_NURSE & BYTE_2_MASK) >> BYTE_2_SHIFT;
+ return;
+
+L_Game_tooless:
+ mes "[Nurse]";
+ mes "\"That is nothing! You need to put in there at least a small amount.";
+ goto L_choosePut;
+
+L_Game_toomuch:
+ mes "[Nurse]";
+ mes "\"This would be way too much for my scale. I don't want to break it.\"";
+ goto L_choosePut;
+}
diff --git a/npc/009-2/olana.txt b/npc/009-2/olana.txt
new file mode 100755
index 00000000..c6eff147
--- /dev/null
+++ b/npc/009-2/olana.txt
@@ -0,0 +1,238 @@
+
+009-2,63,79,0 script Olana NPC190,{
+ @minLevel = 60;
+
+ @Cherry_Amount = 10;
+ @Cherry_EXP = 1000;
+ @Cherry_Money = 1000;
+
+ @RedRose_Amount = 15;
+ @RedTulip_Amount = 15;
+ @Flower_Money = 1500;
+
+ @Finish_EXP = 5000;
+ @Finish_Money = 5000;
+
+ if (FLAGS & FLAG_ROSSI_COMPLETED) goto L_FinalEnd;
+ if (Rossy_Quest == 17 || Rossy_Quest == 18) goto L_End;
+
+ if (Rossy_Quest >= 14 && Rossy_Quest <= 16) goto L_Julia;
+ if (Rossy_Quest == 13) goto L_Best;
+ if (Rossy_Quest == 12) goto L_Give;
+ if (Rossy_Quest == 11) goto L_Allergic;
+ if (Rossy_Quest == 10) goto L_BringRose;
+ if (Rossy_Quest == 9) goto L_RC;
+ if (Rossy_Quest == 8) goto L_Rose;
+ if (Rossy_Quest >= 6 && Rossy_Quest < 8) goto L_BL;
+ if (Rossy_Quest == 5) goto L_Bring;
+ if (Rossy_Quest == 4) goto L_See;
+ if (Rossy_Quest == 3) goto L_Worried;
+ if (Rossy_Quest == 1 || Rossy_Quest == 2) goto L_Daughter;
+
+ mes "[Olana]";
+ mes "\"Hello. We don't usually get guests back here.\"";
+ next;
+ mes "\"My name is Olana and my father owns this inn. I live in Tulimshar, but came to Hurnscald on vacation with my two young daughters, Rossy and Julia.\"";
+ if (BaseLevel < @minLevel) close;
+ next;
+ mes "\"I let my two lovely girls play in the woods nearby but they haven't come back yet!\"";
+ next;
+ mes "Olana suddenly looks very pale and starts to shiver.";
+ next;
+ mes "\"I'm starting to get a bad feeling about this. If you go to the forest near the swamps, could you see if you can find my daughters? I need to know if they are safe!\"";
+ menu
+ "Sure, I can do that.", L_Next,
+ "I am sorry, I don't usually go to that area.", L_No;
+
+L_Next:
+ Rossy_Quest = 1;
+ close;
+
+L_Daughter:
+ mes "Olana looks really worried - she seems about to burst into tears.";
+ mes "[Olana]";
+ mes "\"I would be relieved if you could look for my daughters.";
+ mes "They must be playing in the forest near the swamps.\"";
+ if (Rossy_Quest == 1)
+ close;
+ next;
+ menu
+ "Wait, I saw Rossy, she is fine.", L_Help,
+ "Hey, don't worry, I'm sure they'll be back soon.", L_No;
+
+L_No:
+ close;
+
+L_Help:
+ mes "[Olana]";
+ mes "\"Oh you did? That's good. I'm relieved. But what about Julia?\"";
+ next;
+ menu
+ "I haven't found Julia yet, sorry.", L_Next1;
+
+L_Next1:
+ mes "\"Ok. They must be playing hide and seek. Thanks again... I can't express how grateful I am.\"";
+ Rossy_Quest = 3;
+ close;
+
+L_Worried:
+ mes "Olana smiles at you, trying to show some happiness, but her facial expression only conveys tension and preoccupation.";
+ next;
+ mes "You suddenly remember that Rossy asked for your help to collect some fruits. Maybe she could also have some ideas on how to cheer her mother up.";
+ close;
+
+L_See:
+ if (gotcherry == 1)
+ goto L_Task;
+ if (countitem("Cherry") < @Cherry_Amount)
+ goto L_Worried;
+ delitem "Cherry", @Cherry_Amount;
+ menu
+ "Hi, Rossy asked me to give you this. She says it is a gift from both her and Julia.", L_Next2;
+
+L_Next2:
+ mes "[Olana]";
+ mes "\"Ohhh... How sweet... Sometimes Rossy impresses me with her kindness. Here... You are spending so much time helping us, and we give nothing back. Take this as a small reward.\"";
+ getexp @Cherry_EXP, 0;
+ Zeny = Zeny + @Cherry_Money;
+ gotcherry = 1;
+ goto L_Task;
+
+L_Task:
+ mes "[Olana]";
+ mes "\"I know I barely know you, but can I ask you for a small favor?\"";
+ menu
+ "Sure, tell me about it.", L_Cont,
+ "No, sorry, I'm busy.", L_No;
+
+L_Cont:
+ mes "[Olana]";
+ mes "\"Would you mind giving this letter to my little Rossy? Today is the last day for her final exam, and I know my daughter. If I don't remind her, she will surely forget about it and flunk the exam. I would deliver the letter myself, but I can't walk, my aching knees...\"";
+ menu
+ "Of course I can. Hand me the letter, I'll give it to Rossy as soon as I see her.", L_Let,
+ "No, sorry, I'm not interested in that sort of task. Hand it to her yourself.", L_No;
+
+L_Let:
+ mes "[Olana]";
+ Rossy_Quest = 5;
+ gotcherry = 0;
+ mes "\"Thank you again. Please, bring it to her as fast as you can.\"";
+ close;
+
+L_Bring:
+ mes "[Olana]";
+ mes "\"Please, bring this letter to my daughter as fast as you can.\"";
+ close;
+
+L_BL:
+ mes "[Olana]";
+ mes "\"Good, now she won't forget her final exam.\"";
+ close;
+
+L_Rose:
+ menu
+ "Hi, Rossy did great in the exam. David told me her potion was flawless.", L_Next3;
+
+L_Next3:
+ mes "[Olana]";
+ mes "\"Wow! Really? That is great! I would like to congratulate my little Rossy. Would you mind helping me a little more?\"";
+ menu
+ "Just tell me what to do.", L_Next4,
+ "No, I'm busy, maybe later.", L_No;
+
+L_Next4:
+ mes "[Olana]";
+ mes "\"Can you bring me " + @RedRose_Amount + " Red Roses? I would like to give them to Rossy. I am sure she will love them!\"";
+ menu
+ "Ok, I will be back with the roses.", L_RG,
+ "I'm allergic to roses, can't even touch them. Sorry.", L_No;
+
+L_RG:
+ if (Rossy_Quest == 8)
+ Rossy_Quest = 9;
+ mes "[Olana]";
+ mes "\"Please, bring me " + @RedRose_Amount + " Red Roses as soon as you can.\"";
+ close;
+
+L_RC:
+ if(countitem("RedRose") < @RedRose_Amount)
+ goto L_RG;
+ mes "[Olana]";
+ Rossy_Quest = 10;
+ mes "\"Great job! Please hand them to my brilliant daughter, Rossy.\"";
+ close;
+
+L_BringRose:
+ mes "[Olana]";
+ mes "\"Now please hand them to my brilliant daughter, Rossy.\"";
+ close;
+
+L_Allergic:
+ mes "[Olana]";
+ mes "\"Did she like my present?\"";
+ menu
+ "Sure she did...", L_No,
+ "Well, you should have known that your daughter is allergic to roses.", L_Next5;
+
+L_Next5:
+ Rossy_Quest = 12;
+ mes "[Olana]";
+ mes "\"Oh, how stupid I am! Here, take some of my money and buy Red Tulips instead, the same amount. Keep the flowers.\"";
+ Zeny = Zeny + @Flower_Money;
+ next;
+ mes "\"Please, tell Rossy I am really sorry. My mind was on Julia when I asked you to bring the red roses, they are her favorite.\"";
+ menu
+ "I will give her the tulips when I see her.", L_Next6;
+
+L_Next6:
+ mes "[Olana]";
+ mes "\"Thank you. And don't forget to tell her that I'm really sorry.\"";
+ close;
+
+L_Give:
+ mes "[Olana]";
+ mes "\""+ strcharinfo(0) +", please, get " + @RedTulip_Amount + " Red Tulips and hand them to Rossy. Don't forget to tell her that I'm really sorry.\"";
+ close;
+
+L_Best:
+ mes "[Olana]";
+ mes "\"Thank you for your help "+ strcharinfo(0) +"!\"";
+ close;
+
+L_Julia:
+ mes "[Olana]";
+ mes "\"Oh no, I can't take this anymore. Something must have happened... Where is Julia? I want to know where she is! Please, find her "+ strcharinfo(0) +"!\"";
+ close;
+
+L_End:
+ mes "[Olana]";
+ mes "\"Where is Julia? I want to know where she is! Please, find her "+ strcharinfo(0) +"!\"";
+ menu
+ "She'll be back soon, trust me. I saved her from an evil spirit.", L_Found,
+ "I haven't seen her yet, sorry.", L_No;
+
+L_Found:
+ mes "[Olana]";
+ if (Rossy_Quest == 17)
+ Rossy_Quest = 18;
+ if (Rossy_Quest == 18)
+ Rossy_Quest = 19;
+ mes "\"Thank you "+ strcharinfo(0) +", thank you! Here is a reward for you.\"";
+ getexp @Finish_EXP, 0;
+ Zeny = Zeny + @Finish_Money;
+ if (Rossy_Quest == 19)
+ goto L_Clear;
+ close;
+
+L_Clear:
+ Rossy_Quest = 0;
+ cavefights = 0;
+ FLAGS = FLAGS | FLAG_ROSSI_COMPLETED;
+ close;
+
+L_FinalEnd:
+ mes "[Olana]";
+ mes "\"Thanks again for your help.";
+ mes "I hope the girls will come home soon enough for dinner.\"";
+ close;
+}
diff --git a/npc/009-2/peter.txt b/npc/009-2/peter.txt
new file mode 100755
index 00000000..e73740e5
--- /dev/null
+++ b/npc/009-2/peter.txt
@@ -0,0 +1,141 @@
+009-2,183,57,0 shop #PeterShop NPC32767,1201:25,522:50,521:500
+
+009-2,183,57,0 script Peter NPC157,{
+ @peter_chain_mail_coal = 10;
+ @peter_chain_mail_ingot = 5;
+ @peter_chain_mail_money = 20000;
+
+ @peter_light_plate_coal = 20;
+ @peter_light_plate_ingot = 10;
+ @peter_light_plate_money = 50000;
+
+ @peter_warlord_plate_coal = 30;
+ @peter_warlord_plate_ingot = 15;
+ @peter_warlord_plate_money = 100000;
+
+ @peter_warlord_boots_coal = 16;
+ @peter_warlord_boots_ingot = 8;
+ @peter_warlord_boots_money = 35000;
+
+ mes "[Peter]";
+ mes "\"Hello, I am Peter, apprentice to Nicholas.\"";
+ next;
+ mes "\"I can make you some sturdy armor: you must give me Iron Ingots to craft with and some gold pieces for my efforts.\"";
+ next;
+ mes "[Peter]";
+ mes "\"What would you like me to make?\"";
+ menu
+ "Chain Mail ("+@peter_chain_mail_coal+" coal, "+@peter_chain_mail_ingot+" ingots and "+@peter_chain_mail_money+" GP).", L_Peter_Chain_Mail,
+ "Light Plate ("+@peter_light_plate_coal+" coal, "+@peter_light_plate_ingot+" ingots and "+@peter_light_plate_money+" GP).", L_Peter_Light_Plate,
+ "Warlord Plate ("+@peter_warlord_plate_coal+" coal, "+@peter_warlord_plate_ingot+" ingots and "+@peter_warlord_plate_money+" GP).", L_Peter_Warlord_Plate,
+ "Do you know anything else than armor crafting?", L_Peter_New_Skills,
+ "Do you have anything else for sale?", L_Shop,
+ "Nevermind.", L_close;
+
+L_Peter_Chain_Mail:
+ @peter_crafting_coal = @peter_chain_mail_coal;
+ @peter_crafting_iron_ingot = @peter_chain_mail_ingot;
+ @peter_crafting_money = @peter_chain_mail_money;
+ @peter_crafting_item$ = "ChainmailShirt";
+ callsub S_Smithery_Item;
+ goto L_close;
+
+L_Peter_Light_Plate:
+ @peter_crafting_coal = @peter_light_plate_coal;
+ @peter_crafting_iron_ingot = @peter_light_plate_ingot;
+ @peter_crafting_money = @peter_light_plate_money;
+ @peter_crafting_item$ = "LightPlatemail";
+ callsub S_Smithery_Item;
+ goto L_close;
+
+L_Peter_Warlord_Plate:
+ @peter_crafting_coal = @peter_warlord_plate_coal;
+ @peter_crafting_iron_ingot = @peter_warlord_plate_ingot;
+ @peter_crafting_money = @peter_warlord_plate_money;
+ @peter_crafting_item$ = "WarlordPlate";
+ callsub S_Smithery_Item;
+ goto L_close;
+
+L_Peter_New_Skills:
+ mes "[Peter]";
+ mes "\"Actually, Nicholas, my master, taught me new smithery techniques.";
+ mes "My very first creation are new kind of steel boots. Interested ? That would be "+@peter_warlord_boots_coal+" Coals, "+@peter_warlord_boots_ingot+" Iron Ingots and "+@peter_warlord_boots_money+" GP.\"";
+ menu
+ "Sure!", L_Peter_Warlord_Boots,
+ "No thanks, that sounds too heavy for me.", L_close;
+
+L_Shop:
+ close2;
+ shop "#PeterShop";
+
+L_Peter_Warlord_Boots:
+ @peter_crafting_coal = @peter_warlord_boots_coal;
+ @peter_crafting_iron_ingot = @peter_warlord_boots_ingot;
+ @peter_crafting_money = @peter_warlord_boots_money;
+ @peter_crafting_item$ = "WarlordBoots";
+ callsub S_Smithery_Item;
+ goto L_close;
+
+S_Smithery_Item:
+ if (Zeny < @peter_crafting_money)
+ goto L_Peter_NotEnough_Zeny;
+ if (countitem("IronIngot") < @peter_crafting_iron_ingot)
+ goto L_Peter_NotEnough_Ingot;
+ if (countitem("Coal") < @peter_crafting_coal)
+ goto L_Peter_NotEnough_Coal;
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_Peter_TooMany;
+ Zeny = Zeny - @peter_crafting_money;
+ delitem "IronIngot", @peter_crafting_iron_ingot;
+ delitem "Coal", @peter_crafting_coal;
+ getitem @peter_crafting_item$, 1;
+ mes "[Peter]";
+ mes "\"Here you go!\"";
+ return;
+
+L_Peter_NotEnough_Zeny:
+ mes "[Peter]";
+ mes "\"You don't have enough gold.\"";
+ goto L_close;
+
+L_Peter_NotEnough_Ingot:
+ mes "[Peter]";
+ mes "\"You don't have enough ingots.\"";
+ goto L_close;
+
+L_Peter_NotEnough_Coal:
+ mes "[Peter]";
+ mes "\"You don't have enough Coal.\"";
+ goto L_close;
+
+L_Peter_TooMany:
+ mes "[Peter]";
+ mes "\"You have too much stuff. Please get rid of something if you want some armor.\"";
+ goto L_close;
+
+L_close:
+ // Clear all local variables
+ @peter_chain_mail_coal = 0;
+ @peter_chain_mail_ingot = 0;
+ @peter_chain_mail_money = 0;
+
+ @peter_light_plate_coal = 0;
+ @peter_light_plate_ingot = 0;
+ @peter_light_plate_money = 0;
+
+ @peter_warlord_plate_coal = 0;
+ @peter_warlord_plate_ingot = 0;
+ @peter_warlord_plate_money = 0;
+
+ @peter_warlord_boots_coal = 0;
+ @peter_warlord_boots_ingot = 0;
+ @peter_warlord_boots_money = 0;
+
+ @peter_crafting_coal = 0;
+ @peter_crafting_iron_ingot = 0;
+ @peter_crafting_money = 0;
+ @peter_crafting_item$ = "";
+ close;
+
+}
diff --git a/npc/009-2/richard.txt b/npc/009-2/richard.txt
new file mode 100755
index 00000000..287ddb7c
--- /dev/null
+++ b/npc/009-2/richard.txt
@@ -0,0 +1,6 @@
+
+009-2,20,99,0 script Richard NPC161,{
+ @npcname$ = "Richard";
+ callfunc "Banker";
+ close;
+}
diff --git a/npc/009-2/selim.txt b/npc/009-2/selim.txt
new file mode 100755
index 00000000..f7f41b72
--- /dev/null
+++ b/npc/009-2/selim.txt
@@ -0,0 +1,173 @@
+009-2,32,104,0 script Selim NPC326,{
+ goto L_Main;
+
+L_Main:
+ mes "[Selim]";
+ mes "\"Greetings, fair traveler. With what may I help you?\"";
+ menu
+ "Greetings, are you the store merchant?", L_Ask_selim,
+ "But what are dyes and what purpose do they serve?", L_Ask_dye,
+ "Can you dye something for me?", L_clothes_choice,
+ "Can you also remove color from clothing?", L_Ask_bleach,
+ "About these sorcerer robes...", L_Asksorcererrobe,
+ "Can you change my appearance?", L_barber,
+ "Never mind.", L_close;
+
+L_barber:
+ callfunc "Barber";
+ goto L_Main;
+
+L_Ask_bleach:
+ mes "[Selim]";
+ mes "\"I'm afraid no.";
+ mes "For that, you would need to visit Candide in the Tulimshar marketplace.\"";
+ goto L_Main;
+
+L_Ask_selim:
+ mes "[Selim]";
+ mes "\"That is an honest mistake you have made.";
+ mes "However I am not the merchant, but rather a Master Dyer here to serve the good people of this town.";
+ mes "I dye things, upon request.\"";
+ menu
+ "But what are dyes and where can I get them?", L_Ask_dye,
+ "Can you dye something for me?", L_clothes_choice,
+ "Can you also remove color from clothing?", L_Ask_bleach,
+ "Good bye.", L_close;
+
+L_Ask_dye:
+ mes "[Selim]";
+ mes "\"Dyes are special liquids used to add color to clothing. If you want me to dye something for you you will have to bring me some dye first.";
+ mes "Those behind me are nearly empty and won't last for your item.\"";
+ menu
+ "What do you mean, `bring you dye'?", L_explain_dye,
+ "Where would I get dye?", L_explain_dye,
+ "Good bye.", L_close;
+
+L_clothes_choice:
+ cleararray @items$, "", getarraysize(@items$);
+ cleararray @item_names$, "", getarraysize(@item_names$);
+ @r = 0;
+ @j = getarraysize($@DYE_items$);
+ goto L_CloneArray; // clone the array from DyeConfig
+
+L_CloneArray:
+ @items$[@r] = $@DYE_items$[@r];
+ @item_names$[@r] = $@DYE_item_names$[@r];
+ @r = @r + 1;
+ if(@r < @j) goto L_CloneArray;
+ @r = 0;
+ @j = 0;
+ goto L_clothes_choice2;
+
+L_clothes_choice2:
+ mes "[Selim]";
+ mes "\"What can I dye for you today?\"";
+ next;
+ callfunc "DynamicItemMenu$";
+ @default_choice$ = "";
+ @item_del$ = @item$;
+ @name$ = @item_names$[@index];
+ cleararray @items$, "", getarraysize(@items$);
+ cleararray @item_names$, "", getarraysize(@item_names$);
+ if(@item$ == "") goto L_close;
+ goto L_picked_item;
+
+
+L_Asksorcererrobe:
+ mes "[Selim]";
+ mes "\"Yes?\"";
+ next;
+ menu
+ "Do you think you can dye that line to a different color?", L_Next1;
+
+L_Next1:
+ mes "[Selim]";
+ mes "\"Hum, I fear I can't do that. The area is too small and I can operate only on large ones.";
+ mes "But with the appropriate materials, maybe a talented tailor can make the change.\"";
+ next;
+ menu
+ "Oh, I see!", L_Next;
+
+L_Next:
+ mes "[Selim]";
+ mes "\"Of course I can help you by dyeing the materials your tailor will want.";
+ mes "All I need is a piece of Cotton Cloth.\"";
+ @item_del$ = "CottonCloth";
+ @name$ = "Cotton Cloth";
+ menu
+ "Sure. Here is one.", L_picked_item,
+ "I have to go pick that.", L_close;
+
+L_picked_item:
+ if (countitem(@item_del$) == 0) goto L_havenone;
+ goto L_colour;
+
+L_colour:
+ mes "[Selim]";
+ mes "\"Excellent. Now, what color do you want?\"";
+ next;
+ @r = 0;
+ @j = getarraysize($@DYE_colors$);
+ cleararray @items$, "", getarraysize(@items$);
+ cleararray @item_names$, "", getarraysize(@item_names$);
+ callsub S_CloneColors;
+ @default_choice$ = "I have no dye.";
+ callfunc "DynamicItemMenu$";
+ cleararray @items$, "", getarraysize(@items$);
+ cleararray @item_names$, "", getarraysize(@item_names$);
+ @default_choice$ = "";
+ if (@item$ == "") goto L_No_dye;
+ @colour = @index;
+ goto L_Finish;
+
+S_CloneColors:
+ @items$[@r] = $@DYE_colors$[@r] + "Dye";
+ @item_names$[@r] = $@DYE_color_names$[@r];
+ @r = @r + 1;
+ if(@r < @j) goto S_CloneColors;
+ @r = 0;
+ @j = 0;
+ return;
+
+L_No_dye:
+ mes "[Selim]";
+ mes "\"I would love to dye your " + @name$ + " for you, but you will have to bring me some dye first.";
+ mes "Those behind me are nearly empty and won't last for your item.\"";
+ next;
+ menu
+ "I wanted to dye a different item anyway.", L_clothes_choice,
+ "What do you mean, `bring you dye'?", L_explain_dye,
+ "Where would I get dye?", L_explain_dye,
+ "Never mind.", L_close;
+
+L_explain_dye:
+ if (QUEST_clothdyer_knowsdye < 1)
+ QUEST_clothdyer_knowsdye = 1;
+ mes "[Selim]";
+ mes "\"Well, dye is very expensive, and since I don't charge adventurers anything, I can't give you any for free.";
+ mes "But most alchemists can make dye; perhaps you can find one around here.\"";
+ goto L_close;
+
+L_Finish:
+ if(getitemlink($@DYE_colors$[@colour] + @item_del$) == "Unknown Item") mapexit;
+ if(countitem(@item_del$) < 1) goto L_havenone;
+ delitem @item$, 1;
+ delitem @item_del$, 1;
+ getitem $@DYE_colors$[@colour] + @item_del$, 1;
+ mes "[Selim]";
+ mes "\"Here's your " + $@DYE_color_names$[@colour] + " " + @name$ + "! Please let dry for a minute.\"";
+ goto L_close;
+
+L_havenone:
+ mes "[Selim]";
+ mes "\"You don't have any uncolored " + @name$ + "? That's unfortunate.";
+ mes "Would you like to dye something else?\"";
+ next;
+ goto L_clothes_choice;
+
+L_close:
+ mes "\"Farewell and good luck in your journeys!\"";
+ close2;
+ emotion EMOTE_WINK, strcharinfo(0);
+ end;
+}
diff --git a/npc/009-2/shops.txt b/npc/009-2/shops.txt
new file mode 100755
index 00000000..a50d2d7a
--- /dev/null
+++ b/npc/009-2/shops.txt
@@ -0,0 +1,14 @@
+009-2,65,49,0 shop Barkeeper NPC112,539:87,513:15,676:100
+
+009-2,50,48,0 script Receptionist#inn NPC108,{
+ @npcname$ = "Receptionist";
+ @Cost = 100;
+ callfunc "Inn";
+ end;
+}
+
+009-2,97,24,0 shop Apprentice NPC120,904:0,1199:2,529:2,1200:500,530:4000
+
+009-2,123,22,0 shop Potions#_M NPC400,501:25,502:35,567:250,568:250,750:200
+
+009-2,32,99,0 shop General Store#hurnscald NPC112,527:150,541:100,1202:5,586:500,528:500,656:100,724:500,741:500
diff --git a/npc/009-2/trader.txt b/npc/009-2/trader.txt
new file mode 100755
index 00000000..83ed8d37
--- /dev/null
+++ b/npc/009-2/trader.txt
@@ -0,0 +1,150 @@
+
+009-2,29,98,0 script Trader NPC115,{
+ @ironprice = 1000;
+ @Sulphurprice = 1200;
+ @Potionprice = 500;
+ if (BaseLevel >= 25) goto L_Trade;
+
+ mes "[Trader]";
+ mes "\"Hello. I came here to trade wares with the people of Hurnscald. Unfortunately for you, I've traded everything I had.\"";
+ next;
+ menu
+ "Oh. I'll go then.", L_close,
+ "You don't have anything?", L_More;
+
+L_More:
+ mes "[Trader]";
+ mes "\"No. I have nothing for you. Except...\"";
+ next;
+ menu
+ "Yes?", L_Except,
+ "Ok then.", L_close;
+
+L_Except:
+ mes "[Trader]";
+ mes "\"I could teach you how to trade. It'll cost you 2GP.\"";
+ next;
+ menu
+ "Sure.", L_Teach,
+ "No thank you.", L_close;
+
+L_Teach:
+ if (Zeny < 2) goto L_NotEnoughMoney;
+ Zeny = Zeny - 2;
+ mes "[Trader]";
+ mes "\"You can initiate trade with someone by right-clicking on them and choosing trade.";
+ mes "You'll both add the items and set the GP you're putting up then press propose trade.";
+ mes "After both parties have proposed their side, you can both review the trade, and then accept or reject by closing the window.\"";
+ next;
+ mes "[Trader]";
+ mes "\"Items added to the trade cannot be removed, and so mistakes have to be dealt with by canceling the trade.";
+ mes "You need to press the change button to let the other person know about GP changes.\"";
+ next;
+ goto L_Later;
+
+L_Later:
+ mes "[Trader]";
+ mes "\"Please feel free to check back later. I'm expecting a large shipment of goods to trade.\"";
+ goto L_close;
+
+L_Trade:
+ mes "[Trader]";
+ mes "\"Welcome back! My shipment came in and I have a bunch of things that I can trade now. What would you like?\"";
+ goto L_Trademenu;
+
+L_Trademenu:
+ menu
+ "Do you have Iron Powder?", L_Iron,
+ "How about Sulphur Powder?", L_Sulphur,
+ "I need Medium Healing Potions.", L_Healpots,
+ "I think I have everything I need, thanks.", L_close;
+
+L_Iron:
+ mes "[Trader]";
+ mes "\"I do have a few of those. I will give you 4 Iron Powders for 1 Iron Ore and " + @ironprice + "gp.\"";
+ menu
+ "Sure.", L_Ipowder,
+ "What a ripoff! No way!", L_close;
+
+L_Sulphur:
+ mes "[Trader]";
+ mes "\"I can trade you 5 Sulphur Powders for 1 Pile of Ash and " + @Sulphurprice + "gp.\"";
+ menu
+ "Here you go.", L_Spowder,
+ "Are you nuts?! Forget it!", L_close;
+
+L_Healpots:
+ mes "[Trader]";
+ mes "\"Healing potions are always useful, but I rarely need anything larger than the small ones. I will happily trade you 1 Medium Healing Potion for 3 Small Healing Potions and " + @Potionprice + "gp.\"";
+ menu
+ "Alright.", L_Pots,
+ "Whoa, that's way too much.", L_close;
+
+L_Ipowder:
+ if (countitem("IronOre") < 1) goto L_Missing;
+ if (Zeny < @ironprice) goto L_NotEnoughMoney;
+ getinventorylist;
+ if (@inventorylist_count == 100 && countitem("IronOre") > 1 && countitem("IronPowder") < 1) goto L_Full;
+ delitem "IronOre", 1;
+ Zeny = Zeny - @ironprice;
+ getitem "IronPowder", 4;
+ mes "[Trader]";
+ mes "\"There you go. Would you like to trade anything else?\"";
+ menu
+ "Yes.", L_Trademenu,
+ "No.", L_No;
+
+L_Spowder:
+ if (countitem("PileOfAsh") < 1) goto L_Missing;
+ if (Zeny < @Sulphurprice) goto L_NotEnoughMoney;
+ getinventorylist;
+ if (@inventorylist_count == 100 && countitem("PileOfAsh") > 1 && countitem("SulphurPowder") < 1) goto L_Full;
+ delitem "PileOfAsh", 1;
+ Zeny = Zeny - @Sulphurprice;
+ getitem "SulphurPowder", 5;
+ mes "[Trader]";
+ mes "\"There you go. Would you like to trade anything else?\"";
+ menu
+ "Yes.", L_Trademenu,
+ "No.", L_No;
+
+L_Pots:
+ if (countitem("SmallHealingPotion") < 3) goto L_Missing;
+ if (Zeny < @Potionprice) goto L_NotEnoughMoney;
+ getinventorylist;
+ if (@inventorylist_count == 100 && countitem("SmallHealingPotion") > 3 && countitem("MediumHealingPotion") < 1) goto L_Full;
+ delitem "SmallHealingPotion", 3;
+ Zeny = Zeny - @Potionprice;
+ getitem "MediumHealingPotion", 1;
+ mes "[Trader]";
+ mes "\"There you go. Would you like to trade anything else?\"";
+ menu
+ "Yes.", L_Trademenu,
+ "No.", L_No;
+
+L_Full:
+ mes "[Trader]";
+ mes "\"You must have been making a lot of trades...your bag is completely full! Come back after you've made some room.\"";
+ goto L_close;
+
+L_Missing:
+ mes "[Trader]";
+ mes "\"It looks like you're missing some items. Please come back when you have enough to trade.\"";
+ goto L_close;
+
+L_NotEnoughMoney:
+ mes "[Trader]";
+ mes "\"You don't have enough money.\"";
+ goto L_close;
+
+L_No:
+ mes "[Trader]";
+ mes "\"Have a great day!\"";
+ goto L_close;
+
+L_close:
+ @ironprice = 0;
+ @Sulphurprice = 0;
+ @Potionprice = 0;
+ close;
+}
diff --git a/npc/009-2/waitress.txt b/npc/009-2/waitress.txt
new file mode 100755
index 00000000..6c7ceb5b
--- /dev/null
+++ b/npc/009-2/waitress.txt
@@ -0,0 +1,71 @@
+
+009-2,60,52,0 script Melinda NPC140,{
+ mes "[Melinda]";
+ mes "\"Hi, sweetie! Want a fresh beer for 170 GP?\"";
+ next;
+
+ menu
+ "\"Sure! [don't tip]\"", L_NoTip,
+ "Sure! [tip 5 GP]", L_5Tip,
+ "Sure! [tip 10 GP]", L_10Tip,
+ "Nah, maybe later.", L_No;
+
+L_NoTip:
+ if (Zeny < 170)
+ goto L_NoMoney;
+ getinventorylist;
+ if (@inventorylist_count == 100 && countitem("Beer") == 0)
+ goto L_TooMany;
+ Zeny = Zeny - 170;
+ getitem "Beer", 1;
+ mes "[Melinda]";
+ mes "Pff... nickel nurser!";
+ close;
+
+L_5Tip:
+ if (Zeny < 175)
+ goto L_NoMoney;
+ getinventorylist;
+ if (@inventorylist_count == 100 && countitem("Beer") == 0)
+ goto L_TooMany;
+ Zeny = Zeny - 175;
+ getitem "Beer", 1;
+ mes "[Melinda]";
+ mes "\"Here you go, sweetheart!\"";
+ close;
+
+L_10Tip:
+ if (Zeny < 180)
+ goto L_NoMoney;
+ getinventorylist;
+ if (@inventorylist_count == 100 && countitem("Beer") == 0)
+ goto L_TooMany;
+ Zeny = Zeny - 180;
+ getitem "Beer", 1;
+ mes "[Melinda]";
+ mes "\"Thank you, sweetie! Want to hear a secret?\"";
+ next;
+ menu
+ "What is it, darling?", L_Next,
+ "Nah, I don't feel like chatting.", L_No;
+
+L_Next:
+ mes "[Melinda]";
+ mes "\"The master bowyer in this village used to construct exceptional bows. When you want one you should go and ask him.\"";
+ close;
+
+L_No:
+ mes "[Melinda]";
+ mes "\"Just call me when you've changed your mind.\"";
+ close;
+
+L_NoMoney:
+ mes "[Melinda]";
+ mes "\"You look broke. Don't think that you can dine and dash here!\"";
+ close;
+
+L_TooMany:
+ mes "[Melinda]";
+ mes "\"You don't have room for a beer!\"";
+ close;
+}
diff --git a/npc/009-2/wyara.txt b/npc/009-2/wyara.txt
new file mode 100755
index 00000000..2cd2e278
--- /dev/null
+++ b/npc/009-2/wyara.txt
@@ -0,0 +1,553 @@
+009-2,121,26,0 script Wyara#_M NPC103,{
+ @Q_MASK = NIBBLE_2_MASK;
+ @Q_SHIFT = NIBBLE_2_SHIFT;
+ @Q_status = (QUEST_MAGIC2 & @Q_MASK) >> @Q_SHIFT;
+
+ // Set up SkillUp function
+ @SUP_id = SKILL_MAGIC_NATURE;
+ @SUP_name$ = "Nature Magic";
+
+ @STATUS_INITIAL = 0;
+ @STATUS_PURIFY_EXPLAINED = 1;
+ @STATUS_PURIFY_ONCE = 2;
+ @STATUS_PURIFY_TWICE = 3;
+ @STATUS_PURIFY_OVER = 4;
+ @STATUS_MAX = @STATUS_PURIFY_OVER;
+
+ // This operation works around an earlier possible corruption of this state
+ if (@Q_status > @STATUS_MAX)
+ @Q_status = @STATUS_INITIAL;
+ if ((@Q_status == @STATUS_PURIFY_OVER) && (getskilllv(SKILL_MAGIC_NATURE) < 2))
+ @Q_status = @STATUS_INITIAL;
+ callsub S_Update_Var;
+
+ @has_magic = getskilllv(SKILL_MAGIC);
+
+ if (@Q_status == @STATUS_PURIFY_ONCE) goto L_M_purify_once;
+ if (@Q_status == @STATUS_PURIFY_TWICE) goto L_M_purify_done;
+
+ mes "[Wyara the witch]";
+ mes "\"Greetings, fair traveller! What can I do for you?\"";
+ next;
+ MAGIC_FLAGS = MAGIC_FLAGS | MFLAG_KNOWS_WYARA;
+ goto L_Main;
+
+L_Main:
+ if (!@has_magic && (MAGIC_FLAGS & MFLAG_TOUCHED_MANASEED))
+ menu
+ "What do you know about...", L_Question,
+ "Can you help me use the mana seed?", L_Q_manaseed_unabsorbed,
+ "Can you help me learn magic?", L_Magic,
+ "I would like to buy potions.", L_Shop,
+ "Can you reset my stats?", L_StatReset,
+ "Bye!", L_close;
+ if (!(!@has_magic && (MAGIC_FLAGS & MFLAG_TOUCHED_MANASEED)))
+ menu
+ "What do you know about...", L_Question,
+ "Can you help me learn magic?", L_Magic,
+ "I would like to buy potions.", L_Shop,
+ "Can you reset my stats?", L_StatReset,
+ "Bye!", L_close;
+ goto L_Shop;
+
+L_Shop:
+ mes "[Wyara the Witch]";
+ mes "\"Please have a look at the shelf behind me.\"";
+ close;
+
+L_StatReset:
+ @npcname$ = "Wyara";
+ callfunc "StatReset";
+ goto L_close;
+
+L_Question:
+ callfunc "MagicTalkOptionsSetup";
+ @ignore = @QQ_WYARA;
+ callfunc "MagicTalkMenu";
+
+ if (@c == 0) goto L_Main;
+ if (@c == @QQ_ELANORE) goto L_Q_elanore;
+ if (@c == @QQ_MANASEED) goto L_Q_manaseed;
+ if (@c == @QQ_MANAPOTION) goto L_Q_manapotion;
+ if (@c == @QQ_SAGATHA) goto L_Q_sagatha;
+ if (@c == @QQ_AULDSBEL) goto L_Q_auldsbel;
+ if (@c == @QQ_IMP) goto L_Q_imp;
+ if (@c == @QQ_OLDWIZ) goto L_Q_old_wizard;
+ if (@c == @QQ_ASTRALSOUL) goto L_Q_astralsoul;
+
+ mes "[Wyara the Witch]";
+ mes "\"I fear that I can't help you with that.\"";
+ next;
+ goto L_Main;
+
+
+L_Q_astralsoul:
+ mes "[Wyara the Witch]";
+ mes "\"The astral soul skill? Yes, I have heard about that. It can be taught by old and wise mages usually.\"";
+ next;
+ mes "\"You need lots of practise until you can handle the ability, and even more practise until you have the powers to teach it to someone else.\"";
+ next;
+ goto L_Main;
+
+L_Q_old_wizard:
+ mes "[Wyara the Witch]";
+ mes "\"I don't know his name, but I do know that he has been living in the mountains since I first came here. He is a master of many schools of magic, I believe.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "She smiles.";
+ mes "\"He is also a nice and friendly person to talk to, and quite knowledgeable about the teas of this area.\"";
+ next;
+ goto L_Main;
+
+L_Q_elanore:
+ mes "[Wyara the Witch]";
+ mes "\"Elanore is the Tulimshar healer. She is a very kind person and an outstanding healer.\"";
+ next;
+ goto L_Main;
+
+L_Q_manaseed:
+ if (!@has_magic && (MAGIC_FLAGS & MFLAG_TOUCHED_MANASEED))
+ goto L_Q_manaseed_unabsorbed;
+ mes "[Wyara the Witch]";
+ mes "\"A mana seed? I'm afraid that I can't help you with that.\"";
+ next;
+ goto L_Main;
+
+L_Q_manaseed_unabsorbed:
+ mes "[Wyara the Witch]";
+ mes "\"So you touched the mana seed but weren't able to absorb its powers? That means that you're lacking a natural magical ability. Still, there are ways around that.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"If you drink a mana potion, you should be able to retain this magical power and slowly build up a magical skill.\"";
+ MAGIC_FLAGS = MAGIC_FLAGS | MFLAG_KNOWS_MANAPOTION;
+ next;
+ goto L_Main;
+
+L_Q_manapotion:
+ mes "[Wyara the Witch]";
+ mes "\"I have a simple recipe for making mana potions, but I don't have one ready right now. Can you bring me 40 mauve leaves and a bottle of water? I can make one from those quite easily.\"";
+ next;
+ menu
+ "Sure!", L_make_manapotion,
+ "No.", L_Main;
+
+L_manapotion_toomany:
+ mes "[Wyara the Witch]";
+ mes "\"Hmm... looking at you, I don't think that you would be able to carry it.\"";
+ next;
+ goto L_Main;
+
+L_make_manapotion:
+ if(countitem("MauveHerb") < 40)
+ goto L_make_manapotion_lack;
+ if(countitem("BottleOfWater") < 1)
+ goto L_make_manapotion_lack;
+ getinventorylist;
+ if ((@inventorylist_count == 100)
+ && (countitem("MauveHerb") > 40)
+ && (countitem("BottleOfWater") > 100)
+ && (countitem("ManaPotion") < 1))
+ goto L_manapotion_toomany;
+
+ delitem "MauveHerb", 40;
+ delitem "BottleOfWater", 1;
+ getitem "ManaPotion", 1;
+
+ mes "[Wyara the Witch]";
+ mes "Wyara takes your mauve leaves, grinds them, and pours some of the resultant paste into her cauldron. She then takes your bottle and sticks it into her brew, head-first.";
+ next;
+ mes "[Wyara the Witch]";
+ mes "The water in the bottle takes on a strange golden hue, but doesn't flow out.";
+ mes "After a while, she retrieves the bottle and pours some of the liquid into a smaller clay bottle. She proceeds to mix in the rest of the paste, then plugs the bottle and shakes it.";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"I shall keep the rest of your water and the bottle as a payment, if you don't mind. But here is the potion; let it rest for a minute before you use it for maximum effect.\"";
+ next;
+ goto L_Main;
+
+L_make_manapotion_lack:
+ mes "[Wyara the Witch]";
+ mes "\"No, we need forty mauve leaves and a bottle of water.\"";
+ next;
+ goto L_Main;
+
+L_Q_imp:
+ mes "[Wyara the Witch]";
+ mes "\"Sagatha told me that she imprisoned an evil earth spirit in a dried-up well. She wants it to stay there until it has mended its ways, or forever, if it doesn't.\"";
+ next;
+ goto L_Main;
+
+L_Q_sagatha:
+ mes "[Wyara the Witch]";
+ mes "Wyara smiles.";
+ mes "\"You have met Sagatha? She's a wonderful person, isn't she? Well, she does hold back a little towards humans, but deep down she feels for them, too.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"She does hold all plants and animals very dear, though. Well, the peaceful ones more than the aggressive ones, I suppose, and scorpions not very much at all.\"";
+ next;
+ goto L_Main;
+
+L_Q_auldsbel:
+ mes "[Wyara the Witch]";
+ mes "\"Auldsbel... the guild wizard? I don't know him very well; as far as I know, he is only visiting.\"";
+ next;
+ goto L_Main;
+
+L_M_no:
+ mes "[Wyara the Witch]";
+ mes "\"I am sorry, but you don't seem to be able to control any magic. That means that I really can't help you with that.\"";
+ next;
+ goto L_Main;
+
+L_Magic:
+ if (!@has_magic)
+ goto L_M_no;
+ mes "[Wyara the Witch]";
+ mes "\"Perhaps I can help you a little, but I am not a master of any school of magic.\"";
+ next;
+ goto L_M_main;
+
+L_M_main:
+ menu
+ "Can you explain magic to me?", L_M_explain,
+ "Can you teach me a spell?", L_M_spell,
+ "Can you train me?", L_M_train,
+ "Never mind.", L_Main;
+
+L_M_explain:
+ mes "[Wyara the Witch]";
+ mes "\"Magic is just a name for the force that lives in all plants and animals and emanates from there into all things, living or dead.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"Some things it finds easier to pass through – natural things, living things – but dead things, such as rock or metal, can slow it down.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"There are different kinds of magic, too; nature, astral, and so on, but if this interests you, you should talk to a scholar.\"";
+ next;
+ goto L_M_main;
+
+L_M_spell:
+ if (getskilllv(SKILL_MAGIC_NATURE) > 1)
+ goto L_M_spell3;
+ if (getskilllv(SKILL_MAGIC) > 1)
+ goto L_M_spell2;
+ mes "[Wyara the Witch]";
+ mes "\"No... I don't think that you are ready yet. But please ask me again when you have some more control over your magical powers.\"";
+ next;
+ goto L_M_main;
+
+L_M_spell3:
+ mes "[Wyara the Witch]";
+ mes "\"Now that you know the basics of nature magic, here is one of my favourites: '" + get(.invocation$, "rain") + "' will summon rain, whereever you are standing. It will consume a bottle of water, though.\"";
+ if (getskilllv(SKILL_MAGIC) < 2)
+ mes "\"You are not powerful enough to use it yet, though; you will first have to absorb more magic from the mana seed.\"";
+ next;
+ goto L_M_spell2;
+
+L_M_spell2:
+ mes "[Wyara the Witch]";
+ mes "\"Here is another useful one: '" + get(.invocation$, "detect-players") + "'. It will tell you the names of everyone nearby, but beware that there are ways to protect against it.\"";
+ if (getskilllv(SKILL_MAGIC) < 2)
+ mes "\"Hmm. You aren't powerful enough for this one either yet, I think.\"";
+ next;
+ if (!(getpartnerid()))
+ goto L_M_main;
+ mes "[Wyara the Witch]";
+ mes "\"Married partners can find each other even more easily. Use the '" + get(.invocation$, "sense-spouse") + "' spell instead.\"";
+ next;
+ goto L_M_main;
+
+L_M_train:
+ if (getskilllv(SKILL_MAGIC_NATURE) > 1)
+ goto L_M_train_no;
+ mes "[Wyara the Witch]";
+ if (@Q_status >= @STATUS_PURIFY_EXPLAINED)
+ goto L_M_train_wb;
+ mes "\"Train you? No... you should talk to Sagatha.\"";
+ mes "She hesitates.";
+ next;
+ callfunc "SagathaStatus";
+ if (@evil) goto L_M_train_evil;
+ mes "[Wyara the Witch]";
+ mes "\"It would be difficult to ask her to accept you unless you understand some of the basics already.\"";
+ next;
+ goto L_M_train_dispatch;
+
+L_M_train_evil:
+ mes "Wyara looks at you sadly.";
+ mes "\"I have heard that you have done something unforgiveable. No witch in this land will teach you now.\"";
+ next;
+ goto L_M_main;
+
+L_M_train_wb:
+ callfunc "SagathaStatus";
+ if (@evil)
+ goto L_M_train_evil;
+ mes "\"Ah, yes, your training...\"";
+ next;
+ goto L_M_train_dispatch;
+
+L_M_train_dispatch:
+ if (@Q_status == @STATUS_PURIFY_TWICE)
+ goto L_M_purify_done;
+ if (@Q_status == @STATUS_PURIFY_ONCE)
+ goto L_M_purify_once;
+ if (@Q_status == @STATUS_PURIFY_EXPLAINED)
+ goto L_M_purify_explained;
+
+ mes "[Wyara the Witch]";
+ mes "\"Well, let me help you get started, then! But first, to make sure that you are serious, I have a small task for you.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"There is a pond west of Hurnscald, a very small one, almost square in shape, with a rock on its southern ledge leading to its center. This pond is close to dying.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"I want to save it; for that, someone will have to pour a purification potion into it.\"";
+ next;
+ @Q_status = @STATUS_PURIFY_EXPLAINED;
+ callsub S_Update_Var;
+ goto L_M_purify_explained;
+
+L_M_purify_explained:
+ if (countitem("PurificationPotion"))
+ goto L_M_purify_doit;
+
+ mes "[Wyara the Witch]";
+ mes "\"To make the purification potion, I will need twenty maggot slimes and twenty leaves of mauve.\"";
+ next;
+ menu
+ "I shall get them later.", L_M_main,
+ "Booring.", L_M_main,
+ "Here they are.", L_Next;
+
+L_Next:
+ getinventorylist;
+ if ((@inventorylist_count == 100) && (countitem("MauveHerb") > 20) && (countitem("MaggotSlime") > 20))
+ goto L_M_purify_nospace;
+ if (countitem("MauveHerb") < 20)
+ goto L_M_purify_lacking;
+ if (countitem("MaggotSlime") < 20)
+ goto L_M_purify_lacking;
+ delitem "MauveHerb", 20;
+ delitem "MaggotSlime", 20;
+ getitem "PurificationPotion", 1;
+ mes "[Wyara the Witch]";
+ mes "Wyara grinds the leaves and mixes them with the slime, boils them, then speaks a brief incantation over them and hands you the result.";
+ next;
+ goto L_M_purify_doit;
+
+L_M_purify_doit:
+ mes "[Wyara the Witch]";
+ mes "\"Take your purification potion to the pond, right next to its center, and pour the potion in.\"";
+ close;
+
+L_M_purify_nospace:
+ mes "[Wyara the Witch]";
+ mes "\"You don't have enough space to carry the potion. Please come back later.\"";
+ next;
+ goto L_M_main;
+
+L_M_purify_lacking:
+ mes "[Wyara the Witch]";
+ mes "\"You'll need twenty mauve leaves and twenty maggot slimes for the potion.\"";
+ next;
+ goto L_M_main;
+
+L_M_purify_once:
+ mes "[Wyara the Witch]";
+ mes "Wyara nods.";
+ mes "\"You have purified the pond a little, but not enough, I think. We'll need another potion.\"";
+ next;
+ if (countitem("PurificationPotion"))
+ goto L_M_purify_doit2;
+ mes "[Wyara the Witch]";
+ mes "\"I'll need twenty more maggot slimes and leaves of mauve.\"";
+ next;
+ menu
+ "I'll do that later.", L_Main,
+ "No way.", L_Main,
+ "Here you are.", L_Next1;
+
+L_Next1:
+ getinventorylist;
+ if ((@inventorylist_count == 100) && (countitem("MauveHerb") > 20) && (countitem("MaggotSlime") > 20))
+ goto L_M_purify_nospace;
+ if (countitem("MauveHerb") < 20)
+ goto L_M_purify_lacking;
+ if (countitem("MaggotSlime") < 20)
+ goto L_M_purify_lacking;
+ delitem "MauveHerb", 20;
+ delitem "MaggotSlime", 20;
+ getitem "PurificationPotion", 1;
+ mes "[Wyara the Witch]";
+ mes "Wyara brews another purification potion.";
+ next;
+ goto L_M_purify_doit2;
+
+L_M_purify_doit2:
+ mes "[Wyara the Witch]";
+ mes "\"Please apply this one quickly, again.\"";
+ close;
+
+L_M_purify_done:
+ mes "[Wyara the Witch]";
+ mes "Wyara smiles at you.";
+ mes "\"A friend told me... you have saved the pond for now. Perhaps it will need some more attention later, but I'll ask others for this.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"Please sit down and touch the ground.\"";
+ next;
+ menu
+ "Very well.", L_Next2,
+ "No way!", L_M_purify_abort;
+
+L_Next2:
+ mes "[Wyara the Witch]";
+ mes "You sit down and touch the ground, and so does Wyara.";
+ next;
+ mes "[Wyara the Witch]";
+ mes "You sense the earth, through the floor boards, and begin to feel one with it, as if you were a plant or rock.";
+ next;
+ mes "[Wyara the Witch]";
+ mes "The gentle breeze coming in through the window begins to take on a very different quality, as if it were the gentle caress of a mother soothing her child.";
+ next;
+ mes "[Wyara the Witch]";
+ mes "You can sense the water within the ground, and from it you sense your sisters and brothers, plants, animals, people...";
+ next;
+ mes "[Wyara the Witch]";
+ mes "Slowly, the sensation recedes, but you feel changed.";
+ @SUP_xp = 5000;
+ @SUP_lvl = 2;
+ callfunc "SkillUp";
+ @Q_status = @STATUS_PURIFY_OVER;
+ callsub S_Update_Var;
+ close;
+
+L_M_purify_abort:
+ mes "[Wyara the Witch]";
+ mes "\"I can't help you if you don't subject yourself to the ritual.\"";
+ close;
+
+L_M_train_no:
+ mes "[Wyara the Witch]";
+ mes "\"I can't teach you anything at this time. Perhaps Sagatha can help you, but I'm not sure if she will accept you as a student.\"";
+ next;
+ goto L_M_train_sagatha;
+
+L_M_train_sagatha:
+ menu
+ "OK.", L_M_main,
+ "How can I convince her to accept me?", L_Next3;
+
+L_Next3:
+ callfunc "SagathaStatus";
+ mes "[Wyara the Witch]";
+ if (@evil)
+ goto L_M_train_s_fail;
+ if (getskilllv(SKILL_MAGIC) < 2)
+ goto L_M_train_s_lvl1;
+ if (@good > 1)
+ mes "\"Come to think of it, I have heard good things about you. Perhaps she will be willing to accept you as a student now?\"";
+ if (@good == 1)
+ mes "\"I have heard some good things about you, but I'm not sure if it will be enough to sway her – she is hesitant to accept students.\"";
+ if (@good == 0)
+ mes "\"Sagatha cares greatly about all living creatures, but particularly about the creatures of the forest. If you are kind to them, she will be more likely to be kind to you.\"";
+ next;
+ if (@druid == 3)
+ goto L_M_main;
+ mes "[Wyara the Witch]";
+ mes "She smiles.";
+ mes "\"Actually, I think I know of a good thing you could do. There is a very special tree in the desert south-east of Tulimshar, a tree that has been there for a very long time.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"The tree is slowly dying – and has been for a long time – but it is there because of a wonderful thing that happened long ago. Tend to it, and I am sure that she will learn about this.\"";
+ next;
+ MAGIC_FLAGS = MAGIC_FLAGS | MFLAG_KNOWS_DRUIDTREE;
+ menu
+ "What is that tree?", L_M_train_t_backgd,
+ "How should I tend to it?", L_Next4,
+ "Nah.", L_M_main;
+
+L_Next4:
+ mes "[Wyara the Witch]";
+ mes "\"The tree has been there alone and unattended for a long time; what he needs most is water and affection. Give him both.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "She hesitates for a moment.";
+ mes "\"But stay away from the well in the area. There is no water in there anymore, and it's also dangerous.\"";
+ next;
+ goto L_M_main;
+
+L_M_train_t_backgd:
+ mes "[Wyara the Witch]";
+ mes "\"Many generations ago, there was a lush, green oasis in the desert south-east of Tulimshar. Plants of all kinds grew there, and many animals, including mouboos, made this place their home.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"Then there came war, and some people pleaded to the demon Grenxen. He founded Tulimshar, and to provide it with water he changed the underground waterflow. The oasis began to dry out quickly.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"But the oasis, like many such places back in the old days, had a druid watching over it. The druid refused to accept what Grenxen had done, but he was powerless to revert or change it.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"All he could do was to delay the inevitable, to give the animals and nomads some time to adapt.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"But to do so, he had to reach the water streams deep underground. Thus, he turned himself into a tree, a deep-rooted fyrad, so that his roots could reach underground.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"He had to exert himself tremendously; he had to grow deep, quickly; I believe that no druid or witch has summoned such magic before or since. But he succeeded, and for a while he saved the oasis.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"Many generations he remained the only one ever to have successfully defied Grenxen, but this came at a price: he had to remain a tree, and he never turned back.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"I believe that he has not forgotten his old magic, because even though a tree remembers many things for a very long time, trees are not keen to change things, not even themselves.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"Now he stands alone in the desert, dried-up and forgotten, with no-one remembering him.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"Please give him water, for he is always in need of it, and thank him for his sacrifice. It is all we can do for him now.\"";
+ next;
+ goto L_M_t_menu;
+
+L_M_t_menu:
+ menu
+ "How should I give him water?", L_M_t_water,
+ "How should I thank him?", L_M_t_remind,
+ "I will.", L_M_main,
+ "No.", L_M_main;
+
+L_M_t_water:
+ mes "[Wyara the Witch]";
+ mes "\"A bottle of water would probably not be enough. No, you would have to water the ground all around... that's too many bottles. You will have to get water from elsewhere.\"";
+ next;
+ goto L_M_t_menu;
+
+L_M_t_remind:
+ mes "[Wyara the Witch]";
+ mes "\"Give him a sign of affection. Something that works with a tree, but also something that humans might do to each other, to remind him of his days as a human.\"";
+ next;
+ mes "[Wyara the Witch]";
+ mes "\"Yes... that would be important. Show your affection in the same way that you might towards a human.\"";
+ next;
+ goto L_M_t_menu;
+
+L_M_train_s_fail:
+ mes "She shakes her head.";
+ mes "\"No... from what I have heard, you have done something unforgivable. I very much doubt that you can be her student now, and I won't teach you any further either.\"";
+ next;
+ goto L_M_main;
+
+L_M_train_s_lvl1:
+ mes "\"Well, you're still a bit of a beginner, so I don't think she will accept you yet. Maybe you can absorb some more power from the mana seed? If you can grow your magical powers a little, I might be able to help you.\"";
+ next;
+ goto L_M_main;
+
+L_close:
+ close;
+
+S_Update_Var:
+ QUEST_MAGIC2 = (QUEST_MAGIC2 & ~(@Q_MASK) | (@Q_status << @Q_SHIFT));
+ return;
+}
diff --git a/npc/009-2/yalina.txt b/npc/009-2/yalina.txt
new file mode 100755
index 00000000..1f8a889c
--- /dev/null
+++ b/npc/009-2/yalina.txt
@@ -0,0 +1,10 @@
+009-2,148,47,0 script Yalina NPC209,{
+ @npcname$ = "Yalina";
+
+ mes "[" + @npcname$ + "]";
+ mes "\"Ian knows a lot! I had so many questions he helped me with!\"";
+ next;
+ mes "\"He rewards those that know what they are doing. When the Nurse stops healing you, check in with Ian.\"";
+ @npcname$ = "";
+ close;
+}