//===== rAthena Script =======================================
//= Sky Fortress Invasion
//===== Description: =========================================
//= [Official Conversion]
//= Sky Fortress Invasion Instance
//===== Changelogs: ==========================================
//= 1.0 First version. [Capuche]
//============================================================

prt_q,249,82,2	script	Han#a1	8W_SOLDIER,{
	mes "[Han]";
	mes "There must be a ton of monsters";
	mes "attacking the center of Prontera.";
	mes "***";
	next;
	mes "[Han]";
	mes "My family...My friends...";
	mes "They're all there...";
	mes "I must protect them...";
	mes "But...I have an even more important";
	mes "job to do here...";
	next;
	mes "[Han]";
	mes "I, scientist Doyeon, can do it.";
	mes "I can obliterate that dirty source place,";
	mes "ceaselessly spawning the monsters...";
	mes "That's why I'm protecting him.";
	mes "***";
	next;
	mes "[Han]";
	mes "Protecting him and destroying this fortress";
	mes "is what ultimately protects my family";
	mes "and friends.";
	close;
}

prt_q,252,79,4	script	Doek#a1	8W_SOLDIER,{
	mes "[Doek]";
	mes "Can this scientist you're seeing here";
	mes "really protect Prontera?";
	mes "Can she?";
	mes "Do you believe so?";
	next;
	mes "[Doek]";
	mes "Honestly, I don't...";
	mes "But...";
	next;
	mes "[Doek]";
	mes "All my loved ones were...";
	mes "...by those monsters....";
	next;
	mes "[Doek]";
	mes "This is the last hope I can have...";
	mes "This is the last.";
	mes "So please help me.";
	mes "Help Doyeon...";
	next;
	mes "- And then, she remained silent -";
	mes "- for quite a while. -";
	close;
}

prt_q,249,79,4	script	Scientist Doyeon#a1	4_M_MAYOR,{
	if (!checkweight(2104,2)) {
		mes "- It's full of items";
		mes "so you can't proceed to conversation. -";
		close;
	}
	if (BaseLevel < 145) {
		mes "- You should be level 145 or higher";
		mes "to proceed. -";
		close;
	}
	switch( checkquest(9419,PLAYTIME) ) {
	case -1:
		if (is_party_leader() == false) {
			callsub S_Info;
			close;
		}
		if (isbegin_quest(9418) == 0) {// first entrance
			.@party_name$ = getpartyname(getcharid(1));
			mes "[Scientist Doyeon]";
			mes "I'm a scientist";
			mes "living in Prontera.";
			mes "I'm just an ordinary scientist";
			mes "teaching children and doing research.";
			mes "And then...things came up";
			mes "in Prontera all of a sudden....";
			while(true) {
				next;
				switch( select( "About Sky Fortress", "Enter the Sky Fortress.", "End the dialogue." ) ) {
				case 1:
					callsub S_Info;
					break;
				case 2:
					mes "[Scientist Doyeon]";
					mes "I think I can open the warp,";
					mes "at least for once, with the magic";
					mes "that I've been collecting so hard.";
					mes "I hope you would help me";
					mes "destroy the fortress and";
					mes "get back our Prontera.";
					next;
					if (select( "No", "Yes" ) == 1) {
						mes "[Scientist Doyeon]";
						mes "Come back";
						mes "if you change your mind...";
						mes "Just know that time is running out...";
						break;
					}
					mes "[Scientist Doyeon]";
					mes "There! I opened the warp";
					mes "to the Sky Fortress!";
					mes "The warp will be activated";
					mes "only for a limited period of time.";
					mes "Step inside it, quick!";
					if (instance_create("Sky Fortress Invasion") < 0) {
						mes "Party Name: " + .@party_name$;
						mes "Party Leader: " + strcharinfo(0);
						mes "^0000ffSky Fortress Invasion ^000000- Reservation Failed!";
						close;
					}
					close;
				case 3:
					mes "[Scientist Doyeon]";
					mes "I'm so worried about";
					mes "the future of Prontera...";
					mes "It appears this fortress";
					mes "must be the source of all evil...";
					close;
				}
			}
		}
		mes "You're back unscathed.";
		mes "So...whatever happened";
		mes "inside?";
		next;
		mes "- I told her everything that";
		mes "happened inside the Sky Fortress. -";
		next;
		mes "[Scientist Doyeon]";
		mes "How could that be...";
		mes "Still, I think we have every reason to remain hopeful";
		mes "for eliminating that huge Golem";
		mes "in the Sky Fortress.";
		next;
		mes "[Scientist Doyeon]";
		mes "Still, those filthy monsters";
		mes "keep spawning in Prontera.";
		mes "So I think what we've done";
		mes "must not be enough.";
		mes "***";
		next;
		mes "[Scientist Doyeon]";
		mes "To operate the warp,";
		mes "a lot of magic is required.";
		mes "Bring me the item called the -Dungeon Pass-,";
		mes "or I need about";
		mes "three days to collect magic.";
		next;
		mes "[Scientist Doyeon]";
		mes "I hope you'd enter the Sky Fortress";
		mes "and help us save";
		mes "Prontera.";
		completequest 9418;// Attack Sky Fortress Invading Prontera
		setquest 9419;// Attack Sky Fortress Invading Prontera
		if (isbegin_quest(9427) == 0) {
			setquest 9427;// Clearing the Sky Fortress for the Same Time
			completequest 9427;
			rentitem 14505,3600;// Sky Fortress Ticket
		}
		close;
	case 0:
	case 1:
		mes "[Scientist Doyeon]";
		mes "To operate the warp,";
		mes "a lot of magic is required.";
		mes "Bring me the item called the -Dungeon Pass-,";
		mes "or I need about";
		mes "three days to collect magic.";
		next;
		if (is_party_leader() == true) {
			.@party_name$ = getpartyname(getcharid(1));
			if (select( "End the dialogue.", "Show the -Dungeon Pass-." ) == 2) {
				if (rentalcountitem(14505) < 1 && rentalcountitem(14506) < 1) {// Sky Fortress Ticket
					mes "[Scientist Doyeon]";
					mes "I don't think this works";
					mes "without the -Dungeon Pass-.";
					mes "I can't open the warp without it.";
					close;
				}
				mes "[Scientist Doyeon]";
				mes "Oh! Where did you";
				mes "get the -Dungeon Pass-?";
				mes "With this item,";
				mes "I can pretty much open the warp.";
				next;
				if (select( "End the dialogue.", "Activate the warp." ) == 1) {
					mes "[Scientist Doyeon]";
					mes "Are you not going";
					mes "to help Prontera?";
					close;
				}
				mes "[Scientist Doyeon]";
				mes "There! I opened the warp";
				mes "to the Sky Fortress!";
				mes "The warp will be activated";
				mes "only for a limited period of time.";
				mes "Step inside it, quick!";
				if (instance_create("Sky Fortress Invasion") < 0) {
					mes "Party Name: " + .@party_name$;
					mes "Party Leader: " + strcharinfo(0);
					mes "^0000ffSky Fortress Invasion ^000000- Reservation Failed!";
					close;
				}
				close;
			}
		}
		mes "[Scientist Doyeon]";
		mes "I hope you'd enter the Sky Fortress";
		mes "and help us save";
		mes "Prontera.";
		close;
	case 2:
		mes "[Scientist Doyeon]";
		mes "You've come back! You didn't get away!";
		mes "Thanks so much!";
		next;
		mes "[Scientist Doyeon]";
		mes "But still...";
		mes "A ton of undead monsters kept swarming about";
		mes "from that entrance seen behind me";
		mes "as if the sap monster spits out the sap.";
		mes "They kept coming out";
		mes "no matter how many were killed.";
		next;
		mes "[Scientist Doyeon]";
		mes "I suppose the monsters are being made up";
		mes "inside the fortress.";
		mes "My guess is that if we can defeat their ringleader in the fortress,";
		mes "the monsters will go away";
		mes "and Prontera will become stabilized.";
		mes "***";
		next;
		mes "[Scientist Doyeon]";
		mes "I think I can open the warp,";
		mes "at least for once, with the magic";
		mes "that I've been collecting so hard.";
		mes "I hope you would help me";
		mes "destroy the fortress and";
		mes "get back our Prontera.";
		if (is_party_leader() == true) {
			.@party_name$ = getpartyname(getcharid(1));
			next;
			if (select( "No", "Yes" ) == 1) {
				mes "[Scientist Doyeon]";
				mes "Come back";
				mes "if you change your mind...";
				mes "Just know that time is running out...";
				close;
			}
			mes "[Scientist Doyeon]";
			mes "There! I opened the warp";
			mes "to the Sky Fortress!";
			mes "The warp will be activated";
			mes "only for a limited period of time.";
			mes "Step inside it, quick!";
			if (instance_create("Sky Fortress Invasion") < 0) {
				mes "Party Name: " + .@party_name$;
				mes "Party Leader: " + strcharinfo(0);
				mes "^0000ffSky Fortress Invasion ^000000- Reservation Failed!";
				close;
			}
		}
		close;
	}
	end;

S_Info:
	mes "[Scientist Doyeon]";
	mes "I'm a scientist";
	mes "living in Prontera.";
	mes "I'm just an ordinary scientist";
	mes "teaching children and doing research.";
	next;
	mes "[Scientist Doyeon]";
	mes "But now...the life at least as I know it";
	mes "has become shattered.";
	next;
	mes "[Scientist Doyeon]";
	mes "Thanks to this fortress";
	mes "looking like a huge trash can,";
	mes "our village has turned into a trash heap";
	mes "that doesn't even decay.";
	next;
	mes "[Scientist Doyeon]";
	mes "Buildings fall down,";
	mes "people keep dying out...";
	mes "I have to wonder what the nobility and soldiers at the Prontera Palace";
	mes "are up to when things are like this.";
	next;
	mes "[Scientist Doyeon]";
	mes "A ton of undead monsters kept swarming about";
	mes "from that entrance seen behind me";
	mes "as if the sap monster spits out the sap.";
	mes "They kept coming out";
	mes "no matter how many were killed.";
	next;
	mes "[Scientist Doyeon]";
	mes "I suppose the monsters are being made up";
	mes "inside the fortress.";
	mes "My guess is that if we can defeat their ringleader in the fortress,";
	mes "the monsters will get away";
	mes "and Prontera will become stabilized.";
	mes "***";
	next;
	mes "[Scientist Doyeon]";
	mes "So I really wanted to enter the fortress";
	mes "but couldn't find any entrance.";
	mes "I studied day and night";
	mes "and finally located it.";
	next;
	mes "[Scientist Doyeon]";
	mes "To enter the fortress,";
	mes "the warp should be activated.";
	mes "To do so, a lot of magic";
	mes "is indispensable!";
	next;
	mes "[Scientist Doyeon]";
	mes "And then...I've been preparing";
	mes "a lot of magic necessary for the warp.";
	mes "Now I could use a warrior";
	mes "who can shatter the fortress";
	mes "and bring peace to Prontera.";
	return;
}

