summaryrefslogblamecommitdiff
path: root/npc/015-8/sealedshrine.txt
blob: 8be41f9e311e787f5e432b5a2d3c844481adbd64 (plain) (tree)
1
2
3
4
5
6
7





                                                       
                              





                                         
                                




                                              

                          








                                                          






                                              
                            

                                                                               
                                  



                         






                                             











                                                                                      
                                                                                          


























                                                                                                    
                                                         












                                                                

















                                                                                                       












































 
                                                                















                                                                                 
                                      
        

              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     































                                                                
                                                                















                                                                                 
                                      
        

              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     































                                                                     
                                                                















                                                                                 
                                      
        

              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     


              
                                     

























                                                  
                                                                









                                                                                 
                                                                









                                                                                 
                                                                









                                                                                 
























                                                                                                                                           
                                                        

















                                                                                                                
                         






                                                             
 
                                                        

















                                                    



 



                                                 
                                      

                    
                                










                                              
















                                                                
                                             
                                      

                                                                           
                                      

                                                                                        
                                                





                                               


                                                           
                              

          




                               





                                                           
                              

          




                               









                                                           
                                















                                                                                     









                                                                             
                                             

                              
                                          





                                     
                                                        


                               


        
// TMW2 scripts.
// Author:
//    Jesusalva
// Description:
//    SEALED SHRINE submodule - Sagratha's Cave - 015-8
// Uses setq3 - setq1 stage 3
// NPC_FAKIR + NPC_STATUE_FAFA

// Check for validity
function	script	SaggySealCheck	{
    .@q=getq(HurnscaldQuest_Sagratha);
    .@q3=getq3(HurnscaldQuest_Sagratha);
    // Cheater Detected
    if (!MAGIC_LVL || .@q < 3) {
        setq HurnscaldQuest_Sagratha, 0, 0, 0;
        sc_end SC_CASH_PLUSEXP;
        sc_end SC_OVERLAPEXPUP;
        sc_start SC_OVERLAPEXPUP, 300000, -20;
        warp "Save", 0, 0;
        closeclientdialog;
        end;
        return false;
    }

    // Okay, if it is not stage 3, we don't need to unseal
    if (.@q != 3)
        return false;
    return true;
}

// Seal Spawn
// (name, seal x, seal y, stageId, {seal map})
function	script	SaggySealInit	{
    .@n$=getarg(0);
    .@x=getarg(1);
    .@y=getarg(2);
    .@z=getarg(3);
    .@m$=getarg(4, "015-8");

    // Do nothing if @SaggySeal$ is busy - we will NOT begin another unsealing.
    if (@SaggySeal$ != "" && !.@z)
        end;
    else
        @SaggySeal$=.@n$;

    // You're dead, drop the script
    if (ispcdead()) {
        npctalk l("You are dead. Aborting.");
        @SaggySeal$="";
        end;
    }

    // Drain some Mana
    // Max wave is 9... So it should cap at 10%
    .@val=7+(.@z/3);

    if (Sp < MaxSp/100*.@val) {
        npctalk l("You don't have enough mana to continue. The seal remains active.");
        @SaggySeal$="";
        end;
    }
    percentheal 0, -(.@val);

    // BaseLevel: 37
    areamonster .@m$, .@x-1, .@y-1, .@x+1, .@y+1, "Seal Guardian", MagicGoblin, (.@z/3)+1;

    switch (.@z) {
        case 0:
            .@mobId=any(HouseMaggot,SlimeBlast); break;
        case 1:
            .@mobId=AngryScorpion; break;
        case 2:
            .@mobId=AngryBat; break;
        case 3:
            .@mobId=RedSlime; break;
        case 4:
            .@mobId=AngryRedScorpion; break;
        case 5:
            .@mobId=Bandit; break;
        case 6:
            .@mobId=Skeleton; break;
        case 7:
            .@mobId=BlueSlime; break;
        case 8:
            .@mobId=RedMushroom; break;
        case 9:
            .@mobId=BlackSlime; break;
        default:
            Exception("ERROR, INVALID Z VALUE FOR SAGRATHA SEAL: "+.@z, RB_DEFAULT|RB_IRCBROADCAST);
            .@mobId=WickedMushroom; break;
    }

    monster .@m$, .@x, .@y, "Seal Protector", .@mobId, 1;

    // Schedule next sequence
    if (.@z+1 < 10)
        .@nx$="0"+(.@z+1);
    else
        .@nx$=str(.@z+1);
    // 3.5s each wave, giving you ~1s to kill/endure each "boss"
    .@t=3500+(.@z*980);

    addtimer2(.@t, .@n$+"::OnBreakSeal"+.@nx$);
    return;
}

