summaryrefslogblamecommitdiff
path: root/npc/018-6-1/main.txt
blob: 953804e7ff4c6d5a2bdb533f72634ac0cd035953 (plain) (tree)


















































                                                                                                                         

                                


                                                    
      


















                                                           

                                                            










                                                                        
                               

                                 
                                           
                              

                              

                                         

                                             

                                                     
                                                                                                






                                                                                                                                

                                      
                              

                                              
                    
                                                                   
                       




                                                                       
 

                                                 

                                         
 



                                                                       
         
 


                                                                         







                      
                                        





                                                                             


                                                                                                 
                              


                                                          
                                                     



                                                                                                
                                                                                      
                                               


                                                                             
                                                                                  






                                                                                      


                                                                                
                                    
               
          
 
       
                


                      
                                                                                  


                                        
 
                

                                                                           





                                                                  
                                                                                   

        



                      
 
 
                                        
                                                           




                                                                             
                           

                                                                    


                                 
               
 
                                                             







                                                                   
                              










































                                                                                               
                                                                                                                                                                           

                                        
                                                                                                                                             


































                                                                                                      
                                                                                                             
















                                                                               
                                                                                            


















                                                                                                           
                                                                                      
































                                                                                                                
                                                                                                         


                                                                           



                                                                      





















                                                                                                            
                                                                                                                                                                    


















                                                                                                                                                         
                                                                                        

                                                                                                         





                                                                       

















                                                                   
                   









                                                                           
// TMW2 Scripts
// Author:
//    Jesusalva
// Description:
//    Controls Elenium Mines, specially the instances

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

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

// (var, value)
function SetIfVoid {
    if (!getarg(0))
        return getarg(1);
    return 0;
}

// Bifs won't respawn
OnKill1226:
OnKill1227:
OnKill1228:
    end;

// Others: Wait 30 seconds and respawn
OnKill1178:
    .@mi=SetIfVoid(.@mi, 1178);
OnKill1051:
    .@mi=SetIfVoid(.@mi, 1051);
OnKill1074:
    .@mi=SetIfVoid(.@mi, 1074);
OnKill1123:
    .@mi=SetIfVoid(.@mi, 1123);
OnKill1176:
    .@mi=SetIfVoid(.@mi, 1176);
OnKill1026:
    .@mi=SetIfVoid(.@mi, 1026);

    // Common utils
    /*
    // Respawn monster after 30s
    getmapxy(.@m$, .@x, .@y, 0);
    sleep(30000);
    AreaMonsterB(.@m$, .@x-2, .@y-2, 4, 4, .@mi, 1);
    */
    end;

OnInstanceInit:
    // Generate map ID
    getmapxy(.@m$, .@x, .@y, UNITTYPE_NPC);

    // Bif monsters
    AreaMonsterB(.@m$,  40,  49, 7, 8, BigEleniumBif, 5);
    AreaMonsterB(.@m$,  95,  51, 7, 8, BigEleniumBif, 5);
    AreaMonsterB(.@m$, 145,  83, 6, 5, EleniumBif, 5);
    AreaMonsterB(.@m$,  62,  86, 6, 5, EleniumBif, 5);
    AreaMonsterB(.@m$,  65, 130, 6, 5, EleniumBif, 5);
    AreaMonsterB(.@m$, 125, 158, 6, 5, SmallEleniumBif, 4);
    AreaMonsterB(.@m$, 129, 183, 6, 5, SmallEleniumBif, 4);
    AreaMonsterB(.@m$,  34, 181, 5, 5, SmallEleniumBif, 4);

    // Common Monsters
    AreaMonsterB(.@m$,  80, 172, 54, 25, BlackSlime, 16);
    AreaMonsterB(.@m$,  89, 167, 54, 25, DarkLizard, 8);
    AreaMonsterB(.@m$,  96, 103, 56, 29, BlackScorpion, 17);
    AreaMonsterB(.@m$, 101, 105, 54, 25, MountainSnake, 9);
    AreaMonsterB(.@m$,  70,  45, 44, 25, WickedMushroom, 14);
    AreaMonsterB(.@m$,  68,  45, 31, 21, Archant, 7);
    end;

}
/////////////////////////////
018-6-1,83,26,0	script	#ToForgottenChamber	NPC_SUMMONING_CIRC,0,0,{
    dispbottom l("It looks dangerous.");
    end;

