summaryrefslogblamecommitdiff
path: root/npc/018-6-3/main.txt
blob: 8bd8898c42cb265f0d0e8902b0aee5e1b6e426f0 (plain) (tree)
1
2
3
4
5
6
7
8





                               

                        














                                                                          
                               
                                                 

























                                                                
                                                           

                                                           
                                                           

                                                           


           



















                                                                               
                                   






                          

                                                                                                                      


           








                                                     
                                                       
                                     
                                                             
                                               
                                                                                                                                                 


                                         



                                                                                    

                                                        
                                                                                    
         
                     
     
                

 

                                                       

                                             


                                                            
     

        
         

                                      


                                                           
     


         
        


                                                        
                                                        
     


         
        




                                                           


         
         




                                                           


         
         


                                                        
                                                        
     


         
         




                                                           


            
          




                                                            

        




                                                    






                       
                                                      
                                                                                   
                     
                                                                                                           


                                                                                               
                                                                                            

        
                                                                
                                                            



                                   
                 
 



                                   
                 




                                   
                 




                                   
                 




                                    
                  




                                    
                  




                                    
                  




                                     
                   






                                     
           
                                             














                                                                    

        

 



                             




                         
                                                                










                                                                



                                                                  
                  
               
                                                                  
                 
                  

                                                 
                                                                                 




                                                          
                                     


























                                                                                     
                            
                                                                
                                        
                                







                                            
                                                       







                                                                                 





                                                                                    
                                  

                                                                                            




                                                        


                                            
 







                                        
 





                                                                                                
                                                                                  

                                                                         





                                                                         
                                              
                                                                                              
                                                                               
                                                                                                                                                                










                                                                                                            
                                                                                  






                
 

                                                                             
 
// TMW2 Scripts
// Author:
//    Jesusalva
// Description:
//    Controls Forgotten Shrine

018-6-3	mapflag	nowarpto

// 01863_RelevanceCheck ( Room ID )
function	script	01863_RelevanceCheck	{
    .@id=getarg(0);
    .@q=getq(LoFQuest_Barbara);
    .@q2=getq2(LoFQuest_Barbara);
    .@q3=getq3(LoFQuest_Barbara);
    if (.@q < 3)
        Exception("INVALID QUEST STATE, REVCHECK", RB_DEFAULT|RB_ISFATAL);
    if (.@q != 3)
        return false;
    if (.@q3 & .@id)
        return false;
    return true;
}

// Shut down the enabled warps.
function	script	01863_DisableAllWarps	{
    .@q=getq(LoFQuest_Barbara);
    .@q2=getq2(LoFQuest_Barbara);
    .@q3=getq3(LoFQuest_Barbara);
    if (.@q < 3)
        Exception("ERROR, INVALID WARP", RB_DEFAULT|RB_ISFATAL);

    disablenpc instance_npcname("#01863_fromNorthtoOut", .@q2);
    disablenpc instance_npcname("#01863_fromNorthtoNW", .@q2);
    disablenpc instance_npcname("#01863_fromNorthtoNE", .@q2);
    disablenpc instance_npcname("#01863_fromSouthtoOut", .@q2);
    disablenpc instance_npcname("#01863_fromSouthtoSW", .@q2);
    disablenpc instance_npcname("#01863_fromSouthtoSE", .@q2);
    disablenpc instance_npcname("#01863_fromNWtoNorth", .@q2);
    disablenpc instance_npcname("#01863_fromNWtoNC", .@q2);
    disablenpc instance_npcname("#01863_fromNWtoSW", .@q2);
    disablenpc instance_npcname("#01863_fromSWtoSouth", .@q2);
    disablenpc instance_npcname("#01863_fromSWtoSC", .@q2);
    disablenpc instance_npcname("#01863_fromSWtoNW", .@q2);
    disablenpc instance_npcname("#01863_fromNEtoNorth", .@q2);
    disablenpc instance_npcname("#01863_fromNEtoNC", .@q2);
    disablenpc instance_npcname("#01863_fromNEtoSE", .@q2);
    disablenpc instance_npcname("#01863_fromSEtoSouth", .@q2);
    disablenpc instance_npcname("#01863_fromSEtoSC", .@q2);
    disablenpc instance_npcname("#01863_fromSEtoNE", .@q2);
    disablenpc instance_npcname("#01863_fromNCtoNW", .@q2);
    disablenpc instance_npcname("#01863_fromNCtoNE", .@q2);
    disablenpc instance_npcname("#01863_fromNCtoCC", .@q2);
    disablenpc instance_npcname("#01863_fromSCtoSW", .@q2);
    disablenpc instance_npcname("#01863_fromSCtoSE", .@q2);
    disablenpc instance_npcname("#01863_fromSCtoCC", .@q2);
    disablenpc instance_npcname("#01863_fromCCtoNC", .@q2);
    disablenpc instance_npcname("#01863_fromCCtoSC", .@q2);
    return;
}