prt_q,243,75,3	script	Fortress Entry Warp Portal#1	PORTAL,{
	if (BaseLevel < 145) {
		mes "- You should be level 145 or higher";
		mes "to proceed. -";
		close;
	}
	if (checkquest(9419,PLAYTIME) == 2 || (checkquest(9419,PLAYTIME) == -1 && isbegin_quest(9418) != 1)) {
		setarray .@menu$[0], "Don't step into the warp.", "Step into the warp.";
		.@type = 1;
	}
	else {
		mes "- The warp doesn't seem to work.";
		mes "You can't seem to enter... -";
		next;
		setarray .@menu$[0], "End the dialogue.", "", "Put the - Dungeon Pass - near to the warp.";
	}
	switch( select( .@menu$[0], .@menu$[1], .@menu$[2] ) ) {
	case 1:
		mes "- The warp is emanating bright lights. -";
		close;
	case 2:
		break;
	case 3:
		if (rentalcountitem(14505) < 1 && rentalcountitem(14506) < 1) {// Sky Fortress Ticket
			mes "- You don't have -";
			mes "- the Dungeon Pass. -";
			close;
		}
		break;
	}
	.@md_name$ = "Sky Fortress Invasion";
	switch( instance_enter(.@md_name$) ) {
	case IE_OTHER:
		mes "An unknown error occurred.";
		close;
	case IE_NOINSTANCE:
		mes "Memorial Dungeon " + .@md_name$ + " doesn't exist.";
		mes "Party leader hasn't created the Memorial Dungeon.";
		close;
	case IE_NOMEMBER:
		mes "Only the party members may enter the Memorial Dungeon.";
		close;
	case IE_OK:
		mapannounce "prt_q", "Party member " + strcharinfo(0) + " of party's " + getpartyname( getcharid(1) ) + " enters " + .@md_name$ + "", bc_map,0xFF99;
		if (.@type == 1) {
			if (isbegin_quest(9419) > 0)
				erasequest 9419;
			if (isbegin_quest(9418) > 0)
				erasequest 9418;
			setquest 9418;// Attack Sky Fortress Invading Prontera
		}
		fortress_entrance_loc = 0;	// warp back to prt_q on exit
		// warp "1@sthb",54,67;
		end;
	}
	end;

OnInit:
	while(true) {
		sleep 10000;
		specialeffect EF_ENHANCE;
	}
	end;
}

// Dali entrance
dali02,115,61,3	script	Fortress Entry Warp Portal#2	PORTAL,{
	if (BaseLevel < 145) {
		mes "- You should be level 145 or higher";
		mes "to proceed. -";
		close;
	}
	mes "- The warp doesn't seem to work.";
	mes "You can't seem to enter. -";
	next;
	if (select( "End the dialogue.", "Put the - Dungeon Pass - near to the warp." ) == 1) {
		mes "- The warp is emanating bright lights. -";
		close;
	}
	if (rentalcountitem(14505) < 1 && rentalcountitem(14506) < 1) {// Sky Fortress Ticket
		mes "- You don't have -";
		mes "- the Dungeon Pass. -";
		close;
	}
	.@md_name$ = "Sky Fortress Invasion";
	switch( instance_enter(.@md_name$) ) {
	case IE_OTHER:
		mes "An unknown error occurred.";
		close;
	case IE_NOINSTANCE:
		mes "Memorial Dungeon " + .@md_name$ + " doesn't exist.";
		mes "Party leader hasn't created the Memorial Dungeon.";
		close;
	case IE_NOMEMBER:
		mes "Only the party members may enter the Memorial Dungeon.";
		close;
	case IE_OK:
		mapannounce "prt_q", "Party member " + strcharinfo(0) + " of party's " + getpartyname( getcharid(1) ) + " enters " + .@md_name$ + "", bc_map,0xFF99;
		// warp "1@sthb",54,67;
		fortress_entrance_loc = 1;	// warp back to dali02 on exit
		// note: no quest change when using tickets
		end;
	}
	end;

OnInit:
	while(true) {
		sleep 10000;
		specialeffect EF_ENHANCE;
	}
	end;
}

dali02,122,63,2	script	Scientist Doyeon#a2	4_M_MAYOR,{
	if (!checkweight(2104,2)) {
		mes "- It's full of items";
		mes "so you can't proceed to conversation. -";
		close;
	}
	if (BaseLevel < 145) {
		mes "- You should be level 145 or higher";
		mes "to proceed. -";
		close;
	}
	if (is_party_leader() == false) {
		mes "[Scientist Doyeon]";
		mes "I'm a scientist";
		mes "living in Prontera.";
		mes "I'm just an ordinary scientist";
		mes "teaching children and doing research.";
		next;
		mes "[Scientist Doyeon]";
		mes "But now...my normal life";
		mes "has become shattered.";
		next;
		mes "[Scientist Doyeon]";
		mes "Thanks to this fortress";
		mes "looking like a huge trash can,";
		mes "our village has turned into a trash heap";
		mes "that doesn't even decay.";
		next;
		mes "[Scientist Doyeon]";
		mes "Buildings fall down,";
		mes "people keep dying out...";
		mes "I have to wonder what the nobility and soldiers at the Prontera Palace";
		mes "are up to when things are like this.";
		next;
		mes "[Scientist Doyeon]";
		mes "A ton of undead monsters kept swarming about";
		mes "from that entrance seen behind me";
		mes "as if the sap monster spits out the sap.";
		mes "They kept coming out";
		mes "no matter how many were killed.";
		next;
		mes "[Scientist Doyeon]";
		mes "I suppose the monsters are being made up";
		mes "inside the fortress.";
		mes "My guess is that if we can defeat their ringleader in the fortress,";
		mes "the monsters will go away";
		mes "and Prontera will become stabilized.";
		mes "***";
		next;
		mes "[Scientist Doyeon]";
		mes "So I really wanted to enter the fortress";
		mes "but couldn't find any entrance.";
		mes "I studied day and night";
		mes "and finally located it.";
		next;
		mes "[Scientist Doyeon]";
		mes "To enter the fortress,";
		mes "the warp should be activated.";
		mes "To do so,";
		mes "the -Dungeon Pass-";
		mes "is indispensable!";
		next;
		mes "[Scientist Doyeon]";
		mes "And then...I've been preparing";
		mes "a lot of magic necessary for the warp.";
		mes "Now I could use a warrior";
		mes "who can shatter the fortress";
		mes "and bring peace to Prontera.";
		close;
	}
	.@party_name$ = getpartyname(getcharid(1));
	mes "[Scientist Doyeon]";
	mes "I'm a scientist";
	mes "living in Prontera.";
	mes "I teach children and perform research activities.";
	mes "But it has become";
	mes "so dangerous there,";
	mes "so I moved in here.";
	next;
	switch( select( "About Sky Fortress", "Enter the Sky Fortress.", "End the dialogue." ) ) {
	case 1:
		mes "[Scientist Doyeon]";
		mes "But now...my normal life";
		mes "has become shattered.";
		next;
		mes "[Scientist Doyeon]";
		mes "Thanks to this fortress";
		mes "looking like a huge trash can,";
		mes "our village has turned into a trash heap";
		mes "that doesn't even decay.";
		next;
		mes "[Scientist Doyeon]";
		mes "Buildings fall down,";
		mes "people keep dying out...";
		mes "I have to wonder what the nobility and soldiers at the Prontera Palace";
		mes "are up to when things are like this.";
		next;
		mes "[Scientist Doyeon]";
		mes "A ton of undead monsters kept swarming about";
		mes "as if the sap monster spits out the sap.";
		mes "They kept coming out";
		mes "no matter how many were killed.";
		mes "***";
		next;
		mes "[Scientist Doyeon]";
		mes "I suppose the monsters are being made up";
		mes "inside the fortress.";
		mes "My guess is that if we can defeat their ringleader in the fortress,";
		mes "the monsters will go away";
		mes "and Prontera will become stabilized.";
		mes "***";
		next;
		mes "[Scientist Doyeon]";
		mes "So I wanted to enter the fortress";
		mes "but couldn't find any entrance.";
		mes "I studied day and night";
		mes "and finally located it.";
		next;
		mes "[Scientist Doyeon]";
		mes "To enter the fortress,";
		mes "the warp should be activated.";
		mes "To do so, a lot of magic";
		mes "is indispensable!";
		next;
		mes "[Scientist Doyeon]";
		mes "And then...I've been preparing";
		mes "a lot of magic necessary for the warp.";
		mes "Now I could use a warrior";
		mes "who can shatter the fortress";
		mes "and bring peace to Prontera.";
		mes "That's why I'm here.";
		close;
	case 2:
		mes "[Scientist Doyeon]";
		mes "To operate the warp,";
		mes "a lot of magic is required.";
		mes "Don't forget to bring me";
		mes "the -Dungeon Pass-.";
		mes "That's the only way to open";
		mes "the warp to the Sky Fortress.";
		next;
		if (select( "End the dialogue.", "Show the -Dungeon Pass-." ) == 1) {
			mes "[Scientist Doyeon]";
			mes "Don't forget to bring me";
			mes "the -Dungeon Pass-.";
			mes "Enter the Sky Fortress";
			mes "and help us save";
			mes "the invaded Prontera.";
			close;
		}
		if (rentalcountitem(14505) < 1 && rentalcountitem(14506) < 1) {// Sky Fortress Ticket
			mes "[Scientist Doyeon]";
			mes "I don't think this works";
			mes "without the -Dungeon Pass-.";
			mes "I can't open the warp without it.";
			close;
		}
		mes "[Scientist Doyeon]";
		mes "Oh! Where did you";
		mes "get the -Dungeon Pass-?";
		mes "This item is enough";
		mes "to open the warp.";
		next;
		if (select( "End the dialogue.", "Activate the warp." ) == 1) {
			mes "[Scientist Doyeon]";
			mes "Are you not going";
			mes "to help Prontera?";
			close;
		}
		mes "[Scientist Doyeon]";
		mes "There! I opened the warp";
		mes "to the Sky Fortress!";
		mes "The warp will be activated";
		mes "only for a limited period of time.";
		mes "Step inside it, quick!";
		if (instance_create("Sky Fortress Invasion") < 0) {
			mes "Party Name: " + .@party_name$;
			mes "Party Leader: " + strcharinfo(0);
			mes "^0000ffSky Fortress Invasion ^000000- Reservation Failed!";
			close;
		}
		close;
	case 3:
		close;
	}
}

