//================= Hercules Script =======================================
//=       _   _                     _
//=      | | | |                   | |
//=      | |_| | ___ _ __ ___ _   _| | ___  ___
//=      |  _  |/ _ \ '__/ __| | | | |/ _ \/ __|
//=      | | | |  __/ | | (__| |_| | |  __/\__ \
//=      \_| |_/\___|_|  \___|\__,_|_|\___||___/
//================= License ===============================================
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
//= Copyright (C) 2013-2015  Hercules Dev Team
//= Copyright (C)  Joseph
//= Copyright (C)  Euphy
//=
//= Hercules is free software: you can redistribute it and/or modify
//= it under the terms of the GNU General Public License as published by
//= the Free Software Foundation, either version 3 of the License, or
//= (at your option) any later version.
//=
//= This program is distributed in the hope that it will be useful,
//= but WITHOUT ANY WARRANTY; without even the implied warranty of
//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//= GNU General Public License for more details.
//=
//= You should have received a copy of the GNU General Public License
//= along with this program.  If not, see <http://www.gnu.org/licenses/>.
//=========================================================================
//= Malangdo Culvert
//================= Description ===========================================
//= Clean the culverts and defeat the Coelacanth.
//= Daily and weekly quests are available.
//= Contains a normal mode and hard mode.
//================= Current Version =======================================
//= 1.1
//=========================================================================

//== Quest NPCs ============================================
mal_in01,172,28,2	script	Albo#mal	4_CAT_SAILOR5,{
	if (checkweight(Knife, 1) == 0) {
		mes("You have too many kinds of objects. Try to continue after reducing those objects.");
		close();
	}
	if (MaxWeight - Weight < 1000) {
		mes("You have too many heavy objects. Try to continue after reducing your weight.");
		close();
	}
	if (BaseLevel < 90) {
		mes("[Albo]");
		mes("Who are you?");
		mes("We don't need a weaking!!");
		close();
	}
	setarray(.@quests[0], 12271, 12272, 12273, 12274);
	setarray(.@names$[0],
		_("General Culvert Daily Service"), _("^990000Hard Culvert Daily Service^000000"),
		_("General Culvert Weekly Service"), _("^990000Hard Culvert Weekly Service^000000"));
	.@menu$ = _("Why are doing this job?:");
	for(.@i = 0; .@i<4; ++.@i) {
		if (questprogress(.@quests[.@i], PLAYTIME)) {
			.@status[.@i] = 2;
			.@menu$ += _("^aaaaaa- There is no new task -^000000:");
		} else if (.@i%2 && BaseLevel < 140) {
			.@status[.@i] = 0;
			.@menu$ += _("^aaaaaaCan't take this job because level is too low^000000:");
		} else {
			.@status[.@i] = 1;
			.@menu$ += .@names$[.@i]+":";
		}
	}
	mes("[Albo]");
	mes("We crossed the sea!");
	mes("We are great heroes of Culvert! We do not forgive the seafood that aims at Culvert!");
	next();
	.@i = select(.@menu$) - 1;
	if (.@i == 0) {
		mes("[Albo]");
		mes("We used to be the henchmen of Mr. Missing! We almost became guards of such a historic site.");
		next();
		mes("[Albo]");
		mes("However, when sea water flooded all precious the resources, my dream... all my dreams melted away...");
		next();
		mes("[Albo]");
		mes("We do not forgive the seafood that invaded our territory. I'll eat them with spicy paste!!!");
		next();
		mes("^0000ffAlbo's voice shakes with anger. He smacked his lips when he mentioned spicy paste.^000000");
		close();
	}
	switch (.@status[.@i - 1]) {
	case 0:
		mes("[Albo]");
		mes("That task is really hard for you, so I can't tell you about it. Why don't you find another one?");
		close();
	case 1:
		break;
	case 2:
		mes("[Albo]");
		mes("I'm sorry. There is no new task yet! If I find any work, I'll tell you so!");
		close();
	}
	switch (.@i) {
	case 1: // General Culvert Daily Service
		switch (rand(1, 6)) {
		case 1:
			callsub(L_GiveQuest, .@i, 12255, 12271, _("Deep Sea Crab"));
		case 2:
			callsub(L_GiveQuest, .@i, 12256, 12271, _("Deep Sea Marse"));
		case 3:
			callsub(L_GiveQuest, .@i, 12257, 12271, _("Deep Sea Vadon"));
		case 4:
			callsub(L_GiveQuest, .@i, 12258, 12271, _("Deep Sea Shellfish"));
		case 5:
			callsub(L_GiveQuest, .@i, 12259, 12271, _("Deep Sea Kukre"));
		case 6:
			callsub(L_GiveQuest, .@i, 12260, 12271, _("Deep Sea Cornutus"));
		}
	case 2: // Hard Culvert Daily Service
		switch (rand(1, 6)) {
		case 1:
			callsub(L_GiveQuest, .@i, 12261, 12272, _("Deep Sea Marc"));
		case 2:
			callsub(L_GiveQuest, .@i, 12262, 12272, _("Deep Sea Sword Fish"));
		case 3:
			callsub(L_GiveQuest, .@i, 12263, 12272, _("Deep Sea Strouf"));
		case 4:
			callsub(L_GiveQuest, .@i, 12264, 12272, _("Deep Sea Anolian"));
		case 5:
			callsub(L_GiveQuest, .@i, 12265, 12272, _("Deep Sea Obeanue"));
		case 6:
			callsub(L_GiveQuest, .@i, 12266, 12272, _("Deep Sea Kapha"));
		}
	case 3: // General Culvert Weekly Service
		switch (rand(1, 2)) {
		case 1:
			callsub(L_GiveQuest, .@i, 12267, 12273, _("Weird Coelacanth"));
		case 2:
			callsub(L_GiveQuest, .@i, 12268, 12273, _("Gloomy Coelacanth"));
		}
	case 4: // Hard Culvert Weekly Service
		switch (rand(1, 2)) {
		case 1:
			callsub(L_GiveQuest, .@i, 12269, 12274, _("Violent Coelacanth"));
		case 2:
			callsub(L_GiveQuest, .@i, 12270, 12274, _("Mutant Coelacanth"));
		}
	default:
		mes("[Albo]");
		mes("Uh!? Where is the task? Let me find that quickly. You must speak with Madeca!");
		close();
	}
	end;

