//Author: tux9th //This is the continuation of Astral Magic Level 2. //This uses the QUEST_MAGIC2 variable Nibble 4. //Quest States: // @pauline_state 1: Got Magic, started to talk to her about Magic. // @pauline_state 2: Finished Talking to her about new Astral Spells, learnt invocations. // @pauline_state 3: Told her the correct ingredients to the Mouboo summon spell. // @pauline_state 4: Told her the correct ingredients to the Pinkie summon spell. // //Variables: // @pauline_ingredient1$ First ingredient input. // @pauline_ingredient2$ Second ingredient input. // @pauline_REWARD amount of XP gained for telling her ingredients for each spell. 021-1.gat,55,66,0|script|Pauline|208 { //Bitmasking // QUEST_MAGIC2 - Nibble4 set @Pauline_MASK, NIBBLE_4_MASK; set @Pauline_SHIFT, NIBBLE_4_SHIFT; set @pauline_state, ((QUEST_MAGIC2 & @Pauline_MASK) >> @Pauline_SHIFT); //Bitmasks END set @pauline_REWARD, 10000; if (@pauline_state == 4) goto L_MoreMagic; if (@pauline_state == 3) goto L_KnowIngredientsPinkie; if (@pauline_state == 2) goto L_Ingredients; if (@pauline_state == 1) goto L_Back; if (getskilllv(SKILL_MAGIC_ASTRAL) > 0) goto L_Magic; mes "[Pauline]"; mes "\"I've mastered several schools of magic and fought the Yeti in Kaizei.\""; next; mes "\"The path of magic is a long and difficult one.\""; goto L_Close; L_Magic: mes "[Pauline]"; mes "\"Ah. I see you are skilled in the Art of Astral Magic.\""; mes "\"Who taught you?\""; menu "I learnt it myself!", L_Next, "Sagatha is my teacher.", L_Sagatha, "You must be mistaken.", L_Close; L_Next: mes "\"You did? Not bad. I guess then there is nothing I can teach you. Or are you interested in sharing knowledge?\""; menu "Yes, please.", L_Spells, "No, thanks.", L_Close; L_Sagatha: mes "[Pauline]"; mes "\"Ah, that Witch!\""; mes "\"Very well.\""; next; mes "\"Do you want me to teach you things Sagatha doesn't know yet?\""; next; menu "Yes.", L_Spells, "No.", L_Close; L_Back: mes "[Pauline]"; mes "\"So, you're back. Are you ready to share knowledge now?\""; menu "Yes.", L_Spells, "No.", L_Close; L_Spells: set @pauline_state, 1; callsub S_Update_Mask; mes "[Pauline]"; mes "\"Okay.\""; mes "\"Not long ago I discovered some new caves near Tulimshar. In an abandond chamber I found some paintings on the wall.\""; next; mes "\"They weren't typical for this region, so I examined them closely. I found some invocations I have never heard before.\""; mes "\"I thought that they would fit better into the Woodland area. I could only decipher two invocations so far. Those are two spells used to summon creatures.\""; next; mes "\"One was for summoning Mouboos and the other one was for summoning Pinkies.\""; mes "\"Have you ever heared about those?\""; next; menu "Yes. I thought you had something new to tell. [Walk Away]", L_Close, "No, tell me more.", L_Next1; L_Next1: mes "[Pauline]"; mes "\"Well I could only read the invocations. So I don't exactly know what kind of ingredients you are going to need.\""; mes "\"The first one for the mouboo was " + getspellinvocation("summon-mouboo") + " and the one for the pinkie was " + getspellinvocation("summon-pinkie") +".\""; next; mes "\"For the pinkie spell my suggestion is to try similar ingredients to the other Astral spells. Try a root and some item typical for pinkies.\""; mes "\"The mouboo spell might be more complicated. From what I could translate, one of the spell components is crafted by magic.\""; next; mes "\"When you find the right ingredients, come back and bring them to me to try those spells out.\""; next; mes "\"Goodbye.\""; set @pauline_state, 2; callsub S_Update_Mask; goto L_Close; L_Ingredients: mes "[Pauline]"; mes "\"Hello, have you found out what ingredients to use yet?\""; menu "Yes.", L_KnowIngredientsMouboo, "No.", L_Next2; L_Next2: mes "\"Okay. Come back as soon as you know.\""; goto L_Close; L_KnowIngredientsMouboo: mes "\"Did you bring them?\""; menu "Yes." , L_Next3, "No.", L_ComeBackLater; L_Next3: mes "\"Then tell me the ingredients for the mouboo summoning spell and give them to me. Start with the first ingredient and then tell me the second one separately.\""; next; mes "This is case sensitive. Also do not enter whitespaces."; next; input @pauline_ingredient1$; mes "Next ingredient."; input @pauline_ingredient2$; if (@pauline_ingredient1$ == "") goto L_Wrong; if (@pauline_ingredient2$ == "") goto L_Wrong; if (countitem(@pauline_ingredient1$) < 1) goto L_NotEnough; if (countitem(@pauline_ingredient2$) < 1) goto L_NotEnough; mes "\"Do you want to give me these items?\""; menu "No.", L_ComeBackLater, "Yes.", L_Next4; L_Next4: delitem @pauline_ingredient1$, 1; delitem @pauline_ingredient2$, 1; mes "\"Okay let me try this.\""; if (@pauline_ingredient1$ == "Root") goto L_Pass1Mouboo; if (@pauline_ingredient1$ == "MoubooFigurine") goto L_Pass2Mouboo; goto L_DidNotWorkMouboo; L_DidNotWorkMouboo: mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-mouboo") + "."; mes "Nothing happens."; mes "[Pauline]"; mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\""; goto L_Close; L_Pass1Mouboo: if (@pauline_ingredient2$ == "MoubooFigurine") goto L_TrySpellMouboo; goto L_DidNotWorkMouboo; L_Pass2Mouboo: if (@pauline_ingredient2$ == "Root") goto L_TrySpellMouboo; goto L_DidNotWorkMouboo; L_TrySpellMouboo: mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-mouboo") + "."; monster "021-1.gat", 55,68, "Good", 1028, 1; mes "[Pauline]"; mes "\"It worked!\""; set @pauline_state, 3; callsub S_Update_Mask; getexp @pauline_REWARD, 0; goto L_Close; L_KnowIngredientsPinkie: mes "[Pauline]"; mes "\"Now give me the ingredients for the pinkie spell.\""; next; mes "This is case sensitive. Also do not enter whitespaces."; input @pauline_ingredient1$; mes "Next ingredient."; input @pauline_ingredient2$; if (@pauline_ingredient1$ == "") goto L_Wrong; if (@pauline_ingredient2$ == "") goto L_Wrong; if (countitem(@pauline_ingredient1$) < 1) goto L_NotEnough; if (countitem(@pauline_ingredient2$) < 1) goto L_NotEnough; mes "\"Do you want to give me these items?\""; menu "No.", L_ComeBackLater, "Yes.", L_Next5; L_Next5: delitem @pauline_ingredient1$, 1; delitem @pauline_ingredient2$, 1; mes "\"Okay, let me try this.\""; if (@pauline_ingredient1$ == "Root") goto L_Pass1Pinkie; if (@pauline_ingredient1$ == "PinkAntenna") goto L_Pass2Pinkie; goto L_DidNotWorkPinkie; L_DidNotWorkPinkie: mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-pinkie") + "."; mes "Nothing happens."; mes "[Pauline]"; mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\""; goto L_Close; L_Pass1Pinkie: if (@pauline_ingredient2$ == "PinkAntenna") goto L_TrySpellPinkie; goto L_DidNotWorkPinkie; L_Pass2Pinkie: if (@pauline_ingredient2$ == "Root") goto L_TrySpellPinkie; goto L_DidNotWorkPinkie; L_TrySpellPinkie: mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-pinkie") + "."; monster "021-1.gat", 54,68, "Good", 1018, 1; mes "[Pauline]"; mes "\"It worked!\""; set @pauline_state, 4; callsub S_Update_Mask; getexp @pauline_REWARD, 0; goto L_Close; L_MoreMagic: mes "[Pauline]"; mes "\"Thanks for telling me the ingredients. As soon as I find out more about those wall paintings I will let you know.\""; goto L_Close; L_Wrong: mes "The Witch looks at you and snorts."; mes "[Pauline]"; mes "\"You told me the wrong ingredients. Come back as soon as you know the correct ones.\""; goto L_Close; L_NotEnough: mes "[Pauline]"; mes "\"Hey, you don't have this with you!\""; mes "\"Come back when you have the right ingredients.\""; goto L_Close; L_ComeBackLater: mes "[Pauline]"; mes "\"Then come back later.\""; goto L_Close; L_Close: set @pauline_ingredient1$, ""; set @pauline_ingredient2$, ""; set @pauline_state, 0; set @pauline_REWARD, 0; close; //Bitmasks S_Update_Mask: set QUEST_MAGIC2, (QUEST_MAGIC2 & ~(@Pauline_MASK)) | (@pauline_state << @Pauline_SHIFT); return; } 021-1.gat,53,66,0|script|PaulineDebug|208 { //load Bitmasks; set @Pauline_MASK, NIBBLE_4_MASK; set @Pauline_SHIFT, NIBBLE_4_SHIFT; set @pauline_state, ((QUEST_MAGIC2 & @Pauline_MASK) >> @Pauline_SHIFT); mes "Reset Quest State"; mes @pauline_state; menu "Yes.", L_Next, "No.", L_Close; L_Next: set @pauline_state, 0; callsub S_Update_Mask; mes "Done"; close; L_Close: set @pauline_state, 0; close; S_Update_Mask: set QUEST_MAGIC2, (QUEST_MAGIC2 & ~(@Pauline_MASK)) | (@pauline_state << @Pauline_SHIFT); return; OnInit: if (!debug) disablenpc "PaulineDebug"; end; }