// Main menu - SaggySealTrueInit
// ( .name$, x, y )
function	script	SaggySealTrueInit	{
    // Do nothing if @SaggySeal$ is busy - we will NOT begin another unsealing.
    if (@SaggySeal$ != "")
        end;

    // Okay, we can begin! (variable will be filled on SaggySealInit)
    mesc l("Attempt to break the seal?");
    mesc l("Warning: This will drain mana and spawn monsters. You shall not leave this cave section!");
    if (askyesno() == ASK_YES) {
        npctalk3 l("You started the seal break sequence. Please stand by.");
        SaggySealInit(getarg(0), getarg(1), getarg(2), 0);
    }
    closeclientdialog;
    return;
}














































015-8,0,0,0	script	#SaggySeal1	NPC_SUMMONING_CIRC,0,0,{
    end;

OnTouch:
    .@q=getq(HurnscaldQuest_Sagratha);
    .@q3=getq3(HurnscaldQuest_Sagratha);
    // Check if it can be operated
    if (!SaggySealCheck())
        end;

    // Check if this seal is ok
    if (.@q3 & .sealId) {
        npctalkonce l("This seal was already broken, proceed to the next seal!");
        end;
    }

    // It is stage 3, so we will write to setq3 that the seal is open... Soon.
    SaggySealTrueInit(.name$, .x, .y);
    end;

OnBreakSeal01:
    SaggySealInit(.name$, .x, .y, 1);
    end;

OnBreakSeal02:
    SaggySealInit(.name$, .x, .y, 2);
    end;

OnBreakSeal03:
    SaggySealInit(.name$, .x, .y, 3);
    end;

OnBreakSeal04:
    SaggySealInit(.name$, .x, .y, 4);
    end;

OnBreakSeal05:
    SaggySealInit(.name$, .x, .y, 5);
    end;

OnBreakSeal06:
    SaggySealInit(.name$, .x, .y, 6);
    end;

OnBreakSeal07:
    SaggySealInit(.name$, .x, .y, 7);
    end;

OnBreakSeal08:
    SaggySealInit(.name$, .x, .y, 8);
    end;

OnBreakSeal09:
    SaggySealInit(.name$, .x, .y, 9);
    end;

OnBreakSeal10:
    .@q3=getq3(HurnscaldQuest_Sagratha);
    npctalk3 l("The seal was broken!");
    @SaggySeal$="";
    setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId;
    end;

OnInit:
    .sealId=1;

    setarray .xpos, 115, 119, 116, 121, 126, 125, 137, 136, 115;
    setarray .ypos, 117, 117, 119, 122, 125, 115, 117, 123, 118;
    .@z=rand(getarraysize(.xpos));
    movenpc .name$, .xpos[.@z], .ypos[.@z], 0;
    end;
}














015-8,0,0,0	script	#SaggySeal2	NPC_SUMMONING_CIRC,0,0,{
    end;

OnTouch:
    .@q=getq(HurnscaldQuest_Sagratha);
    .@q3=getq3(HurnscaldQuest_Sagratha);
    // Check if it can be operated
    if (!SaggySealCheck())
        end;

    // Check if this seal is ok
    if (.@q3 & .sealId) {
        npctalkonce l("This seal was already broken, proceed to the next seal!");
        end;
    }

    // It is stage 3, so we will write to setq3 that the seal is open... Soon.
    SaggySealTrueInit(.name$, .x, .y);
    end;

OnBreakSeal01:
    SaggySealInit(.name$, .x, .y, 1);
    end;

OnBreakSeal02:
    SaggySealInit(.name$, .x, .y, 2);
    end;

OnBreakSeal03:
    SaggySealInit(.name$, .x, .y, 3);
    end;

OnBreakSeal04:
    SaggySealInit(.name$, .x, .y, 4);
    end;

OnBreakSeal05:
    SaggySealInit(.name$, .x, .y, 5);
    end;

OnBreakSeal06:
    SaggySealInit(.name$, .x, .y, 6);
    end;

OnBreakSeal07:
    SaggySealInit(.name$, .x, .y, 7);
    end;

OnBreakSeal08:
    SaggySealInit(.name$, .x, .y, 8);
    end;

OnBreakSeal09:
    SaggySealInit(.name$, .x, .y, 9);
    end;

OnBreakSeal10:
    .@q3=getq3(HurnscaldQuest_Sagratha);
    npctalk3 l("The seal was broken!");
    @SaggySeal$="";
    setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId;
    end;

OnInit:
    .sealId=2;

    setarray .xpos,  39,  33,  43,  53,  51,  55,  60,  68,  63,  56;
    setarray .ypos, 120, 130, 134, 132, 119, 121, 122, 120, 129, 124;
    .@z=rand(getarraysize(.xpos));
    movenpc .name$, .xpos[.@z], .ypos[.@z], 0;
    end;
}














