summaryrefslogtreecommitdiff
path: root/npc/008-1
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2018-12-31 19:09:49 -0200
committerJesusaves <cpntb1@ymail.com>2018-12-31 19:09:49 -0200
commit2f16d8b8c34257733180058c82415d395ea27474 (patch)
tree09a7e0b77ba01cfade269593ee88c02122fd5976 /npc/008-1
parentf4ac215d94dc2c5eb58675f79e0be87932f78cc3 (diff)
parent28fdcc18ff9c80fea20414482ecc7c74fd0bf9cf (diff)
downloadserverdata-jesusalva/GuidedTour.tar.gz
serverdata-jesusalva/GuidedTour.tar.bz2
serverdata-jesusalva/GuidedTour.tar.xz
serverdata-jesusalva/GuidedTour.zip
Merge branch 'master' into jesusalva/GuidedTourjesusalva/GuidedTour
Diffstat (limited to 'npc/008-1')
-rw-r--r--npc/008-1/_import.txt14
-rw-r--r--npc/008-1/_warps.txt1
-rw-r--r--npc/008-1/auldsbel.txt20
-rw-r--r--npc/008-1/banu.txt21
-rw-r--r--npc/008-1/doors.txt6
-rw-r--r--npc/008-1/hinnak.txt354
-rw-r--r--npc/008-1/jack.txt314
-rw-r--r--npc/008-1/mikhail.txt131
-rw-r--r--npc/008-1/milly.txt109
-rw-r--r--npc/008-1/old-man.txt90
-rw-r--r--npc/008-1/old-woman.txt137
-rw-r--r--npc/008-1/oscar.txt20
-rw-r--r--npc/008-1/sabine.txt64
-rw-r--r--npc/008-1/snarfles.txt20
-rw-r--r--npc/008-1/soul-menhir.txt58
-rw-r--r--npc/008-1/voltain.txt19
-rw-r--r--npc/008-1/wateranimation.txt4
17 files changed, 1373 insertions, 9 deletions
diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt
index b7797bf0..31bb5966 100644
--- a/npc/008-1/_import.txt
+++ b/npc/008-1/_import.txt
@@ -2,7 +2,19 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/008-1/_mobs.txt",
"npc/008-1/_warps.txt",
+"npc/008-1/auldsbel.txt",
+"npc/008-1/banu.txt",
"npc/008-1/confused-tree.txt",
-"npc/008-1/doors.txt",
+"npc/008-1/hinnak.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/_warps.txt b/npc/008-1/_warps.txt
index ab1728ed..46e9891d 100644
--- a/npc/008-1/_warps.txt
+++ b/npc/008-1/_warps.txt
@@ -24,3 +24,4 @@
008-1,257,130,0 warp #008-1_257_130 0,0,008-2-28,25,31
008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24
008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39
+008-1,20,85,0 warp #008-1_20_85 0,1,008-1-1,246,85
diff --git a/npc/008-1/auldsbel.txt b/npc/008-1/auldsbel.txt
new file mode 100644
index 00000000..cf4cd16e
--- /dev/null
+++ b/npc/008-1/auldsbel.txt
@@ -0,0 +1,20 @@
+// Evol scripts.
+// Author:
+// Micksha
+// Description:
+// Auldsbel the Magician.
+// THIS IS A PLACEHOLDER!
+
+008-1,119,114,0 script Auldsbel#008-1 NPC_WIZARD,{
+ speech
+ l("Hello."),
+ l("Oh, you look more interested in magic.. the brotherhood did forbid most of the interesting paths of magic, but boring baby spells are still allowed."),
+ lg("If you come back later, I may teach you something. But psst, practising magic is quite dangerous these days.");
+
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/008-1/banu.txt b/npc/008-1/banu.txt
new file mode 100644
index 00000000..d8040153
--- /dev/null
+++ b/npc/008-1/banu.txt
@@ -0,0 +1,21 @@
+// Evol scripts.
+// Author:
+// Micksha
+// Description:
+// Banu, the old lady.
+// THIS IS A PLACEHOLDER!
+
+008-1,244,88,0 script Banu#008-1 NPC_OLD_LADY,{
+ speech
+ l("Hello."),
+ l("You don't have a scythe, by chance? I am too old to mew this field all alone."),
+ l("I asked Hinnak, but he wants at least a beer in exchange for his scythe."),
+ lg("But I hate alcohol, so thats not an option for me.");
+
+ close;
+
+OnInit:
+ .sex = G_FEMALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/008-1/doors.txt b/npc/008-1/doors.txt
deleted file mode 100644
index de8ed1d8..00000000
--- a/npc/008-1/doors.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-008-1,104,27,0 script CottageDoor NPC_WARP,0,0,{
- end;
-
-OnTouch:
- dispbottom(l("Locked."));
-}
diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt
new file mode 100644
index 00000000..08b6242a
--- /dev/null
+++ b/npc/008-1/hinnak.txt
@@ -0,0 +1,354 @@
+// Evol scripts.
+// Author:
+// gumi, Micksha
+// 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 the same stuff than ever.
+
+008-1,270,74,0 script Hinnak#008-1 NPC_HINNAK,{
+
+ 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 = Pinkie; // monster to kill
+ .monster_drop = PinkAntennae; // monster drop to collect
+ .drop_count = 10; // amount of that drop needed
+ .kill_count = 10; // min number of kills
+ .reward_item = Scythe; // reward item
+ .reward_money = 0; // reward money
+ .reward_exp = 0; // reward exp
+ .bad_hat = PinkieHat; // hinnak attacks you when you wear this hat
+ .drink_item = Beer; // the item hinnak asks to drink
+
+ .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/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/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
new file mode 100644
index 00000000..0ea17a1c
--- /dev/null
+++ b/npc/008-1/milly.txt
@@ -0,0 +1,109 @@
+// 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,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 = 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/oscar.txt b/npc/008-1/oscar.txt
new file mode 100644
index 00000000..9541da7b
--- /dev/null
+++ b/npc/008-1/oscar.txt
@@ -0,0 +1,20 @@
+// Evol scripts.
+// Author:
+// Micksha
+// Description:
+// Oscar the farmer.
+// THIS IS A PLACEHOLDER!
+
+008-1,160,77,0 script Oscar#008-1 NPC_CAUL,{
+ speech
+ l("Hi, my name is Oscar."),
+ l("I used to be a farmer, but my magic attempts were banned by the gouvernment."),
+ lg("Now I remain poor and unemployed.");
+
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ 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/snarfles.txt b/npc/008-1/snarfles.txt
new file mode 100644
index 00000000..6ad08867
--- /dev/null
+++ b/npc/008-1/snarfles.txt
@@ -0,0 +1,20 @@
+// Evol scripts.
+// Author:
+// Micksha
+// Description:
+// Snarfles the mouboo farmer.
+// THIS IS A PLACEHOLDER!
+
+008-1,79,118,0 script Snarfles#008-1 NPC_SNARFLES,{
+ speech
+ l("My Mouboos, my beloved Mouboos!"),
+ l("Oh, hi, isn't it cool to live among all those Mouboos? I don't understand how some people can eat Mouboo steak."),
+ lg("Murderers!");
+
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/008-1/soul-menhir.txt b/npc/008-1/soul-menhir.txt
new file mode 100644
index 00000000..3c295c92
--- /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,252,111,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-1/voltain.txt b/npc/008-1/voltain.txt
new file mode 100644
index 00000000..b5f82db0
--- /dev/null
+++ b/npc/008-1/voltain.txt
@@ -0,0 +1,19 @@
+// Evol scripts.
+// Author:
+// Micksha
+// Description:
+// Voltain the dark druid.
+// THIS IS A PLACEHOLDER!
+
+008-1,182,155,0 script Voltain#008-1 NPC_DARK_DRUID,{
+ speech
+ l("Go away, I have to think about new evil doings."),
+ lg("GO AWAY, I SAID!");
+
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/008-1/wateranimation.txt b/npc/008-1/wateranimation.txt
index 8b66f637..74ff5fd9 100644
--- a/npc/008-1/wateranimation.txt
+++ b/npc/008-1/wateranimation.txt
@@ -5,5 +5,5 @@
// Description:
// Water animations, splash, fishes, etc...
-008-1,139,32,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH
-008-1,140,40,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH
+008-1,311,97,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH
+008-1,314,139,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH