summaryrefslogtreecommitdiff
path: root/npc/annuals
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-04-09 13:33:57 -0300
committerJesusaves <cpntb1@ymail.com>2021-04-09 13:33:57 -0300
commitcf18ce071c79ae37e14ea38943e0b1d88da70a7b (patch)
treef9159c9b60b3018300dd22ffba0d797bc5e828e5 /npc/annuals
parent8a4bf716002a017de77fe7df301ef8e4aaf00a2e (diff)
downloadserverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.tar.gz
serverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.tar.bz2
serverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.tar.xz
serverdata-cf18ce071c79ae37e14ea38943e0b1d88da70a7b.zip
Override
Diffstat (limited to 'npc/annuals')
-rwxr-xr-xnpc/annuals/check_time.txt46
-rwxr-xr-xnpc/annuals/fathertime.txt15
-rwxr-xr-xnpc/annuals/halloween/config.txt285
-rwxr-xr-xnpc/annuals/halloween/debug.txt138
-rwxr-xr-xnpc/annuals/halloween/munro.txt46
-rwxr-xr-xnpc/annuals/halloween/trick_or_treat.txt322
-rwxr-xr-xnpc/annuals/tree_beard.txt121
-rwxr-xr-xnpc/annuals/xmas/barriers.txt155
-rwxr-xr-xnpc/annuals/xmas/config.txt252
-rwxr-xr-xnpc/annuals/xmas/core.txt229
-rwxr-xr-xnpc/annuals/xmas/debug.txt220
-rwxr-xr-xnpc/annuals/xmas/helpers.txt44
-rwxr-xr-xnpc/annuals/xmas/list.txt98
-rwxr-xr-xnpc/annuals/xmas/mobmanager.txt77
-rwxr-xr-xnpc/annuals/xmas/reagents.txt139
-rwxr-xr-xnpc/annuals/xmas/states.txt51
16 files changed, 2238 insertions, 0 deletions
diff --git a/npc/annuals/check_time.txt b/npc/annuals/check_time.txt
new file mode 100755
index 00000000..74980e9c
--- /dev/null
+++ b/npc/annuals/check_time.txt
@@ -0,0 +1,46 @@
+
+function script GetEventTime {
+ $@month = gettime(6);
+ $@day = gettime(5);
+
+ if ($@start_month > $@end_month)
+ goto L_YearWrap;
+ goto L_Normal;
+
+L_Normal:
+ if(($@month < $@start_month)
+ || ($@month == $@start_month && $@day < $@start_day))
+ goto L_NoEventTime;
+ if(($@month > $@end_month)
+ || ($@month == $@end_month && $@day > $@end_day))
+ goto L_NoEventTime;
+ if(($@month > $@reward_start_month)
+ || ($@month == $@reward_start_month && $@day >= $@reward_start_day))
+ goto L_RewardTime;
+ goto L_EventTime;
+
+L_YearWrap:
+ if(($@month == $@reward_start_month && $@day >= $@reward_start_day
+ && ($@day <= $@end_day && $@reward_start_month == $@end_month
+ || !($@reward_start_month == $@end_month)))
+ || ($@month == $@end_month && $@day <= $@end_day
+ && ($@day >= $@reward_start_day && $@reward_start_month == $@end_month
+ || !($@reward_start_month == $@end_month)))
+ || ($@month < $@end_month && $@month > $@reward_start_month))
+ goto L_RewardTime;
+ if(($@month >= $@start_month) || ($@month <= $@end_month && $@day <= $@reward_start_day))
+ goto L_EventTime;
+ goto L_NoEventTime;
+
+L_NoEventTime:
+ $@event_time = 0;
+ return;
+
+L_EventTime:
+ $@event_time = 1;
+ return;
+
+L_RewardTime:
+ $@event_time = 2;
+ return;
+}
diff --git a/npc/annuals/fathertime.txt b/npc/annuals/fathertime.txt
new file mode 100755
index 00000000..e2760d49
--- /dev/null
+++ b/npc/annuals/fathertime.txt
@@ -0,0 +1,15 @@
+017-9,26,28,0 script #HolidayConfig NPC32767,{
+ end;
+
+OnInit:
+ if (debug >= 2) end;
+ donpcevent strnpcinfo(0) + "::OnTimer20000";
+ end;
+
+OnTimer20000:
+ donpcevent "#XmasConfig::OnCommandRestartQuest";
+ donpcevent "#HalloweenConfig::OnCommandRestartQuest";
+ donpcevent "Easter Eggs::OnCheckEaster";
+ initnpctimer;
+ end;
+}
diff --git a/npc/annuals/halloween/config.txt b/npc/annuals/halloween/config.txt
new file mode 100755
index 00000000..ddbc7971
--- /dev/null
+++ b/npc/annuals/halloween/config.txt
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+- script #HalloweenConfig NPC32767,{
+ end;
+
+OnCommandRestartQuest:
+ goto L_Main;
+
+OnInit:
+ goto L_Main;
+
+L_Main:
+ // Halloween Key Identifier Set through Botcheck Debug
+ if(!($HALLOWEEN_TIME_KEY) || (getarraysize($HALLOWEEN_TIME_KEY) != 6))
+ setarray $HALLOWEEN_TIME_KEY, 10,10,11,24,2,gettime(7);
+ if(($HALLOWEEN_TIME_KEY[0] == 0) || ($HALLOWEEN_TIME_KEY[0] > 12))
+ goto L_HalloweenError;
+ if(($HALLOWEEN_TIME_KEY[1] == 0) || ($HALLOWEEN_TIME_KEY[1] > 12))
+ goto L_HalloweenError;
+ if(($HALLOWEEN_TIME_KEY[2] == 0) || ($HALLOWEEN_TIME_KEY[2] > 12))
+ goto L_HalloweenError;
+ if(($HALLOWEEN_TIME_KEY[3] == 0) || ($HALLOWEEN_TIME_KEY[3] > 31))
+ goto L_HalloweenError;
+ if(($HALLOWEEN_TIME_KEY[4] == 0) || ($HALLOWEEN_TIME_KEY[4] > 31))
+ goto L_HalloweenError;
+ if($HALLOWEEN_TIME_KEY[5] == 0)
+ goto L_HalloweenError;
+
+ // Event Runs until Reward Period.
+ // Month Start/End
+ $@halloween_start_month = $HALLOWEEN_TIME_KEY[0];
+ $@halloween_reward_start_month = $HALLOWEEN_TIME_KEY[1];
+ $@halloween_end_month = $HALLOWEEN_TIME_KEY[2];
+
+ // Reward Day Start/End
+ $@halloween_reward_start_day = $HALLOWEEN_TIME_KEY[3];
+ $@halloween_reward_end_day = $HALLOWEEN_TIME_KEY[4];
+
+ // Time Settings
+ $@halloween_no_event_time = 0;
+ $@halloween_event_time = 1;
+ $@halloween_reward_time = 2;
+
+ // How many, maximum is 8
+ $@halloween_memory_count = 8;
+ // Level to go trick-or-treating
+ $@halloween_min_level = 10;
+
+ // Number of trick and treats completed to get charm.
+ $@halloween_charm_count = 10;
+ $@halloween_got_charm_reward = (1 << 17);
+ setarray $@halloween_big_reward, 905, 1175;
+ $@halloween_got_big_reward = (1 << 16);
+ setarray $@halloween_sweets,
+ 534, // OrangeCupcake
+ 737, // ChocolateCake
+ 510, // Candy
+ 513, // Cake
+ 509, // ChocolateBar
+ 519, // CherryCake
+ 736, // WhiteCake
+ 738, // OrangeCake
+ 739, // AppleCake
+ 3006, // TonoriDelight
+ 3007, // Marshmallow
+ 3009, // JellySkull
+ 3010, // CandyPumpkin
+ 838, // CranberryLollipop
+ 839, // GrapeLollipop
+ 840; // OrangeLollipop
+ $@halloween_sweets_num = getarraysize($@halloween_sweets);
+
+ setarray $@halloween_mask_IDs, 678, 679, 1221, 634, 615, 639, 769, 801, 1218, 1276, 1277, 1279, 4027;
+ setarray $@halloween_scare_factors, 2, 4, 4, 4, 2, 3, 2, 2, 1, 3, 2, 4, 4;
+
+ if (getarraysize($@halloween_mask_IDs) != getarraysize($@halloween_scare_factors))
+ goto L_HalloweenError;
+ // temporary counter
+ $@n = 0;
+
+ $@halloween_npc_caretaker = $@n;
+ $@halloween_npc_names$[$@n] = "[Caretaker]";
+ $@halloween_greetings$[$@n] = "\"Alright, come on then. Show me your trick.\"";
+ $@halloween_trick_notscary$[$@n] = "Trick? You must have misheard me. I've come because the Government needs to build a road through your house.";
+ $@halloween_react_notscary$[$@n] = "\"And?\"";
+ $@halloween_trick_scary$[$@n] = "You look pretty deceased to me, old man. Undead must die! Yaah!";
+ $@halloween_react_scary$[$@n] = "\"Now listen here, I'm as alive as you - oh. Say, that was a good trick!\"";
+ $@halloween_trick_veryscary$[$@n] = "Your wife... she's - she's - she's DEAD!";
+ $@halloween_react_veryscary$[$@n] = "\"But... I live here! My wife l... is dead here. You can't - oh. I DIDN'T mishear you. You really had me fooled!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_eurni = $@n;
+ $@halloween_npc_names$[$@n] = "[Eurni the Surgeon]";
+ $@halloween_greetings$[$@n] = "\"Oh, right.\"";
+ $@halloween_trick_notscary$[$@n] = "I paid good money for your services, and when I get home I find that now I'm not a man OR a woman...";
+ $@halloween_react_notscary$[$@n] = "\"Heheh, sucks, buddy. But there's always a risk.\"";
+ $@halloween_trick_scary$[$@n] = "Look out! A scorpion!";
+ $@halloween_react_scary$[$@n] = "\"Where? Darn things, I think they're what keep scaring away my customers.\"";
+ $@halloween_trick_veryscary$[$@n] = "I know about your hobby of performing numerous Sex changes on yourself.";
+ $@halloween_react_veryscary$[$@n] = "\"Shut up! Look, will you hold your tongue if I give you more treats...?\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_george = $@n;
+ $@halloween_npc_names$[$@n] = "[George the Pirate]";
+ $@halloween_greetings$[$@n] = "\"Shiver me timbers! What do ye mean?\"";
+ $@halloween_trick_notscary$[$@n] = "Well... I do a trick, and then... you give me a treat...";
+ $@halloween_react_notscary$[$@n] = "\"Arrrrh, I knew what ye meant, to be sure! I were just kidding with ye, pretending to be a crazy old pirate! Arrrrh!\"";
+ $@halloween_trick_scary$[$@n] = "Your eyepatch is on the wrong eye!";
+ $@halloween_react_scary$[$@n] = "\"Arrrrh, so it is! Ta for pointing it out, mate - wait, no it isn't! Harhar, what a good trick!\"";
+ $@halloween_trick_veryscary$[$@n] = "By the powers, ye're a daft landlubber to be sure, ye barnacle-ridden swab!";
+ $@halloween_react_veryscary$[$@n] = "\"Arrrrh, ye scurvy dog! I'm sure my first mate will return with the ship eventually.\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_inac = $@n;
+ $@halloween_npc_names$[$@n] = "[Inac]";
+ $@halloween_greetings$[$@n] = "\"Oh, yes?\"";
+ $@halloween_trick_notscary$[$@n] = "Yes, we monsters moved into the tunnels... and now we're coming out... for revenge!";
+ $@halloween_react_notscary$[$@n] = "\"Haha! That's the worse trick I've seen today.\"";
+ $@halloween_trick_scary$[$@n] = "One of those monsters you mentioned is crawling out of the well!";
+ $@halloween_react_scary$[$@n] = "\"He IS? Where!? Aah! Oh. You were just tricking, right? Hahaha, that was good, I really believed you.\"";
+ $@halloween_trick_veryscary$[$@n] = "Yeah, but it's all fossil water. One day it's gonna dry up!";
+ $@halloween_react_veryscary$[$@n] = "\"Fossil water? You mean it's turned to STONE? But you can't drink - oh... you were just tricking, right? You WEREN'T? Aaaah!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_kfahr = $@n;
+ $@halloween_npc_names$[$@n] = "[Kfahr the Warrior]";
+ $@halloween_greetings$[$@n] = "\"Ah, yes!\" He rubs his hands. \"Trick away, then!\"";
+ $@halloween_trick_notscary$[$@n] = "Meh... I'm only trick-or-treating you to avoid listening to your BORING stories.";
+ $@halloween_react_notscary$[$@n] = "\"Boring?\" He grins. \"You must be mistaking me for someone else.\"";
+ $@halloween_trick_scary$[$@n] = "Did you hear the bad news already? They made up a law prohibiting to serve alcoholic drinks! That means no more beer!";
+ $@halloween_react_scary$[$@n] = "\"What? But- but- why do they- oh, you tricked me. I was about to really get worried for a moment.\"";
+ $@halloween_trick_veryscary$[$@n] = "Have you heard? Tulimshar was destroyed by a giant Desert Worm!";
+ $@halloween_react_veryscary$[$@n] = "\"What!?\" Kfahr stares. \"And no one called for me? This is appalling! But - what? That was your trick? Hm, nice one. You almost had me fooled!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_nurse = $@n;
+ $@halloween_npc_names$[$@n] = "[Nurse]";
+ $@halloween_greetings$[$@n] = "\"I don't know why I let the Mayor trick me into this... well, go on then.\"";
+ $@halloween_trick_notscary$[$@n] = "I ate too much Hallowe'en candy, now I'm sick!";
+ $@halloween_react_notscary$[$@n] = "\"Well, no one's to blame but yourself, you know. Just make sure you don't eat any more.\"";
+ $@halloween_trick_scary$[$@n] = "Hurnscald has been struck by plague! You must come and tend to the dying!";
+ $@halloween_react_scary$[$@n] = "\"But I don't know how to deal with plague! Oh no! You must get the Doctor! Unless... you were just tricking me! Whew, that's a relief!\"";
+ $@halloween_trick_veryscary$[$@n] = "The Doctor asked me to tell you that he doesn't want to see you any more.";
+ $@halloween_react_veryscary$[$@n] = "\"What? But we were getting it on so well. I mean, getting on so well! Oh... that was your trick! Dear me, I believed you!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_pachua = $@n;
+ $@halloween_npc_names$[$@n] = "[Chief Pachua]";
+ $@halloween_greetings$[$@n] = "\"Ah, the strange custom the Government man told me about.\"";
+ $@halloween_trick_notscary$[$@n] = "Look out! A scorpion!";
+ $@halloween_react_notscary$[$@n] = "\"Don't mind him, he won't hurt you. Er... so I give you sweets now, or what?\"";
+ $@halloween_trick_scary$[$@n] = "Yes, the ritual giving of treats... LOTS of treats... or else!";
+ $@halloween_react_scary$[$@n] = "\"Alright, here you go.\"";
+ $@halloween_trick_veryscary$[$@n] = "Yes, the ritual giving of treats followed by the sacrifice of the treat-giver...";
+ $@halloween_react_veryscary$[$@n] = "\"I do like a good sacrifice, but less so if it's me! I'll give you extra sweets if you forget the sacrifice.\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_yanis = $@n;
+ $@halloween_npc_names$[$@n] = "[Yanis]";
+ $@halloween_greetings$[$@n] = "\"I am employed by the Tonori Government, make sure you abide the regulations we wrote down for Trick-or-Treaters this year...\"";
+ $@halloween_trick_notscary$[$@n] = "Of course I will... not!";
+ $@halloween_react_notscary$[$@n] = "\"Hm!\"";
+ $@halloween_trick_scary$[$@n] = "Regulations, smegulations. The Tonori Government can go suck a lollipop for all I care!";
+ $@halloween_react_scary$[$@n] = "\"!? How dare you - oh, that was your trick! You did have me worried for a moment...\"";
+ $@halloween_trick_veryscary$[$@n] = "What regulations?";
+ $@halloween_react_veryscary$[$@n] = "\"You mean you haven't even READ - I don't believe - this is ghastly - I - oh... that was your trick... gosh, I believed you for a minute! I thought you really hadn't read them!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_vincent = $@n;
+ $@halloween_npc_names$[$@n] = "[Vincent]";
+ $@halloween_greetings$[$@n] = "\"Ooh, okay! Trick away!\"";
+ $@halloween_trick_notscary$[$@n] = "Look out! A scorpion!";
+ $@halloween_react_notscary$[$@n] = "\"They're everywhere in this desert! Don't worry about them.\"";
+ $@halloween_trick_scary$[$@n] = "Hey, that action figure you're building just CAME TO LIFE!";
+ $@halloween_react_scary$[$@n] = "\"Really? Cool! Where? What? You were tricking me? WAAAH!\"";
+ $@halloween_trick_veryscary$[$@n] = "Wow, this is a neat action figure! Haha, check out its moves! Oops! Never mind, I'm sure it'll glue back on.";
+ $@halloween_react_veryscary$[$@n] = "\"My Bug Leg action figure! You broke it!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_weellos = $@n;
+ $@halloween_npc_names$[$@n] = "[Weellos]";
+ $@halloween_greetings$[$@n] = "\"Trick me, then!\"";
+ $@halloween_trick_notscary$[$@n] = "Look out! A scorpion!";
+ $@halloween_react_notscary$[$@n] = "\"Pesky things, I know, but they're everywhere around here...\"";
+ $@halloween_trick_scary$[$@n] = "Actually, it's a fake. It was built just ten years ago.";
+ $@halloween_react_scary$[$@n] = "\"No! But I've read all the accounts... oh, haha! Very funny!\"";
+ $@halloween_trick_veryscary$[$@n] = "They say the earthquake ruined the foundations of this building, and that it's going to fall down.";
+ $@halloween_react_veryscary$[$@n] = "\"B-but it's one of the oldest buildings around! And... wait, I just remembered that it was designed to be earthquake-proof. You were tricking me!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_zack = $@n;
+ $@halloween_npc_names$[$@n] = "[Zack]";
+ $@halloween_greetings$[$@n] = "\"I thought no one would find me down here, but I'm glad I was wrong! Let's see your trick, then.\"";
+ $@halloween_trick_notscary$[$@n] = "You think this is something to do with Hallowe'en? Hands up!";
+ $@halloween_react_notscary$[$@n] = "\"Heh... That was ok.\"";
+ $@halloween_trick_scary$[$@n] = "And now that I've found you, you die!";
+ $@halloween_react_scary$[$@n] = "\"Aah! What did I do? Oh - wait - I see! That was a good one!\"";
+ $@halloween_trick_veryscary$[$@n] = "Yes, I have found you. After all these years.";
+ $@halloween_react_veryscary$[$@n] = "\"Uncle Henry? But how, I covered my tracks so well! I never told anyone that - wait... that was your trick! You had me worried for a minute!\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_kimarr = $@n;
+ $@halloween_npc_names$[$@n] = "[Kimarr]";
+ $@halloween_greetings$[$@n] = "\"Many have tried to scare me, all have failed. Try your best, but the frozen wastes contain all manner of horrors.\"";
+ $@halloween_trick_notscary$[$@n] = "Look out Yetis!";
+ $@halloween_react_notscary$[$@n] = "\"You will have to do better then that.\"";
+ $@halloween_trick_scary$[$@n] = "Hrmm Is that your wife calling you?";
+ $@halloween_react_scary$[$@n] = "\"What? You haven't se... wait a second. Ok that was good.\"";
+ $@halloween_trick_veryscary$[$@n] = "The Kaizeian government declared fluffies an endangered species.";
+ $@halloween_react_veryscary$[$@n] = "\"NOooOOOooo!!! The Hunt!!! ... wait a second, you city folk are slick.\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_nikolai = $@n;
+ $@halloween_npc_names$[$@n] = "[Nikolai]";
+ $@halloween_greetings$[$@n] = "\"Let us see if you are scarier then Kfahr's Fairy Tales.\"";
+ $@halloween_trick_notscary$[$@n] = "Your going over their to the store.";
+ $@halloween_react_notscary$[$@n] = "\"*You're* *there* Ugh, thats more annoying then scary.\"";
+ $@halloween_trick_scary$[$@n] = "Whats White, Blue and slimey? I don't know either but it's right behind you.";
+ $@halloween_react_scary$[$@n] = "\"More Slimes, Oh no the books again. O you tricked me, good one.\"";
+ $@halloween_trick_veryscary$[$@n] = "I hope you don't mind I used some of this kindling you have on the shelves to start a fire.";
+ $@halloween_react_veryscary$[$@n] = "\"AHHHHH!!!! You burned our books!!! *GAH* ... *Eye Twitch*\"";
+
+ $@n = $@n + 1;
+
+ $@halloween_npc_vellamo = $@n;
+ $@halloween_npc_names$[$@n] = "[Vellamo]";
+ $@halloween_greetings$[$@n] = "\"Ahh yes, more candy related ritual.\"";
+ $@halloween_trick_notscary$[$@n] = "Candy? No, I want Parsley.";
+ $@halloween_react_notscary$[$@n] = "\"Parsley? is this some kind of monster? I'm not getting this scare at all\"";
+ $@halloween_trick_scary$[$@n] = "Chief Warrick says he needs the candy inventory by end of day.";
+ $@halloween_react_scary$[$@n] = "\"Ahh, no! I forgot to put a cover sheet on my Candy Production and Storage report.\"";
+ $@halloween_trick_veryscary$[$@n] = "I'm sorry, but your doctor says your diabetic.";
+ $@halloween_react_veryscary$[$@n] = "\"Darkest day of my life, blacker then the darkest chocolate.\"";
+
+ $@halloween_num_npcs = $@n + 1;
+ $@halloween_all_npc_bits = -1 << (32 - $@halloween_num_npcs);
+
+ $@n = 0;
+
+ // Age to go trick-or-treating (1 week before the start)
+ if ((gettime(6) >= $@halloween_start_month) || (gettime(6) <= $@halloween_end_month))
+ $@halloween_min_age = ((gettime(5) + 7)*86400);
+ if (gettime(6) == $@halloween_reward_start_month)
+ $@halloween_min_age = ((gettime(5) + 38)*86400);
+
+ $@start_month = $@halloween_start_month;
+ $@end_month = $@halloween_end_month;
+ $@start_day = 1;
+ $@end_day = $@halloween_reward_end_day;
+ $@reward_start_month = $@halloween_reward_start_month;
+ $@reward_start_day = $@halloween_reward_start_day;
+
+ callfunc "GetEventTime";
+ $@halloween_time = $@event_time;
+
+ if($@halloween_time == 0 && $HALLOWEEN_TIME_KEY[5] < gettime(7))
+ setarray $HALLOWEEN_TIME_KEY, $HALLOWEEN_TIME_KEY[0],$HALLOWEEN_TIME_KEY[1],$HALLOWEEN_TIME_KEY[2],$HALLOWEEN_TIME_KEY[3],$HALLOWEEN_TIME_KEY[4],gettime(7);
+ goto L_Return;
+
+L_Return:
+ callfunc "SpawnMunro";
+ callfunc "ReplaceTrees";
+ end;
+
+L_HalloweenError:
+ debugmes "Halloween is Dead Jim.";
+ mapexit;
+}
diff --git a/npc/annuals/halloween/debug.txt b/npc/annuals/halloween/debug.txt
new file mode 100755
index 00000000..9d7e3650
--- /dev/null
+++ b/npc/annuals/halloween/debug.txt
@@ -0,0 +1,138 @@
+
+function script HalloweenDebug {
+ if(debug)
+ goto L_Debug;
+ goto L_Live;
+
+L_Live:
+ menu
+ "Debug Time", L_DebugTime,
+ "Set Old Event Flag.", L_LastReset,
+ "Halloween Time Key Change.", L_HalloweenTimeKey,
+ "Reset NPC's mask memory", L_ResetMask,
+ "Nothing.", L_close;
+
+L_Debug:
+ menu
+ "Debug Time", L_DebugTime,
+ "Set Old Event Flag.", L_LastReset,
+ "Halloween Time Key Change.", L_HalloweenTimeKey,
+ "Quest State", L_QuestState,
+ "Set NPC trick or treat flag", L_SetTrickOrTreats,
+ "Reset my quest state", L_ResetMe,
+ "Reset NPC's mask memory", L_ResetMask,
+ "Nothing.", L_close;
+
+L_DebugTime:
+ mes "--Sever--";
+ mes "Event State: " + $@halloween_time;
+ mes "Event Start" + $HALLOWEEN_TIME_KEY[0] + "/1";
+ mes "Reward Start: " + $HALLOWEEN_TIME_KEY[1] + "/" + $HALLOWEEN_TIME_KEY[3];
+ mes "Event End: " + $HALLOWEEN_TIME_KEY[2] + "/" + $HALLOWEEN_TIME_KEY[4];
+ mes "Event Time Key (year (CCYY)): " + $HALLOWEEN_TIME_KEY[5];
+ next;
+ goto L_Debug;
+
+L_LastReset:
+ HALLOWEENTIME = 255;
+ HALLOWEENYEAR = 2012;
+ goto L_Debug;
+
+L_HalloweenTimeKey:
+ mes "Halloween Time Key Change.";
+ mes "Start Month?";
+ input @halloween_time_key_smonth;
+ if((@halloween_time_key_smonth == 0) || (@halloween_time_key_smonth > 12))
+ goto L_HalloweenError;
+ mes "Reward Start Month?";
+ input @halloween_time_key_srmonth;
+ if((@halloween_time_key_srmonth == 0) || (@halloween_time_key_srmonth > 12))
+ goto L_HalloweenError;
+ mes "End Month?";
+ input @halloween_time_key_emonth;
+ if((@halloween_time_key_emonth == 0) || (@halloween_time_key_emonth > 12))
+ goto L_HalloweenError;
+ mes "Reward Start Day?";
+ input @halloween_time_key_rsday;
+ if((@halloween_time_key_rsday == 0) || (@halloween_time_key_rsday > 31))
+ goto L_HalloweenError;
+ mes "Reward End Day?";
+ input @halloween_time_key_reday;
+ if((@halloween_time_key_reday == 0) || (@halloween_time_key_reday > 31))
+ goto L_HalloweenError;
+ mes "Time Key (CCYY) ";
+ input @halloween_time_key_year;
+ goto L_SetNewKey;
+
+L_HalloweenError:
+ mes "Incorrect Entry. Try again.";
+ next;
+ goto L_Debug;
+
+L_SetNewKey:
+ setarray $HALLOWEEN_TIME_KEY, @halloween_time_key_smonth, @halloween_time_key_srmonth, @halloween_time_key_emonth, @halloween_time_key_rsday, @halloween_time_key_reday, @halloween_time_key_year;
+ donpcevent "#HalloweenConfig::OnCommandRestartQuest";
+ goto L_Debug;
+
+L_QuestState:
+ mes "Karma: " + (HALLOWEENTIME & 65535);
+ @big_reward_status$ = " No.";
+ if (HALLOWEENTIME & $@halloween_got_big_reward)
+ @big_reward_status$ = " Yes.";
+ mes "Big Reward: " + @big_reward_status$;
+ @charm_reward_status$ = " No.";
+ if (HALLOWEENTIME & $@halloween_got_charm_reward)
+ @charm_reward_status$ = " Yes.";
+ mes "Charm Reward:" + @charm_reward_status$;
+ @npc_check_loop = 0;
+ goto L_NpcCheckLoop;
+
+L_NpcCheckLoop:
+ @display_mes$ = "NPC ID " + @npc_check_loop + ":" + $@halloween_npc_names$[@npc_check_loop];
+ @npc_status$ = " Needed";
+ if (HALLOWEENTIME & (1 << (31 - @npc_check_loop)))
+ @npc_status$ = " Complete";
+ @display_mes$ = @display_mes$ + @npc_status$;
+ mes @display_mes$;
+ @display_mes$ = "";
+ goto L_NpcCheckInc;
+
+L_NpcCheckInc:
+ @npc_check_loop = (@npc_check_loop + 1);
+ if (@npc_check_loop >= getarraysize($@halloween_npc_names$))
+ goto L_TrickOrTreatCount;
+ goto L_NpcCheckLoop;
+
+L_TrickOrTreatCount:
+ callfunc "TrickOrTreatTally";
+ mes @npc_tally + " out of 14";
+ next;
+ goto L_Debug;
+
+L_SetTrickOrTreats:
+ mes "Enter NPC to set";
+ input @halloween_npc_id;
+ HALLOWEENTIME = HALLOWEENTIME | (1 << (31 - @halloween_npc_id));
+ goto L_Debug;
+
+L_ResetMe:
+ HALLOWEENTIME = 0;
+ HALLOWEENYEAR = $HALLOWEEN_TIME_KEY[5];
+ goto L_Debug;
+
+L_ResetMask:
+ mes "Enter NPC to reset:";
+ input @halloween_npc_id;
+ $@halloween_maskmemory[8 * @halloween_npc_id] = 0;
+ goto L_Debug;
+
+L_close:
+ @tmp = 0;
+ @Mask = 0;
+ @karma = 0;
+ @loop = 0;
+ @menu = 0;
+ @halloween_npc_id = 0;
+ close2;
+ return;
+}
diff --git a/npc/annuals/halloween/munro.txt b/npc/annuals/halloween/munro.txt
new file mode 100755
index 00000000..93d01764
--- /dev/null
+++ b/npc/annuals/halloween/munro.txt
@@ -0,0 +1,46 @@
+026-1,24,37,0 script Munro NPC183,{
+ callfunc "HalloweenCheckOld";
+ callfunc "TrickOrTreatTally";
+ if (($@halloween_time == $@halloween_reward_time) && (@npc_tally >= $@halloween_charm_count) && !(HALLOWEENTIME & $@halloween_got_charm_reward))
+ goto L_Halloween;
+ goto L_NoReward;
+
+L_NoReward:
+ mes "[Munro]";
+ mes "\"Greetings mortal.\"";
+ next;
+ mes "\"Once again we come to that time of year when the veil is thin\"";
+ next;
+ mes "\"All those who have passed on can part the veil to return.\"";
+ next;
+ mes "\"A time to celebrate our ancestors and chase evil away.\"";
+ next;
+ mes "\"Celebrate the holiday with me and I will reward you later.\"";
+ goto L_Exit;
+
+L_Halloween:
+ mes "[Munro]";
+ mes "\"You have shown to have the Halloween spirit. Take this charm.\"";
+ HALLOWEENTIME = HALLOWEENTIME | $@halloween_got_charm_reward;
+ getitem "SkeletonCharm",1;
+ goto L_Exit;
+
+L_Exit:
+ close;
+}
+function script SpawnMunro {
+ if ($@halloween_time)
+ goto L_EnableMunro;
+ goto L_DisableMunro;
+
+L_EnableMunro:
+ enablenpc "Munro";
+ goto L_Return;
+
+L_DisableMunro:
+ disablenpc "Munro";
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/npc/annuals/halloween/trick_or_treat.txt b/npc/annuals/halloween/trick_or_treat.txt
new file mode 100755
index 00000000..fa4eb6f4
--- /dev/null
+++ b/npc/annuals/halloween/trick_or_treat.txt
@@ -0,0 +1,322 @@
+function script TrickOrTreat {
+ callfunc "HalloweenCheckOld";
+ if ($@halloween_time)
+ goto L_Halloween;
+ goto L_QuickReturn;
+
+L_Halloween:
+ if ((gettimetick(2)-TUT_var < $@halloween_min_age) || (BaseLevel < $@halloween_min_level)) //player must be created at least 1 weeks ago
+ goto L_QuickReturn;
+ menu
+ "Trick or Treat", L_HWQuest,
+ "[Go to normal NPC dialog]", L_QuickReturn;
+
+L_HWQuest:
+ @Mask = getequipid(equip_head);
+ goto L_Begin;
+
+L_Begin:
+ @karma = (HALLOWEENTIME & 65535);
+ if (@Mask > 0)
+ goto L_WearingMask;
+ goto L_NoMask;
+
+L_WearingMask:
+ // set the scare factor of the equipped mask
+ @Mask_index = 0;
+ @scare_factor = 1;
+ goto L_MaskLoop;
+
+L_MaskLoop:
+ if ($@halloween_mask_IDs[@Mask_index] == @Mask)
+ goto L_FoundMask;
+ @Mask_index = @Mask_index + 1;
+ if ($@halloween_mask_IDs[@Mask_index])
+ goto L_MaskLoop;
+ // not a mask in the list
+ @Mask = 0;
+ goto L_MaskDone;
+
+L_FoundMask:
+ @scare_factor = $@halloween_scare_factors[@Mask_index];
+ if (@Mask != 616)
+ goto L_MaskDone;
+ mes "\"Aaargh... Gross! This is sick! I can't even look at your face...\"";
+ goto L_MaskDone;
+
+L_MaskDone:
+ @Mask_index = 0;
+ // check if the mask is in the memory
+ @loop = 0;
+ // Note: we don't handle remembered faces until they get their candy
+ if (!@Mask)
+ goto L_MaskMemoryNo;
+ // check if the mask is remembered
+ goto L_MaskMemoryCheck;
+
+L_MaskMemoryCheck:
+ @tmp = $@halloween_maskmemory[8 * @halloween_npc_id + @loop];
+ if (!@tmp)
+ goto L_MaskMemoryNo;
+ if (@tmp == @Mask)
+ goto L_MaskMemoryYes;
+ @loop = @loop + 1;
+ if (@loop != $@halloween_memory_count)
+ goto L_MaskMemoryCheck;
+ goto L_MaskMemoryNo;
+
+L_MaskMemoryYes:
+ // not necessarily true
+ mes "\"I remember you, " + getitemlink(getequipid(equip_head)) + " person. No more treats for you!\"";
+ goto L_close;
+
+L_MaskMemoryNo:
+ // player will probably get treats
+ @loop = 0;
+ @sweets_types = 0;
+ goto L_Count_Sweets;
+
+L_Count_Sweets:
+ if ($@halloween_sweets[@loop] == 0)
+ goto L_Check_Inventory;
+ if (countitem($@halloween_sweets[@loop]))
+ @sweets_types = @sweets_types + 1;
+ @loop = @loop + 1;
+ goto L_Count_Sweets;
+
+L_Check_Inventory:
+ getinventorylist;
+ if (@inventorylist_count + (@loop - @halloween_invy) > 100)
+ goto L_Full_Inventory;
+ if (@Mask)
+ goto L_Check_Karma;
+ // check if the player's face is remembered
+ if (HALLOWEENTIME & (1 << (31 - @halloween_npc_id)))
+ goto L_Remember_Face;
+ goto L_Tricking_Trick_or_Treat;
+
+L_Check_Karma:
+ // NPC Cheater detection starts after max NPCs hit
+ if (rand($@halloween_num_npcs, 65535) <= @karma)
+ goto L_Cheater;
+ // NPC Cheater detection engages at 48 Trick or Treats
+ if (@karma >= 48)
+ goto L_Cheater;
+ if (HALLOWEENTIME & $@halloween_got_big_reward)
+ goto L_Tricking_Trick_or_Treat;
+ // assert: @karma < $@halloween_num_npcs
+ if (rand($@halloween_num_npcs - @karma))
+ goto L_Tricking_Trick_or_Treat;
+ mes "\"All this candy isn't healthy, here take this to have a break from it.\"";
+ getitem $@halloween_big_reward[rand(getarraysize($@halloween_big_reward))], 1;
+ HALLOWEENTIME = HALLOWEENTIME | $@halloween_got_big_reward;
+ // you get the big reward first, then the main treats
+ // otherwise it would be too complicated, and/or possibly unfair
+ goto L_Tricking_Trick_or_Treat;
+
+L_Cheater:
+ mes "\"I recognize you despite your mask, you have been taking sweets you do not deserve.\"";
+ if (@karma != 65535)
+ HALLOWEENTIME = HALLOWEENTIME + 1;
+ goto L_close;
+
+L_Remember_Face:
+ // mes "You've been here before; I remember your face";
+ mes "\"I remember your face, " + strcharinfo(0) + ". No more treats for you!\"";
+ goto L_close;
+
+L_Tricking_Trick_or_Treat:
+ // moved above
+ mes $@halloween_npc_names$[@halloween_npc_id];
+ mes $@halloween_greetings$[@halloween_npc_id];
+ next;
+ // TODO: should we randomize these? (in a subsequent commit)
+ menu
+ $@halloween_trick_notscary$[@halloween_npc_id], L_Tricking_Notscary,
+ $@halloween_trick_scary$[@halloween_npc_id], L_Tricking_Scary,
+ $@halloween_trick_veryscary$[@halloween_npc_id], L_Tricking_Veryscary;
+
+L_Tricking_Notscary:
+ mes $@halloween_npc_names$[@halloween_npc_id];
+ mes $@halloween_react_notscary$[@halloween_npc_id];
+ goto L_Tricking_Reward;
+
+L_Tricking_Scary:
+ mes $@halloween_npc_names$[@halloween_npc_id];
+ mes $@halloween_react_scary$[@halloween_npc_id];
+ @scare_factor = @scare_factor * 2;
+ goto L_Tricking_Reward;
+
+L_Tricking_Veryscary:
+ mes $@halloween_npc_names$[@halloween_npc_id];
+ mes $@halloween_react_veryscary$[@halloween_npc_id];
+ @scare_factor = @scare_factor * 3;
+ goto L_Tricking_Reward;
+
+L_Tricking_Reward:
+ next;
+ if (@karma >= 16)
+ @scare_factor = rand(@scare_factor / 2, @scare_factor);
+ if (@karma >= 24)
+ @scare_factor = rand(@scare_factor / 3, @scare_factor);
+ if (@scare_factor < 1)
+ @scare_factor = 1;
+ goto L_Tricking_Reward_Loop;
+
+L_Tricking_Reward_Loop:
+ @random = rand($@halloween_sweets_num);
+ setarray @getitem_ids, $@halloween_sweets[@random];
+ setarray @getitem_counts, 1;
+ callfunc "CheckInventory";
+ if (@check_fail)
+ @scare_factor = 0;
+ if (!@scare_factor)
+ goto L_Tricking_End;
+ // NOTE: it gives out one piece at a time, but can loop several times
+ getitem $@halloween_sweets[@random], 1;
+ @scare_factor = @scare_factor - 1;
+ goto L_Tricking_Reward_Loop;
+
+L_SetRememberFace:
+ HALLOWEENTIME = HALLOWEENTIME | (1 << (31 - @halloween_npc_id));
+ goto L_close;
+
+L_Tricking_End:
+ mes $@halloween_npc_names$[@halloween_npc_id];
+ mes "\"That should be enough sweets for you. Thanks for participating!\"";
+ if (!@Mask)
+ goto L_SetRememberFace;
+ // add the player's mask to the list
+ @loop = 7;
+ goto L_SetRememberMask;
+
+L_SetRememberMask:
+ $@halloween_maskmemory[8 * @halloween_npc_id + @loop] = $@halloween_maskmemory[8 * @halloween_npc_id + @loop - 1];
+ @loop = @loop - 1;
+ if (@loop)
+ goto L_SetRememberMask;
+ $@halloween_maskmemory[8 * @halloween_npc_id] = @Mask;
+ HALLOWEENTIME = HALLOWEENTIME + 1;
+ goto L_close;
+
+L_Full_Inventory:
+ mes $@halloween_npc_names$[@halloween_npc_id];
+ mes "\"You are trying to collect candy but you have no space to carry all the kinds of stuff that I have to offer! Please, save room for more stuff and come back.\"";
+ goto L_close;
+
+L_NoMask:
+ mes $@halloween_npc_names$[@halloween_npc_id];
+ mes "\"Hey " + strcharinfo(0) + ", are you trying to scare me with your face? Interesting! hahaha...\"";
+ goto L_close;
+
+L_close:
+ @tmp = 0;
+ @Mask = 0;
+ @karma = 0;
+ @loop = 0;
+ @menu = 0;
+ @halloween_npc_id = 0;
+ return;
+
+L_QuickReturn:
+ @halloween_npc_id = 0;
+ return;
+}
+function script TrickOrTreatTally {
+ @npc_loop = 0;
+ @npc_tally = 0;
+ goto L_LoopCheck;
+
+L_LoopCheck:
+ if (HALLOWEENTIME & (1 << (31 - @npc_loop)))
+ @npc_tally = (@npc_tally + 1);
+ goto L_IncLoop;
+
+L_IncLoop:
+ @npc_loop = (@npc_loop + 1);
+ if (@npc_loop >= 15)
+ goto L_Return;
+ goto L_LoopCheck;
+
+L_Return:
+ return;
+}
+function script HalloweenCheckOld {
+ if(HALLOWEENYEAR == $HALLOWEEN_TIME_KEY[5])
+ goto L_Return;
+ goto L_OldMatch;
+
+L_OldMatch:
+ HALLOWEENTIME = 0;
+ HALLOWEENYEAR = $HALLOWEEN_TIME_KEY[5];
+ goto L_Return;
+
+L_Return:
+ return;
+}
+function script HalloweenTree {
+ mes "[Confused Tree]";
+ if ((HALLOWEENTIME & 65535) > ($@halloween_num_npcs * 3))
+ mes "\"Whoa slow down greedy, leave some candy for the reset of us!\"";
+ if ((HALLOWEENTIME & 65535) > $@halloween_num_npcs)
+ mes "\"I see you have ben enjoying trick or treating, I hope you don't get a stomach ache.\"";
+ if ((HALLOWEENTIME & 65535) <= $@halloween_num_npcs)
+ mes "\"I love halloween, wearing masks and going trick or treating is so much fun.\"";
+ goto L_StartMenu;
+
+L_StartMenu:
+ menu
+ "Whats Halloween?", L_Explain,
+ "Me too!", L_CheckDressed,
+ "Meh, I like Christmas Better.", L_XmasBetter;
+
+L_Explain:
+ mes "\"I've convinced some people throughout the world to help with trick or treating.\"";
+ next;
+ @npc_check_loop = 0;
+ goto L_NpcCheckLoop;
+
+L_NpcCheckLoop:
+ mes $@halloween_npc_names$[@npc_check_loop];
+ next;
+ goto L_NpcCheckInc;
+
+L_NpcCheckInc:
+ @npc_check_loop = (@npc_check_loop + 1);
+ if (@npc_check_loop >= getarraysize($@halloween_npc_names$))
+ goto L_ContinueExplain;
+ goto L_NpcCheckLoop;
+
+L_ContinueExplain:
+ mes "\"Find each person and put on a mask then try to scare them.\"";
+ next;
+ mes "\"The scarier you are, the more treats you will be awarded.\"";
+ next;
+ mes "\"If you are really scary you could get a rare reward.\"";
+ next;
+ goto L_StartMenu;
+
+L_CheckDressed:
+ @head = getequipid(equip_head);
+ @chest = getequipid(equip_torso);
+ @leg = getequipid(equip_legs);
+ @random_mes$ = "\" I like your costume.\"";
+ if ((@head <= 0) && (@chest <= 0) && (@leg <= 0))
+ @random_mes$ = "\"Birthday Suit, always a classic.\"";
+ if ((@head == 615) && (@chest == 870))
+ @random_mes$ = "\"How embrassing... we are wearing the same costume.\"";
+ if ((@head == 617) || (@head == 622) || (@head == 621))
+ @random_mes$ = "\"Yar, matey I see that.\"";
+ if ((@head == 633) || (@head == 1205) || (@chest == 1183) || (@chest == 1184) || (@chest == 1185) || (@chest == 1186) || (@chest == 1187))
+ @random_mes$ = "\"Your sense of humor offends me, it's way to early for that.\"";
+ mes @random_mes$;
+ goto L_Return;
+
+L_XmasBetter:
+ mes "\"Bah, Humbug, Show your Halloween spirit! OOooooOooo\"";
+ misceffect 302, strcharinfo(0);
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/npc/annuals/tree_beard.txt b/npc/annuals/tree_beard.txt
new file mode 100755
index 00000000..a7866f2b
--- /dev/null
+++ b/npc/annuals/tree_beard.txt
@@ -0,0 +1,121 @@
+020-1,90,78,0 script #GhostTreeOne NPC133,{
+ callfunc "HalloweenTree";
+ close;
+}
+
+020-1,90,78,0 script #Tree NPC380,{
+ end;
+}
+
+020-1,90,78,0 script #XmasTree NPC379,{
+ end;
+}
+
+020-1,90,79,0 script Present#1 NPC386,{
+ callfunc "XmasStates";
+ callfunc "XmasMainItemReward";
+ close;
+}
+
+009-1,54,38,0 script #GhostTreeTwo NPC133,{
+ callfunc "HalloweenTree";
+ close;
+}
+
+009-1,54,38,0 script #TreeNoSnow NPC394,{
+ end;
+}
+
+009-1,54,38,0 script #XmasTreeNoSnow NPC381,{
+ end;
+}
+
+009-1,54,39,0 script Present#2 NPC386,{
+ callfunc "XmasStates";
+ callfunc "XmasMainItemReward";
+ close;
+}
+
+001-1,57,75,0 script #GhostTreeThree NPC133,{
+ callfunc "HalloweenTree";
+ close;
+}
+
+001-1,58,75,0 script #PalmTree NPC384,{
+ end;
+}
+
+001-1,58,76,0 script Present#3 NPC386,{
+ callfunc "XmasStates";
+ callfunc "XmasMainItemReward";
+ close;
+}
+
+001-1,58,75,0 script #XmasPalmTree NPC383,{
+ end;
+}
+
+function script SpawnMobs {
+ donpcevent "XmasSpawnManager::OnCommandSpawnStart";
+ return;
+}
+
+function script PresentHandler {
+ if($@xmas_time == $@xmas_reward_time)
+ goto L_DeliverPresents;
+ goto L_DisablePresents;
+
+L_DeliverPresents:
+ enablenpc "Present#1";
+ enablenpc "Present#2";
+ enablenpc "Present#3";
+ goto L_Return;
+
+L_DisablePresents:
+ disablenpc "Present#1";
+ disablenpc "Present#2";
+ disablenpc "Present#3";
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+function script ReplaceTrees {
+ disablenpc "#Tree";
+ disablenpc "#TreeNoSnow";
+ disablenpc "#PalmTree";
+ disablenpc "#GhostTreeOne";
+ disablenpc "#GhostTreeTwo";
+ disablenpc "#GhostTreeThree";
+ disablenpc "#XmasTree";
+ disablenpc "#XmasTreeNoSnow";
+ disablenpc "#XmasPalmTree";
+
+ if ($@xmas_time)
+ goto L_XmasTree;
+ if ($@halloween_time)
+ goto L_HalloweenLive;
+ goto L_Tree;
+
+L_XmasTree:
+ enablenpc "#XmasTree";
+ enablenpc "#XmasTreeNoSnow";
+ enablenpc "#XmasPalmTree";
+ goto L_Return;
+
+L_HalloweenLive:
+ enablenpc "#GhostTreeOne";
+ enablenpc "#GhostTreeTwo";
+ enablenpc "#GhostTreeThree";
+ goto L_Return;
+
+L_Tree:
+ enablenpc "#Tree";
+ enablenpc "#TreeNoSnow";
+ enablenpc "#PalmTree";
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/npc/annuals/xmas/barriers.txt b/npc/annuals/xmas/barriers.txt
new file mode 100755
index 00000000..fefacc00
--- /dev/null
+++ b/npc/annuals/xmas/barriers.txt
@@ -0,0 +1,155 @@
+
+function script ThrowOutTheBum {
+ @getout = 0;
+ if((@xmas_thrown_out) && ($@xmas_time))
+ goto L_SideOut;
+ goto L_Return;
+
+L_SideOut:
+ if(@xmas_helper_start_state)
+ goto L_Warp;
+ goto L_Hint;
+
+L_Hint:
+ message strcharinfo(0), "I said get out! We've got no time for your kind here.";
+ mes "[Orum's Homunculus]";
+ mes "\"What are you doing? Come, see me in the caves below!\"";
+ mes "\"I said go north till you reach the snowman. Then head into the cave to the east.\"";
+ close2;
+ warp "020-1",33,94;
+ @getout = 1;
+ goto L_Return;
+
+L_Warp:
+ message strcharinfo(0), "I said get out, We've no time for your kind here.";
+ warp "020-1",33,94;
+ @getout = 1;
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+030-2,153,21,0 script #DarkDoor NPC45,0,0,{
+ callfunc "XmasStates";
+
+ if((@xmas_boss_door_state) && ($@xmas_time))
+ goto L_XmasMain;
+ goto L_NotActive;
+
+L_XmasMain:
+ mes "You get the strange sensation that this might go terribly wrong. You had better bring some of your strongest comrades to help you in that case.";
+ mes "Open the warehouse door?";
+ menu
+ "Yes, I feel brave.", L_Open,
+ "No, It's quite nice out here.", L_close;
+
+L_Open:
+ if ($@XmasBattleStatus) goto L_BattleInProgress;
+ warp "030-4",34,48;
+ goto L_close;
+
+L_BattleInProgress:
+ mes "You can hear shouts and screams of despair from behind the door. But trying to open it fails.";
+ next;
+ mes "You will have to wait till someone from the inside opens the door again.";
+ goto L_close;
+
+L_NotActive:
+ message strcharinfo(0), "This door appears locked by magical forces.";
+ end;
+
+L_close:
+ close;
+}
+
+
+030-3,27,24,0 script SmallCrack#XmasPassage NPC400,0,1,{
+ callfunc "XmasStates";
+
+ if((@xmas_basement_passage) && ($@xmas_time))
+ goto L_XmasMain;
+ goto L_NotActive;
+
+L_NotActive:
+ mes "You don't notice anything special.";
+ goto L_close;
+
+L_XmasMain:
+ mes "You notice a small creak in the wall, what do you want to do?";
+ next;
+ goto L_EnterDialogue;
+
+L_EnterDialogue:
+ menu
+ "Nothing.", L_close,
+ "Bang my head against it repeatedly.", L_Tux9th,
+ "Oh, not very much, I do not see anynthing there.", L_close,
+ "Hit it with my strong fist.", L_Enter;
+
+L_Tux9th:
+ heal -20, 0;
+ message strcharinfo(0), "Ouch, that hurt!";
+ setlook LOOK_HAIR_STYLE, rand(20);
+ goto L_Fail;
+
+L_Enter:
+ if (getequipid(equip_hand1) > 0 || getequipid(equip_hand2) > 0) goto L_Sword;
+ if (getequipid(equip_gloves) <= 0) goto L_Gloves;
+ goto L_QueryWarp;
+
+L_Sword:
+ mes "That is not your fist silly,";
+ mes "use your fist, alright?";
+ goto L_close;
+
+L_Gloves:
+ mes "Wow! Next time you plan to hit a wall,";
+ mes "you had better equip some decent gloves in advance.";
+ heal -20, 0;
+ message strcharinfo(0), "Ouch, that hurt!";
+ goto L_QueryWarp;
+
+L_QueryWarp:
+ mes "You gaze into a black hole, do you want to enter?";
+ mes " ";
+ menu
+ "Yes", L_Warp,
+ "No", L_close;
+
+L_Warp:
+ warp "030-2",47,44;
+ goto L_close;
+
+L_Fail:
+ mes "Seems like that won't work out as you planned.";
+ goto L_close;
+
+L_close:
+ close;
+}
+
+030-2,48,44,0 script #BasementDoor NPC45,0,0,{
+ callfunc "XmasStates";
+
+ if((@xmas_basement_passage) && ($@xmas_time))
+ goto L_XmasMain;
+ goto L_NotActive;
+
+L_XmasMain:
+ mes "Descend into the caves?";
+ menu
+ "Yes.", L_Open,
+ "No.", L_close;
+
+L_Open:
+ warp "030-3",27,26;
+ goto L_close;
+
+L_NotActive:
+ message strcharinfo(0), "This door appears locked by magical forces.";
+ end;
+
+L_close:
+ close;
+}
diff --git a/npc/annuals/xmas/config.txt b/npc/annuals/xmas/config.txt
new file mode 100755
index 00000000..807b3b9f
--- /dev/null
+++ b/npc/annuals/xmas/config.txt
@@ -0,0 +1,252 @@
+
+
+- script #XmasConfig NPC32767,{
+ end;
+
+OnCommandRestartQuest:
+ goto L_Main;
+
+OnInit:
+ goto L_Main;
+
+L_Main:
+ // Xmas Key Identifier Set through Botcheck Debug
+ if(!($XMAS_TIME_KEY) || (getarraysize($XMAS_TIME_KEY) != 6))
+ setarray $XMAS_TIME_KEY, 12,12,1,25,6,gettime(7);
+ if(($XMAS_TIME_KEY[0] == 0) || ($XMAS_TIME_KEY[0] > 12))
+ goto L_XmasError;
+ if(($XMAS_TIME_KEY[1] == 0) || ($XMAS_TIME_KEY[1] > 12))
+ goto L_XmasError;
+ if(($XMAS_TIME_KEY[2] == 0) || ($XMAS_TIME_KEY[2] > 12))
+ goto L_XmasError;
+ if(($XMAS_TIME_KEY[3] == 0) || ($XMAS_TIME_KEY[3] > 31))
+ goto L_XmasError;
+ if(($XMAS_TIME_KEY[4] == 0) || ($XMAS_TIME_KEY[4] > 31))
+ goto L_XmasError;
+ if($XMAS_TIME_KEY[5] == 0)
+ goto L_XmasError;
+
+ // Event Runs until Reward Period.
+ // Month Start/End
+ $@xmas_start_month = $XMAS_TIME_KEY[0];
+ $@xmas_reward_start_month = $XMAS_TIME_KEY[1];
+ $@xmas_end_month = $XMAS_TIME_KEY[2];
+
+ // Reward Day Start/End
+ $@xmas_reward_start_day = $XMAS_TIME_KEY[3];
+ $@xmas_reward_end_day = $XMAS_TIME_KEY[4];
+
+ // Time Settings
+ $@xmas_no_event_time = 0;
+ $@xmas_event_time = 1;
+ $@xmas_reward_time = 2;
+
+ // Main Quest Settings
+ // Bit used to Set Which one of the 2 quests you are on
+ $@xmas_side_bit = (1 << 31);
+ $@xmas_base_bonus_xp = 4;
+ $@xmas_karma_bonus = 1;
+ $@xmas_reward_max_karma = 15;
+ $@xmas_reward_hero_boss = 15;
+ $@xmas_reward_all_lists = 10;
+ $@xmas_reward_all_helpers = 10;
+ $@xmas_reward_tally_rare = 80;
+ $@xmas_reward_tally_common = 40;
+ // Guidance System
+ $@xmas_route_bit = (1 << 23);
+ // Basement Passage way
+ $@xmas_basement_passage = (1 << 24);
+ // Thrown Out
+ $@xmas_thrown_out_bit = (1 << 25);
+ // Quest Start (@xmas_state)
+ $@xmas_list_path2_state = 1;
+ $@xmas_list_path1_state = 2;
+ $@xmas_list_both_state = 3;
+ $@xmas_list_complete_state = 4;
+ $@xmas_list_deliver_state = 5;
+ // Helper SubQuest
+ $@xmas_helpers_start_state = 6;
+ $@xmas_helpers_done_state = 7;
+ // Reagents
+ $@xmas_reagents_start = 8;
+ $@xmas_reagents_done = 9;
+ // Boss Door State
+ $@xmas_boss_door_open_state = 10;
+ // Reward State
+ $@xmas_reward_start = 11;
+ $@xmas_reward1_done = 12;
+ $@xmas_reward2_done = 13;
+ $@xmas_reward_done = 14;
+
+ // Boss Fight Required Level for Hard Mode
+ $@BossHardLevel = 70;
+ $@xmas_boss_start_bit = (1 << 26);
+ $@xmas_boss_hero_bit = (1 << 27);
+ $@xmas_boss_start_shift = 26;
+ $@xmas_boss_hero_shift = 27;
+ setarray $@xmas_boss_req$, "IronPotion", "DarkCrystal";
+ setarray $@xmas_boss_amount, 15, 10;
+ if(getarraysize($@xmas_boss_amount) != getarraysize($@xmas_boss_req$))
+ goto L_XmasError;
+ // Santas Helper quest rewards
+ setarray $@SantasHelper_Annual_Reward$,
+ "RedTurtleneck",
+ "YellowTurtleneck",
+ "LightBlueTurtleneck",
+ "PinkTurtleneck",
+ "OrangeTurtleneck",
+ "PurpleTurtleneck",
+ "KnitCap",
+ "KnitCap";
+
+ // Main Quest rewards
+ setarray $@xmas_present_from$, "Santa", "Orum";
+ setarray $@xmas_rare_reward$, "FunkyChristmasSweater", "DarkChristmasSweater";
+ setarray $@xmas_uncommon_reward$, "NutcrackerHat", "AmberChristmasSweater", "RedStockings", "PinkChristmasSweater", "BlueChristmasSweater";
+ // Quest Side 0 Settings
+ setarray $@xmas_zero_reagents$, "ShockSweet", "EmptyBottle", "EmeraldPowder";
+ setarray $@xmas_zero_reagents_names$, "Shock Sweet", "Empty Bottles", "Emerald Powders";
+ setarray $@xmas_zero_reagents_amounts, 1, 4, 10;
+ if(getarraysize($@xmas_zero_reagents_amounts) != getarraysize($@xmas_zero_reagents$))
+ goto L_XmasError;
+
+ // Quest Side 1 Settings
+ setarray $@xmas_one_reagents$, "DarkCrystal", "IronPotion", "EmeraldPowder";
+ setarray $@xmas_one_reagents_names$, "Dark Crystal", "Iron Potions", "Emerald Powders";
+ setarray $@xmas_one_reagents_amounts, 1, 4, 10;
+ if(getarraysize($@xmas_one_reagents_amounts) != getarraysize($@xmas_one_reagents$))
+ goto L_XmasError;
+
+ // List Bits
+ $@xmas_all_lists_bit = (1 << 29);
+ setarray $@xmas_child_list, (1 << 8), (1 << 9), (1 << 10), (1 << 11), (1 << 12), (1 << 13), (1 << 14), (1 << 15);
+ setarray $@xmas_child_list_name$, "Ayasha", "Latif", "Charda", "Faris", "Rasin", "Ghada", "Rossy", "Kadiya";
+ if(getarraysize($@xmas_child_list) != getarraysize($@xmas_child_list_name$))
+ goto L_XmasError;
+
+ $@xmas_perfect_list_count = getarraysize($@xmas_child_list);
+ $@xmas_required_list_count = (getarraysize($@xmas_child_list) / 2);
+
+ // Santa's Helper
+ $@xmas_sh_bit = (1 << 22);
+ $@xmas_sh_purple_amount = 25;
+ $@xmas_sh_blue_amount = 20;
+ $@xmas_sh_green_amount = 5;
+
+ // Main Helper Bit
+ $@xmas_helper_bit = (1 << 30);
+ $@xmas_all_helpers_bit = (1 << 28);
+
+ // Acorns
+ $@xmas_helper_bit_acorns = (1 << 21);
+ $@xmas_acorn_amount = 10;
+ $@xmas_iron_potion_amount = 1;
+
+ // Bedding
+ $@xmas_helper_bit_bed_starts = (1 << 16);
+ $@xmas_helper_bit_bed_ends = (1 << 17);
+ $@xmas_bedding_amount = 10;
+
+ // Boxes
+ $@xmas_log_amount = 2;
+
+ // Wrap
+ $@xmas_reed_amount = 2;
+ $@xmas_water_amount = 1;
+ $@xmas_wrap_reward = 1;
+
+ // Wrap Dye Amounts
+ $@xmas_poa_amount = 2;
+ $@xmas_wrap_yellow_amount = 2;
+ $@xmas_wrap_ltblue_amount = 2;
+ $@xmas_wrap_purple_amount = 2;
+ $@xmas_wrap_green_amount = 2;
+
+ // Present Return
+ $@xmas_present_amount = 5;
+
+ // Shipping
+ $@xmas_wrap_amount = 1;
+ $@xmas_empty_box_amount = 1;
+ $@xmas_ship_present_amount = 1;
+
+ // Glitter
+ $@xmas_helper_bit_glitter_starts = (1 << 18);
+ $@xmas_helper_bit_glitter_ends = (1 << 19);
+ $@xmas_red_amount = 5;
+ $@xmas_yellow_amount = 5;
+
+ // Storage (Daily Xmas)
+ $@xmas_helper_bit_storage = (1 << 20);
+ // Good Daily Ammounts
+ $@xmas_good_level = 30;
+ $@xmas_good_cost = 12;
+ $@xmas_good_count = 3;
+ $@xmas_good_name$ = "Candy";
+ $@xmas_good_friendly_name$ = "Candies";
+ $@xmas_good_money = 500;
+ $@xmas_good_exp = 200;
+
+ // Bad Daily Ammounts
+ $@xmas_bad_level = 30;
+ $@xmas_bad_cost = 12;
+ $@xmas_bad_count = 3;
+
+ $@xmas_bad_name$ = "RedApple";
+ $@xmas_bad_friendly_name$ = "Red Apples";
+ $@xmas_bad_money = 500;
+ $@xmas_bad_exp = 200;
+
+ //Boss Fight Reward
+ $@xmas_boss_bp = 50;
+
+ // Helpers Flags needed to set $@xmas_all_helpers_bit
+ setarray $@xmas_helper_list, $@xmas_helper_bit_bed_ends, $@xmas_helper_bit_glitter_ends, $@xmas_helper_bit_storage, $@xmas_helper_bit_acorns, $@xmas_sh_bit;
+ $@xmas_perfect_helpers_count = getarraysize($@xmas_helper_list);
+ $@xmas_required_helpers_count = (getarraysize($@xmas_helper_list) / 2);
+
+ // MobManager
+ setarray $@xmas_mob_names$, "Santa Slime", "Candied Slime", "Candied Slime";
+ setarray $@xmas_mob_spawns, "1015", "1111", "1111";
+ setarray $@xmas_mob_counts, 10, 5, 5;
+ setarray $@xmas_map_spawns$, "019-1", "019-3", "030-3";
+ if(getarraysize($@xmas_mob_spawns) != getarraysize($@xmas_map_spawns$))
+ goto L_XmasError;
+ if(getarraysize($@xmas_mob_names$) != getarraysize($@xmas_map_spawns$))
+ goto L_XmasError;
+ if(getarraysize($@xmas_mob_counts) != getarraysize($@xmas_map_spawns$))
+ goto L_XmasError;
+
+ $@xmas_spawn_x1 = 54;
+ $@xmas_spawn_y1 = 48;
+ $@xmas_spawn_x2 = 79;
+ $@xmas_spawn_y2 = 89;
+ $@xmas_respawn_count = 9;
+
+ $@start_month = $@xmas_start_month;
+ $@end_month = $@xmas_end_month;
+ $@start_day = 1;
+ $@end_day = $@xmas_reward_end_day;
+ $@reward_start_month = $@xmas_reward_start_month;
+ $@reward_start_day = $@xmas_reward_start_day;
+
+ callfunc "GetEventTime";
+ $@xmas_time = $@event_time;
+
+ if($@xmas_time == 0 && $XMAS_TIME_KEY[5] < gettime(7))
+ setarray $XMAS_TIME_KEY, $XMAS_TIME_KEY[0],$XMAS_TIME_KEY[1],$XMAS_TIME_KEY[2],$XMAS_TIME_KEY[3],$XMAS_TIME_KEY[4],gettime(7);
+ goto L_Return;
+
+L_Return:
+ // technically this only needs to skip the npctimer in SpawnMobs,
+ // but this is a low-level debug setting so whatever.
+ if (debug >= 2) end;
+ callfunc "SpawnMobs";
+ callfunc "PresentHandler";
+ callfunc "ReplaceTrees";
+ end;
+
+L_XmasError:
+ debugmes "Xmas is Dead Jim.";
+ mapexit;
+}
diff --git a/npc/annuals/xmas/core.txt b/npc/annuals/xmas/core.txt
new file mode 100755
index 00000000..2abeefce
--- /dev/null
+++ b/npc/annuals/xmas/core.txt
@@ -0,0 +1,229 @@
+
+function script XmasNaughty {
+ @xmas_karma = ((XMASTIME & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT);
+ if((@xmas_karma - @karma_bonus) >= 0)
+ goto L_SetNaughty;
+ goto L_ResetNaughty;
+
+L_SetNaughty:
+ @xmas_karma = (@xmas_karma - @karma_bonus);
+ goto L_Return;
+
+L_ResetNaughty:
+ @xmas_karma = 0;
+ goto L_Return;
+
+L_Return:
+ XMASTIME = (XMASTIME & ~(NIBBLE_1_MASK) | (@xmas_karma << NIBBLE_1_SHIFT));
+ @karma_bonus = 0;
+ return;
+}
+
+function script XmasNice {
+ @xmas_karma = ((XMASTIME & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT);
+ if((@xmas_karma + @karma_bonus) < 16)
+ goto L_SetNice;
+ goto L_ResetNice;
+
+L_SetNice:
+ @xmas_karma = (@karma_bonus + @xmas_karma);
+ goto L_Return;
+
+L_ResetNice:
+ @xmas_karma = 15;
+ goto L_Return;
+
+L_Return:
+ XMASTIME = (XMASTIME & ~(NIBBLE_1_MASK) | (@xmas_karma << NIBBLE_1_SHIFT));
+ @karma_bonus = 0;
+ return;
+}
+
+function script XmasXpReward {
+ if (BaseLevel >= 10)
+ goto L_HigherLevel;
+ goto L_LowLevel;
+
+L_HigherLevel:
+ getexp ((BaseLevel / 10) * ($@xmas_base_bonus_xp * BaseLevel)), 0;
+ goto L_Return;
+
+L_LowLevel:
+ getexp ($@xmas_base_bonus_xp * BaseLevel), 0;
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+function script XmasSetState {
+ XMASTIME = (XMASTIME & ~(NIBBLE_0_MASK) | (@xmas_state << NIBBLE_0_SHIFT));
+ return;
+}
+
+function script XmasSetSide {
+ XMASTIME = XMASTIME | $@xmas_side_bit;
+ return;
+}
+
+function script XmasSetRoute {
+ XMASTIME = XMASTIME | $@xmas_route_bit;
+ return;
+}
+
+function script XmasThrowOut {
+ XMASTIME = XMASTIME | $@xmas_thrown_out_bit;
+ return;
+}
+
+function script XmasSetBossStart {
+ XMASTIME = XMASTIME | $@xmas_boss_start_bit;
+ return;
+}
+
+function script XmasSetBossHero {
+ XMASTIME = XMASTIME | $@xmas_boss_hero_bit;
+ return;
+}
+
+function script XmasSetReward {
+ @xmas_endgame = 0;
+ @xmas_reward_side = 0;
+ @xmas_reward_tally = 0;
+ if(@xmas_side)
+ goto L_SetSide;
+ goto L_NotSetSide;
+
+L_SetSide:
+ @xmas_reward_side = 1;
+ @xmas_reward_tally = (@xmas_reward_tally + ($@xmas_reward_max_karma - @xmas_karma));
+ goto L_SetRewardBonus;
+
+L_NotSetSide:
+ @xmas_reward_tally = (@xmas_reward_tally + @xmas_karma);
+ goto L_SetRewardBonus;
+
+L_SetRewardBonus:
+ if(@xmas_boss_hero)
+ @xmas_reward_tally = (@xmas_reward_tally + $@xmas_reward_hero_boss);
+ if(@xmas_all_helpers)
+ @xmas_reward_tally = (@xmas_reward_tally + $@xmas_reward_all_helpers);
+ if(@xmas_all_lists)
+ @xmas_reward_tally = (@xmas_reward_tally + $@xmas_reward_all_lists);
+ //formula should:
+ if (@xmas_reward_tally > 5)
+ @xmas_reward_lower_bound = 2 * @xmas_reward_tally - rand(5);
+ if (@xmas_reward_tally <= 5)
+ @xmas_reward_lower_bound = @xmas_reward_tally;
+ @xmas_reward_upper_bound = @xmas_reward_lower_bound + ((Luk) / 5);
+ @xmas_reward = (rand(@xmas_reward_lower_bound, @xmas_reward_upper_bound));
+ @xmas_reward_lower_bound = 0;
+ @xmas_reward_upper_bound = 0;
+ return;
+}
+
+function script XmasMainXpBpReward {
+ callfunc "XmasSetReward";
+
+ if(BaseLevel >= 99)
+ goto L_EndGameReward;
+ goto L_LevelingReward;
+
+L_EndGameReward:
+ @xmas_bp_reward = 100 + rand(@xmas_reward, 2 * @xmas_reward);
+ BOSS_POINTS = BOSS_POINTS + @xmas_bp_reward;
+ message strcharinfo(0), "You gain " + @xmas_bp_reward + " Bosspoints, giving you a total of " + BOSS_POINTS + ".";
+ @xmas_bp_reward = 0;
+ return;
+
+L_LevelingReward:
+ if(@xmas_reward >= $@xmas_reward_tally_rare)
+ goto L_XmasLevel;
+ goto L_XmasExp;
+
+L_XmasLevel:
+ BaseLevel = BaseLevel + 1;
+ return;
+
+L_XmasExp:
+ getexp ((@xmas_reward * BaseLevel * (BaseLevel + 10)) / 10), 0;
+ return;
+}
+
+function script XmasMainItemReward {
+ callfunc "XmasSetReward";
+
+ if (($@xmas_time == $@xmas_reward_time) && ((@xmas_reward_start_state) || (@xmas_reward1_done_state)))
+ goto L_FinalGift;
+ if (($@xmas_time == $@xmas_reward_time) && ((@xmas_reward_done_state) || (@xmas_reward2_done_state)))
+ goto L_GotGift;
+ if ($@xmas_time == $@xmas_reward_time)
+ goto L_NoGift;
+ goto L_Return;
+
+L_GotGift:
+ mes "Hey, this is not for you!";
+ goto L_Return;
+
+L_NoGift:
+ mes "Oh someone got a present. Maybe you can get one too if help the right person?";
+ goto L_Return;
+
+L_FinalGift:
+ mes "[To: " + strcharinfo(0) + "]";
+ mes "[From: " + $@xmas_present_from$[@xmas_reward_side] + "]";
+ mes "O look, a present from " + $@xmas_present_from$[@xmas_reward_side];
+ next;
+ getinventorylist;
+ if (@inventorylist_count > 97)
+ goto L_FullInv;
+ @xmas_reward = (@xmas_reward + ((BaseLevel + 10)/10));
+ if (debug > 0)
+ message strcharinfo(0), "Reward variable: " + @xmas_reward;
+ @xmas_uncommon_slot1 = rand(getarraysize($@xmas_uncommon_reward$));
+ @xmas_uncommon_slot2 = rand(getarraysize($@xmas_uncommon_reward$));
+ if(@xmas_reward >= $@xmas_reward_tally_rare)
+ @xmas_reward_item$ = $@xmas_rare_reward$[@xmas_reward_side];
+ if(@xmas_reward >= $@xmas_reward_tally_common)
+ @xmas_reward_item1$ = $@xmas_uncommon_reward$[@xmas_uncommon_slot1];
+ @xmas_reward_item2$ = $@xmas_uncommon_reward$[@xmas_uncommon_slot2];
+ if(checkweight("Iten", 1) == 0)
+ goto L_FullInv;
+ if(@xmas_reward >= $@xmas_reward_tally_rare)
+ getitem @xmas_reward_item$, 1;
+ if(@xmas_reward >= $@xmas_reward_tally_common)
+ getitem @xmas_reward_item1$, 1;
+ getitem @xmas_reward_item2$, 1;
+ @xmas_uncommon_slot1 = 0;
+ @xmas_uncommon_slot2 = 0;
+ @xmas_reward_item$ = "";
+ @xmas_reward_item1$ = "";
+ @xmas_reward_item2$ = "";
+ if (@xmas_reward_start_state)
+ @xmas_state = $@xmas_reward2_done;
+ if (@xmas_reward1_done_state)
+ @xmas_state = $@xmas_reward_done;
+ callfunc "XmasSetState";
+ goto L_Return;
+
+L_FullInv:
+ mes "\"You have no place to put the present.\"";
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+function script XmasCheckOld {
+ if(XMASYEAR == $XMAS_TIME_KEY[5])
+ goto L_Return;
+ goto L_OldMatch;
+
+L_OldMatch:
+ XMASTIME = 0;
+ XMASYEAR = $XMAS_TIME_KEY[5];
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/npc/annuals/xmas/debug.txt b/npc/annuals/xmas/debug.txt
new file mode 100755
index 00000000..f7ba17bd
--- /dev/null
+++ b/npc/annuals/xmas/debug.txt
@@ -0,0 +1,220 @@
+
+function script XmasDebug {
+ if(debug)
+ goto L_Debug;
+ goto L_Live;
+
+L_Live:
+ mes "What do you want to do?";
+ menu
+ "Debug Vars", L_DebugLive,
+ "Xmas Time Key Change.", L_XmasTimeKey,
+ "Reset Xmas Chamber.", L_XmasChamberReset,
+ "Do nothing.", L_close;
+
+L_DebugLive:
+ mes "--Sever--";
+ mes "Event State: " + $@xmas_time;
+ mes "Event Start" + $XMAS_TIME_KEY[0] + "/1";
+ mes "Reward Start: " + $XMAS_TIME_KEY[1] + "/" + $XMAS_TIME_KEY[3];
+ mes "Event End: " + $XMAS_TIME_KEY[2] + "/" + $XMAS_TIME_KEY[4];
+ mes "Event Time Key (year (CCYY)): " + $XMAS_TIME_KEY[5];
+ goto L_close;
+
+L_Debug:
+ mes "What do you want to do?";
+ menu
+ "Debug Vars", L_DebugVars,
+ "Set Quest State.", L_XmasState,
+ "Set Karma. [0-15] 15 Nice", L_XmasKarma,
+ "Set All Lists", L_SetAllLists,
+ "Set All Helpers", L_SetAllHelpers,
+ "Set Boss Hero", L_SetBossHero,
+ "Reset Quest State.", L_Reset,
+ "Set Old Event Flag.", L_LastReset,
+ "Xmas Time Key Change.", L_XmasTimeKey,
+ "Reset Xmas Chamber.", L_XmasChamberReset,
+ "Do nothing.", L_close;
+
+L_DebugVars:
+ callfunc "XmasStates";
+ mes "--Sever--";
+ mes "Event State: " + $@xmas_time;
+ mes "Event Start" + $XMAS_TIME_KEY[0] + "/1";
+ mes "Reward Start: " + $XMAS_TIME_KEY[1] + "/" + $XMAS_TIME_KEY[3];
+ mes "Event End: " + $XMAS_TIME_KEY[2] + "/" + $XMAS_TIME_KEY[4];
+ mes "Event Time Key (year (CCYY)): " + $XMAS_TIME_KEY[5];
+ next;
+ mes "--Player--";
+ mes "Player Event Time Key " + XMASYEAR;
+ mes "xmas_state: " + @xmas_state;
+ mes "xmas_karma: " + @xmas_karma;
+ mes "xmas_side: " + @xmas_side;
+ next;
+ mes "xmas_list_gather: " + @xmas_list_gather;
+ mes "xmas_list_complete: " + @xmas_list_complete;
+ mes "xmas_list_deliver: " + @xmas_list_deliver;
+ mes "xmas_helper_start_state: " + @xmas_helper_start_state;
+ mes "xmas_helper_done_state: " + @xmas_helper_done_state;
+ mes "xmas_reagent_start_state: " + @xmas_reagent_start_state;
+ mes "xmas_reagent_done_state: " + @xmas_reagent_done_state;
+ mes "xmas_boss_door_state: " + @xmas_boss_door_state;
+ mes "xmas_reward_start_state " + @xmas_reward_start_state;
+ mes "xmas_reward1_done_state " + @xmas_reward1_done_state;
+ mes "xmas_reward2_done_state " + @xmas_reward2_done_state;
+ mes "xmas_reward_done_state: " + @xmas_reward_done_state;
+ next;
+ mes "xmas_basement_passage: " + @xmas_basement_passage;
+ mes "xmas_thrown_out: " + @xmas_thrown_out;
+ mes "xmas_hard_mode: " + @xmas_boss_hero;
+ next;
+ mes "xmas_sweater: " + @xmas_sh_done;
+ next;
+ mes "xmas_all_lists: " + @xmas_all_lists;
+ next;
+ mes "xmas_helper_bit: " + @xmas_helper_bit;
+ mes "xmas_all_helpers: " + @xmas_all_helpers;
+ mes "xmas_helper_acorn: " + @xmas_helper_acorn;
+ mes "xmas_helper_bedding: " + @xmas_helper_bedding;
+ mes "xmas_helper_glitter: " + @xmas_helper_glitter;
+ mes "xmas_helper_storage: " + @xmas_helper_storage;
+ mes "xmas_knows_route: " + @xmas_knows_route;
+ goto L_close;
+
+L_LastReset:
+ XMASTIME = 255;
+ XMASYEAR = 2012;
+ goto L_close;
+
+L_Reset:
+ XMASTIME = 0;
+ XMASYEAR = $XMAS_TIME_KEY[5];
+ goto L_close;
+
+L_XmasTimeKey:
+ mes "Xmas Time Key Change.";
+ mes "Start Month?";
+ input @xmas_time_key_smonth;
+ if((@xmas_time_key_smonth == 0) || (@xmas_time_key_smonth > 12))
+ goto L_XmasError;
+ mes "Reward Start Month?";
+ input @xmas_time_key_srmonth;
+ if((@xmas_time_key_srmonth == 0) || (@xmas_time_key_srmonth > 12))
+ goto L_XmasError;
+ mes "End Month?";
+ input @xmas_time_key_emonth;
+ if((@xmas_time_key_emonth == 0) || (@xmas_time_key_emonth > 12))
+ goto L_XmasError;
+ mes "Reward Start Day?";
+ input @xmas_time_key_rsday;
+ if((@xmas_time_key_rsday == 0) || (@xmas_time_key_rsday > 31))
+ goto L_XmasError;
+ mes "Reward End Day?";
+ input @xmas_time_key_reday;
+ if((@xmas_time_key_reday == 0) || (@xmas_time_key_reday > 31))
+ goto L_XmasError;
+ mes "Time Key (CCYY) ";
+ input @xmas_time_key_year;
+ goto L_SetNewKey;
+
+L_XmasError:
+ mes "Incorrect Entry. Try again.";
+ goto L_close;
+
+L_SetNewKey:
+ setarray $XMAS_TIME_KEY, @xmas_time_key_smonth, @xmas_time_key_srmonth, @xmas_time_key_emonth, @xmas_time_key_rsday, @xmas_time_key_reday, @xmas_time_key_year;
+ donpcevent "#XmasConfig::OnCommandRestartQuest";
+ goto L_close;
+
+L_XmasChamberReset:
+ donpcevent "AniManOMat::OnCommandChamberReset";
+ goto L_close;
+
+L_XmasState:
+ mes "Quest state?";
+ input @xmas_state;
+ callfunc "XmasSetState";
+ goto L_close;
+
+L_XmasKarma:
+ mes "Karma (0-15) 0: Naughty, 15: Good";
+ input @xmas_karma;
+ XMASTIME = (XMASTIME & ~(NIBBLE_1_MASK) | (@xmas_karma << NIBBLE_1_SHIFT));
+ goto L_close;
+
+L_SetAllLists:
+ XMASTIME = XMASTIME | $@xmas_all_lists_bit;
+ goto L_close;
+
+L_SetAllHelpers:
+ XMASTIME = XMASTIME | $@xmas_all_helpers_bit;
+ goto L_close;
+
+L_SetBossHero:
+ XMASTIME = XMASTIME | $@xmas_boss_hero_bit;
+ goto L_close;
+
+L_close:
+ @xmas_state = 0;
+ @xmas_karma = 0;
+ @xmas_hard_mode = 0;
+ @xmas_time_key_smonth = 0;
+ @xmas_time_key_emonth = 0;
+ @xmas_time_key_rsday = 0;
+ @xmas_time_key_reday = 0;
+ @xmas_time_key_year = 0;
+ close2;
+ return;
+}
+
+020-1,86,76,0 script XmasDebug#1 NPC105,{
+ callfunc "XmasDebug";
+ goto L_End;
+
+OnInit:
+ if(!(debug))
+ disablenpc "XmasDebug#1";
+ goto L_End;
+
+L_End:
+ end;
+}
+
+030-2,193,62,0 script XmasDebug#2 NPC105,{
+ callfunc "XmasDebug";
+ goto L_End;
+
+OnInit:
+ if(!(debug))
+ disablenpc "XmasDebug#2";
+ goto L_End;
+
+L_End:
+ end;
+}
+
+030-3,26,26,0 script XmasDebug#3 NPC105,{
+ callfunc "XmasDebug";
+ goto L_End;
+
+OnInit:
+ if(!(debug))
+ disablenpc "XmasDebug#3";
+ goto L_End;
+
+L_End:
+ end;
+}
+
+030-4,30,30,0 script XmasDebug#4 NPC111,{
+ callfunc "XmasDebug";
+ goto L_End;
+
+OnInit:
+ if(!(debug))
+ disablenpc "XmasDebug#4";
+ goto L_End;
+
+L_End:
+ end;
+}
diff --git a/npc/annuals/xmas/helpers.txt b/npc/annuals/xmas/helpers.txt
new file mode 100755
index 00000000..28d5e650
--- /dev/null
+++ b/npc/annuals/xmas/helpers.txt
@@ -0,0 +1,44 @@
+
+function script XmasHelperPoints {
+ @xmas_helper_count = 0;
+ @xmas_helper_loop = 0;
+ if((@xmas_helper_done_state) || !(@xmas_helper_start_state))
+ goto L_Return;
+ goto L_Loop;
+
+L_Loop:
+ if(XMASTIME & $@xmas_helper_list[@xmas_helper_loop])
+ goto L_AddOne;
+ goto L_LoopAgain;
+
+L_AddOne:
+ @xmas_helper_count = (@xmas_helper_count + 1);
+ goto L_LoopAgain;
+
+L_LoopAgain:
+ if((@xmas_helper_loop + 1) == getarraysize($@xmas_helper_list))
+ goto L_HelperTally;
+ @xmas_helper_loop = (@xmas_helper_loop + 1);
+ goto L_Loop;
+
+L_HelperTally:
+ if(@xmas_helper_count == $@xmas_perfect_helpers_count)
+ goto L_PerfectHelpers;
+ if(@xmas_helper_count > $@xmas_required_helpers_count)
+ goto L_SetHelperState;
+ goto L_Return;
+
+L_PerfectHelpers:
+ XMASTIME = XMASTIME | $@xmas_all_helpers_bit;
+ goto L_SetHelperState;
+
+L_SetHelperState:
+ @xmas_state = $@xmas_helpers_done_state;
+ callfunc "XmasSetState";
+ goto L_Return;
+
+L_Return:
+ @xmas_helper_count = 0;
+ @xmas_helper_loop = 0;
+ return;
+}
diff --git a/npc/annuals/xmas/list.txt b/npc/annuals/xmas/list.txt
new file mode 100755
index 00000000..6f902e04
--- /dev/null
+++ b/npc/annuals/xmas/list.txt
@@ -0,0 +1,98 @@
+
+function script XmasCheckList {
+ @xmas_list_count = 0;
+ @xmas_list_loop = 0;
+
+ if((@xmas_list_deliver) || !(@xmas_list_gather))
+ goto L_Return;
+ goto L_Loop;
+
+L_Loop:
+ if(XMASTIME & $@xmas_child_list[@xmas_list_loop])
+ goto L_AddOne;
+ goto L_LoopAgain;
+
+L_AddOne:
+ @xmas_list_count = (@xmas_list_count + 1);
+ goto L_LoopAgain;
+
+L_LoopAgain:
+ if((@xmas_list_loop + 1) == getarraysize($@xmas_child_list))
+ goto L_ListTally;
+ @xmas_list_loop = (@xmas_list_loop + 1);
+ goto L_Loop;
+
+L_ListTally:
+ if(@xmas_list_count == $@xmas_perfect_list_count)
+ goto L_PerfectList;
+ if(@xmas_list_count > $@xmas_required_list_count)
+ goto L_SetListState;
+ goto L_Return;
+
+L_PerfectList:
+ XMASTIME = XMASTIME | $@xmas_all_lists_bit;
+ goto L_SetListState;
+
+L_SetListState:
+ @xmas_state = $@xmas_list_complete_state;
+ callfunc "XmasSetState";
+ goto L_Return;
+
+L_Return:
+ @xmas_list_loop = 0;
+ return;
+}
+
+function script XmasList {
+ callfunc "XmasStates";
+
+ if(($@xmas_time) && (@xmas_list_gather) && !(@xmas_list_complete))
+ goto L_QuestTime;
+ goto L_Return;
+
+L_QuestTime:
+ if(XMASTIME & $@xmas_child_list[@child_number])
+ goto L_Return;
+ goto L_GetList;
+
+L_GetList:
+ menu
+ "Hey, I have come to collect your wish list for Santa", L_List,
+ "Oh sorry, what were you going to say?", L_Return;
+
+L_List:
+ mes "[" + $@xmas_child_list_name$[@child_number] + "]";
+ mes "Here is my list. Make sure it gets delivered, please!";
+ next;
+ mes "You store " + $@xmas_child_list_name$[@child_number] + "'s wish list carefully in a hidden pocket of your backpack.";
+ XMASTIME = XMASTIME | $@xmas_child_list[@child_number];
+ callfunc "XmasXpReward";
+ menu
+ "I really should be going.", L_Return;
+
+L_Return:
+ return;
+}
+
+function script XmasListList {
+ @xmas_list_loop = 0;
+ @xmas_child_loop = 0;
+ goto L_Loop;
+
+L_Loop:
+ @xmas_child_loop = ($@xmas_child_list[@xmas_list_loop]);
+ if ((XMASTIME & @xmas_child_loop) != 0) goto L_LoopAgain;
+ mes "\"" + $@xmas_child_list_name$[@xmas_list_loop] + "\"";
+ next;
+ goto L_LoopAgain;
+
+L_LoopAgain:
+ if((@xmas_list_loop + 1) == getarraysize($@xmas_child_list_name$))
+ goto L_Return;
+ @xmas_list_loop = (@xmas_list_loop + 1);
+ goto L_Loop;
+
+L_Return:
+ @xmas_list_loop = 0;
+ return;
+}
diff --git a/npc/annuals/xmas/mobmanager.txt b/npc/annuals/xmas/mobmanager.txt
new file mode 100755
index 00000000..e478e6be
--- /dev/null
+++ b/npc/annuals/xmas/mobmanager.txt
@@ -0,0 +1,77 @@
+
+019-1,0,0,0 script XmasSpawnManager NPC400,{
+ end;
+
+OnCommandSpawnStart:
+ if ($@xmas_spawn_started)
+ goto L_End;
+ $@xmas_spawn_started = 1;
+ goto L_InitSpawn;
+
+L_InitSpawn:
+ initnpctimer;
+ $@xmas_current_count = 0;
+ $@xmas_map_loop = 0;
+ goto L_StartLoop;
+
+L_StartLoop:
+ $@xmas_mob_lck = 1;
+ $@mob_count = mobcount($@xmas_map_spawns$[$@xmas_map_loop], "XmasSpawnCounter#" + $@xmas_map_loop + "::OnTally");
+ $@spawn_amount = ($@xmas_mob_counts[$@xmas_map_loop] - ($@mob_count + 1));
+ if ($@spawn_amount)
+ goto L_Spawn;
+ goto L_NextMap;
+
+L_Spawn:
+ areamonster $@xmas_map_spawns$[$@xmas_map_loop], $@xmas_spawn_x1, $@xmas_spawn_y1, $@xmas_spawn_x2, $@xmas_spawn_y2, $@xmas_mob_names$[$@xmas_map_loop], $@xmas_mob_spawns[$@xmas_map_loop], $@spawn_amount, "XmasSpawnCounter#" + $@xmas_map_loop + "::OnTally";
+ $@xmas_current_count = ($@xmas_current_count + $@spawn_amount);
+ goto L_NextMap;
+
+L_NextMap:
+ if (($@xmas_map_loop + 1) == getarraysize($@xmas_map_spawns$))
+ goto L_End;
+ $@xmas_map_loop = ($@xmas_map_loop + 1);
+ goto L_StartLoop;
+
+OnCommandTally:
+ $@xmas_map_loop = 0;
+ $@xmas_current_count = ($@xmas_current_count - 1);
+ if (($@xmas_current_count < $@xmas_respawn_count) && !($@xmas_mob_lck))
+ goto L_StartLoop;
+ goto L_End;
+
+OnTimer110000:
+ initnpctimer;
+ goto L_StartLoop;
+
+L_End:
+ $@mob_count = 0;
+ $@spawn_amount = 0;
+ $@xmas_mob_lck = 0;
+ $@xmas_map_loop = 0;
+ end;
+}
+
+019-1,0,0,0 script XmasSpawnCounter#0 NPC400,{
+ end;
+
+OnTally:
+ donpcevent "XmasSpawnManager::OnCommandTally";
+ end;
+}
+
+019-3,0,0,0 script XmasSpawnCounter#1 NPC400,{
+ end;
+
+OnTally:
+ donpcevent "XmasSpawnManager::OnCommandTally";
+ end;
+}
+
+030-3,0,0,0 script XmasSpawnCounter#2 NPC400,{
+ end;
+
+OnTally:
+ donpcevent "XmasSpawnManager::OnCommandTally";
+ end;
+}
diff --git a/npc/annuals/xmas/reagents.txt b/npc/annuals/xmas/reagents.txt
new file mode 100755
index 00000000..dbdf52e7
--- /dev/null
+++ b/npc/annuals/xmas/reagents.txt
@@ -0,0 +1,139 @@
+
+function script CheckReagents {
+ @xmas_reagent_loop = 0;
+ if((@xmas_reagent_done_state) || !(@xmas_reagent_start_state))
+ goto L_Return;
+ if(@xmas_side)
+ goto L_OneLoop;
+ goto L_ZeroLoop;
+
+L_ZeroLoop:
+ if(countitem($@xmas_zero_reagents$[@xmas_reagent_loop]) >= $@xmas_zero_reagents_amounts[@xmas_reagent_loop])
+ goto L_ZeroLoopAgain;
+ goto L_Return;
+
+L_ZeroLoopAgain:
+ if((@xmas_reagent_loop + 1) == getarraysize($@xmas_zero_reagents$))
+ goto L_AllReagents;
+ @xmas_reagent_loop = (@xmas_reagent_loop + 1);
+ goto L_ZeroLoop;
+
+L_OneLoop:
+ if(countitem($@xmas_one_reagents$[@xmas_reagent_loop]) >= $@xmas_one_reagents_amounts[@xmas_reagent_loop])
+ goto L_OneLoopAgain;
+ goto L_Return;
+
+L_OneLoopAgain:
+ if((@xmas_reagent_loop + 1) == getarraysize($@xmas_one_reagents$))
+ goto L_AllReagents;
+ @xmas_reagent_loop = (@xmas_reagent_loop + 1);
+ goto L_OneLoop;
+
+L_AllReagents:
+ @xmas_state = $@xmas_reagents_done;
+ callfunc "XmasSetState";
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+function script DeleteReagents {
+ @xmas_reagent_loop = 0;
+ if(@xmas_side)
+ goto L_OneLoop;
+ goto L_ZeroLoop;
+
+L_ZeroLoop:
+ delitem $@xmas_zero_reagents$[@xmas_reagent_loop], $@xmas_zero_reagents_amounts[@xmas_reagent_loop];
+ goto L_ZeroLoopAgain;
+
+L_ZeroLoopAgain:
+ if((@xmas_reagent_loop + 1) == getarraysize($@xmas_zero_reagents$))
+ goto L_Return;
+ @xmas_reagent_loop = (@xmas_reagent_loop + 1);
+ goto L_ZeroLoop;
+
+L_OneLoop:
+ delitem $@xmas_one_reagents$[@xmas_reagent_loop], $@xmas_one_reagents_amounts[@xmas_reagent_loop];
+ goto L_OneLoopAgain;
+
+L_OneLoopAgain:
+ if((@xmas_reagent_loop + 1) == getarraysize($@xmas_one_reagents$))
+ goto L_Return;
+ @xmas_reagent_loop = (@xmas_reagent_loop + 1);
+ goto L_OneLoop;
+
+L_Return:
+ return;
+}
+
+function script ListReagents {
+ @xmas_reagent_loop = 0;
+ mes "\"I'm going to need \"";
+ next;
+
+ if(@xmas_side)
+ goto L_OneLoop;
+ goto L_ZeroLoop;
+
+L_ZeroLoop:
+ mes "\"" + $@xmas_zero_reagents_amounts[@xmas_reagent_loop] + " " + $@xmas_zero_reagents_names$[@xmas_reagent_loop] + "\"";
+ next;
+ goto L_ZeroLoopAgain;
+
+L_ZeroLoopAgain:
+ if((@xmas_reagent_loop + 1) == getarraysize($@xmas_zero_reagents$))
+ goto L_AllReagents;
+ @xmas_reagent_loop = (@xmas_reagent_loop + 1);
+ goto L_ZeroLoop;
+
+L_OneLoop:
+ mes "\"" + $@xmas_one_reagents_amounts[@xmas_reagent_loop] + " " + $@xmas_one_reagents_names$[@xmas_reagent_loop] + "\"";
+ next;
+ goto L_OneLoopAgain;
+
+L_OneLoopAgain:
+ if((@xmas_reagent_loop + 1) == getarraysize($@xmas_one_reagents$))
+ goto L_AllReagents;
+ @xmas_reagent_loop = (@xmas_reagent_loop + 1);
+ goto L_OneLoop;
+
+L_AllReagents:
+ return;
+}
+
+function script BadPowderMake {
+ if(countitem("PileOfAsh") < ($@xmas_red_amount + $@xmas_yellow_amount))
+ goto L_NotEnough;
+ if(countitem("RedDye") < $@xmas_red_amount)
+ goto L_NotEnough;
+ if(countitem("YellowDye") < $@xmas_yellow_amount)
+ goto L_NotEnough;
+ getinventorylist;
+ if (@inventorylist_count > 100)
+ goto L_FullInv;
+ goto L_MakePowder;
+
+L_MakePowder:
+ delitem "PileOfAsh", ($@xmas_red_amount + $@xmas_yellow_amount);
+ delitem "RedDye", $@xmas_red_amount;
+ delitem "YellowDye", $@xmas_yellow_amount;
+ getitem "RedPowder", $@xmas_red_amount;
+ getitem "YellowPowder", $@xmas_yellow_amount;
+ mes "\"Here is your powder, now move!\"";
+ goto L_Return;
+
+L_FullInv:
+ mes "\"... Excuse me but where did you expect you were going to hold these powders...\"";
+ mes "\"WAIT! no, I don't want to know. Just come back when you have some room.\"";
+ goto L_Return;
+
+L_NotEnough:
+ mes "\"You don't have enough of eagents to make the powders.\"";
+ mes "\"To replace the glitter we will need get " + ($@xmas_red_amount + $@xmas_yellow_amount) + " Piles of Ash, " + $@xmas_red_amount + " Red Dyes and " + $@xmas_yellow_amount + " Yellow Dyes\"";
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/npc/annuals/xmas/states.txt b/npc/annuals/xmas/states.txt
new file mode 100755
index 00000000..c21ccce5
--- /dev/null
+++ b/npc/annuals/xmas/states.txt
@@ -0,0 +1,51 @@
+
+function script XmasStates {
+ // Check for Old Quest Line Keys. Reset Quest if so.
+ callfunc "XmasCheckOld";
+ // Main Quest
+ @xmas_state = ((XMASTIME & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
+ @xmas_karma = ((XMASTIME & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT);
+ @xmas_side = XMASTIME & $@xmas_side_bit;
+
+ @xmas_list_gather = (@xmas_state >= $@xmas_list_path2_state);
+ @xmas_list_path2 = (@xmas_state == $@xmas_list_path2_state);
+ @xmas_list_path1 = (@xmas_state == $@xmas_list_path1_state);
+ @xmas_list_both = (@xmas_state == $@xmas_list_both_state);
+ @xmas_list_complete = (@xmas_state >= $@xmas_list_complete_state);
+ @xmas_list_deliver = (@xmas_state >= $@xmas_list_deliver_state);
+ @xmas_helper_start_state = (@xmas_state >= $@xmas_helpers_start_state);
+ @xmas_helper_done_state = (@xmas_state >= $@xmas_helpers_done_state);
+ @xmas_reagent_start_state = (@xmas_state >= $@xmas_reagents_start);
+ @xmas_reagent_done_state = (@xmas_state >= $@xmas_reagents_done);
+ @xmas_boss_door_state = (@xmas_state >= $@xmas_boss_door_open_state);
+ @xmas_reward_start_state = (@xmas_state == $@xmas_reward_start);
+ @xmas_reward1_done_state = (@xmas_state == $@xmas_reward1_done);
+ @xmas_reward2_done_state = (@xmas_state == $@xmas_reward2_done);
+ @xmas_reward_done_state = (@xmas_state == $@xmas_reward_done);
+
+ // Basement Passage
+ @xmas_basement_passage = XMASTIME & $@xmas_basement_passage;
+ // Thrown Out
+ @xmas_thrown_out = XMASTIME & $@xmas_thrown_out_bit;
+ // Learned Route to Orum
+ @xmas_knows_route = XMASTIME & $@xmas_route_bit;
+ // Santas Helper
+ @xmas_sh_done = XMASTIME & $@xmas_sh_bit;
+ // List Quest
+ @xmas_all_lists = XMASTIME & $@xmas_all_lists_bit;
+ // Helper Quest
+ @xmas_helper_bit = XMASTIME & $@xmas_helper_bit;
+ @xmas_all_helpers = XMASTIME & $@xmas_all_helpers_bit;
+ // Acorns
+ @xmas_helper_acorn = XMASTIME & $@xmas_helper_bit_acorns;
+ // Bedding
+ @xmas_helper_bedding = XMASTIME & $@xmas_helper_bit_bed_starts;
+ // Glitter
+ @xmas_helper_glitter = XMASTIME & $@xmas_helper_bit_glitter_starts;
+ // Storage
+ @xmas_helper_storage = XMASTIME & $@xmas_helper_bit_storage;
+ // Bosses
+ @xmas_boss_start = XMASTIME & $@xmas_boss_start_bit;
+ @xmas_boss_hero = XMASTIME & $@xmas_boss_hero_bit;
+ return;
+}