// Main Controller for Instanced maps
018-6-3,0,0,0	script	#01863_InstCtrl	NPC_HIDDEN,{
    end;

// Map, x1, y1, x2, y2, mob, amount
function AreaMonsterB {
    .@m$=getarg(0);
    .@x1=getarg(1);
    .@x2=getarg(3);
    .@y1=getarg(2);
    .@y2=getarg(4);
    .@mi=getarg(5);
    .@am=getarg(6);
    if (!.@am)
        return;
    areamonster(.@m$, .@x1, .@y1, .@x2, .@y2, strmobinfo(1, .@mi), .@mi, .@am);
    //, instance_npcname(.name$)+"::OnKill"+.@mi);
    return;
}

// Map, x1, y1, x2, y2, mob, bossID
function AreaMonsterBoss {
    .@m$=getarg(0);
    .@x1=getarg(1);
    .@x2=getarg(3);
    .@y1=getarg(2);
    .@y2=getarg(4);
    .@mi=getarg(5);
    .@id=getarg(6);
    areamonster(.@m$, .@x1, .@y1, .@x2, .@y2, strmobinfo(1, .@mi), .@mi, 1, instance_npcname(.name$)+"::OnKill"+.@id);
    return;
}

// BossRoom ( RoomID, x1, y1, x2, y2, adjustment )
// Adjustment is for bigger rooms. Defaults to false.
function BossRoom {
    .@id=getarg(0);
    .@x1=getarg(1);
    .@y1=getarg(2);
    .@x2=getarg(3);
    .@y2=getarg(4);
    .@ad=getarg(5, false);
    // True: Must spawn boss, False: Allow to use warps
    if (01863_RelevanceCheck(.@id)) {
        mapannounce getmap(), l("BOSS FIGHT!"), bc_map|bc_pc;
        // Spawn a boss. Aggressive chance: 33%
        AreaMonsterBoss(getmap(), .@x1, .@y1, .@x2, .@y2, any(HolyPixie, NulityPixie, VanityPixie, TerraniteProtector, GoboBear, Centaur), .@id);

        // BIG ROOM: 6~12 support units
        // SMALL ROOM: 5~10 support units
        AreaMonsterB(getmap(), .@x1, .@y1, .@x2, .@y2, BlackSlime, rand2(2,4)+.@ad);
        AreaMonsterB(getmap(), .@x1, .@y1, .@x2, .@y2, DarkLizard, rand2(1,2)+.@ad);
        AreaMonsterB(getmap(), .@x1, .@y1, .@x2, .@y2, BlackScorpion, rand2(1,2));
        AreaMonsterB(getmap(), .@x1, .@y1, .@x2, .@y2, Archant, rand2(1,2)-.@ad);
        // Only spawn the fast Hooded Ninja on big rooms
        if (.@ad) {
            AreaMonsterB(getmap(), .@x1, .@y1, .@x2, .@y2, HoodedNinja, any(0,0,1));
        }
        return false;
    }
    return true;
}

