You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2071 lines
71 KiB
Plaintext

//===== 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;
}