// callsub(L_GiveQuest, .@i, <quest 1>, <quest 2>, <monster>);
L_GiveQuest:
	setquest(getarg(1));
	setquest(getarg(2));
	mes("[Albo]");
	mes("Today, the heroes of Culvert!");
	mesf("We raise our voices and set a date for the extermination of ^0000ff%s^000000!", getarg(3));
	next();
	mes("[Albo]");
	switch (getarg(0)) {
	case 1:
	case 2:
		mes("Come on, heroes! Don't be afraid of them! Just go on, since it's a one-day mission!");
		break;
	case 3:
		mes("I'll give you one week to finish this job! Terminate all of them in Culvert Dungeon, Normal Mode!");
		break;
	case 4:
		mes("I'll give you one week to finish this job! Terminate all of them in Culvert Dungeon, Hard Mode!");
		break;
	}
	next();
	mesf("You received a request for the Extermination of ^005500%s^000000. If you need more details, please check the quest window.", getarg(3));
	close();
}

mal_in01,172,26,2	script	Madeca#mal	4_CAT_SAILOR1,{
	if (checkweight(Knife, 1) == 0) {
		mes("You have too many kinds of objects. Try to continue after reducing those objects.");
		close();
	}
	if (MaxWeight - Weight < 1000) {
		mes("You have too many heavy objects. Try to continue after reducing your weight.");
		close();
	}
	if (BaseLevel < 90) {
		mes("[Madeca]");
		mes("Karrrrrrr!!");
		mes("Let's have some bad seafood that can be boiled or grilled!");
		next();
		mes("[Madeca]");
		mes("Who are you? You are such a totterer. Even seaweed could kill you!");
		close();
	}
	mes("[Madeca]");
	mes("Oh?");
	mes("You're the one who took care of my big brother Albo's request. It was a hard job!");
	next();
	.@i = select("What are you doing here?", "General Culvert Daily Service Compensation", "Hard Culvert Daily Service Compensation", "General Culvert Weekly Service Compensation", "Hard Culvert Weekly Service Compensation") - 1;
	if (.@i == 0) {
		mes("[Madeca]");
		mes("I'm here to help my big brother Albo!");
		next();
		mes("[Madeca]");
		mes("We provide precious materials to humans who make sludge out of the bad seafood in the Culverts!");
		next();
		mes("[Madeca]");
		mes("We provide A~B Grade Coins as compensation for daily service, and the precious Sea God's Wrath as compensation for weekly service.");
		next();
		mes("[Madeca]");
		mes("If you take care of big brother Albo's request, I will see you very often. So, let's stay close!");
		close();
	}
	mes("[Madeca]");
	mes("I can't give you compensation for an expired request, so let me check if any of yours have expired.");
	next();
	specialeffect(EF_SPHERE, AREA, playerattached());
	progressbar(sprintf("0x%x", C_YELLOW), 3);
	specialeffect(EF_STEAL, AREA, playerattached());
	switch (.@i) {
	case 1: // General Culvert Daily Service
		if (questprogress(12271, PLAYTIME) == 2) {
			callsub(L_EraseQuest, 12255, 12256, 12257, 12258, 12259, 12260, 12271);
		} else {
			// Reward: 2x B Grade Coin
			callsub(L_CheckQuest, 12255, _("Deep Sea Crab"), Bgrade_Coin, 2);
			callsub(L_CheckQuest, 12256, _("Deep Sea Marse"), Bgrade_Coin, 2);
			callsub(L_CheckQuest, 12257, _("Deep Sea Vadon"), Bgrade_Coin, 2);
			callsub(L_CheckQuest, 12258, _("Deep Sea Shellfish"), Bgrade_Coin, 2);
			callsub(L_CheckQuest, 12259, _("Deep Sea Kukre"), Bgrade_Coin, 2);
			callsub(L_CheckQuest, 12260, _("Deep Sea Cornutus"), Bgrade_Coin, 2);
		}
		break;
	case 2: // Hard Culvert Daily Service
		if (questprogress(12272, PLAYTIME) == 2) {
			callsub(L_EraseQuest, 12261, 12262, 12263, 12264, 12265, 12266, 12272);
		} else {
			// Reward: 1x A Grade Coin
			callsub(L_CheckQuest, 12261, _("Deep Sea Marc"), Agrade_Coin, 1);
			callsub(L_CheckQuest, 12262, _("Deep Sea Sword Fish"), Agrade_Coin, 1);
			callsub(L_CheckQuest, 12263, _("Deep Sea Strouf"), Agrade_Coin, 1);
			callsub(L_CheckQuest, 12264, _("Deep Sea Anolian"), Agrade_Coin, 1);
			callsub(L_CheckQuest, 12265, _("Deep Sea Obeaune"), Agrade_Coin, 1);
			callsub(L_CheckQuest, 12266, _("Deep Sea Kapha"), Agrade_Coin, 1);
		}
		break;
	case 3: // General Culvert Weekly Service
		if (questprogress(12273, PLAYTIME) == 2) {
			callsub(L_EraseQuest, 12267, 12268, 12273);
		} else {
			// Reward: 1x Sea God's Wrath
			callsub(L_CheckQuest, 12267, _("Weird Coelacanth"), Anger_Seagod, 1);
			callsub(L_CheckQuest, 12268, _("Gloomy Coelacanth"), Anger_Seagod, 1);
		}
		break;
	case 4: // Hard Culvert Weekly Service
		if (questprogress(12274, PLAYTIME) == 2) {
			callsub(L_EraseQuest, 12269, 12270, 12274);
		} else {
			// Reward: 5x Sea God's Wrath
			callsub(L_CheckQuest, 12269, _("Violent Coelacanth"), Anger_Seagod, 5);
			callsub(L_CheckQuest, 12270, _("Mutant Coelacanth"), Anger_Seagod, 5);
		}
		break;
	default:
		mes("[Madeca]");
		mes("Something is wrong. Please check this again!");
		close();
	}
	mes("[Madeca]");
	mes("I don't see any completed mission!");
	close();