OnTouch:
    .@q=getq(LoFQuest_Barbara);
    .@q2=getq2(LoFQuest_Barbara);
    .@q3=getq3(LoFQuest_Barbara);
    // Skipped cutscenes, show you the EXIT
    if (.@q == 1 && .@q3 != 1)
        cwarp "017-1", 32, 45;

    if (.@q >= 1) {
        warp BarbaraInstCheck(0), 90, 91;
        // Complete the first arc if possible
        if (.@q == 1) {
            setnpcdialogtitle l("Forgotten Chamber");
            mesn l("Forgotten Chamber");
            mesq l("You see yourself in a strange chamber. Strange drawings litter the walls.");
            next;
            mesn l("Forgotten Chamber");
            mesq l("You can see in distance two portals working, and two portals offline.");
            next;
            mesn l("Forgotten Chamber");
            mesq l("It seems to be a puzzle, you can only imagine what needs to be done in order to enable the right portals.");
            next;
            setq1 LoFQuest_Barbara, 2;
            setq3 LoFQuest_Barbara, 0;
            closeclientdialog;
        }
        // Update M0 NPCs based on quest state
        if (.@q > 2)
            enablenpc instance_npcname("#ToForgottenShrine", .@q2);
        if (.@q == 2) {
            // Note: state 64 and 128 are temporary and must be removed
            if (.@q3 & 64)
                setq3 LoFQuest_Barbara, .@q3^64;
            // Safety update
            .@q3=getq3(LoFQuest_Barbara);

            if (.@q3 & 128)
                setq3 LoFQuest_Barbara, .@q3^128;
            // Safety update
            .@q3=getq3(LoFQuest_Barbara);

            if (.@q3 == 5)
                enablenpc instance_npcname("#ToForgottenShrine", .@q2);
            if (.@q3 == 3)
                enablenpc instance_npcname("#ToSouthHall", .@q2);
        }

    } else {
        Exception("ERROR, YOU SHOULD NOT BEEN SEEING THIS. 018-6-1.TFC");
    }
    end;

OnInit:
    disablenpc .name$;
    end;

}

///////////////////////////// Minievents
018-6-1,128,131,0	script	Wounded Soldier#01861	NPC_GUARD_DEAD,{
    //npctalk3 l("Please find her and don't worry with me! And be careful!");
    npctalk3 l("*scream in pain*");
    close;

OnMain:
    setpcblock(PCBLOCK_HARD, true);
    mesc l("STORY MODE ENABLED. Monsters won't attack you, so you can read without worries."), 1;
    next;
    showavatar NPC_GUARD_DEAD;
    mesn l("Wounded Soldier");
    mesq l("Hey, you! Are you here on Kenton's orders?!");
    next;
    setnpcdialogtitle l("Benjamin, Wounded Soldier");
    mesn l("Benjamin, Wounded Soldier");
    mesq l("My name is Benjamin, and I was in charge of an incursion here to capture Barbara.");
    next;
    mesn l("Benjamin, Wounded Soldier");
    mesq l("My unit, however, was attacked! %s snuck up on us!", b(l("An assassin")));
    mesc l("You help Benjamin in getting up.");
    next;
    mesn l("Benjamin, Wounded Soldier");
    mesq l("I hope my men are safe, that was yesterday. I am barely alive.");
    mesc l("You know what is worse? THIS WHOLE CAVE HAVE DEATH PENALTY ON!!!"), 1;
    next;
    mesn l("Benjamin, Wounded Soldier");
    mesq l("I shall report to Kenton. I now entrust this quest in your hands!");
    next;
    mesn l("Benjamin, Wounded Soldier");
    mesq l("And please, bring those criminals to justice! Barbara and the Assassin!");
    next;
    mesc l("With a wave, Benjamin returns to report Kenton about the outcome.");
    setq3 LoFQuest_Barbara, 1;
    disablenpc instance_npcname(.name$); // NPC will now go to rest
    setpcblock(PCBLOCK_HARD, false);
    showavatar;
    close;