// Warps
1@sthb,73,71,0	warp2	#sthd_move_01_01	3,3,1@sthb,73,84
1@sthb,93,77,0	warp2	#sthd_move_02_01	2,2,1@sthb,210,96
1@sthb,190,54,0	warp2	#sthd_move_02_02	2,2,1@sthd,103,71

// Main event - step 1
1@sthb,64,67,4	script	Stefan.J.E.Wolf#sthd_01	4_AS_RAGGED_GOLEM,{
	end;
OnStart:
	enablenpc instance_npcname("Stefan.J.E.Wolf#sthd_01");
	initnpctimer;
	end;
OnTimer1000:
	npctalk "Stefan: ~Grunts~";
	end;
OnTimer3000:
	npctalk "Earnest: What a bunch of menacing worms...!";
	end;
OnTimer5000:
	mapannounce 'sthb_map$, "Stefan Jack Earnest Wolf: Guard...the Sky Fortress...Immortal...beings...", bc_map,0xEBFF;
	end;
OnTimer6000:
	donpcevent instance_npcname("#sthd_event_2") + "::OnStart";
	end;
OnTimer7000:
	disablenpc instance_npcname("Stefan.J.E.Wolf#sthd_01");
	stopnpctimer;
	end;
}

1@sthb,64,67,4	duplicate(dummy_npc)	Stefan.J.E.Wolf#sthd_02	4_AS_RAGGED_GOLEM

1@sthb,56,71,0	script	#sthd_event_1	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_1");
	.@stefan$ = instance_npcname("Stefan.J.E.Wolf#sthd_01");
	setpcblock PCBLOCK_NPC, true;
	unittalk getcharid(3), "" + strcharinfo(0) + " : Is this what caused the invasion into Prontera? Inside the Sky Fortress?";
	sleep2 2000;
	enablenpc .@stefan$;
	sleep2 2000;
	cutin "stephan_j_e_w.bmp",2;
	npctalk "Wolf: Trespassers... Sky Fortress...", .@stefan$;
	specialeffect2 EF_LOCKON;
	sleep2 2000;
	npctalk "Jack: Bijou...told me...to impede the intruders...", .@stefan$;
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : What's that...huge lump?";
	npctalk "Earnest: Little...human...Greenhorn...Away...", .@stefan$;
	sleep2 2000;
	setpcblock PCBLOCK_NPC, false;
	cutin "",255;
	specialeffect2 EF_LOCKON;
	donpcevent instance_npcname("#sthd_event_1_boss") + "::OnStefanHp";
	disablenpc .@stefan$;
	end;
}

1@sthb,1,1,0	script	#sthd_event_1_boss	HIDDEN_WARP_NPC,{
	end;
OnStefanHp:
	enablenpc instance_npcname("#sthd_event_1_boss");
	monster 'sthb_map$,64,67, "Stefan.J.E.Wolf",3484,1, instance_npcname("#sthd_event_1_boss") + "::OnMobDead";	// AS_D_RAGGED_GOLEM
	'boss_id = $@mobid[0];
	initnpctimer;
	end;
OnTimer2000:
	getunitdata 'boss_id, .@data;
	if (.@data[UMOB_HP] >= 19000000)
		end;
	// fall through
OnMobDead:
	stopnpctimer;
	killmonster 'sthb_map$, instance_npcname("#sthd_event_1_boss") + "::OnMobDead";
	donpcevent instance_npcname("Stefan.J.E.Wolf#sthd_01") + "::OnStart";
	disablenpc instance_npcname("#sthd_event_1_boss");
	end;
OnTimer3000:
	initnpctimer;
	end;
}

// 1@sthb,68,65,0	script	#sthd_event_2	HIDDEN_WARP_NPC,{	// official coord
1@sthb,1,1,0	script	#sthd_event_2	HIDDEN_WARP_NPC,{
	end;
OnStart:
	enablenpc instance_npcname("#sthd_event_2");
	initnpctimer;
	.@label$ = instance_npcname("#sthd_event_2") + "::OnMobDead";
	monster 'sthb_map$,48,75,"Immortal Zombie Soldier",3476,1, .@label$;// AS_ZOMBIE
	monster 'sthb_map$,56,75,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,74,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,67,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,61,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,56,60,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,48,60,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,48,67,"Immortal Zombie Soldier",3476,1, .@label$;
	end;
OnTimer3000:
	if (mobcount( 'sthb_map$, instance_npcname("#sthd_event_2") + "::OnMobDead" ) > 0) {
		initnpctimer;
		end;
	}
	stopnpctimer;
	disablenpc instance_npcname("#sthd_event_2");
	donpcevent instance_npcname("#sthd_event_3") + "::OnStart";
	end;
OnMobDead:
	end;
}

// 1@sthb,68,66,0	script	#sthd_event_3	HIDDEN_WARP_NPC,{	// official coord
1@sthb,1,1,0	script	#sthd_event_3	HIDDEN_WARP_NPC,{
	end;
OnStart:
	enablenpc instance_npcname("#sthd_event_3");
	initnpctimer;
	.@label$ = instance_npcname("#sthd_event_3") + "::OnMobDead";
	monster 'sthb_map$,48,75,"Immortal Zombie Soldier",3476,1, .@label$;// AS_ZOMBIE
	monster 'sthb_map$,56,75,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,74,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,67,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,61,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,56,60,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,48,60,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,48,67,"Immortal Zombie Soldier",3476,1, .@label$;
	end;
OnTimer3000:
	if (mobcount( 'sthb_map$, instance_npcname("#sthd_event_3") + "::OnMobDead" ) > 0) {
		initnpctimer;
		end;
	}
	stopnpctimer;
	disablenpc instance_npcname("#sthd_event_3");
	donpcevent instance_npcname("#sthd_event_4") + "::OnStart";
	end;
OnMobDead:
	end;
}

// 1@sthb,68,67,0	script	#sthd_event_4	HIDDEN_WARP_NPC,{	// official coord
1@sthb,1,1,0	script	#sthd_event_4	HIDDEN_WARP_NPC,{
	end;
OnStart:
	enablenpc instance_npcname("#sthd_event_4");
	initnpctimer;
	.@label$ = instance_npcname("#sthd_event_4") + "::OnMobDead";
	monster 'sthb_map$,48,75,"Immortal Zombie Soldier",3476,1, .@label$;// AS_ZOMBIE
	monster 'sthb_map$,56,75,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,74,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,67,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,63,61,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,56,60,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,48,60,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,48,67,"Immortal Zombie Soldier",3476,1, .@label$;
	monster 'sthb_map$,56,79,"Sky Fortress Key Keeper",3478,1, .@label$;	// AS_ZOMBIE_SLAUGHTER
	end;
OnTimer3000:
	if (mobcount( 'sthb_map$, instance_npcname("#sthd_event_4") + "::OnMobDead" ) > 0) {
		initnpctimer;
		end;
	}
	stopnpctimer;
	disablenpc instance_npcname("#sthd_event_4");
	enablenpc instance_npcname("#Stefan_Action1");
	enablenpc instance_npcname("Stefan.J.E.Wolf#sthd_02");
	end;
OnMobDead:
	end;
}

1@sthb,64,67,0	script	#Stefan_Action1	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#Stefan_Action1");
	setpcblock PCBLOCK_NPC, true;
	sleep2 1000;
	cutin "stephan_j_e_w.bmp",2;
	unittalk getcharid(3), "" + strcharinfo(0) + " : I believe that huge Golem is what plays an important role in the Sky Fortress.";
	sleep2 2000;
	npctalk "Wolf: Every subordinate at the fortress...Intruders...Stop them...Bijou's...order...", instance_npcname("Stefan.J.E.Wolf#sthd_02");
	specialeffect2 EF_LOCKON;
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : What on earth is happening inside?";
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : Let's head to top! I believe there must be something there.";
	sleep2 2000;
	setpcblock PCBLOCK_NPC, false;
	specialeffect2 EF_LOCKON;
	specialeffect EF_BAKU,AREA, instance_npcname("Stefan.J.E.Wolf#sthd_02");
	cutin "",255;

	disablenpc instance_npcname("Stefan.J.E.Wolf#sthd_02");
	for ( .@i = 1; .@i <= 6; .@i++ ) {
		enablenpc instance_npcname("Deactivated Warp#sthd_mov_" + .@i);
		enablenpc instance_npcname("#sthd_move_back_a_" + .@i);
	}
	enablenpc instance_npcname("#sthd_move_01_01");
	enablenpc instance_npcname("#sthd_move_02_01");
	enablenpc instance_npcname("#sthd_move_02_02");

	enablenpc instance_npcname("#Stefan_Action2");	// 2nd map
	enablenpc instance_npcname("Stefan.J.E.Wolf#sthd_03");

	// Mobs spots
	for ( .@i = 5; .@i <= 18; .@i++ )
		enablenpc instance_npcname("#sthd_event_" + .@i);

	// Room Shuffle
	donpcevent instance_npcname("#sthd_key_control") + "::OnShuffle";
	end;
}


// Shuffle warp room
1@sthb,68,80,0	script	#sthd_key_control	HIDDEN_WARP_NPC,{
	end;
OnShuffle:
	switch( rand(6) ) {
	case 0:
		// 'warp_list[ <from room X> ] = <to room Y>;
		setarray 'warp_list[1], 5,1,3,4,6,2;
		break;
	case 1:
		setarray 'warp_list[1], 2,6,4,3,1,5;
		break;
	case 2:
		setarray 'warp_list[1], 3,5,1,6,2,4;
		break;
	case 3:
		setarray 'warp_list[1], 6,4,2,5,3,1;
		break;
	case 4:
		setarray 'warp_list[1], 1,3,5,2,4,6;
		break;
	case 5:
		setarray 'warp_list[1], 4,2,6,1,5,3;
		break;
	}
	end;
}


// Room exit
1@sthc,66,88,0	script	#sthd_move_back_a_1	WARPNPC,2,2,{
	end;