L_EraseQuest:
	for(.@j = 0; .@j<getargcount(); ++.@j) {
		if (questprogress(getarg(.@j)))
			erasequest(getarg(.@j));
	}
	mes("[Madeca]");
	mes("Um, I'm sorry. You exceeded the time limit, so I can't give you any payment.");
	close();

// callsub(L_CheckQuest, <quest ID>, <monster>, <reward item ID>, <reward item amount>);
L_CheckQuest:
	if (questprogress(getarg(0), HUNTING) == 2) {
		mes("[Madeca]");
		mesf("You've punished ^0000ff%s^000000!", getarg(1));
		mes("Here's your pay!");
		erasequest(getarg(0));
		specialeffect(EF_STEAL, AREA, playerattached());
		getitem(getarg(2), getarg(3));
		close();
	}
	return;
}

//== Instance Creation =====================================
mal_in01,160,34,4	script	Missing, the Cleaner	4_CAT_SAILOR2,{
	if (BaseLevel < 90) {
		mes("[Missing, the Cleaner]");
		mes("Are you talking to me?!");
		next();
		mes("[Missing, the Cleaner]");
		mes("I'm not sure what made you come here but you can't enter!");
		mes("Tomas' orders...");
		next();
		mes("^770099You must be Base level 90 to enter.^000000");
		close();
	}
	if (in_canal_n == 0) {
		mes("[Missing, the Cleaner]");
		mes("(trembling)");
		next();
		mes("^660066This cat looks like it's in bad shape. It is slightly trembling.^000000");
		next();
		if (select("Pet the cat", "Are you ok?") == 1) {
			mes("[Missing, the Cleaner]");
			mes("Are you talking to me?!");
			next();
			mes("^660066A trembling cat is looking up at you.^000000");
			close();
		}
		mes("[Missing, the Cleaner]");
		mes("Achoo!");
		next();
		mes("[Missing, the Cleaner]");
		mes("We have had many issues during the");
		mes("cleaning of the culverts. But a");
		mes("cat's gotta do it...");
		next();
		select("What culvert are you cleaning?");
		mes("[Missing, the Cleaner]");
		mes("It might look unfamiliar for an");
		mes("outsider, but actually this place");
		mes("is made to keep souvenirs and");
		mes("luxurious things.");
		next();
		mes("[Missing, the Cleaner]");
		mes("After there was a big trembling on");
		mes("this island, things started leaking");
		mes("around here. So that's why I became");
		mes("a cleaner here, though I used");
		mes("to be a manager.");
		next();
		mes("^660066The cat looks like it's been crying...^000000");
		next();
		mes("[Missing, the Cleaner]");
		mes("There is a culvert along this way");
		mes("to the basement. There are many bad");
		mes("guys who hurt me. I am tired of");
		mes("fighting with them so many times a");
		mes("day!");
		next();
		mes("[Missing, the Cleaner]");
		mes("Ohh! You touched my fur!");
		mes("My fur is falling out... it's all");
		mes("those guys' fault~");
		next();
		mes("^660066You just now notice that the cat's fur is missing in some places.^000000");
		next();
		select("Why don't you just quit!");
		mes("[Missing, the Cleaner]");
		mes("I still have to make a living, don't I?");
		next();
		mes("[Missing, the Cleaner]");
		mes("Sometimes I can get a lucky box,");
		mes("or even better, I can get cans...");
		next();
		if (select("Okay, cheers!", "I will help if possible...") == 1) {
			mes("[Missing, the Cleaner]");
			mes("Thank you. I am going back to pour the water!");
			close();
		}
		mes("[Missing, the Cleaner]");
		mes("(turns down his voice)");
		mes("If you really want to help, come closer!");
		next();
		select("(get in closer)");
		mes("[Missing, the Cleaner]");
		mes("Not everyone can be an assistant");
		mes("here. But I can't help choosing");
		mes("anyone at the moment...");
		next();
		mes("[Missing, the Cleaner]");
		mes("If you want to go down here, let me get this code.");
		next();
		mes("^660066The cat scribbles a memo for code to you.^000000");
		next();
		select("Open the memo.");
		mes("^660000Aragam insulted me.^000000");
		next();
		mes("[Missing, the Cleaner]");
		mes("You must be here with friends");
		mes("because you can't go in alone! And");
		mes("the password code will be from the");
		mes("party leader!");
		next();
		mes("[Missing, the Cleaner]");
		mes("What is also important is you must");
		mes("have a Seagod Protection with you.");
		next();
		mes("[Missing, the Cleaner]");
		mes("Don't forget! I will not open the");
		mes("door if you do not have Seagod Protection!");
		in_canal_n = 1;
		close();
	}
	if (countitem(Ptotection_Seagod) == 0) {
		mes("[Missing, the Cleaner]");
		mes("You don't look like you have Seagod Protection. I can't open door at the moment!");
		close();
	}
	.@party_id = getcharid(CHAR_ID_PARTY);
	.@md_name$ = _("Culvert");
	if (!.@party_id) {
		mes("^0000ffYou have to organize a party of");
		mes("more than 1 member or be a member");
		mes("of the party and come back.^000000");
		close();
	}
	.@playtime = questprogress(12254, PLAYTIME);
	if (!.@playtime) {
		if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) {
			mes("[Missing, the Cleaner]");
			mes("Ummm? What's up? Tell me the password if you're the leader!");
			next();
			switch (select("No... nothing.", "Aragam insulted me.", "Enter the Culvert.")) {
			case 1:
				mes("[Missing, the Cleaner]");
				mes("What a rookie.");
				close();
			case 2:
				.@instance = instance_create(.@md_name$, .@party_id);
				if (.@instance >= 0) {
					for (.@i = 1; .@i <= 2; .@i++) {
						if (instance_attachmap(.@i + "@pump", .@instance) == "") {
							mesf("Party name: %s", getpartyname(.@party_id));
							mesf("Party leader: %s", strcharinfo(PC_NAME));
							mesf("^0000ff%s^000000 - Reservation Failed!", .@md_name$);
							instance_destroy(.@instance);
							close();
						}
					}
					instance_set_timeout(3600, 300, .@instance);
					instance_init(.@instance);
				}
				mesf("^3333FF%s^000000 - Reserving", .@md_name$);
				mes("After making the reservation, you");
				mes("have to select Enter the Culvert.");
				close();
			case 3:
				callsub(L_Enter, 0);
			}
		}
		if (select("Enter Culvert", "Cancel") == 2)
			end;
		callsub(L_Enter, 1);
	} else if (.@playtime == 1) {
		mes("You can enter the Culvert if the gate is open.");
		next();
		if (select("Enter Culvert", "Cancel") == 2)
			close();
		callsub(L_Enter, 0);
	} else if (.@playtime == 2) {
		mes("^0000ffThe gate to the Culvert is open again.^000000");
		erasequest(12254);
		close();
	}
	end;