015-8,0,0,0	script	#SaggySeal3	NPC_SUMMONING_CIRC,0,0,{
    end;

OnTouch:
    .@q=getq(HurnscaldQuest_Sagratha);
    .@q3=getq3(HurnscaldQuest_Sagratha);
    // Check if it can be operated
    if (!SaggySealCheck())
        end;

    // Check if this seal is ok
    if (.@q3 & .sealId) {
        npctalkonce l("This seal was already broken, proceed to the next seal!");
        end;
    }

    // It is stage 3, so we will write to setq3 that the seal is open... Soon.
    SaggySealTrueInit(.name$, .x, .y);
    end;

OnBreakSeal01:
    SaggySealInit(.name$, .x, .y, 1);
    end;

OnBreakSeal02:
    SaggySealInit(.name$, .x, .y, 2);
    end;

OnBreakSeal03:
    SaggySealInit(.name$, .x, .y, 3);
    end;

OnBreakSeal04:
    SaggySealInit(.name$, .x, .y, 4);
    end;

OnBreakSeal05:
    SaggySealInit(.name$, .x, .y, 5);
    end;

OnBreakSeal06:
    SaggySealInit(.name$, .x, .y, 6);
    end;

OnBreakSeal07:
    SaggySealInit(.name$, .x, .y, 7);
    end;

OnBreakSeal08:
    SaggySealInit(.name$, .x, .y, 8);
    end;

OnBreakSeal09:
    SaggySealInit(.name$, .x, .y, 9);
    end;

OnBreakSeal10:
    .@q3=getq3(HurnscaldQuest_Sagratha);
    npctalk3 l("The seal was broken!");
    @SaggySeal$="";
    setq3 HurnscaldQuest_Sagratha, .@q3 | .sealId;
    end;

OnInit:
    .sealId=4;

    setarray .xpos, 140, 143, 146, 147, 145, 143;
    setarray .ypos, 140, 141, 139, 144, 147, 143;
    .@z=rand(getarraysize(.xpos));
    movenpc .name$, .xpos[.@z], .ypos[.@z], 0;
    end;
}







// Sagratha Seals Eletronic Barriers
015-8,120,130,0	script	#SaggySealBarrier1	NPC_HIDDEN,0,4,{
OnTouch:
    if (@SaggySeal$ != "") {
        npctalk3 l("The seal retaliates! It was super effective. You are dead!");
        @SaggySeal$="";
        percentheal -100, -100;
        end;
    }
    end;
}

015-8,74,142,0	script	#SaggySealBarrier2	NPC_HIDDEN,0,4,{
OnTouch:
    if (@SaggySeal$ != "") {
        npctalk3 l("The seal retaliates! It was super effective. You are dead!");
        @SaggySeal$="";
        percentheal -100, -100;
        end;
    }
    end;
}

015-8,137,154,0	script	#SaggySealBarrier3	NPC_HIDDEN,0,5,{
OnTouch:
    if (@SaggySeal$ != "") {
        npctalk3 l("The seal retaliates! It was super effective. You are dead!");
        @SaggySeal$="";
        percentheal -100, -100;
        end;
    }
    end;
}





// Magic Barrier
015-8,94,104,0	script	Dog Statue#Saggy	NPC_STATUE_FAFA,{
OnDialog:
    mesn;
    mesq l("This is a magical barrier, powered by three seals in your part.");
    next;
    mesn;
    mesq l("You must break all three seals to cross this barrier! For that, walk on them!");
    next;
    mesn;
    mesq l("Breaking a seal is easy, just flow mana on it for enough time to it shatter.");
    next;
    mesn;
    mesq l("I, Fafa, the Magical Statue, grant you this power! Prove your worth! And never run from the seal, or die for your cowardice!");
    close;

OnInit:
    .distance=5;
    end;
}

015-8,93,109,0	script	#SaggyBarrier	NPC_HIDDEN,2,0,{
    end;

OnTouch:
    if (!SaggySealCheck()) {
        slide 93, 106;
        end;
    }
    .@q=getq(HurnscaldQuest_Sagratha);
    .@q3=getq3(HurnscaldQuest_Sagratha);

    // Magic Number
    if (.@q3 == 7) {
        npctalk3 l("The seals having been broken, the barrier was weakened! You did it! The path is now open!");
        setq1 HurnscaldQuest_Sagratha, 4;
        setq3 HurnscaldQuest_Sagratha, 0;
        slide 93, 106;
    } else {
        getmapxy(.@m$, .@x, .@y, 0);
        slide .@x, .@y+3;
        dispbottom l("A powerful magic barrier repels you!");
        addtimer(200, "Dog Statue#Saggy::OnDialog");
    }
    end;

}