OnTouch:
	setarray .@coord[2],
		 39,85,	// Activated Warp#sthd_mov_1
		 83,95,	// Activated Warp#sthd_mov_2
		 28,39,	// Activated Warp#sthd_mov_3
		210,79,	// Activated Warp#sthd_mov_4
		143,87,	// Activated Warp#sthd_mov_5
		179,47;	// Activated Warp#sthd_mov_6
	.@room_num = atoi( replacestr( strnpcinfo(2), "sthd_move_back_a_", "" ) );
	.@index = inarray( 'warp_list[1], .@room_num ) * 2;
	warp 'sthb_map$, .@coord[.@index], .@coord[ .@index+1 ];
	end;
}

1@sthc,116,88,0	duplicate(#sthd_move_back_a_1)	#sthd_move_back_a_2	WARPNPC,2,2
1@sthc,16,6,0	duplicate(#sthd_move_back_a_1)	#sthd_move_back_a_3	WARPNPC,2,2
1@sthc,115,6,0	duplicate(#sthd_move_back_a_1)	#sthd_move_back_a_4	WARPNPC,2,2
1@sthc,66,6,0	duplicate(#sthd_move_back_a_1)	#sthd_move_back_a_5	WARPNPC,2,2
1@sthc,15,88,0	duplicate(#sthd_move_back_a_1)	#sthd_move_back_a_6	WARPNPC,2,2

// Room entrance
1@sthb,34,86,1	script	Activated Warp#sthd_mov_1	1_SHADOW_NPC,{
	if (select( "Don't step into the warp.", "Step into the warp." ) == 1) {
		mes "- Dreary warp -";
		mes "- Black light is shining. -";
		close;
	}
	mes "- Black Warp is swirling about. -";
	close2;
	setarray .@coord[2],
		 66,96,	// #sthd_move_back_a_1, #sthd_event_13
		116,96,	// #sthd_move_back_a_2, #sthd_event_14
		 16,13,	// #sthd_move_back_a_3, #sthd_event_18, Immortal Wind Ghost
		115,14,	// #sthd_move_back_a_4, #sthd_event_15
		 66,14,	// #sthd_move_back_a_5, #sthd_event_16
		 15,96;	// #sthd_move_back_a_6, #sthd_event_17, Immortal Cursed Knight

	.@room_num = atoi( replacestr( strnpcinfo(2), "sthd_mov_", "" ) );
	.@index = 'warp_list[.@room_num] * 2;
	warp 'sthc_map$, .@coord[.@index], .@coord[ .@index+1 ];
	end;
}

1@sthb,84,99,1	duplicate(Activated Warp#sthd_mov_1)	Activated Warp#sthd_mov_2	1_SHADOW_NPC
1@sthb,24,40,1	duplicate(Activated Warp#sthd_mov_1)	Activated Warp#sthd_mov_3	1_SHADOW_NPC
1@sthb,206,80,1	duplicate(Activated Warp#sthd_mov_1)	Activated Warp#sthd_mov_4	1_SHADOW_NPC
1@sthb,147,86,1	duplicate(Activated Warp#sthd_mov_1)	Activated Warp#sthd_mov_5	1_SHADOW_NPC
1@sthb,179,51,1	duplicate(Activated Warp#sthd_mov_1)	Activated Warp#sthd_mov_6	1_SHADOW_NPC

1@sthb,34,85,1	script	Deactivated Warp#sthd_mov_1	4_ENERGY_WHITE,{
	if (select( "Desactivate the warp.", "Activate the warp." ) == 1) {
		mes "- Move the fortress to a special place -";
		mes "- Accessible door -";
		mes "- You seen an accessible door -";
		close;
	}
	if (countitem(6960) < 1) {
		mes "- To operate the warp -";
		mes "- You need a key to the Sky Fortress. -";
		close;
	}
	delitem 6960,1;
	mes "- Warp has been -";
	mes "- successfully activated -";
	mes "- Dreary warp -";
	mes "- is brought up -";
	mes "- shining in black -";
	disablenpc();
	enablenpc instance_npcname("Activated Warp#" + strnpcinfo(2));
	close;
}

1@sthb,83,99,1	duplicate(Deactivated Warp#sthd_mov_1)	Deactivated Warp#sthd_mov_2	4_ENERGY_WHITE
1@sthb,24,39,1	duplicate(Deactivated Warp#sthd_mov_1)	Deactivated Warp#sthd_mov_3	4_ENERGY_WHITE
1@sthb,206,79,1	duplicate(Deactivated Warp#sthd_mov_1)	Deactivated Warp#sthd_mov_4	4_ENERGY_WHITE
1@sthb,147,87,1	duplicate(Deactivated Warp#sthd_mov_1)	Deactivated Warp#sthd_mov_5	4_ENERGY_WHITE
1@sthb,178,51,1	duplicate(Deactivated Warp#sthd_mov_1)	Deactivated Warp#sthd_mov_6	4_ENERGY_WHITE


// Spawn in the rooms
1@sthc,66,94,0	script	#sthd_event_13	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_13");
	.@label$ = instance_npcname("#sthd_event_13") + "::OnMobDead";
	monster 'sthc_map$,62,108,"Immortal Nightmare Shadow",3481,1, .@label$;// AS_EVIL_SHADOW1
	monster 'sthc_map$,70,108,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,70,101,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,66,115,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,70,116,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,69,127,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,64,132,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,61,127,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,61,101,"Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,62,116,"Immortal Nightmare Shadow",3481,1, .@label$;
	initnpctimer;
	end;
OnTimer2000:
	if (mobcount( 'sthc_map$, instance_npcname("#sthd_event_13") + "::OnMobDead" ) > 0) {
		initnpctimer;
		end;
	}
	stopnpctimer;
	enablenpc instance_npcname("Sky Fortress Gold Treasure#1");
	end;
OnMobDead:
	end;
}

1@sthc,116,94,0	script	#sthd_event_14	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_14");
	.@label$ = instance_npcname("#sthd_event_14") + "::OnMobDead";
	monster 'sthc_map$,112,101, "Immortal Angry Shadow",3482,1, .@label$;// AS_EVIL_SHADOW2
	monster 'sthc_map$,120,101, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,119,110, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,115,115, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,114,128, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,112,110, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,118,120, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,110,130, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,111,120, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,120,130, "Immortal Angry Shadow",3482,1, .@label$;
	initnpctimer;
	end;
OnTimer2000:
	if (mobcount( 'sthc_map$, instance_npcname("#sthd_event_14") + "::OnMobDead" ) > 0) {
		initnpctimer;
		end;
	}
	stopnpctimer;
	enablenpc instance_npcname("Sky Fortress Gold Treasure#2");
	end;
OnMobDead:
	end;
}

1@sthc,115,12,0	script	#sthd_event_15	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_15");
	.@label$ = instance_npcname("#sthd_event_15") + "::OnMobDead";
	monster 'sthc_map$,120,27, "Immortal Nightmare Shadow",3481,1, .@label$;// AS_EVIL_SHADOW1
	monster 'sthc_map$,120,19, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,111,27, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,115,33, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,111,36, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,111,45, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,114,49, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,119,36, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,119,45, "Immortal Nightmare Shadow",3481,1, .@label$;
	monster 'sthc_map$,116,18, "Immortal Nightmare Shadow",3481,1, .@label$;
	initnpctimer;
	end;
OnTimer2000:
	if (mobcount( 'sthc_map$, instance_npcname("#sthd_event_15") + "::OnMobDead" ) > 0) {
		initnpctimer;
		end;
	}
	stopnpctimer;
	enablenpc instance_npcname("Sky Fortress Gold Treasure#3");
	end;
OnMobDead:
	end;
}

1@sthc,66,12,0	script	#sthd_event_16	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_16");
	.@label$ = instance_npcname("#sthd_event_16") + "::OnMobDead";
	monster 'sthc_map$,70,18, "Immortal Angry Shadow",3482,1, .@label$;// AS_EVIL_SHADOW2
	monster 'sthc_map$,61,18, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,65,34, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,62,38, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,69,37, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,72,29, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,69,47, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,62,47, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,61,30, "Immortal Angry Shadow",3482,1, .@label$;
	monster 'sthc_map$,64,50, "Immortal Angry Shadow",3482,1, .@label$;
	initnpctimer;
	end;
OnTimer2000:
	if (mobcount( 'sthc_map$, instance_npcname("#sthd_event_16") + "::OnMobDead" ) > 0) {
		initnpctimer;
		end;
	}
	stopnpctimer;
	enablenpc instance_npcname("Sky Fortress Gold Treasure#4");
	end;
OnMobDead:
	end;
}

// Cursed Knight room
1@sthc,15,94,0	script	#sthd_event_17	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_17");
	donpcevent instance_npcname("Sky Fortress Treasure Box") + "::OnStart";	// enabled regardless of the monster count
	monster 'sthc_map$,19,106, "Immortal Death Shadow",3483,1;// AS_EVIL_SHADOW3
	monster 'sthc_map$,12,105, "Immortal Death Shadow",3483,1;
	areamonster 'sthc_map$,11,113,15,117, "Immortal Death Shadow",3483,2;
	areamonster 'sthc_map$,18,116,22,120, "Immortal Death Shadow",3483,2;
	areamonster 'sthc_map$,10,125,14,129, "Immortal Death Shadow",3483,2;
	areamonster 'sthc_map$,17,125,21,129, "Immortal Death Shadow",3483,2;
	end;
}

// Wind Ghost room
1@sthc,16,11,0	script	#sthd_event_18	HIDDEN_WARP_NPC,8,8,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_18");
	donpcevent instance_npcname("Wind Ghost in Experiment") + "::OnStart";	// enabled regardless of the monster count
	monster 'sthc_map$,19,21, "Immortal Death Shadow",3483,1;// AS_EVIL_SHADOW3
	monster 'sthc_map$,12,21, "Immortal Death Shadow",3483,1;
	areamonster 'sthc_map$,9,28,13,32, "Immortal Death Shadow",3483,2;
	areamonster 'sthc_map$,17,29,21,33, "Immortal Death Shadow",3483,2;
	areamonster 'sthc_map$,13,35,17,39, "Immortal Death Shadow",3483,2;
	areamonster 'sthc_map$,13,43,17,47, "Immortal Death Shadow",3483,2;
	end;
}

// Chest
1@sthc,66,137,4	script	Sky Fortress Gold Treasure#1	4_TREASURE_BOX,{
	mes "- You've found -";
	mes "- the Shining Treasure Box. -";
	next;
	if (select( "Open the box.", "Do not open the box." ) == 2) {
		mes "- If you open the box, -";
		mes "- there must be some good items. -";
		close;
	}
	if (is_party_leader() == false) {
		mes "- Those other than the party leader -";
		mes "- don't seem to be able to open the box. -";
		close;
	}
	if (checkweight(5128,1) == 0) {
		mes "- It's full of items -";
		mes "- so you can't open the box. -";
		close;
	}
	donpcevent instance_npcname( strnpcinfo(0) ) + "::OnBar";
	sleep2 3000;
	if (is_party_leader() == false)
		end;
	disablenpc();
	mes "- In that treasure box, -";
	.@r = rand(100);
	if (.@r < 32) {
		.@item_id = 985;	// Oridecon
		specialeffect EF_ENHANCE;
	}
	else if (.@r < 64) {
		.@item_id = 984;	// Elunium
		specialeffect EF_ENHANCE;
	}
	else if (.@r < 84) {
		.@item_id = 608;	// Seed_Of_Yggdrasil
		specialeffect EF_ENHANCE;
	}
	else if (.@r < 94) {
		.@item_id = 607;	// Yggdrasilberry
		specialeffect EF_ENHANCE;
	}
	else if (.@r < 99) {
		.@item_id = 616;	// Old_Card_Album
		specialeffect EF_ENHANCE;
	}
	else if (.@r  == 99) {
		.@item_id = 12246;	// Magic_Card_Album
		specialeffect EF_GUMGANG2;
		specialeffect EF_VOLCANO;
		specialeffect EF_PNEUMA;
	}
	getitem .@item_id, 1;
	mes "- you've found the " + getitemname(.@item_id) + ". -";
	close;
OnBar:
	progressbar_npc "000000",3;
	end;
}

1@sthc,116,137,4	duplicate(Sky Fortress Gold Treasure#1)	Sky Fortress Gold Treasure#2	4_TREASURE_BOX
1@sthc,116,55,4	duplicate(Sky Fortress Gold Treasure#1)	Sky Fortress Gold Treasure#3	4_TREASURE_BOX
1@sthc,66,55,4	duplicate(Sky Fortress Gold Treasure#1)	Sky Fortress Gold Treasure#4	4_TREASURE_BOX

// Cursed Knight
1@sthc,16,132,4	script	Sky Fortress Treasure Box	CLEAR_NPC,{
	mes "- You've found -";
	mes "- the Shining Treasure Box. -";
	next;
	if (select( "Open the box.", "Do not open the box." ) == 2) {
		mes "- If you open the box, -";
		mes "- there must be some good items. -";
		close;
	}
	if (is_party_leader() == false) {
		mes "- Those other than the party leader -";
		mes "- don't seem to be able to open the box. -";
		close;
	}
	if (checkweight(2655,1) == 0) {
		mes "- It's full of items -";
		mes "- so you can't open the box. -";
		close;
	}
	mes "- The treasure box is opening up -";
	mes "- and something suddenly -";
	mes "- showed up in the front. -";
	specialeffect EF_SILENT_BREEZE;
	specialeffect EF_LOCKON;
	unittalk getcharid(3), "" + strcharinfo(0) + " : You may have touched something wrong...";
	disablenpc instance_npcname("Sky Fortress Treasure Box");
	stopnpctimer;
	donpcevent instance_npcname("Immortal Cursed Knight#") + "::OnEvent";
	close;
OnStart:
	enablenpc instance_npcname("Sky Fortress Treasure Box");
	initnpctimer;
	end;
OnTimer8000:
	specialeffect EF_LIGHTSPHERE2;
	end;
OnTimer9000:
	initnpctimer;
	end;
}

1@sthc,16,129,4	script	Immortal Cursed Knight#	4_AS_BLOODY_KNIGHT,{
	end;
OnEvent:
	enablenpc instance_npcname("Immortal Cursed Knight#");
	sleep 2000;
	npctalk "Immortal Cursed Knight: What kind of intruder is trying to wake me up...";
	sleep 2000;
	npctalk "Immortal Cursed Knight: Doom to the petty thief coveting the treasure at the fortress...";
	sleep 2000;
	disablenpc instance_npcname("Immortal Cursed Knight#");
	monster 'sthc_map$,16,129,"Immortal Cursed Knight",3474,1, instance_npcname("Immortal Cursed Knight#") + "::OnKnightB";	// AS_BLOODY_KNIGHT
	'cursed_knight = $@mobid[0];
	initnpctimer;
	end;
OnTimer2000:
	if (mobcount('sthd_map$, instance_npcname("Immortal Cursed Knight#") + "::OnKnightB") < 1) {
		stopnpctimer;
		'cursed_knight = 0;
		mapannounce 'sthc_map$, "Stefan Jack Earnest Wolf: Fell down... Immortal Cursed Knight... Sad... Will kill... The intruder...", bc_map,0xEBFF;
		end;
	}
	if ('cursed_knight > 0) {
		.@r = rand(30);
		if (.@r == 0)
			unittalk 'cursed_knight, "Immortal Cursed Knight: Glory to Bijou! Death to the intruders!";
		else if (.@r == 1)
			unittalk 'cursed_knight, "Immortal Cursed Knight: The perishable is nothing but a handful of ash before the Immortal Knight!";
		else if (.@r == 2)
			unittalk 'cursed_knight, "Immortal Cursed Knight: I can't...I can't seem to control the power!";
	}
	end;
OnTimer3000:
	initnpctimer;
	end;
OnKnightB:
	end;
}

// Wind Ghost
1@sthc,16,54,4	script	Wind Ghost in Experiment	CLEAR_NPC,{
	if (select( "Examine the test tube.", "Do not examine the test tube." ) == 2) {
		mes "- I'm sure there is something -";
		mes "- extremely fearsome. -";
		close;
	}
	if (is_party_leader() == false) {
		mes "- Those other than the party leader -";
		mes "- don't seem to be able operate the test tube. -";
		close;
	}
	mes "- The test tube is opening up -";
	mes "- and something suddenly -";
	mes "- showed up in the front. -";
	specialeffect EF_SILENT_BREEZE;
	specialeffect EF_LOCKON;
	unittalk getcharid(3), "" + strcharinfo(0) + " : What...what is this?";
	donpcevent instance_npcname("Immortal Wind Ghost#01") + "::OnEvent";
	stopnpctimer;
	disablenpc instance_npcname("Wind Ghost in Experiment");
	close;
OnStart:
	enablenpc instance_npcname("Wind Ghost in Experiment");
	initnpctimer;
	end;
OnTimer8000:
	specialeffect EF_LIGHTSPHERE2;
	end;
OnTimer9000:
	initnpctimer;
	end;
}

1@sthc,15,49,4	script	Immortal Wind Ghost#01	4_AS_WIND_GHOST,{
	end;
OnEvent:
	enablenpc instance_npcname("Immortal Wind Ghost#01");
	sleep 2000;
	npctalk "Immortal Wind Ghost: Foolish human...You're praying for death...";
	sleep 2000;
	npctalk "Immortal Wind Ghost: The power boiling inside my body...It sure feels good...";
	sleep 2000;
	disablenpc instance_npcname("Immortal Wind Ghost#01");
	monster 'sthc_map$,15,49,"Immortal Wind Ghost",3475,1, instance_npcname("Immortal Wind Ghost#01") + "::OnWindDead";	// AS_WIND_GHOST
	'wind_ghost = $@mobid[0];
	initnpctimer;
	end;
OnTimer2000:
	if (mobcount('sthd_map$, instance_npcname("Immortal Wind Ghost#01") + "::OnWindDead") < 1) {
		stopnpctimer;
		'wind_ghost = 0;
		mapannounce 'sthc_map$, "Stefan Jack Earnest Wolf: Experiment... Became stronger... Immortal Wind Ghost...is dead...Death to all...", bc_map,0xEBFF;
		end;
	}
	if ('wind_ghost > 0) {
		.@r = rand(30);
		if (.@r == 0)
			unittalk 'wind_ghost, "Immortal Wind Ghost: I feel more power filling up inside...";
		else if (.@r == 1)
			unittalk 'wind_ghost, "Immortal Wind Ghost: I will kill you slowly...from the deep side of your lung...";
		else if (.@r == 2)
			unittalk 'wind_ghost, "Immortal Wind Ghost: Only death awaits the humans who dare to go against me...";
	}
	end;
OnTimer3000:
	initnpctimer;
	end;
OnWindDead:
	end;
}


// Spawn stairs - step 1
1@sthb,65,86,0	script	#sthd_event_5	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_5");
	monster 'sthb_map$,61,84,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,51,87,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,37,81,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,41,85,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,41,49,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,52,50,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,82,50,"Immortal Cursed Zombie",3480,1;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,34,57,38,61,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,80,49,"Sky Fortress Key Keeper",3478,1;		// AS_ZOMBIE_SLAUGHTER
	end;
}

1@sthb,62,49,0	script	#sthd_event_6	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_6");
	monster 'sthb_map$,79,48,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,67,50,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,85,60,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,82,74,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,83,49,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,83,71,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,79,96,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,69,95,"Immortal Zombie Assault",3479,1;
	areamonster 'sthb_map$,82,92,86,96,"Immortal Cursed Zombie",3480,2;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,83,84,87,88,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,73,96,"Sky Fortress Key Keeper",3478,1;
	end;
}

1@sthb,57,96,0	script	#sthd_event_7	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_7");
	monster 'sthb_map$,52,94,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,42,98,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,29,91,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,25,78,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,28,96,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,27,69,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,26,55,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,32,41,"Immortal Zombie Assault",3479,1;
	areamonster 'sthb_map$,27,65,31,69,"Immortal Cursed Zombie",3480,2;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,25,41,29,45,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,27,54,"Sky Fortress Key Keeper",3478,1;
	end;
}

1@sthb,32,39,0	script	#sthd_event_8	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_8");
	monster 'sthb_map$,53,38,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,64,41,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,78,38,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,43,41,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,28,40,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,59,40,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,92,45,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,95,57,"Immortal Zombie Assault",3479,1;
	areamonster 'sthb_map$,92,37,96,41,"Immortal Cursed Zombie",3480,2;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,87,39,91,43,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,75,40,"Sky Fortress Key Keeper",3478,1;
	end;
}

// Spawn stairs - step 2
1@sthb,209,64,0	script	#sthd_event_9	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_9");
	monster 'sthb_map$,207,50,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,205,38,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,195,36,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,209,38,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,161,39,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,150,36,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,144,38,"Immortal Cursed Zombie",3480,1;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,169,34,173,38,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,163,38,"Sky Fortress Key Keeper",3478,1;
	end;
}

1@sthb,144,47,0	script	#sthd_event_10	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_10");
	monster 'sthb_map$,142,61,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,145,71,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,142,83,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,147,94,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,143,64,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,144,78,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,165,95,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,173,92,"Immortal Zombie Assault",3479,1;
	areamonster 'sthb_map$,154,90,158,94,"Immortal Cursed Zombie",3480,2;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,141,92,145,96,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,154,96,"Sky Fortress Key Keeper",3478,1;
	end;
}

1@sthb,178,94,0	script	#sthd_event_11	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_11");
	monster 'sthb_map$,187,92,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,200,90,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,198,81,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,201,72,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,199,94,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,199,70,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,195,48,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,185,47,"Immortal Zombie Assault",3479,1;
	areamonster 'sthb_map$,196,60,200,64,"Immortal Cursed Zombie",3480,2;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,198,45,202,49,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,202,56,"Sky Fortress Key Keeper",3478,1;
	end;
}

1@sthb,179,48,0	script	#sthd_event_12	HIDDEN_WARP_NPC,5,5,{
	end;
OnTouch:
	disablenpc instance_npcname("#sthd_event_12");
	monster 'sthb_map$,168,49,"Immortal Fortress Legionnaire",3477,1;	// AS_IMMORTAL_CORPS
	monster 'sthb_map$,159,46,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,154,52,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,152,65,"Immortal Fortress Legionnaire",3477,1;
	monster 'sthb_map$,155,48,"Immortal Zombie Assault",3479,1;			// AS_ZOMBIE_MASTER
	monster 'sthb_map$,154,73,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,159,84,"Immortal Zombie Assault",3479,1;
	monster 'sthb_map$,171,82,"Immortal Zombie Assault",3479,1;
	areamonster 'sthb_map$,151,82,155,86,"Immortal Cursed Zombie",3480,2;			// AS_CURSED_SOLDIER
	areamonster 'sthb_map$,153,75,157,79,"Immortal Cursed Zombie",3480,2;
	if (rand(100) < 20)
		monster 'sthb_map$,156,46,"Sky Fortress Key Keeper",3478,1;
	end;
}


// Main event - 2nd step
1@sthb,207,83,0	script	#Stefan_Action2	HIDDEN_WARP_NPC,6,6,{
	end;
OnTouch:
	disablenpc instance_npcname("#Stefan_Action2");
	setpcblock PCBLOCK_NPC, true;
	sleep2 1000;
	cutin "stephan_j_e_w.bmp",2;
	npctalk "Stefan: ~Grunts~", instance_npcname("Stefan.J.E.Wolf#sthd_03");
	sleep2 2000;
	npctalk "Earnest: Filthy humans...Stop them...Guard...the holy fortress...", instance_npcname("Stefan.J.E.Wolf#sthd_03");
	specialeffect2 EF_LOCKON;
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : It's extremely vigilant of me.";
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : I think there must be something if we keep following";
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : that Golem's trace!";
	sleep2 2000;
	setpcblock PCBLOCK_NPC, false;
	mapannounce 'sthb_map$, "Stefan Jack Earnest Wolf: Holy fortress...Intruders...How wicked...Stop them...", bc_map,0xEBFF;
	cutin "",255;
	specialeffect2 EF_LOCKON;
	disablenpc instance_npcname("Stefan.J.E.Wolf#sthd_03");
	enablenpc instance_npcname("#Stefan for display3");
	enablenpc instance_npcname("Stefan.J.E.Wolf#sthd_04");
	end;
}

1@sthb,207,83,8	duplicate(dummy_npc)	Stefan.J.E.Wolf#sthd_03	4_AS_RAGGED_GOLEM


// Final step
1@sthd,103,115,6	duplicate(dummy_npc)	Stefan.J.E.Wolf#sthd_04	4_AS_RAGGED_GOLEM

1@sthd,103,115,0	script	#Stefan for display3	HIDDEN_WARP_NPC,10,10,{
	end;
OnTouch:
	.@stephan$ = instance_npcname("Stefan.J.E.Wolf#sthd_04");
	disablenpc instance_npcname("#Stefan for display3");
	setpcblock PCBLOCK_NPC, true;
	unittalk getcharid(3), "" + strcharinfo(0) + " : So this is finally the last...I suppose he must be the cause of Prontera Invasion, isn't he?";
	sleep2 2000;
	cutin "stephan_j_e_w.bmp",2;
	npctalk "Wolf: Adventurers...A bunch of foolish greenhorns...", .@stephan$;
	sleep2 2000;
	npctalk "Jack: I must follow...order...from Bijou...", .@stephan$;
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : Bijou? So, was Golem the mere guardian around here? Is that it...?";
	sleep2 2000;
	npctalk "Stefan: ~Growls~", .@stephan$;
	sleep2 2000;
	npctalk "Earnest: Filthy worms...Can't lead life as intended...Immortal power...My body...", .@stephan$;
	sleep2 2000;
	unittalk getcharid(3), "" + strcharinfo(0) + " : I'd better defeat it first.";
	sleep2 2000;
	mapannounce 'sthd_map$, "Stefan Jack Earnest Wolf: Soldiers...Bijou's...fortress...Cut them all...I'll step up...I'll kill them...all...", bc_map,0xEBFF;
	sleep2 2000;
	cutin "",255;
	specialeffect EF_LOCKON;
	sleep2 2000;
	setpcblock PCBLOCK_NPC, false;
	disablenpc .@stephan$;
	donpcevent instance_npcname("#Last_Boss") + "::OnStart";
	areamonster 'sthd_map$,84,76,124,116,"Zombie Soldier of Bijou",3476,10, instance_npcname("#Stefan for display3") + "::OnMobDead";	// AS_ZOMBIE
	initnpctimer;
	end;
OnTimer30000:
	stopnpctimer;
	mapannounce 'sthd_map$, "Stefan Jack Earnest Wolf: Cursed soldiers...Come...Bring it on...", bc_map,0xEBFF;
	monster 'sthd_map$,0,0,"Cursed Soldier of Bijou",3485,5, instance_npcname("#Stefan for display3") + "::OnMobDead";	// AS_D_CURSED_SOLDIER
	end;
OnStop:
	killmonster 'sthd_map$, instance_npcname("#Stefan for display3") + "::OnMobDead";
	stopnpctimer;
	end;
OnMobDead:
	end;
}

1@sthd,96,127,0	script	#Last_Boss	HIDDEN_WARP_NPC,{
	end;
OnStart:
	monster 'sthd_map$,103,115,"Stefan.J.E.Wolf",3473,1, instance_npcname("#Last_Boss") + "::OnBossDead";		// AS_RAGGED_GOLEM
	'boss_id = $@mobid[0];
	initnpctimer;
	end;
OnBossDead:
	end;
OnTimer1000:
	if ('boss_id < 1 || mobcount( 'sthd_map$, instance_npcname("#Last_Boss") + "::OnBossDead" ) < 1) {
		'boss_id = 0;
		'pantheon_event[0] = 1;
		'pantheon_event[1] = 1;
		donpcevent instance_npcname("#Last_Boss") + "::OnLastWord";
		donpcevent instance_npcname("#Last_Boss_Monster") + "::OnReset";
		donpcevent instance_npcname("#Last_Boss2_Monster") + "::OnReset";
		donpcevent instance_npcname("#Stefan for display3") + "::OnStop";
		donpcevent instance_npcname("Sky Fortress Escape Warp#end_warp") + "::OnEnable";
		stopnpctimer;
		end;
	}
	getunitdata 'boss_id, .@data;
	.@hp = .@data[UMOB_HP];

	if (.@hp > 6000000 && .@hp < 14000000) {
		if ('pantheon_event[0] == 0) {
			'pantheon_event[0] = 1;
			donpcevent instance_npcname("#Last_Boss2_Monster") + "::OnStart";
			mapannounce 'sthd_map$, "Stefan Jack Earnest Wolf: Strong...Adventurer... ~Growls~ My... soliders... Get out...", bc_map,0xEBFF;
		}
	}
	else if (.@hp > 5000000 && .@hp < 6000001)
		mapannounce 'sthd_map$, "Stefan Jack Earnest Wolf: I'll destroy you...I'll be smashing you...Come, the Cursed Soldiers...Ground-shaking...", bc_map,0xEBFF;
	else if (.@hp < 5000001) {
		if ('pantheon_event[1] == 0) {
			'pantheon_event[1] = 1;
			donpcevent instance_npcname("#Last_Boss2_Monster") + "::OnReset";
			donpcevent instance_npcname("#Last_Boss_Monster") + "::OnStart";
		}
		.@bomb[0] = rand(1,7);
		.@bomb[1] = rand(1,7);
		.@bomb[2] = rand(1,8);
		.@bomb[3] = rand(1,7);
		.@bomb[4] = rand(1,8);
		.@bomb[5] = rand(1,7);

		if (.@bomb[0] == 1) {
			.@pant[0] = 1;
			if (.@bomb[3] == 1) setarray .@pant[1],8,23;
			else if (.@bomb[3] == 2) setarray .@pant[1],9,21;
			else if (.@bomb[3] == 3) setarray .@pant[1],10,24;
			else if (.@bomb[3] == 4) setarray .@pant[1],11;
			else if (.@bomb[3] == 5) setarray .@pant[1],12;
			else if (.@bomb[3] == 6) setarray .@pant[1],13;
			else if (.@bomb[3] == 7) setarray .@pant[1],14,27;
		}
		else if (.@bomb[0] == 2) {
			.@pant[0] = 2;
			if (.@bomb[3] == 1) setarray .@pant[1],8,23;
			else if (.@bomb[3] == 2) setarray .@pant[1],9,1;
			else if (.@bomb[3] == 3) setarray .@pant[1],10,21;
			else if (.@bomb[3] == 4) setarray .@pant[1],11,24;
			else if (.@bomb[3] == 5) setarray .@pant[1],12,27;
			else if (.@bomb[3] == 6) setarray .@pant[1],13;
			else if (.@bomb[3] == 7) setarray .@pant[1],14;
		}
		else if (.@bomb[0] == 3) {
			.@pant[0] = 3;
			if (.@bomb[3] == 1) setarray .@pant[1],8,23;
			else if (.@bomb[3] == 2) setarray .@pant[1],9,24;
			else if (.@bomb[3] == 3) setarray .@pant[1],10,1;
			else if (.@bomb[3] == 4) setarray .@pant[1],11,21;
			else if (.@bomb[3] == 5) setarray .@pant[1],12,27;
			else if (.@bomb[3] == 6) setarray .@pant[1],13;
			else if (.@bomb[3] == 7) setarray .@pant[1],14;
		}
		else if (.@bomb[0] == 4) {
			.@pant[0] = 4;
			if (.@bomb[3] == 1) setarray .@pant[1],8,23;
			else if (.@bomb[3] == 2) setarray .@pant[1],9,24;
			else if (.@bomb[3] == 3) setarray .@pant[1],10;
			else if (.@bomb[3] == 4) setarray .@pant[1],11,1;
			else if (.@bomb[3] == 5) setarray .@pant[1],12,21;
			else if (.@bomb[3] == 6) setarray .@pant[1],13,27;
			else if (.@bomb[3] == 7) setarray .@pant[1],14;
		}
		else if (.@bomb[0] == 5) {
			.@pant[0] = 5;
			if (.@bomb[3] == 1) setarray .@pant[1],8,23;
			else if (.@bomb[3] == 2) setarray .@pant[1],9,24;
			else if (.@bomb[3] == 3) setarray .@pant[1],10;
			else if (.@bomb[3] == 4) setarray .@pant[1],11,27;
			else if (.@bomb[3] == 5) setarray .@pant[1],12,1;
			else if (.@bomb[3] == 6) setarray .@pant[1],13,21;
			else if (.@bomb[3] == 7) setarray .@pant[1],14;
		}
		else if (.@bomb[0] == 6) {
			setarray .@pant[0],6,26;
			if (.@bomb[3] == 1) setarray .@pant[2],8,23;
			else if (.@bomb[3] == 2) setarray .@pant[2],9,24;
			else if (.@bomb[3] == 3) setarray .@pant[2],10;
			else if (.@bomb[3] == 4) setarray .@pant[2],11,27;
			else if (.@bomb[3] == 5) setarray .@pant[2],12;
			else if (.@bomb[3] == 6) setarray .@pant[2],13,1;
			else if (.@bomb[3] == 7) setarray .@pant[2],14,21;
		}
		else if (.@bomb[0] == 7) {
			.@pant[0] = 7;
			if (.@bomb[3] == 1) setarray .@pant[1],8,23;
			else if (.@bomb[3] == 2) setarray .@pant[1],9,21;
			else if (.@bomb[3] == 3) setarray .@pant[1],10,24;
			else if (.@bomb[3] == 4) setarray .@pant[1],11;
			else if (.@bomb[3] == 5) setarray .@pant[1],12,27;
			else if (.@bomb[3] == 6) setarray .@pant[1],13;
			else if (.@bomb[3] == 7) setarray .@pant[1],14,1;
		}
		.@s = getarraysize(.@pant);

		if (.@bomb[1] == 1) {
			setarray .@pant[.@s],8,23;
			.@s += 2;
			if (.@bomb[4] == 1) setarray .@pant[.@s],15,5;
			else if (.@bomb[4] == 2) setarray .@pant[.@s],16,25;
			else if (.@bomb[4] == 3) setarray .@pant[.@s],17;
			else if (.@bomb[4] == 4) setarray .@pant[.@s],18;
			else if (.@bomb[4] == 5) setarray .@pant[.@s],19;
			else if (.@bomb[4] == 6) setarray .@pant[.@s],20;
			else if (.@bomb[4] == 7) setarray .@pant[.@s],21;
			else if (.@bomb[4] == 8) setarray .@pant[.@s],22;
		}
		else if (.@bomb[1] == 2) {
			setarray .@pant[.@s],9,24;
			.@s += 2;
			if (.@bomb[4] == 1) setarray .@pant[.@s],15;
			else if (.@bomb[4] == 2) setarray .@pant[.@s],16,5;
			else if (.@bomb[4] == 3) setarray .@pant[.@s],17,25;
			else if (.@bomb[4] == 4) setarray .@pant[.@s],18;
			else if (.@bomb[4] == 5) setarray .@pant[.@s],19;
			else if (.@bomb[4] == 6) setarray .@pant[.@s],20;
			else if (.@bomb[4] == 7) setarray .@pant[.@s],21;
			else if (.@bomb[4] == 8) setarray .@pant[.@s],22;
		}
		else if (.@bomb[1] == 3) {
			.@pant[.@s] = 10;
			.@s++;
			if (.@bomb[4] == 1) setarray .@pant[.@s],15;
			else if (.@bomb[4] == 2) setarray .@pant[.@s],16;
			else if (.@bomb[4] == 3) setarray .@pant[.@s],17,5;
			else if (.@bomb[4] == 4) setarray .@pant[.@s],18,25;
			else if (.@bomb[4] == 5) setarray .@pant[.@s],19;
			else if (.@bomb[4] == 6) setarray .@pant[.@s],20;
			else if (.@bomb[4] == 7) setarray .@pant[.@s],21;
			else if (.@bomb[4] == 8) setarray .@pant[.@s],22;
		}
		else if (.@bomb[1] == 4) {
			.@pant[.@s] = 11;
			.@s++;
			if (.@bomb[4] == 1) setarray .@pant[.@s],15;
			else if (.@bomb[4] == 2) setarray .@pant[.@s],16;
			else if (.@bomb[4] == 3) setarray .@pant[.@s],17;
			else if (.@bomb[4] == 4) setarray .@pant[.@s],18,5;
			else if (.@bomb[4] == 5) setarray .@pant[.@s],19,25;
			else if (.@bomb[4] == 6) setarray .@pant[.@s],20;
			else if (.@bomb[4] == 7) setarray .@pant[.@s],21;
			else if (.@bomb[4] == 8) setarray .@pant[.@s],22;
		}
		else if (.@bomb[1] == 5) {
			.@pant[.@s] = 12;
			.@s++;
			if (.@bomb[4] == 1) setarray .@pant[.@s],15;
			else if (.@bomb[4] == 2) setarray .@pant[.@s],16;
			else if (.@bomb[4] == 3) setarray .@pant[.@s],17;
			else if (.@bomb[4] == 4) setarray .@pant[.@s],18;
			else if (.@bomb[4] == 5) setarray .@pant[.@s],19,5;
			else if (.@bomb[4] == 6) setarray .@pant[.@s],20,25;
			else if (.@bomb[4] == 7) setarray .@pant[.@s],21;
			else if (.@bomb[4] == 8) setarray .@pant[.@s],22;
		}
		else if (.@bomb[1] == 6) {
			.@pant[.@s] = 13;
			.@s++;
			if (.@bomb[4] == 1) setarray .@pant[.@s],15;
			else if (.@bomb[4] == 2) setarray .@pant[.@s],16;
			else if (.@bomb[4] == 3) setarray .@pant[.@s],17;
			else if (.@bomb[4] == 4) setarray .@pant[.@s],18;
			else if (.@bomb[4] == 5) setarray .@pant[.@s],19;
			else if (.@bomb[4] == 6) setarray .@pant[.@s],20,5;
			else if (.@bomb[4] == 7) setarray .@pant[.@s],21,25;
			else if (.@bomb[4] == 8) setarray .@pant[.@s],22;
		}
		else if (.@bomb[1] == 7) {
			.@pant[.@s] = 14;
			.@s++;
			if (.@bomb[4] == 1) setarray .@pant[.@s],15;
			else if (.@bomb[4] == 2) setarray .@pant[.@s],16;
			else if (.@bomb[4] == 3) setarray .@pant[.@s],17;
			else if (.@bomb[4] == 4) setarray .@pant[.@s],18;
			else if (.@bomb[4] == 5) setarray .@pant[.@s],19;
			else if (.@bomb[4] == 6) setarray .@pant[.@s],20;
			else if (.@bomb[4] == 7) setarray .@pant[.@s],21,5;
			else if (.@bomb[4] == 8) setarray .@pant[.@s],22,25;
		}

		if (.@bomb[2] == 1) {
			.@pant[.@s] = 15;
			.@s++;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1,22;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2,23;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3,26;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7;
		}
		else if (.@bomb[2] == 2) {
			.@pant[.@s] = 16;
			.@s++;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2,22;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3,23;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4,26;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7;
		}
		else if (.@bomb[2] == 3) {
			setarray .@pant[.@s],17,25;
			.@s += 2;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3,22;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4,23;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5,26;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7;
		}
		else if (.@bomb[2] == 4) {
			.@pant[.@s] = 18;
			.@s++;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4,22;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5,23;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6,26;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7;
		}
		else if (.@bomb[2] == 5) {
			setarray .@pant[.@s],19,27;
			.@s += 2;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5,22;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6,23;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7,26;
		}
		else if (.@bomb[2] == 6) {
			.@pant[.@s] = 20;
			.@s++;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1,26;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6,22;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7,23;
		}
		else if (.@bomb[2] == 7) {
			.@pant[.@s] = 21;
			.@s++;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1,23;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3,26;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7,22;
		}
		else if (.@bomb[2] == 8) {
			.@pant[.@s] = 22;
			.@s++;
			if (.@bomb[5] == 1) setarray .@pant[.@s],1;
			else if (.@bomb[5] == 2) setarray .@pant[.@s],2,23;
			else if (.@bomb[5] == 3) setarray .@pant[.@s],3,26;
			else if (.@bomb[5] == 4) setarray .@pant[.@s],4;
			else if (.@bomb[5] == 5) setarray .@pant[.@s],5;
			else if (.@bomb[5] == 6) setarray .@pant[.@s],6;
			else if (.@bomb[5] == 7) setarray .@pant[.@s],7;
		}
		.@s = getarraysize(.@pant);
		for ( .@i = 0; .@i < .@s; ++.@i ) {
			if (.@tmp[.@pant[.@i]])	// prevent to trigger the same event multiple times
				continue;
			.@tmp[.@pant[.@i]] = true;
			donpcevent instance_npcname("#pantheon_damage" + .@pant[.@i]) + "::OnEvent";
		}
	}
	end;
OnTimer1500:
	.@r = rand(1,30);
	if (.@r == 1)
		unittalk 'boss_id, "Wolf: Don't get away... Come closer... I'll kill you...";
	else if (.@r < 11)
		unittalk 'boss_id, "Stefan: ~Groans~ ~Growls~";
	else if (.@r == 20)
		unittalk 'boss_id, "Jack: I'm hurt... I'm scared... I take courage... I hit you...";
	else if (.@r == 30)
		unittalk 'boss_id, "Earnest: I'm angry... It's noisy... I'll wipe them all up...";
	end;
OnTimer3000:
OnTimer4500:
	if ('boss_id < 1 || mobcount( 'sthd_map$, instance_npcname("#Last_Boss") + "::OnBossDead" ) < 1) {
		'boss_id = 0;
		'pantheon_event[0] = 1;
		'pantheon_event[1] = 1;
		donpcevent instance_npcname("#Last_Boss") + "::OnLastWord";
		donpcevent instance_npcname("#Last_Boss_Monster") + "::OnReset";
		donpcevent instance_npcname("#Last_Boss2_Monster") + "::OnReset";
		donpcevent instance_npcname("#Stefan for display3") + "::OnStop";
		donpcevent instance_npcname("Sky Fortress Escape Warp#end_warp") + "::OnEnable";
		stopnpctimer;
	}
	end;
OnTimer6000:
	initnpctimer;
	end;
OnLastWord:
	mapannounce 'sthd_map$, "Stefan Jack Earnest Wolf: Dead...I was...But...I won't be dead...", bc_map,0xEBFF;
	sleep 3000;
	mapannounce 'sthd_map$, "Stefan Jack Earnest Wolf: Comes back...the power of Bijou...Eternal body...Again...", bc_map,0xEBFF;
	end;
}