L_Enter:
	if (has_instance("1@pump") == "") {
		if (questprogress(12254, PLAYTIME) == 1) {
			mes("The gate to the Culvert is still closed.");
			mes("You must wait until you are able to enter or find a party leader who can create the instance.");
			close();
		}
		mes("The memorial dungeon Culvert does not exist.");
		mes("The party leader has not reserved entrance to the dungeon yet.");
		close();
	}
	mapannounce("mal_in01", sprintf(_$("%s of the party %s is entering the Culvert."), strcharinfo(PC_NAME), getpartyname(.@party_id)), bc_map, C_SPRINGGREEN);
	if (!questprogress(12254))
		setquest(12254);
	warp("1@pump", 63, 98);
	end;
}

//== Instance: Common Scripts ==============================
1@pump,63,100,4	script	Missing, the Cleaner#0	4_CAT_SAILOR2,{
	if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
		mes("[Missing, the Cleaner]");
		mes("I am trying to have a conversation with your leader now. Please don't disturb and wait!");
		close();
	}
	mes("[Missing, the Cleaner]");
	mes("This is the underground culvert where you will clean with your friends!");
	next();
	mes("[Missing, the Cleaner]");
	mes("I'll open the door first. By the way, do you know how to fight?");
	next();
	switch (select("I'm pretty good at delivering bread.", "I know how to fight.", "^ffffffGive me the diamond.^000000")) {
	case 1:
		mes("[Missing, the Cleaner]");
		mes("Ok then, I'll let you clean the culverts here as usual! I will prepare at the right-hand corner, please follow me!");
		next();
		if (select("Wait! I changed my mind!", "As you wish~") == 1) {
			mes("[Missing, the Cleaner]");
			mes("Huh? Not ready yet? Talk to me again when you're ready.");
			close();
		}
		'party_id = getcharid(CHAR_ID_PARTY);
		mapannounce(instance_mapname("1@pump"), _("Missing: Move toward the 3 o'clock direction and wait for my next order!"), bc_map, "0xff88ff", FW_NORMAL, 15);
		disablenpc(instance_npcname("Missing, the Cleaner#0"));
		enablenpc(instance_npcname("Missing, the Cleaner#n"));
		close();
	case 2:
		if (BaseLevel < 140) {
			mes("[Missing, the Cleaner]");
			mes("Hmmm... Missing thinks you're weak! Tell me the truth!!");
			close();
		}
		mes("[Missing, the Cleaner]");
		mes("Huh? You have some fighting skills? Well, then, there is one place I wasn't able to clean... why don't you go there?!");
		next();
		mes("[Missing, the Cleaner]");
		mes("I must tell you that it's been such a long~~ time since we've cleaned that place, so anyone under level 140 cannot even enter! Are you sure you still want to go?");
		next();
		if (select("Wait! I changed my mind!", "Sure, I'm prepared already~") == 1) {
			mes("[Missing, the Cleaner]");
			mes("Hmm? Talk to me again when you're ready.");
			close();
		}
		'party_id = getcharid(CHAR_ID_PARTY);
		mapannounce(instance_mapname("1@pump"), _("Missing: I'll go in first, so follow me! I'll open up a gate at the 3 o'clock direction!"), bc_map, "0xff88ff", FW_NORMAL, 15);
		disablenpc(instance_npcname("Missing, the Cleaner#0"));
		enablenpc(instance_npcname("Culvert Entrance#i"));
		close();
	case 3:
		mes("[Missing, the Cleaner]");
		mes("I told you not to play with me~!");
		close();
	}
	end;
}

1@pump,84,105,0	script	Culvert Entrance#i	WARPNPC,3,3,{
	end;
OnInstanceInit:
	disablenpc(instance_npcname("Culvert Entrance#i"));
	end;
OnTouch:
	if (BaseLevel >= 140)
		warp(instance_mapname("2@pump"), 38, 88);
	else
		warp(instance_mapname("1@pump"), 74, 105);
	end;
}