// W - West, C - Center, E - East, N - North, S - South
OnRoomNorth:
L_Room1:
    if (BossRoom(1, 62, 41, 121, 58, true)) {
        enablenpc instance_npcname("#01863_fromNorthtoNW");
        enablenpc instance_npcname("#01863_fromNorthtoNE");
        enablenpc instance_npcname("#01863_fromNorthtoOut");
    }
    end;

OnRoomNW:
L_Room2:
    if (BossRoom(2, 48, 65, 68, 85)) {
        enablenpc instance_npcname("#01863_fromNWtoNorth");
        enablenpc instance_npcname("#01863_fromNWtoNC");
        enablenpc instance_npcname("#01863_fromNWtoSW");
    }
    end;

OnRoomNC:
L_Room4:
    if (BossRoom(4, 77, 65, 103, 76)) {
        enablenpc instance_npcname("#01863_fromNCtoNW");
        enablenpc instance_npcname("#01863_fromNCtoNE");
        enablenpc instance_npcname("#01863_fromNCtoCC");
    }
    end;

OnRoomNE:
L_Room8:
    if (BossRoom(8, 111, 65, 131, 85)) {
        enablenpc instance_npcname("#01863_fromNEtoNorth");
        enablenpc instance_npcname("#01863_fromNEtoNC");
        enablenpc instance_npcname("#01863_fromNEtoSE");
    }
    end;

OnRoomSW:
L_Room16:
    if (BossRoom(16, 48, 95, 68, 115)) {
        enablenpc instance_npcname("#01863_fromSWtoSouth");
        enablenpc instance_npcname("#01863_fromSWtoSC");
        enablenpc instance_npcname("#01863_fromSWtoNW");
    }
    end;

OnRoomSC:
L_Room32:
    if (BossRoom(32, 77, 104, 103, 115)) {
        enablenpc instance_npcname("#01863_fromSCtoSW");
        enablenpc instance_npcname("#01863_fromSCtoSE");
        enablenpc instance_npcname("#01863_fromSCtoCC");
    }
    end;

OnRoomSE:
L_Room64:
    if (BossRoom(64, 111, 95, 131, 115)) {
        enablenpc instance_npcname("#01863_fromSEtoSouth");
        enablenpc instance_npcname("#01863_fromSEtoSC");
        enablenpc instance_npcname("#01863_fromSEtoNE");
    }
    end;

OnRoomSouth:
L_Room128:
    if (BossRoom(128, 62, 122, 121, 139, true)) {
        enablenpc instance_npcname("#01863_fromSouthtoSW");
        enablenpc instance_npcname("#01863_fromSouthtoSE");
        enablenpc instance_npcname("#01863_fromSouthtoOut");
    }
    end;

OnRoomCC:
    enablenpc instance_npcname("#01863_fromCCtoNC");
    enablenpc instance_npcname("#01863_fromCCtoSC");
    end;

OnFinalRoom:
// Room: 74,83 ~ 106,97
    .@x1=74;
    .@y1=83;
    .@x2=106;
    .@y2=97;
    .@id=256;
    changemusic getmap(), "let_the_battles_begin.ogg";
    mapannounce getmap(), col(l("FINAL BOSS FIGHT - WATCH OUT!"), 1), bc_map|bc_pc;
    .@mi=NightDragon;
    @boss=monster(getmap(), 90, 89, strmobinfo(1, .@mi), .@mi, 1, instance_npcname(.name$)+"::OnKillBoss");

    // Spawn reinforcements based on difficulty
    AreaMonsterB(getmap(), .@x1, .@y1, .@x2, .@y2, MagicGoblin, (@difficulty_modulus ? 4 : 2));
    AreaMonsterB(getmap(), .@x1, .@y1, .@x2, .@y2, DeathCat, (@difficulty_modulus ? 2 : 0));
    end;