// hp > 6000000 && hp < 14000000
1@sthd,99,128,0	script	#Last_Boss2_Monster	HIDDEN_WARP_NPC,{
	end;
OnStart:
OnTimer10000:
	initnpctimer;
	end;
OnTimer1000:
	if (mobcount( 'sthd_map$, instance_npcname("#Last_Boss2_Monster") + "::OnMobDead" ) < 8)
		areamonster 'sthd_map$,89,81,119,111,"Zombie Soldier of Bijou",3476,3, instance_npcname("#Last_Boss2_Monster") + "::OnMobDead";	// AS_ZOMBIE
	end;
OnReset:
	killmonster 'sthd_map$, instance_npcname("#Last_Boss2_Monster") + "::OnMobDead";
	stopnpctimer;
	end;
OnMobDead:
	end;
}

// hp < 5000001
1@sthd,99,127,0	script	#Last_Boss_Monster	HIDDEN_WARP_NPC,{
	end;
OnStart:
OnTimer10000:
	initnpctimer;
	end;
OnReset:
	killmonster 'sthd_map$, instance_npcname("#Last_Boss_Monster") + "::OnMobDead";
	stopnpctimer;
	end;
OnTimer1000:
OnTimer8000:
OnTimer16000:
OnTimer24000:
OnTimer32000:
	// no count check
	areamonster 'sthd_map$,84,76,124,116,"Cursed Soldier of Bijou",3485,2, instance_npcname("#Last_Boss_Monster") + "::OnMobDead";	// AS_D_CURSED_SOLDIER
	end;
OnTimer33000:
	stopnpctimer;
	end;
OnMobDead:
	end;
}

