summaryrefslogtreecommitdiff
path: root/npc/009-1
diff options
context:
space:
mode:
Diffstat (limited to 'npc/009-1')
-rw-r--r--npc/009-1/_import.txt16
-rw-r--r--npc/009-1/_mobs.txt38
-rw-r--r--npc/009-1/_warps.txt27
-rw-r--r--npc/009-1/blackwin.txt30
-rwxr-xr-xnpc/009-1/constable.txt9
-rw-r--r--npc/009-1/forwin.txt24
-rwxr-xr-xnpc/009-1/guide.txt184
-rw-r--r--npc/009-1/hamond.txt18
-rwxr-xr-xnpc/009-1/jack.txt271
-rwxr-xr-xnpc/009-1/mapflags.txt2
-rwxr-xr-xnpc/009-1/milly.txt452
-rwxr-xr-xnpc/009-1/old_man.txt38
-rwxr-xr-xnpc/009-1/old_woman.txt83
-rwxr-xr-xnpc/009-1/sabine.txt29
-rwxr-xr-x[-rw-r--r--]npc/009-1/soul-menhir.txt20
-rw-r--r--npc/009-1/thurstan.txt22
-rwxr-xr-xnpc/009-1/water_pump.txt5
-rw-r--r--npc/009-1/wateranimation.txt10
18 files changed, 1116 insertions, 162 deletions
diff --git a/npc/009-1/_import.txt b/npc/009-1/_import.txt
index 0d4e3164..207b090c 100644
--- a/npc/009-1/_import.txt
+++ b/npc/009-1/_import.txt
@@ -1,10 +1,14 @@
-// Map 009-1: Swamp
+// Map 009-1: Hurnscald
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/009-1/_mobs.txt",
"npc/009-1/_warps.txt",
-"npc/009-1/blackwin.txt",
-"npc/009-1/forwin.txt",
-"npc/009-1/hamond.txt",
+"npc/009-1/constable.txt",
+"npc/009-1/guide.txt",
+"npc/009-1/jack.txt",
+"npc/009-1/mapflags.txt",
+"npc/009-1/milly.txt",
+"npc/009-1/old_man.txt",
+"npc/009-1/old_woman.txt",
+"npc/009-1/sabine.txt",
"npc/009-1/soul-menhir.txt",
-"npc/009-1/thurstan.txt",
-"npc/009-1/wateranimation.txt",
+"npc/009-1/water_pump.txt",
diff --git a/npc/009-1/_mobs.txt b/npc/009-1/_mobs.txt
index 278be1b7..d7f02ba3 100644
--- a/npc/009-1/_mobs.txt
+++ b/npc/009-1/_mobs.txt
@@ -1,33 +1,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
-// Map 009-1: Swamp mobs
-009-1,190,74,53,40 monster Silkworm 1040,12,4500,6000
-009-1,152,116,48,43 monster Forest Maggot 1028,20,3600,12000
-009-1,89,116,43,31 monster Grass Snake 1042,5,6000,24000
-009-1,192,155,43,31 monster Grass Snake 1042,7,3000,12000
-009-1,228,64,17,32 monster Log Head 1031,4,5000,30000
-009-1,168,95,14,9 monster Bandit 1063,2,9000,18000
-009-1,115,150,45,26 monster Thief Slime 1105,5,11500,45000
-009-1,185,179,45,20 monster Blub 1008,4,60000,120000
-009-1,128,144,77,47 monster Green Slime 1024,10,10000,30000
-009-1,63,175,30,15 monster Little Green Slime 1025,5,10000,30000
-009-1,84,111,30,15 monster Little Green Slime 1025,5,10000,50000
-009-1,228,139,13,12 monster Mana Ghost 1101,2,10000,30000
-009-1,45,182,13,12 monster Mana Ghost 1101,4,10000,60000
-009-1,69,185,31,9 monster Skeleton 1084,4,6000,24000
-009-1,142,159,84,20 monster Swampling 1109,10,30000,60000
-009-1,162,99,17,15 monster Robin Bandit 1064,2,9000,18000
-009-1,184,48,38,13 monster Spiky Mushroom 1049,4,3000,12000
-009-1,103,86,31,27 monster Big Frog 1087,3,6000,60000
-009-1,85,118,49,43 monster Small Frog 1086,8,3000,30000
-009-1,152,165,44,40 monster Big Frog 1087,5,6000,75000
-009-1,188,188,49,18 monster Small Frog 1086,7,3000,30000
-009-1,228,65,16,8 monster Spider 1044,2,4000,8000
-009-1,209,58,16,28 monster Grass Snake 1042,4,3000,12000
-009-1,232,79,3,12 monster Wicked Mushroom 1050,3,6000,12000
-009-1,124,64,3,12 monster Wicked Mushroom 1050,7,3000,12000
-009-1,214,173,13,12 monster Zombie 1118,1,48000,120000
-009-1,37,181,13,12 monster Water Wisp 1116,3,10000,60000
-009-1,66,182,13,12 monster Fire Wisp 1115,1,10000,60000
-009-1,131,193,13,12 monster Green Slime Progenitor 1097,1,48000,120000
-009-1,149,174,84,19 monster Mud Slime 1096,4,30000,60000
-009-1,61,109,16,32 monster Serqet 1119,2,12000,60000
+// Map 009-1: Hurnscald mobs
+009-1,74,32,1,0 monster Alizarin Plant 1037,1,100000,120000
+009-1,29,44,4,6 monster CroconutMob 1014,2,0,250
+009-1,88,51,7,2 monster Gamboge Plant 1038,2,0,5000
+009-1,80,38,2,2 monster Gamboge Plant 1038,1,0,5000
+009-1,0,0,0,0 monster Amethyst Vein 1055,5,30,20
diff --git a/npc/009-1/_warps.txt b/npc/009-1/_warps.txt
index a5300fba..0dad32b9 100644
--- a/npc/009-1/_warps.txt
+++ b/npc/009-1/_warps.txt
@@ -1,15 +1,14 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
-// Map 009-1: Swamp warps
-009-1,181,31,0 warp #009-1_181_31 1,0,008-1-1,180,197
-009-1,249,48,0 warp #009-1_249_48 0,0,008-1,23,216
-009-1,175,77,0 warp #009-1_175_77 1,0,009-2-1,34,44
-009-1,161,90,0 warp #009-1_161_90 1,0,009-2-0,31,39
-009-1,184,101,0 warp #009-1_184_101 0,0,009-2-2,32,39
-009-1,35,168,0 warp #009-1_35_168 1,0,009-2-3,41,39
-009-1,67,159,0 warp #009-1_67_159 0,0,009-2-6,29,35
-009-1,64,186,0 warp #009-1_64_186 0,0,009-2-7,29,35
-009-1,90,159,0 warp #009-1_90_159 0,0,009-2-8,29,40
-009-1,196,96,0 warp #009-1_196_96 1,0,009-2-9,34,43
-009-1,95,192,0 warp #009-1_95_192 0,0,009-2-12,28,43
-009-1,206,148,0 warp #009-1_206_148 0,0,009-2-15,28,41
-009-1,213,147,0 warp #009-1_213_147 1,0,009-2-15,43,40
+// Map 009-1: Hurnscald warps
+009-1,49,55,0 warp #009-1_49_55 3,0,008-1,78,81
+009-1,97,36,0 warp #009-1_97_36 0,1,008-1,128,61
+009-1,35,30,0 warp #009-1_35_30 0,0,009-2,50,54
+009-1,58,46,0 warp #009-1_58_46 0,0,009-2,27,106
+009-1,59,33,0 warp #009-1_59_33 0,0,009-2,95,29
+009-1,71,30,0 warp #009-1_71_30 0,0,009-2,130,25
+009-1,80,31,0 warp #009-1_80_31 0,0,009-2,149,66
+009-1,72,44,0 warp #009-1_72_44 0,0,009-2,114,77
+009-1,91,46,0 warp #009-1_91_46 1,0,009-2,182,66
+009-1,24,36,0 warp #009-1_24_36 0,2,008-1,53,61
+009-1,49,24,0 warp #009-1_49_24 3,0,008-1,78,48
+009-1,60,41,0 warp #009-1_60_41 0,0,009-2,32,91
diff --git a/npc/009-1/blackwin.txt b/npc/009-1/blackwin.txt
deleted file mode 100644
index 7ad7f39b..00000000
--- a/npc/009-1/blackwin.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-// Evol scripts.
-// Author:
-// Micksha
-// Description:
-// Blackwin, guardian of Asphodel Moors, disciple of Golbenez. Twice. It is magic.
-// THIS IS A PLACEHOLDER!
-
-009-1,75,144,0 script Blackwin#1 NPC_UNDEAD_GUARD,{
- speech
- l("..."),
- l("Heed my warning, young %s. My master will suffer no fools here.", get_race(GETRACE_RACE)),
- l("He created this as a place of leisure, and we are here to ensure that it remains undisturbed.");
- close;
-
-OnInit:
- .distance = 4;
- end;
-}
-
-009-1,105,173,0 script Blackwin#2 NPC_UNDEAD_GUARD,{
- speech
- l("..."),
- l("Heed my warning, young %s. My master will suffer no fools here.", get_race(GETRACE_RACE)),
- l("He created this as a place of leisure, and we are here to ensure that it remains undisturbed.");
- close;
-
-OnInit:
- .distance = 4;
- end;
-}
diff --git a/npc/009-1/constable.txt b/npc/009-1/constable.txt
new file mode 100755
index 00000000..c071068a
--- /dev/null
+++ b/npc/009-1/constable.txt
@@ -0,0 +1,9 @@
+
+009-1,52,33,0 script Constable Bob NPC419,{
+ mes "[Constable Bob]";
+ mes "\"Hello.\"";
+ mes "\"I've been getting complaints of lawlessness in Hurnscald recently, so I thought I'd come down here myself and explain the rules.\"";
+ mes "\"Please make sure that you follow them!\"";
+ callfunc "GameRules";
+ close;
+}
diff --git a/npc/009-1/forwin.txt b/npc/009-1/forwin.txt
deleted file mode 100644
index 4b134f03..00000000
--- a/npc/009-1/forwin.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-// Evol scripts.
-// Author:
-// Micksha
-// Description:
-// Martha, sort of Brotherhood Leader in Tulimshar.
-// THIS IS A PLACEHOLDER!
-
-009-1,48,171,0 script Forwin NPC_UNDEAD_GUARD,{
- mesn;
- mesq l("%s...", strcharinfo(0));
- next;
- mesn;
- mesq l("I am your father...");
- next;
- mesc l("There is an awkward pause, and then the guard bursts out laughing.");
- mes "";
- mesn;
- mesq l("Just kidding! Can you imagine Golbenez's reaction if we had such puny offspring?");
- close;
-
-OnInit:
- .distance = 4;
- end;
-}
diff --git a/npc/009-1/guide.txt b/npc/009-1/guide.txt
new file mode 100755
index 00000000..4b62c4b3
--- /dev/null
+++ b/npc/009-1/guide.txt
@@ -0,0 +1,184 @@
+
+009-1,92,29,0 script Ian NPC102,{
+ // This line is only relevant for players, who started before the timestamp was introduced.
+ // Set the graduation cap flag at the right position.
+ // It is a bugfix
+ if ((TUT_var < 4) && (TUT_var & 2))
+ FLAGS = FLAGS|FLAG_GOT_GRADUATIONCAP;
+
+ if ((TUT_var != 0) && !(FLAGS & FLAG_GOT_GRADUATIONCAP) && BaseLevel >= 10)
+ goto L_Grad;
+ goto L_DoneGrad;
+
+L_DoneGrad:
+ mes "[Ian the Guide]";
+ mes "\"Would you like to know about something?\"";
+ next;
+ goto L_Menu_A;
+
+L_Menu_A:
+ menu
+ "Fighting", L_Fight,
+ "Items", L_Items,
+ "Monsters", L_Monster,
+ "Stylist", L_Style,
+ "Quests", L_Quests,
+ "NPCs", L_NPC,
+ "Commands", L_Comm,
+ "Attributes", L_Stats,
+ "Magic", L_Magic,
+ "Quick Keys", L_Key,
+ "Laws", L_Laws,
+ "I know everything!", L_Know;
+
+L_Fight:
+ mes "[Ian the Guide]";
+ mes "\"People live in this world by living off of monsters.";
+ mes "You can fight monsters and even players by hitting the [CTRL] key, or left mouse click.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"If you get tired of pressing the key too much, you can also type [SHIFT]+[CTRL].";
+ mes "This will make your character attack continuously for the time you are inactive.\"";
+ next;
+ goto L_Menu_A;
+
+L_Items:
+ mes "[Ian the Guide]";
+ mes "\"There are three types of items.";
+ mes "They can be Consumables, Equipment or Miscellaneous\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Consumable items such as Potions, can be used only once.";
+ mes "After use, they will disappear from your inventory.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Equipment items like Armors, Weapons, Accessories";
+ mes "can be equipped for fashionable purposes or to raise your status.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Miscellaneous items such as maggot slime, are used";
+ mes "in creating other items, or just to trade and sell.\"";
+ next;
+ goto L_Menu_A;
+
+L_Monster:
+ mes "[Ian the Guide]";
+ mes "\"In every world, there are beasts. Monsters can be found almost anywhere!~";
+ mes "To fight them, please read [Fighting] if you do not know how.\"";
+ next;
+ mes "\"There a several types of monsters, Aggressive, Neutral, and Assistants.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Aggressive monsters know that they are always in danger";
+ mes "so therefore they always keep their guard up,";
+ mes "making them attack anybody in sight.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Neutral monsters tend to just lounge around until attacked.";
+ mes "They will leave everything alone unless they are threatened.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Assistants are monsters who help each other.";
+ mes "You should always check how many are around you before attacking a single one!\"";
+ next;
+ goto L_Menu_A;
+
+L_Style:
+ mes "[Ian the Guide]";
+ mes "\"The stylist NPCs will cut and perm your hair!";
+ mes "They are known for their hair growth formula\"";
+ next;
+ goto L_Menu_A;
+
+L_Quests:
+ mes "[Ian the Guide]";
+ mes "\"There are people in the world in need of help!";
+ mes "Most of these people aren't afraid to give rewards to those who help them.";
+ mes "So be nice and help people along the way!\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"If you are looking for a place to get started, I heard that the farmers just outside the gates are looking for help.\"";
+ next;
+ goto L_Menu_A;
+
+L_NPC:
+ mes "[Ian the Guide]";
+ mes "\"NPCs [Non Playable Characters] are people who are always in the game,";
+ mes "tending to many varieties of services from just chatting to helping others.\"";
+ next;
+ goto L_Menu_A;
+
+L_Comm:
+ mes "[Ian the Guide]";
+ mes "\"/clear clears the text box.\"";
+ mes "\"/help displays the client commands (ones starting with a /) in the chat box.\"";
+ mes "\"/whisper [name] allows you to message someone privately.\"";
+ mes "\"/who displays the current number of online users.\"";
+ mes "\"/where displays the current map's name.\"";
+ next;
+ goto L_Menu_A;
+
+L_Stats:
+ mes "[Ian the Guide]";
+ mes "\"People vary greatly by how much strength, agility, dexterity, intelligence, vitality, and luck they have.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Strength helps you carry items, and it also allows you to hit harder – but it is not too helpful if you focus on missile weapons.";
+ mes "More agility allows you to attack faster, and to dodge attacks more easily.";
+ mes "Your dexterity determines how likely you are to hit a monster, and how effective you are with missile weapons.\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"Vitality determines how resistant to injuries you are, and how much damage you can take before you die.";
+ mes "Intelligence is useful for alchemy and magic, but there are few opportunities for either at the moment.";
+ mes "Luck determines many small things, including the likelihood of both recieving and dealing critical hits\"";
+ next;
+ mes "[Ian the Guide]";
+ mes "\"I recommend that you practice your dexterity, since some of the more dangerous monsters are very hard to hit otherwise.";
+ mes "Don't bother trying to work on your luck, and your intelligence is probably not something anyone cares about either.\"";
+ next;
+ goto L_Menu_A;
+
+L_Magic:
+ mes "[Ian the Guide]";
+ mes "\"The only active Mana Seed remaining is West of here somewhere, Ask Wyara, they may know more about it.\"";
+ next;
+ mes "\"In decades past, there was a Mana Seed in Tulimshar, from which people could draw magical energies. Unfortunately, the seed went dorment.";
+ mes "However, I've overheard the bard mentioning something about this recently... if you are interested in magic, try talking to him!\"";
+ next;
+ goto L_Menu_A;
+
+L_Key:
+ mes "[Ian the Guide]";
+ mes "\"There are many key combinations, press F1 for a short list of them!\"";
+ next;
+ goto L_Menu_A;
+
+L_Laws:
+ mes "[Ian the Guide]";
+ callfunc "GameRules";
+ next;
+ goto L_Menu_A;
+
+L_Know:
+ mes "[Ian the Guide]";
+ mes "\"Lost? Confused? Want to know why you can't get past a quest, overcome an NPC or find an item? Check http://wiki.themanaworld.org for player hints, walkthroughs, item lists and more!\"";
+ next;
+ mes "\"But remember, the game isn't fun when you already know what to do. Use it well or you will lose interest in playing The Mana World! Please help by reporting anything that is unclear, outdated or that needs to be seen on our forums at http://forums.themanaworld.org.\"";
+ close;
+
+L_Grad:
+ getinventorylist;
+ if (@inventorylist_count == 100) goto L_TooMany;
+ mes "[Ian the Guide]";
+ mes "\"Hey, you've been doing good, let me give you this.\"";
+ getitem "GraduationCap", 1;
+ FLAGS = FLAGS | FLAG_GOT_GRADUATIONCAP;
+ next;
+ goto L_DoneGrad;
+
+L_TooMany:
+ mes "[Ian the Guide]";
+ mes "\"I wanted to give you something, but you don't have room for it.\"";
+ next;
+ goto L_DoneGrad;
+}
diff --git a/npc/009-1/hamond.txt b/npc/009-1/hamond.txt
deleted file mode 100644
index 25824589..00000000
--- a/npc/009-1/hamond.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-// Evol scripts.
-// Author:
-// Micksha
-// Description:
-// Hamond, Reid's Husband
-// THIS IS A PLACEHOLDER!
-
-009-1,37,170,0 script Hamond NPC_HAMOND,{
- speech
- l("Hello, my name is Hamond."),
- l("I run the inn together with my beautiful wife Reid."),
- l("If there is anything I can do for you, please let me know.");
- close;
-
-OnInit:
- .distance = 4;
- end;
-}
diff --git a/npc/009-1/jack.txt b/npc/009-1/jack.txt
new file mode 100755
index 00000000..f789ec00
--- /dev/null
+++ b/npc/009-1/jack.txt
@@ -0,0 +1,271 @@
+
+009-1,40,45,0 script Jack NPC141,{
+ @RAWLOGS_AMOUNT = 40;
+ @SHIELD_COST = 5000;
+ @QUEST_SHIELD_EXP = 2500;
+
+ @Q_Forestbow_MASK = NIBBLE_0_MASK;
+ @Q_Forestbow_SHIFT = NIBBLE_0_SHIFT;
+
+ @Q_Woodenshield_MASK = NIBBLE_1_MASK;
+ @Q_Woodenshield_SHIFT = NIBBLE_1_SHIFT;
+
+ @Q_Forestbow = ((QUEST_Forestbow_state & @Q_Forestbow_MASK) >> @Q_Forestbow_SHIFT);
+ @Q_Woodenshield = ((QUEST_Forestbow_state & @Q_Woodenshield_MASK) >> @Q_Woodenshield_SHIFT);
+
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ if (@Q_Woodenshield >= 3) goto L_Shield_state_3;
+ if (@Q_Woodenshield == 2) goto L_Shield_state_2;
+ if (@Q_Woodenshield == 1) goto L_Shield_state_1;
+ if (@Q_Forestbow > 1) goto L_Bow_state_2;
+
+ mes "[Jack Lumber]";
+ mes "\"Hello there! My name is Jack Lumber, the enemy of all trees. If you need some firewood, just let me know.\"";
+ if (@inspector == 1)
+ goto L_NohMask_Ask;
+ goto L_NotInspector;
+
+L_NotInspector:
+ next;
+ if (@Q_Forestbow < 1)
+ goto L_close;
+ mes "I heard you aren't delivering any more living wood. Why not?";
+ next;
+ goto L_Next;
+
+L_Next:
+ mes "[Jack Lumber]";
+ mes "\"Why not?! I value my life, that's why!.\"";
+ next;
+ menu
+ "What do you mean?", L_Next1;
+
+L_Next1:
+ mes "[Jack Lumber]";
+ mes "\"A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest – these twigleafs are the trees that give me the living wood you speak of. I was just chopping away with my axe, and guess what happened? One of its branches hit me! At first, I thought it fell down or the wind blew it, but it hurt! After I shook it off and struck the tree again with my axe, another branch hit me! I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore. Even after all that though, I still can't believe what happened next.\"";
+ next;
+ menu
+ "What happened? ", L_Next2;
+
+L_Next2:
+ mes "[Jack Lumber]";
+ mes "\"You'll think I'm insane if I tell you...\"";
+ next;
+ menu
+ "I won't. I promise.", L_Next3;
+
+L_Next3:
+ mes "[Jack Lumber]";
+ mes "\"Alright, well... After I chopped off a few branches, the whole tree started to move! Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk. The whole tree CAME TO LIFE! It was mad!\"";
+ next;
+ menu
+ "Did you run away?", L_Next4,
+ "Did you fight it?", L_Next4;
+
+L_Next4:
+ mes "[Jack Lumber]";
+ mes "\"I fought it, of course! I took my axe and attacked the beast! It hit me here *points at a bruise on his shoulder,* here *lifts his trouser leg to show another bruise,* and here *lifts his shirt and reveals even worse bruises.* But I didn't give up! I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground – motionless.\"";
+ next;
+ menu
+ "So you beat the monster? Then why are you so scared?", L_Next5;
+
+L_Next5:
+ mes "[Jack Lumber]";
+ mes "\"Well, I was exhausted and had to rest. A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!\"";
+ next;
+ menu
+ "Did you fight them too? ", L_Next6;
+
+L_Next6:
+ mes "[Jack Lumber]";
+ mes "\"Are you crazy? I barely destroyed one of those beasts; I was in no shape to fight again! I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs. Ha!\"";
+ next;
+ menu
+ "So, I guess you aren't chopping down trees anymore?", L_Next7;
+
+L_Next7:
+ mes "[Jack Lumber]";
+ mes "\"I still do; it's my job. But I'll no longer chop those twigleafs – I'll tell you that. I know the bow master wants some twigleaf wood, but I don't care. I won't risk MY life for a few gold pieces! If you really want to, just go to the southwest, but I can't help you. I won't go there ever again.\"";
+ next;
+ menu
+ "Southwest you say? OK, thank you.", L_Next8;
+
+L_Next8:
+ @Q_Forestbow = 2;
+ callsub S_Update_Mask;
+ goto L_close;
+
+L_Bow_state_2:
+ // Bow state 4: The player has found a perfect piece of wood.
+ if (@Q_Forestbow > 3) goto L_Bow_state_4;
+
+ mes "\"Good luck hunting those tree monsters – you'll need it.\"";
+ if (@inspector != 1)
+ goto L_close;
+ goto L_NohMask_Ask;
+
+L_Bow_state_4:
+ mes "[Jack Lumber]";
+ mes "\"You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?\"";
+ next;
+ menu
+ "I couldn't afford the bow, though...", L_Shield_state_0,
+ "No, I'm still looking.", L_Bow_state_4_reaffirm,
+ "Yes, I've got the Forest bow now.", L_Next9,
+ "I'm a melee warrior, I don't need bows.", L_Shield_state_0;
+
+L_Next9:
+ // Check if the player tells the truth (continue on in any case)
+ if (@Q_Forestbow > 4) goto L_Shield_state_0;
+
+ mes "[Jack Lumber]";
+ mes "\"Hrmph. I'm someone who respects those speaking the truth.\"";
+ next;
+ goto L_Shield_state_0;
+
+L_Bow_state_4_reaffirm:
+ mes "[Jack Lumber]";
+ mes "\"You should go talk to Alan again.\"";
+ goto L_close;
+
+L_Shield_state_0:
+ @Q_Woodenshield = 1;
+ callsub S_Update_Mask;
+
+ mes "[Jack Lumber]";
+ mes "\"You no doubt remember how I struggled with those beasts, fighting for my life. Scared me, those seven-branched little stumps did! Never since that day have I strayed near them, and yet there you are, cutting them down one by one. I'm proud of you – to dare to fight those trunks is admirable indeed. You're as strong as if you were my own child!\"";
+ next;
+ goto L_Shield_state_1;
+
+L_Shield_state_1:
+ mes "[Jack Lumber]";
+ mes "\"I have an idea. What would you say about a new shield?\"";
+ next;
+ if (@inspector == 1)
+ menu
+ "No thanks.", L_close,
+ "Yes, please!", L_Yes,
+ "Actually, I'd like to know if you've seen any strange happenings in town.", L_NohMask_Answer;
+ menu
+ "No thanks.", L_close,
+ "Yes, please!", L_Yes;
+
+L_Yes:
+ mes "[Jack Lumber]";
+ mes "\"All I need is " + @RAWLOGS_AMOUNT + " raw logs. This needn't be high quality wood; pretty much any log you can find should work. Oh, and I'll also need " + @SHIELD_COST + " GP for other materials.\"";
+ next;
+ @Q_Woodenshield = 2;
+ callsub S_Update_Mask;
+ goto L_close;
+
+L_Shield_state_2:
+ mes "[Jack Lumber]";
+ mes "\"Do you have the " + @RAWLOGS_AMOUNT + " raw logs and " + @SHIELD_COST + " GP for the shield?\"";
+ menu
+ "Here it is.", L_Next10,
+ "I'll come back later.", L_close;
+
+L_Next10:
+ if (countitem("RawLog") < @RAWLOGS_AMOUNT)
+ goto L_Not_enough_logs;
+ if (Zeny < @SHIELD_COST)
+ goto L_Not_enough_money;
+ getinventorylist;
+ if (@inventorylist_count == 100)
+ goto L_TooMany;
+ delitem "RawLog", @RAWLOGS_AMOUNT;
+ Zeny = Zeny - @SHIELD_COST;
+ getexp @QUEST_SHIELD_EXP, 0;
+ getitem "WoodenShield", 1;
+ @Q_Woodenshield = 3;
+ callsub S_Update_Mask;
+ mes "[Jack Lumber]";
+ mes "\"Have a seat.\"";
+ mes "Jack saws the logs into pieces and then sands them until they are smooth to the touch.";
+ mes "Applying some strong-smelling liquid, he tans them to a darker hue.";
+ next;
+ mes "[Jack Lumber]";
+ mes "Grabbing one of two leftover pieces, he begins to carve it into a round shape, then repeats this with the second piece – shield handles from what you can tell.";
+ next;
+ mes "[Jack Lumber]";
+ mes "Meanwhile, the sun has dried the other pieces. Jack places them next to each other, adds a frame, and nails everything together.";
+ mes "The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments.";
+ next;
+ mes "[Jack Lumber]";
+ mes "Finally, he hands the shield to you.";
+ mes "\"Enjoy your new shield!\"";
+ mes "[" + @QUEST_SHIELD_EXP + " experience points]";
+ next;
+ goto L_close;
+
+L_Not_enough_logs:
+ mes "[Jack Lumber]";
+ mes "\"You don't have enough wood for me to craft this shield; I need a total of " + @RAWLOGS_AMOUNT + " raw logs.\"";
+ goto L_close;
+
+L_Not_enough_money:
+ mes "[Jack Lumber]";
+ mes "\"I'm afraid that you don't have enough gold. I need " + @SHIELD_COST + " GP to finish your shield.\"";
+ goto L_close;
+
+L_TooMany:
+ mes "[Jack Lumber]";
+ mes "\"You don't have enough room to carry the shield. Come back when you do.\"";
+ goto L_close;
+
+L_Shield_state_3:
+ mes "[Jack Lumber]";
+ mes "\"I hope that my shield will serve you well!\"";
+ next;
+ if (@inspector != 1)
+ goto L_Made_Shield;
+ menu
+ "Me too.", L_Made_Shield,
+ "Have you seen anything that might be connected to the recent robberies in town?", L_NohMask_Answer;
+
+L_NohMask_Ask:
+ menu
+ "I'll keep that in mind.", L_close,
+ "I heard you aren't delivering any more living wood. Why not?", L_Next,
+ "Have you seen anything that might be connected to the recent robberies in town?", L_NohMask_Answer;
+
+L_NohMask_Answer:
+ mes "[Jack Lumber]";
+ mes "\"Sorry, no.\"";
+ goto L_close;
+
+L_Made_Shield:
+ mes "[Jack Lumber]";
+ mes "\"Speaking of that shield...\"";
+ mes "\"It has put me behind on all these new Nivalis orders, now that the ship is running there.\"";
+ next;
+ mes "\"Care to help out? I'll pay you for your time.\"";
+ goto L_Daily;
+
+L_Daily:
+ @dq_level = 30;
+ @dq_cost = 25;
+ @dq_count = 30;
+ @dq_name$ = "RawLog";
+ @dq_friendly_name$ = "raw logs";
+ @dq_money = 4000;
+ @dq_exp = 4000;
+
+ callfunc "DailyQuest";
+
+ next;
+
+ mes "[Jack Lumber]";
+ mes "\"Check back with me tomorrow, and I'll let you know if I need any help with that shipment.\"";
+
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+
+S_Update_Mask:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(@Q_Forestbow_MASK | @Q_Woodenshield_MASK)) | (@Q_Forestbow << @Q_Forestbow_SHIFT) | (@Q_Woodenshield << @Q_Woodenshield_SHIFT);
+ return;
+}
diff --git a/npc/009-1/mapflags.txt b/npc/009-1/mapflags.txt
new file mode 100755
index 00000000..6fd55565
--- /dev/null
+++ b/npc/009-1/mapflags.txt
@@ -0,0 +1,2 @@
+//009-1 mapflag town
+//009-1 mapflag resave 009-2,149,43
diff --git a/npc/009-1/milly.txt b/npc/009-1/milly.txt
new file mode 100755
index 00000000..b0c88c7a
--- /dev/null
+++ b/npc/009-1/milly.txt
@@ -0,0 +1,452 @@
+
+009-1,81,41,0 script Milly NPC114,{
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ @got_boneknife = ((QUEST_Forestbow_state & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT) >= 4;
+ @got_setzer = ((QUEST_Forestbow_state & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT) >= 8;
+ @saved_rossy = (FLAGS & FLAG_ROSSI_COMPLETED);
+ @saved_cindy = QL_CINDY == 4;
+
+ if (FLAGS & FLAG_GOT_BEANIEHAT) goto L_FinishedGood;
+ if (FLAGS & FLAG_DECLINED_BEANIEHAT) goto L_FinishedBad;
+
+ if (@saved_rossy && @saved_cindy && @got_setzer && (BOSS_POINTS >= 5000)) goto L_OfferCap;
+ if (@got_setzer) goto L_GotSetzer;
+ if (@saved_cindy) goto L_SavedCindy;
+ if (@saved_rossy) goto L_SavedRossy;
+ if (@got_boneknife) goto L_GotBoneKnife;
+ if (BaseLevel > 40) goto L_NoKnifeYet;
+
+ mes "[Milly]";
+ mes "\"Hello traveler, welcome to Hurnscald.\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"Have you met Kfahr yet? He is the greatest hero that ever walked the land of Hurnscald!\"";
+ menu
+ "Hi! No, I haven't seen him yet.", L_Where,
+ "Where can I find him?", L_Where,
+ "Mh, I don't care for heroes.", L_Care,
+ "Hello, yes I have met him.", L_MetKfahr;
+
+L_Where:
+ mes "[Milly]";
+ mes "\"I highly recommend you seek him out! He is a regular at the inn, located in the north-west part of town. If you are lucky he might tell you a story about his adventures.\"";
+ goto L_close;
+
+L_Care:
+ mes "[Milly]";
+ mes "\"What? Surely you do not appreciate what a hero he is! Mh, or perhaps honor is dead in you; for you to be so slow to comprehend the good that his exploits have wrought for us. Put on your thinking cap and be propelled into high adventure! Go to Kfahr, and listen to his stories.\"";
+ next;
+ mes "\"You can't have met him. No one who has met him would say such silly things.\"";
+ next;
+ goto L_Where;
+
+L_MetKfahr:
+ mes "[Milly]";
+ mes "\"Oh, I hope you stayed and listened to his stories about his adventures.\"";
+ goto L_close;
+
+L_NoKnifeYet:
+ mes "[Milly]";
+ mes "\"Hi again.\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"Have you talked to Kfahr lately?\"";
+ menu
+ "Yes.", L_TalkKfahr,
+ "No.", L_HintKnife;
+
+L_TalkKfahr:
+ mes "[Milly]";
+ mes "\"Is it true as the rumors say? ...\"";
+ next;
+ goto L_HintKnife;
+
+L_HintKnife:
+ mes "[Milly]";
+ mes "\"You really should go meet him.\"";
+ next;
+ mes "\"I've heard that he is helping adventurers such as yourself with some exotic gear.\"";
+ menu
+ "I am not sure, I'd better go talk to him again.", L_Unsure,
+ "Yes, it is true.", L_True;
+
+L_Unsure:
+ mes "[Milly]";
+ mes "\"You better hurry up before he changes his mind!\"";
+ goto L_close;
+
+L_True:
+ mes "[Milly]";
+ mes "\"So, why haven't you accepted his generous offer?\"";
+ menu
+ "I was just about to...", L_Unsure,
+ "I don't need any help.", L_NoHelp;
+
+L_NoHelp:
+ mes "[Milly]";
+ mes "\"You must be kidding me.\"";
+ next;
+ mes "\"I am just a kid but not as silly as you. My pigtails possess more wisdom than you. You fooled me, you are no adventurer!\"";
+ next;
+ mes "\"You better learn from the wise and accept help from those who offer it.\"";
+ goto L_Unsure;
+
+L_GotBoneKnife:
+ mes "[Milly]";
+ mes "\"Hi there.\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"I heard that you got an exotic knife from Kfahr.";
+ mes "Would you kindly show it to me?\"";
+ menu
+ "Sure.", L_ShowKnife,
+ "Haven't I already?", L_ShowKnifeAgain;
+
+L_ShowKnife:
+ if (countitem("BoneKnife") < 1)
+ goto L_ShowKnifeNo;
+ mes "[Milly]";
+ mes "\"Wow! That is a knife fitting a real adventurer!\"";
+ next;
+ mes "\"Kfahr ain't just a hero, he is also a stand up guy.\"";
+ next;
+ mes "\"You should be proud that he is honoring you with his knife like this.\"";
+ next;
+ mes "\"What a hero...\"";
+ goto L_close;
+
+L_ShowKnifeAgain:
+ mes "[Milly]";
+ mes "\"What possible objection could you have? It's so exiting to see such a fine knife.\"";
+ next;
+ mes "\"It is like cake, sure I might have had it before...\"";
+ next;
+ mes "\"... but does that stop me from wanting it once more?\"";
+ next;
+ mes "\"NO!\"";
+ next;
+ mes "\"Please let me see it!\"";
+ menu
+ "Okay.", L_ShowKnife,
+ "Enough is enough.", L_ShowKnifeNo;
+
+L_ShowKnifeNo:
+ mes "[Milly]";
+ mes "\"I hope that the reason that you don't show it to me is because you have it tucked away somewhere safe.\"";
+ next;
+ mes "\"Otherwise you are just a bore...\"";
+ next;
+ mes "\"Don't be boring!\"";
+ goto L_close;
+
+L_SavedRossy:
+ mes "[Milly]";
+ mes "\"Hi friend!\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"Word of your fame has spread throughout all Hurnscald of your great heroism by helping my friends Rossy and Julia!\"";
+ next;
+ mes "\"Not only did you help Rossy, you saved her sister Julia from that nefarious Fey Element. That was a real act of valor!\"";
+ next;
+ mes "\"You are shaping up to be something of a hero yourself.\"";
+ next;
+ mes "\"I am so happy that you came to Hurnscald, without you I'm not so sure that Julia would have been saved.\"";
+ menu
+ "You're right, I am a hero!", L_Loudmouth,
+ "I'm doing my best!", L_Modesty;
+
+L_Loudmouth:
+ mes "[Milly]";
+ mes "\"You surely are not...\"";
+ next;
+ mes "\"First and foremost you are a loudmouth. You need to learn actions speak better for themselves without your boasting.\"";
+ next;
+ mes "\"A little modesty would be a distinguishing trait for you to cultivate. You are talking as if you think that you are equal with Kfahr.\"";
+ next;
+ mes "\"I think you should show a little more respect when you are this close to legendary heroes.\"";
+ goto L_close;
+
+L_Modesty:
+ mes "[Milly]";
+ mes "\"Wow, you have been very helpful and unselfish risking your own safety for the sake of others! Thanks to that Julia is back and Olana is able to sleep at night.\"";
+ next;
+ mes "\"If you continue with these valiant deeds you might earn your place in the history books of Hurnscald!\"";
+ goto L_close;
+
+L_SavedCindy:
+ mes "[Milly]";
+ mes "\"Hi!\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"Are the rumors true?\"";
+ next;
+ mes "\"Word is going around that you saved a girl called Cindy who was captured by Yetis in Nivalis, and that you arranged a rescue party getting her back from a deep Yeti inhibited cave.\"";
+ menu
+ "Thanks to the party, yes.", L_Party,
+ "Yes, it is true!", L_Cindy;
+
+L_Party:
+ mes "[Milly]";
+ mes "\"Wow! Not only are you brave, you also have the wisdom to seek help when needed!\"";
+ next;
+ mes "\"Being a skilled fighter is good. But being a skilled fighter coupled with your wits and organizational skill, now that is something special!\"";
+ goto L_HeroGrowing;
+
+L_Cindy:
+ mes "[Milly]";
+ mes "\"Once again you have done good!\"";
+ goto L_HeroGrowing;
+
+L_HeroGrowing:
+ mes "[Milly]";
+ mes "\"You have saved two kids about my own age from horrible situations, it is just like the stories I heard growing up.\"";
+ next;
+ mes "\"Things certainly are shaping up for you. My schoolmates play a game with you as the hero. And poets admire you in verse and song...\"";
+ next;
+ mes "\"Since you have proven yourself with your great acts, I will let you in on an exciting rumor I have heard.\"";
+ next;
+ mes "\"I have heard that Nicholas has learned new techniques in forging and weapon smithing. He is now able to improve a small sword into what is called a Setzer.\"";
+ next;
+ mes "\"Go talk to him and hear if he can help you get hold of one of these weapons.\"";
+ goto L_close;
+
+L_GotSetzer:
+ mes "[Milly]";
+ mes "\"Hello!\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"I heard that you got hold of a Setzer!\"";
+ next;
+ mes "\"And the fact that Kfahr helped you means he really rates you as a fellow adventurer!\"";
+ next;
+ mes "\"Praise does not get much better than that around here. He knows a good adventurer when he see one, you must have impressed him!\"";
+ if (!@saved_cindy || !@saved_rossy)
+ goto L_close;
+ next;
+ mes "\"To be honest you are fast becoming my favored hero, even... dare I say it? Even more so than Kfahr.\"";
+ next;
+ mes "\"Your skill and good deeds are indisputable! However...\"";
+ next;
+ mes "\"Somehow I feel that you still need to establish your courage. The elders say that although they find you an admirable person, a hero of renown; that you can't be considered as great as Kfahr till you have proven yourself fearless.\"";
+ next;
+ mes "\"You could prove yourself as the greatest hero who has walked the land by accepting Paruas challenge at Candor. Stare death in the eyes, show no fear and conquer! Show everyone that you are worthy of the title: The Greatest Hero Ever!\"";
+ next;
+ mes "\"I myself already consider you my favorite hero, sure Kfahr has done great things, but...\"";
+ next;
+ mes "\"Nowadays he mostly sits around with that sad bunch of drunkards in the Inn, drinking beer and talking about past glory.\"";
+ next;
+ mes "\"For my generation you are the true hero, please prove the stony hearted elders wrong by showing them that you are fearless!\"";
+ next;
+ mes "\"Good luck and good bye! Health, mana, and wealth be yours! \"";
+ goto L_close;
+
+L_OfferCap:
+ mes "[Milly]";
+ mes "\"Hi there, hero of Hurnscald!\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"You really have proven yourself over and over. There is no way anyone could possibly say, you are not the equal of Kfahr!\"";
+ next;
+ mes "\"Now, even the stones of Hurnscald praise you as a hero as great as Kfahr!\"";
+ next;
+ mes "\"I have something I want to give you...\"";
+ next;
+ mes "\"I was given two of those helicopter beanie caps at my birthday. I told everyone that it was what I really wanted so I got two of them...\"";
+ next;
+ mes "\"And some other kids are picking on me for wearing it, they say it is for nerds... I would be happy to give you one of them.\"";
+ next;
+ mes "\"It would be great if you wore a cap just like mine, that would sure shut them up! Also, please accept this rare hat as a token of my gratitude for everything you have done.\"";
+ next;
+ mes "\"It would be an honor to have the same cap as my hero!\"";
+ menu
+ "Thank you!", L_Cap,
+ "No, thanks.", L_Idiot;
+
+L_Cap:
+ mes "[Milly]";
+ mes "\"Wow, thanks for accepting my gift, it is so pleasing to know that you have the exact same cap as me! Friends forever!\"";
+ getinventorylist;
+ if (@inventorylist_count == 100 || (checkweight("BeanieCopter", 1) == 0))
+ goto L_TooMany;
+ getitem "BeanieCopter", 1;
+ FLAGS = FLAGS | FLAG_GOT_BEANIEHAT;
+ next;
+ mes "She is giggling with excitement.";
+ next;
+ mes "[Milly]";
+ mes "\"Come see me anytime! Goodbye!\"";
+ goto L_close;
+
+L_Idiot:
+ mes "[Milly]";
+ mes "\"Are you really sure? It is such a neat cap.\"";
+ menu
+ "Yes, no nerd hat for me!", L_BadBye,
+ "Just kidding, I want one!", L_Cap;
+
+L_BadBye:
+ mes "Tears are forming in her eyes.";
+ mes "[Milly]";
+ mes "\"I guess they were right, you're not any great hero! I'll give it to Kfahr instead!\"";
+ next;
+ mes "\"Please keep on traveling so I don't have to see you around here. It makes me sad to see you, every time I do I'll remember how wrong I was about you.\"";
+ FLAGS = FLAGS | FLAG_DECLINED_BEANIEHAT;
+ goto L_close;
+
+L_TooMany:
+ mes "[Milly]";
+ mes "\"You don't have any space left to carry it, go put some stuff in the storage and come back!\"";
+ goto L_close;
+
+L_FinishedGood:
+ mes "[Milly]";
+ mes "\"Hi there friend, my hero!\"";
+ next;
+ callsub S_InspectorMaybe;
+
+ mes "\"Wear the copter beany cap in good health, mana and wealth! See you around!\"";
+ goto L_close;
+
+L_FinishedBad:
+ mes "[Milly]";
+ mes "\"Oh, it's you. I suppose you're here to make fun of my hat again.\"";
+ next;
+ callsub S_InspectorMaybe;
+ mes "\"Won't you continue your travels soon?\"";
+ menu
+ "That's what I'm going to do.", L_Next,
+ "I'm really sorry. Of course I want your hat!", L_Apologize;
+
+L_Next:
+ mes "Milly looks away sadly.";
+ goto L_close;
+
+L_Apologize:
+ getinventorylist;
+ if (@inventorylist_count == 100 || (checkweight("BeanieCopter", 1) == 0))
+ goto L_TooMany;
+ getitem "BeanieCopter", 1;
+ FLAGS = FLAGS | FLAG_GOT_BEANIEHAT;
+ FLAGS = FLAGS & ~FLAG_DECLINED_BEANIEHAT;
+
+ mes "Milly looks surprised.";
+ next;
+ mes "[Milly]";
+ mes "\"Oh, I... uh, thank you! I knew it! I knew such a heroic person as you can't be that mean.\"";
+ goto L_close;
+
+L_close:
+ @got_boneknife = 0;
+ @got_setzer = 0;
+ @saved_rossy = 0;
+ @saved_cindy = 0;
+ @inspector = 0;
+ close;
+
+S_InspectorMaybe:
+ if (@inspector != 1)
+ goto L_Return;
+ menu
+ "Have you seen anything strange lately?", L_NohMask_Strange,
+ "Do you know anything about the recent robberies?", L_NohMask_Robbery,
+ "Hello.", L_Return;
+
+L_NohMask_Strange:
+ mes "[Milly]";
+ mes "\"I haven't seen anything strange.\"";
+ next;
+ goto L_Return;
+
+L_NohMask_Robbery:
+ mes "[Milly]";
+ mes "\"No, sorry.\"";
+ next;
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+009-1,82,41,0 script MillyDebugHelper NPC114,{
+ mes "You can set certain quests as finished or not finished. What would you like to do?";
+ menu
+ "Bone Knife Quest done.", L_DBoneKnife,
+ "Rossy Quest done.", L_DRossy,
+ "Cindy Quest done.", L_DCindy,
+ "Setzer Quest done.", L_DSetzer,
+ "Gain 5000 Boss Points.", L_DBossPoints,
+ "Bone Knife and Setzer Quest not done.", L_NBoneKnife,
+ "Rossy Quest not done.", L_NRossy,
+ "Cindy Quest not done.", L_NCindy,
+ "Setzer Quest not done.", L_NSetzer,
+ "Remove all Boss Points.", L_NBossPoints,
+ "Nothing.", L_close;
+
+L_DBoneKnife:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(NIBBLE_2_MASK)) | (4 << NIBBLE_2_SHIFT);
+ mes "Bone Knife quest set to completed.";
+ close;
+
+L_DSetzer:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(NIBBLE_2_MASK)) | (4 << NIBBLE_2_SHIFT);
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(NIBBLE_3_MASK)) | (8 << NIBBLE_3_SHIFT);
+ mes "Setzer quest set to completed. This includes the Bone Knife quest.";
+ close;
+
+L_DRossy:
+ FLAGS = FLAGS | FLAG_ROSSI_COMPLETED;
+ mes "Rossy quest set to completed.";
+ close;
+
+L_DCindy:
+ QL_CINDY = 4;
+ mes "Cindy quest set to completed.";
+ close;
+
+L_DBossPoints:
+ BOSS_POINTS = 5000;
+ mes "Boss Points set to 5000.";
+ close;
+
+L_NBoneKnife:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(NIBBLE_2_MASK)) | (0 << NIBBLE_2_SHIFT);
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(NIBBLE_3_MASK)) | (0 << NIBBLE_3_SHIFT);
+ mes "Bone Knife and Setzer quest set to not completed.";
+ close;
+
+L_NSetzer:
+ QUEST_Forestbow_state = (QUEST_Forestbow_state & ~(NIBBLE_3_MASK)) | (0 << NIBBLE_3_SHIFT);
+ mes "Bone Knife and Setzer quest set to not completed.";
+ close;
+
+L_NRossy:
+ FLAGS = FLAGS & ~FLAG_ROSSI_COMPLETED;
+ mes "Rossy quest set to not completed.";
+ close;
+
+L_NCindy:
+ QL_CINDY = 0;
+ mes "Cindy quest set to not completed.";
+ close;
+
+L_NBossPoints:
+ BOSS_POINTS = 0;
+ mes "Boss Points set to 0.";
+ close;
+
+L_close:
+ close;
+
+OnInit:
+ if (!debug)
+ disablenpc "MillyDebugHelper";
+ end;
+}
diff --git a/npc/009-1/old_man.txt b/npc/009-1/old_man.txt
new file mode 100755
index 00000000..96b19a39
--- /dev/null
+++ b/npc/009-1/old_man.txt
@@ -0,0 +1,38 @@
+
+009-1,85,51,0 script Old Man NPC159,{
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ mes "[Old Man]";
+ mes "\"Don't let those monsters get to you.\"";
+ next;
+ if (@inspector == 1) goto L_Ask;
+ if (@inspector == 6) goto L_Accuse;
+ goto L_close;
+
+L_Ask:
+ menu
+ "Have you seen anything strange lately?", L_Ask_Nothing,
+ "Do you know anything about the recent robberies?", L_Ask_Nothing,
+ "I won't, thank you.", L_close;
+
+L_Ask_Nothing:
+ mes "[Old Man]";
+ mes "\"I'm sorry, but I didn't see anything. You should ask my old woman.\"";
+ goto L_close;
+
+L_Accuse:
+ menu
+ "The leader of the troupe said you hung around them a lot while they were in town.", L_Accuse_Respond,
+ "I won't, thank you.", L_close;
+
+L_Accuse_Respond:
+ mes "[Old Man]";
+ mes "\"Yes, I hung around the theater a lot. I was an actor when I was younger. But I wasn't there that night. Me and the wife were at home all night.\"";
+ @inspector = 7;
+ QUEST_Hurnscald = (QUEST_Hurnscald & ~(NIBBLE_3_MASK)) | (@inspector << NIBBLE_3_SHIFT);
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+}
diff --git a/npc/009-1/old_woman.txt b/npc/009-1/old_woman.txt
new file mode 100755
index 00000000..441b425a
--- /dev/null
+++ b/npc/009-1/old_woman.txt
@@ -0,0 +1,83 @@
+
+009-1,29,43,0 script Old Woman NPC154,{
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ if (BaseLevel < 40) goto L_Lower;
+
+ mes "[Old Woman]";
+ mes "\"Hello deary.\"";
+ if ((@inspector >= 1 && @inspector <= 7) || @inspector == 9)
+ goto L_NohMask;
+ close;
+
+L_Lower:
+ mes "[Old Woman]";
+ mes "\"Watch out for these flowers. They don't like to be messed with.\"";
+ if ((@inspector >= 1 && @inspector <= 7) || @inspector == 9)
+ goto L_NohMask;
+ close;
+
+L_NohMask:
+ next;
+ if (@inspector == 7)
+ goto L_NohMask_Alibi;
+ callfunc "ProcessEquip";
+ if (@torsoC == cDarkBlue && @legsC == cDarkBlue)
+ goto L_NohMask_Fake;
+ if (@inspector >= 3 && @inspector <= 6)
+ goto L_close;
+ menu
+ "Have you seen anything strange lately?", L_NohMask_FirstAsk,
+ "Do you know anything about the recent robberies?", L_NohMask_FirstAsk,
+ "Hello", L_close;
+
+L_NohMask_FirstAsk:
+ mes "[Old Woman]";
+ mes "\"Yes, but I'm only talking to the inspector himself!\"";
+ if (@inspector != 1)
+ goto L_close;
+ @inspector = 2;
+ callsub S_Update_Mask;
+ goto L_close;
+
+L_NohMask_Alibi:
+ menu
+ "Was your husband with you at home all night the last night that the troupe was in town?", L_Next;
+
+L_Next:
+ mes "[Old Woman]";
+ mes "\"Yes, we were both at home all night.\"";
+ @inspector = 8;
+ callsub S_Update_Mask;
+ goto L_close;
+
+L_NohMask_Fake:
+ if (@inspector == 9) goto L_NohMask_Fake_Satchel;
+ if (@inspector >= 3 && @inspector <= 6) goto L_NohMask_Filler;
+
+ mes "[Old Woman]";
+ mes "\"I saw someone sneaking around town wearing a theater mask. It looked like one of the masks used by the troupe that was in town recently.\"";
+ @inspector = 3;
+ callsub S_Update_Mask;
+ goto L_close;
+
+L_NohMask_Filler:
+ mes "[Old Woman]";
+ mes "\"I hope you catch that naughty person!\"";
+ goto L_close;
+
+L_NohMask_Fake_Satchel:
+ mes "[Old Woman]";
+ mes "\"I've remembered something else. The night the troupe left, I saw someone with a theater mask take a large satchel out of town. He was heading north.\"";
+ @inspector = 10;
+ callsub S_Update_Mask;
+ 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-1/sabine.txt b/npc/009-1/sabine.txt
new file mode 100755
index 00000000..335d75e6
--- /dev/null
+++ b/npc/009-1/sabine.txt
@@ -0,0 +1,29 @@
+
+009-1,88,27,0 script Sabine NPC106,{
+ @inspector = ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+
+ mes "[Sabine]";
+ mes "\"Isn't this place pretty? I love hanging out here!\"";
+ next;
+ if (@inspector != 1)
+ goto L_close;
+
+ menu
+ "Have you seen anything strange lately?", L_NohMask_Strange,
+ "Do you know anything about the recent robberies?", L_NohMask_Robbery,
+ "Yes, it is.", L_close;
+
+L_NohMask_Strange:
+ mes "[Sabine]";
+ mes "\"I haven't seen anything strange.\"";
+ goto L_close;
+
+L_NohMask_Robbery:
+ mes "[Sabine]";
+ mes "\"No, sorry.\"";
+ goto L_close;
+
+L_close:
+ @inspector = 0;
+ close;
+}
diff --git a/npc/009-1/soul-menhir.txt b/npc/009-1/soul-menhir.txt
index 76c5be11..d197a5f0 100644..100755
--- a/npc/009-1/soul-menhir.txt
+++ b/npc/009-1/soul-menhir.txt
@@ -1,7 +1,15 @@
-// The Mana World scripts.
-// Description:
-// place of power, mana refills faster when sitting nearby
-
-// Soul Menhir#town_rate_dist_timer
-009-1,51,173,0 duplicate(Soul Menhir) Soul Menhir#moor_1_7_300 NPC_NO_SPRITE
+009-1,53,40,0 script Soul Menhir#hurnscald NPC344,{
+ @map$ = "009-1";
+ setarray @Xs, 52, 53, 54, 52, 54, 52, 54;
+ setarray @Ys, 39, 39, 39, 40, 40, 41, 41;
+ @x = 0;
+ @y = 0;
+ callfunc "SoulMenhir";
+ @map$ = "";
+ cleararray @Xs[0], 0, 7;
+ cleararray @Ys[0], 0, 7;
+ @x = 0;
+ @y = 0;
+ close;
+}
diff --git a/npc/009-1/thurstan.txt b/npc/009-1/thurstan.txt
deleted file mode 100644
index 3eb8fbdc..00000000
--- a/npc/009-1/thurstan.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-// Evol scripts.
-// Author:
-// Micksha
-// Description:
-// Thurstan, a headless man (because Golbenez, for sure)
-// THIS IS A PLACEHOLDER!
-
-009-1,84,169,0 script Thurstan NPC_THURSTAN,{
- mesc l("You see a man, propped up against the foot of the tree.");
- mesc l("In his hand, he is holding what you assume to be his own head.");
- next;
- mesc l("You jump back a bit, startled, as the head starts talking to you!");
- mesc l("It's a little strange watching him talk, but it's better than looking at what's left of his neck.");
- next;
- mesn;
- mesq l("Greetings! Do you have any duck tape?"); // Perhaps duct tape?
- close;
-
-OnInit:
- .distance = 4;
- end;
-}
diff --git a/npc/009-1/water_pump.txt b/npc/009-1/water_pump.txt
new file mode 100755
index 00000000..eca2e8be
--- /dev/null
+++ b/npc/009-1/water_pump.txt
@@ -0,0 +1,5 @@
+
+009-1,76,33,0 script Water Pump NPC400,{
+ callfunc "WaterBottle";
+ end;
+}
diff --git a/npc/009-1/wateranimation.txt b/npc/009-1/wateranimation.txt
deleted file mode 100644
index d6912af7..00000000
--- a/npc/009-1/wateranimation.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-// The Mana World scripts.
-// Description:
-// Water animations, splash, fishes, etc...
-
-009-1,109,56,0 duplicate(#fish_river) #swamp_fish01 NPC_WATER_SPLASH
-009-1,114,74,0 duplicate(#fish_river) #swamp_fish02 NPC_WATER_SPLASH
-009-1,97,82,0 duplicate(#fish_river) #swamp_fish03 NPC_WATER_SPLASH
-009-1,97,74,0 duplicate(#fish_river) #swamp_fish04 NPC_WATER_SPLASH
-009-1,110,65,0 duplicate(#fish_river) #swamp_fish05 NPC_WATER_SPLASH
-