// Doctor 1, at the big tree.
028-1.gat,21,105,0 script Doctor#who1 184,{
// States here
callsub S_Helped_Count;
if (@Easter_2010_helper >= 2 && !((Easter_2010_QuestState >> E10_FLAG_MID_REWARD_SHIFT) & E10_FLAG_MID_REWARD_MASK))
goto L_MidReward;
if (@Easter_2010_helper == 4 && !((Easter_2010_QuestState >> E10_FLAG_RETURN_READY_SHIFT) & E10_FLAG_RETURN_READY_MASK))
goto L_Defeat_Invader;
if ((Easter_2010_QuestState >> E10_FLAG_RETURN_READY_SHIFT) & E10_FLAG_RETURN_READY_MASK == E10_FLAG_RETURN_READY && (Easter_2010_QuestState >> E10_STATE_ROSE_SHIFT) & E10_STATE_ROSE_MASK == E10_STATE_ROSE_ROSE_COMPLETE)
goto L_Return_Ready_Optional;
// ======================
// === First location ===
// ======================
L_At_Tree:
// Checks for if the player has already helped the doctor, either here or elsewhere, go here.
if ((Easter_2010_QuestState >> E10_FLAG_HELPED_DOCTOR_TREE_SHIFT) & E10_FLAG_HELPED_DOCTOR_TREE_MASK == E10_FLAG_HELPED_DOCTOR_TREE)
goto L_At_Tree_Helped;
if ((Easter_2010_QuestState >> E10_FLAG_KNOWS_DOCTOR_SHIFT) & E10_FLAG_KNOWS_DOCTOR_MASK == E10_FLAG_KNOWS_DOCTOR)
goto L_At_Tree_Knows_Doctor;
// Fallthrough, reaction to a player that is completely new.
setarray @responses$, "\"This tree, I'm sure it's - \"The man looks up distractedly.\" Oh, hello. Can't talk now, I'm afraid, this world needs my help...\"", "He looks up, confused. \"Withering... why is this world dying? Perhaps--er, who are you? You'll have to excuse me, I'm a little preoccupied with this tree...\"", "\"What-what? I mean, sorry, hello! Can't quite talk, a bit busy trying to save this world.\" He seems to be deep in thought, brandishing what looks to be a small tool near the tree.", "\"You there! Do you realise what's happening here? This world is dying, much like a human would, perhaps. Nevertheless...\""; // Not many responses are needed here, since init only happens one per player.
callsub S_Update_Knows;
next;
if (countitem("LifeStone") > 0)
goto L_has_lifestone;
close;
L_At_Tree_Knows_Doctor:
// More responses than the initial here, and need to be more of a hint.
setarray @responses$, "\"I just don't know what's wrong. My analysis tells me this tree is important, but I don't seem to have the right tool...\"", "A distinct... whirring noise sounds from the device the Doctor wields. \"You see this tree? Right here, this one! There's something amiss here, perhaps beyond my expertise.\"", "\"Yes, yes, all evidence points to this tree. \"He leans in for a closer look. \"Brilliant! No! Um... that's not right.\"", "He withdraws what appear to be glasses from his pocket and puts them on, peering intently at the tree.", "\"Mm-hmm, yes! Do you see what's wrong with this tree? No?\" He sounds somewhat dejected, but still determined. \"Well, neither do I, I'm afraid.\"", "The Doctor turns with a look of panic on his face, gesturing for you to stop talking. He turns back to the tree, muttering \"some way to heal...\"";
callsub S_Dialogue_Knows;
next;
if (countitem("LifeStone") > 0)
goto L_has_lifestone;
mes "[Doctor]";
mes "";
mes "\"I'm trying to understand something, but it's got me quite confused, I'm afraid. I need something to assist me... something to counter the death...\"";
next;
mes "[Doctor]";
mes "";
mes "\"Unfortunately, I really can't think of anything to use. Please leave me alone while I think.\"";
next;
menu "Okay...", -,
"Actually, I just want to go home. Can you help?", L_Warning;
close;
L_has_lifestone:
mes "[Doctor]";
mes "";
mes "\"I'm busy right now, I'm afraid I - what's that thing you've got there?\"";
next;
goto L_spotted_lifestone;
L_spotted_lifestone:
menu
"That? That's just a Life Stone. Basic level one magic item.", L_want_lifestone,
"Sorry, I'm not interested in talking right now.", -;
close;
L_want_lifestone:
mes "[Doctor]";
mes "";
mes "\"A Life Stone? It is not of this world... and it's just what I need! Where did you get it?\"";
next;
menu
"I made it myself!", L_made_lifestone,
"Elanore the Healer made it for me.", L_elanore_lifestone,
"I bought it off someone.", L_bought_lifestone,
"What? You expect me to remember where I get every single lifestone?", L_expect_lifestone;
close;
L_made_lifestone:
mes "[Doctor]";
mes "";
mes "\"You made it? But then you... you must be from elsewhere as well! How did you get here?\"";
next;
menu
"A mysterious old woman gave me a flower, and then I appeared here.", L_woman_lifestone,
"I died.", L_dead_lifestone,
"I think I've told you enough for now...", -;
close;
L_elanore_lifestone:
mes "[Doctor]";
mes "";
mes "\"Elanore the Healer... I have not heard of her, but she must be a powerful being indeed. But there are more pressing matters - will you lend me this... 'Life Stone'?\"";
next;
menu
"Yeah, whatever.", L_offer_lifestone,
"I'm not giving you my stuff!", -;
close;
L_bought_lifestone:
mes "[Doctor]";
mes "";
mes "\"And you could afford it? Something as powerful as this must be worth a fortune.\"";
next;
menu
"Actually, it was only 100 GP.", L_cheap_lifestone,
"Yeah, well, I got a few million in the bank.", L_rich_lifestone,
"Powerful? I thought it just did minor healing.", L_powerful_lifestone;
close;
L_expect_lifestone:
mes "[Doctor]";
mes "";
mes "\"Well, I suppose so. I need something like this, however... I must be sure it has not been tainted with darkness. If you don't remember where you got it, it's no use to me.\"";
close;
L_woman_lifestone:
mes "[Doctor]";
mes "";
mes "\"An old woman gave you - ? Well, never mind that. This 'Life Stone'... I think I need it. Will you lend it to me?\"";
next;
menu
"Sure.", L_offer_lifestone,
"Sorry, I need it.", -;
close;
L_dead_lifestone:
mes "[Doctor]";
mes "";
mes "\"So... you're dead? Then maybe this world is some kind of... afterlife to yours?\"";
next;
mes "[Doctor]";
mes "";
mes "\"But if this world is dying, how can it be an afterlife? That doesn't make sense...\"";
next;
mes "[Doctor]";
mes "";
mes "\"Unless you were already dead, and you've been reincarnated...\"";
next;
mes "[Doctor]";
mes "";
mes "\"But surely you wouldn't be able to make a powerful thing like this... this 'Life Stone' in a world for the dead?\"";
mes "\"But since you are here, and you do have this Life Stone - can I borrow it? I think I may need it, and quite soon.\"";
next;
menu
"Yes, take it.", L_offer_lifestone,
"No, I need it.", -;
close;
L_cheap_lifestone:
mes "[Doctor]";
mes "";
mes "\"Then that was a bargain, my friend. This must surely be worth thousands! And I'm afraid I'm going to have to ask you if I may borrow it.\"";
next;
menu
"Yeah, you can.", L_offer_lifestone,
"Nope, sorry.", -;
close;
L_rich_lifestone:
mes "[Doctor]";
mes "";
mes "\"Ah! I'm afraid I expected you to be poor... being the warrior type, I mean. Well... I'm going to need this Life Stone. It's quite important. Might I purchase it from you?\"";
next;
menu
"Indeed. That will be 50,000 GP, please.", L_expensive_lifestone,
"Better. You can have it for free!", L_offer_lifestone,
"No. It's mine.", -;
close;
L_powerful_lifestone:
if (getskilllv(SKILL_MAGIC)) goto L_hasmagic_lifestone;
mes "[Doctor]";
mes "";
mes "\"It contains a strange power which I have never detected before... and I think I can use it. Can I borrow it off you?\"";
next;
menu
"Yeah, if you want.", L_offer_lifestone,
"Er... no. My powerful rock! Ha!", -;
close;
L_hasmagic_lifestone:
mes "[Doctor]";
mes "";
mes "\"It contains a strange power which I have never detected before... except... in you. You have this power in you!\"";
next;
mes "[Doctor]";
mes "";
mes "\"Anyway... this stone, this Life Stone, can I borrow it?\"";
next;
menu
"Sure. Here you are.", L_offer_lifestone,
"Tell me more about this power.", L_power_lifestone,
"No.", -;
close;
L_power_lifestone:
mes "[Doctor]";
mes "";
mes "\"There's nothing I can really tell you. I just know it's there, I don't know what it is. Can I borrow the Stone?\"";
next;
menu
"Yeah, sure.", L_offer_lifestone,
"No.", -;
close;
L_help_lifestone:
mes "[Doctor]";
mes "";
mes "\"Just the boost I needed... hm? No, that's all for now, thank you. Is there anything *you* need?\"";
next;
menu "I might have some questions later, if you'll be here...", -,
"Thank you for the offer, really, but I'm fine.", -;
mes "[Doctor]";
mes "";
mes "\"Well, I'll still be gathering information myself, so perhaps we'll cross paths again.\"";
close;
L_expensive_lifestone:
mes "[Doctor]";
mes "";
mes "\"Oh, excuse me. I'm not sure about your currency, but I don't think I can cover that right now. Please let me know if you change your mind.\"";
close;
L_only_lifestone:
mes "[Doctor]";
mes "";
mes "\"Yes... uh, well, I suppose if you wanted I could pay you for it. Let me see now...\"";
next;
mes "\"Here we are! It's all I've got on me at the moment, I'm afraid.\"";
getitem "StrangeCoin", 1;
next;
menu
"Is there anything else you need?", L_help_lifestone,
"Alright then. Bye!", -;
close;
L_offer_lifestone:
if (countitem("LifeStone") < 1)
goto L_lost_lifestone;
delitem "LifeStone", 1;
callsub S_Update_Helped;
if (countitem("LifeStone") == 0)
goto L_one_lifestone;
mes "[Doctor]";
mes "";
mes "\"Wonderful! What a spot of luck it was you coming here with this. You don't know how much you deserve thanks.\"";
mes "He takes your lifestone and places it into a curious device, then waves the device up and down the tree. It makes a number of beeping sounds, and the Doctor seems happy.";
next;
goto L_given_lifestone;
L_one_lifestone:
mes "[Doctor]";
mes "";
mes "\"Wonderful! What a spot of luck it was you coming here with this. You don't know how much you deserve thanks.\"";
mes "He takes your lifestone and places it into a curious device, then waves the device up and down the tree. It makes a number of beeping sounds, and the Doctor seems happy.";
next;
menu
"Is there anything else you need?", L_help_lifestone,
"That was the only one I had, I'm glad it helped.", L_only_lifestone,
"Alright then. Bye!", -;
close;
L_lost_lifestone:
mes "[Doctor]";
mes "";
mes "\"Brilliant! Fantastic! This will surely help... Wait, I thought you had a lifestone for me? Well, maybe you can come by again when you do.\"";
close;
L_given_lifestone:
menu
"Is there anything else you need?", L_help_lifestone,
"Alright then. Bye!", -;
close;
L_At_Tree_Helped:
mes "[Doctor]";
mes "";
mes "\"Fantastic! Your help with this tree is much appreciated. I believe we are that much closer to solving this mystery.\"";
next;
mes "[Doctor]";
mes "";
mes "\"I suspect there is still much to do. Please feel free to look around, there might be more information to gather elsewhere.\"";
next;
menu "Okay, I'll see you around!", -,
"Actually, I'd like to go home now. Any chance you could help?", L_Warning;
close;
// ===================================================================
// Helper portions, duplicated in each script for want of time, sorry.
// ===================================================================
// The player has defeated the invader and helped enough times.
L_Return_Ready_Optional:
if (!(~(Easter_2010_QuestState >> E10_HELPED_DOCTOR_SHIFT) & E10_HELPED_DOCTOR_MASK) || ((Easter_2010_QuestState >> E10_HELPED_DOCTOR_TREE_SHIFT) & E10_HELPED_DOCTOR_TREE_MASK))
goto L_Return_Ready;
// Player can help one more time, if so desired.
mes "[Doctor]";
mes "";
mes "\"Well... this has been quite an adventure, hasn't it? I'd say it's about timey--er, time for me to go, but I think I can stick around for a little while longer to tie up some loose ends for myself.\"";
next;
mes "[Doctor]";
mes "";
mes "\"Oh, did you want to help again?\"";
next;
menu "Sure, that sounds good", L_At_Tree,
"Hm, I can't right now, but maybe later.", L_Return_Ready,
"I was looking for a way to go home.", L_Return_Capable,
"No, sorry, I don't think so.", L_Return_Ready;
close;
// Player has done "everything" to do in this world, just talking to the Doctor.
L_Return_Ready:
set @parting$, "!";
if (strcharinfo(0) == "Alonso" || strcharinfo(0) == "AlOnS") set @parting$, ", Alonso!";
mes "[Doctor]";
mes "";
mes "\"Well, you have been absolutely brilliant! Brilliant! Very impressive.\" He smiles kindly and shakes your hand. \"It has been a pleasure. Now for the next adventure. Allons-y" + @parting$ + "\"";
close;
L_Defeat_Invader:
mes "[Doctor]";
mes "";
mes "\"Ah-ha! It's nice to see you again. How goes the battle?\"";
next;
menu "I'm having a hard time, actually. I'd like to go home...", -,
"Regrouping now for the next encounter, actually.", L_Encourage;
goto L_Warning;
L_Encourage:
mes "[Doctor]";
mes "";
mes "\"Oh, well, I think you'll prevail in the end! If you'll excuse me, I still have some things to see to.\"";
close;
L_MidReward:
if (((Easter_2010_QuestState >> E10_FLAG_MID_REWARD_SHIFT) & E10_FLAG_MID_REWARD_MASK)) close;
mes "[Doctor]";
mes "";
mes "\"Fantastic! You have really been quite helpful.\"";
next;
mes "[Doctor]";
mes "";
mes "\"Er, now that I think about it, perhaps I have something you'd be interested in.\"";
next;
mes "[Doctor]";
mes "";
mes "\"While visiting another dimension--hm, as a matter of fact, it was quite like this one. But their choices in the past seem to have differed from the ones here...\"";
next;
mes "[Doctor]";
mes "";
mes "The Doctor reflects on his words. \"Interesting how things turn out. Well, I now have a lot of these Valentine's Glasses, if you'd like a pair.\"";
next;
getinventorylist;
if (@inventorylist_count == 100)
goto L_MidReward_NoRoom;
mes "[Doctor]";
mes "";
mes "He hands you the glasses.";
mes "\"They're not too brainy, or suited for detecting background radiation, but they are charming.\"";
set Easter_2010_QuestState, Easter_2010_QuestState & ~(E10_FLAG_MID_REWARD_MASK << E10_FLAG_MID_REWARD_SHIFT) | (E10_FLAG_MID_REWARD << E10_FLAG_MID_REWARD_SHIFT);
getitem E10_MIDREWARD_ID, 1;
close;
L_MidReward_NoRoom:
mes "[Doctor]";
mes "";
mes "\"Oh, I don't think you have room for these. Well, I suppose I'll hold on to them for now.\"";
close;
// Warning about the potential perils ahead, but the player must still want to abort the quest.
L_Warning:
mes "[Doctor]";
mes "";
mes "\"There is no doubt in my mind that what awaits us is both powerful and dangerous, to say the least.\"";
next;
mes "[Doctor]";
mes "";
mes "\"If this... destruction, this disregard for life isn't an indication, what is?\"";
mes "He takes a moment, searching your face.";
next;
mes "[Doctor]";
mes "";
if (((Easter_2010_QuestState >> E10_HELPED_DOCTOR_SHIFT) & E10_HELPED_DOCTOR_MASK))
mes "\"I do appreciate your help thus far, really. And I did look forward to working with you again in putting an end to this devastation.\"";
if (!((Easter_2010_QuestState >> E10_HELPED_DOCTOR_SHIFT) & E10_HELPED_DOCTOR_MASK))
mes "\"Despite the danger, I think pressing on would certainly be a brave choice.\"";
next;
mes "[Doctor]";
mes "";
mes "\"But if you were to leave now, I'm afraid it would be impossible to return...\"";
mes "He pauses again. \"There is still time for you to turn back now, while it's relatively easy.\"";
next;
menu "N-no, I-I think I will continue... Yes, I'm ready!", -,
"Now that you mention it, maybe I'd better leave now while I can.", L_Turn_Back,
"Um, could I have a minute to think it over?", -;
close;
L_Turn_Back:
mes "[Doctor]";
mes "";
mes "\"You really want to turn back now?\"";
next;
mes "[Doctor]";
mes "";
mes "\"I don't think there's any shame in going back. Quite the contrary. You're brave for even being here.\"";
mes "He hesitates ever so slightly, choosing his words. \"I just wanted to make sure you were certain about your decision.\"";
next;
mes "[Doctor]";
mes "";
mes "\"Once you've left, I don't see how you'll be able to return.\"";
next;
menu "On second thought, perhaps I will stick around.", -,
"No, no, I'm quite sure I want to leave.", L_Really_Return;
close;
// The player definitely wants to go back, and there's no returning.
L_Really_Return:
if ((Easter_2010_QuestState >> E10_FLAG_RETURN_READY_SHIFT) & E10_FLAG_RETURN_READY_MASK == E10_FLAG_RETURN_READY && (Easter_2010_QuestState >> E10_STATE_ROSE_SHIFT) & E10_STATE_ROSE_MASK == E10_STATE_ROSE_ROSE_COMPLETE)
goto L_Return_Capable;
mes "[Doctor]";
mes "";
mes "\"If that is what you want, then consider it done. And good luck.\"";
next;
goto L_Return_Player;
L_Return_Player:
callsub S_Helped_Count;
if (countitem("DarkPetal") == 0 && @Easter_2010_helper < 3) goto L_Difficult_Return;
set Easter_2010_QuestState, (Easter_2010_QuestState & ~(E10_STATE_ROSE_MASK << E10_STATE_ROSE_SHIFT)) | (E10_STATE_ROSE_RETURNED << E10_STATE_ROSE_SHIFT);
if (@Easter_2010_helper < 3)
delitem "DarkPetal", 1;
savepoint "009-1", 52, 40;
warp "009-1", 0, 0;
close;
L_Difficult_Return:
mes "[Doctor]";
mes "";
mes "\"Hm... you don't seem to have the thing that brought you here, that petal, that I could have used to send you back... assuming you really do want to give up.\"";
next;
mes "[Doctor]";
mes "";
mes "\"Others have been able to battle some darkness directly, which might serve as a substitute.\"";
mes "\"You could still help me here and elsewhere if you want to try to get this done once and for all, but if you want to go early you will need to fight, somehow.\"";
next;
mes "[Doctor]";
mes "";
mes "\"Though there are others helping, too. No doubt that soon enough, you'll be able to go anyway...\"";
close;
L_Return_Capable:
mes "[Doctor]";
mes "";
mes "\"Hm. Oh, it looks like you've learned how to travel between these worlds on your own. Don't you remember the way?\"";
next;
menu "Oh, you're right! It was a spell, um..." + getspellinvocation("world-shift") + " was the name!", -;
mes "[Doctor]";
mes "";
mes "\"Excellent! Though I suspect its effects will work best when you are closer to where you started.\"";
next;
mes "[Doctor]";
mes "";
mes "\"When you came to this world, where did you end up? I trust that is your origin.\"";
close;
S_Dialogue_Knows:
mes "[Doctor]";
mes "";
mes "\"Oh, hello again... hm...\"";
next;
mes "[Doctor]";
mes "";
mes @responses$[rand(getarraysize(@responses$))];
return;
S_Update_Knows:
// Working "name" for when he hasn't introduced himself (can be changed).
mes "[Mysterious Man]";
mes "";
mes @responses$[rand(getarraysize(@responses$))];
next;
set Easter_2010_QuestState, Easter_2010_QuestState & ~(E10_FLAG_KNOWS_DOCTOR_MASK << E10_FLAG_KNOWS_DOCTOR_SHIFT) | (E10_FLAG_KNOWS_DOCTOR << E10_FLAG_KNOWS_DOCTOR_SHIFT);
mes "[Doctor]";
mes "";
mes "\"Oh, excuse me,\" he gestures. \"I'm the Doctor.\"";
return;
S_Update_Helped:
set Easter_2010_QuestState, Easter_2010_QuestState & ~(E10_FLAG_HELPED_DOCTOR_TREE_MASK << E10_FLAG_HELPED_DOCTOR_TREE_SHIFT) | (E10_FLAG_HELPED_DOCTOR_TREE << E10_FLAG_HELPED_DOCTOR_TREE_SHIFT);
callsub S_Helped_Count;
if (@Easter_2010_helper == 3) set Easter_2010_QuestState, (Easter_2010_QuestState & ~(E10_STATE_ROSE_MASK << E10_STATE_ROSE_SHIFT)) | (E10_STATE_ROSE_ROSE_COMPLETE << E10_STATE_ROSE_SHIFT);
return;
S_Helped_Count:
set @Easter_2010_helper, 0;
if ((Easter_2010_QuestState >> E10_FLAG_HELPED_DOCTOR_TREE_SHIFT) & E10_FLAG_HELPED_DOCTOR_TREE_MASK == E10_FLAG_HELPED_DOCTOR_TREE)
set @Easter_2010_helper, @Easter_2010_helper + 1;
if ((Easter_2010_QuestState >> E10_FLAG_HELPED_DOCTOR_ISLAND_SHIFT) & E10_FLAG_HELPED_DOCTOR_ISLAND_MASK == E10_FLAG_HELPED_DOCTOR_ISLAND)
set @Easter_2010_helper, @Easter_2010_helper + 1;
if ((Easter_2010_QuestState >> E10_FLAG_HELPED_DOCTOR_STONES_SHIFT) & E10_FLAG_HELPED_DOCTOR_STONES_MASK == E10_FLAG_HELPED_DOCTOR_STONES)
set @Easter_2010_helper, @Easter_2010_helper + 1;
if ((Easter_2010_QuestState >> E10_FLAG_HELPED_DOCTOR_FRUIT_SHIFT) & E10_FLAG_HELPED_DOCTOR_FRUIT_MASK == E10_FLAG_HELPED_DOCTOR_FRUIT)
set @Easter_2010_helper, @Easter_2010_helper + 1;
return;
}