// Kill the player
1@sthd,94,119,0	script	#pantheon_damage1	HIDDEN_WARP_NPC,6,5,{
	end;
OnTouch:
	unitkill getcharid(3);
	end;
OnEvent:
	specialeffect EF_GUMGANG4;
	progressbar_npc "000000",4;
	specialeffect EF_NPC_EARTHQUAKE;
	cloakoffnpc();
	initnpctimer;
	end;
OnTimer1000:
	cloakonnpc();
	end;
OnTimer2000:
	stopnpctimer;
	end;
}
1@sthd,96,109,0	duplicate(#pantheon_damage1)	#pantheon_damage2	HIDDEN_WARP_NPC,6,5
1@sthd,104,110,0	duplicate(#pantheon_damage1)	#pantheon_damage3	HIDDEN_WARP_NPC,6,5
1@sthd,110,110,0	duplicate(#pantheon_damage1)	#pantheon_damage4	HIDDEN_WARP_NPC,6,5
1@sthd,113,117,0	duplicate(#pantheon_damage1)	#pantheon_damage5	HIDDEN_WARP_NPC,6,5
1@sthd,112,103,0	duplicate(#pantheon_damage1)	#pantheon_damage6	HIDDEN_WARP_NPC,6,5
1@sthd,104,103,0	duplicate(#pantheon_damage1)	#pantheon_damage7	HIDDEN_WARP_NPC,6,5
1@sthd,97,103,0	duplicate(#pantheon_damage1)	#pantheon_damage8	HIDDEN_WARP_NPC,6,5
1@sthd,92,97,0	duplicate(#pantheon_damage1)	#pantheon_damage9	HIDDEN_WARP_NPC,6,5
1@sthd,99,95,0	duplicate(#pantheon_damage1)	#pantheon_damage10	HIDDEN_WARP_NPC,6,5
1@sthd,108,95,0	duplicate(#pantheon_damage1)	#pantheon_damage11	HIDDEN_WARP_NPC,6,5
1@sthd,116,95,0	duplicate(#pantheon_damage1)	#pantheon_damage12	HIDDEN_WARP_NPC,6,5
1@sthd,112,87,0	duplicate(#pantheon_damage1)	#pantheon_damage13	HIDDEN_WARP_NPC,6,5
1@sthd,104,88,0	duplicate(#pantheon_damage1)	#pantheon_damage14	HIDDEN_WARP_NPC,6,5
1@sthd,95,87,0	duplicate(#pantheon_damage1)	#pantheon_damage15	HIDDEN_WARP_NPC,6,5
1@sthd,96,78,0	duplicate(#pantheon_damage1)	#pantheon_damage16	HIDDEN_WARP_NPC,6,5
1@sthd,94,72,0	duplicate(#pantheon_damage1)	#pantheon_damage17	HIDDEN_WARP_NPC,6,5
1@sthd,104,81,0	duplicate(#pantheon_damage1)	#pantheon_damage18	HIDDEN_WARP_NPC,6,5
1@sthd,111,81,0	duplicate(#pantheon_damage1)	#pantheon_damage19	HIDDEN_WARP_NPC,6,5
1@sthd,114,72,0	duplicate(#pantheon_damage1)	#pantheon_damage20	HIDDEN_WARP_NPC,6,5
1@sthd,126,96,0	duplicate(#pantheon_damage1)	#pantheon_damage21	HIDDEN_WARP_NPC,6,6
1@sthd,81,96,0	duplicate(#pantheon_damage1)	#pantheon_damage22	HIDDEN_WARP_NPC,6,6
1@sthd,100,71,0	duplicate(#pantheon_damage1)	#pantheon_damage23	HIDDEN_WARP_NPC,6,6
1@sthd,91,101,0	duplicate(#pantheon_damage1)	#pantheon_damage24	HIDDEN_WARP_NPC,6,6
1@sthd,117,101,0	duplicate(#pantheon_damage1)	#pantheon_damage25	HIDDEN_WARP_NPC,6,6
1@sthd,117,90,0	duplicate(#pantheon_damage1)	#pantheon_damage26	HIDDEN_WARP_NPC,6,6
1@sthd,90,90,0	duplicate(#pantheon_damage1)	#pantheon_damage27	HIDDEN_WARP_NPC,6,6

1@sthd,104,96,4	script	Sky Fortress Escape Warp#end_warp	1_SHADOW_NPC,{
	if (select( "Do not go outside of the Sky Fortress.", "Go outside of the Sky Fortress." ) == 1) {
		mes "- The warp is emanating bright lights. -";
		close;
	}
	mes "- You start to transport. -";
	close2;
	if (fortress_entrance_loc == 0)
		warp "prt_q",244,81;
	else {
		warp "dali02",117,69;
		fortress_entrance_loc = 0;
	}
	end;

OnEnable:
	initnpctimer;
	enablenpc instance_npcname("Sky Fortress Escape Warp#end_warp");
	end;
OnTimer2000:
	specialeffect EF_ENHANCE;
	end;
OnTimer3000:
	initnpctimer;
	end;

OnInstanceInit:
	'status_event = 0;
	'boss_id = 0;
	'pantheon_event[0] = 0;
	'pantheon_event[1] = 0;

	'sthb_map$ = instance_mapname("1@sthb");
	'sthc_map$ = instance_mapname("1@sthc");
	'sthd_map$ = instance_mapname("1@sthd");

	// Warps
	disablenpc instance_npcname("#sthd_move_01_01");
	disablenpc instance_npcname("#sthd_move_02_01");
	disablenpc instance_npcname("#sthd_move_02_02");

	disablenpc instance_npcname("#sthd_event_1_boss");
	disablenpc instance_npcname("Stefan.J.E.Wolf#sthd_01");
	disablenpc instance_npcname("Stefan.J.E.Wolf#sthd_02");
	disablenpc instance_npcname("#Stefan_Action1");

	for ( .@i = 1; .@i <= 6; .@i++ ) {
		disablenpc instance_npcname("Activated Warp#sthd_mov_" + .@i);
		disablenpc instance_npcname("Deactivated Warp#sthd_mov_" + .@i);
		disablenpc instance_npcname("#sthd_move_back_a_" + .@i);
	}

	disablenpc instance_npcname("#sthd_event_2");
	disablenpc instance_npcname("#sthd_event_3");
	disablenpc instance_npcname("#sthd_event_4");
	for ( .@i = 5; .@i <= 18; .@i++ )
		disablenpc instance_npcname("#sthd_event_" + .@i);

	disablenpc instance_npcname("#sthd_key_control");

	disablenpc instance_npcname("Sky Fortress Gold Treasure#1");
	disablenpc instance_npcname("Sky Fortress Gold Treasure#2");
	disablenpc instance_npcname("Sky Fortress Gold Treasure#3");
	disablenpc instance_npcname("Sky Fortress Gold Treasure#4");
	disablenpc instance_npcname("Sky Fortress Treasure Box");
	disablenpc instance_npcname("Wind Ghost in Experiment");
	disablenpc instance_npcname("Immortal Cursed Knight#");
	disablenpc instance_npcname("Immortal Wind Ghost#01");

	disablenpc instance_npcname("#Stefan_Action2");
	disablenpc instance_npcname("Stefan.J.E.Wolf#sthd_03");

	// Boss room
	disablenpc instance_npcname("#Stefan for display3");
	disablenpc instance_npcname("Stefan.J.E.Wolf#sthd_04");
	disablenpc instance_npcname("#Last_Boss");
	disablenpc instance_npcname("#Last_Boss2_Monster");
	disablenpc instance_npcname("#Last_Boss_Monster");
	disablenpc instance_npcname("Sky Fortress Escape Warp#end_warp");
	for ( .@i = 1; .@i <= 27; .@i++ )
		cloakonnpc instance_npcname("#pantheon_damage" + .@i);
	end;
}
