diff options
Diffstat (limited to 'world/map/npc/006-1')
-rw-r--r-- | world/map/npc/006-1/_import.txt | 3 | ||||
-rw-r--r-- | world/map/npc/006-1/_mobs.txt | 44 | ||||
-rw-r--r-- | world/map/npc/006-1/_warps.txt | 54 | ||||
-rw-r--r-- | world/map/npc/006-1/miriam.txt | 340 | ||||
-rw-r--r-- | world/map/npc/006-1/spirit.txt | 299 | ||||
-rw-r--r-- | world/map/npc/006-1/tree.txt | 168 |
6 files changed, 862 insertions, 46 deletions
diff --git a/world/map/npc/006-1/_import.txt b/world/map/npc/006-1/_import.txt index 492ddf7d..b3f17a58 100644 --- a/world/map/npc/006-1/_import.txt +++ b/world/map/npc/006-1/_import.txt @@ -5,5 +5,8 @@ npc: npc/006-1/_mobs.txt npc: npc/006-1/_warps.txt npc: npc/006-1/mapflags.txt npc: npc/006-1/mika.txt +npc: npc/006-1/miriam.txt npc: npc/006-1/pachua.txt +npc: npc/006-1/spirit.txt npc: npc/006-1/traveler.txt +npc: npc/006-1/tree.txt diff --git a/world/map/npc/006-1/_mobs.txt b/world/map/npc/006-1/_mobs.txt index 7b5aaf95..9a376631 100644 --- a/world/map/npc/006-1/_mobs.txt +++ b/world/map/npc/006-1/_mobs.txt @@ -1,32 +1,48 @@ // This file is generated automatically. All manually changes will be removed when running the Converter. // Desert Mountains mobs -006-1.gat,25,34,12,31|monster|Snake|1010,3,100000ms,30000ms,Mob006-1::On1010 -006-1.gat,36,29,9,16|monster|Snake|1010,1,100000ms,30000ms,Mob006-1::On1010 -006-1.gat,34,41,4,6|monster|MountainSnake|1026,1,30000ms,75000ms,Mob006-1::On1026 -006-1.gat,55,37,27,23|monster|MountainSnake|1026,3,150000ms,10000ms,Mob006-1::On1026 +006-1.gat,49,52,7,3|monster|Snake|1010,1,100000ms,30000ms,Mob006-1::On1010 +006-1.gat,53,36,16,13|monster|MountainSnake|1026,3,150000ms,10000ms,Mob006-1::On1026 006-1.gat,89,26,33,13|monster|MountainSnake|1026,5,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,118,43,22,40|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,115,49,6,3|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,88,47,36,11|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,105,72,25,16|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,75,106,16,22|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,102,97,36,29|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,65,65,49,30|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,95,120,38,13|monster|MountainSnake|1026,5,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,54,120,29,7|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026 -006-1.gat,36,98,33,35|monster|Scorpion|1003,10,100000ms,30000ms,Mob006-1::On1003 +006-1.gat,113,41,12,37|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,113,51,6,3|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,86,46,29,5|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,105,73,21,14|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,73,102,8,13|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,104,100,11,15|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,82,72,25,16|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,95,114,17,4|monster|MountainSnake|1026,5,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,57,119,18,2|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026 +006-1.gat,33,97,27,33|monster|Scorpion|1003,10,100000ms,30000ms,Mob006-1::On1003 +006-1.gat,58,49,3,3|monster|GreenSlime|1005,3,100000ms,30000ms,Mob006-1::On1005 +006-1.gat,34,50,5,4|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010 +006-1.gat,96,92,20,48|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010 +006-1.gat,35,97,28,29|monster|Maggot|1002,20,100000ms,30000ms,Mob006-1::On1002 +006-1.gat,28,73,3,2|monster|GreenSlime|1005,2,100000ms,30000ms,Mob006-1::On1005 +006-1.gat,33,59,3,2|monster|GreenSlime|1005,2,100000ms,30000ms,Mob006-1::On1005 +006-1.gat,37,73,7,3|monster|Snake|1010,1,100000ms,30000ms,Mob006-1::On1010 +006-1.gat,100,36,38,24|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010 006-1.gat,0,0,0|script|Mob006-1|-1 { end; +On1002: + set @mobID, 1002; + callfunc "MobPoints"; + end; + On1003: set @mobID, 1003; callfunc "MobPoints"; end; +On1005: + set @mobID, 1005; + callfunc "MobPoints"; + end; + On1010: set @mobID, 1010; callfunc "MobPoints"; diff --git a/world/map/npc/006-1/_warps.txt b/world/map/npc/006-1/_warps.txt index 91459352..551d74a2 100644 --- a/world/map/npc/006-1/_warps.txt +++ b/world/map/npc/006-1/_warps.txt @@ -1,42 +1,32 @@ // This file is generated automatically. All manually changes will be removed when running the Converter. // Desert Mountains warps -006-1.gat,18,31|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,40,26|warp|To Desert Mountains Cav|-1,-1,006-3.gat,40,28 -006-1.gat,60,58|warp|To Desert Mountains Cav|-1,-1,006-3.gat,60,70 -006-1.gat,62,30|warp|To Desert Mountains Cav|-1,-1,006-3.gat,62,32 -006-1.gat,55,27|warp|To Desert Mountains Cav|-1,-1,006-3.gat,55,29 -006-1.gat,77,44|warp|To Desert Mountains Cav|-1,-1,006-3.gat,77,46 -006-1.gat,86,24|warp|To Desert Mountains Cav|-1,-1,006-3.gat,86,26 -006-1.gat,91,24|warp|To Desert Mountains Cav|-1,-1,006-3.gat,91,26 -006-1.gat,104,44|warp|To Desert Mountains Cav|-1,-1,006-3.gat,104,46 -006-1.gat,122,24|warp|To Desert Mountains Cav|-1,-1,006-3.gat,122,26 -006-1.gat,114,49|warp|To Desert Mountains Cav|-1,-1,006-3.gat,114,51 -006-1.gat,110,56|warp|To Desert Mountains Cav|-1,-1,006-3.gat,110,58 -006-1.gat,125,59|warp|To Desert Mountains Cav|-1,-1,006-3.gat,125,61 -006-1.gat,92,63|warp|To Desert Mountains Cav|-1,-1,006-3.gat,92,65 -006-1.gat,112,74|warp|To Desert Mountains Cav|-1,-1,006-3.gat,112,76 -006-1.gat,121,110|warp|To Desert Mountains Cav|-1,-1,006-3.gat,121,112 -006-1.gat,79,120|warp|To Desert Mountains Cav|-1,-1,006-3.gat,79,122 -006-1.gat,38,121|warp|To Desert Mountains Cav|-1,-1,006-3.gat,38,123 -006-1.gat,74,90|warp|To Desert Mountains Cav|-1,-1,006-3.gat,74,92 -006-1.gat,51,90|warp|To Desert Mountains Cav|-1,-1,006-3.gat,51,92 +006-1.gat,40,26|warp|To Desert Mountain Cave|-1,-1,006-3.gat,40,28 +006-1.gat,60,58|warp|To Desert Mountain Cave|-1,-1,006-3.gat,60,70 +006-1.gat,62,30|warp|To Desert Mountain Cave|-1,-1,006-3.gat,62,32 +006-1.gat,55,27|warp|To Desert Mountain Cave|-1,-1,006-3.gat,55,29 +006-1.gat,77,44|warp|To Desert Mountain Cave|-1,-1,006-3.gat,77,46 +006-1.gat,86,24|warp|To Desert Mountain Cave|-1,-1,006-3.gat,86,26 +006-1.gat,91,24|warp|To Desert Mountain Cave|-1,-1,006-3.gat,91,26 +006-1.gat,98,46|warp|To Desert Mountain Cave|-1,-1,006-3.gat,104,46 +006-1.gat,114,22|warp|To Desert Mountain Cave|-1,-1,006-3.gat,122,26 +006-1.gat,114,49|warp|To Desert Mountain Cave|-1,-1,006-3.gat,114,51 +006-1.gat,102,53|warp|To Desert Mountain Cave|-1,-1,006-3.gat,110,58 +006-1.gat,117,57|warp|To Desert Mountain Cave|-1,-1,006-3.gat,125,61 +006-1.gat,92,63|warp|To Desert Mountain Cave|-1,-1,006-3.gat,92,65 +006-1.gat,112,74|warp|To Desert Mountain Cave|-1,-1,006-3.gat,112,76 +006-1.gat,111,110|warp|To Desert Mountain Cave|-1,-1,032-3.gat,56,60 +006-1.gat,83,117|warp|To Desert Mountain Cave|-1,-1,006-3.gat,79,121 +006-1.gat,38,121|warp|To Desert Mountain Cave|-1,-1,006-3.gat,38,123 +006-1.gat,74,90|warp|To Desert Mountain Cave|-1,-1,006-3.gat,74,92 +006-1.gat,51,90|warp|To Desert Mountain Cave|-1,-1,006-3.gat,51,92 006-1.gat,30,123|warp|To Outback Cave|-1,-1,032-3.gat,128,33 -006-1.gat,19,30|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,20,29|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,21,28|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,22,27|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,23,26|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,24,25|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,25,24|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,26,23|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,27,22|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,28,21|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,29,20|warp|To Snake Desert|-1,-1,005-1.gat,172,101 -006-1.gat,30,19|warp|To Snake Desert|-1,-1,005-1.gat,172,101 006-1.gat,33,85|warp|To Pachua's Village|-1,-1,006-2.gat,58,43 006-1.gat,23,85|warp|To Pachua's Village|-1,-1,006-2.gat,48,43 006-1.gat,23,100|warp|To Pachua's Village|-1,-1,006-2.gat,67,64 006-1.gat,21,108|warp|To Pachua's Village|-1,-1,006-2.gat,65,72 006-1.gat,37,26|warp|To Desert Mountains|-1,-1,006-1.gat,37,23 006-1.gat,37,24|warp|To Desert Mountains|-1,-1,006-1.gat,37,27 +006-1.gat,55,46|warp|Snake Cave|-1,-1,005-3.gat,86,31 +006-1.gat,20,48|warp|To Sandstorm Desert|-1,0,002-1.gat,118,95 +006-1.gat,51,68|warp|Snake Cave|-1,-1,005-3.gat,73,59 diff --git a/world/map/npc/006-1/miriam.txt b/world/map/npc/006-1/miriam.txt new file mode 100644 index 00000000..4279e3d5 --- /dev/null +++ b/world/map/npc/006-1/miriam.txt @@ -0,0 +1,340 @@ +//############################################# +// author: alastrim, PjotrOrial +//############################################# +// This npc teaches you the speed skill. +// used variables: +// QUEST_MIRIAM: +// 0 either fully completed the quests in here, or not started. +// 1 you said the wrong words, she is insulted. (so you excuse and goto 2) +// 2 waiting for the ingredients +// 3 you brought the needed stuff. if you meet other criteria (BaseLevel, agi) you will be taught the skill +// 4 you have met the criteria of 3, but declined to take the speed test. +// 5 you tried the quest but you failed +// QUEST_MIRIAM_start +// a time in ticks. This is only !=0 if you started running to pachua. +// QUEST_MIRIAM_run +// when you reach pachua, he stores the difference of start and arrival in here. +//############################################# +// after you gained the speed skill, all variables are reset to zero. +//############################################# + +006-1.gat,115,111,0|script|Miriam|175 +{ + setarray @npc_loc, 115, 111, 2; + callfunc "PCtoNPCRange"; + if (@npc_check) + goto L_Close; + + if (getskilllv(SKILL_SPEED)) goto L_fast; + if (getequipid(equip_torso) < 0) goto L_naked; + if (QUEST_MIRIAM == 0) goto L_intro; + if (QUEST_MIRIAM == 1) goto L_ask1; + if (QUEST_MIRIAM == 2) goto L_ask2; + if (QUEST_MIRIAM == 3) goto L_teach; + if (QUEST_MIRIAM == 4) goto L_testoffer; + if (QUEST_MIRIAM_run != 0) goto L_checktime; + if (QUEST_MIRIAM_start != 0) goto L_wasting; + if (QUEST_MIRIAM == 5) goto L_testoffer; + goto L_intro; + +L_intro: + mes "You see a woman sitting in the hot sand with eyes wide open... But she does not seem to be looking at something in particular..."; + next; + menu + "Ehr... Hi, my name is " +strcharinfo(0)+ ". Are you OK?",L_Next; + +L_Next: + mes "[Miriam]"; + mes "\"..."; + next; + menu + "Hello?",L_Continue; + +L_Continue: + mes "[Miriam]"; + mes "\"Yes, I am. Why? Do you think I am not OK? I am OK. You interrupted my meditation. Now I will need hours to calm down and stay quiet! Yes, yes, I know, I'm a fast talker!\""; + next; + mes "\"In fact, I am fast in everything I do! I can kill a Mountain Snake before it even starts to think about attacking me! Yes my friend, in a battle, speed is power!"; + next; + menu + "Wow! Very impressi...",L_More; + +L_More: + mes "[Miriam]"; + mes "\"Yes, yes, I know. But if there is one thing I am NOT good at, it is meditation! My master said I need to meditate, but... Ohh! So difficult to stay quiet! And when you FINALLY do, someone INTERRUPTS you, asking if you are 'OK'...\""; + next; + menu + "Oh, I am sorry! I didn't know you were meditating...",L_WallText; + +L_WallText: + mes "[Miriam]"; + mes "\"You are really sorry? Ok, but that is not enough... I need you to do something for me. As you can imagine, I will need a lot of time to concentrate and get back to the state I was when you interrupted me.\""; + next; + mes "\"But the problem is that I wasn't expecting to be here for so long, so I will need some food and something to drink.\""; + next; + mes "\"So, if you really want to prove that you are sorry, bring me 5 Concentration Potions and 10 Snake Tongues.\""; + next; + menu + "Ok, but those potions will not help with your mental concent...",L_MoreTalking, + "Sorry, but I can't help you right now.",L_canthelp; + +L_MoreTalking: + mes "[Miriam]"; + mes "\"ah, ah, ah... I know what I am doing! Now run and get what I asked.\""; + set QUEST_MIRIAM, 2; + close; + +L_canthelp: + mes "[Miriam]"; + mes "\"Oh, really? So you better pray to not need my help in the future!\""; + set QUEST_MIRIAM, 1; + close; + +L_canthelp2: + mes "[Miriam]"; + mes "\"...\""; + next; + mes "\"...\""; + next; + mes "\"Well, if you don't have time to help, at least don't make things difficult for me!\""; + close; + +L_ask1: + mes "[Miriam]"; + mes "\"So, you are back... have you changed your mind about my request?\""; + next; + menu + "Yes, I will get what you want!",L_WillGetItems, + "No, I have no time right now.",L_canthelp2; + +L_WillGetItems: + set QUEST_MIRIAM, 2; + mes "\"Good. So, run and get it!\""; + close; + +L_ask2: + mes "[Miriam]"; + mes "\"Did you get what I asked for?\""; + next; + menu + "Yes, here it is!",L_getitems, + "What was that again?", L_ask3, + "No, not yet.",L_Hurry; + +L_Hurry: + mes "\"So please hurry up!\""; + close; + +L_ask3: + mes "[Miriam]"; + mes "\"You have a small mind, haven't you? I am meditating here and I asked you to bring me stuff, so I can concentrate better.\""; + next; + mes "\"And stop asking such silly questions in the future.\""; + next; + mes "\"So, if you really want to help me now, bring me 5 Concentration Potions and 10 Snake Tongues.\""; + close; + +L_getitems: + if (countitem("SnakeTongue") < 10 + || countitem("ConcentrationPotion") < 5) + goto L_notenough; + delitem "SnakeTongue", 10; + delitem "ConcentrationPotion", 5; + set QUEST_MIRIAM, 3; + mes "[Miriam]"; + mes "\"Good job! Now I have enough food to stay in this desert for days!\""; + next; + mes "\"Now, since you helped me, maybe I can teach you a basic skill, but only if you prove yourself to be a fast runner! Come back and talk to me when you think you are prepared to learn.\""; + close; + +L_notenough: + mes "[Miriam]"; + mes "\"Hey, you don't have all that I asked. Come back when you have everything.\""; + close; + +L_teach: + mes "[Miriam]"; + mes "\"Hmm... do you think you can learn the special Speed skill?\""; + next; + menu + "Yes, I am prepared...", L_Prepared, + "I am already fast.", L_notfast; + +L_Prepared: + set @agi, readparam(bAgi); + set @torso$, getitemname(getequipid(equip_torso)); + set @weight, MaxWeight/Weight; + if (@weight < 3) + goto L_heavyweight; + if (@agi < 60) + goto L_slow; + if (BaseLevel < 60) + goto L_lowlevel; + if (countitem("SteelShield") > 0 + || countitem("WarlordHelmet") > 0 + || countitem("CrusadeHelmet") > 0 + || countitem("WarlordPlate") > 0 + || countitem("KnightsHelmet") > 0 + || countitem("InfantryHelmet") > 0 + || countitem("ChainmailShirt") > 0 + || countitem("WarlordBoots") > 0 + || countitem("LightPlatemail") > 0 + || countitem("CandleHelmet") > 0) + goto L_heavymetal; + goto L_offer; + +L_heavyweight: + mes "[Miriam]"; + mes "\"Wow... Why do you bring so many things with you? You must be carrying more than one third of your own weight! I won't teach you unless you get rid of some stuff... \""; + close; + +L_heavymetal: + mes "[Miriam]"; + mes "\"Hmm... I see... You want to be one of those lazy slow warriors... wasting all their strength carrying kilos of metal clothes... Why does no one see the great advantages of a beautiful, flexible, lightweight armor nowadays?\""; + next; + mes "\"Come back here when you get rid of this junk...\""; + close; + +L_slow: + mes "[Miriam]"; + mes "Oh, wait, wait... " +@agi+ " Agility? Are you serious? What do you do with all your Character points? Put them all to 'Strength'? Really... I don't even want to know... Come back here when you have a decent character points distribution!\""; + close; + +L_lowlevel: + mes "[Miriam]"; + mes "\"Come back here when you are old enough. I even wonder how you could get here so unexperienced as you are.\""; + close; + +L_offer: + mes "[Miriam]"; + mes "\"Hmm! You look great in these clothes! They look very comfortable too... And it seems like you are not carrying too much weight.\""; + next; + if (!(getskilllv(SKILL_POOL))) + goto L_noskill; + menu + "Yes, I look really good in this " +@torso$+ ".",L_TorsoNext; + +L_TorsoNext: + mes "[Miriam]"; + mes "\"I see. I like the way you distributed your Character Points too... " +@agi+ " points to Agility! You really know how to prepare yourself for a good fight!\""; + next; + mes "\"Well... Even if you have a potential to be a good fighter, moving the way you do will not help. You need to be fast to avoid the monsters. \""; + next; + mes "\"So, if you pass a small test I can teach you a skill that will increase your walking speed! You will not be as fast as I am, but I am sure it will be useful.\""; + next; + menu + "I'm in! What kind of test is it?",L_test, + "I don't think I need more speed right now",L_giveup; + +L_test: + mes "[Miriam]"; + mes "\"Great! The test is simple. You need to run as fast as you can from the place where I am sitting to the mountains and talk to Pachua, the chief. When you get there and talk to Pachua, he will send a special smoke signal to me, so I can know how much time it took for you to get there.\""; + next; + mes "\"If you make it in a good time, I will teach you the special speeding skill. If not, you can always try again. So, are you ready?\""; + next; + menu + "Yes, let's do it!",L_LetsDoThis, + "No, I need to stretch my muscles first!",L_stretch; + +L_LetsDoThis: + close2; + message strcharinfo(0), "Miriam quickly grabs your arm and pull you to the place where she is sitting."; + // Warp the player to the place where the NPC is defined, so he can't cheat. + warp "032-1.gat",55,21; + npctalk "Run " +strcharinfo(0)+ ", run!"; + set QUEST_MIRIAM, 5; + set QUEST_MIRIAM_start, gettimetick(2); + set QUEST_MIRIAM_cheat, 0; + end; + +L_naked: + mes "[Miriam]"; + mes "\"Hmmm?! Please put on some clothes before talking to me.\""; + close; + +L_notfast: + mes "[Miriam]"; + mes "\"Hah! If you think so...\""; + close; + +L_noskill: + mes "[Miriam]"; + mes "\"For a person like you, I could even teach a useful skill! Too bad you don't have the basic abillities to learn it...\""; + close; + +L_giveup: + mes "[Miriam]"; + mes "\"Oh, that is too bad... But if you change your mind, come back!\""; + set QUEST_MIRIAM, 4; + close; + +L_testoffer: + mes "[Miriam]"; + mes "\"Are you ready for the test now?\""; + next; + menu + "Yes!",L_test, + "Not yet.",L_Close; + +L_Close: + close; + +L_warning: + mes "[Miriam]"; + mes "\"I know very well what you tried to do. I will not teach you the speed skill if you keep trying this kind of trick!\""; + next; + goto L_testoffer; + +L_stretch: + mes "[Miriam]"; + mes "\"Ok. Good idea... Stretching exercises can increase your flexibility and even prevent injuries!\""; + set QUEST_MIRIAM, 4; + close; + +L_wasting: + mes "[Miriam]"; + mes "\"Don't waste your time talking to me! RUN and talk to Pachua!\""; + close; + +L_checktime: + if (QUEST_MIRIAM_cheat != 0) + goto L_warning; + if (QUEST_MIRIAM_run <= 210) + goto L_goodjob; + goto L_tryagain; + +L_tryagain: + mes "[Miriam]"; + mes "\"You needed " + QUEST_MIRIAM_run + " seconds to reach Pachua. It is not enough.\""; + set QUEST_MIRIAM_run, 0; + close; + +L_goodjob: + mes "[Miriam]"; + mes "\"Great job! You needed " + QUEST_MIRIAM_run + " seconds to reach Pachua. Very impressive for a person like you.\""; + next; + mes "\"Now I need you to relax. Do NOT move. This teaching process can be painful sometimes.\""; + next; + mes "Miriam stares into your eyes and starts to scream some strange words very close to your ears."; + next; + mes "You feel dizzy and as soon as you move your head and look to the ground, Miriam pushes you hard, sending you meters away from her."; + close2; + warp "032-1.gat",55,22; + // free all used player variables. This can be done, since there is a conditional on the speedskill at the beginning. + set QUEST_MIRIAM_start, 0; + set QUEST_MIRIAM_run, 0; + set QUEST_MIRIAM, 0; + message strcharinfo(0), "[You gain 2500 experience points]"; + message strcharinfo(0), "[You learned Speed Skill]"; + setskill SKILL_SPEED, 1; + getexp 2500, 0; + set QUEST_MIRIAM_cheat, 0; // reset just in case it is still set. + close; + +L_fast: + mes "[Miriam]"; + mes "\"I hope you make a good use of your new skill... Take care!\""; + set QUEST_MIRIAM_cheat, 0; // reset just in case it is still set. + close; + +} diff --git a/world/map/npc/006-1/spirit.txt b/world/map/npc/006-1/spirit.txt new file mode 100644 index 00000000..5f7d06fb --- /dev/null +++ b/world/map/npc/006-1/spirit.txt @@ -0,0 +1,299 @@ +function|script|EarthImpTouch +{ + if (getskilllv(SKILL_MAGIC)) goto L_message; + + mes "[Well]"; + mes "You hear noises from within the well."; + close; + +L_message: + set @Q_MASK, NIBBLE_0_MASK; + set @Q_SHIFT, NIBBLE_0_SHIFT; + set @Q_status, (QUEST_MAGIC2 & @Q_MASK) >> @Q_SHIFT; + + // Set up SkillUp function + set @SUP_id, SKILL_MAGIC_NATURE; + set @SUP_name$, "Nature Magic"; + set @Q_STATUS_INITIAL, 0; + set @Q_STATUS_ONQUEST, 1; + set @Q_STATUS_STUDENT0, 2; + set @Q_STATUS_STUDENT1, 3; + set @Q_STATUS_STUDENT2, 4; + set @Q_STATUS_STUDENT3, 5; + + set @s$, "girl"; + if (Sex) set @s$, "boy"; + + if (MAGIC_FLAGS & MFLAG_KNOWS_IMP) goto L_wb; + + mes "[Well]"; + mes "Something is inside that well, and now that you have turned your attention towards it, it seems to be talking to you!"; + next; + + mes "[Well]"; + mes "\"Hey! You there! Yes, I'm talking to you!\""; + mes "That strange voice seems to be coming from inside your head!"; + next; + menu + "Who, me?", L_Next, + "Leave me alone!", L_Close, + "Aaah! I'm hearing voices!", L_silly_close; + +L_Next: + mes "[Well]"; + mes "\"I'm in here, in the well, talking to you! If I'm not very mistaken, you are a powerful wizard-to-be, except that nobody has showed you how to properly do magic yet!\""; + next; + menu + "Who are you?", L_Next1, + "Aaaah! The voices are after me!", L_silly_close, + "Whatever it is, I'm not interested.", L_Close; + +L_Next1: + mes "[Earth Spirit]"; + mes "\"I'm an earth spirit; my name isn't important... all that matters is that I like you, and that I will help you become a powerful wizard if you help me. Just a fair deal, no more than that...\""; + next; + set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_KNOWS_IMP; + goto L_main; + +L_wb: + mes "[Earth Spirit]"; + mes "\"It's excellent to see you again!\""; + next; + goto L_main; + +L_main: + menu + "How did you get trapped?", L_Q_trapped, + "Can you teach me magic and spells?", L_Q_magic, + "What do you know about...", L_Q, + "Goodbye!", L_Close; + +L_Q_trapped: + mes "[Earth Spirit]"; + mes "\"Oh, a wicked witch grew jealous of my power and locked me up in this well.\""; + next; + goto L_main; + +L_Q: + mes "[Earth Spirit]"; + mes "\"Stop bothering me with your questions, will you? I'm trying to make you a powerful wizard, after all!\""; + next; + goto L_main; + +L_Q_magic: + if (@Q_status == @Q_STATUS_ONQUEST) goto L_Q_magic_1; + if (@Q_status == @Q_STATUS_STUDENT0) goto L_Q_magic_2; + if (@Q_status == @Q_STATUS_STUDENT1) goto L_Q_magic_3; + if (@Q_status == @Q_STATUS_STUDENT2) goto L_Q_magic_4; + + mes "[Earth Spirit]"; + mes "\"Good, good... that's the right attitude! Yes, I can teach you magic, but first you must prove that you are worthy to be my student!\""; + next; + mes "[Earth Spirit]"; + mes "\"North-east of here sits and old, dead tree. Well, not completely dead, not yet, but almost. It's nothing special. Well, maybe a little, but not really. I want you to cut off one of its branches.\""; + next; + menu + "No way.", L_silly_close, + "Sure.", L_Q_tree_ok, + "Why that particular tree?", L_Next2; + +L_Next2: + mes "[Earth Spirit]"; + mes "\"Oh, you and your questions! Well, that tree was a druid once, so the branches contain a bit of its lifeforce. And that's useful.\""; + next; + menu + "Yuck.", L_silly_close, + "Sure, whatever.", L_Q_tree_ok, + "Isn't that like cutting off someone's arm?", L_Next3; + +L_Next3: + mes "[Earth Spirit]"; + mes "\"Oooh... now come on! Don't be so sentimental. He turned himself into a tree, he can hardly expect everyone to leave him alone.\""; + next; + mes "[Earth Spirit]"; + mes "\"Who knows if he can even feel anything anymore? I'm sure he can't, being wooden and all. Besides, it's only a measly tree. Not like I'm asking you to cut him down!.\""; + next; + menu + "No way.", L_silly_close, + "Alright, that makes sense.", L_Q_tree_ok; + +L_Q_tree_ok: + mes "[Earth Spirit]"; + mes "\"Good, good, good! Yes, that will be very good! So, come back when you have the branch. Oh, and bring 100,000 GP, too, as an enrollment fee.\""; + set @Q_status, @Q_STATUS_ONQUEST; + callsub S_update_var; + set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_KNOWS_CUTTREE; + next; + goto L_main; + +L_Q_magic_1: + mes "[Earth Spirit]"; + mes "\"Yes, yes, if you bring me the branch and the money, then I will!\""; + next; + menu + "Here are the branch and the money.", L_Next4, + "How much money did you want again?", L_Q_tree_howmuch, + "How can I cut it?", L_Q_tree_how, + "Where was the tree again?", L_Q_tree_where, + "What is that tree?", L_Q_tree_what; + +L_Next4: + if (countitem("DruidTreeBranch") < 1) goto L_Q_tree_none; + if (!(MAGIC_FLAGS & MFLAG_DID_CUTTREE)) goto L_Q_tree_dry; + if (Zeny < 100000) goto L_Q_tree_nomoney; + + set Zeny, Zeny - 100000; + delitem "DruidTreeBranch", 1; + mes "[Earth Spirit]"; + mes "Following the earth sprite's instructions, you throw branch and GP into the well."; + next; + mes "[Earth Spirit]"; + mes "\"Well done, very well done! Consider yourself my student now.\""; + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + next; + set @Q_status, @Q_STATUS_STUDENT0; + callsub S_update_var; + goto L_main; + +L_Q_magic_finish: + mes "[1000 experience points]"; + set @Q_status, @Q_status + 1; + callsub S_update_var; + getexp 1000,0; + next; + goto L_main; + +L_Q_magic_2: + mes "[Earth Spirit]"; + mes "\"Yes, of course! For just 20,000 GP I will teach you your first spell!\""; + next; + menu + "Here you are.", L_Next5, + "No.", L_main; + +L_Next5: + if (Zeny < 20000) goto L_no20k; + + set Zeny, Zeny - 20000; + mes "[Earth Spirit]"; + mes "\"Kekeke... excellent! Yes, here goes your first spell, the flying backpack! If you are overloaded, it will take the load off your shoulders.\""; + next; + mes "[Earth Spirit]"; + mes "\"Take a cocoon, living or dead, and suffuse it in magic. Whisper '" + getspellinvocation("flying-backpack") + "', and feel it float!\""; + goto L_Q_magic_finish; + +L_Q_magic_3: + mes "[Earth Spirit]"; + mes "\"But yes, yes! Only 20,000 GP, once again, and I will teach you a far more useful spell!\""; + next; + menu + "Here you are.", L_Next6, + "No.", L_main; + +L_Next6: + if (Zeny < 20000) goto L_no20k; + set Zeny, Zeny - 20000; + mes "[Earth Spirit]"; + mes "\"Yeees, good! This one is a protection spell, making your skin harder. You need a hard spike for it, though. Hold that spike in your hands, and focus on it.\""; + next; + mes "[Earth Spirit]"; + mes "\"Next, say '" + getspellinvocation("protect") + "', and feel your skin grow rigid! Very useful against stings and stabs and pokes and pricks and that sort of stuff.\""; + goto L_Q_magic_finish; + +L_Q_magic_4: + mes "[Earth Spirit]"; + mes "\"Naah, you're too weak now! Come back later when you have grown!\""; + next; + goto L_main; + +L_no20k: + mes "[Earth Spirit]"; + mes "\"You can't pay me 20,000 if you don't have that much!\""; + next; + goto L_main; + +L_Q_tree_none: + mes "[Earth Spirit]"; + mes "\"Where is your branch?\""; + next; + goto L_main; + +L_Q_tree_dry: + mes "[Earth Spirit]"; + mes "\"That won't do. This branch is completely dead; you'll have to get another.\""; + next; + goto L_main; + +L_Q_tree_nomoney: + mes "[Earth Spirit]"; + mes "\"No, you don't have enough money! Come back when you have 100,000.\""; + next; + goto L_main; + +L_Q_tree_howmuch: + mes "[Earth Spirit]"; + mes "\"It's only 100,000 GP to become my student.\""; + next; + goto L_main; + +L_Q_tree_how: + mes "[Earth Spirit]"; + mes "\"Oh... right, the tree might be protected. Only a bone knife will cut that. No idea where you can find one, but I'm sure you will manage!\""; + next; + goto L_main; + +L_Q_tree_where: + mes "[Earth Spirit]"; + mes "\"North-east of here.\""; + next; + goto L_main; + +L_Q_tree_what: + mes "[Earth Spirit]"; + mes "\"Just some silly druid who turned himself into a tree; nothing important.\""; + next; + goto L_main; + +L_silly_close: + if (MAGIC_FLAGS & MFLAG_KNOWS_IMP) + mes "[Earth Spirit]"; + if (!(MAGIC_FLAGS & MFLAG_KNOWS_IMP)) + mes "[Well]"; + mes "\"Silly " + @s$ + ".\""; + goto L_Close; + +L_Close: + set @Q_MASK, 0; + set @Q_SHIFT, 0; + set @Q_status, 0; + set @SUP_id, 0; + set @SUP_name$, ""; + set @SUP_xp, 0; + set @SUP_lvl, 0; + set @Q_STATUS_INITIAL, 0; + set @Q_STATUS_ONQUEST, 0; + set @Q_STATUS_STUDENT0, 0; + set @Q_STATUS_STUDENT1, 0; + set @Q_STATUS_STUDENT2, 0; + set @Q_STATUS_STUDENT3, 0; + set @s$, ""; + close; + +S_update_var: + set QUEST_MAGIC2, (QUEST_MAGIC2 & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); + return; +} + +006-1.gat,63,79,0|script|#EarthImp0#_M|400 +{ + callfunc "EarthImpTouch"; + end; +} + +006-1.gat,64,79,0|script|#EarthImp1#_M|400 +{ + callfunc "EarthImpTouch"; + end; +} diff --git a/world/map/npc/006-1/tree.txt b/world/map/npc/006-1/tree.txt new file mode 100644 index 00000000..dbef23f2 --- /dev/null +++ b/world/map/npc/006-1/tree.txt @@ -0,0 +1,168 @@ +function|script|QuestTreeTrigger +{ + set @Q_MASK, NIBBLE_2_MASK; + set @Q_SHIFT, NIBBLE_2_SHIFT; + + set @Q_status, (QUEST_MAGIC & @Q_MASK) >> @Q_SHIFT; + set @Q_status_lower, @Q_status & 3; + set @Q_status, (@Q_status & 12) >> 2; + + if (@Q_status & @flag) goto L_Close; // already did that + + if (@flag == 2) goto L_hug; + goto L_cont; + +L_cont: + set @Q_status, @Q_status | @flag; + callsub S_update_var; + + if (@Q_status != 3) goto L_Close; + + if (MAGIC_FLAGS & MFLAG_DID_CUTTREE) goto L_Close; + + mes "Maybe it is just a trick of the light, but you can't help but think that the tree looks different... healthier, almost younger."; + mes "[20000 experience points]"; + getexp 20000, 0; + set @value, 15; + callfunc "QuestSagathaHappy"; + goto L_Close; + +L_hug: + mes "You hug the tree."; + next; + goto L_cont; + +L_Close: + set @Q_MASK, 0; + set @Q_SHIFT, 0; + set @Q_status, 0; + set @Q_status_lower, 0; + set @Q_wr_status, 0; + set @value, 0; + close; + +S_update_var: + set @Q_wr_status, (@Q_status << 2) | @Q_status_lower; + set QUEST_MAGIC, (QUEST_MAGIC & ~(@Q_MASK) | (@Q_wr_status << @Q_SHIFT)); + return; +} + +function|script|QuestTreeTouch +{ + set @Q_MASK, NIBBLE_2_MASK; + set @Q_SHIFT, NIBBLE_2_SHIFT; + + set @Q_status, (QUEST_MAGIC & @Q_MASK) >> @Q_SHIFT; + set @Q_status, (@Q_status & 12) >> 2; + + if (@Q_status == 3) goto L_happy; + + if ((MAGIC_FLAGS & (MFLAG_KNOWS_DRUIDTREE | MFLAG_KNOWS_CUTTREE)) == MFLAG_KNOWS_CUTTREE) goto L_cut; + + if ((MAGIC_FLAGS & (MFLAG_KNOWS_DRUIDTREE | MFLAG_KNOWS_CUTTREE)) == MFLAG_KNOWS_DRUIDTREE) goto L_water; + + if ((MAGIC_FLAGS & (MFLAG_KNOWS_DRUIDTREE | MFLAG_KNOWS_CUTTREE)) > 0) //i.e., both are set + goto L_both; + + mes "[Dying Tree]"; + mes "You see a strange tree."; + goto L_Close; + +L_cut: + mes "[Dying Tree]"; + mes "This must be the tree that the earth spirit was referring to."; + next; + menu + "Cut off a branch", L_do_cut, + "Leave it alone", L_Close; + +L_water: + mes "[Dying Tree]"; + mes "This must be the druid tree."; + next; + menu + "Water the tree", L_givewater, + "Kiss tree", L_kiss, + "Leave it alone", L_Close; + +L_both: + mes "[Dying Tree]"; + mes "This must be the druid tree that Wyara and the earth spirit were talking about."; + next; + menu + "Water the tree", L_givewater, + "Kiss tree", L_kiss, + "Cut off a branch", L_do_cut, + "Leave it alone", L_Close; + +L_givewater: + if (countitem("BottleOfWater") < 1) goto L_no_water; + delitem "BottleOfWater", 1; + getitem "EmptyBottle", 1; + + mes "[Dying Tree]"; + mes "You pour a bottle of water into the sand. The water dissipates quickly, without any effect."; + goto L_Close; + +L_no_water: + mes "[Dying Tree]"; + mes "You don't have any water."; + goto L_Close; + +L_kiss: + mes "[Dying Tree]"; + mes "You pluck out a splinter from your lip."; + mes "Somehow, you don't think that this helped."; + goto L_Close; + +L_do_cut: + if (countitem("BoneKnife") < 1) goto L_no_boneknife; + + if (MAGIC_FLAGS & MFLAG_DID_CUTTREE) goto L_really_cut; + + mes "[Dying Tree]"; + mes "You find a suitable branch and put your bone knife in position."; + mes "Holding the branch, you have an uneasy feeling – as if something inside the tree were trying to resist you..."; + mes "Do you want to continue cutting?"; + next; + menu + "Nah... better not.", L_Close, + "Yes, let's cut!", L_really_cut; + +L_really_cut: + set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_DID_CUTTREE; + getitem "DruidTreeBranch", 1; + mes "[Dying Tree]"; + mes "You cut off a branch from the tree."; + mes "For an instant, you have an uneasy feeling, as if the branch were writhing in your hand..."; + goto L_Close; + +L_no_boneknife: + mes "[Dying Tree]"; + mes "Try as you might, you can't seem to find a way to cut off a branch. Perhaps you need a different tool for cutting?"; + goto L_Close; + +L_happy: + mes "[Druid Tree]"; + mes "The tree looks younger and healthier now."; + goto L_Close; + +L_Close: + set @Q_MASK, 0; + set @Q_SHIFT, 0; + set @Q_status, 0; + close; + +} + +006-1.gat,82,59,0|script|#DruidTree0#_M|400 +{ + callfunc "QuestTreeTouch"; + end; +} + +006-1.gat,83,59,0|script|#DruidTree1#_M|400 +{ + callfunc "QuestTreeTouch"; + end; +} |