015-8,93,107,0	script	#SaggyBarrier2	NPC_HIDDEN,2,0,{
    end;

OnTouch:
    // You should not be on this side of the barrier
    if (SaggySealCheck()) {
        setq HurnscaldQuest_Sagratha, 0, 0, 0;
        sc_end SC_CASH_PLUSEXP;
        sc_end SC_OVERLAPEXPUP;
        sc_start SC_OVERLAPEXPUP, 300000, -20;
        warp "Save", 0, 0;
        closeclientdialog;
        end;
    }
    slide 93, 110;
    end;

}





// Shrine Statue Control
// SaggyShrineStatue( .name$ )
function	script	SaggyShrineStatue	{
    .@n$=getarg(0);
    .@q=getq(HurnscaldQuest_Sagratha);

    // Initial check
    if (!MAGIC_LVL || .@q < 4) {
        setq HurnscaldQuest_Sagratha, 0, 0, 0;
        sc_end SC_CASH_PLUSEXP;
        sc_end SC_OVERLAPEXPUP;
        sc_start SC_OVERLAPEXPUP, 300000, -20;
        warp "Save", 0, 0;
        closeclientdialog;
        end;
        return false;
    }

    mesn l("Guardian Statue");
    if (.@q != 4) {
        mesq l("...");
        next;
        mesc l("The statue doesn't replies.");
        close;
    }
    mesq l("Decipher me... Or I will devour you...");
    next;
    mesc l("Take the riddle?"), 1;
    mesc l("Time limit for answer: 2 minutes");
    next;
    if (askyesno() == ASK_YES) {
        // You have unlimited time if you don't close the dialog
        addtimer(120000, .@n$+"::OnScheduledDeath");
        if (0158_Riddle_BlackBox()) {
            deltimer(.@n$+"::OnScheduledDeath");
            setq1 HurnscaldQuest_Sagratha, 5;
            setq3 HurnscaldQuest_Sagratha, 0;
            mesn l("Guardian Statue");
            mesq l("You shall pass. Beyond this gate, she waits for you.");
            next;
            mesn l("Guardian Statue");
            mesq l("Your worth shall be tested, and from inside, you shall not leave.");
        } else {
            deltimer(.@n$+"::OnScheduledDeath");
            doevent(.@n$+"::OnScheduledDeath");
            closeclientdialog;
        }
    }
    return;
}

// The Sealed Shrine Itself and the guardians
015-8,96,22,0	script	#SaggyShrineRight	NPC_FAKIR,{
    SaggyShrineStatue(.name$);
    close;

OnScheduledDeath:
    npctalk3 l("Be devoured!");
    percentheal -100, -100;
    end;

OnInit:
    .distance=5;
    end;
}

015-8,93,22,0	script	#SaggyShrineLeft	NPC_FAKIR,{
    SaggyShrineStatue(.name$);
    close;

OnScheduledDeath:
    npctalk3 l("Be devoured!");
    percentheal -100, -100;
    end;

OnInit:
    .distance=5;
    end;
}

015-8,94,20,0	script	#ShrineGate	NPC_NO_SPRITE,1,0,{

    .@q=getq(HurnscaldQuest_Sagratha);
    .@q3=getq3(HurnscaldQuest_Sagratha);
    // Cheater Detected
    if (!MAGIC_LVL || .@q < 4) {
        setq HurnscaldQuest_Sagratha, 0, 0, 0;
        sc_end SC_CASH_PLUSEXP;
        sc_end SC_OVERLAPEXPUP;
        sc_start SC_OVERLAPEXPUP, 300000, -20;
        warp "Save", 0, 0;
        closeclientdialog;
        end;
        return false;
    }

    // Quest Status 4: Riddle pending
    if (.@q == 4) {
        npctalk3 l("The gates are firmly shut, no amount of force will break them.");
    }

    // Quest Status 5: Riddle solved, access granted
    if (.@q == 5) {
        enable_items();
        mesc l(".:: The Mouboo Temple ::."), 3;
        mesc l("WARNING: You are about to enter a HIGH-RISK zone."), 1;
        mesc l("We advise you to change your equipment now."), 1;
        if (getmapusers("015-8") > 1)
            mesc l("THIS IS A SOLO FIGHT, TEAMS ARE NOT ALLOWED INSIDE."), 1;
        next;
        disable_items();
        if (askyesno() == ASK_YES) {
            setq3 HurnscaldQuest_Sagratha, 0;
            closeclientdialog;

            .@map2$=SaggyInstCheck(false);
	        warp .@map2$, 50, 78;
            end;
        }
        close;
    }

    // Quest Status 6: Boss defeated, no instance needed
    if (.@q >= 6) {
        warp "015-8-1", 50, 78;
    }
    end;
}