From 11dd6fe5569be003d6582319594c315bac193d21 Mon Sep 17 00:00:00 2001 From: Micksha Date: Wed, 24 Oct 2018 21:03:20 +0200 Subject: Add Gumis scripts - delete placeholders. Disable debugs. --- db/constants.conf | 5 + db/re/item_db.conf | 81 +++++++++ maps/re/008-1.mcache | Bin 6866 -> 6870 bytes npc/001-1/_import.txt | 1 + npc/001-3-0/_import.txt | 1 + npc/008-1/_import.txt | 8 +- npc/008-1/hinnak.txt | 4 +- npc/008-1/jack.txt | 314 ++++++++++++++++++++++++++++++++++ npc/008-1/lady.txt | 20 --- npc/008-1/lumberjack.txt | 19 -- npc/008-1/mikhail.txt | 131 ++++++++++++++ npc/008-1/milly.txt | 108 ++++++++++-- npc/008-1/old-man.txt | 90 ++++++++++ npc/008-1/old-woman.txt | 137 +++++++++++++++ npc/008-1/sabine.txt | 64 +++++++ npc/008-1/soul-menhir.txt | 58 +++++++ npc/008-2-1/inspector.txt | 188 +++++++++++++++++++- npc/008-2-12/nurse.txt | 101 +++++++++-- npc/008-2-14/doctor.txt | 80 +++++++-- npc/008-2-18/malik.txt | 64 +++++-- npc/008-2-19/_import.txt | 1 + npc/008-2-19/books.txt | 60 +++++++ npc/008-2-2/_import.txt | 4 +- npc/008-2-2/ledmitz.txt | 55 ++++++ npc/008-2-2/micksha.txt | 20 --- npc/008-2-2/note.txt | 28 +++ npc/008-2-2/roamingo.txt | 20 --- npc/008-2-24/_import.txt | 1 + npc/008-2-24/troupe-leader.txt | 119 +++++++++++++ npc/008-2-4/_import.txt | 1 + npc/008-2-4/bernard.txt | 230 +++++++++++++++++++++++++ npc/008-2-6/alan.txt | 299 +++++++++++++++++++++++++++++++- npc/008-2-8/_import.txt | 2 +- npc/008-2-8/apprentice.txt | 20 --- npc/008-2-8/macgowan.txt | 24 +++ npc/008-2-8/nicholas.txt | 25 ++- npc/placeholder/alan.txt | 323 ---------------------------------- npc/placeholder/bernard.txt | 230 ------------------------- npc/placeholder/books.txt | 60 ------- npc/placeholder/doctor.txt | 80 --------- npc/placeholder/hinnak.txt | 352 -------------------------------------- npc/placeholder/inspector.txt | 190 -------------------- npc/placeholder/jack.txt | 313 --------------------------------- npc/placeholder/ledmitz.txt | 55 ------ npc/placeholder/macgowan.txt | 21 --- npc/placeholder/malek.txt | 65 ------- npc/placeholder/mikhail.txt | 131 -------------- npc/placeholder/milly.txt | 109 ------------ npc/placeholder/nicholas.txt | 26 --- npc/placeholder/note.txt | 28 --- npc/placeholder/nurse.txt | 101 ----------- npc/placeholder/old-man.txt | 90 ---------- npc/placeholder/old-woman.txt | 137 --------------- npc/placeholder/sabine.txt | 64 ------- npc/placeholder/soul-menhir.txt | 58 ------- npc/placeholder/troupe-leader.txt | 119 ------------- npc/scripts.conf | 20 --- 57 files changed, 2212 insertions(+), 2743 deletions(-) create mode 100644 npc/008-1/jack.txt delete mode 100644 npc/008-1/lady.txt delete mode 100644 npc/008-1/lumberjack.txt create mode 100644 npc/008-1/mikhail.txt create mode 100644 npc/008-1/old-man.txt create mode 100644 npc/008-1/old-woman.txt create mode 100644 npc/008-1/sabine.txt create mode 100644 npc/008-1/soul-menhir.txt create mode 100644 npc/008-2-19/books.txt create mode 100644 npc/008-2-2/ledmitz.txt delete mode 100644 npc/008-2-2/micksha.txt create mode 100644 npc/008-2-2/note.txt delete mode 100644 npc/008-2-2/roamingo.txt create mode 100644 npc/008-2-24/troupe-leader.txt create mode 100644 npc/008-2-4/bernard.txt delete mode 100644 npc/008-2-8/apprentice.txt create mode 100644 npc/008-2-8/macgowan.txt delete mode 100644 npc/placeholder/alan.txt delete mode 100644 npc/placeholder/bernard.txt delete mode 100644 npc/placeholder/books.txt delete mode 100644 npc/placeholder/doctor.txt delete mode 100644 npc/placeholder/hinnak.txt delete mode 100644 npc/placeholder/inspector.txt delete mode 100644 npc/placeholder/jack.txt delete mode 100644 npc/placeholder/ledmitz.txt delete mode 100644 npc/placeholder/macgowan.txt delete mode 100644 npc/placeholder/malek.txt delete mode 100644 npc/placeholder/mikhail.txt delete mode 100644 npc/placeholder/milly.txt delete mode 100644 npc/placeholder/nicholas.txt delete mode 100644 npc/placeholder/note.txt delete mode 100644 npc/placeholder/nurse.txt delete mode 100644 npc/placeholder/old-man.txt delete mode 100644 npc/placeholder/old-woman.txt delete mode 100644 npc/placeholder/sabine.txt delete mode 100644 npc/placeholder/soul-menhir.txt delete mode 100644 npc/placeholder/troupe-leader.txt diff --git a/db/constants.conf b/db/constants.conf index 043ce489..ab0f14cf 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -4062,6 +4062,11 @@ constants_db: { NPC_CAUL: 179 NPC_MALIK: 180 NPC_SNARFLES: 181 + NPC_OLD_MAN_HURNS: 182 + NPC_BERNARD: 183 + NPC_SABINE: 184 + NPC_MIKHAIL: 185 + NPC_TROUPE_LEADER: 186 NPC_CONFUSED_TREE: 400 NPC_ALIGE: 401 diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 7428287d..560cc22b 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -1298,6 +1298,60 @@ item_db: ( doevent "rand_sc_heal::OnUse"; "> }, +{ + Id: 564 + AegisName: "RoastedMaggot" + Name: "Roasted Maggot" + Type: "IT_HEALING" + Buy: 500 + Sell: 50 + Weight: 25 + Job: { + All: true + } + Gender: "SEX_ANY" + Refine: false + ViewSprite: 564 + BindOnEquip: false + BuyingStore: true + Delay: 750 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 100; + @max = 250; + @delay = 25; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> +}, +{ + Id: 565 + AegisName: "CherryCake" + Name: "Cherry Cake" + Type: "IT_HEALING" + Buy: 800 + Sell: 75 + Weight: 35 + Job: { + All: true + } + Gender: "SEX_ANY" + Refine: false + ViewSprite: 564 + BindOnEquip: false + BuyingStore: true + Delay: 450 + Sprite: 0 + UseEffect: "EFFECT_HEAL" + Script: <" + @min = 180; + @max = 360; + @delay = 50; + @type = 1; + doevent "rand_sc_heal::OnUse"; + "> +}, { Id: 700 AegisName: "SmallTentacles" @@ -3880,6 +3934,33 @@ item_db: ( Delay: 0 Sprite: 0 }, +{ + Id: 2914 + AegisName: "NohMask" + Name: "Noh Mask" + Type: "IT_ARMOR" + Buy: 25000 + Sell: 5200 + Weight: 150 + Atk: 0 + Matk: 0 + Def: 20 + Range: 0 + Slots: 0 + Job: { + All: true + } + Gender: "SEX_ANY" + Loc: "EQP_HEAD_TOP" + WeaponLv: 0 + EquipLv: 15 + Refine: false + ViewSprite: 2914 + BindOnEquip: false + BuyingStore: true + Delay: 0 + Sprite: 0 +}, { Id: 3200 AegisName: "Shemagh" diff --git a/maps/re/008-1.mcache b/maps/re/008-1.mcache index e8534b08..8672702d 100644 Binary files a/maps/re/008-1.mcache and b/maps/re/008-1.mcache differ diff --git a/npc/001-1/_import.txt b/npc/001-1/_import.txt index eb522c73..a8cfa7d7 100644 --- a/npc/001-1/_import.txt +++ b/npc/001-1/_import.txt @@ -32,6 +32,7 @@ "npc/001-1/salem.txt", "npc/001-1/shop.txt", "npc/001-1/sign.txt", +"npc/001-1/sophialla.txt", "npc/001-1/taree.txt", "npc/001-1/treeleaf.txt", "npc/001-1/trees.txt", diff --git a/npc/001-3-0/_import.txt b/npc/001-3-0/_import.txt index 320f28ce..5ead6439 100644 --- a/npc/001-3-0/_import.txt +++ b/npc/001-3-0/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-3-0/_mobs.txt", "npc/001-3-0/_warps.txt", +"npc/001-3-0/mundane.txt", diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt index 12348cb0..31bb5966 100644 --- a/npc/008-1/_import.txt +++ b/npc/008-1/_import.txt @@ -6,11 +6,15 @@ "npc/008-1/banu.txt", "npc/008-1/confused-tree.txt", "npc/008-1/hinnak.txt", -"npc/008-1/lady.txt", -"npc/008-1/lumberjack.txt", +"npc/008-1/jack.txt", "npc/008-1/mapflags.txt", +"npc/008-1/mikhail.txt", "npc/008-1/milly.txt", +"npc/008-1/old-man.txt", +"npc/008-1/old-woman.txt", "npc/008-1/oscar.txt", +"npc/008-1/sabine.txt", "npc/008-1/snarfles.txt", +"npc/008-1/soul-menhir.txt", "npc/008-1/voltain.txt", "npc/008-1/wateranimation.txt", diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt index 13f06be7..08b6242a 100644 --- a/npc/008-1/hinnak.txt +++ b/npc/008-1/hinnak.txt @@ -13,7 +13,7 @@ 008-1,270,74,0 script Hinnak#008-1 NPC_HINNAK,{ - if (BaseLevel < .min_level) + if (BaseLevel < .min_level) { npctalk3 generic(1 | 16 | 64); end; @@ -346,7 +346,7 @@ OnInit: // REMOVE THIS CODE WHEN THIS // // NPC IS NO LONGER A WIP ////// //////////////////////////////// -if (!debug) disablenpc(.name$); +//if (!debug) disablenpc(.name$); ///////// UNFINISHED /////////// end; diff --git a/npc/008-1/jack.txt b/npc/008-1/jack.txt new file mode 100644 index 00000000..d8f1ff2d --- /dev/null +++ b/npc/008-1/jack.txt @@ -0,0 +1,314 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (forest bow): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - alan wants to ask jack +// [1] 3 - jack explained problem +// [1] 4 - alan asks to find wood +// [1] 5 - found perfect wood +// [1] 6 - got the bow +// [2] unused +// [3] unused +// [t] unused +// Quest states (wooden shield): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - jack proposes shield +// [1] 3 - player accepted quest +// [1] 4 - got the shield +// [2] unused +// [3] unused +// [t] unused +// Description: +// Jack Lumber, the handsome lumberjack + + +008-1,241,116,0 script Jack NPC_LUMBERJACK,{ + + function bow_intro { + speech(4, + l("Why not?!"), + l("I value my life, that's why!")); + + selectd(l("What do you mean?")); + + speech(4, + l("A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest."), + l("These twigleafs are the trees that give me the living wood you speak of."), // XXX: were Log Heads named "Twigleaf" at some point in the past? + l("I was just chopping away with my axe, and guess what happened?"), + l("One of its branches hit me!"), + l("At first, I thought it fell down or the wind blew it, but it hurt!"), + l("After I shook it off and struck the tree again with my axe, another branch hit me!"), + l("I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore."), + l("Even after all that though, I still can't believe what happened next.")); + + selectd(l("What happened?")); + + speech(4, + l("You'll think I'm insane if I tell you...")); + + selectd(l("I won't. I promise.")); + + speech(4, + l("Alright, well..."), + l("After I chopped off a few branches, the whole tree started to move!"), + l("Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk."), + l("The whole tree CAME TO LIFE! It was mad!")); + + selectd(l("Did you run away?"), l("Did you fight it?")); + + speech(4, + l("I fought it, of course!"), + l("I took my axe and attacked the beast!"), + l("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*."), // XXX: that's kinda dirty imho... maybe we could use the narrator? + l("But I didn't give up!"), + l("I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground, motionless.")); + + selectd(l("So you beat the monster? Then why are you so scared?")); + + speech(4, + l("Well, I was exhausted and had to rest."), + l("A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!")); + + selectd(l("Did you fight them too?")); + + speech(4, + l("Are you crazy?"), + l("I barely destroyed one of those beasts."), + l("I was in no shape to fight again!"), + l("I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs, Ha!")); + + selectd(l("So, I guess you aren't chopping down trees anymore?")); + + speech(4, + l("I still do; it's my job."), + l("But I'll no longer chop those twigleafs, I'll tell you that."), + l("I know the bow master wants some twigleaf wood, but I don't care."), + l("I won't risk MY life for a few gold pieces!"), + l("If you really want to, just go to the southwest, but I can't help you."), + l("I won't go there ever again.")); + + selectd(l("Southwest you say? OK, thank you.")); + + speech(l("Don't say I didn't warn you!")); + + // What a huge text wall, I feel sorry for the players + + close2; + setq(.quest_bow, 3); + end; + } + + function bow_good_luck { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Good luck hunting those tree monsters – you'll need it.")); + + selectd(l("Have you seen anything that might be connected to the recent robberies in town?")); + + speech(l("Sorry, no.")); + close; + } + + npctalk3(l("Good luck hunting those tree monsters – you'll need it.")); + end; + } + + function shield_intro { + speech(4, + l("I have an idea."), + l("What would you say about a new shield?")); + + setq(.quest_shield, 2); + + selectd( + l("No thanks."), + l("Yes, please!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 2: + speech( + l("All I need is %d %s.", .logs_amount, getitemlink(.logs_item)), + l("This needn't be high quality wood; pretty much any log you can find should work."), + l("Oh, and I'll also need %s E for other materials.", format_number(.shield_cost))); + + close2; + setq(.quest_shield, 3); + end; + case 3: speech(l("Sorry, no.")); close; + } + } + + function bow_congrats { + speech(4, + l("You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?")); + + selectd( + l("I couldn't afford the bow, though..."), + l("No, I'm still looking."), + l("Yes, I've got the Forest bow now."), + l("I'm a melee warrior, I don't need bows."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 3: + if (getq(.quest_bow) <= 5) + { + speech(4, + l("Hrmph."), + l("I'm someone who respects those speaking the truth.")); + } + // fallthrough + case 1: + case 4: + speech(4, + l("You no doubt remember how I struggled with those beasts, fighting for my life."), + l("Scared me, those seven-branched little stumps did!"), + l("Never since that day have I strayed near them, and yet there you are, cutting them down one by one."), + l("I'm proud of you – to dare to fight those trunks is admirable indeed."), + l("You're as strong as if you were my own child!")); + + shield_intro; + break; + case 2: speech(l("You should go talk to Alan again.")); close; + case 5: speech(l("Sorry, no.")); close; + } + } + + function shield_make { + speech(4, + l("Do you have the %d %s and %s E for the shield?", + .logs_amount, getitemlink(.logs_item), format_number(.shield_cost))); + + selectd( + rif(countitem(.logs_item) >= .logs_amount && Zeny >= .shield_cost, + l("Here it is.")), + l("I'll come back later.")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Have a seat.")); + + narrator(4, + l("Jack saws the logs into pieces and then sands them until they are smooth to the touch."), + l("Applying some strong-smelling liquid, he tans them to a darker hue."), + l("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."), + l("Meanwhile, the sun has dried the other pieces."), + l("Jack places them next to each other, adds a frame, and nails everything together."), + l("The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments."), + l("Finally, he hands the shield to you.")); + + if (checkweight(.shield_item, 1) != true) + { + speech( + l("It seems you can't carry the %s.", getitemlink(.shield_item)), + l("Come back when you do.")); + close; + } + + if (Zeny < .shield_cost || countitem(.logs_item) < .logs_amount) + close; // double-check + + setq(.quest_shield, 4); + delitem(.logs_item, .logs_amount); + getitem(.shield_item, 1); + Zeny -= .shield_cost; + getexp(.shield_exp, 0); + + speech( + l("Enjoy your new shield!")); + + close; + } + + function wood_daily { + speech(4, + l("I hope that my shield will serve you well!")); + + selectd( + l("Me too."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + } + + closeclientdialog(); // TODO: daily quest (needs the generic daily quest script) + close; + } + + // OnTalk: + switch (getq(.quest_shield)) + { + case 2: shield_intro; break; + case 3: shield_make; break; + case 4: wood_daily; break; + } + + switch (getq(.quest_bow)) + { + case 3: + case 4: bow_good_luck; break; + case 5: + case 6: bow_congrats; break; + } + + // initial intro + { + speech(4, + l("Hello there!"), + l("My name is Jack Lumber, the enemy of all trees."), + l("If you need some firewood, just let me know.")); + + selectd( + l("I'll keep that in mind."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?")), + rif(getq(.quest_bow) == 2, l("I heard you aren't delivering any more living wood. Why not?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + case 3: bow_intro; break; + } + + } + + closeclientdialog(); + close; + +OnInit: + .logs_item = RawLog; + .logs_amount = 40; // XXX: maybe nlogn? + .shield_cost = 5000; // XXX: maybe nlogn? + .shield_exp = 2500; + .shield_item = WoodenShield; + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/lady.txt b/npc/008-1/lady.txt deleted file mode 100644 index 8d7869eb..00000000 --- a/npc/008-1/lady.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Old Lady in the flower field. -// THIS IS A PLACEHOLDER! - -008-1,231,114,0 script Lady#008-1 NPC_OLD_LADY,{ - speech - l("Oh, good day to you."), - l("Aren't these flowers lovely? I wish I could stay here all day."), - lg("I wish you the best, see you around."); - - close; - -OnInit: - .sex = G_FEMALE; - .distance = 2; - end; -} diff --git a/npc/008-1/lumberjack.txt b/npc/008-1/lumberjack.txt deleted file mode 100644 index c158e5a6..00000000 --- a/npc/008-1/lumberjack.txt +++ /dev/null @@ -1,19 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// The Legendary Lumberjack. - -008-1,241,116,0 script Lumberjack NPC_LUMBERJACK,{ - speech - l("Oh hey!"), - lg("If you feel bored or anxious, you can always pixel an axe. Wait, what does that even mean?"); - l("Anyhow, it's better than running around in circles doing nothing."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-1/mikhail.txt b/npc/008-1/mikhail.txt new file mode 100644 index 00000000..3e442499 --- /dev/null +++ b/npc/008-1/mikhail.txt @@ -0,0 +1,131 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// takes part in the slime soup quest (Bernard) + +008-1,298,95,0 script Mikhail NPC_MIKHAIL,{ + + function soup_scared { + speech 4, + l("Hello..."), + l("I'm supposed to be helping Bernard from the Inn but..."); + + narrator 4, + l("His eyes grow wide"); + + speech 4, + l("Eeekkk another one."); + + narrator + l("It seems that the boy would like to say more, but seems too terrified at the moment."), + l("Maybe you should help someone else first, so that he sees your intentions are good."); + + close; + } + + function soup_intro2 { + speech 4, + l("Bernard sent me to get %d %s from the %s in the fields, but they scare me so bad!", + .third_item_qty, getitemlink(.third_item), getmonsterlink(.third_item_mob)), + l("You look like a nice person."), + l("Would you go get them for me?"); + + selectd + l("Of course, I'll go get them for you."); + + speech + l("Thank you so much!"), + l("I'll wait for you here."); + + setq .quest, 6; + close; + } + + function soup_reminder_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("It doesn't look like you have them all..."); + close; + } + + function soup_reward_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("Ooh!"), + l("Thank you so much!"), + l("I can get back to Bernard now!"); + + if (countitem(.third_item) < .third_item_qty) + close; // double-check + + delitem .third_item, .third_item_qty; + setq .quest, 7; + getexp .third_reward_exp, 0; + close; + } + + function soup_thanks_slime2 { + speech + l("Thanks again for helping me!") + " %%Q"; + + close; + } + + switch(getq(.quest)) + { + + case 0: + case 1: + case 2: + case 3: + case 4: soup_scared; break; + case 5: soup_intro2; break; + case 6: + if (countitem(.third_item) < .third_item_qty) + soup_reminder_slime2; + else + soup_reward_slime2; + break; + default: soup_thanks_slime2; + } + + closeclientdialog(); + close; + +OnInit: + .third_item = MaggotSlime; + .third_item_qty = 5; + .third_item_mob = Maggot; + + .third_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/milly.txt b/npc/008-1/milly.txt index 93daaa9a..0ea17a1c 100644 --- a/npc/008-1/milly.txt +++ b/npc/008-1/milly.txt @@ -1,21 +1,109 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states (inspector): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// Little Milly, looking for a new hero. -// THIS IS A PLACEHOLDER! +// robberies in hurnscald -008-1,282,114,0 script Milly#008-1 NPC_GIRL_MILLY,{ - speech - l("Oh, hi."), - l("Are you a hero? For sure not such a great hero than Kfahr!"), - l("If you could prove it, I would give you my Beanie Copter, but unfortunately someone threw it away."), - lg("My beautiful Beanie Copter!"); +008-1,282,114,0 script Milly NPC_GIRL_MILLY,{ + + // TODO: make the actual beanie copter quest after those are finished: + // [X] Inspector quest + // [ ] Bone knife quest + // [ ] Setzer quest + // [ ] Rossy quest + // [ ] Cindy quest + + .@q_inspector = getq(.quest_inspector); + + speech(4, + l("Hello traveler, welcome to Hurnscald."), + l("Have you met Kfahr yet?"), + l("He is the greatest hero that ever walked the land of Hurnscald!")); + + selectd( + l("Hi! No, I haven't seen him yet."), + l("Where can I find him?"), + l("Mh, I don't care for heroes."), + l("Hello, yes I have met him."), + rif(.@q_inspector == 2, l("Have you seen anything strange lately?")), + rif(.@q_inspector == 2, l("Do you know anything about the recent robberies?"))); + + switch (@menu) + { + case 3: + speech(4, + l("What?"), + l("Surely you do not appreciate what a hero he is!"), + l("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."), // XXX: this sentence seems too complicated to come from a child's mouth + l("Put on your thinking cap and be propelled into high adventure!"), + l("Go to Kfahr, and listen to his stories."), + l("You can't have met him."), + l("No one who has met him would say such silly things.")); + // fallthrough + + case 1: + speech(4, + l("I highly recommend you seek him out!")); + // fallthrough + + case 2: + speech( + l("He is a regular at the inn, located in the north-west part of town."), + l("If you are lucky he might tell you a story about his adventures.")); + break; + + case 4: + speech( + l("Oh, I hope you stayed and listened to his stories about his adventures.")); + break; + + case 5: + speech( + l("I haven't seen anything strange.")); + break; + + case 6: + speech( + l("No, sorry.")); + break; + } close; OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; // TODO: change this to the milly quest debug when it exists .sex = G_FEMALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-1/old-man.txt b/npc/008-1/old-man.txt new file mode 100644 index 00000000..c2004a7d --- /dev/null +++ b/npc/008-1/old-man.txt @@ -0,0 +1,90 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,290,139,0 script Old Man NPC_OLD_MAN_HURNS,{ + + function oldman_ask { + speech(4, + l("Hi there, need something?")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("I'm sorry, but I didn't see anything."), + l("You should ask my old woman.")); + close; + } + + function oldman_accuse { + speech(4, + l("Found anything new?")); + + selectd( + l("The leader of the troupe said you hung around them a lot while they were in town.")); + + speech( + l("Yes, I hung around the theater a lot."), + l("I was an actor when I was younger."), + l("But I wasn't there that night."), + l("Me and the wife were at home all night.")); + + close2; + setq(.quest_inspector, 8); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: oldman_ask; break; + case 7: oldman_accuse; break; + } + + // initial intro + npctalk3(l("Don't let those monsters get to you.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/old-woman.txt b/npc/008-1/old-woman.txt new file mode 100644 index 00000000..c6ca467b --- /dev/null +++ b/npc/008-1/old-woman.txt @@ -0,0 +1,137 @@ +/// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// Old Lady in the flower field, Robberies in Hurnscald. + +008-1,231,114,0 script Old Woman NPC_OLD_LADY,{ + + function is_inspector { + return (getequipcardid(EQI_HEAD_MID, 0) == NavyBlueCottonDye /*&& + getequipcardid(EQI_HEAD_LOW, 0) == NavyBlueCottonDye*/); // TODO / FIXME: remove the /* */ whenever we have cotton pants + } + + function oldwoman_ask { + speech(4, + l("Hello deary.")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + .@q = getq(.quest_inspector); + + if (!is_inspector()) + { + speech(l("Yes, but I'm only talking to the inspector himself!")); + + close2; + if (.@q < 3) + setq(.quest_inspector, 3); + end; + } + + if (.@q == 2 || .@q == 3) + { + speech( + l("I saw someone sneaking around town wearing a theater mask."), + l("It looked like one of the masks used by the troupe that was in town recently.")); + + close2; + setq(.quest_inspector, 4); + } + + else if (.@q == 10) + { + speech( + l("I've remembered something else."), + l("The night the troupe left, I saw someone with a theater mask take a large satchel out of town."), + l("He was heading north.")); + + close2; + setq(.quest_inspector, 11); + } + + end; + } + + function oldwoman_alibi { + speech(4, + l("Hello deary.")); + + selectd( + l("Was your husband with you at home all night the last night that the troupe was in town?")); + + speech( + l("Yes, we were both at home all night.")); + + close2; + setq(.quest_inspector, 9); + end; + } + + function oldwoman_filler { + npctalk3(l("I hope you catch that naughty person!")); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: + case 3: oldwoman_ask; break; + case 4: + case 5: + case 6: + case 7: oldwoman_filler; break; + case 8: + case 9: oldwoman_alibi; break; + case 10: oldwoman_ask; break; + } + + // initial intro + if (BaseLevel < 40) + npctalk3(l("Watch out for these flowers. They don't like to be messed with.")); + else + npctalk3(l("Hello deary.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/sabine.txt b/npc/008-1/sabine.txt new file mode 100644 index 00000000..87026efb --- /dev/null +++ b/npc/008-1/sabine.txt @@ -0,0 +1,64 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,291,97,0 script Sabine NPC_SABINE,{ + + if (getq(.quest_inspector) != 2) + { + npctalk3(generic(1 | 16)); + end; + } + + speech(4, + l("Isn't this place pretty?"), + l("I love hanging out here!")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("No, sorry.")); + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/soul-menhir.txt b/npc/008-1/soul-menhir.txt new file mode 100644 index 00000000..dd1a6e38 --- /dev/null +++ b/npc/008-1/soul-menhir.txt @@ -0,0 +1,58 @@ +// Evol scripts. +// Author: +// gumi +// Description: +// place of power, mana refills faster when sitting nearby + +008-1,253,112,0 script Soul Menhir#hurnscald NPC_NO_SPRITE,{ + + end; + +OnRefill: + @menhir_lock = false; + getmapxy(.@map$, .@x, .@y, UNITTYPE_PC); + + if (.@map$ != .map$ || distance(.x, .y, .@x, .@y) > .refill_distance || + !(issit())) + end; + + heal(0, .refill_rate); + end; + + +OnTimer500: + .@count = getunits(BL_PC, .@units[0], false, .map$, (.x - .refill_distance), + (.y - .refill_distance), (.x + .refill_distance), (.y + .refill_distance)); + + for (.@i = 0; .@i < .@count; ++.@i) + { + if (.@units[.@i] < 0) continue; // pre-check, just in case + deltimer(.name$ + "::OnRefill", .@units[.@i]); + if (gettimer(TIMER_COUNT, .@units[.@i], .name$ + "::OnRefill") > 0 || + getvariableofpc(@menhir_lock, .@units[.@i])) { + continue; + } + set(getvariableofpc(@menhir_lock, .@units[.@i]), true); + addtimer(rand(.refill_timer), .name$ + "::OnRefill", .@units[.@i]); + } + + initnpctimer(); + end; + +OnInit: + + .refill_rate = 1; // number of SP to give every refill + .refill_distance = 7; // max distance + .refill_timer = 200; // wait rand(X) ms before refill + initnpctimer(); + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-1/inspector.txt b/npc/008-2-1/inspector.txt index 7bcc7cb0..725f5cbd 100644 --- a/npc/008-2-1/inspector.txt +++ b/npc/008-2-1/inspector.txt @@ -1,20 +1,190 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// The Inspector not willing to do his job. -// THIS IS A PLACEHOLDER! +// robberies in hurnscald -008-2-1,30,34,0 script Inspector#008-1 NPC_INSPECTOR,{ - speech - l("Oh hey!"), - l("Got a beer for me? No? Then I am too busy for your stupid problems."); - lg("Go away, and bring a beer next time you pass by."); +008-2-1,30,34,0 script Inspector NPC_INSPECTOR,{ + if (BaseLevel < .min_level) + { + npctalk3(l("I'm sorry, but I'm busy looking into this string of robberies.")); + end; + } + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: + speech(4, + l("Hmm... what to do.")); + narrator(4, + l("He looks up and into your face.")); + speech(4, + l("You look capable, will you help me solve these robberies?"), + l("I would go myself, but for some reason I'm a non-walking NPC.")); + + if (selectd("Yes", "No") == 2) { + closeclientdialog(); + close; + } + + speech( + l("Ok then."), + l("I'd like you to ask the villagers about the recent string of robberies.")); + + close2; + setq(.quest, 2); + end; + + case 2: + npctalk3(l("Please continue talking to the villagers.")); + end; + + case 3: + speech( + l("Hm..."), + l("I don't know if I trust her eyesight or memory."), + l("See if someone else knows anything.")); + close; + + case 4: + speech( + l("Someone in a theater mask, eh?"), + l("There was a traveling theater troupe in town recently, but they've moved on to Tulimshar."), + l("Please go talk to their leader about this.")); + + close2; + setq(.quest, 5); + end; + + case 5: + npctalk3(l("Please go talk to the leader of the traveling troupe about the theater mask.")); + end; + + case 6: + speech( + l("Hm... an old man?"), + l("Could you interrogate him for me?")); + + close2; + setq(.quest, 7); + end; + + case 7: + npctalk3(l("Have you talked with the old man yet?")); + end; + + case 8: + npctalk3(l("Can you verify that with his wife?")); + end; + + case 9: + speech( + l("Hm... then it couldn't be him."), + l("I'm not sure where to go from here, maybe you can find something else."), + l("Try talking to everyone again.")); + + close2; + setq(.quest, 10); + end; + + case 10: + npctalk3(l("Made any progress yet?")); + end; + + case 11: + npctalk3(l("Then go north and investigate!")); + end; + + case 12: + npctalk3(l("Did you look over the basement?")); + end; + + case 13: + speech( + l("What a strange note."), + l("I'll keep track of this, while you return the mask to the troupe."), + l("I would go myself, but the developers were too lazy to make me walk."), + "...", + l("By the way, stay sharp! I may call upon you again.")); + + close2; + setq(.quest, 14); + end; + + case 14: + npctalk3(l("Please return the mask to the traveling troupe.")); + end; + + case 15: + speech( + l("My men have found all of the stolen items."), + l("They were all in the mining camp."), + l("We still don't know who did it.")); // XXX: feel free to extend this quest beyond this point + + close2; + setq(.quest, 16); + getexp(.reward_exp, 0); + end; + + case 16: + npctalk3(l("Remember to stay sharp. I might need your help on another case.")); + end; + } + + closeclientdialog(); close; +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq(.quest, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + OnInit: + .min_level = 20; // min level to do the quest + + .reward_exp = 2500; + + .quest = HurnscaldQuests_Inspector; + .quest_debug = .quest; .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-12/nurse.txt b/npc/008-2-12/nurse.txt index 4fd65257..29452258 100644 --- a/npc/008-2-12/nurse.txt +++ b/npc/008-2-12/nurse.txt @@ -1,20 +1,101 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// Hurnscald Nurse. -// THIS IS A PLACEHOLDER! +// Hurnscald Nurse. Robberies in Hurnscald. -008-2-12,28,30,0 script Nurse#008-2-12 NPC_NURSE_LEGACY,{ - speech - l("Hey."), - l("The doctor is upstairs, but perhaps he can't help you much today."), - lg("Just smile, everything will be better soon then."); +008-2-12,28,30,0 script Nurse NPC_NURSE_LEGACY,{ - close; + speech(4, + l("How can I help you?")); + + // TODO: check for AxeHat when we get it + // XXX: this npc used to teach the resist poison skill, do we still want that? + + selectd( + l("Oooh, these wounds! They hurt so much!"), + l("I don't feel so well, I might be sick."), + l("No, I'm fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything out of the ordinary?"))); + + switch (@menu) + { + case 1: + if (BaseLevel > .heal_max_level) + { + speech( + l("I'm sorry but I'm here only to help young people."), // XXX: this sounds cruel towards elderly people + l("Your level is already higher than %d.", .heal_max_level), + l("You can get some rest at the inn near here.")); + close; + } + speech(4, + l("Here, let me heal you.")); + + npcskill(AL_HEAL, .heal_skill_level, .heal_npc_stats, .heal_npc_level); + + speech( + l("There you go, like new.")); + close; + case 2: + speech( + l("Then you should better see the doctor."), + l("He is usually in his office on the 3rd floor.")); + close; + case 3: + speech( + l("Then I would ask you to leave."), + l("There are people who really need our help.")); + close; + case 4: + speech( + l("I'm too busy here to observe the town.")); + close; + } + + + end; OnInit: + .heal_max_level = 20; // she will only heal low level players + + .heal_skill_level = 10; // what level of the healing skill to use + .heal_npc_stats = 99; // what stat points the NPC has + .heal_npc_level = 60; // what level the npc has + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; .sex = G_FEMALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-14/doctor.txt b/npc/008-2-14/doctor.txt index 2a450ae2..52c8653c 100644 --- a/npc/008-2-14/doctor.txt +++ b/npc/008-2-14/doctor.txt @@ -1,20 +1,80 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: // The crazy Hurnscald Doctor. -// THIS IS A PLACEHOLDER! -008-2-14,27,27,0 script Doctor#008-2-14 NPC_DOCTOR_LEGACY,{ - speech - l("Hey."), - l("Do you have some kind of pain?"), - lg("Oh, I see. You should go see your pixcialist."); +008-2-14,27,27,0 script Doctor NPC_DOCTOR_LEGACY,{ - close; + speech(4, + l("Hello, can I help you?")); + + // TODO: check for AxeHat when we get it + // TODO: check for EyePatch when we get it + + selectd( + l("I think I am sick!"), + l("No, I feel fine."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange in town? Anything that might have to do with the robberies?"))); + + switch (@menu) + { + case 1: + narrator(4, + l("The doctor examines you briefly.")); + // TODO: check for poison or other status conditions currently in use + speech( + l("Nonsense!"), + l("You look fine and dandy to me."), + l("All you need is a bit more exercise and fresh fruit in your diet!")); + close; + case 2: + speech( + l("Then please stop wasting my precious time.")); + close; + case 3: + speech( + l("No, I haven't seen anything.")); + close; + } + + + end; OnInit: - .sex = G_FEMALE; - .distance = 2; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-18/malik.txt b/npc/008-2-18/malik.txt index 3d43332c..ab95dc92 100644 --- a/npc/008-2-18/malik.txt +++ b/npc/008-2-18/malik.txt @@ -1,21 +1,65 @@ // Evol scripts. // Author: -// Micksha +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused // Description: -// Malik. -// THIS IS A PLACEHOLDER! +// robberies in hurnscald +// TODO: Make Malik prepare Crude Gem from shards, and make him produce Gem Powder later, once the player visited Tulim(dont tell WildX, though) 008-2-18,32,24,0 script Malik#008-2-18 NPC_MALIK,{ - speech - l("Hi there."), - l("My name is Malik. I used to make the finest Gempowder. But since Overlord WildX prohibited magic in Hurns, and along with this making gem powders, I can only try to melt gem shards into crude gems."), - l("Anyhow, this does not work well yet. Perhaps you should come back later."), - lg("Psst, if one day you may need gem powder, meet me in the basement."); + if (getq(.quest_inspector) == 11) + { + speech(4, + l("Hi, can I help you at all?")); - close; + selectd( + l("The inspector sent me here to investigate.")); + + speech(4, + l("Yeah, we did hear a commotion."), + l("We thought we heard someone go down to the basement, but we checked the whole place over and didn't see anything out of the ordinary.")); + + close2; + setq(.quest_inspector, 12); + end; + } + + npctalk3(generic(32 | 256)); + end; OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-19/_import.txt b/npc/008-2-19/_import.txt index c080bfb8..1d12e589 100644 --- a/npc/008-2-19/_import.txt +++ b/npc/008-2-19/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-19: Mining Camp Basement // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-19/_warps.txt", +"npc/008-2-19/books.txt", diff --git a/npc/008-2-19/books.txt b/npc/008-2-19/books.txt new file mode 100644 index 00000000..81cd4b98 --- /dev/null +++ b/npc/008-2-19/books.txt @@ -0,0 +1,60 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-19,33,21,0 script bookcase NPC_NO_SPRITE,{ + + if (getq(.quest_inspector) != 12) + { + dispbottom(l("You see an ordinary bookcase.")); + end; + } + + narrator( + l("You see an ordinary bookcase."), + l("Looking over closely, you find a book that is upside down."), + l("The book has been hollowed out."), + l("Inside is a theater mask and a note that you cannot even begin to read.")); + + close2; + setq(.quest_inspector, 13); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .distance = 1; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/_import.txt b/npc/008-2-2/_import.txt index e7ccd597..9fc64957 100644 --- a/npc/008-2-2/_import.txt +++ b/npc/008-2-2/_import.txt @@ -3,8 +3,8 @@ "npc/008-2-2/_warps.txt", "npc/008-2-2/bartender.txt", "npc/008-2-2/kfahr.txt", +"npc/008-2-2/ledmitz.txt", "npc/008-2-2/mapflags.txt", "npc/008-2-2/melinda.txt", -"npc/008-2-2/micksha.txt", +"npc/008-2-2/note.txt", "npc/008-2-2/receptionist.txt", -"npc/008-2-2/roamingo.txt", diff --git a/npc/008-2-2/ledmitz.txt b/npc/008-2-2/ledmitz.txt new file mode 100644 index 00000000..5939428e --- /dev/null +++ b/npc/008-2-2/ledmitz.txt @@ -0,0 +1,55 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,43,34,0 script Ledd NPC_DRINKER_ROAMINGO,{ + // XXX: ^ I know it should be Led and Mitz but 4144 made names + // shorter than 4 characters illegal + + deltimer("Mitz::OnTalk"); + addtimer(rand(500, 900), "Mitz::OnTalk"); +OnTalk: + npctalk3(l("Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!")); + // TODO: add more sentences + // XXX: maybe instead of making them respond to a click they should just + // shout at each other at regular intervals? + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} + +008-2-2,46,34,0 script Mitz NPC_DRINKER_MICKSHA,{ + + deltimer("Ledd::OnTalk"); + addtimer(rand(500, 900), "Ledd::OnTalk"); +OnTalk: + npctalk3(l("I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!")); + // TODO: add more sentences + end; + +OnInit: + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/micksha.txt b/npc/008-2-2/micksha.txt deleted file mode 100644 index 099bff34..00000000 --- a/npc/008-2-2/micksha.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Drinker Micksha -// THIS IS A PLACEHOLDER! - -008-2-2,46,34,0 script Micksha#008-2-2 NPC_DRINKER_MICKSHA,{ - speech - l("Hello Sir *hicks*."), - l("Umm, can you perhaps spring for a beer? *hicks* I'm broken."); - lg("*burp* ... ."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-2/note.txt b/npc/008-2-2/note.txt new file mode 100644 index 00000000..2fcce90f --- /dev/null +++ b/npc/008-2-2/note.txt @@ -0,0 +1,28 @@ +// Evol scripts. +// Author: +// gumi + +008-2-2,32,28,0 script Note#Hurnscald:pub NPC_PAPER_NOTE,{ + narrator(8, + l("We refuse service to anyone who:"), + l("• Has a bubblehead"), + l("• Is not properly shaded"), + l("• Can't walk without stopping after every step")); + + // In case you don't get the joke, know that it's a parody on Illutia. + + close; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-2/roamingo.txt b/npc/008-2-2/roamingo.txt deleted file mode 100644 index 98c82ef8..00000000 --- a/npc/008-2-2/roamingo.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// Drinker Roamingo -// THIS IS A PLACEHOLDER! - -008-2-2,43,34,0 script Roamingo#008-2-2 NPC_DRINKER_ROAMINGO,{ - speech - l("Oh hi my friend *hicks*"), - l("Eh... shiver me timbers! *hicks* Where did you find this hat??"); - lg("Know what *hicks*, if you give me the hat, the next round will be on me."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-24/_import.txt b/npc/008-2-24/_import.txt index e8f862f4..63cfe25c 100644 --- a/npc/008-2-24/_import.txt +++ b/npc/008-2-24/_import.txt @@ -1,3 +1,4 @@ // Map 008-2-24: Dimond's Cove Ground Floor // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-24/_warps.txt", +"npc/008-2-24/troupe-leader.txt", diff --git a/npc/008-2-24/troupe-leader.txt b/npc/008-2-24/troupe-leader.txt new file mode 100644 index 00000000..8b10fed8 --- /dev/null +++ b/npc/008-2-24/troupe-leader.txt @@ -0,0 +1,119 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-2-24,41,39,0 script Troupe Leader NPC_DIMOND,{ + + function nohmask_question { + // XXX: shouldn't the player ask a question before she replies Yes? this feels too abrupt + speech(4, + l("Yes, a mask was stolen from us the last night we were in Hurnscald.")); + + selectd( + l("Any ideas on who might have taken it?"), + l("Are you sure one of your troupe members didn't hide it and commit those robberies?"), + l("Hmm...")); + + switch (@menu) + { + case 1: + speech( + l("Hm..."), + l("I did see an old man hang out near the theater after our last show.")); + close2; + setq(.quest_inspector, 6); + close; + + case 2: + speech( + l("I am absolutely positive."), + l("None of my troupe have left the city since we got here."), + l("Good day!")); + close; + } + + closeclientdialog(); + close; + } + + function nohmask_found { + // XXX: shouldn't the player say "I found your mask" before the npc says thanks? + speech(4, + l("Thank you for finding the mask."), + l("You did such a good job, you should keep it.")); + + if (checkweight(.reward_item, 1) != true) + { + speech(8, + l("It seems you can't carry it right now...")); + close; + } + + setq(.quest_inspector, 15); + getexp(.reward_exp, 0); + getitem(.reward_item, 1); + + speech( + l("We don't need it anymore."), + l("We're doing different shows here.")); + close; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 5: nohmask_question; break; + // XXX: shouldn't it have an in-between state where it says good luck or something? + case 14: nohmask_found; break; + // XXX: shouldn't it have a "completed" state where it says thanks, come back any time? + } + + // initial intro + speech( + l("Hello."), + l("I'm the leader of a traveling theater troupe."), + l("We'll be staying here in Tulimshar for a while.")); + close; + +OnInit: + .reward_item = NohMask; // FIXME: change this when we get NohMask + .reward_exp = 1500; + + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-4/_import.txt b/npc/008-2-4/_import.txt index 61c043be..826aa135 100644 --- a/npc/008-2-4/_import.txt +++ b/npc/008-2-4/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-4/_savepoints.txt", "npc/008-2-4/_warps.txt", +"npc/008-2-4/bernard.txt", "npc/008-2-4/mapflags.txt", "npc/008-2-4/olana.txt", diff --git a/npc/008-2-4/bernard.txt b/npc/008-2-4/bernard.txt new file mode 100644 index 00000000..a528bcc3 --- /dev/null +++ b/npc/008-2-4/bernard.txt @@ -0,0 +1,230 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// Bernard wants to make a maggot slime soup + +008-2-4,34,29,0 script Bernard NPC_BERNARD,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(16 | 32); + end; + } + + function soup_intro { + if (rand(2) == 1) + { + speech 4, + l("The fields are crawling with maggots."), + l("Where is Mikhail?"), + l("What is taking them so long?"), + l("Could I ask a favor of you?"); + } + else + { + speech 4, + l("The taste of maggots in soup is... unforgettable."), + l("They taste simply divine!"), + l("I sent someone to kill me some maggots and they have yet to return."), + l("Would you help me kill some?"); + } + + if (selectd(l("Yes."), l("No.")) == 2) + { + return; + } + + if (rand(2) == 1) + { + speech 4, + l("Great!"), + l("I need a %s for my soup.", getitemlink(.first_item)); + } + else + { + speech 4, + l("Bring me a %s.", getitemlink(.first_item)), + l("I'll give you something if you do."); + } + + speech 8, + l("Please bring it to me!"); + + setq .quest, 2; + close; + } + + function soup_reminder_roasted { + speech + l("Oh, please hurry and bring me a %s.", getitemlink(.first_item)), + l("I'm yearning for maggot soup!"); + close; + } + + function soup_no_room { + speech 1 | 8, + "...", + l("It seems you don't have room for my reward."), + l("I'll wait until you do."); + close; + } + + function soup_reward_roasted { + speech 4, + l("Oooh, perfect! It's perfect!"), + l("You brought me my %s!", getitemlink(.first_item)), + l("Here, have some %s for your troubles.", + getitemlink(.first_reward_item)); + + if (checkweight(.first_reward_item, .first_reward_amount) != true) + soup_no_room; + + if (countitem(.first_item) < 1) + close; + + delitem .first_item, 1; + getitem .first_reward_item, .first_reward_amount; + getexp .first_reward_exp, 0; + setq .quest, 3; + + speech 8, + l("Now let's see..."); + close; + } + + function soup_ask_slime { + speech + l("Thank you so much!"), + l("But... something is missing to make the soup creamy."), + l("I need %d %s for that.", + .second_item_qty, getitemlink(.second_item)), + l("Bring them to me, and I'll give you something nice."); + + setq .quest, 4; + close; + } + + function soup_reminder_slime { + speech + l("Please do hurry and bring me %d %s, so I can finish my soup!", + .second_item_qty, getitemlink(.second_item)); + close; + } + + function soup_reward_slime { + speech + l("Nice!"), + l("They're perfect, just perfect!"), + l("You brought me the %d %s!", + .second_item_qty, getitemlink(.second_item)), + l("Here, have some %s as reward.", + getitemlink(.second_reward_item)); + + if (checkweight(.second_reward_item, .second_reward_amount) != true) + soup_no_room; + + if (countitem(.second_item) < .second_item_qty) + close; + + delitem .second_item, .second_item_qty; + getitem .second_reward_item, .second_reward_amount; + getexp .second_reward_exp, 0; + setq .quest, 5; + + close; + } + + function soup_thanks_slime { + speech + l("I didn't mention it before, but I also put beer in my soup."), + l("I hope you like beer as much as I do, because, you see..."), + l("Beer is life!"); + close; + } + + function soup_thanks_mikhail { + speech + l("My help, Mikhail, finally returned with the slimes I needed."), + l("I wonder what took him so long?"); + close; + } + + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: soup_intro; break; + case 2: + if (countitem(.first_item) < 1) + soup_reminder_roasted; + else + soup_reward_roasted; + break; + case 3: soup_ask_slime; break; + case 4: + if (countitem(.second_item) < .second_item_qty) + soup_reminder_slime; + else + soup_reward_slime; + break; + case 5: + case 6: soup_thanks_slime; break; + default: soup_thanks_mikhail; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 10; // min level to do the quest + + .first_item = RoastedMaggot; + .first_reward_item = CherryCake; + .first_reward_amount = 5; + .first_reward_exp = 100; + + .second_item = MaggotSlime; + .second_item_qty = 3; + .second_reward_item = Beer; + .second_reward_amount = 3; + .second_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-6/alan.txt b/npc/008-2-6/alan.txt index b34f7bef..eebd11cd 100644 --- a/npc/008-2-6/alan.txt +++ b/npc/008-2-6/alan.txt @@ -2,19 +2,302 @@ // Author: // Micksha // Description: -// Alan the bow-seller. -// THIS IS A PLACEHOLDER! +// Alan the bow-maker. -008-2-6,31,25,0 script Alan#008-2-4 NPC_YOUNG_MAN_KFAHR,{ - speech - l("Hi Sir."), - l("Bad timing when you are asking for bows. Our bowmaker Gumi hasn't been seen for days now."), - lg("Come back later, perhaps we are lucky and he teaches you how to chop trees for wood."); +008-2-6,32,24,0 script Alan NPC_YOUNG_MAN_KFAHR,{ + function bow_intro { + speech(4, + l("When you want to buy something then please speak to my apprentice."), + l("I am only doing special requests.")); + + selectd( + l("OK, thanks."), + rif(BaseLevel >= .min_level, l("Can you make me a really good bow?")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + speech(4, + l("You mean like one of my legendary forest bows?")); + + selectd( + l("Yes, that would be nice.")); + + speech(4, + l("Sorry, I am not making these anymore.")); + + selectd( + l("Oh, too bad."), + l("What? Why not?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("The problem is that I am short of material."), + l("My forestbows are not made of regular wood, you know."), + l("They are made of special living wood."), + l("And only the best logs of living wood are good enough for them."), + l("I used to get these logs from Jack, the handsome lumberjack."), + l("But the last time I asked him for a new delivery he said that he would never again get any for me.")); + + selectd( + l("Too bad."), + l("Did you ask him why?")); + + if (@menu == 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Sure I did."), + l("But he just told me to leave him alone."), + l("Maybe you could ask him what's wrong?")); + + selectd( + l("OK, I'll ask him."), + l("I am sure he got his reasons.")); + + setq(.quest_bow, 2); + closeclientdialog(); + close; + } + + function bow_reminder { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Have you seen anything strange recently that might be connected to the robberies?")); + + speech(l("No.")); + close; + } + + npctalk3(l("Did you already ask Jack why he won't deliver me any more living wood?")); + end; + } + + function bow_explain { + speech(4, + l("Did you already ask Jack why he won't deliver me any more living wood?")); + + selectd( + l("Yes, I did. He said that the trees turned into dangerous monsters."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + if (@menu != 1) + { + speech(l("No.")); + close; + } + + speech( + l("Oh, that's really bad news."), + l("Maybe you can do his job?"), + l("If you kill some of these tree monsters and bring me their wood I could take a look at them."), + l("Maybe you will find a piece of wood that is strong enough to become one of my forest bows.")); + + close2; + setq(.quest_bow, 4); + end; + } + + function bow_make { + speech(4, + l("I can make you a really nice forest bow out of this."), + l("I just need %s E for material and work time.", + format_number(.req_esp))); + + selectd( + l("%s??? What a ripoff!", format_number(.req_esp)), + rif(Zeny >= .req_esp, l("Sure, here you go!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: speech(l("Fine, I'll just hold on to this log should you ever change your mind.")); close; + case 3: speech(l("No.")); close; + } + + // XXX: maybe here we could make the player wait real-world hours for Alan to finish? + + if (checkweight(.reward_item, 1) != true) + { + speech( + l("It seems you can't carry the bow right now."), + l("Go clean up your inventory and come back.")); + close; + } + + if (Zeny < .req_esp) + close; // double-check + + setq(.quest_bow, 6); + Zeny -= .req_esp; + getitem(.reward_item, 1); + getexp(.reward_exp, 0); + + speech( + l("Here you go - have fun with it.")); + close; + } + + function bow_check_wood { + speech(4, + l("How is the hunt going?"), + l("Did you bring me any wood?")); + + selectd( + l("No, sorry."), + rif(countitem(.req_item) >= 1, l("Here, take a look!")), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 3: speech(l("No.")); close; + } + + .@first = true; + + do { + if (countitem(.req_item) < 1) + break; + + if (.@first == false) + { + narrator(4, + l("You hand him another log.")); + } + + delitem(.req_item, 1); + .@first = false; + + speech(4, + l("Hmmm... looks ok, but is it strong enough?")); + + narrator(4, + l("Alan bends the log over his knee.")); + + if (rand(.success_rate) == 0) + { + narrator(4 | 8, + l("Alan tries as hard as he can but the log won't bend.")); + + speech(4, + l("Aaah!"), + l("Yes!"), + l("That is a really fine piece of wood you brought me."), + l("It will make an excellent bow!")); + + setq(.quest_bow, 5); + setq(.quest_shield, 1); + + narrator(4, + l("He proceeds to further scrutinize the log.")); + + bow_make; + end; + } + + narrator(4 | 8, + l("The log breaks with a loud crack.")); + + speech(4, + l("Sorry, this log was too weak for one of my forest bows."), + l("Now it is junk."), + l("Do you wish to try again?")); + + selectd( + l("Sure, here you go."), + l("Hey! Stop breaking my stuff!")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + } while (true); + + speech(l("It seems you have no wood left.")); + close; + } + + function bow_done { + speech(4, + l("I hope you are satisfied with your forest bow."), + l("It is one of my best works.")); + + selectd( + l("I am!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); + + switch (@menu) + { + case 2: speech(l("No.")); close; + default: closeclientdialog(); close; + } + } + + // OnTalk: + switch (getq(.quest_bow)) + { + case 0: + case 1: bow_intro; break; + case 2: bow_reminder; break; + case 3: bow_explain; break; + case 4: bow_check_wood; break; + case 5: bow_make; break; + default: bow_done; break; + } + + closeclientdialog(); close; +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest_bow) < 1) + { + setq(.quest_bow, 1); // allow the player to do the quest + dispbottom(l("New quest available: %s (level %d+)", + getquestlink(.quest_bow), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + OnInit: + .min_level = 25; // min level to do the quest + + .req_item = RawLog; // item required to make the bow + .req_esp = 10000; // amount of Esperin required to make the bow + .reward_item = ForestBow; // quest reward (item) + .reward_exp = 500; // quest reward (exp) + .success_rate = 20; // one in X chances to get a perfect log + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/008-2-8/_import.txt b/npc/008-2-8/_import.txt index 8b3da720..8bb44bb1 100644 --- a/npc/008-2-8/_import.txt +++ b/npc/008-2-8/_import.txt @@ -1,6 +1,6 @@ // Map 008-2-8: Hurnscald Forge // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-2-8/_warps.txt", -"npc/008-2-8/apprentice.txt", +"npc/008-2-8/macgowan.txt", "npc/008-2-8/mapflags.txt", "npc/008-2-8/nicholas.txt", diff --git a/npc/008-2-8/apprentice.txt b/npc/008-2-8/apprentice.txt deleted file mode 100644 index e15e7db7..00000000 --- a/npc/008-2-8/apprentice.txt +++ /dev/null @@ -1,20 +0,0 @@ -// Evol scripts. -// Author: -// Micksha -// Description: -// The Smith's apprentice. -// THIS IS A PLACEHOLDER! - -008-2-8,38,29,0 script Apprentice#008-2-8 NPC_YOUNG_MAN_APPRENTICE,{ - speech - l("Hi Sir."), - l("If you bring us ores, we will be able to make the finest equipment."), - lg("Come back a bit later when you are interested."); - - close; - -OnInit: - .sex = G_MALE; - .distance = 2; - end; -} diff --git a/npc/008-2-8/macgowan.txt b/npc/008-2-8/macgowan.txt new file mode 100644 index 00000000..efeee33e --- /dev/null +++ b/npc/008-2-8/macgowan.txt @@ -0,0 +1,24 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Smith's apprentice. +// THIS IS A PLACEHOLDER! + +008-2-8,38,29,0 script Macgowan NPC_YOUNG_MAN_APPRENTICE,{ + npctalk3(l("Hello, I am Macgowan, apprentice to Nicholas.")); + end; + +OnInit: + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-2-8/nicholas.txt b/npc/008-2-8/nicholas.txt index 9dab65e8..7b62090d 100644 --- a/npc/008-2-8/nicholas.txt +++ b/npc/008-2-8/nicholas.txt @@ -1,19 +1,28 @@ // Evol scripts. // Author: -// Micksha +// gumi, Micksha // Description: // Nicholas the Smith. -// THIS IS A PLACEHOLDER! -008-2-8,39,27,0 script Nicholas#008-2-8 NPC_NICHOLAS,{ - speech - l("Hi Sir."), - lg("If you need stable metal gear, you are right! But first I must bring the steel atoms in the right order, hold on."); +008-2-8,40,27,0 script Nicholas NPC_NICHOLAS,{ + speech( + l("Hello, there!"), + l("I'm an expert blacksmith."), + l("If you get me some Coal and Iron Ingots, I could make you a very valuable shield or helmet.")); + // TODO: setzer quest close; OnInit: - .sex = G_MALE; - .distance = 2; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + end; } diff --git a/npc/placeholder/alan.txt b/npc/placeholder/alan.txt deleted file mode 100644 index 8e8e42b7..00000000 --- a/npc/placeholder/alan.txt +++ /dev/null @@ -1,323 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states (forest bow): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - alan wants to ask jack -// [1] 3 - jack explained problem -// [1] 4 - alan asks to find wood -// [1] 5 - found perfect wood -// [1] 6 - got the bow -// [2] unused -// [3] unused -// [t] unused -// Quest states (wooden shield): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - jack proposes shield -// [1] 3 - player accepted quest -// [1] 4 - got the shield -// [2] unused -// [3] unused -// [t] unused -// Description: -// Jack Lumber, the handsome lumberjack - -008-2-6,31,26,0 script Alan NPC_HUMAN_M_ARTIS,{ - - function bow_intro { - speech(4, - l("When you want to buy something then please speak to my apprentice."), - l("I am only doing special requests.")); - - selectd( - l("OK, thanks."), - rif(BaseLevel >= .min_level, l("Can you make me a really good bow?")), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 1: closeclientdialog(); close; - case 3: speech(l("No.")); close; - } - - speech(4, - l("You mean like one of my legendary forest bows?")); - - selectd( - l("Yes, that would be nice.")); - - speech(4, - l("Sorry, I am not making these anymore.")); - - selectd( - l("Oh, too bad."), - l("What? Why not?")); - - if (@menu == 1) { - closeclientdialog(); - close; - } - - speech(4, - l("The problem is that I am short of material."), - l("My forestbows are not made of regular wood, you know."), - l("They are made of special living wood."), - l("And only the best logs of living wood are good enough for them."), - l("I used to get these logs from Jack, the handsome lumberjack."), - l("But the last time I asked him for a new delivery he said that he would never again get any for me.")); - - selectd( - l("Too bad."), - l("Did you ask him why?")); - - if (@menu == 1) { - closeclientdialog(); - close; - } - - speech(4, - l("Sure I did."), - l("But he just told me to leave him alone."), - l("Maybe you could ask him what's wrong?")); - - selectd( - l("OK, I'll ask him."), - l("I am sure he got his reasons.")); - - setq(.quest_bow, 2); - closeclientdialog(); - close; - } - - function bow_reminder { - if (getq(.quest_inspector) == 2) - { - speech(4, - l("Did you already ask Jack why he won't deliver me any more living wood?")); - - selectd( - l("Have you seen anything strange recently that might be connected to the robberies?")); - - speech(l("No.")); - close; - } - - npctalk3(l("Did you already ask Jack why he won't deliver me any more living wood?")); - end; - } - - function bow_explain { - speech(4, - l("Did you already ask Jack why he won't deliver me any more living wood?")); - - selectd( - l("Yes, I did. He said that the trees turned into dangerous monsters."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - if (@menu != 1) - { - speech(l("No.")); - close; - } - - speech( - l("Oh, that's really bad news."), - l("Maybe you can do his job?"), - l("If you kill some of these tree monsters and bring me their wood I could take a look at them."), - l("Maybe you will find a piece of wood that is strong enough to become one of my forest bows.")); - - close2; - setq(.quest_bow, 4); - end; - } - - function bow_make { - speech(4, - l("I can make you a really nice forest bow out of this."), - l("I just need %s E for material and work time.", - format_number(.req_esp))); - - selectd( - l("%s??? What a ripoff!", format_number(.req_esp)), - rif(Zeny >= .req_esp, l("Sure, here you go!")), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 1: speech(l("Fine, I'll just hold on to this log should you ever change your mind.")); close; - case 3: speech(l("No.")); close; - } - - // XXX: maybe here we could make the player wait real-world hours for Alan to finish? - - if (checkweight(.reward_item, 1) != true) - { - speech( - l("It seems you can't carry the bow right now."), - l("Go clean up your inventory and come back.")); - close; - } - - if (Zeny < .req_esp) - close; // double-check - - setq(.quest_bow, 6); - Zeny -= .req_esp; - getitem(.reward_item, 1); - getexp(.reward_exp, 0); - - speech( - l("Here you go - have fun with it.")); - close; - } - - function bow_check_wood { - speech(4, - l("How is the hunt going?"), - l("Did you bring me any wood?")); - - selectd( - l("No, sorry."), - rif(countitem(.req_item) >= 1, l("Here, take a look!")), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 1: closeclientdialog(); close; - case 3: speech(l("No.")); close; - } - - .@first = true; - - do { - if (countitem(.req_item) < 1) - break; - - if (.@first == false) - { - narrator(4, - l("You hand him another log.")); - } - - delitem(.req_item, 1); - .@first = false; - - speech(4, - l("Hmmm... looks ok, but is it strong enough?")); - - narrator(4, - l("Alan bends the log over his knee.")); - - if (rand(.success_rate) == 0) - { - narrator(4 | 8, - l("Alan tries as hard as he can but the log won't bend.")); - - speech(4, - l("Aaah!"), - l("Yes!"), - l("That is a really fine piece of wood you brought me."), - l("It will make an excellent bow!")); - - setq(.quest_bow, 5); - setq(.quest_shield, 1); - - narrator(4, - l("He proceeds to further scrutinize the log.")); - - bow_make; - end; - } - - narrator(4 | 8, - l("The log breaks with a loud crack.")); - - speech(4, - l("Sorry, this log was too weak for one of my forest bows."), - l("Now it is junk."), - l("Do you wish to try again?")); - - selectd( - l("Sure, here you go."), - l("Hey! Stop breaking my stuff!")); - - if (@menu != 1) { - closeclientdialog(); - close; - } - - } while (true); - - speech(l("It seems you have no wood left.")); - close; - } - - function bow_done { - speech(4, - l("I hope you are satisfied with your forest bow."), - l("It is one of my best works.")); - - selectd( - l("I am!"), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange recently that might be connected to the robberies?"))); - - switch (@menu) - { - case 2: speech(l("No.")); close; - default: closeclientdialog(); close; - } - } - - // OnTalk: - switch (getq(.quest_bow)) - { - case 0: - case 1: bow_intro; break; - case 2: bow_reminder; break; - case 3: bow_explain; break; - case 4: bow_check_wood; break; - case 5: bow_make; break; - default: bow_done; break; - } - - closeclientdialog(); - close; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest_bow) < 1) - { - setq(.quest_bow, 1); // allow the player to do the quest - dispbottom(l("New quest available: %s (level %d+)", - getquestlink(.quest_bow), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 25; // min level to do the quest - - .req_item = RawLog; // item required to make the bow - .req_esp = 10000; // amount of Esperin required to make the bow - .reward_item = ForestBow; // quest reward (item) - .reward_exp = 0; // quest reward (exp) - .success_rate = 20; // one in X chances to get a perfect log - - .quest_bow = HurnscaldQuests_ForestBow; - .quest_shield = HurnscaldQuests_WoodenShield; - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_bow; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/bernard.txt b/npc/placeholder/bernard.txt deleted file mode 100644 index 5c3f25ff..00000000 --- a/npc/placeholder/bernard.txt +++ /dev/null @@ -1,230 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - bernard wants roasted maggot -// [1] 3 - brought maggot -// [1] 4 - bernard wants maggot slime -// [1] 5 - brought maggot slime -// [1] 6 - mikhail needs maggot slime -// [1] 7 - brought maggot slime -// [2] unused -// [3] unused -// [t] unused -// Description: -// Bernard wants to make a maggot slime soup - -008-2-4,34,29,0 script Bernard NPC_HUMAN_M_ARTIS,{ - - if (BaseLevel < .min_level) - { - npctalk3 generic(16 | 32); - end; - } - - function soup_intro { - if (rand(2) == 1) - { - speech 4, - l("The fields are crawling with maggots."), - l("Where is Mikhail?"), - l("What is taking them so long?"), - l("Could I ask a favor of you?"); - } - else - { - speech 4, - l("The taste of maggots in soup is... unforgettable."), - l("They taste simply divine!"), - l("I sent someone to kill me some maggots and they have yet to return."), - l("Would you help me kill some?"); - } - - if (selectd(l("Yes."), l("No.")) == 2) - { - return; - } - - if (rand(2) == 1) - { - speech 4, - l("Great!"), - l("I need a %s for my soup.", getitemlink(.first_item)); - } - else - { - speech 4, - l("Bring me a %s.", getitemlink(.first_item)), - l("I'll give you something if you do."); - } - - speech 8, - l("Please bring it to me!"); - - setq .quest, 2; - close; - } - - function soup_reminder_roasted { - speech - l("Oh, please hurry and bring me a %s.", getitemlink(.first_item)), - l("I'm yearning for maggot soup!"); - close; - } - - function soup_no_room { - speech 1 | 8, - "...", - l("It seems you don't have room for my reward."), - l("I'll wait until you do."); - close; - } - - function soup_reward_roasted { - speech 4, - l("Oooh, perfect! It's perfect!"), - l("You brought me my %s!", getitemlink(.first_item)), - l("Here, have some %s for your troubles.", - getitemlink(.first_reward_item)); - - if (checkweight(.first_reward_item, .first_reward_amount) != true) - soup_no_room; - - if (countitem(.first_item) < 1) - close; - - delitem .first_item, 1; - getitem .first_reward_item, .first_reward_amount; - getexp .first_reward_exp, 0; - setq .quest, 3; - - speech 8, - l("Now let's see..."); - close; - } - - function soup_ask_slime { - speech - l("Thank you so much!"), - l("But... something is missing to make the soup creamy."), - l("I need %d %s for that.", - .second_item_qty, getitemlink(.second_item)), - l("Bring them to me, and I'll give you something nice."); - - setq .quest, 4; - close; - } - - function soup_reminder_slime { - speech - l("Please do hurry and bring me %d %s, so I can finish my soup!", - .second_item_qty, getitemlink(.second_item)); - close; - } - - function soup_reward_slime { - speech - l("Nice!"), - l("They're perfect, just perfect!"), - l("You brought me the %d %s!", - .second_item_qty, getitemlink(.second_item)), - l("Here, have some %s as reward.", - getitemlink(.second_reward_item)); - - if (checkweight(.second_reward_item, .second_reward_amount) != true) - soup_no_room; - - if (countitem(.second_item) < .second_item_qty) - close; - - delitem .second_item, .second_item_qty; - getitem .second_reward_item, .second_reward_amount; - getexp .second_reward_exp, 0; - setq .quest, 5; - - close; - } - - function soup_thanks_slime { - speech - l("I didn't mention it before, but I also put beer in my soup."), - l("I hope you like beer as much as I do, because, you see..."), - l("Beer is life!"); - close; - } - - function soup_thanks_mikhail { - speech - l("My help, Mikhail, finally returned with the slimes I needed."), - l("I wonder what took him so long?"); - close; - } - - - // OnTalk: - switch (getq(.quest)) - { - case 0: - case 1: soup_intro; break; - case 2: - if (countitem(.first_item) < 1) - soup_reminder_roasted; - else - soup_reward_roasted; - break; - case 3: soup_ask_slime; break; - case 4: - if (countitem(.second_item) < .second_item_qty) - soup_reminder_slime; - else - soup_reward_slime; - break; - case 5: - case 6: soup_thanks_slime; break; - default: soup_thanks_mikhail; - } - - closeclientdialog(); - close; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest) < 1) - { - setq .quest, 1; // allow the player to do the quest - dispbottom l("New quest available: %s (level %d+)", - getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 10; // min level to do the quest - - .first_item = Aquada; // FIXE: change this when we have RoastedMaggot - .first_reward_item = Aquada; // reward item // FIXME: change this when we have CherryCake - .first_reward_amount = 5; - .first_reward_exp = 100; - - .second_item = Aquada; // FIXE: change this when we have MaggotSlime - .second_item_qty = 3; - .second_reward_item = Aquada; // reward item // FIXME: change this when we have Beer - .second_reward_amount = 3; - .second_reward_exp = 100; - - .quest = HurnscaldQuests_Soup; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/books.txt b/npc/placeholder/books.txt deleted file mode 100644 index 3407e0cd..00000000 --- a/npc/placeholder/books.txt +++ /dev/null @@ -1,60 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,247,40,0 script bookcase NPC_HUMAN_M_ARTIS,{ - - if (getq(.quest_inspector) != 12) - { - dispbottom(l("You see an ordinary bookcase.")); - end; - } - - narrator( - l("You see an ordinary bookcase."), - l("Looking over closely, you find a book that is upside down."), - l("The book has been hollowed out."), - l("Inside is a theater mask and a note that you cannot even begin to read.")); - - close2; - setq(.quest_inspector, 13); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .distance = 1; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/doctor.txt b/npc/placeholder/doctor.txt deleted file mode 100644 index af36d1e2..00000000 --- a/npc/placeholder/doctor.txt +++ /dev/null @@ -1,80 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-2-14,29,30,0 script Doctor NPC_HUMAN_M_ARTIS,{ - - speech(4, - l("Hello, can I help you?")); - - // TODO: check for AxeHat when we get it - // TODO: check for EyePatch when we get it - - selectd( - l("I think I am sick!"), - l("No, I feel fine."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything strange in town? Anything that might have to do with the robberies?"))); - - switch (@menu) - { - case 1: - narrator(4, - l("The doctor examines you briefly.")); - // TODO: check for poison or other status conditions currently in use - speech( - l("Nonsense!"), - l("You look fine and dandy to me."), - l("All you need is a bit more exercise and fresh fruit in your diet!")); - close; - case 2: - speech( - l("Then please stop wasting my precious time.")); - close; - case 3: - speech( - l("No, I haven't seen anything.")); - close; - } - - - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/hinnak.txt b/npc/placeholder/hinnak.txt deleted file mode 100644 index 0dd211fd..00000000 --- a/npc/placeholder/hinnak.txt +++ /dev/null @@ -1,352 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - hinnak asked for help -// [1] 3 - helped hinnak -// [2] kill counter -// Description: -// Hinnak needs help to get rid of {mobname} - -008-1,270,77,0 script Hinnak NPC_HUMAN_M_ARTIS,{ - - if (BaseLevel < .min_level) - { - npctalk3 generic(1 | 16 | 64); - end; - } - - function hinn_new_player - { - if(getequipid(EQI_HEAD_TOP) == .bad_hat) - { - narrator 4, - l("The farmer lunges at you with a farming implement."); - heal -50, 0; - - selectd - l("I'm out of here."), - l("Whoa, what are you doing?"); - - if (@menu == 1) - { - return; - } - - speech 4 | 1, - l("Sorry, you look like a pinkie."), - l("They've been destroying my fields, and I guess I got a bit worked up."); - } - - else - { - speech 4, - l("Argh!"), - l("I hate them!"), - l("I @#$% hate them!"), - l("I @#$% hate these @#$% pinkies!"); - - selectd - l("You need some anger control therapy."), - l("Why do you hate them?"); - - if (@menu == 1) - { - return; - } - - speech 4 | 1, - l("These @#$% beasts are jumping around in my fields destroying all my harvest."), - l("But they are too fast."), - l("I can't catch them."); - } - - selectd - l("Want me to help you?"); - - speech 4 | 1, - l("Yes, you look quite fast."), - l("Maybe you can catch some of them."), - l("That will pay them a lesson."), - l("Slay some of them and bring me %d of their antennae.", .drop_count); - - setq .quest, 2, 0; - - selectd - l("How much is this worth to you?"); - - speech 1, - l("Well, I can't offer you much."), - l("But I got an old scythe laying around."), - l("Maybe you can use it as a weapon."); - - close; - } - - function hinn_help - { - if (getequipid(EQI_HEAD_TOP) == .bad_hat) - { - narrator 4, - l("The farmer glares at your hat."); - } - - speech 4, - l("Have you got the %d antennae?", .drop_count); - - selectd - l("Not yet, but I am working on it."), - rif(countitem(.monster_drop) >= .drop_count, l("Sure, here they are!")); - - if (@menu == 1) - { - return; - } - - if (getq2(.quest) < .kill_count) - { - speech 1, - l("Don't try to fool me!"), - l("I know you didn't kill them yourself!"), - l("Kill at least %d pinkies and come back.", .kill_count); - close; - } - - speech 1, - l("Thank you very much"), - l("As promised, here's my old scythe."), - l("Maybe you can use it as a weapon."), - l("It is a bit cumbersome but its strikes are deadly."); - - if (countitem(.monster_drop) >= .drop_count) - { - delitem .monster_drop, .drop_count; - getitem .reward_item, 1; - Zeny += .reward_money; - //getexp .reward_exp, 0; - setq .quest, 3; - } - close; - } - - function hinn_thanks - { - if (getequipid(EQI_HEAD_TOP) == .bad_hat) - { - speech 4, - l("That better be a trophy on your head."); - - selectd - l("It is."); - - speech 4 | 1, - l("Good then."), - l("Thanks for your help with the pinkies."); - } - - else - { - speech 4, - l("Good to see you again."), - l("Thanks again for helping me with the pinkies!"); - } - - selectd - l("Sure, any time!"), - l("Anything else you want me to do?"), - l("You're welcome. Bye!"); - - if (@menu == 3) - { - return; - } - - speech 4 | 1, - l("Actually, it's been a long day."), - l("If it's no trouble, could you get me a %s?", - getitemlink(.drink_item)); - - selectd - rif(countitem(.drink_item) >= 1, l("Here you are.")), - l("Sure, I'll go get one. Bye!"), - l("You shouldn't drink while working!"); - - do - { - switch (@menu) - { - case 2: return; - case 3: - speech 1, - l("Well, I'm done for the day, and I'm quite old enough to decide when I can have a %s, thank you!", - getitemname(.drink_item)); - selectd - rif(countitem(.drink_item) >= 1, l("Sorry... here you are.")), - l("I don't have any."); - break; - default: - if (countitem(.drink_item) < 1) - { - return; - } - delitem .drink_item, 1; - - narrator 4 | 8 | 2 | 1, - l("%s takes a sip.", .name$); - - speech 4, - l("Aaah!"), - l("Nothing like a well-deserved %s after a long day of tending the crops!", - getitemname(.drink_item)), - l("Thanks, that was very kind of you!"); - - narrator 4 | 8 | 1 | 2, - l("He takes another sip."); - - speech 4, - l("Thanks!"), - l("You know, I had the strangest thing happen to me."), - l("I had this patch of ground that was really clumpy; lots of clay, you see."), - l("Right over there."), - // TODO: move cam to the spot - l("Looks much better now, doesn't it?"), - // TODO: restore cam - l("But how I got there is kind of scary..."), - l("I'd been trying to break it up for a while, but that kind of work is a pain."), - l("So my wife said that I should go and see the witch, just in case she knows something."), - l("And sure enough I ask the witch, and she has a look at it."), - l("“Nothing I can do”, she says, “but I can ask a friend”."), - l("So the next day another witch shows up."), - l("Gorgeous woman, but when she looked at me, the scares went scuttling down my spine..."), - l("First thing she asked was if I'm a farmer."), - l("Said her friend had told her that I needed help."), - l("I show her what the problem is, and she tells me to go inside and wait."); - - narrator 4 | 8 | 1 | 2, - l("%s drains his mug in one long sip, then hesitates.", .name$); - - speech 4, - l("So I go inside."), - l("I'm barely in when it starts raining outside, pouring cats and mouboos!"), - l("Not so weird, perhaps, except that it was been bright and sunny just a second before!"), - l("So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain..."), - l("None of the raindrops touched her, as if they were afraid!"), - l("Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs..."), - // XXX: maybe here insert a reference to SUSAN? - l("And then she turns to me!"), - l("Seeing her gaze, for a moment there I thought she would turn me into a pinkie, for sure..."), - l("But all she says is, “had you stayed inside, you wouldn't be wet now”."); - - selectd - l("Hahaha!"), - l("Whoah, scary..."), - l("What was that gobbledygook word?"), - l("I better go now. Bye."); - - switch (@menu) - { - case 1: - speech 1, - l("Yeah, funny now..."), - l("But you should've seen that gaze!"), - l("Ah, well, never mind."); - close; - case 2: - speech 1, - l("Yeah, you could say that..."); - close; - case 3: - speech 1, - l("Oh, I can't be sure..."), - l("But something like “Nanaj princino”, I think."); // this is "Dwarven Princess" translated to Esperanto - close; - } - return; - } - } while(true); - } - - // OnTalk: - - if (getq(.quest_inspector) == 11) - { - selectd - l("Did you see anyone in a mask come by here at night?"), - l("Did you see anyone with a large satchel come by here at night?"), - l("Hello."); - - switch (@menu) - { - case 1: - speech - l("No."), - l("It tends to be too dark to see a mask."); - close; - - case 2: - speech - l("Yes, I saw someone with a large sack on their back go to the mining camp."); - close; - } - } - - switch (getq(.quest)) - { - case 0: - case 1: hinn_new_player; break; - case 2: hinn_help; break; - default: hinn_thanks; - } - - closeclientdialog(); - close; - -OnNPCKillEvent: - // XXX: maybe have a OnTakeScript on the pinky antena item so we count pickups instead of kills - if (killedrid == .monster_id && getq(.quest) == 2 && - getq2(.quest) < .kill_count && strcharinfo(PC_MAP) == .map$) - { - setq .quest, 2, getq2(.quest) + 1; - } - end; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest) < 1) - { - setq .quest, 1; // allow the player to do the quest - dispbottom l("New quest available: %s (level %d+)", - getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 15; // min level to do the quest - .monster_id = Fluffy; // monster to kill // FIXME: change this when we have pinkies - .monster_drop = FluffyFur; // monster drop to collect // FIXME: change this when we have pinkies - .drop_count = 10; // amount of that drop needed - .kill_count = 10; // min number of kills - .reward_item = WoodenSword; // reward item // FIXME: change this when we have he Scythe - .reward_money = 0; // reward money - .reward_exp = 0; // reward exp - .bad_hat = BrimmedFlowerHat; // hinnak attacks you when you wear this hat // FIXME: make this pinky hat when we get it - .drink_item = Beer; // the item hinnak asks to drink // FIXME: make this beer when we have it - - .quest = HurnscaldQuests_Hinnak; - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/inspector.txt b/npc/placeholder/inspector.txt deleted file mode 100644 index f25ef1dd..00000000 --- a/npc/placeholder/inspector.txt +++ /dev/null @@ -1,190 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-2-1,30,35,0 script Inspector NPC_HUMAN_M_ARTIS,{ - - if (BaseLevel < .min_level) - { - npctalk3(l("I'm sorry, but I'm busy looking into this string of robberies.")); - end; - } - - // OnTalk: - switch (getq(.quest)) - { - case 0: - case 1: - speech(4, - l("Hmm... what to do.")); - narrator(4, - l("He looks up and into your face.")); - speech(4, - l("You look capable, will you help me solve these robberies?"), - l("I would go myself, but for some reason I'm a non-walking NPC.")); - - if (selectd("Yes", "No") == 2) { - closeclientdialog(); - close; - } - - speech( - l("Ok then."), - l("I'd like you to ask the villagers about the recent string of robberies.")); - - close2; - setq(.quest, 2); - end; - - case 2: - npctalk3(l("Please continue talking to the villagers.")); - end; - - case 3: - speech( - l("Hm..."), - l("I don't know if I trust her eyesight or memory."), - l("See if someone else knows anything.")); - close; - - case 4: - speech( - l("Someone in a theater mask, eh?"), - l("There was a traveling theater troupe in town recently, but they've moved on to Tulimshar."), - l("Please go talk to their leader about this.")); - - close2; - setq(.quest, 5); - end; - - case 5: - npctalk3(l("Please go talk to the leader of the traveling troupe about the theater mask.")); - end; - - case 6: - speech( - l("Hm... an old man?"), - l("Could you interrogate him for me?")); - - close2; - setq(.quest, 7); - end; - - case 7: - npctalk3(l("Have you talked with the old man yet?")); - end; - - case 8: - npctalk3(l("Can you verify that with his wife?")); - end; - - case 9: - speech( - l("Hm... then it couldn't be him."), - l("I'm not sure where to go from here, maybe you can find something else."), - l("Try talking to everyone again.")); - - close2; - setq(.quest, 10); - end; - - case 10: - npctalk3(l("Made any progress yet?")); - end; - - case 11: - npctalk3(l("Then go north and investigate!")); - end; - - case 12: - npctalk3(l("Did you look over the basement?")); - end; - - case 13: - speech( - l("What a strange note."), - l("I'll keep track of this, while you return the mask to the troupe."), - l("I would go myself, but the developers were too lazy to make me walk."), - "...", - l("By the way, stay sharp! I may call upon you again.")); - - close2; - setq(.quest, 14); - end; - - case 14: - npctalk3(l("Please return the mask to the traveling troupe.")); - end; - - case 15: - speech( - l("My men have found all of the stolen items."), - l("They were all in the mining camp."), - l("We still don't know who did it.")); // XXX: feel free to extend this quest beyond this point - - close2; - setq(.quest, 16); - getexp(.reward_exp, 0); - end; - - case 16: - npctalk3(l("Remember to stay sharp. I might need your help on another case.")); - end; - } - - closeclientdialog(); - close; - -OnPCLoginEvent: -OnPCBaseLvUpEvent: - if (BaseLevel >= .min_level && getq(.quest) < 1) - { - setq(.quest, 1); // allow the player to do the quest - dispbottom(l("New quest available: %s (level %d+)", - getquestlink(.quest), .min_level)); // XXX: requires new manaplus versions, maybe show a different message for old versions? - } - end; - -OnInit: - .min_level = 30; // min level to do the quest - - .reward_exp = 2500; - - .quest = HurnscaldQuests_Inspector; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/jack.txt b/npc/placeholder/jack.txt deleted file mode 100644 index 1f205a59..00000000 --- a/npc/placeholder/jack.txt +++ /dev/null @@ -1,313 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states (forest bow): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - alan wants to ask jack -// [1] 3 - jack explained problem -// [1] 4 - alan asks to find wood -// [1] 5 - found perfect wood -// [1] 6 - got the bow -// [2] unused -// [3] unused -// [t] unused -// Quest states (wooden shield): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - jack proposes shield -// [1] 3 - player accepted quest -// [1] 4 - got the shield -// [2] unused -// [3] unused -// [t] unused -// Description: -// Jack Lumber, the handsome lumberjack - -008-1,242,117,0 script Jack NPC_HUMAN_M_ARTIS,{ - - function bow_intro { - speech(4, - l("Why not?!"), - l("I value my life, that's why!")); - - selectd(l("What do you mean?")); - - speech(4, - l("A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest."), - l("These twigleafs are the trees that give me the living wood you speak of."), // XXX: were Log Heads named "Twigleaf" at some point in the past? - l("I was just chopping away with my axe, and guess what happened?"), - l("One of its branches hit me!"), - l("At first, I thought it fell down or the wind blew it, but it hurt!"), - l("After I shook it off and struck the tree again with my axe, another branch hit me!"), - l("I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore."), - l("Even after all that though, I still can't believe what happened next.")); - - selectd(l("What happened?")); - - speech(4, - l("You'll think I'm insane if I tell you...")); - - selectd(l("I won't. I promise.")); - - speech(4, - l("Alright, well..."), - l("After I chopped off a few branches, the whole tree started to move!"), - l("Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk."), - l("The whole tree CAME TO LIFE! It was mad!")); - - selectd(l("Did you run away?"), l("Did you fight it?")); - - speech(4, - l("I fought it, of course!"), - l("I took my axe and attacked the beast!"), - l("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*."), // XXX: that's kinda dirty imho... maybe we could use the narrator? - l("But I didn't give up!"), - l("I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground, motionless.")); - - selectd(l("So you beat the monster? Then why are you so scared?")); - - speech(4, - l("Well, I was exhausted and had to rest."), - l("A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!")); - - selectd(l("Did you fight them too?")); - - speech(4, - l("Are you crazy?"), - l("I barely destroyed one of those beasts."), - l("I was in no shape to fight again!"), - l("I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs, Ha!")); - - selectd(l("So, I guess you aren't chopping down trees anymore?")); - - speech(4, - l("I still do; it's my job."), - l("But I'll no longer chop those twigleafs, I'll tell you that."), - l("I know the bow master wants some twigleaf wood, but I don't care."), - l("I won't risk MY life for a few gold pieces!"), - l("If you really want to, just go to the southwest, but I can't help you."), - l("I won't go there ever again.")); - - selectd(l("Southwest you say? OK, thank you.")); - - speech(l("Don't say I didn't warn you!")); - - // What a huge text wall, I feel sorry for the players - - close2; - setq(.quest_bow, 3); - end; - } - - function bow_good_luck { - if (getq(.quest_inspector) == 2) - { - speech(4, - l("Good luck hunting those tree monsters – you'll need it.")); - - selectd(l("Have you seen anything that might be connected to the recent robberies in town?")); - - speech(l("Sorry, no.")); - close; - } - - npctalk3(l("Good luck hunting those tree monsters – you'll need it.")); - end; - } - - function shield_intro { - speech(4, - l("I have an idea."), - l("What would you say about a new shield?")); - - setq(.quest_shield, 2); - - selectd( - l("No thanks."), - l("Yes, please!"), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); - - switch (@menu) - { - case 1: closeclientdialog(); close; - case 2: - speech( - l("All I need is %d %s.", .logs_amount, getitemlink(.logs_item)), - l("This needn't be high quality wood; pretty much any log you can find should work."), - l("Oh, and I'll also need %s E for other materials.", format_number(.shield_cost))); - - close2; - setq(.quest_shield, 3); - end; - case 3: speech(l("Sorry, no.")); close; - } - } - - function bow_congrats { - speech(4, - l("You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?")); - - selectd( - l("I couldn't afford the bow, though..."), - l("No, I'm still looking."), - l("Yes, I've got the Forest bow now."), - l("I'm a melee warrior, I don't need bows."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); - - switch (@menu) - { - case 3: - if (getq(.quest_bow) <= 5) - { - speech(4, - l("Hrmph."), - l("I'm someone who respects those speaking the truth.")); - } - // fallthrough - case 1: - case 4: - speech(4, - l("You no doubt remember how I struggled with those beasts, fighting for my life."), - l("Scared me, those seven-branched little stumps did!"), - l("Never since that day have I strayed near them, and yet there you are, cutting them down one by one."), - l("I'm proud of you – to dare to fight those trunks is admirable indeed."), - l("You're as strong as if you were my own child!")); - - shield_intro; - break; - case 2: speech(l("You should go talk to Alan again.")); close; - case 5: speech(l("Sorry, no.")); close; - } - } - - function shield_make { - speech(4, - l("Do you have the %d %s and %s E for the shield?", - .logs_amount, getitemlink(.logs_item), format_number(.shield_cost))); - - selectd( - rif(countitem(.logs_item) >= .logs_amount && Zeny >= .shield_cost, - l("Here it is.")), - l("I'll come back later.")); - - if (@menu != 1) { - closeclientdialog(); - close; - } - - speech(4, - l("Have a seat.")); - - narrator(4, - l("Jack saws the logs into pieces and then sands them until they are smooth to the touch."), - l("Applying some strong-smelling liquid, he tans them to a darker hue."), - l("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."), - l("Meanwhile, the sun has dried the other pieces."), - l("Jack places them next to each other, adds a frame, and nails everything together."), - l("The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments."), - l("Finally, he hands the shield to you.")); - - if (checkweight(.shield_item, 1) != true) - { - speech( - l("It seems you can't carry the %s.", getitemlink(.shield_item)), - l("Come back when you do.")); - close; - } - - if (Zeny < .shield_cost || countitem(.logs_item) < .logs_amount) - close; // double-check - - setq(.quest_shield, 4); - delitem(.logs_item, .logs_amount); - getitem(.shield_item, 1); - Zeny -= .shield_cost; - getexp(.shield_exp, 0); - - speech( - l("Enjoy your new shield!")); - - close; - } - - function wood_daily { - speech(4, - l("I hope that my shield will serve you well!")); - - selectd( - l("Me too."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); - - switch (@menu) - { - case 2: speech(l("Sorry, no.")); close; - } - - closeclientdialog(); // TODO: daily quest (needs the generic daily quest script) - close; - } - - // OnTalk: - switch (getq(.quest_shield)) - { - case 2: shield_intro; break; - case 3: shield_make; break; - case 4: wood_daily; break; - } - - switch (getq(.quest_bow)) - { - case 3: - case 4: bow_good_luck; break; - case 5: - case 6: bow_congrats; break; - } - - // initial intro - { - speech(4, - l("Hello there!"), - l("My name is Jack Lumber, the enemy of all trees."), - l("If you need some firewood, just let me know.")); - - selectd( - l("I'll keep that in mind."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?")), - rif(getq(.quest_bow) == 2, l("I heard you aren't delivering any more living wood. Why not?"))); - - switch (@menu) - { - case 2: speech(l("Sorry, no.")); close; - case 3: bow_intro; break; - } - - } - - closeclientdialog(); - close; - -OnInit: - .logs_item = Aquada; // FIXME: change this when we get RawLog - .logs_amount = 40; // XXX: maybe nlogn? - .shield_cost = 5000; // XXX: maybe nlogn? - .shield_exp = 2500; - .shield_item = Aquada; // FIXME: change this when we get WoodenShield - - .quest_bow = HurnscaldQuests_ForestBow; - .quest_shield = HurnscaldQuests_WoodenShield; - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_bow; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/ledmitz.txt b/npc/placeholder/ledmitz.txt deleted file mode 100644 index df7b8d8e..00000000 --- a/npc/placeholder/ledmitz.txt +++ /dev/null @@ -1,55 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-2,43,34,0 script Ledd NPC_HUMAN_M_ARTIS,{ - // XXX: ^ I know it should be Led and Mitz but 4144 made names - // shorter than 4 characters illegal - - deltimer("Mitz::OnTalk"); - addtimer(rand(500, 900), "Mitz::OnTalk"); -OnTalk: - npctalk3(l("Ha! I'll drink muuuch mo.. more than you! Im not ooone biiit dr...dr..unk!")); - // TODO: add more sentences - // XXX: maybe instead of making them respond to a click they should just - // shout at each other at regular intervals? - end; - -OnInit: - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} - -008-2-2,46,34,0 script Mitz NPC_HUMAN_M_ARTIS,{ - - deltimer("Ledd::OnTalk"); - addtimer(rand(500, 900), "Ledd::OnTalk"); -OnTalk: - npctalk3(l("I can still drink more! Better give up you... you... teelotaler! MORE BEER MELINDA!")); - // TODO: add more sentences - end; - -OnInit: - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/macgowan.txt b/npc/placeholder/macgowan.txt deleted file mode 100644 index 2f65b9fe..00000000 --- a/npc/placeholder/macgowan.txt +++ /dev/null @@ -1,21 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-8,38,29,0 script Macgowan NPC_HUMAN_M_ARTIS,{ - npctalk3(l("Hello, I am Macgowan, apprentice to Nicholas.")); - end; - -OnInit: - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/malek.txt b/npc/placeholder/malek.txt deleted file mode 100644 index 219a059a..00000000 --- a/npc/placeholder/malek.txt +++ /dev/null @@ -1,65 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,233,42,0 script Malek NPC_HUMAN_M_ARTIS,{ - - if (getq(.quest_inspector) == 11) - { - speech(4, - l("Hi, can I help you at all?")); - - selectd( - l("The inspector sent me here to investigate.")); - - speech(4, - l("Yeah, we did hear a commotion."), - l("We thought we heard someone go down to the basement, but we checked the whole place over and didn't see anything out of the ordinary.")); - - close2; - setq(.quest_inspector, 12); - end; - } - - npctalk3(generic(32 | 256)); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/mikhail.txt b/npc/placeholder/mikhail.txt deleted file mode 100644 index e071e914..00000000 --- a/npc/placeholder/mikhail.txt +++ /dev/null @@ -1,131 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - bernard wants roasted maggot -// [1] 3 - brought maggot -// [1] 4 - bernard wants maggot slime -// [1] 5 - brought maggot slime -// [1] 6 - mikhail needs maggot slime -// [1] 7 - brought maggot slime -// [2] unused -// [3] unused -// [t] unused -// Description: -// takes part in the slime soup quest (Bernard) - -008-1,308,72,0 script Mikhail NPC_HUMAN_M_ARTIS,{ - - function soup_scared { - speech 4, - l("Hello..."), - l("I'm supposed to be helping Bernard from the Inn but..."); - - narrator 4, - l("His eyes grow wide"); - - speech 4, - l("Eeekkk another one."); - - narrator - l("It seems that the boy would like to say more, but seems too terrified at the moment."), - l("Maybe you should help someone else first, so that he sees your intentions are good."); - - close; - } - - function soup_intro2 { - speech 4, - l("Bernard sent me to get %d %s from the %s in the fields, but they scare me so bad!", - .third_item_qty, getitemlink(.third_item), getmonsterlink(.third_item_mob)), - l("You look like a nice person."), - l("Would you go get them for me?"); - - selectd - l("Of course, I'll go get them for you."); - - speech - l("Thank you so much!"), - l("I'll wait for you here."); - - setq .quest, 6; - close; - } - - function soup_reminder_slime2 { - speech - l("Did you bring me the %d %s I need?", - .third_item_qty, getitemlink(.third_item)), - l("It doesn't look like you have them all..."); - close; - } - - function soup_reward_slime2 { - speech - l("Did you bring me the %d %s I need?", - .third_item_qty, getitemlink(.third_item)), - l("Ooh!"), - l("Thank you so much!"), - l("I can get back to Bernard now!"); - - if (countitem(.third_item) < .third_item_qty) - close; // double-check - - delitem .third_item, .third_item_qty; - setq .quest, 7; - getexp .third_reward_exp, 0; - close; - } - - function soup_thanks_slime2 { - speech - l("Thanks again for helping me!") + " %%Q"; - - close; - } - - switch(getq(.quest)) - { - - case 0: - case 1: - case 2: - case 3: - case 4: soup_scared; break; - case 5: soup_intro2; break; - case 6: - if (countitem(.third_item) < .third_item_qty) - soup_reminder_slime2; - else - soup_reward_slime2; - break; - default: soup_thanks_slime2; - } - - closeclientdialog(); - close; - -OnInit: - .third_item = Aquada; // FIXME: change this when we have MaggotSlime - .third_item_qty = 5; - .third_item_mob = Fluffy; // FIXME: change this when we have Maggot - - .third_reward_exp = 100; - - .quest = HurnscaldQuests_Soup; - .quest_debug = .quest; - .sex = G_MALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/milly.txt b/npc/placeholder/milly.txt deleted file mode 100644 index 03c39d42..00000000 --- a/npc/placeholder/milly.txt +++ /dev/null @@ -1,109 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states (inspector): -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,282,112,0 script Milly NPC_HUMAN_M_ARTIS,{ - - // TODO: make the actual beanie copter quest after those are finished: - // [X] Inspector quest - // [ ] Bone knife quest - // [ ] Setzer quest - // [ ] Rossy quest - // [ ] Cindy quest - - .@q_inspector = getq(.quest_inspector); - - speech(4, - l("Hello traveler, welcome to Hurnscald."), - l("Have you met Kfahr yet?"), - l("He is the greatest hero that ever walked the land of Hurnscald!")); - - selectd( - l("Hi! No, I haven't seen him yet."), - l("Where can I find him?"), - l("Mh, I don't care for heroes."), - l("Hello, yes I have met him."), - rif(.@q_inspector == 2, l("Have you seen anything strange lately?")), - rif(.@q_inspector == 2, l("Do you know anything about the recent robberies?"))); - - switch (@menu) - { - case 3: - speech(4, - l("What?"), - l("Surely you do not appreciate what a hero he is!"), - l("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."), // XXX: this sentence seems too complicated to come from a child's mouth - l("Put on your thinking cap and be propelled into high adventure!"), - l("Go to Kfahr, and listen to his stories."), - l("You can't have met him."), - l("No one who has met him would say such silly things.")); - // fallthrough - - case 1: - speech(4, - l("I highly recommend you seek him out!")); - // fallthrough - - case 2: - speech( - l("He is a regular at the inn, located in the north-west part of town."), - l("If you are lucky he might tell you a story about his adventures.")); - break; - - case 4: - speech( - l("Oh, I hope you stayed and listened to his stories about his adventures.")); - break; - - case 5: - speech( - l("I haven't seen anything strange.")); - break; - - case 6: - speech( - l("No, sorry.")); - break; - } - - close; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; // TODO: change this to the milly quest debug when it exists - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/nicholas.txt b/npc/placeholder/nicholas.txt deleted file mode 100644 index 17f44d19..00000000 --- a/npc/placeholder/nicholas.txt +++ /dev/null @@ -1,26 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-8,40,27,0 script Nicholas NPC_HUMAN_M_ARTIS,{ - speech( - l("Hello, there!"), - l("I'm an expert blacksmith."), - l("If you get me some Coal and Iron Ingots, I could make you a very valuable shield or helmet.")); - - // TODO: setzer quest - close; - -OnInit: - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/note.txt b/npc/placeholder/note.txt deleted file mode 100644 index f449ac89..00000000 --- a/npc/placeholder/note.txt +++ /dev/null @@ -1,28 +0,0 @@ -// Evol scripts. -// Author: -// gumi - -008-2-2,32,28,0 script Note#Hurnscald:pub NPC_PAPER_NOTE,{ - narrator(8, - l("We refuse service to anyone who:"), - l("• Has a bubblehead"), - l("• Is not properly shaded"), - l("• Can't walk without stopping after every step")); - - // In case you don't get the joke, know that it's a parody on Illutia. - - close; - -OnInit: - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/nurse.txt b/npc/placeholder/nurse.txt deleted file mode 100644 index ee14cd9f..00000000 --- a/npc/placeholder/nurse.txt +++ /dev/null @@ -1,101 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-2-12,28,30,0 script Nurse NPC_HUMAN_M_ARTIS,{ - - speech(4, - l("How can I help you?")); - - // TODO: check for AxeHat when we get it - // XXX: this npc used to teach the resist poison skill, do we still want that? - - selectd( - l("Oooh, these wounds! They hurt so much!"), - l("I don't feel so well, I might be sick."), - l("No, I'm fine."), - rif(getq(.quest_inspector) == 2, l("Have you seen anything out of the ordinary?"))); - - switch (@menu) - { - case 1: - if (BaseLevel > .heal_max_level) - { - speech( - l("I'm sorry but I'm here only to help young people."), // XXX: this sounds cruel towards elderly people - l("Your level is already higher than %d.", .heal_max_level), - l("You can get some rest at the inn near here.")); - close; - } - speech(4, - l("Here, let me heal you.")); - - npcskill(AL_HEAL, .heal_skill_level, .heal_npc_stats, .heal_npc_level); - - speech( - l("There you go, like new.")); - close; - case 2: - speech( - l("Then you should better see the doctor."), - l("He is usually in his office on the 3rd floor.")); - close; - case 3: - speech( - l("Then I would ask you to leave."), - l("There are people who really need our help.")); - close; - case 4: - speech( - l("I'm too busy here to observe the town.")); - close; - } - - - end; - -OnInit: - .heal_max_level = 20; // she will only heal low level players - - .heal_skill_level = 10; // what level of the healing skill to use - .heal_npc_stats = 99; // what stat points the NPC has - .heal_npc_level = 60; // what level the npc has - - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/old-man.txt b/npc/placeholder/old-man.txt deleted file mode 100644 index 6914e50c..00000000 --- a/npc/placeholder/old-man.txt +++ /dev/null @@ -1,90 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,293,124,0 script Old Man NPC_HUMAN_M_ARTIS,{ - - function oldman_ask { - speech(4, - l("Hi there, need something?")); - - selectd( - l("Have you seen anything strange lately?"), - l("Do you know anything about the recent robberies?")); - - speech( - l("I'm sorry, but I didn't see anything."), - l("You should ask my old woman.")); - close; - } - - function oldman_accuse { - speech(4, - l("Found anything new?")); - - selectd( - l("The leader of the troupe said you hung around them a lot while they were in town.")); - - speech( - l("Yes, I hung around the theater a lot."), - l("I was an actor when I was younger."), - l("But I wasn't there that night."), - l("Me and the wife were at home all night.")); - - close2; - setq(.quest_inspector, 8); - end; - } - - // OnTalk: - switch (getq(.quest_inspector)) - { - case 2: oldman_ask; break; - case 7: oldman_accuse; break; - } - - // initial intro - npctalk3(l("Don't let those monsters get to you.")); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_MALE; - .distance = 1; // this npc has bad hearing - .speed = 2000; // this npc is very old - // TODO: move graph (after the Hurnscald map is finalized) - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/old-woman.txt b/npc/placeholder/old-woman.txt deleted file mode 100644 index 2a2591b4..00000000 --- a/npc/placeholder/old-woman.txt +++ /dev/null @@ -1,137 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,230,113,0 script Old Woman NPC_HUMAN_M_ARTIS,{ - - function is_inspector { - return (getequipcardid(EQI_HEAD_MID, 0) == NavyBlueCottonDye /*&& - getequipcardid(EQI_HEAD_LOW, 0) == NavyBlueCottonDye*/); // TODO / FIXME: remove the /* */ whenever we have cotton pants - } - - function oldwoman_ask { - speech(4, - l("Hello deary.")); - - selectd( - l("Have you seen anything strange lately?"), - l("Do you know anything about the recent robberies?")); - - .@q = getq(.quest_inspector); - - if (!is_inspector()) - { - speech(l("Yes, but I'm only talking to the inspector himself!")); - - close2; - if (.@q < 3) - setq(.quest_inspector, 3); - end; - } - - if (.@q == 2 || .@q == 3) - { - speech( - l("I saw someone sneaking around town wearing a theater mask."), - l("It looked like one of the masks used by the troupe that was in town recently.")); - - close2; - setq(.quest_inspector, 4); - } - - else if (.@q == 10) - { - speech( - l("I've remembered something else."), - l("The night the troupe left, I saw someone with a theater mask take a large satchel out of town."), - l("He was heading north.")); - - close2; - setq(.quest_inspector, 11); - } - - end; - } - - function oldwoman_alibi { - speech(4, - l("Hello deary.")); - - selectd( - l("Was your husband with you at home all night the last night that the troupe was in town?")); - - speech( - l("Yes, we were both at home all night.")); - - close2; - setq(.quest_inspector, 9); - end; - } - - function oldwoman_filler { - npctalk3(l("I hope you catch that naughty person!")); - end; - } - - // OnTalk: - switch (getq(.quest_inspector)) - { - case 2: - case 3: oldwoman_ask; break; - case 4: - case 5: - case 6: - case 7: oldwoman_filler; break; - case 8: - case 9: oldwoman_alibi; break; - case 10: oldwoman_ask; break; - } - - // initial intro - if (BaseLevel < 40) - npctalk3(l("Watch out for these flowers. They don't like to be messed with.")); - else - npctalk3(l("Hello deary.")); - end; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 1; // this npc has bad hearing - .speed = 2000; // this npc is very old - // TODO: move graph (after the Hurnscald map is finalized) - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/sabine.txt b/npc/placeholder/sabine.txt deleted file mode 100644 index 1d0cc38a..00000000 --- a/npc/placeholder/sabine.txt +++ /dev/null @@ -1,64 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,291,97,0 script Sabine NPC_HUMAN_M_ARTIS,{ - - if (getq(.quest_inspector) != 2) - { - npctalk3(generic(1 | 16)); - end; - } - - speech(4, - l("Isn't this place pretty?"), - l("I love hanging out here!")); - - selectd( - l("Have you seen anything strange lately?"), - l("Do you know anything about the recent robberies?")); - - speech( - l("No, sorry.")); - - close; - -OnInit: - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/soul-menhir.txt b/npc/placeholder/soul-menhir.txt deleted file mode 100644 index 0b2d177d..00000000 --- a/npc/placeholder/soul-menhir.txt +++ /dev/null @@ -1,58 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Description: -// place of power, mana refills faster when sitting nearby - -008-1,253,112,0 script Soul Menhir#hurnscald NPC_HUMAN_M_ARTIS,{ - - end; - -OnRefill: - @menhir_lock = false; - getmapxy(.@map$, .@x, .@y, UNITTYPE_PC); - - if (.@map$ != .map$ || distance(.x, .y, .@x, .@y) > .refill_distance || - !(issit())) - end; - - heal(0, .refill_rate); - end; - - -OnTimer500: - .@count = getunits(BL_PC, .@units[0], false, .map$, (.x - .refill_distance), - (.y - .refill_distance), (.x + .refill_distance), (.y + .refill_distance)); - - for (.@i = 0; .@i < .@count; ++.@i) - { - if (.@units[.@i] < 0) continue; // pre-check, just in case - deltimer(.name$ + "::OnRefill", .@units[.@i]); - if (gettimer(TIMER_COUNT, .@units[.@i], .name$ + "::OnRefill") > 0 || - getvariableofpc(@menhir_lock, .@units[.@i])) { - continue; - } - set(getvariableofpc(@menhir_lock, .@units[.@i]), true); - addtimer(rand(.refill_timer), .name$ + "::OnRefill", .@units[.@i]); - } - - initnpctimer(); - end; - -OnInit: - - .refill_rate = 1; // number of SP to give every refill - .refill_distance = 7; // max distance - .refill_timer = 200; // wait rand(X) ms before refill - initnpctimer(); - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/placeholder/troupe-leader.txt b/npc/placeholder/troupe-leader.txt deleted file mode 100644 index 05f20e6a..00000000 --- a/npc/placeholder/troupe-leader.txt +++ /dev/null @@ -1,119 +0,0 @@ -// Evol scripts. -// Author: -// gumi -// Quest states: -// [1] 0 - cannot do the quest -// [1] 1 - can do the quest -// [1] 2 - talked to inspector (1) <= start -// [1] 3 - talked to old woman (1) -// [1] 4 - talked to old woman (2) -// [1] 5 - talked to inspector (2) -// [1] 6 - talked to troupe leader (1) -// [1] 7 - talked to inspector (3) -// [1] 8 - talked to old man -// [1] 9 - talked to old woman (3) -// [1] 10 - talked to inspector (4) -// [1] 11 - talked to old woman (4) -// [1] 12 - talked to malek -// [1] 13 - searched the bookcase -// [1] 14 - talked to inspector (5) -// [1] 15 - talked to troupe leader (2) <= reward -// [1] 16 - talked to inspector (6) <= reward, end -// [2] unused -// [3] unused -// [t] unused -// Description: -// robberies in hurnscald - -008-1,306,115,0 script Troupe Leader NPC_HUMAN_M_ARTIS,{ - - function nohmask_question { - // XXX: shouldn't the player ask a question before she replies Yes? this feels too abrupt - speech(4, - l("Yes, a mask was stolen from us the last night we were in Hurnscald.")); - - selectd( - l("Any ideas on who might have taken it?"), - l("Are you sure one of your troupe members didn't hide it and commit those robberies?"), - l("Hmm...")); - - switch (@menu) - { - case 1: - speech( - l("Hm..."), - l("I did see an old man hang out near the theater after our last show.")); - close2; - setq(.quest_inspector, 6); - close; - - case 2: - speech( - l("I am absolutely positive."), - l("None of my troupe have left the city since we got here."), - l("Good day!")); - close; - } - - closeclientdialog(); - close; - } - - function nohmask_found { - // XXX: shouldn't the player say "I found your mask" before the npc says thanks? - speech(4, - l("Thank you for finding the mask."), - l("You did such a good job, you should keep it.")); - - if (checkweight(.reward_item, 1) != true) - { - speech(8, - l("It seems you can't carry it right now...")); - close; - } - - setq(.quest_inspector, 15); - getexp(.reward_exp, 0); - getitem(.reward_item, 1); - - speech( - l("We don't need it anymore."), - l("We're doing different shows here.")); - close; - } - - // OnTalk: - switch (getq(.quest_inspector)) - { - case 5: nohmask_question; break; - // XXX: shouldn't it have an in-between state where it says good luck or something? - case 14: nohmask_found; break; - // XXX: shouldn't it have a "completed" state where it says thanks, come back any time? - } - - // initial intro - speech( - l("Hello."), - l("I'm the leader of a traveling theater troupe."), - l("We'll be staying here in Tulimshar for a while.")); - close; - -OnInit: - .reward_item = Aquada; // FIXME: change this when we get NohMask - .reward_exp = 1500; - - .quest_inspector = HurnscaldQuests_Inspector; - .quest_debug = .quest_inspector; - .sex = G_FEMALE; - .distance = 3; - -////////// UNFINISHED ////////// -//////////////////////////////// -// REMOVE THIS CODE WHEN THIS // -// NPC IS NO LONGER A WIP ////// -//////////////////////////////// -if (!debug) disablenpc(.name$); -///////// UNFINISHED /////////// - - end; -} diff --git a/npc/scripts.conf b/npc/scripts.conf index a5ed16ba..91d5b218 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -116,26 +116,6 @@ "npc/config/hairstyle_config.txt", // placeholder scripts -"npc/placeholder/hinnak.txt", -"npc/placeholder/mikhail.txt", -"npc/placeholder/bernard.txt", -"npc/placeholder/ledmitz.txt", -"npc/placeholder/jack.txt", -"npc/placeholder/inspector.txt", -"npc/placeholder/alan.txt", -"npc/placeholder/troupe-leader.txt", -"npc/placeholder/old-man.txt", -"npc/placeholder/old-woman.txt", -"npc/placeholder/books.txt", -"npc/placeholder/malek.txt", -"npc/placeholder/milly.txt", -"npc/placeholder/sabine.txt", -"npc/placeholder/doctor.txt", -"npc/placeholder/nurse.txt", -"npc/placeholder/soul-menhir.txt", -"npc/placeholder/note.txt", -"npc/placeholder/macgowan.txt", -"npc/placeholder/nicholas.txt", //"npc/placeholder/angus.txt", //"npc/placeholder/caul.txt", //"npc/placeholder/receptionist.txt", -- cgit v1.2.3-60-g2f50