// Kill boss will use setq3 and also erase any remaining monster
// Then it'll cast again the room event to enable the warps.
OnKill1:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|1;
    killmonsterall(getmap());
    goto L_Room1;

OnKill2:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|2;
    killmonsterall(getmap());
    goto L_Room2;

OnKill4:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|4;
    killmonsterall(getmap());
    goto L_Room4;

OnKill8:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|8;
    killmonsterall(getmap());
    goto L_Room8;

OnKill16:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|16;
    killmonsterall(getmap());
    goto L_Room16;

OnKill32:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|32;
    killmonsterall(getmap());
    goto L_Room32;

OnKill64:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|64;
    killmonsterall(getmap());
    goto L_Room64;

OnKill128:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|128;
    killmonsterall(getmap());
    goto L_Room128;

OnKill256:
    .@q3=getq3(LoFQuest_Barbara);
    setq3 LoFQuest_Barbara, .@q3|256;
    killmonsterall(getmap());
    end;

OnKillBoss:
    changemusic getmap(), "Misty_Shrine.ogg";
    if (playerattached()) {
        enablenpc instance_npcname("???#01863");
        getexp 200000, 10000;
        unittalk(@boss, l("Alright... I shall acknowledge you..."));
        .@q=getq(LoFQuest_Barbara);
        .@q2=getq2(LoFQuest_Barbara);
        .@q3=getq3(LoFQuest_Barbara);
        setq LoFQuest_Barbara, 4, .@q2, 0;
    // else: victory nullified (how did this happen)
    } else {
        enablenpc instance_npcname("Mana Stone#01863");
        Exception("Could not finish the Boss Fight!");
    }
    enablenpc instance_npcname("#01863_fromCCtoNC");
    enablenpc instance_npcname("#01863_fromCCtoSC");
    end;

}

/////////////////////////////
/////////////////////////////
/////////////////////////////
// Critical Room
// NCCC: 90.74 → 90,85
// SCCC: 90.105 → 90,95
// Altar: 90,90
// Room: 74,83 ~ 106,97

018-6-3,90,91,0	script	Mana Stone#01863	NPC_MANA_STONE,{
    mesn;
    mes l("The mighty Mana Stone does not reacts against you.");
    mes l("It's")+b(l("small, red, round and shiny."));
    mes l("If you fell ready, perhaps you should touch it?");
    mes "";
    select
        l("Touch it!"),
        l("Take it!"),
        l("Break it!"),
        l("Leave it alone!");
    mes "";
    switch (@menu) {
        case 1:
            mesc l("Curiously, you try to touch the Mana Stone.");
            next;
            break;
        case 2:
            mesc l("Determinate, you move your hand to grab it.");
            next;
            break;
        case 3:
            mesc l("Are you out of your mind?!");
            mesc l("If you break that, you could never go to the World's Edge!");
            next;
            mesc l("Attempt to break the Mana Stone?"), 1;
            if (askyesno() == ASK_NO)
                close;
            mes "";
            @difficulty_modulus=true;
            break;
        default:
            close;
    }
    mes "";
    mes ".:: " + l("The Mana Stone") + " ::.";
    mesq l("Do you think yourself worthy of my power?");
    next;
    // Both choices are valid, actually.
    askyesno();
    mes ".:: " + l("The Mana Stone") + " ::.";
    if (@menu == ASK_YES)
        mesq l("Then prove yourself!");
    else
        mesq l("But that's no excuse for cowardice!");
    next;
    mes ".:: " + l("The Mana Stone") + " ::.";
    mesq l("Foolish mortal, who doesn't knows what you are doing!");
    next;
    setnpcdisplay instance_npcname("Mana Stone#01863"), NPC_LIGHTBRINGER;
    mes ".:: " + l("The Mana Stone") + " ::.";
    mesq l("I shall decide here and now, if you are worth of living in this world!");
    next;
    mes ".:: " + l("The Mana Stone") + " ::.";
    mesq l("I am the Judge, and I shall make Judgment upon you!");
    mesc l("WARNING: ")+l("If you die or logout here, the quest will be reset!"), 1;
    next;
    01863_DisableAllWarps();
    doevent instance_npcname("#01863_InstCtrl")+"::OnFinalRoom";
    disablenpc instance_npcname(.name$);
    setq3 LoFQuest_Barbara, 255;
    close;

