summaryrefslogtreecommitdiff
path: root/world
diff options
context:
space:
mode:
Diffstat (limited to 'world')
-rw-r--r--world/map/news.txt24
-rw-r--r--world/map/npc/scripts.conf2
-rw-r--r--world/map/npc/xmas/2012/_import.txt17
-rw-r--r--world/map/npc/xmas/2012/bodyguardRoastAcorns.txt94
-rw-r--r--world/map/npc/xmas/2012/bodyguards.txt91
-rw-r--r--world/map/npc/xmas/2012/chiefHelper.txt67
-rw-r--r--world/map/npc/xmas/2012/doors.txt13
-rw-r--r--world/map/npc/xmas/2012/equerry.txt118
-rw-r--r--world/map/npc/xmas/2012/guardOfHonor.txt151
-rw-r--r--world/map/npc/xmas/2012/helpers.txt271
-rw-r--r--world/map/npc/xmas/2012/helpersSaddleRug.txt266
-rw-r--r--world/map/npc/xmas/2012/helpersStorage.txt96
-rw-r--r--world/map/npc/xmas/2012/helpersTalisman.txt176
-rw-r--r--world/map/npc/xmas/2012/reinbooFlightProblems.txt185
-rw-r--r--world/map/npc/xmas/2012/reinbooTrainer.txt85
-rw-r--r--world/map/npc/xmas/2012/reinbooYoung.txt74
-rw-r--r--world/map/npc/xmas/2012/reinboos.txt99
-rw-r--r--world/map/npc/xmas/2012/reinboosTransport.txt181
-rw-r--r--world/map/npc/xmas/2012/santa.txt118
-rw-r--r--world/map/npc/xmas/2012/xmas2012config.txt140
20 files changed, 2254 insertions, 14 deletions
diff --git a/world/map/news.txt b/world/map/news.txt
index 3b97c8bc..6d87d7dd 100644
--- a/world/map/news.txt
+++ b/world/map/news.txt
@@ -1,3 +1,13 @@
+##3 December 2012
+##0
+##0 Santa and his helpers have returned to Santa's residence
+##0 near Nivalis to prepare for Christmas.
+##0 Among the helpers, the preparations are moving smoothly
+##0 as they should.
+##0 The reinboos are excited this year since there will be a change
+##0 within their team!
+##0 But not everything is working out as planned.
+
##3 November 2012
##0
##0 Halloween has passed and several cities celebrated this event.
@@ -402,17 +412,3 @@
##0 /join #tmw-dev
##0 The fate of this world's reality lies in your
##0 hands. :)
-##0
-##0
-##3 2010-08-29
-##0 Throughout Argaes, new trade regulations from
-##0 Tulimshar have concentrated wealth and power
-##0 inside Tonori's largest city. The primary
-##0 resource of Argaes, iron ore, now must be
-##0 refined into ingots within Tulimshar's
-##0 imperial capital.
-##0
-##0 Argaes miners, in search of new iron deposits,
-##0 have discovered a hostile mine north west of
-##0 the woodland town of Hurnscald. More details
-##0 are coming in about this mine.
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index 46bbe109..25269ad5 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -98,3 +98,5 @@ import: npc/halloween/2011/_import.txt
// Easter 2012
// import: npc/easter/2012/_import.txt
+// Christmas 2012
+import: npc/xmas/2012/_import.txt
diff --git a/world/map/npc/xmas/2012/_import.txt b/world/map/npc/xmas/2012/_import.txt
new file mode 100644
index 00000000..b60fd5a9
--- /dev/null
+++ b/world/map/npc/xmas/2012/_import.txt
@@ -0,0 +1,17 @@
+npc: npc/xmas/2012/bodyguardRoastAcorns.txt
+npc: npc/xmas/2012/bodyguards.txt
+npc: npc/xmas/2012/chiefHelper.txt
+npc: npc/xmas/2012/doors.txt
+npc: npc/xmas/2012/equerry.txt
+npc: npc/xmas/2012/helpers.txt
+npc: npc/xmas/2012/helpersSaddleRug.txt
+npc: npc/xmas/2012/helpersStorage.txt
+npc: npc/xmas/2012/helpersTalisman.txt
+npc: npc/xmas/2012/guardOfHonor.txt
+npc: npc/xmas/2012/reinbooFlightProblems.txt
+npc: npc/xmas/2012/reinboos.txt
+npc: npc/xmas/2012/reinboosTransport.txt
+npc: npc/xmas/2012/reinbooTrainer.txt
+npc: npc/xmas/2012/reinbooYoung.txt
+npc: npc/xmas/2012/santa.txt
+npc: npc/xmas/2012/xmas2012config.txt
diff --git a/world/map/npc/xmas/2012/bodyguardRoastAcorns.txt b/world/map/npc/xmas/2012/bodyguardRoastAcorns.txt
new file mode 100644
index 00000000..db9856b9
--- /dev/null
+++ b/world/map/npc/xmas/2012/bodyguardRoastAcorns.txt
@@ -0,0 +1,94 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-2.gat,89,23,0|script|Verneri|334,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo > 7) goto L_RoastAcornAgain;
+
+ mes "[Verneri]";
+ mes "\"Hm? I'm currently having a break. It's really nice here at the fireplace, isn't it?\"";
+ next;
+ mes "\"Ah, I remember when I was a child we used to roast acorns at the fireplace. We dunked them into Iron Potion and then put them over the fire for a while. That gave a tasty icing.\"";
+ if (@reinboo != 7)
+ goto L_Close;
+ menu
+ "Neiremes needs nutrient food, let's roast some.", -,
+ "Children's stuff...", L_Close;
+
+ mes "[Verneri]";
+ mes "\"The little Reinboo? Ah, I heard he has some problems with flying.\"";
+ next;
+ mes "\"Well, if you get some Acorns and Iron Potions, we can do that.";
+ mes "With one Iron Potion we can ice about " + $@xmas2012_acorn_amount + " Acorns.\"";
+ next;
+ mes "\"I think Neiremes will need about " + $@xmas2012_roasted_acorn_amount + " Roasted Acorns.\"";
+ next;
+ mes "[Verneri]";
+ mes "\"Do you have everything we need? Shall we start?\"";
+ menu
+ "Sure!", L_Roast,
+ "I need to get the ingredients.", L_Close;
+
+L_Roast:
+ if (countitem("Acorn") < $@xmas2012_acorn_amount || countitem("IronPotion") < 1)
+ goto L_NoItems;
+
+ delitem "IronPotion", 1;
+ delitem "Acorn", $@xmas2012_acorn_amount;
+
+ mes "Verneri takes the Iron Potion and the Acorns from you. He pours the potion into some bowl and adds the Acorns.";
+ mes "Then he puts the bowl over the fire, stirring it every now and then. After a while it starts to smell really tasty.";
+ next;
+ mes "[Verneri]";
+ mes "\"Here we are! Let me take one of them, ok?\"";
+ mes "He carefully takes one of the roasted acorns and eats it.";
+ next;
+
+ set @roasted_acorns, $@xmas2012_acorn_amount - 1 - rand(4);
+ mes "[Verneri]";
+ mes "\"Ouch, hot. But tasty! Here's the rest of them for Neiremes. Some of them might be burnt, I'll throw those away.\"";
+ getitem "RoastedAcorn", @roasted_acorns;
+ menu
+ "Let's roast some more.", L_Roast,
+ "Thank you.", L_Close;
+
+L_RoastAcornAgain:
+ mes "[Verneri]";
+ mes "\"Hello again. Do you want to roast some more acorns? They're delicious, right? Maybe we should do this every year.\"";
+ menu
+ "Not now.", L_Close,
+ "Yes, I brought the ingredients.", L_Roast;
+
+L_NoItems:
+ mes "[Verneri]";
+ mes "\"You need to bring at least one Iron Potion and " + $@xmas2012_acorn_amount + " Acorns.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Verneri]";
+ mes "\"Now that Christmas is over we're going to leave this residence soon. Santa spends the rest of the year at other places on Kaizei, untiringly working on the concerns of the Sages of Kaizei. He's really impressive.\"";
+ if (@reinboo < 8)
+ goto L_Close;
+ next;
+ mes "\"Make sure to come back next year. We could roast some more acorns then.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Verneri]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/bodyguards.txt b/world/map/npc/xmas/2012/bodyguards.txt
new file mode 100644
index 00000000..0fffcc19
--- /dev/null
+++ b/world/map/npc/xmas/2012/bodyguards.txt
@@ -0,0 +1,91 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-2.gat,76,88,0|script|Vilhelmiina|335,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Vilhelmiina]";
+ mes "\"This is Santa's room. But he isn't here.\"";
+ menu
+ "Ok, thanks.", L_Close,
+ "Could you let me in anyway?", L_Enter,
+ "Where is he?", L_Where;
+
+L_Where:
+ mes "[Vilhelmiina]";
+ mes "\"Maybe he went to talk to Chief Warrick? Or he's over in the workshop? Or in the basement? I don't know.\"";
+ close;
+
+L_Enter:
+ mes "[Vilhelmiina]";
+ mes "\"No!\"";
+ close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+
+L_NoEvent:
+ mes "[Vilhelmiina]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
+
+030-2.gat,80,88,0|script|Vihtori|333,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Vihtori]";
+ mes "\"Santa isn't in his room at the moment.\"";
+ menu
+ "I see.", L_Close,
+ "Could I wait for him inside?", L_Enter,
+ "Where do I find him?", L_Where;
+
+L_Where:
+ mes "[Vihtori]";
+ mes "\"Talking to some helpers I think. Just have a look around the house, I'm sure you'll find him.\"";
+ close;
+
+L_Enter:
+ mes "[Vihtori]";
+ mes "\"What cheek! Of course not!\"";
+ close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+
+L_NoEvent:
+ mes "[Vihtori]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
+
+030-2.gat,152,22,0|script|Vanamo|332,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Vanamo]";
+ mes "\"This area is restricted. You're not allowed to enter.\"";
+ next;
+ mes "...";
+ next;
+ mes "\"Ehm... enjoy your visit in Santa's residence!\"";
+ close;
+
+L_NoEvent:
+ mes "[Vanamo]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/chiefHelper.txt b/world/map/npc/xmas/2012/chiefHelper.txt
new file mode 100644
index 00000000..10116f53
--- /dev/null
+++ b/world/map/npc/xmas/2012/chiefHelper.txt
@@ -0,0 +1,67 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-2.gat,87,77,0|script|Chief Warrick|329,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo == 14) goto L_Done;
+ if (@reinboo > 8) goto L_Talisman;
+ if (@reinboo > 1) goto L_Neiremes;
+
+ mes "[Chief Warrick]";
+ mes "\"Welcome to Santa's residence. We're currently in the Christmas preparations, but feel free to have a look around the house and talk to the helpers.\"";
+
+ if ((BaseLevel < 30) || (gettimetick(2) - TUT_var < 4*7*86400)) // player must be created at least four weeks ago
+ goto L_Close;
+ menu
+ "Can I help somehow?", -,
+ "Thank you.", L_Close;
+ mes "[Chief Warrick]";
+ mes "\"Help? Oh, did you hear about the troubles we had last year? Well, everything is going well this year, so we don't need help from outside this time.";
+ mes "Unless...\"";
+ next;
+ mes "\"Maybe you could have a talk with Grombadil, the equerry. He mentioned some trouble with one of the young Reinboos that are going to begin their duty this year. You can find him outside the house.\"";
+ goto L_Close;
+
+L_Neiremes:
+ mes "[Chief Warrick]";
+ mes "\"I really hope Neiremes will pull himself together soon enough. Everything else is going well, and it'd be a shame if all the preparations get ruined.\"";
+ goto L_Close;
+
+L_Talisman:
+ mes "[Chief Warrick]";
+ mes "\"Tarmo told me about Neimeres' idea with the Flight Talisman. That kind of magic isn't very common among the Sages and their helpers, as it is rather archaic. But if it can help, why not?\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Chief Warrick]";
+ mes "\"Grombadil let me know that Neiremes has much more self-confidence now, thanks to you! Let's see how he does on the Christmas Flight. Make sure to be around at that time if you want to see how he will do.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Chief Warrick]";
+ mes "\"Excuse me, you should leave now. The residence is closed at this time of the year.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Chief Warrick]";
+ mes "\"This year's Christmas was a good year. And much less stressful than last year. Very well.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"You were of great help for Neiremes. I think he'd like to thank you personally.\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/doors.txt b/world/map/npc/xmas/2012/doors.txt
new file mode 100644
index 00000000..73bda9be
--- /dev/null
+++ b/world/map/npc/xmas/2012/doors.txt
@@ -0,0 +1,13 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+// entrance of the building
+030-1.gat,99,53,0|script|#Door|45,1,1,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ end;
+
+ warp "030-2.gat", 88, 50;
+ end;
+}
diff --git a/world/map/npc/xmas/2012/equerry.txt b/world/map/npc/xmas/2012/equerry.txt
new file mode 100644
index 00000000..9b88f19c
--- /dev/null
+++ b/world/map/npc/xmas/2012/equerry.txt
@@ -0,0 +1,118 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-1.gat,106,54,0|script|Grombadil|105,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo == 14) goto L_Done;
+ if (@reinboo > 8) goto L_Talisman;
+ if (@reinboo == 8) goto L_Neimeres;
+ if (@reinboo > 5) goto L_Food;
+ if (@reinboo > 1) goto L_Blanket;
+ if (@reinboo == 1) goto L_Directions;
+
+ mes "[Grombadil]";
+ mes "\"Hello. I'm Grombadil, Santa's equerry - the person in charge of the Reinboos. This year two of the Reinboos are going to retire and two young ones are going to join the team.";
+ mes "But...\"";
+ next;
+ mes "\"One of the young ones, Neiremes... He's having trouble to learn flying. That's really worrying.\"";
+
+ if ((BaseLevel < 30) || (gettimetick(2) - TUT_var < 4*7*86400)) // player must be created at least four weeks ago
+ goto L_Close;
+
+ menu
+ "Can I do anything to help?", -,
+ "That's too bad.", L_Close;
+ mes "[Grombadil]";
+ mes "\"Oh? I never got the idea to ask someone for help with this. But actually... I'm at the end of my ideas. And maybe Neiremes will listen better to some encouragement from the outside.\"";
+ set @reinboo, 1;
+ callfunc "xmas2012update_reinboo_var";
+ next;
+L_Directions:
+ mes "[Grombadil]";
+ mes "\"You can find Neiremes in the Snowy Hills south west of here. But you can't reach the place directly.\"";
+ next;
+ mes "\"You could go through the caves that you can find north of here. But that's a long way, and who knows what's living in there.";
+ mes "Maybe it's better if you ask Meileres to bring you there. He might ask for some food in return though.\"";
+ goto L_Close;
+
+L_Blanket:
+ mes "[Grombadil]";
+ mes "\"Did you talk to Neiremes already?\"";
+ menu
+ "Yes, he feels cold in the upper air.",-,
+ "Not yet.", L_Close;
+
+ mes "[Grombadil]";
+ mes "\"He feels cold? Hm, usually Reinboo fur is warm enough to prevent them from feeling cold, even high up in the air. But Neiremes always has been a bit more sensitive than others.\"";
+ next;
+ mes "\"Maybe some kind of saddle rug... You should talk to Raimo, he's very experienced with sewing.\"";
+ goto L_Close;
+
+L_Food:
+ mes "[Grombadil]";
+ mes "\"I heard you brought the saddle rug to Neiremes. How's he doing now? Did he get better?\"";
+ menu
+ "Yes, he's back to training.", L_Close,
+ "He's hungry.", -;
+
+ mes "[Grombadil]";
+ mes "\"Hungry! Whatever you do, don't give him cakes to eat!\"";
+ menu
+ "Ok.", L_Close,
+ "Why?", L_Cake,
+ "But what should I give him instead?", L_Trainer;
+ goto L_Close;
+
+L_Cake:
+ mes "[Grombadil]";
+ mes "\"Cakes are unhealthy, even for a grown-up reinboo. But for a young one even more. Unfortunately they like cakes so much...";
+ mes "If you give him cakes, he'd probably just get an upset stomach. Then he won't be able to train at all.\"";
+ goto L_Close;
+
+L_Trainer:
+ mes "[Grombadil]";
+ mes "\"I suppose Leiremes can give best advice about that, since he is training Neiremes. You can find him in the snowy hills as well.\"";
+ goto L_Close;
+
+L_Neimeres:
+ mes "[Grombadil]";
+ mes "\"Meireles told me that Neiremes is back to training now. That's a relief.\"";
+ goto L_Close;
+
+L_Talisman:
+ mes "[Grombadil]";
+ mes "\"Neimeres told me about this Flight Talisman. She always had unusual ideas. Well, if it helps...\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Grombadil]";
+ mes "\"You did a great effort to help Neiremes. Thanks for this. I just hope it was enough. We'll see on the Christmas flight. I'm sure you will want to come back to see if he did well.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Grombadil]";
+ mes "\"I can't imagine anything more satisfying than caring for my Reinboos.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Grombadil]";
+ mes "\"I'm so glad Neiremes did well.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"He's so happy. Why don't you go talk to him?\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/guardOfHonor.txt b/world/map/npc/xmas/2012/guardOfHonor.txt
new file mode 100644
index 00000000..3d64c948
--- /dev/null
+++ b/world/map/npc/xmas/2012/guardOfHonor.txt
@@ -0,0 +1,151 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+// Nutcrackers are magical beings serving Santa as guards of honor
+
+// outside of the building
+030-1.gat,89,51,0|script|Grigory the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Grigory the Nutcracker]";
+ mes "\"Welcome to Santa's house. Please behave well.\"";
+ close;
+
+L_NoEvent:
+ mes "[Grigory the Nutcracker]";
+ mes "\"This is Santa's house. But he isn't home at the moment.\"";
+ close;
+}
+
+030-1.gat,89,54,0|script|Vadim the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Vadim the Nutcracker]";
+ mes "\"Welcome. Enjoy your time in Santa's residence.\"";
+ close;
+
+L_NoEvent:
+ mes "[Vadim the Nutcracker]";
+ mes "\"This is Santa's residence, but he isn't here at the moment.\"";
+ close;
+}
+
+// in the entrance area
+030-2.gat,83,43,0|script|Andrey the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Andrey the Nutcracker]";
+ mes "\"Hello. Have a nice time visiting Santa's home.";
+ mes "Be careful not to cause trouble. We, the Nutcracker Guard of Honor, guarantee peace in this house.\"";
+ close;
+
+L_NoEvent:
+ mes "[Andrey the Nutcracker]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
+
+030-2.gat,99,23,0|script|Eugeny the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Eugeny the Nutcracker]";
+ mes "\"Greetings. The workshop is upstairs.\"";
+ close;
+
+L_NoEvent:
+ mes "[Eugeny the Nutcracker]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
+
+030-2.gat,77,23,0|script|Leonid the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Leonid the Nutcracker]";
+ mes "\"Hello. Feel free to have a look around.\"";
+ close;
+
+L_NoEvent:
+ mes "[Leonid the Nutcracker]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
+
+// in office
+030-2.gat,47,81,0|script|Yakov the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Yakov the Nutcracker]";
+ mes "\"Greetings. I hope you find your visit interesting.\"";
+ menu
+ "What is behind that door?", -,
+ "Yeah, it's very interesting.", L_Close;
+ mes "[Yakov the Nutcracker]";
+ mes "\"The Archive. Restricted area, you're not allowed to enter.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Yakov the Nutcracker]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+// in the room before Santa's
+030-2.gat,96,77,0|script|Taras the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Taras the Nutcracker]";
+ mes "\"Hello. Santa's room is down the hallway.\"";
+ close;
+
+L_NoEvent:
+ mes "[Taras the Nutcracker]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
+
+030-2.gat,99,77,0|script|Stepan the Nutcracker|330,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Stepan the Nutcracker]";
+ mes "\"Greetings. The dormitory is up there. But everyone is busy with the Christmas preparations, so nobody's there.\"";
+ close;
+
+L_NoEvent:
+ mes "[Stepan the Nutcracker]";
+ mes "\"How did you come in? At this time of the year the door should be locked!\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/helpers.txt b/world/map/npc/xmas/2012/helpers.txt
new file mode 100644
index 00000000..6d8e2f97
--- /dev/null
+++ b/world/map/npc/xmas/2012/helpers.txt
@@ -0,0 +1,271 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+// At the entrance
+
+030-2.gat,87,40,0|script|Valtteri|328,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Valtteri]";
+ mes "\"Welcome to Sage Santa's residence.";
+ mes "Feel free to have a look around the house and talk to the helpers.\"";
+ next;
+ mes "\"In the room to the left there's our storage, where all the material we need is administrated.";
+ mes "Upstairs there you can find the workshop, where the Christmas presents are crafted.";
+ mes "Further upstairs there is the office, where helpers are working on paperwork and magic researches.\"";
+ next;
+ mes "\"If you wish to see Santa, you probably can find him in his office.\"";
+ close;
+
+L_NoEvent:
+ mes "[Valtteri]";
+ mes "\"Excuse me, you shouldn't be here. Santa is only here during the Christmas time. Please leave.\"";
+ warp "030-1.gat", 99, 55;
+ close;
+}
+
+// In the office
+
+030-2.gat,37,77,0|script|Osmo|328,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Osmo]";
+ mes "\"Welcome. I hope you enjoy your visit in Santa's residence. You already saw the workshop where the Christmas presents are crafted, right?\"";
+ next;
+ mes "\"Well, here you are in the office. We're taking care of various administrative tasks. Some are related to Christmas, but we also need to keep the everyday business running.";
+ mes "Santa, as one of the most powerful Sages, has a lot of issues to pay attention to.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Osmo]";
+ mes "\"What are you doing here? The house isn't open to visitors at this time of the year.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,37,85,0|script|Taito|328,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "[Taito]";
+ mes "\"Hello. I'm sorry, but I'm very busy at the moment and want to concentrate. If you have any questions, ask one of the other helpers.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Taito]";
+ mes "\"What are you doing here? The house isn't open to visitors at this time of the year.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Taito]";
+ mes "\"I think we all did pretty good work this year. That's very reassuring, keeping in mind how chaotic it was last year.\"";
+ next;
+ mes "\"But there are rumors that our Christmas preparations were sabotaged last year!\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,31,81,0|script|Eljas|328,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Eljas]";
+ mes "\"Hello! Did you come to learn about the magic researches we're doing? Or because of Christmas?\"";
+ menu
+ "Because of Christmas.", L_Disappointed,
+ "The magic researches.", -;
+ mes "[Eljas]";
+ mes "\"Wonderful! Naturally, that's a much more interesting topic anyway, isn't it?\"";
+ next;
+ mes "\"Well, the most astonishing discovery in our recent researches is a complex combination of Nature, Transmutation and Astral Magic to animate wooden figurines. Did you notice the Guards around the house?\"";
+ next;
+ mes "\"Originally those were simple nutcrackers, carved out of wood by our talented carpenters. With the results of our magic researches, we were able to transform them into animated beings, acting rudimentary self-determined and capable to perform simple tasks.\"";
+ next;
+ mes "\"At the moment we can keep them animated for an unlimited time, as long as the caster stays in range.\"";
+ goto L_Close;
+
+L_Disappointed:
+ mes "[Eljas]";
+ mes "\"Oh, I see. Well, in that case you'll find the workshop area more interesting.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Eljas]";
+ mes "\"What are you doing here? The house isn't open to visitors at this time of the year.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,31,77,0|script|Rikhard|329,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Rikhard]";
+ mes "\"I'm really glad that this year's Christmas preparations are going well. You know, last year nearly everything went wrong, so we all had to work really hard on that, and the everyday issues had to be neglected.\"";
+ next;
+ mes "\"But there are very important topics we have to take care on as Santa's helpers. The Sages have an important role in the politics of Kaizei.\"";
+ next;
+ mes "\"As an example, currently I'm working on analyzing a trade regulation proposal from Tulimshar's Wizard Council. I can't get into the details about this, obviously. But, let me tell you, those Tulimshar people try to get everything under their control.\"";
+ next;
+ mes "\"It's part of our work to maintain Kaizei's independency. In my opinion the Sages should be much more reluctant about this anyway. But well, I'm only a mere helper, this isn't up to me. I can only do my best to deliver an analysis as accurate as possible.\"";
+ next;
+ mes "\"Which is why I should go back to work now.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Rikhard]";
+ mes "\"What are you doing here? The house isn't open to visitors at this time of the year.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,31,85,0|script|Akseli|329,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+
+ mes "[Akseli]";
+ mes "\"Ah, a visitor! Do you enjoy your time in Santa's residence?\"";
+ menu
+ "I'm confused, it's much bigger than from the outside.", -,
+ "Yes, it's really interesting.", L_Close,
+ "It's ok.", L_Close;
+ mes "[Akseli]";
+ mes "\"Ah, yes, that's a magic technique almost all of the Sages use. The house is located in a shifted dimension.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Akseli]";
+ mes "\"What are you doing here? The house isn't open to visitors at this time of the year.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+// In the workshop
+
+030-2.gat,127,41,0|script|Aaron|328,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "[Aaron]";
+ mes "\"Welcome to Santa's famous Christmas workshop. Feel free to have a look around and talk to the craftsmen.\"";
+ next;
+ mes "\"You have to know, Santa is a great promoter for skilled craftsmen. He's always looking out for talented persons who can join our team and get an excellent apprenticeship here.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Aaron]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Aaron]";
+ mes "\"Christmas time is over. Time to move on to different tasks now.\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,140,41,0|script|Urmas|328,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "[Urmas]";
+ mes "\"Uh, I fear I caught a cold.\"";
+ mes "He blows his nose.";
+ next;
+ mes "[Urmas]";
+ mes "\"But it isn't that bad I couldn't work.";
+ mes "Maybe you shouldn't come too close, so you don't get infected.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Urmas]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Urmas]";
+ mes "\"I feel tired. All this work, and on top of that I've got a cold. I think I'm going to have a long, restorative slumber.\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,154,33,0|script|Iivo|329,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "You see a helper cutting some leather pieces. He looks very focused on his work. Then he notices you.";
+ mes "[Iivo]";
+ mes "\"Hu? Oh, hello. Feel free to watch.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Iivo]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Iivo]";
+ mes "\"I like the Christmas time, when we can just work on the presents, and there aren't so many other issues to pay attention to. It always helps me to calm down and think about what happened during the past year.\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/helpersSaddleRug.txt b/world/map/npc/xmas/2012/helpersSaddleRug.txt
new file mode 100644
index 00000000..1673e136
--- /dev/null
+++ b/world/map/npc/xmas/2012/helpersSaddleRug.txt
@@ -0,0 +1,266 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+// Create Blanket
+030-2.gat,153,39,0|script|Raimo|329,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo > 3) goto L_BlanketDone;
+ if (@reinboo == 3) goto L_BlanketNext;
+
+ mes "You see a busy helper, working on some adorable little dolls.";
+ next;
+ mes "[Raimo]";
+ mes "\"Hello there! Welcome to Santa's Christmas workshop. Most of the Christmas presents are crafted here.";
+ mes "Feel free to have a look around and talk to us helpers. Let me know if there's anything I can help you with.\"";
+ if (@reinboo != 2)
+ goto L_Close;
+ menu
+ "Actually, could you sew a blanket for Neiremes?", -,
+ "Thank you.", L_Close;
+
+ mes "[Raimo]";
+ mes "\"A blanket? Well, that'd be an easy task, provided you bring me some material. I need " + $@xmas2012_cotton_cloth_amount + " Cotton Cloths to create a blanket big enough for a Reinboo.\"";
+ menu
+ "Here, I have it.", -,
+ "I'll be right back.", L_Close;
+
+ if (countitem("CottonCloth") < $@xmas2012_cotton_cloth_amount)
+ goto L_NoItem;
+ if ((checkweight("WhiteBlanket", 1) == 0) || (@inventorylist_count == 100))
+ goto L_Inventory;
+ delitem "CottonCloth", $@xmas2012_cotton_cloth_amount;
+ getitem "WhiteBlanket", 1;
+ set @reinboo, 3;
+ callfunc "xmas2012update_reinboo_var";
+ mes "Raimo takes the Cotton Cloths and starts working. It doesn't take long and he has created a simple blanket which he gives you.";
+ next;
+ mes "[Raimo]";
+ mes "\"Here you go. Though I don't think it'll keep him warm enough when he's flying high up in the air.";
+ mes "You can ask Launo to pad it.\"";
+ goto L_Close;
+
+L_NoItem:
+ mes "[Raimo]";
+ mes "\"You don't have it!\"";
+ goto L_Close;
+
+L_Inventory:
+ mes "[Raimo]";
+ mes "\"You carry too much!\"";
+ goto L_Close;
+
+L_BlanketNext:
+ mes "[Raimo]";
+ mes "\"Did you already ask Launo to pad the blanket I made?\"";
+ goto L_Close;
+
+L_BlanketDone:
+ mes "[Raimo]";
+ mes "\"It's really kind of you to help Neiremes. I hope the blanket will help him.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Raimo]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Raimo]";
+ mes "\"This year everything went pretty well. Not like last year!\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"You should go and talk to Neiremes. I'm sure he'd like to thank you.\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
+
+// Create Saddle Rug
+030-2.gat,135,31,0|script|Launo|329,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo > 4) goto L_BlanketDone;
+ if (@reinboo == 4) goto L_BlanketNext;
+
+ mes "[Launo]";
+ mes "\"Hello. I'm creating plush toys for Christmas.\"";
+ next;
+ mes "\"Are you here to talk to Santa? You might find him in his office, just go upstairs through the helpers' office.\"";
+ if (@reinboo != 3)
+ goto L_Close;
+ menu
+ "Could you pad this blanket for Neiremes?", -,
+ "Thank you.", L_Close;
+
+ mes "[Launo]";
+ mes "\"Oh, Neiremes is one of the young Reinboos who are going to join Santa's team, right? I heard he's rather insecure and has some problems with learning to fly over long distances.\"";
+ next;
+ mes "\"I'm very glad to help, if I can. Just bring me " + $@xmas2012_fluffy_fur_amount + " White Furs and give me the White Blanket, then I can add some padding which will keep Neiremes warm on his flights.\"";
+ menu
+ "Here, I have it.", -,
+ "I'll come back later.", L_Close;
+
+ if ((countitem("WhiteBlanket") < 1) || (countitem("WhiteFur") < $@xmas2012_fluffy_fur_amount))
+ goto L_NoItem;
+ if ((checkweight("WhiteSaddleRug", 1) == 0) || (@inventorylist_count == 100))
+ goto L_Inventory;
+ delitem "WhiteFur", $@xmas2012_fluffy_fur_amount;
+ delitem "WhiteBlanket", 1;
+ getitem "WhiteSaddleRug", 1;
+ set @reinboo, 4;
+ callfunc "xmas2012update_reinboo_var";
+ mes "Launo takes the White Blanket and the Fur you brought him. It doesn't take long until he's done and he gives you a very warm White Saddle Rug.";
+ next;
+ mes "[Launo]";
+ mes "\"Done! This should keep Neiremes warm. Please bring it to him.\"";
+ menu
+ "But he said it should be red...", -;
+ mes "[Launo]";
+ mes "\"Red? Oh, I see. Well, I think you should ask Reino for help with that. He's working on dying the wrapping papers, but I think he could also dye this Saddle Rug.\"";
+ goto L_Close;
+
+L_NoItem:
+ mes "[Launo]";
+ mes "\"You don't have everything I need.\"";
+ goto L_Close;
+
+L_Inventory:
+ mes "[Launo]";
+ mes "\"You have a lot of things with you. Come back when you carry less.\"";
+ goto L_Close;
+
+L_BlanketNext:
+ mes "[Launo]";
+ mes "\"Talk to Reino about dying the White Saddle Rug.\"";
+ goto L_Close;
+
+L_BlanketDone:
+ mes "[Launo]";
+ mes "\"I love the Christmas time. Creating plush toys is a very satisfying work for me, knowing how much joy they will bring.\"";
+ next;
+ mes "\"I wish I could do that all year long. But as a helper of a Sage, there are other duties as well.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Launo]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Launo]";
+ mes "\"I'm a bit sad that Christmas is already over. I like the preparation time. But of course I'm glad everything went well.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"Have you talked to Neiremes already?\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
+
+// Dye Saddle Rug
+030-2.gat,140,31,0|script|Reino|328,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "[Reino]";
+ mes "\"Are you another visitor? We're working on the Christmas preparation here.\"";
+ mes "Reino seems to be a bit grumpy.";
+ if (@reinboo != 4)
+ goto L_Close;
+ menu
+ "I need help with this Saddle Rug for Neiremes...", -,
+ "I see. I'll ... let you work then.", L_Close;
+ mes "[Reino]";
+ mes "\"Neiremes? One of the Reinboos? Why?\"";
+ menu
+ "He feels cold when he's high up in the air.", -,
+ "Forget it.", L_Close;
+ mes "Reino sighs.";
+ mes "[Reino]";
+ mes "\"Well, all right. And what do you want me to do?\"";
+ menu
+ "This Saddle Rug needs to be red, because that's Santa's color.", -;
+ mes "[Reino]";
+ mes "\"Of course! What a stupid question. Well, I tell you I'm doing some more serious work here than pampering some mollycoddle Reinboo.\"";
+ next;
+ mes "\"But if you bring me " + $@xmas2012_red_dye_amount + " Red Dyes, I think I can dye that Saddle Rug quickly.\"";
+ menu
+ "I have it with me.", -,
+ "I'll get that.", L_Close;
+
+ if ((countitem("RedDye") < $@xmas2012_red_dye_amount) || (countitem("WhiteSaddleRug") < 1))
+ goto L_NoItem;
+ if ((checkweight("RedSaddleRug", 1) == 0) || (@inventorylist_count == 100))
+ goto L_Inventory;
+ delitem "RedDye", $@xmas2012_red_dye_amount;
+ delitem "WhiteSaddleRug", 1;
+ getitem "RedSaddleRug", 1;
+ set @reinboo, 5;
+ callfunc "xmas2012update_reinboo_var";
+ mes "Reino takes your dyes and the Saddle Rug. He puts the dye into some bowl and dunks the Saddle Rug into it. After the Rug is soaked with the dye, he puts it by the side to dry.";
+ next;
+ mes "[Reino]";
+ mes "\"Ok, done. Now I need to get back to my actual work. Bring that Red Saddle Rug to the Reinboo.\"";
+ goto L_Close;
+
+L_NoItem:
+ mes "[Reino]";
+ mes "\"Don't waste my time! Come back when you have everything I need.\"";
+ goto L_Close;
+
+L_Inventory:
+ mes "[Reino]";
+ mes "\"I suggest you to lighten your backpack first. It must be a pain to carry so many things around!\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Reino]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Reino]";
+ mes "\"It's a really good feeling when all the hard work pays off.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"By the way, did that Saddle Rug help? Did you talk to Neiremes already?\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/helpersStorage.txt b/world/map/npc/xmas/2012/helpersStorage.txt
new file mode 100644
index 00000000..c9aa8f24
--- /dev/null
+++ b/world/map/npc/xmas/2012/helpersStorage.txt
@@ -0,0 +1,96 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-2.gat,25,35,0|script|Vellamo|328,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (xmas2012 & $@xmas2012_CANDY_FLAG)
+ goto L_Candy;
+
+ mes "[Vellamo]";
+ mes "\"Oh, hello. Visitors usually don't come down here in the basement. Here we store several things, materials for the presents, the finished presents, supplies.\"";
+ menu
+ "Nice. I have to go.", L_Close,
+ "Do you need help with anything?", -;
+ mes "[Vellamo]";
+ mes "\"Oh? You want to help us? Actually, there is one thing you could do. Did you see those weird slimes out there on the Snow Fields? Argh, I hate those creatures, last year they invaded the entire basement...\"";
+ next;
+ mes "\"However, this year they tried again, but I was able to hold them off. They just managed to devour most of our Candy supplies.\"";
+ next;
+ mes "\"So in case you find some of the Candies, feel free to bring them back. Ismo will give you some reward for them.\"";
+ set xmas2012, xmas2012 | $@xmas2012_CANDY_FLAG;
+ goto L_Close;
+
+L_Candy:
+ mes "[Vellamo]";
+ mes "\"Ah, welcome back. When you have found some of the Candy, please give it to Ismo.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Vellamo]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Vellamo]";
+ mes "\"Now that Christmas is over, we need to prepare everything for leaving the residence again. Santa spends the rest of the year in other places on Kaizei, working for the welfare of our continent.\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,33,29,0|script|Ismo|329,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (xmas2012 & $@xmas2012_CANDY_FLAG)
+ goto L_Candy;
+
+ mes "[Ismo]";
+ mes "\"Hello. I'm helping Vellamo. He's the storage administrator.\"";
+ goto L_Close;
+
+L_Candy:
+ mes "[Ismo]";
+ mes "\"Did you get back some Candy from the slimes?\"";
+ next;
+
+ set @dq_level, 30;
+ set @dq_cost, 12;
+ set @dq_count, 3;
+ set @dq_name$, "Candy";
+ set @dq_friendly_name$, "Candies";
+ set @dq_money, 1000;
+ set @dq_exp, 200;
+
+ callfunc "DailyQuest";
+
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Ismo]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Ismo]";
+ mes "\"We're going to have a lot of work here now, because we're going to leave this residence soon.\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/helpersTalisman.txt b/world/map/npc/xmas/2012/helpersTalisman.txt
new file mode 100644
index 00000000..8c69dda3
--- /dev/null
+++ b/world/map/npc/xmas/2012/helpersTalisman.txt
@@ -0,0 +1,176 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-2.gat,37,81,0|script|Tarmo|328,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo > 12) goto L_Done;
+ if (@reinboo == 12) goto L_Santa;
+ if (@reinboo > 9) goto L_CarveTalisman;
+
+ mes "[Tarmo]";
+ mes "\"Hello. I hope you're enjoying your time in Santa's residence. If I can help you with anything, please let me know.\"";
+ if (@reinboo != 9)
+ goto L_Close;
+ menu
+ "We need a Flight Talisman for Neiremes.", -,
+ "Thanks.", L_Close;
+ mes "[Tarmo]";
+ mes "\"A Flight Talisman? Was that Neimeres' idea? She always has such fancy ideas.\"";
+ next;
+ mes "\"Talisman magic isn't very common nowadays. It's an ancient form of magic, so you'd more likely find it used by shamans of tribes as the Mangarrs. They're living in the snow mountains north west of Nivalis.\"";
+ next;
+ mes "\"But nevertheless I'm well versed in various fields of magic, including such historical ones. I think you're right that such a simple symbol could encourage Neiremes.\"";
+ next;
+ mes "\"Here, take this drawing to Kalevi and ask him to carve such a form out of a Raw Log. In the meanwhile I'm going to research the spell to enchant the talisman.\"";
+ mes "He gives you a quick sketch of a longish form, with some scribbled remarks about the size.";
+ set @reinboo, 10;
+ callfunc "xmas2012update_reinboo_var";
+ goto L_Close;
+
+L_CarveTalisman:
+ mes "[Tarmo]";
+ mes "\"Show Kalevi the drawing I gave you and come back when you've got a Raw Talisman.\"";
+ if (@reinboo != 11)
+ goto L_Close;
+ menu
+ "I have it!", -,
+ "All right.", L_Close;
+ if (countitem("RawTalisman") < 1)
+ goto L_NoItem;
+ set @reinboo, 12;
+ callfunc "xmas2012update_reinboo_var";
+
+ mes "Tarmo takes the Talisman and inspects it critically. Then he nods and gives it back to you.";
+ mes "[Tarmo]";
+ mes "\"This should do it. Very well. I read up some things about how to create a Flight Talisman. It seems we're going to need some part of the wings of a flying creature. You have to see if you can find such a thing.\"";
+ next;
+ mes "\"And about the spell itself... well, I think you should ask Santa to cast the spell, he's the most powerful mage I know.\"";
+ goto L_Close;
+
+L_NoItem:
+ mes "[Tarmo]";
+ mes "\"Don't fool around! You don't have it.\"";
+ goto L_Close;
+
+L_Santa:
+ mes "[Tarmo]";
+ mes "\"Remember, you need some part of the wings of a flying creature for the Flight Talisman. When you found something that might suffice, ask Santa to cast the spell.\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Tarmo]";
+ mes "\"I'm sure the Flight Talisman will help Neiremes to overcome his fears about flying.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Tarmo]";
+ mes "\"What are you doing here? The house isn't open to visitors at this time of the year.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Tarmo]";
+ mes "\"Neiremes flew excellently! I'm sure this is because of the Flight Talisman we created.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"Did you talk to him already?\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
+
+030-2.gat,147,23,0|script|Kalevi|329,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo == 11) goto L_Tarmo;
+ if (@reinboo > 11) goto L_Done;
+
+ mes "[Kalevi]";
+ mes "\"Oh, hello. Are you here to talk? The Christmas time brings so much hectic work... it's stressful.";
+ mes "I prefer when everything is calm and relaxed.\"";
+ if (@reinboo != 10)
+ goto L_Close;
+ menu
+ "Neiremes needs a Flight Talisman. Can you help?", -,
+ "Too bad.", L_Close;
+ mes "You give Kalevi the drawing from Tarmo and he looks at it for a while.";
+ mes "[Kalevi]";
+ mes "\"This shouldn't be a problem. But you have to bring me " + $@xmas2012_raw_log_amount + " Raw Log, since the ones I have here are intended for some more presents.\"";
+ menu
+ "I have it.", -,
+ "Ok, I'll get that.", L_Close;
+ if (countitem("RawLog") < $@xmas2012_raw_log_amount)
+ goto L_NoItem;
+ if ((checkweight("RawTalisman", 1) == 0) || (@inventorylist_count == 100))
+ goto L_Inventory;
+ delitem "RawLog", $@xmas2012_raw_log_amount;
+ getitem "RawTalisman", 1;
+ set @reinboo, 11;
+ callfunc "xmas2012update_reinboo_var";
+ mes "Kalevi takes the wood and carves it, looking at the drawing every now and then. After he finished the carving, he polishes the piece to get rid of any splinters. Then he gives it to you.";
+ next;
+ mes "[Kalevi]";
+ mes "\"Here it is. I hope it'll help.\"";
+ goto L_Close;
+
+L_NoItem:
+ mes "[Kalevi]";
+ mes "\"You don't have it!\"";
+ goto L_Close;
+
+L_Inventory:
+ mes "[Kalevi]";
+ mes "\"Wow, you have a lot of stuff with you. Isn't that too heavy?\"";
+ goto L_Close;
+
+L_Tarmo:
+ mes "[Kalevi]";
+ mes "\"And, did you show the Raw Talisman I carved to Tarmo already? Is it usable?\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Kalevi]";
+ mes "\"A Flight Talisman! That's a really interesting idea.\"";
+ next;
+ mes "\"You know, I never thought about the difficulties the reinboos might have to face. I just took it as naturally that they transport Santa on his Christmas Flight.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Kalevi]";
+ mes "\"I'm sorry, the house isn't open to visitors at the moment.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Kalevi]";
+ mes "\"Ah, I'm glad all the hustle and bustle is over.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"I wonder, did that Talisman I carved help? You should go to see Neiremes.\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/reinbooFlightProblems.txt b/world/map/npc/xmas/2012/reinbooFlightProblems.txt
new file mode 100644
index 00000000..c45117b3
--- /dev/null
+++ b/world/map/npc/xmas/2012/reinbooFlightProblems.txt
@@ -0,0 +1,185 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+044-1.gat,71,101,0|script|Neiremes|331,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo == 14) goto L_Done;
+ if (@reinboo > 8) goto L_Training;
+ if (@reinboo == 8) goto L_Neimeres;
+ if (@reinboo > 6) goto L_Acorn;
+ if (@reinboo == 6) goto L_Hungry;
+ if (@reinboo > 1) goto L_Blanket;
+
+ mes "[Neiremes]";
+ mes "\"Hello? Please don't disturb me. I'm practicing.\"";
+ if (@reinboo == 0)
+ goto L_Close;
+ menu
+ "I'm here to help you!", -,
+ "Ok, sorry.", L_Close;
+ mes "[Neiremes]";
+ mes "\"Help me? Oh, that's kind. Now that you say it, I can smell Grombadil on you. He sent you, right? He's so friendly to me. And I fear I'll dissapoint him.\"";
+ menu
+ "I'm sure you won't. What's causing you problems?", -,
+ "Pull yourself together! What's your problem?", -;
+ mes "[Neiremes]";
+ mes "\"I... I have problems with flying. I can manage a short flight, but... well, first of all it's so terribly cold in the upper air!";
+ mes "I don't like freezing.\"";
+ menu
+ "I'll try to get something to keep you warm.", -;
+ mes "[Neiremes]";
+ mes "\"Oh, that's very kind! But... it has to be red, ok? It's Santa's color. I can't wear a different color!\"";
+ set @reinboo, 2;
+ callfunc "xmas2012update_reinboo_var";
+ goto L_Close;
+
+L_Blanket:
+ mes "[Neiremes]";
+ mes "\"Did you find something to keep me warm yet? I'm sure that'll help me to stay in the air for a longer time. And remember, I can only wear something red. Because it's Santa's color.\"";
+ if (@reinboo != 5)
+ goto L_Close;
+ menu
+ "I have a Red Saddle Rug for you!", -,
+ "Not yet.", L_Close;
+
+ if (countitem("RedSaddleRug") < 1)
+ goto L_NoItem;
+ delitem "RedSaddleRug", 1;
+ set @reinboo, 6;
+ callfunc "xmas2012update_reinboo_var";
+
+ mes "[Neiremes]";
+ mes "\"Oh, oh, oh! Amazing! It's so fluffy! And red! And warm! Thank you!\"";
+ mes "He takes the rug with his mouth and puts it on his back.";
+ next;
+ mes "[Neiremes]";
+ mes "\"Can you fasten it onto my back? Pull that strap. Yes, that's right.\"";
+ next;
+ mes "\"Oh, I'm so happy. I'm sure now I can stay in the cold air for a longer time.";
+ mes "\"Unless...";
+ menu
+ "Unless?", -,
+ "What's now the problem?", -;
+L_Hungry:
+ mes "[Neiremes]";
+ mes "\"Oh, I... I feel hungry now. It's hard to concentrate when I'm hungry. And I feel exhausted because of that. Yes. I need to eat first.\"";
+ next;
+ mes "\"Leiremes, my trainer, said it's not good to go on a long flight when you're hungry.\"";
+ menu
+ "Are you sure you aren't just afraid?", -,
+ "Ok, I'll get you something.", L_Close;
+
+ mes "[Neiremes]";
+ mes "\"Oh, don't be mean! I'm really hungry! I'm doing my best.\"";
+ goto L_Close;
+
+L_Acorn:
+ mes "[Neiremes]";
+ mes "\"That Red Saddle Rug you brought me is really nice and warm. But I can't go on a long training flight when I'm hungry. Leiremes said it's dangerous to fly when you're hungry. He's my trainer and he's very wise.\"";
+ menu
+ "I'll try to find something appropriate.", L_Close,
+ "I've got some Roasted Acorns for you.", -;
+
+ if (countitem("RoastedAcorn") < $@xmas2012_roasted_acorn_amount)
+ goto L_NoItem;
+ delitem "RoastedAcorn", $@xmas2012_roasted_acorn_amount;
+ set @reinboo, 8;
+ callfunc "xmas2012update_reinboo_var";
+
+ mes "[Neiremes]";
+ mes "\"Roasted Acorns! Yum, yum, yum. Tasty!\"";
+ mes "Neiremes munches the acorns with visible delight.";
+ next;
+ mes "[Neiremes]";
+ mes "\"Now I'm going back to training.\"";
+ next;
+L_Neimeres:
+ mes "[Neiremes]";
+ mes "\"Neimeres wanted to talk to you. I told her about the nice saddle rug you brought me and she got curious about you. She is just over there at the well.\"";
+ next;
+ mes "\"Mh... I think you have to go through that cave further downhill.\"";
+ goto L_Close;
+
+L_Training:
+ mes "[Neiremes]";
+ mes "\"I'm training. Thank you for bringing me the saddle rug and the food. I'm doing my best now.";
+ mes "... If I only wouldn't have to fly so high...\"";
+ if (@reinboo != 13)
+ goto L_Close;
+ menu
+ "I have a Flight Talisman for you!", -,
+ "You just have to train harder!", L_Close;
+ mes "[Neiremes]";
+ mes "\"Oh, exciting! What does it do? Does it help me?\"";
+ menu
+ "It'll keep you safe while you're flying.", -;
+ if (countitem("FlightTalisman") < 1)
+ goto L_NoItem;
+ delitem "FlightTalisman", 1;
+ set @reinboo, 14;
+ callfunc "xmas2012update_reinboo_var";
+ mes "You give Neiremes the talisman.";
+ mes "[Neiremes]";
+ mes "\"Oh, I already feel more safe. It's really powerful, is it? Thank you so much. I'm going to do another training flight, to test it.\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Neiremes]";
+ mes "\"Hello! I just made a very long and high training flight. And I didn't feel cold and I wasn't nervous! Are you proud of me? Thank you so much for bringing this Flight Talisman.\"";
+ next;
+ mes "\"Will you come to see how I did after Christmas?\"";
+ menu
+ "Of course I will!", -,
+ "When I have the time...", L_Please;
+ mes "[Neiremes]";
+ mes "\"Yay!\"";
+ goto L_Close;
+
+L_Please:
+ mes "[Neiremes]";
+ mes "\"Oh, please come!\"";
+ goto L_Close;
+
+L_NoItem:
+ mes "[Neiremes]";
+ mes "\"Hey? You don't have it! That's mean.\"";
+ mes "Neiremes looks very sad.";
+ goto L_Close;
+
+L_NoEvent:
+ mes "Neiremes the Reinboo hums happily.";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Neiremes]";
+ mes "\"Thank you so much for your help! It was really great to fly with Santa and the others. Neimeres was so happy too.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+
+ getinventorylist;
+ if ((checkweight("RedNose", 1) == 0) || (@inventorylist_count == 100))
+ goto L_Inventory;
+ mes "\"Here, this is for you.\"";
+ getitem "RedNose", 1;
+ set @reinboo, 15;
+ callfunc "xmas2012update_reinboo_var";
+ goto L_Close;
+
+L_Inventory:
+ mes "[Neiremes]";
+ mes "\"Oh, I want to give you a gift, but you can't carry it.\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/reinbooTrainer.txt b/world/map/npc/xmas/2012/reinbooTrainer.txt
new file mode 100644
index 00000000..adafec44
--- /dev/null
+++ b/world/map/npc/xmas/2012/reinbooTrainer.txt
@@ -0,0 +1,85 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+044-1.gat,66,103,0|script|Leiremes|170,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo == 14) goto L_Done;
+ if (@reinboo > 8) goto L_Talisman;
+ if (@reinboo == 8) goto L_Neimeres;
+ if (@reinboo == 7) goto L_Food;
+ if (@reinboo == 6) goto L_Hungry;
+ if (@reinboo > 1) goto L_Blanket;
+
+ mes "[Leiremes]";
+ mes "\"Oh, I'm surprised to see you here. Humans doesn't come here often. We're here to train flying, so please don't disturb us.\"";
+ goto L_Close;
+
+L_Blanket:
+ mes "[Leiremes]";
+ mes "\"It isn't easy to train Neiremes... We'll see if your efforts can help.\"";
+ goto L_Close;
+
+L_Hungry:
+ mes "[Leiremes]";
+ mes "\"That's a very nice saddle rug you brought. Now Neiremes can't complain about the cold anymore.\"";
+ menu
+ "He's hungry now.", -;
+
+ mes "[Leiremes]";
+ mes "\"I see. Well, he should eat something nutrient but light. He probably wants a cake, but that'd feel too heavy in his stomach during the flight.\"";
+ next;
+ mes "\"I know, Roasted Acorns would be good.\"";
+ set @reinboo, 7;
+ callfunc "xmas2012update_reinboo_var";
+ goto L_Close;
+
+L_Food:
+ mes "[Leiremes]";
+ mes "\"Verneri, one of Santa's bodyguards, knows how to make really tasty Roasted Acorns. Maybe you should talk to him.\"";
+ goto L_Close;
+
+L_Neimeres:
+ mes "[Leiremes]";
+ mes "\"Neiremes should go back to training now. Why don't you talk to Neimeres in the meanwhile? She's his flight partner.\"";
+ mes "\"Everyone of us has a flight partner, we start our service together and retire at the same time. My partner is Leimeres.\"";
+ goto L_Close;
+
+L_Talisman:
+ mes "[Leiremes]";
+ mes "\"I heard about this idea with the Flight Talisman. I have to say, I'm a bit skeptical if that'll work. But I don't have any better ideas.\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Leiremes]";
+ mes "\"Since you gave the Flight Talisman to Neiremes he's really motivated. Thank you.\"";
+ next;
+ mes "\"The Christmas Flight will show how much it helped.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Leiremes]";
+ mes "\"I love flying over the snowy hills.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Leiremes]";
+ mes "\"Neiremes did very well on the flight with Santa. Thanks for your help!\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"You should also talk to Neiremes. I think he wants to thank you personally.\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/reinbooYoung.txt b/world/map/npc/xmas/2012/reinbooYoung.txt
new file mode 100644
index 00000000..d5e23c2b
--- /dev/null
+++ b/world/map/npc/xmas/2012/reinbooYoung.txt
@@ -0,0 +1,74 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+044-1.gat,109,116,0|script|Neimeres|331,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo == 14) goto L_Done;
+ if (@reinboo > 8) goto L_Talisman;
+ if (@reinboo == 8) goto L_Afraid;
+ if (@reinboo > 1) goto L_Neiremes;
+
+ mes "[Neimeres]";
+ mes "\"Hello. What are you doing here? Humans usually don't come here, because they have to go through an icy cave with monsters living in there. You must be very brave.\"";
+ goto L_Close;
+
+L_Neiremes:
+ mes "[Neimeres]";
+ mes "\"You're going to help Neiremes, right? I'm so worried. I want to fly with him!\"";
+ goto L_Close;
+
+L_Afraid:
+ mes "[Neimeres]";
+ mes "\"You were helping Neiremes a lot! That's very kind. But... I don't think it's enough. He's afraid of being high up in the air for a long time.\"";
+ mes "Neimeres looks sad.";
+ next;
+ mes "[Neimeres]";
+ mes "\"But I had an idea! Neiremes needs a Flight Talisman! Then he won't be afraid anymore!\"";
+ menu
+ "What is a Flight Talisman?", -;
+ mes "[Neimeres]";
+ mes "\"It's a magical talisman that keeps you safe during flights, I think. I never saw one.";
+ mes "But Santa's helpers are very wise and know a lot of things. I'm sure they know about it.\"";
+ next;
+ mes "\"And Tarmo knows the most about magic items. Please ask him about it! I need to stay here, with Neiremes. He'd be sad if I go away.\"";
+ set @reinboo, 9;
+ callfunc "xmas2012update_reinboo_var";
+ goto L_Close;
+
+L_Talisman:
+ mes "[Neimeres]";
+ mes "\"Please ask Tarmo about the Flight Talisman! With such a talisman Neiremes won't be afraid anymore, I'm sure.\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Neimeres]";
+ mes "\"Thanks for bringing the Flight Talisman! Neiremes is training very hard now. I'm sure he will do well on Christmas! Make sure to stay around to hear how he did.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Neimeres]";
+ mes "\"These mountains are nice. I like being here.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Neimeres]";
+ mes "\"It was so wonderful to fly with Santa and Neiremes. He did really well! Oh, I'm so happy.\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"You helped so much. Go talk to Neiremes. He wants to thank you.\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/reinboos.txt b/world/map/npc/xmas/2012/reinboos.txt
new file mode 100644
index 00000000..d7707ee0
--- /dev/null
+++ b/world/map/npc/xmas/2012/reinboos.txt
@@ -0,0 +1,99 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-1.gat,96,57,0|script|Reimeles|170,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "[Reimeles]";
+ mes "\"My flight partner Reilemes flew to the Snowy Hills, to train the young Reinboos who are going to join our team this year.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Reimeles]";
+ mes "\"This is Santa's residence.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Reimeles]";
+ mes "\"The Christmas Flight was a lot of fun this year!\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-1.gat,100,46,0|script|Leimeres|170,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "[Leimeres]";
+ mes "\"This year the snowflakes doesn't look as pretty as usual.\"";
+ menu
+ "I think they look totally normal.", -,
+ "That's weird.", L_Close,
+ "Are you sure?", -;
+
+ mes "[Leimeres]";
+ mes "\"Maybe I'm just not as happy as last year. I'm a bit worried.";
+ mes "The little Neiremes has problems to learn flying.\"";
+
+ menu
+ "Neiremes?", -,
+ "That's too bad.", L_Close;
+
+ mes "[Leimeres]";
+ mes "\"Leiremes and I are going to retire this year. Neiremes and Neimeres will take our positions.";
+ mes "But what if he doesn't learn to fly? Does that mean I can't retire then? I'm worried.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Leimeres]";
+ mes "\"I like the snowflakes.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Leimeres]";
+ mes "\"It was an odd feeling not to be with Santa on his tour this year. But the young ones did well. I'm happy.\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
+
+030-1.gat,103,54,0|script|Meireles|170,{
+ callfunc "xmas2012time";
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ mes "[Meireles]";
+ mes "\"Grombadil is worried. You see, some of the Reinboos from our team are going to retire this year. And some young ones are going to join.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Meireles]";
+ mes "\"Grombadil is our equerry. That means he takes care of us Reinboos. I think he's a very good equerry. I'm happy.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Meireles]";
+ mes "\"Nobody needs to be worried anymore. I'm glad.\"";
+ goto L_Close;
+
+L_Close:
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/reinboosTransport.txt b/world/map/npc/xmas/2012/reinboosTransport.txt
new file mode 100644
index 00000000..0335f68c
--- /dev/null
+++ b/world/map/npc/xmas/2012/reinboosTransport.txt
@@ -0,0 +1,181 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-1.gat,75,65,0|script|Meileres|170,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (xmas2012 & $@xmas2012_FLIGHT_FLAG1) goto L_Again;
+
+ mes "[Meileres]";
+ mes "\"Hello. Are you here to see Santa and the helpers? They're inside the house.\"";
+ if (@reinboo < 1)
+ goto L_Close;
+ menu
+ "Could you bring me to Neiremes?", -,
+ "It's really cold here, I'll go inside.", L_Close;
+ mes "[Meileres]";
+ mes "\"To Neiremes? Oh, but they're training! What do you want from Neiremes?\"";
+ menu
+ "Grombadil sent me to help him.", -,
+ "You're right, I should leave him alone.", L_Close;
+ mes "Meileres sniffs on you.";
+ mes "[Meileres]";
+ mes "\"Well, I can smell that you talked to Grombadil. Ok. I can bring you there. But I need something to eat first.\"";
+ next;
+ mes "\"Otherwise I get tired, and we might fall from the sky! You don't want to fall from the sky, right?\"";
+ set xmas2012, xmas2012 | $@xmas2012_FLIGHT_FLAG1;
+ goto L_Pay;
+
+L_Again:
+ mes "[Meileres]";
+ mes "\"Do you want me to bring you to Neiremes again?\"";
+ menu
+ "Yes.", L_Pay,
+ "No.", L_Close;
+
+L_Pay:
+ mes "[Meileres]";
+ mes "\"Do you have anything tasty for me?\"";
+ menu
+ "What about Red Apples?", -,
+ "I could give you Chocolate Cake.", -,
+ "I have some White Cake here.", -,
+ "I can offer you some Orange Cake.", -,
+ "Would you like some Apple Cake?", -,
+ "You're greedy!", L_Close;
+
+ set @flight_pay, @menu - 1;
+ mes "[Meileres]";
+ mes "\"Ok. Give me " + $@xmas2012_flight_pay[@flight_pay] + " " + $@xmas2012_flight_pay_name$[@flight_pay] + " and I'll fly you over to Neiremes.\"";
+ menu
+ "Here it is.", -,
+ "I need to get it first.", L_Close;
+
+ if (countitem($@xmas2012_flight_pay$[@flight_pay]) < $@xmas2012_flight_pay[@flight_pay])
+ goto L_NoItem;
+ delitem $@xmas2012_flight_pay$[@flight_pay], $@xmas2012_flight_pay[@flight_pay];
+
+ mes "[Meileres]";
+ mes "\"Yum, yum, tasty. Ok, let's start.\"";
+ warp "044-1.gat", 71, 103;
+ goto L_Close;
+
+L_NoItem:
+ mes "[Meileres]";
+ mes "\"Where is it? Where is it? You don't have it!\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Meileres]";
+ mes "\"I really don't understand why humans spend so much time in buildings. It's so much nicer outside.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Meileres]";
+ mes "\"Neiremes didn't have any problems with the flight! I'm so happy!\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"Do you want me to bring you to Neiremes again?\"";
+ menu
+ "Yes.", L_Pay,
+ "No, thanks.", L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @flight_pay, 0;
+ set @xmas_time, 0;
+ close;
+}
+
+044-1.gat,66,100,0|script|Reilemes|170,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (xmas2012 & $@xmas2012_FLIGHT_FLAG2) goto L_Again;
+
+ mes "[Reilemes]";
+ mes "\"Hello. We're here to train flying.\"";
+ if (@reinboo < 1)
+ goto L_Close;
+ menu
+ "Could you fly me back to Santa's place?", -,
+ "Good luck!", L_Close;
+ mes "[Reilemes]";
+ mes "\"Hm. Ok, why not. But you have to give me something to eat first.\"";
+ set xmas2012, xmas2012 | $@xmas2012_FLIGHT_FLAG2;
+ next;
+ goto L_Pay;
+
+L_Again:
+ mes "[Reilemes]";
+ mes "\"Do you want to return to Santa's residence?\"";
+ menu
+ "Yes.", L_Pay,
+ "No.", L_Close;
+
+L_Pay:
+ mes "[Reilemes]";
+ mes "\"Do you have anything tasty for me?\"";
+ menu
+ "What about Red Apples?", -,
+ "I could give you Chocolate Cake.", -,
+ "I have some White Cake here.", -,
+ "I can offer you some Orange Cake.", -,
+ "Would you like some Apple Cake?", -,
+ "You're greedy!", L_Close;
+
+ set @flight_pay, @menu - 1;
+ mes "[Reilemes]";
+ mes "\"Ok. Give me " + $@xmas2012_flight_pay[@flight_pay] + " " + $@xmas2012_flight_pay_name$[@flight_pay] + " and I'll fly you over to Santa's place.\"";
+ menu
+ "Ok.", -,
+ "I changed my mind.", L_Close;
+
+ if (countitem($@xmas2012_flight_pay$[@flight_pay]) < $@xmas2012_flight_pay[@flight_pay])
+ goto L_NoItem;
+ delitem $@xmas2012_flight_pay$[@flight_pay], $@xmas2012_flight_pay[@flight_pay];
+
+ mes "[Reilemes]";
+ mes "\"Yum, yum, tasty. Ok, let's start.\"";
+ warp "030-1.gat", 75, 68;
+ goto L_Close;
+
+L_NoItem:
+ mes "[Reilemes]";
+ mes "\"Are you trying to trick me? You don't have it!\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Reilemes]";
+ mes "\"I like these snowy hills.\"";
+ goto L_Close;
+
+L_RewardTime:
+ mes "[Reilemes]";
+ mes "\"Neiremes and Neimeres did very good for their first Christmas Flight.\"";
+ next;
+ if (@reinboo != 14)
+ goto L_Again;
+ mes "\"What are you waiting for? Talk to Neiremes!\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @flight_pay, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/santa.txt b/world/map/npc/xmas/2012/santa.txt
new file mode 100644
index 00000000..203e00d5
--- /dev/null
+++ b/world/map/npc/xmas/2012/santa.txt
@@ -0,0 +1,118 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+030-2.gat,85,79,0|script|Santa|105,{
+ callfunc "xmas2012time";
+
+ set @reinboo, (xmas2012 & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT;
+
+ if (@xmas_time == $@xmas2012_no_event_time)
+ goto L_NoEvent;
+ if (@xmas_time == $@xmas2012_reward_time)
+ goto L_RewardTime;
+
+ if (@reinboo > 13) goto L_Done;
+ if (@reinboo == 13) goto L_Neiremes;
+ if (@reinboo == 12) goto L_Talisman;
+
+ mes "[Santa]";
+ mes "\"Hello! Welcome to my house. Can I help you with something?\"";
+ menu
+ "I'm just having a look around.", L_Close,
+ "Can I help with the Christmas preparations?", -;
+
+ if ((BaseLevel < 30) || (gettimetick(2) - TUT_var < 4*7*86400)) // player must be created at least four weeks ago
+ goto L_Young;
+
+ mes "[Santa]";
+ mes "\"Helping us? Mh, here in the house everything's going well. But my equerry Grombadil told me that one of the young Reinboos has trouble learning to fly. I suggest to ask him if he needs any assistance.\"";
+ goto L_Close;
+
+L_Talisman:
+ mes "[Santa]";
+ mes "\"Hello " + strcharinfo(0) + ". I heard about your efforts to help Neiremes. I'm very happy to hear that.\"";
+ menu
+ "I need your help to create a Flight Talisman for him.", -,
+ "It's a pleasure.", L_Close;
+ mes "[Santa]";
+ mes "\"A Flight Talisman? What an interesting idea! Do you have a Raw Talisman and some part of wings with you?\"";
+ menu
+ "Would Bat Wings work?", -,
+ "Not yet.", L_Close;
+ mes "[Santa]";
+ mes "\"Hm, that's not the first creature that comes to my mind when thinking about wings. But it should work. Do you have " + $@xmas2012_bat_wing_amount + " Bat Wings?\"";
+ menu
+ "Yes, here.", -,
+ "I'll go and get them.", L_Close;
+ if ((countitem("BatWing") < $@xmas2012_bat_wing_amount) || (countitem("RawTalisman") < 1))
+ goto L_NoItem;
+ if ((checkweight("FlightTalisman", 1) == 0) || (@inventorylist_count == 100))
+ goto L_Inventory;
+ misceffect sfx_magic_transmute;
+ delitem "BatWing", $@xmas2012_bat_wing_amount;
+ delitem "RawTalisman", 1;
+ getitem "FlightTalisman", 1;
+ set @reinboo, 13;
+ callfunc "xmas2012update_reinboo_var";
+ mes "Santa takes the items and casts a spell.";
+ next;
+ mes "\"It worked! Here is the Flight Talisman. Please bring it to Neiremes.\"";
+ goto L_Close;
+
+L_NoItem:
+ mes "[Santa]";
+ mes "\"You're mistaken. There's something missing. Please come back when you have everything we need.\"";
+ goto L_Close;
+
+L_Inventory:
+ mes "[Santa]";
+ mes "\"You shouldn't carry so many things. Come back when you have less with you.\"";
+ goto L_Close;
+
+L_Neiremes:
+ mes "[Santa]";
+ mes "\"Did you bring the Flight Talisman to Neiremes already?\"";
+ goto L_Close;
+
+L_Done:
+ mes "[Santa]";
+ mes "\"Thanks for all your help. I'm confident that Neiremes will do well on the Christmas flight.\"";
+ next;
+ mes "\"Please come back after Christmas, maybe I'll have a small present for you.\"";
+ goto L_Close;
+
+L_Young:
+ mes "[Santa]";
+ mes "\"That's a very friendly offer! But I don't think we need any help.\"";
+ goto L_Close;
+
+L_NoEvent:
+ mes "[Santa]";
+ mes "\"I'm very sorry, but I can't allow you inside here at the moment. Please come back around Christmas time.\"";
+ warp "030-1.gat", 99, 55;
+ goto L_Close;
+
+L_RewardTime:
+ if (xmas2012 & $@xmas2012_SANTA_FLAG)
+ goto L_SkipReward;
+ mes "[Santa]";
+ mes "\"Hello my friend. I have a small gift for you.\"";
+ getitem "Candy", 10;
+ getitem "ChocolateBar", 3;
+ getitem "GingerBreadMan", 1;
+ set xmas2012, xmas2012 | $@xmas2012_SANTA_FLAG;
+ next;
+L_SkipReward:
+ mes "[Santa]";
+ mes "\"Merry Christmas!\"";
+ if (@reinboo != 14)
+ goto L_Close;
+ next;
+ mes "\"You should go to see Neiremes. He was very excited when he talked about your generosity.\"";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
diff --git a/world/map/npc/xmas/2012/xmas2012config.txt b/world/map/npc/xmas/2012/xmas2012config.txt
new file mode 100644
index 00000000..9a13ac82
--- /dev/null
+++ b/world/map/npc/xmas/2012/xmas2012config.txt
@@ -0,0 +1,140 @@
+// This file is part of Christmas Event 2012
+// author: Jenalya
+
+// NPC behavior depending on time:
+// No Event Time: The event didn't start yet or already ended - the house is closed and the outside NPCs give generic dialogue
+// Event Time: Christmas preparation is in progress, main quest can be done
+// Reward Time: Christmas is over, if the main quest was finished, the reward can be taken
+
+// Main quest states saved in NIBBLE 0:
+// 1: Grombadil asked the player to talk to Neiremes
+// 2: Neiremes asked for a blanket
+// 3: Raimo can sew a blanket out of cotton cloth, sends you to Launo with the blanket
+// 4: Launo can make the blanket extra warm by adding some fluffy furs, sends you to Reino with the padded blanket
+// 5: Reino can dye the blanket red with some red dyes, gives you the finished blanket to bring it to Neiremes
+// 6: Gave finished blanket to Neiremes, he now asks for some food. Hint to the trainer reinboo
+// 7: Trainer reinboo says that Roasted Acorns are suitable food.
+// 8: gave roasted acorns to Neiremes, he sends you to Neimeres
+// 9: Neimeres tells you about the Flight Talisman, sends you to Tarmo
+// 10: Tarmo sends you to Kalevi, who can carve the raw form of the talisman
+// 11: Kalevi carved the raw form, sends you back to Tarmo
+// 12: Tarmo explains, that some kind of wing is needed, send you to Santa when found something suitable
+// 13: Santa says bat wings aren't optimal, but ok and enchants the talisman, he sends you back to Neiremes
+// 14: gave talisman to Neiremes
+// 15: got reward from Neiremes: only available during Reward Time
+
+// Two reinboos offer transport between the two places where the quest NPCs are located
+// Saving that the players knows them is done with flags in the first two bits of nibble 2
+
+// The storage administrator Vellamo asks you to get back some candy stolen by the slimes
+// this is saved in the third bit of nibble 2
+// after that, Ismo offers a daily quest with Candy
+
+// When the reward time started, players can get some candy from Santa, this is saved in the fourth bit of nibble 2
+
+-|script|#xmas2012config|-1,{
+OnInit:
+ set $@xmas2012_reward_start_day, 25;
+ set $@xmas2012_reward_end_day, 6;
+ set $@xmas2012_year, 2012;
+
+ set $@xmas2012_event_time, 1;
+ set $@xmas2012_reward_time, 2;
+ set $@xmas2012_no_event_time, 3;
+
+ set $@xmas2012_cotton_cloth_amount, 4;
+ set $@xmas2012_fluffy_fur_amount, 8;
+ set $@xmas2012_red_dye_amount, 2;
+ set $@xmas2012_acorn_amount, 10;
+ set $@xmas2012_roasted_acorn_amount, 30;
+ set $@xmas2012_raw_log_amount, 1;
+ set $@xmas2012_bat_wing_amount, 2;
+
+ set $@xmas2012_FLIGHT_FLAG1, 0x00000100;
+ set $@xmas2012_FLIGHT_FLAG2, 0x00000200;
+ setarray $@xmas2012_flight_pay$, "RedApple", "ChocolateCake", "WhiteCake", "OrangeCake", "AppleCake";
+ setarray $@xmas2012_flight_pay_name$, "Red Apples", "Chocolate Cake", "White Cake", "Orange Cake", "Apple Cake";
+ setarray $@xmas2012_flight_pay, 5, 1, 1, 1, 1;
+
+ set $@xmas2012_CANDY_FLAG, 0x00000400;
+ set $@xmas2012_SANTA_FLAG, 0x00000800;
+}
+
+function|script|xmas2012time|{
+// debug
+// if (@xmas_debug == $@xmas2012_event_time)
+// goto L_Event_Time;
+// if (@xmas_debug == $@xmas2012_reward_time)
+// goto L_Reward_Time;
+// if (@xmas_debug == $@xmas2012_no_event_time)
+// goto L_No_Event_Time;
+
+ if (gettime(7) == $@xmas2012_year && gettime(6) == 12 && gettime(5) < $@xmas2012_reward_start_day)
+ goto L_Event_Time;
+
+ if ((gettime(7) == $@xmas2012_year && gettime(6) == 12 && gettime(5) >= $@xmas2012_reward_start_day)
+ || (gettime(7) == ($@xmas2012_year + 1) && gettime(6) == 1 && gettime(5) <= $@xmas2012_reward_end_day))
+ goto L_Reward_Time;
+
+L_No_Event_Time:
+ set @xmas_time, $@xmas2012_no_event_time;
+ return;
+
+L_Event_Time:
+ set @xmas_time, $@xmas2012_event_time;
+ return;
+
+L_Reward_Time:
+ set @xmas_time, $@xmas2012_reward_time;
+ return;
+}
+
+function|script|xmas2012update_reinboo_var|{
+ set xmas2012, (xmas2012 & ~NIBBLE_0_MASK) | (@reinboo << NIBBLE_0_SHIFT);
+ return;
+}
+
+function|script|xmas2012debug|{
+ mes "What do you want to do?";
+ menu
+ "Set time.", L_Time,
+ "Set reinboo quest state.", L_Reinboo,
+ "Reset complete quest state.", -,
+ "Do nothing.", L_Close;
+
+ set xmas2012, 0;
+ goto L_Close;
+
+L_Time:
+ menu
+ "Event time.", -,
+ "Reward time.", -,
+ "No event time.", -,
+ "Clear time.", -;
+
+ if (@menu == 1)
+ set @xmas_debug, $@xmas2012_event_time;
+ if (@menu == 2)
+ set @xmas_debug, $@xmas2012_reward_time;
+ if (@menu == 3)
+ set @xmas_debug, $@xmas2012_no_event_time;
+ if (@menu == 4)
+ set @xmas_debug, 0;
+
+ goto L_Close;
+
+L_Reinboo:
+ mes "Quest state?";
+ input @reinboo;
+ callfunc "xmas2012update_reinboo_var";
+ goto L_Close;
+
+L_Close:
+ set @reinboo, 0;
+ set @xmas_time, 0;
+ close;
+}
+
+// 030-1.gat,91,48,0|script|Debug|105,{
+// callfunc "xmas2012debug";
+// }