OnInit:
    .sex=G_MALE;
    disablenpc .name$;
    end;
OnInstanceInit:
    if ($@GM_OVERRIDE) setnpcdisplay instance_npcname(.name$), NPC_WOUNDEDSOLDIER;
    disablenpc instance_npcname(.name$);
    end;
}

// Event trigger
018-6-1,121,132,0	script	#01861TriggerWS1	NPC_HIDDEN, 0, 10,{
    end;
OnTouch:
    .@q=getq(LoFQuest_Barbara);
    .@q2=getq2(LoFQuest_Barbara);
    .@q3=getq3(LoFQuest_Barbara);
    if (.@q == 1 && .@q3 == 0) {
        enablenpc instance_npcname("Wounded Soldier#01861", .@q2);
        addtimer2(500, instance_npcname("Wounded Soldier#01861", .@q2)+"::OnMain");
    }
    end;

OnInit:
    disablenpc .name$;
    end;
}

///////////////////////////// Minievents
018-6-1,89,70,0	script	Barbara#01861	NPC_INJURIED_GIRL,{
    //npctalk3 l("Please find her and don't worry with me! And be careful!");
    npctalk3 l("*scream in pain*");
    close;

OnMain:
    slide 84, 71; // Safety
    showavatar NPC_INJURIED_GIRL;  // this is handled by avatars.xml

    .@q=getq(LoFQuest_Barbara);
    .@q2=getq2(LoFQuest_Barbara);
    .@q3=getq3(LoFQuest_Barbara);
    sleep2(50);

    // Barbara was taken hostage or murdered - save this data
    @evil=0; // Temporary variable to show the murder option or not
    setnpcdialogtitle l("Wounded Girl");
    mesn l("Wounded Girl");
    mesq l("...");
    next;
    mesn l("Wounded Girl");
    mesq l("...I guess I can't hide anymore...");
    next;
    sshake(rand2(3,5), false);
    mesn l("Wounded Girl");
    mesq l("Ah!");
    next;
    setnpcdialogtitle l("Barbara, Wounded Girl");
    mesn l("Barbara, Wounded Girl");
    mesq l("Sorry, I haven't seen you. My name is Barbara.");
    next;
    select
        l("My name is ")+strcharinfo(0),
        l("I'm here to arrest you.");
    mes "";
    if (@menu == 1) {
        mesn l("Barbara, Wounded Girl");
        mesq l("Pleased to meet you. What brings you down here?");
        next;
        mesn strcharinfo(0);
        mesq l("I'm here to arrest a criminal.");
        next;
    } else {
        @evil+=1;
    }
    mesn l("Barbara, Wounded Girl");
    mesq l("Please spare me. I'm gravely wounded. I'm innocent, I swear!");
    next;
    select
        l("Why should I spare you?"),
        l("Where is the item you've stolen?");
    mes "";
    mesn l("Barbara, Wounded Girl");
    mesq l("I... I confess. I did steal an apple. I was hungry! I am very poor.");
    next;
    mesn l("Barbara, Wounded Girl");
    mesq l("My family died when I was just a little girl... I have been trying to survive...");
    next;
    select
        l("Cut the chat short and go straight to the point!"),
        l("I'm listening, but don't hope me to buy your story.");
    mes "";
    if (@menu == 2) {
        mesn l("Barbara, Wounded Girl");
        mesq l("You know, if you're poor, you can't get too close to the Noble district.");
        next;
        mesn l("Barbara, Wounded Girl");
        mesq l("They left me no inheritance, either. Even surviving has been a struggle. I'm not strong enough to kill the living potatoes for @@.", getitemlink(Potatoz));
        next;
        mesn l("Barbara, Wounded Girl");
        mesq l("The monsters here are too strong, and as I said before, I can't get close to the Transcendence Portal nor to get training.");
        next;
        select
            l("I'm not here to listen stories, I need you to return what you've stole.");
    } else {
        @evil+=1;
    }
    mesn l("Barbara, Wounded Girl");
    mesq l("I can't give you the Apple I've stole. Because, I was stolen first!");
    next;
    select
        l("I don't believe you."),
        l("Let's say I believe you. Who stole you? Benjamin?");
    mes "";
    if (@menu == 1) {
        mesn l("Barbara, Wounded Girl");
        mesq l("But- But you have to! It is the ")+b(l("truth"))+"!";
        next;
        select
            l("And whom do you claim to be the thief?"),
            rif(@evil, l("[Kill her]")),
            l("Barbara. You're under arrest by Kenton's orders. Please surrend peacefully.");
        mes "";
        @evil+=1;
        switch (@menu) {
        case 2:
            mesn l("Barbara, Wounded Girl");
            mesq l("OH MY, PLEASE DON'T!");
            next;
            mesn l("Barbara, Wounded Girl");
            mesq l("I NEVER TOUCHED THE SOUL MENHIR! I SWEAR YOU, I'M INNOCENT! PLEASE HAVE MERCY!!");
            next;
            mesc l("Really kill Barbara?"), 1;
            mesc l("WARNING: THIS ACTION IS IRREVERSIBLE."), 1;
            if (askyesno() == ASK_YES) {
                mes "";
                mesc l("She falls in a single blow. You'll attribute her death to the Mysterious Assassin.");
                BARBARA_STATE=1;
                setq1 LoFQuest_Barbara, 5;
                disablenpc instance_npcname(.name$); // NPC will now go to rest
                close;
            } else {
                @evil=false;
                mesn l("Barbara, Wounded Girl");
                mesc l("*sigh*");
                mesq l("Thank you...");
                next;
            }
            break;
        case 3:
            mesn l("Barbara, Wounded Girl");
            mesq l("...I have no other choice, do I?");
            next;
            mesn l("Barbara, Wounded Girl");
            mesq l("But be warned, I don't have the Apple with me. It must be further in.");
            // The quest is not over yet - do not set BARBARA_STATE
            setq1 LoFQuest_Barbara, 5;
            disablenpc instance_npcname(.name$); // NPC will now go to rest
            close;
            break;
        }
    } else {
        mesn l("Barbara, Wounded Girl");
        mesq l("Oh no, Benjamin is a city guard, he would never do that. I hope.");
        next;
    }