// Mana Stone is the initial NPC, not hidden
OnInit:
    disablenpc .name$;
    end;
}

018-6-3,90,91,0	script	???#01863	NPC_NO_SPRITE,{
    .@q=getq(LoFQuest_Barbara);
    .@q2=getq2(LoFQuest_Barbara);
    .@q3=getq3(LoFQuest_Barbara);
    if (.@q != 4)
        Exception("ERROR INVALID APPLE 1863 ST NOT 4", RB_DEFAULT|RB_ISFATAL);
    if (.@q3)
        Exception("ERROR INVALID APPLE 1863 Q3 IS VALID", RB_DEFAULT|RB_ISFATAL);

    mesc l("You see a red apple here. It is ")+b(l("small, red, round and shiny."));
    next;
    mesc l("Take it?");
    if (askyesno() == ASK_YES) {
        inventoryplace MagicApple, 1;
        getitem MagicApple, 1;
        setq3 LoFQuest_Barbara, 1;
        mes "";
        mesc l("You take the @@. It seems to be the stolen item.", getitemlink(MagicApple));
        if (@difficulty_modulus) {
            @difficulty_modulus=false;
            Zeny+=200;
            mesc l("You also find @@ GP with it.", 200);
        }
        disablenpc instance_npcname(.name$);
    }
    close;

// NPC must remain hidden.
OnInit:
    disablenpc .name$;
    end;
OnInstanceInit:
    disablenpc instance_npcname(.name$);
    end;
}

018-6-3,34,148,0	script	Book#01863A	NPC_NO_SPRITE,{
    if (!getskilllv(TMW2_ANCIENTLANGUAGES)) {
        mesn strcharinfo(0);
        mesc l("It's written in an ancient language, you cannot understand what's written.");
        mesc l("The symbols at the end of the book look to be warnings, though.");
        mesc l("I should check if I have more than enough potions and food before proceeding!");
        mesc l("REMEMBER: FAILURE AT A BOSS FIGHT WILL CAUSE QUEST TO RESET!"), 1;
        next;
        mesc l("I am really curious what this shrine is about, though.");
        close;
    }
    mes ".:: " + l("Orbyter Shrine") + " ::.";
    mes l("This shrine is devoted to those whom shall never come back.");
    mes l("Deep sorrow and sadness, this is the Forgotten Shrine.");
    mes "";
    // TRANSLATORS: IWS = Internal Warp System
    mes l("To the wanderer: Please avoid entering on the rooms by the internal warp system.");
    mesc l("Guardians will come to stop you, and to lock down the shrine!"), 1;
    mes l("In memoriam. May those whom shall never come back find rest in their afterlifes."); // TRANSLATORS: In Memoriam = Latin expression, means "in memory"
    mes l("May their journey be successful, may their objectives be attained, may the Mana rest in peace.");
    mes "";
    mes l("The Mana Guardian,");
    //mes "MEE6 the Bot";
    mesc "« "+l("It's too faint to read.")+" »";
    if (!@warning) {
        next;
        @warning=true;
        mesn strcharinfo(0);
        mesc l("This shrine seems to be a dangerous place, and nobody should defile it.");
        mesc l("I should check if I have more than enough potions and food before proceeding!");
        mesc l("REMEMBER: FAILURE AT A BOSS FIGHT WILL CAUSE QUEST TO RESET!"), 1;
    }
    close;

OnInit:
    .distance=3;
    end;
}

018-6-3,142,28,0	duplicate(Book#01863A)	Book#01863B	NPC_NO_SPRITE