function	script	F_mal_missing	{
	mes("[Missing, the Cleaner]");
	mes("I will tell you how to clean shortly. Can you see the culverts around you?");
	next();
	if (select("What culverts??", "Yes, I see them.") == 1) {
		mes("[Missing, the Cleaner]");
		mes("Huh? Is this your first time seeing culverts? You'll see many buried machines in the ground. You may look around and come back!");
		close();
	}
	mes("[Missing, the Cleaner]");
	mes("That's right! Those culverts are very important! We must clean the culverts to prevent seaweed from blocking them. This is what we, cleaners, do!");
	next();
	mes("[Missing, the Cleaner]");
	mes("Watch out! Some monsters will be after you while you're cleaning the culverts! But do not yield to them!");
	next();
	mes("[Missing, the Cleaner]");
	mes("And... NEVER let 6 seaweeds stack! Up to 5 is acceptable! If there are 6, I'll drag you out of here!!");
	next();
	mes("[Missing, the Cleaner]");
	mes("I don't care if you get help from your friends or not. I want you to clean up all culverts! Don't forget! I will watch you and give you instructions. Just do what I said!!");
	next();
	if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
		mes("[Missing, the Cleaner]");
		mes("Once your leader finishes preparing, it will begin, so get your hearts ready for it!!");
		close();
	}
	mes("[Missing, the Cleaner]");
	mes("So, are you ready to clean now?");
	next();
	switch (select("Wait! Not yet!", "Let's start!")) {
	case 1:
		mes("[Missing, the Cleaner]");
		mes("Huh? Not ready yet? Then talk to me when you're ready.");
		close();
	case 2:
		mes("[Missing, the Cleaner]");
		mes("OK! Now it begins!");
		return;
	}
}

//== Instance: Normal Mode =================================
1@pump,84,105,4	script	Missing, the Cleaner#nf	4_CAT_SAILOR2,{
	mes("[Missing, the Cleaner]");
	mes("I have the cleaning job for 40 years and I've never seen such a terrible team!!");
	next();
	mes("[Missing, the Cleaner]");
	mes("I see seaweed everywhere because you're wiggling! All the culverts will be blocked with seaweed!");
	next();
	if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
		mes("[Missing, the Cleaner]");
		mes("Once your leader finishes preparing, settlement will be decided so get your hearts ready for it!!");
		close();
	}
	mes("[Missing, the Cleaner]");
	mes("If you got some guts to challenge again, I'll give you another chance! What's your choice going to be!?");
	next();
	switch (select("Wait! Not yet!", "Okay, let's start again!")) {
	case 1:
		mes("[Missing, the Cleaner]");
		mes("You're still slow! Talk to me again whenever your're ready.");
		close();
	case 2:
		mes("[Missing, the Cleaner]");
		mes("Ok! Let's start now!");
		.@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
		enablenpc(instance_npcname("Missing, the Cleaner#"+.@i$));
		donpcevent(instance_npcname("Missing, the Cleaner#"+.@i$)+"::OnStart");
		disablenpc(instance_npcname("Culvert Entrance#"+.@i$));
		disablenpc(instance_npcname("Missing, the Cleaner#"+.@i$+"o"));
		donpcevent(instance_npcname("Monster Hole#"+.@i$)+"::OnClear");
		disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
		close();
	}
	close();
OnInstanceInit:
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
}

1@pump,84,105,4	script	Missing, the Cleaner#n	4_CAT_SAILOR2,{
	callfunc("F_mal_missing");
	donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnStart");
	close();
OnInstanceInit:
	disablenpc(instance_npcname("Missing, the Cleaner#n"));
	end;
OnStart:
	killmonster(instance_mapname("1@pump"), instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
	disablenpc(instance_npcname("Missing, the Cleaner#n"));
	initnpctimer();
	end;
OnAddSeaweed:
	.@map$ = instance_mapname("1@pump");
	areamonster(.@map$, 55, 99, 61, 105, _("Contaminated Seaweed"), MD_SEAWEED, 1, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
	.@mob_dead_num = mobcount(.@map$, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
	if (.@mob_dead_num >= 6)
		donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnFail");
	else
		mapannounce(.@map$, sprintf(_$("Contaminated Seaweed: %s stem"), .@mob_dead_num), bc_map, "0xff3333", FW_NORMAL, 20);
	end;
OnMyMobDead:
	end;
OnFail:
	stopnpctimer();
	donpcevent(instance_npcname("Monster Hole#n")+"::OnClear");
	.@map$ = instance_mapname("1@pump");
	killmonster(.@map$, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
	enablenpc(instance_npcname("Missing, the Cleaner#nf"));
	mapannounce(.@map$, _("What is this!! Seaweed is all over the culverts! You're done with cleaning! Get out!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
	disablenpc(instance_npcname("Missing, the Cleaner#n"));
	end;
OnTimer100:
	mapannounce(instance_mapname("1@pump"), _("First culvert will be opened in 5 sec. Cleaner can find the opened drain and click to start cleaning."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	end;
OnTimer5500:
	mapannounce(instance_mapname("1@pump"), _("The one who's in charge of cleaning the culvert cannot move or be attacked until the casting is over."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	donpcevent(instance_npcname("Monster Hole#n")+"::OnSpawn");
	end;
OnTimer45000:
OnTimer95000:
OnTimer145000:
OnTimer195000:
OnTimer245000:
OnTimer295000:
OnTimer345000:
OnTimer395000:
OnTimer445000:
	mapannounce(instance_mapname("1@pump"), _("Next culvert will be opened in 5 sec. Please hurry up and find the position of the next culvert."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	end;
OnTimer50000:
OnTimer100000:
OnTimer150000:
	donpcevent(instance_npcname("Monster Hole#n")+"::OnSpawn");
	end;
OnTimer200000:
OnTimer250000:
OnTimer300000:
OnTimer350000:
OnTimer400000:
OnTimer450000:
	.@mob_dead_num = mobcount(instance_mapname("1@pump"), instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
	if (.@mob_dead_num >= 6)
		donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnFail");
	else
		donpcevent(instance_npcname("Monster Hole#n")+"::OnSpawn");
	end;
OnTimer515000:
	.@map$ = instance_mapname("1@pump");
	.@mob_dead_num = mobcount(.@map$, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
	mapannounce(.@map$, sprintf(_$("Contaminated Seaweed: %s stem. Missing will come and inspect the results of the cleaning soon."), .@mob_dead_num), bc_map, "0xff3333", FW_NORMAL, 20);
	end;
OnTimer520000:
	stopnpctimer();
	.@mob_dead_num = mobcount(instance_mapname("1@pump"), instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
	if (.@mob_dead_num >= 6)
		donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnFail");
	else
		donpcevent(instance_npcname("Boss Creation#n")+"::OnEnable");
	end;
}

1@pump,1,1,4	script	Monster Hole#n	FAKE_NPC,{
	end;
OnSpawn:
	.@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
	if (.@i$ == "n")
		.@n = 6;
	else if (.@i$ == "h")
		.@n = 10;
	donpcevent(instance_npcname("#Culvert_"+.@i$+rand(1, .@n))+"::OnEnable");
	end;
OnClear:
	.@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
	if (.@i$ == "n")
		.@n = 6;
	else if (.@i$ == "h")
		.@n = 10;
	for(.@i = 1; .@i <= .@n; ++.@i)
		donpcevent(instance_npcname("#Culvert_"+.@i$+.@n)+"::OnClear");
	end;
}

1@pump,36,111,4	script	#Culvert_n1	CLEAR_NPC,14,14,{ //temporary workaround for ALL_SAMEMAP
	progressbar(sprintf("0x%x", C_YELLOW), 10);
	stopnpctimer();
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnInstanceInit:
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnEnable:
	enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	.@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
	.@map$ = instance_mapname("1@pump");
	.@index = atoi(charat(strnpcinfo(NPC_NAME_HIDDEN), 9));
	switch (.@index) {
	case 1:
		setarray(.@c[0], 32, 107, 40, 115);
		break;
	case 2:
		setarray(.@c[0], 64, 120, 72, 128);
		break;
	case 3:
		setarray(.@c[0], 76, 110, 84, 118);
		break;
	case 4:
		setarray(.@c[0], 36, 76, 44, 84);
		break;
	case 5:
		setarray(.@c[0], 71, 76, 79, 84);
		break;
	case 6:
		setarray(.@c[0], 54, 97, 62, 105);
		break;
	}
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Crab"), MD_CRAB, rand(1, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Marse"), MD_MARSE, rand(1, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Vadon"), MD_VADON, rand(1, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Shellfish"), MD_SHELLFISH, rand(1, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Kukre"), MD_KUKRE, rand(1, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Cornutus"), MD_CORNUTUS, rand(1, 3), .@label$);
	specialeffect(EF_MAPPILLAR2, ALL_SAMEMAP); //currently broken
	getmapxy(.@map$, .@x, .@y, UNITTYPE_NPC);
	getpartymember('party_id, 2);
	copyarray(.@partymemberaid[0], $@partymemberaid[0], $@partymembercount);
	for(.@i = 0; .@i<$@partymembercount; ++.@i) {
		if (attachrid(.@partymemberaid[.@i])) {
			if (strcharinfo(PC_MAP) == .@map$)
				viewpoint(0, .@x, .@y, .@index, C_YELLOW);
			detachrid();
		}
	}
	initnpctimer();
	end;
OnMyMobDead:
	end;
OnClear:
	stopnpctimer();
	killmonster(instance_mapname("1@pump"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead");
	end;
OnTimer49500:	//OnTimer50000 clashes with the timer in "Missing, the Cleaner#h".
	donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnAddSeaweed");
	donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnClear");
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnTouch:
	specialeffect(EF_MAPPILLAR2);
	end;
}

1@pump,68,124,4	duplicate(#Culvert_n1)	#Culvert_n2	CLEAR_NPC,14,14
1@pump,80,114,4	duplicate(#Culvert_n1)	#Culvert_n3	CLEAR_NPC,14,14
1@pump,40,80,4	duplicate(#Culvert_n1)	#Culvert_n4	CLEAR_NPC,14,14
1@pump,75,80,4	duplicate(#Culvert_n1)	#Culvert_n5	CLEAR_NPC,14,14
1@pump,58,101,4	duplicate(#Culvert_n1)	#Culvert_n6	CLEAR_NPC,14,14

1@pump,1,1,4	script	Boss Creation#n	FAKE_NPC,{
	end;
OnInstanceInit:
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnEnable:
	enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	initnpctimer();
	end;
OnTimer100:
	.@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
	if (.@i$ == "n")
		mapannounce(instance_mapname("1@pump"), _("Hmm! That wasn't so bad!"), bc_map, "0xff88ff", FW_NORMAL, 15);
	else if (.@i$ == "h")
		mapannounce(instance_mapname("2@pump"), _("Hmm! You guys are pretty good!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
	end;
OnTimer5000:
	mapannounce(strnpcinfo(NPC_MAP), _("Let's pack up and go... WHAT!!?"), bc_map, "0xff88ff", FW_NORMAL, 15);
	end;
OnTimer10000:
	mapannounce(strnpcinfo(NPC_MAP), _("I sense something strange!! Don't loosen up-- prepare for a fight!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
	end;
OnTimer20000:
	stopnpctimer();
	.@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
	.@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
	if (rand(1, 100) > 50) {
		if (.@i$ == "n")
			monster(instance_mapname("1@pump"), 0, 0, _("Weird Coelacanth"), COELACANTH_N_M, 1, .@label$);
		else if (.@i$ == "h")
			monster(instance_mapname("2@pump"), 0, 0, _("Mutant Coelacanth"), COELACANTH_H_M, 1, .@label$);
		mapannounce(strnpcinfo(NPC_MAP), _("Something big inside the abyss appears with a huge noise."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	} else {
		if (.@i$ == "n")
			monster(instance_mapname("1@pump"), 0, 0, _("Gloomy Coelacanth"), COELACANTH_N_A, 1, .@label$);
		else if (.@i$ == "h")
			monster(instance_mapname("2@pump"), 0, 0, _("Violent Coelacanth"), COELACANTH_H_A, 1, .@label$);
		mapannounce(strnpcinfo(NPC_MAP), _("Something savage inside the abyss appears with a huge noise."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	}
	end;
OnMyMobDead:
	if (mobcount(strnpcinfo(NPC_MAP), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") < 1) {
		mapannounce(strnpcinfo(NPC_MAP), _("You've destroyed all monsters in the culverts. There are trophies lying on the ground, please look for them."), bc_map, C_YELLOW, FW_NORMAL, 15);
		.@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
		.@map$ = strnpcinfo(NPC_MAP);
		enablenpc(instance_npcname("Culvert Entrance#"+.@i$));
		enablenpc(instance_npcname("Missing, the Cleaner#"+.@i$+"o"));
		if (.@i$ == "n") {
			for(.@i = 0; .@i < 10; ++.@i) {
				.@j = rand(1, 6401);
				if (.@j < 5001)
					.@item = Malang_Sp_Can;
				else if (.@j < 5501)
					.@item = Low_Coin_Pocket;
				else if (.@j < 6001)
					.@item = Egrade_Pocket;
				else if (.@j < 6201)
					.@item = Dgrade_Pocket;
				else if (.@j < 6401)
					.@item = High_Weapon_Box;
				else
					continue;
				makeitem(.@item, 1, .@map$, rand(40, 77), rand(87, 120));
			}
		} else if (.@i$ == "h") {
			for(.@i = 0; .@i < 10; ++.@i) {
				.@j = rand(1, 5001);
				if (.@j < 2001)
					.@item = Low_Coin_Pocket;
				else if (.@j < 3001)
					.@item = Egrade_Pocket;
				else if (.@j < 4001)
					.@item = Dgrade_Pocket;
				else if (.@j < 4501)
					.@item = Cgrade_Pocket;
				else if (.@j < 5001)
					.@item = High_Weapon_Box;
				else
					continue;
				makeitem(.@item, 1, .@map$, rand(40, 77), rand(87, 120));
			}
		}
	} else {
		mapannounce(strnpcinfo(NPC_MAP), _("There are still monsters alive."), bc_map, C_SPRINGGREEN, FW_NORMAL, 20);
	}
	end;
}

1@pump,84,105,4	script	Missing, the Cleaner#no	4_CAT_SAILOR2,{
	.@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
	if (.@i$ == "n") {
		mes("[Missing, the Cleaner]");
		mes("I was very surprised!!");
		next();
		mes("[Missing, the Cleaner]");
		mes("That funny-looking fish seems to be one of Coelacanths living around here. This is my first time seeing one coming here alone!");
		next();
		mes("[Missing, the Cleaner]");
		mes("I'll clean up the remains. Go pack and leave! Enterance is located on the other side, look for it!");
		next();
	} else if (.@i$ == "h") {
		mes("[Missing, the Cleaner]");
		mes("You've destroyed an immense monster!");
		next();
		mes("[Missing, the Cleaner]");
		mes("The one you destroyed was among the variety of Coelacanths. Others have tried to destroy them but failed.");
		next();
		mes("[Missing, the Cleaner]");
		mes("I'll clean up the remains. You go ahead to get trophies and leave!");
		next();
	}
	mes("[Missing, the Cleaner]");
	mes("One more thing! DO NOT TALK to ANYONE about what you've seen here today!!");
	next();
	mes("[Missing, the Cleaner]");
	mes("If Tomas closes this down, we will lose our jobs!");
	close();
OnInstanceInit:
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
}

1@pump,32,100,0	script	Culvert Entrance#n	WARPNPC,3,3,{
	end;
OnInstanceInit:
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnTouch:
	warp("mal_in01", 161, 32);
	end;
}

//MD_Putmob "1@pump" 0 0 0 0 20 HYDRA 0 0 2
1@pump,1,1,4	script	Hydra#n	FAKE_NPC,{
OnInstanceInit:
	monster(strnpcinfo(NPC_MAP), 0, 0, _("Hydra"), HYDRA, 20);
	end;
}

//== Instance: Hard Mode ===================================
2@pump,39,88,4	duplicate(Missing, the Cleaner#nf)	Missing, the Cleaner#hf	4_CAT_SAILOR2

2@pump,39,88,4	script	Missing, the Cleaner#h	4_CAT_SAILOR2,{
	callfunc("F_mal_missing");
	donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnStart");
	close();
OnStart:
	killmonster(instance_mapname("2@pump"), instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
	disablenpc(instance_npcname("Missing, the Cleaner#h"));
	initnpctimer();
	end;
OnAddSeaweed:
	.@map$ = instance_mapname("2@pump");
	areamonster(.@map$, 75, 78, 85, 88, _("Contaminated Seaweed"), MD_SEAWEED, 1, instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
	.@mob_dead_num = mobcount(.@map$, instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
	if (.@mob_dead_num >= 6)
		donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnFail");
	else
		mapannounce(.@map$, sprintf(_$("Proliferous Contaminated Seaweed: %s stem"), .@mob_dead_num), bc_map, "0xff3333", FW_NORMAL, 20);
	end;
OnMyMobDead:
	end;
OnFail:
	stopnpctimer();
	donpcevent(instance_npcname("Monster Hole#h")+"::OnClear");
	.@map$ = instance_mapname("2@pump");
	killmonster(.@map$, instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
	enablenpc(instance_npcname("Missing, the Cleaner#hf"));
	mapannounce(.@map$, _("What is this!! Seaweed is all over the culverts! You're done with cleaning! Get out!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
	disablenpc(instance_npcname("Missing, the Cleaner#h"));
	end;
OnTimer100:
	mapannounce(instance_mapname("2@pump"), _("First culvert will be opened in 5 sec. Cleaner can find the opened drain and click to start cleaning."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	end;
OnTimer5500:
	mapannounce(instance_mapname("2@pump"), _("The one who's in charge of cleaning the culvert cannot move or be attacked until the casting is over."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	donpcevent(instance_npcname("Monster Hole#h")+"::OnSpawn");
	end;
OnTimer35000:
OnTimer75000:
OnTimer115000:
OnTimer155000:
OnTimer195000:
OnTimer235000:
OnTimer275000:
OnTimer315000:
OnTimer355000:
	mapannounce(instance_mapname("2@pump"), _("Next culvert will be opened in 5 sec. Please hurry up and find the position of the next culvert."), bc_map, "0x00ffcc", FW_NORMAL, 15);
	end;
OnTimer40000:
OnTimer80000:
OnTimer120000:
	donpcevent(instance_npcname("Monster Hole#h")+"::OnSpawn");
	end;
OnTimer160000:
OnTimer200000:
OnTimer240000:
OnTimer280000:
OnTimer320000:
OnTimer360000:
	.@mob_dead_num = mobcount(instance_mapname("2@pump"), instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
	if (.@mob_dead_num >= 6)
		donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnFail");
	else
		donpcevent(instance_npcname("Monster Hole#h")+"::OnSpawn");
	end;
OnTimer420000:
	mapannounce(instance_mapname("2@pump"), _("It seems Missing will come and inspect the results of the cleaning soon. Shall we clean up the mess around here?"), bc_map, "0xff3333", FW_NORMAL, 20);
	end;
OnTimer425000:
	stopnpctimer();
	.@mob_dead_num = mobcount(instance_mapname("2@pump"), instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
	if (.@mob_dead_num >= 6)
		donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnFail");
	else
		donpcevent(instance_npcname("Boss Creation#h")+"::OnEnable");
	end;
}

2@pump,53,114,4	script	#Culvert_h1	CLEAR_NPC,14,14,{ //temporary workaround for ALL_SAMEMAP
	progressbar(sprintf("0x%x", C_YELLOW), 15);
	stopnpctimer();
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnInstanceInit:
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnEnable:
	enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	.@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
	.@map$ = instance_mapname("2@pump");
	.@index = atoi(substr(strnpcinfo(NPC_NAME_HIDDEN), 9, getstrlen(strnpcinfo(NPC_NAME_HIDDEN))-1));
	switch (.@index) {
	case 1:
		setarray(.@c[0], 49, 110, 57, 118);
		break;
	case 2:
		setarray(.@c[0], 75, 105, 83, 113);
		break;
	case 3:
		setarray(.@c[0], 110, 110, 118, 118);
		break;
	case 4:
		setarray(.@c[0], 94, 94, 102, 102);
		break;
	case 5:
		setarray(.@c[0], 58, 92, 66, 100);
		break;
	case 6:
		setarray(.@c[0], 53, 66, 61, 74);
		break;
	case 7:
		setarray(.@c[0], 43, 45, 51, 53);
		break;
	case 8:
		setarray(.@c[0], 77, 59, 85, 67);
		break;
	case 9:
		setarray(.@c[0], 96, 70, 104, 78);
		break;
	case 10:
		setarray(.@c[0], 111, 46, 119, 54);
		break;
	}
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Marc"), MD_MARC, rand(2, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Sword Fish"), MD_SWORD_FISH, rand(2, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Strouf"), MD_STROUF, rand(2, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Mutant Anolian"), MD_ANOLIAN, rand(2, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Obeaune"), MD_OBEAUNE, rand(2, 3), .@label$);
	areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Metamorphous Kapha"), MD_KAPHA, rand(2, 3), .@label$);
	specialeffect(EF_MAPPILLAR2, ALL_SAMEMAP); //currently broken
	initnpctimer();
	end;
OnMyMobDead:
	end;
OnClear:
	stopnpctimer();
	killmonster(instance_mapname("2@pump"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead");
	end;
OnTimer39500:	//OnTimer40000 clashes with the timer in "Missing, the Cleaner#h".
	donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnAddSeaweed");
	donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnClear");
	disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
	end;
OnTouch:
	specialeffect(EF_MAPPILLAR2);
	end;
}
2@pump,79,109,4	duplicate(#Culvert_h1)	#Culvert_h2	CLEAR_NPC,14,14
2@pump,114,114,4	duplicate(#Culvert_h1)	#Culvert_h3	CLEAR_NPC,14,14
2@pump,98,98,4	duplicate(#Culvert_h1)	#Culvert_h4	CLEAR_NPC,14,14
2@pump,62,96,4	duplicate(#Culvert_h1)	#Culvert_h5	CLEAR_NPC,14,14
2@pump,57,70,4	duplicate(#Culvert_h1)	#Culvert_h6	CLEAR_NPC,14,14
2@pump,47,49,4	duplicate(#Culvert_h1)	#Culvert_h7	CLEAR_NPC,14,14
2@pump,81,63,4	duplicate(#Culvert_h1)	#Culvert_h8	CLEAR_NPC,14,14
2@pump,100,74,4	duplicate(#Culvert_h1)	#Culvert_h9	CLEAR_NPC,14,14
2@pump,115,50,4	duplicate(#Culvert_h1)	#Culvert_h10	CLEAR_NPC,14,14

2@pump,1,1,4	duplicate(Monster Hole#n)	Monster Hole#h	FAKE_NPC
2@pump,1,1,4	duplicate(Boss Creation#n)	Boss Creation#h	FAKE_NPC
2@pump,39,88,4	duplicate(Missing, the Cleaner#no)	Missing, the Cleaner#ho	4_CAT_SAILOR2
2@pump,38,100,0	duplicate(Culvert Entrance#n)	Culvert Entrance#h	WARPNPC,3,3

//MD_Putmob "2@pump" 0 0 0 0 20 HYDRA 0 0 2
2@pump,1,1,4	duplicate(Hydra#n)	Hydra#h	FAKE_NPC