L_MainStory:
    mesn l("Barbara, Wounded Girl");
    mesq l("A hooded man attacked me, and left me in this state.");
    next;
    mesn l("Barbara, Wounded Girl");
    mesq l("The hooded man was about to deliver me a final blow, but then he saw the Apple I've stole...");
    next;
    mesn l("Barbara, Wounded Girl");
    mesq l("...And for some reason he took the apple and went further in the caves.");
    next;
    mesn l("Barbara, Wounded Girl");
    mesq l("Maybe if you go back the way you're coming, you find him...");
    next;
    mesn l("Barbara, Wounded Girl");
    mesq l("By the way, I can't say for sure it was a man. He smelled like onions, and his face was shinning.");
    next;
    // FIXME: Should she be so blunt?
    mesn l("Barbara, Wounded Girl");
    mesq l("I'm only assuming it was a man because the lack of boobs.");
    next;
    mesn l("Barbara, Wounded Girl");
    mesq l("So... I'm at your hands now... What will you do with me?");
    next;
    select
        l("Listen to her story again."),
        rif(@evil, l("[Kill her]")),
        l("You're under arrest. I have to bring you back to Kenton."),
        l("I have some healing items with me, we should tend your wounds first.");
    mes "";
    switch (@menu) {
    // Murder
    case 2:
        mesn l("Barbara, Wounded Girl");
        mesq l("OH MY, PLEASE DON'T!");
        next;
        mesn l("Barbara, Wounded Girl");
        mesq l("I NEVER TOUCHED THE SOUL MENHIR! I SWEAR YOU, I'M INNOCENT! PLEASE HAVE MERCY!!");
        next;
        mesc l("Really kill Barbara?"), 1;
        mesc l("WARNING: THIS ACTION IS IRREVERSIBLE."), 1;
        if (askyesno() == ASK_YES) {
            mes "";
            mesc l("She falls in a single blow. You'll attribute her death to the Mysterious Assassin.");
            BARBARA_STATE=1;
            setq1 LoFQuest_Barbara, 5;
            disablenpc instance_npcname(.name$); // NPC will now go to rest
            next;
            closeclientdialog;
            dispbottom l("You see a fruit on her body. You take it.");
            getitembound MysteriousFruit, 1, 4;
            close;
        } else {
            @evil=false;
            mesn l("Barbara, Wounded Girl");
            mesc l("*sigh*");
            mesq l("Thank you...");
            next;
        }
    // Repeat
    case 1:
        goto L_MainStory;
        break;
    // Healing
    case 4:
        mesn l("Barbara, Wounded Girl");
        mesq l("I'm afraid my wounds are too critical. I'm bleeding. I was cursed. And I can't even move.");
        next;
        if (countitem(ElixirOfLife)) {
            mesc l("You have an @@ - Should you give her that?", getitemlink(ElixirOfLife));
            if (askyesno() == ASK_YES) {
                mes "";
                mesn l("Barbara, Wounded Girl");
                mesq l("It's true enough an @@ could heal even a dead tree, and would dispel almost every status ailment I could have.", getitemlink(ElixirOfLife));
                next;
                mesn l("Barbara, Wounded Girl");
                mesq l("But my case requires extended treatment. I need to be hospitalized. I'm afraid it is too late for the Elixir to have effect...");
                next;
            }
        }
        mesn strcharinfo(0);
        mesq l("...You're right. My medicine cannot heal you.");
        next;
        mesn l("Barbara, Wounded Girl");
        mesq l("I think the Doctor, on Dimond's Cove could help me, but that means passing by Kenton...");
        next;
    // Arrest
    case 3:
        mesn l("Barbara, Wounded Girl");
        mesq l("...I have no other choice, do I?");
        next;
        mesn l("Barbara, Wounded Girl");
        mesc l("*sigh*");
        mesq l("But be warned, I don't have the Apple with me. It must be further in.");
        mes "";
        mesc l("Barbara was apprehended. It would be weird to show her on your inventory, so we won't.");
        // The quest is not over yet - do not set BARBARA_STATE
        setq1 LoFQuest_Barbara, 5;
        disablenpc instance_npcname(.name$); // NPC will now go to rest
        close;
    }
    Exception("Invalid Barbara Dialog State - 0");
    close;

OnInit:
    .sex=G_FEMALE;
    disablenpc .name$;
    end;
OnInstanceInit:
    disablenpc instance_npcname(.name$);
    end;
}

// Event trigger
018-6-1,84,71,0	script	#01861TriggerBB1	NPC_HIDDEN, 0, 10,{
    end;
OnTouch:
    .@q=getq(LoFQuest_Barbara);
    .@q2=getq2(LoFQuest_Barbara);
    .@q3=getq3(LoFQuest_Barbara);
    if (.@q == 4) {
        enablenpc instance_npcname("Barbara#01861", .@q2);
        addtimer2(500, instance_npcname("Barbara#01861", .@q2)+"::OnMain");
    }
    end;

OnInit:
    disablenpc .name$;
    end;
}