diff options
-rw-r--r-- | npc/re/quests/homu_s.txt | 144 | ||||
-rw-r--r-- | npc/re/quests/homun_s.txt | 1362 | ||||
-rw-r--r-- | npc/re/scripts.conf | 2 | ||||
-rw-r--r-- | src/map/atcommand.c | 2 | ||||
-rw-r--r-- | src/map/clif.c | 2 | ||||
-rw-r--r-- | src/map/homunculus.c | 22 | ||||
-rw-r--r-- | src/map/homunculus.h | 10 | ||||
-rw-r--r-- | src/map/itemdb.h | 1 | ||||
-rw-r--r-- | src/map/pc.c | 6 | ||||
-rw-r--r-- | src/map/script.c | 124 | ||||
-rw-r--r-- | src/map/skill.c | 2 | ||||
-rw-r--r-- | src/map/status.c | 2 |
12 files changed, 1474 insertions, 205 deletions
diff --git a/npc/re/quests/homu_s.txt b/npc/re/quests/homu_s.txt deleted file mode 100644 index 66e2b5c3d..000000000 --- a/npc/re/quests/homu_s.txt +++ /dev/null @@ -1,144 +0,0 @@ -//===== Hercules Script ====================================== -//= Homunculus S Quest -//===== By: ================================================== -//= Masao -//===== Current Version: ===================================== -//= 1.1 -//===== Compatible With: ===================================== -//= Hercules -//===== Description: ========================================= -//= Evolves an Homunculus which is at least Level 99 to the -//= new Homunculus S Class. -//===== Additional Comments: ================================= -//= 1.0 First Version. The actual changing dialog is currently -//= customized. [Masao] -//= 1.1 Cleaning. [Euphy] -//============================================================ - -job3_gen01,12,44,4 script Viorel#job3_gen01 542,{ - - if((Class != Job_Genetic) && (Class != Job_Genetic_T) && (Class != Job_Baby_Genetic)){ - mes "[Viorel]"; - mes "^FF4800Homunculus^000000 research requires a lot of time and funding."; - mes "However, I believe passion is the most important factor."; - next; - switch(select("End conversation.:What are you talking about?:Why are you always standing there?")) { - case 1: - mes "[Viorel]"; - mes "So long~!"; - close; - case 2: - mes "[Viorel]"; - mes "You see, ^006400Alchemists^000000 have an inquisitive nature."; - mes "People like me, especially, even think of creating life itself."; - next; - mes "[Viorel]"; - mes "You'd have to research ^FF4800Homunculus^000000 to understand."; - mes "Now, if you'll excuse me~!"; - close; - case 3: - emotion 4,0; - mes "[Viorel]"; - mes "What, is it so strange to see an Alchemist in their own lab?"; - mes "How so?"; - close; - } - } - mes "[Viorel]"; - mes "Hello "+strcharinfo(0)+","; - mes "what can I do for a fellow Alchemist like you?"; - next; - switch(select("I want to evolve my Homunculus:About Homunculus S:Cancel")){ - case 1: - mes "[Viorel]"; - if(!getskilllv("AM_BIOETHICS")){ - mes "I'm sorry, but you must know the Skill Bioethics! Otherwise I can't let your Homunculus evolve into a Homunculus S."; - close; - } - if(!gethominfo(1)){ - mes "You don't even have a Homunculus!"; - close; - } - if(gethominfo(1) < 6009){ - mes "You must have an evolved Homunculus, or you can't turn it into the new Homunculus S."; - close; - } - if(gethominfo(6) < 99){ - mes "Your Homunculus must be level 99 to evolve into a Homuculus S!"; - mes "Come back after you've trained your Homunculus a little bit more."; - close; - } - if(gethominfo(1) == 6048 || gethominfo(1) == 6049 || gethominfo(1) == 6050 || gethominfo(1) == 6051 || gethominfo(1) == 6052){ - mes "Your Homunculus S looks great!"; - mes "I hope you will experience many great adventures with it!"; - close; - } - mes "Great, it seems like you're all ready to get your Homunculus to the next level!"; - next; - mes "[Viorel]"; - mes "Now you can either directly change your Homunculus to a random Homunculus S or you can donate a little fee of 50,000z"; - mes "to the Alchemist Guild. For this you'll be able to change your Homunculus into your desired Homunculus S Class!"; - mes "So, what do you think?"; - next; - switch(Select("I want to donate.:I don't want to donate.:Cancel")){ - case 1: - if(Zeny < 50000){ - mes "[Viorel]"; - mes "Haha, nice try my friend! But you don't even have the 50,000z to donate!"; - mes "Come back if you have the Zeny."; - close; - } - mes "[Viorel]"; - mes "Alright, now please tell me which Homunculus you'd like to have:"; - next; - set .@i, select("Eira:Bayeri:Sera:Dieter:Elanor:Cancel"); - if (.@i == 6) { - mes "[Viorel]"; - mes "So long~!"; - close; - } - case 2: - mes "[Viorel]"; - mes "Ok, it's all set! Now just give me a moment!"; - next; - mes "[Viorel]"; - mes "Abra..."; - next; - mes "[Viorel]"; - mes "Kadabra..."; - next; - mes "[Viorel]"; - mes "Simsala!"; - mes "..."; - mes "Oh, sorry... wrong game!"; - next; - mes "[Viorel]"; - mes "Here you go! Your new Homunculus S!"; - if (.@i) { - hommutate 6047+.@i; - set Zeny,Zeny - 50000; - } - else hommutate; - close; - case 3: - mes "[Viorel]"; - mes "So long~!"; - close; - } - case 2: - mes "[Viorel]"; - mes "The Homunculus S are the new and improved versions of the current Homunculus you know."; - mes "These new Homunculus have been made because the monsters in our world keep getting stronger and"; - mes "stronger, and our current Homunculus are just not able to keep up with them anymore."; - next; - mes "[Viorel]"; - mes "But since we're Alchemists and we don't want to abandon our precious Homunculus, we've discovered a way"; - mes "to improve their skills and strength in order to keep them by our side, and joining us once more"; - mes "in battle! Isn't that great?"; - close; - case 3: - mes "[Viorel]"; - mes "So long~!"; - close; - } -} diff --git a/npc/re/quests/homun_s.txt b/npc/re/quests/homun_s.txt new file mode 100644 index 000000000..66b7537c9 --- /dev/null +++ b/npc/re/quests/homun_s.txt @@ -0,0 +1,1362 @@ +//===== Hercules Script ====================================== +//= Homunculus S Quest +//===== By: ================================================== +//= Masao +//===== Current Version: ===================================== +//= 1.2 +//===== Compatible With: ===================================== +//= Hercules +//===== Description: ========================================= +//= Evolves an Homunculus which is at least Level 99 to the +//= new Homunculus S Class. +//===== Additional Comments: ================================= +//= 1.0 First Version. The actual changing dialog is currently +//= customized. [Masao] +//= 1.1 Cleaning. [Euphy] +//= 1.2 Replaced with official script. [Euphy] +//============================================================ + +// Main NPCs +//============================================================ +job3_gen01,12,44,3 script Viorel#job3_gen01 542,{ + if (countitem(6415)) { + if (Class == Job_Genetic || Class == Job_Genetic_T || Class == Job_Baby_Genetic) { + disable_items; + if (checkquest(4159) == -1 && checkquest(4160) == -1) { + mes "[Viorel]"; + mes "Why are you here?"; + mes "Shouldn't you be at ^005DFFJeyna^000000's house?"; + close2; + for(set .@i,4154; .@i<=4160; set .@i,.@i+1) { + if (checkquest(.@i) > -1) + erasequest .@i; + } + setquest 4154; + setquest 4159; + morphembryo; + if (countitem(6415) == 0) + getitem 6415,1; //Strange_Embryo + else if (countitem(6415) > 1) + delitem 6415, (countitem(6415) - 1); //Strange_Embryo + warp "que_house_s",63,41; + end; + } + enable_items; + } else if (Class == Job_Novice_High || Class == Job_Merchant_High || Class == Job_Alchemist || Class == Job_Creator) { + emotion e_what; + mes "[Viorel]"; + mes "I don't know what's going on, but the way I remember it you were supposed to be qualified to research ^FF4800Homunculus^000000."; + next; + mes "[Viorel]"; + mes "Whatever the reason, you're not able to continue the research on ^FF4800Homunculus^000000."; + mes "Come back after you become a ^005DFFGenetic^000000 and have obtained a ^0000FFBioethics^000000."; + close; + } else { + delitem 6415, countitem(6415); //Strange_Embryo + mes "[Viorel]"; + mes "Wait, that embryo you have seems a little strange."; + next; + mes "[Viorel]"; + mes "Unless you have a job researching ^FF4800Homunculus^000000...."; + mes "It will be of no help to you what so ever."; + next; + mes "[Viorel]"; + mes "I'm in charge of managing ^0000FFStrange Embryo^000000 so I'll take care of that for you."; + mes "No offense, and I'm not doing anything bad here."; + close; + } + } + if ((Class == Job_Genetic || Class == Job_Genetic_T || Class == Job_Baby_Genetic) && (checkquest(4154) > -1)) { + if ((checkquest(4155) > -1) || (checkquest(4160) > -1)) { + mes "[Viorel]"; + mes "Weather's great."; + next; + callsub L_CheckHomunculus; + mes "[Viorel]"; + mes "Ready to go to my house?"; + next; + switch(select("Go to ^005DFFViorel^000000's house.:Don't go.")) { + case 1: + mes "[Viorel]"; + mes "Good choice."; + mes "Now, close your eyes for a second..."; + close2; + warp "que_house_s",19,42; + end; + case 2: + mes "[Viorel]"; + mes "Come back when you're ready."; + mes "You must come with the ^FF4800Homunculus^000000."; + close; + } + } else { + mes "[Viorel]"; + mes "Why are you here?"; + mes "Shouldn't you be at ^005DFFJeyna^000000's house?"; + next; + callsub L_CheckHomunculus; + mes "[Viorel]"; + mes "Now, ready to go to ^005DFFJeyna^000000?"; + next; + switch(select("Go to ^005DFFJeyna^000000's room.:Don't go.")) { + case 1: + mes "[Viorel]"; + mes "Good choice."; + mes "Now, close your eyes for a second..."; + close2; + warp "que_house_s",63,41; + end; + case 2: + mes "[Viorel]"; + mes "Come back when you're ready."; + mes "You must come with the ^FF4800Homunculus^000000."; + close; + } + } + } + if (BaseJob == Job_Merchant) { + mes "[Viorel]"; + mes "I used to be a merchant once, just like you."; + mes "I'm researching on ^FF4800Homunculus^000000."; + next; + mes "[Viorel]"; + mes "If you're interested in ^FF4800Homunculus^000000, become an ^005DFFAlchemist^000000 or a ^005DFFCreator^000000."; + close; + } else if (BaseJob == Job_Alchemist && Class < Job_Genetic) { + mes "[Viorel]"; + mes "I've spent lots of time and energy on Homunculus."; + mes "If you feel like you're at a dead end, come back next time with a ^FF4800Homunculus^000000."; + next; + mes "[Viorel]"; + mes "Oh. Of course you need to have the suitable potentials. You could probably prove yourself once you become a ^FF4800Genetic^000000."; + close; + } else if (Class == Job_Genetic || Class == Job_Genetic_T || Class == Job_Baby_Genetic) { + if (gethominfo(6) >= 99 && (gethominfo(1) >= 6009 && gethominfo(1) <= 6016)) { // Level 99+ evolved Homunculus + mes "[Viorel]"; + mes "Oh, great~!"; + mes "You have a ^FF4800Homunculus^000000."; + mes "With passion invested in its research we can make them better."; + next; + mes "[Viorel]"; + mes "I must speak to you in private. Would you mind going to my house with me?"; + next; + switch(select("Go to ^005DFFViorel^000000's home.:Stay here.")) { + case 1: + mes "[Viorel]"; + mes "Good choice."; + mes "Now, close your eyes for a second..."; + close2; + setquest 4154; + setquest 4155; + warp "que_house_s",19,42; + end; + case 2: + mes "[Viorel]"; + mes "If you feel like you're at a dead end, come back next time with a ^FF4800Homunculus^000000."; + close; + } + } else if (gethominfo(6) >= 99 && (gethominfo(1) >= 6048 && gethominfo(1) <= 6052)) { // Level 99+ mutated Homunculus-S + mes "[Viorel]"; + mes "Hello again."; + mes "Perhaps you may be interested"; + mes "in the newly created ^FF4800Homunculus^000000,"; + mes "born from the new ^006400Homunculus Mutation System^000000?"; + next; + switch(select("Nope. Good bye.:Please, I'm busy.:That's exactly what I wanted to hear.:Why are you always standing there?")) { + case 1: + emotion e_heh; + mes "[Viorel]"; + mes "Okay."; + mes "Good seeing you."; + mes "Good bye then~!"; + close; + case 2: + emotion e_omg; + mes "[Viorel]"; + mes "!!!!"; + mes "I... I see."; + mes "I thought you were here to see me."; + close; + case 3: + emotion e_ic; + mes "[Viorel]"; + mes "Just as I thought."; + mes "Let's have a look at the notes my dear friend Jeyna left."; + next; + playbgm "30.mp3"; // One Step Closer + callfunc "F_HomMutateInfo","[Memo Pad Notes]"; + mes "[Viorel]"; + mes "Hmm."; + mes "Well, that's all there is to it."; + mes "It's up to you to find out more."; + close2; + playbgm "08.mp3"; // Theme of Prontera + end; + case 4: + emotion e_swt; + mes "[Viorel]"; + mes "No, I do not stand here every day."; + mes "But why do YOU stand there every day?"; + next; + mes "[Viorel]"; + mes "What?"; + mes "No, the way I see it"; + mes "you seem to be here every time I'm here."; + close; + } + } else { + if (gethominfo(1) >= 6009) { // Evolved Homunculus + mes "[Viorel]"; + mes "Hmm, you seem to have a special bond with your ^FF4800Homunculus^000000."; + next; + mes "[Viorel]"; + mes "Come back to me when that ^FF4800Homunculus^000000 reaches ^0000FFlevel 99^000000."; + close; + } else { + mes "[Viorel]"; + mes "You do not yet possess an evolved ^FF4800Homunculus^000000..."; + mes "As you may well know about evolution:"; + next; + mes "[Viorel]"; + mes "Using the ^0000FFStone of Sage^000000 when intimacy level is above ^006400Intimate^000000, the ^FF4800Homunculus^000000 goes through ^006400Evolution^000000."; + close; + } + } + } + mes "[Viorel]"; + mes "^FF4800Homunculus^000000 research requires a lot of time and funding."; + mes "However, I believe passion is the most important factor."; + next; + switch(select("End conversation.:What are you talking about?:Why are you always standing there?")) { + case 1: + mes "[Viorel]"; + mes "So long~!"; + close; + case 2: + mes "[Viorel]"; + mes "You see, ^006400Alchemists^000000 have an inquisitive nature."; + mes "People like me, especially, even think of creating life itself."; + next; + mes "[Viorel]"; + mes "You'd have to research ^FF4800Homunculus^000000 to understand."; + mes "Now, if you'll excuse me~!"; + close; + case 3: + emotion e_swt; + mes "[Viorel]"; + mes "What, is it so strange to see an Alchemist in their own lab?"; + mes "How so?"; + close; + } + end; +L_CheckHomunculus: + if (gethominfo(6) < 99 || (gethominfo(1) < 6009 || gethominfo(1) > 6016)) { // Not level 99+ evolved Homunculus + mes "[Viorel]"; + mes "Huh?"; + mes "Where's the ^FF4800Homunculus^000000 you used to have?"; + mes "Perhaps I've mistaken it for something else..."; + next; + mes "[Viorel]"; + mes "......."; + mes " "; + mes "(Seems to be thinking about something.)"; + next; + emotion e_heh; + mes "[Viorel]"; + mes "Ha ha~"; + mes "I think I've mistaken you for someone else."; + mes "If you'll excuse me."; + close; + } + return; +} + +que_house_s,24,47,3 script Viorel#homun_s 542,{ + if (checkquest(4155) > -1) { + emotion e_dum; + mes "[Viorel]"; + mes "Good."; + mes "I see that you mean business."; + next; + playbgm "33.mp3"; // Yuna Song + mes "[Viorel]"; + mes "Maybe you'll agree."; + mes "Currently, your ^FF4800Homunculus^000000 is not in its perfect state."; + next; + mes "[Viorel]"; + mes "These days, studies on the growth of the ^FF4800Homunculus^000000 are actively taking place."; + mes "But, I do believe that I have found something special."; + next; + mes "[Viorel]"; + mes "In order to break the current limitations of the ^FF4800Homunculus^000000, mutations need to happen."; + next; + switch(select("Like, biological experiments...?!:Well, yeah, naturally.:I don't want to hurt my Homunculus!")) { + case 1: + emotion e_swt2; + mes "[Viorel]"; + mes "Don't look so surprised."; + mes "Ethics in biology are kind of blurry right now, right?"; + mes "I mean..."; + next; + mes "[Viorel]"; + mes "It's my duty to study the true potential of the ^FF4800Homunculus^000000."; + next; + mes "[Viorel]"; + mes "So far, Homunculus haven't demonstrated their full potential, but I know that I am close to a breakthrough."; + next; + break; + case 2: + emotion e_sigh; + mes "[Viorel]"; + mes "Yes."; + mes "I'm glad you're not upset."; + mes "Mutation,"; + mes "a word that sparks evil in the minds of the ordinary,"; + mes "which made my research very difficult to proceed with."; + next; + mes "[Viorel]"; + mes "Do you remember?"; + mes "^005DFFKellasus^000000 of ^8B4513Lighthalzen^000000, the pioneer of ^FF4800Homunculus^000000 research."; + next; + mes "[Viorel]"; + mes "I believe that this research fulfills the promise made with ^005DFFKellasus^000000, the giver of knowledge and belief."; + next; + break; + case 3: + emotion e_swt; + mes "[Viorel]"; + mes "I understand your concern."; + mes "But I want to assure you that this Mutation does not harm or hurt your ^FF4800Homunculus^000000."; + next; + mes "[Viorel]"; + mes "On the contrary, the ^FF4800Homunculus^000000 of today are in pain from imperfection, unable to live up to their supposed potentials."; + mes "Moreover, those ^FF4800Homunculus^000000 were often abandoned."; + next; + mes "[Viorel]"; + mes "Don't get me wrong, I study the ^FF4800Homunculus^000000 because I love them."; + next; + break; + } + mes "[Viorel]"; + mes "Well, by the way..."; + mes "I have found this new mutation to be quite stable."; + next; + mes "[Viorel]"; + mes "^006400The technology exists,"; + mes "and they will likely have new"; + mes "skills when mutated...^000000"; + next; + mes "[Viorel]"; + mes "The minor side effect..."; + mes "^006400Their appearance will change^000000."; + mes "But I think you'll find that pretty satisfying."; + next; + mes "[Viorel]"; + mes "I quote from ^005DFFKassibian^000000, an expert in ^FF4800Homunculus^000000 techniques,"; + mes "^006400The truth is not in a single form~!^000000"; + mes "Ha ha."; + next; + emotion e_flash; + mes "[Viorel]"; + mes "I know it's a little abrupt, but..."; + mes "How about changing your ^FF4800Homunculus^000000 into something incredible with my marvelous achievement, the ^006400Homunculus Mutation System^000000?"; + next; + switch(select("Explore the ^006400Homunculus Mutation System^000000.:Cancel.")) { + case 1: + emotion e_no1; + mes "[Viorel]"; + mes "Good choice."; + mes "Success lurks outside the box of conventional thinking, right?"; + next; + mes "[Viorel]"; + mes "The first person to help with the research is ^005DFFJeyna^000000."; + mes "I'll send you to ^005DFFJeyna^000000."; + mes "There, you'll learn more about the new ^0000FFHomunculus^000000."; + close2; + setquest 4156; + erasequest 4155; + warp "que_house_s",63,41; + end; + case 2: + emotion e_dots; + mes "[Viorel]"; + mes "I don't see why you hesitate."; + mes "I am not trying to deceive you."; + mes "Maybe you need some time to think about it?"; + next; + switch(select("Think about it.:I'm just going to walk away.")) { + case 1: + mes "[Viorel]"; + mes "We'll talk in a bit then."; + close; + case 2: + emotion e_otl; + mes "[Viorel]"; + mes "Shame."; + mes "However, I respect your opinion."; + mes "I'll send you back to the ^8B4513Laboratory^000000."; + close2; + erasequest 4154; + erasequest 4155; + warp "job3_gen01",12,47; + end; + } + } + } else if (checkquest(4160) > -1) { + playbgm "33.mp3"; // Yuna Song + mes "[Viorel]"; + mes "The ^FF4800Homunculus^000000 I saw before has returned to its ^0000FFembryo^000000 state."; + mes "A little strange, but..."; + mes "You don't have to worry about it."; + next; + mes "[Viorel]"; + mes "By the way..."; + mes "I forgot to tell you something."; + mes "In order to stabilize the Mutation process, I need some materials first."; + next; + mes "[Viorel]"; + mes "Fortunately, you don't have to find them yourself because I have them here already.."; + mes "But, I'll need ^FF000050,000 zeny^000000, you know, as a service fee."; + next; + mes "[Viorel]"; + mes "I wish that I could do it for free but I'm not exactly made of money, you know."; + mes "That and I lack any investors to support my research at the moment."; + next; + mes "[Viorel]"; + mes "In fact, if I had enough zeny to continue my research, then I could solve a lot of my problems..."; + next; + mes "[Viorel]"; + mes "Anyways, you can try to do this with or without the stabilization process. It's all up to you."; + next; + mes "[Viorel]"; + mes "If you choose the unstable"; + mes "mutation, I can't guarentee what kind of Homunculus you're going to get."; + mes "Anyways, it's up to you."; + next; + switch(select("Mutation stabilization (50,000 zeny):Unstable mutation")) { + case 1: + if (Zeny < 50000) { + mes "[Viorel]"; + mes "I don't think you have ^FF000050 thousand Zeny^000000 with you right now."; + mes "Please bring enough Zeny."; + mes "I'll be waiting."; + mes "Want me to send you back to the ^8B4513Laboratory^000000?"; + next; + switch(select("No thanks.:Yes. Send me back to the Lab.")) { + case 1: + mes "[Viorel]"; + mes "Alright."; + mes "I'll see you in a bit."; + close; + case 2: + mes "[Viorel]"; + mes "Alright."; + mes "I'll be waiting at the ^8B4513Laboratory^000000."; + close2; + warp "job3_gen01",12,47; + end; + } + } + emotion e_no1; + playbgm "19.mp3"; // Under the Ground + mes "[Viorel]"; + mes "Good choice."; + mes "Choose from the different types of ^0000FFHomunculus^000000."; + next; + switch(select("Eira:Sera:Dieter:Bayeri:Eleanor")) { + case 1: + cutin "Mer_Eira_Card",3; + set .@Homunculus,6048; //MER_EIRA + break; + case 2: + cutin "Mer_Sera_Card",3; + set .@Homunculus,6050; //MER_SERA + break; + case 3: + cutin "Mer_Dieter_Card",3; + set .@Homunculus,6051; //MER_DIETER + break; + case 4: + cutin "Mer_Bayeri_Card",3; + set .@Homunculus,6049; //MER_BAYERI + break; + case 5: + cutin "Mer_Eleanor_Card",3; + set .@Homunculus,6052; //MER_ELEANOR + break; + } + mes "[Viorel]"; + mes "Are you sure?"; + next; + if(select("Yes.:No.") == 2) { + cutin "",255; + playbgm "33.mp3"; // Yuna Song + mes "[Viorel]"; + mes "I see."; + mes "Give it more time to think."; + close; + } + cutin "",255; + mes "[Viorel]"; + mes "Excellent!"; + mes "Let's get on with it."; + next; + specialeffect2 EF_BASH; + mes "[Viorel]"; + mes "Now focus~!"; + mes "You... need..."; + mes "... concentration."; + next; + specialeffect2 EF_PROVIDENCE; + mes "[Viorel]"; + mes "Good. Almost done!"; + next; + specialeffect2 EF_SUI_EXPLOSION; + set Zeny, Zeny - 50000; + hommutate .@Homunculus; + break; + case 2: + emotion e_hmm; + mes "[Viorel]"; + mes "So, your choice is the Unstable Mutation Process."; + mes "You believe in destiny?"; + mes "Seriously..."; + mes "Do you really wish to proceed"; + mes "with the process of random outcome?"; + next; + if(select("Go ahead. (Random Mutation):Cancel.") == 2) { + playbgm "33.mp3"; // Yuna Song + mes "[Viorel]"; + mes "I see."; + mes "Give it more time to think."; + close; + } + emotion e_dots; + mes "[Viorel]"; + mes "Hmm..."; + mes "The exploration of knowledge"; + mes "is full of surprises."; + mes "......."; + next; + emotion e_heh; + mes "[Viorel]"; + mes "Ha ha."; + mes "Hey, I feel like a Blacksmith!"; + mes "Now let's get on with it."; + next; + specialeffect2 EF_BASH; + mes "[Viorel]"; + mes "Now focus~!"; + mes "You... need..."; + mes "... concentration."; + next; + specialeffect2 EF_PRESSURE; + mes "[Viorel]"; + mes "Concentrate a little more!"; + next; + specialeffect2 EF_PROVIDENCE; + mes "[Viorel]"; + mes "Good. Almost done!"; + next; + specialeffect2 EF_SUI_EXPLOSION; + hommutate; + break; + } + erasequest 4160; + erasequest 4154; + emotion e_ho; + playbgm "64.mp3"; // One Fine Day + mes "[Viorel]"; + mes "Okay, Mutation Complete."; + mes "Phew... Didn't skip a heartbeat, did you?"; + next; + mes "[Viorel]"; + mes "Remember what ^005DFFKellasus^000000 said?"; + mes "To the doorstep of the truth..."; + mes "We must see for ourselves"; + mes "the path that leads to it."; + next; + mes "[Viorel]"; + mes "^0000FF" + strcharinfo(0) + "^000000,"; + mes "I haven't known you"; + mes "for a very long time,"; + mes "but I get the feeling that"; + mes "you'll achieve great things."; + next; + mes "[Viorel]"; + mes "Good luck on you adventures."; + mes "I hope that your new ^FF4800Homunculus^000000 will excel under your care."; + next; + mes "[Viorel]"; + mes "And don't you forget."; + mes "Our research"; + mes "has only just begun~!"; + close; + } else { + for(set .@i,4154; .@i<=4160; set .@i,.@i+1) { + if (checkquest(.@i) > -1) + erasequest .@i; + } + mes "[Viorel]"; + mes "Now that all the work is done, I ask you to take your leave."; + mes "I need to recuperate."; + close2; + warp "job3_gen01",12,47; + end; + } +} + +que_house_s,80,42,3 script Jeyna#homun_s 558,{ + if (checkquest(4156) > -1) { + playbgm "28.mp3"; // You're in Ruins + emotion e_gasp; + mes "[Jeyna]"; + mes "Welcome."; + mes "I just got word from ^005DFFViorel^000000 that you were coming."; + next; + emotion e_hmm; + mes "[Jeyna]"; + mes "By the way..."; + mes "Did he convince you to do something...?"; + mes "He does have a way with words."; + next; + mes "[Jeyna]"; + mes "He needs them because Alchemists are such awkward people."; + emotion e_sigh; + next; + mes "[Jeyna]"; + mes "Anyways~"; + mes "^0000FF"+strcharinfo(0)+"^000000 and ^005DFFViorel^000000 seem like two peas in a pod."; + next; + emotion e_heh; + mes "[Jeyna]"; + mes "Hahaha~ No offense."; + mes "I think it's a good thing."; + mes "Oh, yes."; + mes "You're here for the ^FF4800Homunculus^000000 Mutation."; + next; + mes "[Jeyna]"; + mes "While I do some preparation,"; + mes "why don't you take a look at that board?"; + mes "The ^006400Homunculus Mutation System^000000 has ^0000FF5 different types^000000 of new mutations."; + next; + emotion e_gasp,0,"Magic Board#homun_s"; + mes "[Jeyna]"; + mes "Your ^FF4800Homunculus^000000 can mutate into any of the 5 different forms."; + next; + emotion e_ic; + mes "[Jeyna]"; + mes "Let's see..."; + mes "The ^006400Homunculus Mutation System^000000 includes new evolutions of the normal ^0000FFHomunculus^000000."; + mes "After they mutate, all previously learned skills will also remain."; + next; + mes "[Jeyna]"; + mes "In other words..."; + mes "Even if you change the magic wielder ^FF4800Vanilmirth^000000 to a fighter type,"; + mes "skills such as Caprice will be"; + mes "^006400retained and usable even after Mutation^000000."; + next; + emotion e_gasp,0,"Magic Board#homun_s"; + mes "[Jeyna]"; + mes "Take a look at the Magic Board behind me and decide for yourself."; + close2; + setquest 4157; + erasequest 4156; + end; + } else if (checkquest(4157) > -1) { + emotion e_what; + mes "[Jeyna]"; + mes "Take a look at the board behind me, on the right."; + close2; + emotion e_gasp,0,"Magic Board#homun_s"; + end; + } else if (checkquest(4158) > -1) { + playbgm "28.mp3"; // You're in Ruins + disable_items; + mes "[Jeyna]"; + mes "Okay, I'm ready too."; + mes "In order to revert the process now, I need the Homunculus in its embryo form."; + next; + callsub L_CheckHomunculus; + if (checkweight(6415,1) == 0) { + mes "[Jeyna]"; + mes "But,"; + mes "You don't have enough space to carry an ^0000FFembryo^000000."; + mes "Please come back with enough space in your bag."; + next; + mes "[Jeyna]"; + mes "Please return to the ^8B4513Laboratory^000000."; + mes "You can find ^005DFFViorel^000000 at the ^8B4513Laboratory^000000 once you empty your bag."; + next; + mes "[Jeyna]"; + mes "When you're done with emptying your bag, ask ^005DFFViorel^000000 to send you back here."; + mes "Go on and empty your bag~!"; + close2; + warp "job3_gen01",12,47; + end; + } + mes "[Jeyna]"; + mes "Now's about time for a decision."; + mes "To go through the Mutation to the new ^0000FFHomunculus^000000 with the Homunculus Mutation System,"; + mes "you need to go through the process of regression to turn the Homunculus back to its ^0000FFembryo^000000 state."; + next; + mes "[Jeyna]"; + mes "And..."; + mes "^006400You cannot use the ability Call Homunculus until the process is complete.^000000"; + mes "It won't take long, so don't wander off."; + next; + mes "[Jeyna]"; + mes "So, please decide."; + mes "Do you want to proceed with the new ^0000FFHomunculus Mutation System^000000?"; + next; + switch(select("Yes, I do.:I need to think more.")) { + case 1: + if (checkhomcall() == 1) { + mes "[Jeyna]"; + mes "Oh, wait a minute."; + mes "To proceed with the Mutation, you need to wake up the Homunculus from the state of Vaporization."; + next; + mes "[Jeyna]"; + mes "Come back after you've done that."; + close; + } + emotion e_no1; + mes "[Jeyna]"; + mes "Good thinking."; + mes "It is unacceptable for Alchemists like us to fear challenge."; + next; + playbgm "01.mp3"; // Title + mes "[Jeyna]"; + mes "Now I need you to focus."; + next; + specialeffect2 EF_ABSORBSPIRITS; + mes "[Jeyna]"; + mes "We need to..."; + mes "Stabilize a little more."; + mes "......."; + next; + specialeffect2 EF_CURE; + mes "[Jeyna]"; + mes "In a few moments, the ^FF4800Homunculus^000000 will return to its embryo state."; + next; + specialeffect2 EF_HOLYHIT; + mes "[Jeyna]"; + mes "Into a special embryo..."; + next; + callsub L_CheckHomunculus; + specialeffect2 EF_BLESSING; + morphembryo; + setquest 4159; + erasequest 4158; + emotion e_ho; + mes "[Jeyna]"; + mes "Phew~ All done."; + mes "Hmm, its state is a little strange."; + next; + emotion e_heh; + mes "[Jeyna]"; + mes "I guess it'll be just fine."; + mes "Don't lose that ^0000FFStrange Embryo^000000."; + mes "Also..."; + next; + mes "[Jeyna]"; + mes "Don't do anything like changing jobs or anything like that before the process is over."; + mes "If so, you, ^0000FF"+strcharinfo(0)+"^000000 might lose all the abilities you have over the Homunculus."; + next; + mes "[Jeyna]"; + mes "All that concentration made me tired."; + mes "I'll just take a glass of water."; + close; + case 2: + playbgm "28.mp3"; // You're in Ruins + emotion e_sigh; + mes "[Jeyna]"; + mes "Maybe I shouldn't have asked in the first place."; + close; + } + } else if (checkquest(4159) > -1 || checkquest(4160) > -1) { + playbgm "28.mp3"; // You're in Ruins + mes "[Jeyna]"; + mes "^005DFFViorel^000000 will finish the mutation process."; + mes "Now it's my time to say good bye."; + next; + mes "[Jeyna]"; + mes "It was short, but it was nice to meet you."; + mes "We'll see each other again some time."; + next; + mes "[Jeyna]"; + mes "Best of luck~!"; + close2; + setquest 4160; + erasequest 4159; + warp "que_house_s",19,42; + end; + } else { + if (checkquest(4154) > -1) + erasequest 4154; + mes "[Jeyna]"; + mes "Hey, how did you get in here?"; + mes "Please get out. I'm changing~!"; + close2; + warp "job3_gen01",12,47; + end; + } + end; +L_CheckHomunculus: + if (gethominfo(6) < 99 || (gethominfo(1) < 6009 || gethominfo(1) > 6016)) { // Not level 99+ evolved Homunculus + mes "[Jeyna]"; + mes "Hey, wait."; + mes "The condition of the ^FF4800Homunculus^000000 is not suitable."; + mes "That was close."; + next; + mes "[Jeyna]"; + mes "To use the Homunculus Mutation System"; + mes "to change to the new"; + mes "^FF4800Homunculus^000000,"; + mes "the ^006400Homunculus must be above level 99 and evolved^000000."; + next; + mes "[Jeyna]"; + mes "Come back to ^005DFFViorel^000000 when you're ready."; + mes "I'll see you later then~!"; + close2; + erasequest 4154; + erasequest 4158; + warp "job3_gen01",12,47; + end; + } + return; +} + +// Magic Board +//============================================================ +que_house_s,83,47,3 script Magic Board#homun_s 857,{ + playbgm "26.mp3"; // Everlasting Wanderers + callfunc "F_HomMutateInfo","[Magic Board Posts]"; + mes "[Magic Board Posts]"; + mes ":: ^0000FFHomunculus^000000 research is"; + mes ":: so much fun."; + mes ":: Be an Alchemist"; + mes ":: who always enjoys"; + mes ":: one's research."; + next; + mes "[Magic Board Posts]"; + mes ":: Oh, and Viorel..."; + mes ":: About what you said"; + mes ":: yesterday..."; + mes "::"; + mes "::"; + next; + mes "--------------------------"; + mes "The rest is sealed because it seems to be a private message."; + close2; + if (checkquest(4157) > -1) { + setquest 4158; + erasequest 4157; + } + end; +} + +function script F_HomMutateInfo { + mes getarg(0); + mes ":: The ability of the mutated"; + mes ":: ^0000FFHomunculus^000000 clearly goes"; + mes ":: beyond the previous state."; + mes ":: In addition, its appearance"; + mes ":: will evolve as well."; + next; + mes getarg(0); + mes ":: ^0000FFHomunculus^000000 appearances of the"; + mes ":: new types can be classified"; + mes ":: based on different species."; + mes ":: Creatures of the same species"; + mes ":: generally have a similar"; + mes ":: appearance."; + next; + mes getarg(0); + mes ":: The category, appearance and"; + mes ":: ability of the ^0000FFHomunculus^000000"; + mes ":: via the Homunculus Mutation"; + mes ":: System are as follows:"; + next; + cutin "Mer_Eira_Card",3; + mes getarg(0); + mes ":: The first of the five"; + mes ":: is called ^FF4800Eira^000000."; + mes ":: Beautiful and graceful."; + next; + mes getarg(0); + mes ":: ^FF4800Eira^000000 uses"; + mes ":: ^006400Wind Element^000000 Magic Attacks and"; + mes ":: Support Skills."; + mes ":: It even has the ability"; + mes ":: to revive its"; + mes ":: fallen master."; + next; + mes getarg(0); + mes ":: ^FF4800Eira^000000 eats"; + mes ":: ^0000FFSmall Snow Flower^000000."; + mes ":: Surprising how it survives on"; + mes ":: such a small amount."; + mes ":: ^0000FFSmall Snow Flower^000000 can be bought"; + mes ":: from ^005DFFTaming Merchants^000000."; + next; + cutin "",255; + cutin "Mer_Sera_Card",3; + mes getarg(0); + mes ":: The second of the five"; + mes ":: is known as ^FF4800Sera^000000."; + mes ":: It looks just like ^FF0000Mistress^000000 but"; + mes ":: it doesn't run away."; + next; + mes getarg(0); + mes ":: ^FF4800Sera^000000"; + mes ":: specializes in ^006400Poison Attacks^000000."; + mes ":: Also, it uses distinct"; + mes ":: Support Skills using poisons."; + next; + mes getarg(0); + mes ":: ^FF4800Sera^000000 eats"; + mes ":: ^0000FFApple Pudding^000000."; + mes ":: It prefers sweet food."; + mes ":: ^0000FFApple Pudding^000000 can be bought"; + mes ":: from ^005DFFTaming Merchants^000000."; + next; + cutin "",255; + cutin "Mer_Dieter_Card",3; + mes getarg(0); + mes ":: The third of the five"; + mes ":: is ^FF4800Dieter^000000."; + mes ":: It looks unusual but it"; + mes ":: has a good demeanor."; + next; + mes getarg(0); + mes ":: ^FF4800Dieter^000000 uses"; + mes ":: ^FF0000Fire^000000 based Attacks and"; + mes ":: Support Skills."; + mes ":: It is just as fragile..."; + mes ":: ah, reliable, as it looks."; + next; + mes getarg(0); + mes ":: ^FF4800Dieter^000000 eats"; + mes ":: ^0000FFBig Cell^000000."; + mes ":: ^0000FFBig Cell^000000 can be bought"; + mes ":: from ^005DFFTaming Merchants^000000."; + next; + cutin "",255; + cutin "Mer_Bayeri_Card",3; + mes getarg(0); + mes ":: The fourth of the five"; + mes ":: is ^FF4800Bayeri^000000."; + mes ":: Bayeri has the form of a"; + mes ":: unicorn."; + next; + mes getarg(0); + mes ":: It has a powerful dash skill"; + mes ":: and uses ^006400Holy Element^000000 magic."; + mes ":: Unfortunately,"; + mes ":: they won't let you ride them."; + mes ":: Not all four-legged creatures"; + mes ":: can be ridden."; + next; + mes getarg(0); + mes ":: ^FF4800Bayeri^000000 eats"; + mes ":: ^0000FFFresh Plant^000000."; + mes ":: No matter how hungry it"; + mes ":: never feeds on rotten greens."; + mes ":: ^0000FFFresh Plant^000000 can be bought"; + mes ":: from ^005DFFTaming Merchants^000000."; + next; + cutin "",255; + cutin "Mer_Eleanor_Card",3; + mes getarg(0); + mes ":: The last of the five"; + mes ":: is ^FF4800Eleanor^000000."; + mes ":: It has a feminine appearance"; + mes ":: and outstanding physical skill."; + next; + mes getarg(0); + mes ":: ^FF4800Eleanor^000000"; + mes ":: uses ^006400Strike or Grapple Attacks^000000"; + mes ":: sequentially in battle."; + mes ":: Absolutely stunning."; + next; + mes getarg(0); + mes ":: ^FF4800Eleanor^000000 eats"; + mes ":: ^0000FFKid's Dumpling^000000."; + mes ":: Don't confuse it with a normal"; + mes ":: dumpling."; + mes ":: ^0000FFKid's Dumpling^000000 can be bought"; + mes ":: from ^005DFFTaming Merchants^000000."; + next; + cutin "",255; + return; +} + +// Books +//============================================================ +que_house_s,13,52,3 script Open Book#01homun_s 111,{ + switch(rand(1,7)) { + case 1: + mes "[Bookcase Notes]"; + mes "Insanity and Genius are the same in concept in that they are both abnormal phenomenon."; + mes "Observing the chemist ^005DFFMorgenstein^000000 of ^8B4513Geffen^000000, I consider them equal."; + next; + mes "[Bookcase Notes]"; + mes "Once I had to visit..."; + mes "the strange ^005DFFMorgenstein^000000 for research purposes."; + next; + mes "[Bookcase Notes]"; + mes "I had a meat stew before I met ^005DFFMorgenstein^000000,"; + mes "surprisingly enough, he muttered that he smelled meat even before I was close."; + next; + mes "[Bookcase Notes]"; + mes "I never thought that chemists had a great sense of smell."; + mes "The next time I give"; + mes "^005DFFMorgenstein^000000 a visit,"; + mes "I'll eat some other meal."; + close; + case 2: + mes "[Bookcase Notes]"; + mes "^005DFFDe Bris^000000 thinks the enthusiasm of Alchemists has lately dropped <Dramatically>..."; + next; + mes "[Bookcase Notes]"; + mes "He especially didn't like the fact that I was bound tightly to ^FF4800Homunculus^000000 research."; + mes "He didn't say such a thing when we studied together in ^8B4513Rune Midgarts^000000."; + next; + mes "[Bookcase Notes]"; + mes "One day, I'll show ^005DFFDe Bris^000000 my ^FF4800Homunculus^000000 research data."; + mes "I love watching him jump out of his skin.... I look forward to the day."; + close; + case 3: + mes "[Bookcase Notes]"; + mes "^005DFFDe Bris^000000' passion for the ^57007FGenetic^000000 arts is amazing."; + next; + mes "[Bookcase Notes]"; + mes "Recently, the Alchemist Union offered me the chance to join the ^57007FGenetic^000000 through a letter."; + mes "I wonder what ^005DFFDe Bris^000000 said to the union..."; + next; + mes "[Bookcase Notes]"; + mes "Well, I appreciate it..."; + mes "However, for me right now"; + mes "my research is of utmost priority."; + close; + case 4: + mes "[Bookcase Notes]"; + mes "There's something funny ^005DFFDarcia^000000 said to me."; + mes "It was about when ^005DFFJeyna^000000 first came to learn about potion combination......"; + next; + mes "[Bookcase Notes]"; + mes "She did good up to the stage of pouring water into the mixture."; + mes "She just had to put it into an empty bottle..."; + next; + mes "[Bookcase Notes]"; + mes "^005DFFDarcia^000000 watched what she would do with the last stage,"; + mes "and the confused ^005DFFJeyna^000000 drank the mixture out of the bowl and told her that it healed well."; + next; + mes "[Bookcase Notes]"; + mes "To think that even ^005DFFJeyna^000000,"; + mes "now a master of potion combination,"; + mes "had her rookie mistakes"; + mes "shows how hard it is to imagine"; + mes "and forecast one's past and future."; + close; + case 5: + mes "[Bookcase Notes]"; + mes "^005DFFVincent^000000, I think I did it."; + mes "I will never forget your words of courage "; + mes "and I am grateful that I now get to pay you back."; + next; + mes "[Bookcase Notes]"; + mes "It was indeed a long process."; + mes "When many of the union"; + mes "considered my research insignificant"; + mes "... Though I did not lose my belief"; + mes "it did heart deep inside."; + next; + mes "[Bookcase Notes]"; + mes "The few friends who believed me"; + mes "especially ^005DFFJeyna^000000"; + mes "and you ^005DFFVincent^000000 ..."; + mes "I am sincerely thankful with all my soul."; + next; + mes "[Bookcase Notes]"; + mes "They say that,"; + mes "the end justifies the means."; + mes "At first,"; + mes "I did not know what it meant..."; + next; + mes "[Bookcase Notes]"; + mes "Now I know."; + mes "I know how important it is"; + mes "to follow one's heart."; + next; + mes "[Bookcase Notes]"; + mes "I'll drop by very soon."; + mes "Be well until then."; + close; + case 6: + mes "[Bookcase Notes]"; + mes "A game called ^0000FFThe Epic Battle 2^000000, similar to chess, was intriguing."; + next; + mes "[Bookcase Notes]"; + mes "Some time ago, I met a ^0000FFFruit Seller^000000 who excelled in The Epic Battle 2."; + mes "He even overcame the infamous ^006400Grizzly Shockwave Strategy^000000 and ^006400God of Death Terror^000000 with ease."; + next; + mes "[Bookcase Notes]"; + mes "To overcome those in the early stages of the battle of the ^0000FFPriest Faction^000000..."; + mes "It is difficult for me, since I need to combine the pieces and use some luring skills."; + next; + mes "[Bookcase Notes]"; + mes "I wonder when I'll become a 3 Carat Diamond level player."; + close; + case 7: + mes "[Bookcase Notes]"; + mes "There are many Alchemists who like the ^FF4800Vanilmirth^000000."; + next; + mes "[Bookcase Notes]"; + mes "But I prefer the ^FF4800Amistr^000000."; + mes "It's cute when it wags its tale with those shiny eyes."; + next; + mes "[Bookcase Notes]"; + mes "My Amistr Jonathan is clever and mellow, making it ever so lovable."; + mes "We're good friends, aren't we Jonathan?"; + close; + } +} + +que_house_s,16,52,3 script Open Book#02homun_s 111,{ + switch(rand(1,8)) { + case 1: + mes "[Bookcase Notes]"; + mes "What should I write to ^005DFFDe Bris^000000."; + mes ":: To my noted "; + mes ":: Genetic friend De Bris."; + mes ":: How's Lighthalzen?"; + mes ":: Do they have enough of those"; + mes ":: cookies you oh so love?"; + next; + mes "[Bookcase Notes]"; + mes ":: I'll drop by soon"; + mes ":: with some cookies."; + mes ":: When we meet,"; + mes ":: I'll introduce you to my"; + mes ":: ^006400New Homunculus^000000."; + next; + mes "[Bookcase Notes]"; + mes ":: No need to be alert."; + mes ":: Unlike you,"; + mes ":: they aren't interested in "; + mes ":: what others have to eat."; + mes ":: I'll see you soon~!"; + mes ":: Dare close the door on me."; + close; + case 2: + mes "[Bookcase Notes]"; + mes "The last time I visited the Alchemist Union, there was an interesting debate on the table."; + mes "I think it was something to do with ^006400Negligence of Homunculus in public places^000000."; + next; + mes "[Bookcase Notes]"; + mes "While the master dozed off,"; + mes "one of the ^FF4800Homunculus^000000 off its leash"; + mes "caused some sort of problem."; + next; + mes "[Bookcase Notes]"; + mes "I will make sure that my Homunculus Jonathan..."; + mes "is trained well not to cause trouble around other people."; + close; + case 3: + mes "[Bookcase Notes]"; + mes "There's a new toy me and ^005DFFJeyna^000000 have grown fond of."; + mes "It's relatively new,"; + mes "called... ^0000FF'Helo'^000000, I think?"; + next; + mes "[Bookcase Notes]"; + mes "There was a related song to it, sung by some ^57007FMinstrel^000000."; + mes "The lyrics were something like ^006400'Ahhh~Ahh~Ahhhhhhhh'^000000."; + next; + mes "[Bookcase Notes]"; + mes "The entertainment itself is fun,"; + mes "but the music is also excellent,"; + mes "and when I listen to it"; + mes "it feels like my SP is restored significantly."; + next; + mes "[Bookcase Notes]"; + mes "I must say,"; + mes "entertainment is crucial when resting"; + mes "to boost morale for research."; + mes "^006400For Homunculus~!^000000"; + close; + case 4: + mes "[Bookcase Notes]"; + mes "From what I heard from the union member"; + mes "^005DFFParmy^000000,"; + mes "^005DFFRaspuchin^000000 is still his own weird self."; + next; + mes "[Bookcase Notes]"; + mes "It may not be such a good idea"; + mes "to drive those energetic souls"; + mes "coming to change jobs"; + mes "with such enthusiasm."; + close; + case 5: + mes "[Bookcase Notes]"; + mes "A friend of mine who was into painting,"; + mes "suggested making a <Graphic Novel> called"; + mes "^0000FFMUTATIONER^000000"; + mes "after he heard about my research"; + mes "and my works."; + next; + mes "[Bookcase Notes]"; + mes "The story begins..."; + mes "With an alien"; + mes "^FF4800Homunculus^000000"; + mes "visiting our world."; + next; + mes "[Bookcase Notes]"; + mes "The visiting alien"; + mes "^FF4800Homunculus^000000 can survive"; + mes "without a master"; + mes "and it could change into"; + mes "various creatures that"; + mes "roam our world."; + next; + mes "[Bookcase Notes]"; + mes "These alien^FF4800Homunculus^000000"; + mes "have two opposing factions"; + mes "divided by political differences."; + mes "In our world, we call them"; + mes "^006400Aut-homun^000000 and "; + mes "^006400Decept-homun^000000"; + next; + mes "[Bookcase Notes]"; + mes "The ^006400Aut-homun^000000 are our friends."; + mes "Their leader,"; + mes "called ^005DFFOptimus Poring^000000,"; + mes "is built and so cool"; + mes "for a poring,"; + mes "and it summons a cart at will!"; + next; + mes "[Bookcase Notes]"; + mes "The opposing side, the ^006400Decept-homun^000000,"; + mes "is led by ^005DFFMegatroll^000000"; + mes "and they use all means "; + mes "to destroy our world."; + next; + mes "[Bookcase Notes]"; + mes "The hero of this story"; + mes "is one from ^8B4513Alberta^000000 called ^005DFFJam Wicky^000000,"; + mes "who meets ^005DFFOptimus Poring^000000"; + mes "while shopping for a cart,"; + mes "as if it was his destiny."; + next; + mes "[Bookcase Notes]"; + mes "And so thus"; + mes "unfolds an epic battle"; + mes "in the ^8B4513Moroc Desert^000000"; + mes "where the fate of our world"; + mes "lies in his hands..."; + next; + mes "[Bookcase Notes]"; + mes "Enough of that~!"; + mes "The rest of the story can be"; + mes "checked in the published copy."; + mes "^0000FFMUTATIONER^000000"; + mes "It's going to be awesome~!"; + close; + case 6: + mes "[Bookcase Notes]"; + mes "The Union sent a special gift to its members."; + mes "It's called a ^0000FFHigh Clip 4^000000."; + next; + mes "[Bookcase Notes]"; + mes "It is originally used as a tool to allow easy whispering between members, but it also has other useful functions."; + next; + mes "[Bookcase Notes]"; + mes "A guild invented this. I recall that their emblem had an image of an apple."; + close; + case 7: + mes "[Bookcase Notes]"; + mes "Homunculus is indeed worthy."; + mes "However, like everyone else, I sometimes question its meaning and future."; + next; + mes "[Bookcase Notes]"; + mes "I believe that life given by nature was supposed to be used for oneself."; + mes "However..."; + next; + mes "[Bookcase Notes]"; + mes "The research to give the Homunculus life is, in reality, for the benefit of man."; + mes "Perhaps mankind is not ready ethically to create life."; + close; + case 8: + mes "[Bookcase Notes]"; + mes "Some time ago, ^005DFFJeyna^000000 introduced me to someone."; + mes "She is from ^8B4513Geffen^000000,"; + mes "and she introduced herself as a ^005DFFChicken Researcher^000000."; + next; + mes "[Bookcase Notes]"; + mes "She is an expert on something called the ^006400Legendary Bijofnil^000000."; + mes "She finds it offensive that people think that the Bijofnil is a hawk."; + next; + mes "[Bookcase Notes]"; + mes "She said something about somewhere in ^8B4513Hvergilmir's Fountain^000000"; + mes "there exists a ^005DFFtalking chicken^000000 and other stories..."; + mes "Well, it went on like that"; + mes "and it was interesting."; + close; + } +} + +// Notifiers +//============================================================ +que_house_s,11,52,3 script #03homun_s 111,{ + end; +OnInit: + initnpctimer; + end; +OnTimer6000: + emotion e_gasp; + end; +OnTimer7000: + emotion e_gasp,0,"#04homun_s"; + stopnpctimer; + initnpctimer; + end; +} + +que_house_s,14,52,3 script #04homun_s 111,{ + end; +} + +// Researcher's Pet +//============================================================ +que_house_s,24,46,3 script Jonathan#homun_s 6002,{ + end; +} + +que_house_s,23,46,3 script #05homun_s 111,{ + emotion e_no,0,"Jonathan#homun_s"; + if (gethominfo(1) < 6048 || gethominfo(1) > 6052) { // Not mutated Homunculus-S + mes "[Jonathan]"; + mes "Hwang~ Hwang!"; + next; + mes ":: It seems to be Viorel's"; + mes ":: Homunculus."; + mes ":: It is wearing a small necklace"; + mes ":: with the name Jonathan engraved"; + mes ":: on it."; + close; + } else { + mes "[Jonathan]"; + mes "Hwang~?!"; + next; + emotion e_swt2,0,"Jonathan#homun_s"; + mes "[Jonathan]"; + mes "*Sniff* ..."; + next; + mes ":: This Amistr"; + mes ":: called Jonathan"; + mes ":: seems to be surprised by my"; + mes ":: new Homunculus."; + close; + } +}
\ No newline at end of file diff --git a/npc/re/scripts.conf b/npc/re/scripts.conf index e3b683a34..86cf10d28 100644 --- a/npc/re/scripts.conf +++ b/npc/re/scripts.conf @@ -88,7 +88,7 @@ npc: npc/re/quests/eden/eden_service.txt npc: npc/re/quests/eden/eden_tutorial.txt // -------------------------------------------------------------- //npc: npc/re/quests/cupet.txt -npc: npc/re/quests/homu_s.txt +npc: npc/re/quests/homun_s.txt npc: npc/re/quests/magic_books.txt npc: npc/re/quests/mrsmile.txt npc: npc/re/quests/pile_bunker.txt diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 3d04a6bff..4933256a2 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -6869,7 +6869,7 @@ ACMD(makehomun) { homunid = atoi(message); if( homunid == -1 && sd->status.hom_id && !homun_alive(sd->hd) ) { - if( !sd->hd->homunculus.vaporize ) + if( sd->hd->homunculus.vaporize ) homun->ressurect(sd, 100, sd->bl.x, sd->bl.y); else homun->call(sd); diff --git a/src/map/clif.c b/src/map/clif.c index 57830478d..0c21c796c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1379,7 +1379,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag) WBUFW(buf,0)=0x22e; memcpy(WBUFP(buf,2),hd->homunculus.name,NAME_LENGTH); // Bit field, bit 0 : rename_flag (1 = already renamed), bit 1 : homunc vaporized (1 = true), bit 2 : homunc dead (1 = true) - WBUFB(buf,26)=(battle_config.hom_rename?0:hd->homunculus.rename_flag) | (hd->homunculus.vaporize << 1) | (hd->homunculus.hp?0:4); + WBUFB(buf,26)=(battle_config.hom_rename && hd->homunculus.rename_flag ? 0x1 : 0x0) | (hd->homunculus.vaporize == HOM_ST_REST ? 0x2 : 0) | (hd->homunculus.hp > 0 ? 0x4 : 0); WBUFW(buf,27)=hd->homunculus.level; WBUFW(buf,29)=hd->homunculus.hunger; WBUFW(buf,31)=(unsigned short) (hd->homunculus.intimacy / 100) ; diff --git a/src/map/homunculus.c b/src/map/homunculus.c index 45e9af2b0..1e47053fe 100644 --- a/src/map/homunculus.c +++ b/src/map/homunculus.c @@ -134,25 +134,25 @@ int homunculus_dead(struct homun_data *hd) { } //Vaporize a character's homun. If flag, HP needs to be 80% or above. -int homunculus_vaporize(struct map_session_data *sd, int flag) { +int homunculus_vaporize(struct map_session_data *sd, enum homun_state flag) { struct homun_data *hd; nullpo_ret(sd); hd = sd->hd; - if (!hd || hd->homunculus.vaporize) + if (!hd || hd->homunculus.vaporize != HOM_ST_ACTIVE) return 0; if (status->isdead(&hd->bl)) return 0; //Can't vaporize a dead homun. - if (flag && get_percentage(hd->battle_status.hp, hd->battle_status.max_hp) < 80) + if (flag == HOM_ST_REST && get_percentage(hd->battle_status.hp, hd->battle_status.max_hp) < 80) return 0; hd->regen.state.block = 3; //Block regen while vaporized. //Delete timers when vaporized. homun->hunger_timer_delete(hd); - hd->homunculus.vaporize = 1; + hd->homunculus.vaporize = flag; if(battle_config.hom_setting&0x40) memset(hd->blockskill, 0, sizeof(hd->blockskill)); clif->hominfo(sd, sd->hd, 0); @@ -260,7 +260,7 @@ void homunculus_skillup(struct homun_data *hd,uint16 skill_id) { int i = 0 ; nullpo_retv(hd); - if(hd->homunculus.vaporize) + if(hd->homunculus.vaporize != HOM_ST_ACTIVE) return; i = skill_id - HM_SKILLBASE; @@ -471,7 +471,7 @@ bool homunculus_mutate(struct homun_data *hd, int homun_id) { int homunculus_gainexp(struct homun_data *hd,unsigned int exp) { enum homun_type htype; - if(hd->homunculus.vaporize) + if(hd->homunculus.vaporize != HOM_ST_ACTIVE) return 1; if( (htype = homun->class2type(hd->homunculus.class_)) == HT_INVALID ) { @@ -571,7 +571,7 @@ unsigned char homunculus_menu(struct map_session_data *sd,unsigned char menu_num bool homunculus_feed(struct map_session_data *sd, struct homun_data *hd) { int i, foodID, emotion; - if(hd->homunculus.vaporize) + if(hd->homunculus.vaporize == HOM_ST_REST) return false; foodID = hd->homunculusDB->foodID; @@ -781,11 +781,11 @@ bool homunculus_call(struct map_session_data *sd) { hd = sd->hd; - if (!hd->homunculus.vaporize) + if (hd->homunculus.vaporize != HOM_ST_REST) return false; //Can't use this if homun wasn't vaporized. homun->init_timers(hd); - hd->homunculus.vaporize = 0; + hd->homunculus.vaporize = HOM_ST_ACTIVE; if (hd->bl.prev == NULL) { //Spawn him hd->bl.x = sd->bl.x; hd->bl.y = sd->bl.y; @@ -833,7 +833,7 @@ bool homunculus_recv_data(int account_id, struct s_homunculus *sh, int flag) { homun->create(sd, sh); hd = sd->hd; - if(hd && hd->homunculus.hp && !hd->homunculus.vaporize && hd->bl.prev == NULL && sd->bl.prev != NULL) { + if(hd && hd->homunculus.hp && hd->homunculus.vaporize == HOM_ST_ACTIVE && hd->bl.prev == NULL && sd->bl.prev != NULL) { enum homun_type htype = homun->class2type(hd->homunculus.class_); map->addblock(&hd->bl); @@ -908,7 +908,7 @@ bool homunculus_ressurect(struct map_session_data* sd, unsigned char per, short hd = sd->hd; - if (hd->homunculus.vaporize) + if (hd->homunculus.vaporize != HOM_ST_ACTIVE) return false; // vaporized homunculi need to be 'called' if (!status->isdead(&hd->bl)) diff --git a/src/map/homunculus.h b/src/map/homunculus.h index 9562ed5c3..2cb558930 100644 --- a/src/map/homunculus.h +++ b/src/map/homunculus.h @@ -11,7 +11,7 @@ #define MAX_HOM_SKILL_REQUIRE 5 #define homdb_checkid(id) (id >= HM_CLASS_BASE && id <= HM_CLASS_MAX) -#define homun_alive(x) ((x) && (x)->homunculus.vaporize != 1 && (x)->battle_status.hp > 0) +#define homun_alive(x) ((x) && (x)->homunculus.vaporize == HOM_ST_ACTIVE && (x)->battle_status.hp > 0) struct h_stats { unsigned int HP, SP; @@ -44,6 +44,12 @@ enum { SP_HUNGRY = 0x2, }; +enum homun_state { + HOM_ST_ACTIVE = 0,/* either alive or dead */ + HOM_ST_REST = 1,/* is resting (vaporized) */ + HOM_ST_MORPH = 2,/* in morph state */ +}; + struct homun_data { struct block_list bl; struct unit_data ud; @@ -94,7 +100,7 @@ struct homunculus_interface { enum homun_type (*class2type) (int class_); void (*damaged) (struct homun_data *hd); int (*dead) (struct homun_data *hd); - int (*vaporize) (struct map_session_data *sd, int flag); + int (*vaporize) (struct map_session_data *sd, enum homun_state flag); int (*delete) (struct homun_data *hd, int emote); int (*checkskill) (struct homun_data *hd, uint16 skill_id); int (*calc_skilltree) (struct homun_data *hd, int flag_evolve); diff --git a/src/map/itemdb.h b/src/map/itemdb.h index fe67ebbef..0f46c1c01 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -40,6 +40,7 @@ enum item_itemid { ITEMID_RED_GEMSTONE = 716, ITEMID_BLUE_GEMSTONE = 717, ITEMID_TRAP = 1065, + ITEMID_STRANGE_EMBRYO = 6415, ITEMID_FACE_PAINT = 6120, ITEMID_STONE = 7049, ITEMID_SKULL_ = 7420, diff --git a/src/map/pc.c b/src/map/pc.c index ffc3427c7..157d9e28a 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -6438,7 +6438,7 @@ int pc_resetskill(struct map_session_data* sd, int flag) pc->setoption(sd, i); if( homun_alive(sd->hd) && pc->checkskill(sd, AM_CALLHOMUN) ) - homun->vaporize(sd, 0); + homun->vaporize(sd, HOM_ST_ACTIVE); } for( i = 1; i < MAX_SKILL; i++ ) { @@ -6663,7 +6663,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) { if (sd->status.hom_id > 0){ if(battle_config.homunculus_auto_vapor && sd->hd && !sd->hd->sc.data[SC_LIGHT_OF_REGENE]) - homun->vaporize(sd, 0); + homun->vaporize(sd, HOM_ST_ACTIVE); } if( sd->md ) @@ -7588,7 +7588,7 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper) pc->setoption(sd, i); if(homun_alive(sd->hd) && !pc->checkskill(sd, AM_CALLHOMUN)) - homun->vaporize(sd, 0); + homun->vaporize(sd, HOM_ST_ACTIVE); if(sd->status.manner < 0) clif->changestatus(sd,SP_MANNER,sd->status.manner); diff --git a/src/map/script.c b/src/map/script.c index 8460b23b0..1bedb78b6 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -6780,7 +6780,7 @@ BUILDIN(strnpcinfo) { } /*========================================== - * GetEquipID(Pos); Pos: 1-10 + * GetEquipID(Pos); Pos: 1-SCRIPT_EQUIP_TABLE_SIZE *------------------------------------------*/ BUILDIN(getequipid) { @@ -9564,44 +9564,82 @@ BUILDIN(homunculus_evolution) /*========================================== * [Xantara] + * Checks for vaporized morph state + * and deletes ITEMID_STRANGE_EMBRYO. *------------------------------------------*/ BUILDIN(homunculus_mutate) { int homun_id; enum homun_type m_class, m_id; TBL_PC *sd; + bool success = false; sd = script->rid2sd(st); if( sd == NULL || sd->hd == NULL ) return true; - - if( script_hasdata(st,2) ) - homun_id = script_getnum(st,2); - else - homun_id = 6048 + (rnd() % 4); - - if( homun_alive(sd->hd) ) { + + if( sd->hd->homunculus.vaporize == HOM_ST_MORPH ) { + int i = pc->search_inventory(sd, ITEMID_STRANGE_EMBRYO); + if( script_hasdata(st,2) ) + homun_id = script_getnum(st,2); + else + homun_id = 6048 + (rnd() % 4); + m_class = homun->class2type(sd->hd->homunculus.class_); m_id = homun->class2type(homun_id); - if( m_class != HT_INVALID && m_id != HT_INVALID && m_class == HT_EVO && m_id == HT_S && sd->hd->homunculus.level >= 99 ) + if( m_class == HT_EVO && m_id == HT_S && + sd->hd->homunculus.level >= 99 && i >= 0 && + !pc->delitem(sd, i, 1, 0, 0, LOG_TYPE_SCRIPT) ) { + sd->hd->homunculus.vaporize = HOM_ST_REST; // Remove morph state. + homun->call(sd); // Respawn homunculus. homun->mutate(sd->hd, homun_id); - else + success = true; + } else clif->emotion(&sd->hd->bl, E_SWT); - } + } else + clif->emotion(&sd->hd->bl, E_SWT); + + script_pushint(st,success?1:0); return true; } -// [Zephyrus] -BUILDIN(homunculus_shuffle) { +/*========================================== + * Puts homunculus into morph state + * and gives ITEMID_STRANGE_EMBRYO. + *------------------------------------------*/ +BUILDIN(homunculus_morphembryo) { + enum homun_type m_class; + int i = 0; TBL_PC *sd; + bool success = false; - sd=script->rid2sd(st); - if( sd == NULL ) + sd = script->rid2sd(st); + if( sd == NULL || sd->hd == NULL ) return true; - if(homun_alive(sd->hd)) - homun->shuffle(sd->hd); + if( homun_alive(sd->hd) ) { + m_class = homun->class2type(sd->hd->homunculus.class_); + + if ( m_class == HT_EVO && sd->hd->homunculus.level >= 99 ) { + struct item item_tmp; + + memset(&item_tmp, 0, sizeof(item_tmp)); + item_tmp.nameid = ITEMID_STRANGE_EMBRYO; + item_tmp.identify = 1; + + if( (i = pc->additem(sd, &item_tmp, 1, LOG_TYPE_SCRIPT)) ) { + clif->additem(sd, 0, 0, i); + clif->emotion(&sd->hd->bl, E_SWT); + } else { + homun->vaporize(sd, HOM_ST_MORPH); + success = true; + } + } else + clif->emotion(&sd->hd->bl, E_SWT); + } else + clif->emotion(&sd->hd->bl, E_SWT); + script_pushint(st, success?1:0); return true; } @@ -9612,21 +9650,29 @@ BUILDIN(homunculus_shuffle) { * 1 = Homunculus is vaporized (rest) * 2 = Homunculus is in morph state *------------------------------------------*/ -BUILDIN(checkhomcall) -{ +BUILDIN(homunculus_checkcall) { TBL_PC *sd = script->rid2sd(st); - TBL_HOM *hd; - if( sd == NULL ) - return false; - - hd = sd->hd; - - if( !hd ) + if( sd == NULL || !sd->hd ) script_pushint(st, -1); else - script_pushint(st, hd->homunculus.vaporize); + script_pushint(st, sd->hd->homunculus.vaporize); + + return true; +} + +// [Zephyrus] +BUILDIN(homunculus_shuffle) { + TBL_PC *sd; + + sd=script->rid2sd(st); + if( sd == NULL ) + return true; + + if(homun_alive(sd->hd)) + homun->shuffle(sd->hd); + return true; } @@ -12166,12 +12212,9 @@ BUILDIN(getpetinfo) BUILDIN(gethominfo) { TBL_PC *sd=script->rid2sd(st); - TBL_HOM *hd; - int type=script_getnum(st,2); + int type = script_getnum(st,2); - hd = sd?sd->hd:NULL; - if(!homun_alive(hd)) - { + if(!sd || !sd->hd) { if (type == 2) script_pushconststr(st,"null"); else @@ -12180,13 +12223,13 @@ BUILDIN(gethominfo) } switch(type){ - case 0: script_pushint(st,hd->homunculus.hom_id); break; - case 1: script_pushint(st,hd->homunculus.class_); break; - case 2: script_pushstrcopy(st,hd->homunculus.name); break; - case 3: script_pushint(st,hd->homunculus.intimacy); break; - case 4: script_pushint(st,hd->homunculus.hunger); break; - case 5: script_pushint(st,hd->homunculus.rename_flag); break; - case 6: script_pushint(st,hd->homunculus.level); break; + case 0: script_pushint(st,sd->hd->homunculus.hom_id); break; + case 1: script_pushint(st,sd->hd->homunculus.class_); break; + case 2: script_pushstrcopy(st,sd->hd->homunculus.name); break; + case 3: script_pushint(st,sd->hd->homunculus.intimacy); break; + case 4: script_pushint(st,sd->hd->homunculus.hunger); break; + case 5: script_pushint(st,sd->hd->homunculus.rename_flag); break; + case 6: script_pushint(st,sd->hd->homunculus.level); break; default: script_pushint(st,0); break; @@ -17655,8 +17698,9 @@ void script_parse_builtin(void) { BUILDIN_DEF(warpportal,"iisii"), BUILDIN_DEF2(homunculus_evolution,"homevolution",""), //[orn] BUILDIN_DEF2(homunculus_mutate,"hommutate","?"), + BUILDIN_DEF2(homunculus_morphembryo,"morphembryo",""), + BUILDIN_DEF2(homunculus_checkcall,"checkhomcall",""), BUILDIN_DEF2(homunculus_shuffle,"homshuffle",""), //[Zephyrus] - BUILDIN_DEF(checkhomcall,""), BUILDIN_DEF(eaclass,"?"), //[Skotlex] BUILDIN_DEF(roclass,"i?"), //[Skotlex] BUILDIN_DEF(checkvending,"?"), diff --git a/src/map/skill.c b/src/map/skill.c index 248e19e77..82a584ce2 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7516,7 +7516,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case AM_REST: if (sd) { - if (homun->vaporize(sd,1)) + if (homun->vaporize(sd,HOM_ST_REST)) clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); else clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); diff --git a/src/map/status.c b/src/map/status.c index 497d02bbf..ae900e04d 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -8230,7 +8230,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val if( pc_isridingwug(sd) ) pc->setoption(sd, sd->sc.option&~OPTION_WUGRIDER); if( pc_isfalcon(sd) ) pc->setoption(sd, sd->sc.option&~OPTION_FALCON); if( sd->status.pet_id > 0 ) pet->menu(sd, 3); - if( homun_alive(sd->hd) ) homun->vaporize(sd,1); + if( homun_alive(sd->hd) ) homun->vaporize(sd,HOM_ST_REST); if( sd->md ) mercenary->delete(sd->md,3); } break; |