summaryrefslogblamecommitdiff
path: root/npc/018-2_Woodland_mining_camp/caul.txt
blob: f03aeff5b35d124f187e50ae726095cad80777c2 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                                                   
                                             




                                     




                                     






























































                                                                                                                                 



                                                               





















                                                     



                                     


































































































                                                                                                                                                                                                                                                    




                                                                                     
 



                                          





































































                                                                                                                                                                       
                                       



                                      
                                      



                                      
                                     



                                      
                                                                         



                                                           
                              





                                                               

                                                                         





































































































                                                                                                                           
                                                                                    


                                                                 

                                           




































                                                                                                                     
//#################################################################################
//#
//# this script file contains the script for the NPC which allows the
//# PCs to create potions from herbs.
//#
//# Participates in the monster oil subquest (cf. Nicholas' Setzer quest)
//#
//#################################################################################

018-2.gat,37,22,0	script	Caul	107,{
        set @SETZER_INITIAL, 0;
        set @SETZER_KNOWS_OIL, 1;
        set @SETZER_KNOWS_STINGER, 2;
        set @SETZER_FLAG_MADE_OIL, 4;

        set @MONSTER_OIL_XP, 100000;

        set @Q_MASK, NIBBLE_3_MASK;
        set @Q_SHIFT, NIBBLE_3_SHIFT;

        set @Q_status, (QUEST_Forestbow_state & @Q_MASK) >> @Q_SHIFT;

	mes "[Caul]";
	mes "\"I can help you to brew healing potions out of mauve, cobalt, gamboge and alizarin herbs.";
	mes "How many potions do you want to brew?\"";
	next;


	if (@Q_status && Inspector == 10)
		menu
			"One", L_1,
			"Five", L_5,
			"Ten", L_10,
			"Fifty", L_50,
			"I would like to brew monster oil.", L_monster_oil_start,
			"Actually...", L_NohMask,
			"Never mind", L_close;
	if (@Q_status && Inspector != 10)
		menu
			"One", L_1,
			"Five", L_5,
			"Ten", L_10,
			"Fifty", L_50,
			"I would like to brew monster oil.", L_monster_oil_start,
			"Never mind", L_close;
	if (!@Q_status && Inspector == 10)
		menu
			"One", L_1,
			"Five", L_5,
			"Ten", L_10,
			"Fifty", L_50,
			"Actually...", L_NohMask,
			"Never mind", L_close;
	if (!@Q_status && Inspector != 10)
		menu
			"One", L_1,
			"Five", L_5,
			"Ten", L_10,
			"Fifty", L_50,
			"Never mind", L_close;
	
L_1:
	set @num, 1;
	goto L_brew;

L_5:
	set @num, 5;
	goto L_brew;

L_10:
	set @num, 10;
	goto L_brew;

L_50:
	set @num, 50;
	goto L_brew;


L_brew:
	mes "[Caul]";
	mes "\"Now put " + @num + " herbs of each kind into the cauldron, stir, and concentrate all your mental energy on it.\"";
	next;

	if (countitem("MauveHerb") < @num) goto L_NotEnough;
	if (countitem("CobaltHerb") < @num) goto L_NotEnough;
	if (countitem("GambogeHerb") < @num) goto L_NotEnough;
	if (countitem("AlizarinHerb") < @num) goto L_NotEnough;

	set @a, @num;
	set @result1, 0;
	set @result2, 0;
	set @result3, 0;
	set @result4, 0;

L_CraftLoop:
	set @throw, rand(readparam(bInt));
	set @result, 1;
	if (@throw >= 5) set @result, 2;
	if (@throw >= 15) set @result, 3;
	if (@throw >= 35) set @result, 4;
	
	if (@result == 1) set @result1, @result1 + 1;
	if (@result == 2) set @result2, @result2 + 1;
	if (@result == 3) set @result3, @result3 + 1;
	if (@result == 4) set @result4, @result4 + 1;
	
	set @a, @a - 1;
	if (@a > 0) goto L_CraftLoop;

	delitem "MauveHerb", @num;
	delitem "CobaltHerb", @num;
	delitem "GambogeHerb", @num;
	delitem "AlizarinHerb", @num;

	getitem 684, @result1;
	getitem 685, @result2;
	getitem 686, @result3;
	getitem 687, @result4;

	mes "[Caul]";
	mes "\"Well done! You made:";
	if (@result1 > 0) mes @result1 + " tiny potions";
	if (@result2 > 0) mes @result2 + " small potions";
	if (@result3 > 0) mes @result3 + " medium potions";
	if (@result4 > 0) mes @result4 + " large potions";
	mes "Come again.\"";
	close;

L_NotEnough:
	mes "[Caul]";
	mes "\"Oh, it seems like you don't have enough herbs. You can find herbs in deep forests.\"";
	close;

L_monster_oil_start:
	mes "[Caul]";
	mes "\"Monster oil?  Hmm, I have heard of it, but I don't remember the precise recipe to make it...\"";
        next;
        if (@Q_status == @SETZER_KNOWS_OIL)
		menu	"OK, I'll ask around, perhaps someone else knows.", L_close;
        if (@Q_status > @SETZER_KNOWS_OIL)
		menu	"Rauk told me the recipe.", L_monster_oil_knows_recipe;
	close;

L_monster_oil_knows_recipe:
	mes "[Caul]";
	mes "\"Ah, but of course!  Yes, we should be able to brew that here.  Except that... hmm.  Pearl and three black scorpion stingers?  This sounds very dangerous;";
        mes "I fear that I will have to ask you to do this yourself.\"";
        next;

L_monster_oil_main_menu:
        set @main_menu, 1;
        menu
		"What do you mean by 'dangerous'?", L_monster_oil_why_dangerous,
		"What do I need, again?", L_monster_oil_ingredients,
		"How does this work?", L_monster_oil_explain,
		"Let's start!", L_monster_oil_start_brew,
                "Where can I get a golden scorpion stinger?", L_monster_oil_where_gold,
		"I've changed my mind.", L_close;
        close;

L_monster_oil_why_dangerous:
	mes "[Caul]";
	mes "\"Well, with those two reagents in there at that ratio, you risk an explosion-- quite possibly a fatal one.  So be prepared to duck if the brew gets too bubbly-- it's better to lose the ingredients than your head!\"";
        next;
	goto L_monster_oil_main_menu;

L_monster_oil_ingredients:
	mes "[Caul]";
	mes "\"You will need one pearl, two snake skins, three black scorpion stingers, two piles of ash, and a golden scorpion stinger.  The golden stinger goes in last, after the dangerous part, so you won't lose if if your brew blows up.\"";
        next;
	mes "[Caul]";
	mes "\"You should also bring gamboge, mauve, alizarin and cobalt leaves. You will have to stabilize the brew, and they will help with that.\"";
        next;
	goto L_monster_oil_main_menu;

L_monster_oil_explain:
	mes "[Caul]";
	mes "\"After you have put in the monster parts-- except for the golden stinger-- the brew will take on some random color; this can be a light, dark, or medium color.  You have to stabilize this color by adding leaves to it.\"";
        next;
	mes "[Caul]";
	mes "\"Of course, with such a violent brew the mixture will change color by itself, too, probably faster than your leaves can affect it.  It will randomly add or remove colors, and might even get lighter.\"";
        next;
	mes "[Caul]";
	mes "\"From what I have seen, it seems to go through phases-- for each alternate leaf it adds a colour, then removes a color, then adds again and so on.  Of course, if the color is there already it can't add any more.\"";
        next;
	mes "[Caul]";
	mes "\"I haven't figured out yet precisely when it gets lighter, though.\"";
        next;
	mes "[Caul]";
	mes "\"By adding Mauve, you can make it darker.  Alizarin adds red, Gamboge yellow, Cobalt blue.  To make it a proper black, you have to get it to be dark gray, then add one Mauve leaf.\"";
        next;
	mes "[Caul]";
	mes "\"Unfortunately the brew changes randomly before your leaves dissolve, so sometimes you can't help but add the wrong color...\"";
        next;
	mes "[Caul]";
	mes "\"Since the brew changes its color first, you might want to add the Mauve when your color is a dark purple or dark green or dark orange and hope for the best.\"";
        next;
	mes "[Caul]";
	mes "\"But don't add too much!  If you add a color that is already there, or try to make it darker at the wrong spot, it may backfire.\"";
        next;
        if (@main_menu)
		goto L_monster_oil_main_menu;
        goto L_monster_oil_loop;

L_monster_oil_where_gold:
	mes "[Caul]";
	mes "\"Good question.  There aren't any golden scorpions nearby.  Perhaps you can find a trader or an adventurer who have travelled further south and ask them to help?\"";
        next;
	goto L_monster_oil_main_menu;

L_monster_oil_start_brew:
        set @main_menu, 0;
	if (countitem ("Pearl") < 1) goto L_monster_oil_missing;
	if (countitem ("SnakeSkin") < 2) goto L_monster_oil_missing;
	if (countitem ("BlackScorpionStinger") < 3) goto L_monster_oil_missing;
	if (countitem ("PileOfAsh") < 2) goto L_monster_oil_missing;
	if (countitem ("GoldenScorpionStinger") < 1) goto L_monster_oil_missing_gold;

	delitem "Pearl", 1;
	delitem "SnakeSkin", 2;
	delitem "BlackScorpionStinger", 3;
	delitem "PileOfAsh", 2;

        set @bubble_mode, 0;
        setarray @bubble_modes$,
        	"The brew is calm.",
        	"The brew is bubbling.",
        	"The brew is bubbling violently.";

	set @color, 1 << (rand(3));
	setarray @colors$,
		"white",
		"red",
		"yellow",
		"orange",
		"blue",
		"purple",
		"green",
		"gray"; 

	set @intensity, 1;
	setarray @intensities$,
		"light",
		"medium",
		"dark";

	set @auto_mode, 0;	// Start by adding a colour or going lighter

	goto L_monster_oil_loop;

L_monster_oil_missing:
	mes "[Caul]";
	mes "\"You don't seem to have all of the ingredients.  You need one pearl, two snake skins, three black stingers, two piles of ash, and one golden stinger.\"";
        next;
        close;

L_monster_oil_missing_gold:
	mes "[Caul]";
	mes "\"You seem to have everything except for the golden stinger.  I understand that this one is hard to get, but I'm sure that you can find one somewhere.\"";
        next;
        close;

L_monster_oil_loop:
	mes "[Brewing monster oil]";
	mes @bubble_modes$[@bubble_mode];
        mes "It is currently a " + @intensities$[@intensity] + " " + @colors$[@color] + ".";
        next;

        menu
		"Add alizarin leaf", L_monster_oil_alizarin,
		"Add gamboge leaf", L_monster_oil_gamboge,
		"Add cobalt leaf", L_monster_oil_cobalt,
		"Add mauve leaf", L_monster_oil_mauve,
                "Ask Caul for advice", L_monster_oil_explain,
		"Duck!", -;

	mes "[Brewing monster oil]";
        mes "You throw yourself onto the ground.  Seconds later, the cauldron shakes, and your entire mixture explodes upwards.";
        mes "Caul crawls out from underneath a char.";
        next;
	mes "[Caul]";
        mes "\"I'm glad to see that you chose to brew another day... perhaps it might be best if you give up on this dangerous concoction, though!\"";
        next;
        close;

L_monster_oil_out_of_leaves:
	mes "[Brewing monster oil]";
        mes "You don't have any of these leaves left!";
        next;
        goto L_monster_oil_loop;

L_monster_oil_alizarin:
	set @use_leaf$, "AlizarinHerb";
	set @use_color, 1;
        goto L_monster_oil_leaf_color;

L_monster_oil_gamboge:
	set @use_leaf$, "GambogeHerb";
	set @use_color, 2;
        goto L_monster_oil_leaf_color;

L_monster_oil_cobalt:
	set @use_leaf$, "CobaltHerb";
	set @use_color, 4;
        goto L_monster_oil_leaf_color;

L_monster_oil_leaf_color:
        if (countitem (@use_leaf$) < 1) goto L_monster_oil_out_of_leaves;

	callsub S_monster_oil_random_move;
	if (@color & @use_color) goto L_monster_oil_pc_bad;
        set @color, @color | @use_color;
        delitem @use_leaf$, 1;

        mes "The brew changes its hue as your leaf dissolves.";
        next;
        goto L_monster_oil_loop;

L_monster_oil_mauve:
	if (countitem("MauveHerb") < 1) goto L_monster_oil_out_of_leaves;
        delitem "MauveHerb", 1;

	callsub S_monster_oil_random_move;
        if (@intensity == 2 && @color == 7) goto L_monster_oil_done;
        if (@intensity == 2) goto L_monster_oil_pc_bad;

        set @intensity, @intensity + 1;
        mes "The brew darkens as your mauve leaf dissolves.";
        next;
        goto L_monster_oil_loop;

S_monster_oil_random_move:
	mes "[Brewing monster oil]";
        mes "You throw in a leaf and stir.";

	if (@auto_mode == 1)
		goto L_monster_oil_random_1;

L_monster_oil_random_0: // mode 0:  add colour or lighten up
	set @auto_mode, 1;
        if (rand(3) == 0)
		goto L_monster_oil_random_0_lighten;

	set @choice, 1 << (rand(3));
	if (@color & @choice)
		goto L_monster_oil_auto_bad;
	set @color, @color | @choice;

        mes "Before your leaf has a chance to dissolve, the brew changes to a " + @colors$[@color] + " hue.";
        return;

L_monster_oil_random_0_lighten:
	if (@intensity == 0)
		goto L_monster_oil_auto_bad;
	set @intensity, @intensity - 1;
        mes "Before your leaf has a chance to dissolve, the brew takes on a lighter shade of " + @colors$[@color] + ".";
	return;

L_monster_oil_random_1: // mode 1: remove colour
	set @auto_mode, 0;
	set @choice, 1 << (rand(3));
	if (!(@color & @choice))
		goto L_monster_oil_auto_bad;
	set @color, @color & (~@choice);
        mes "Before your leaf has a chance to dissolve, the brew changes to a " + @colors$[@color] + " hue.";
        return;

L_monster_oil_pc_bad:
	if (rand(readparam(bInt) + 100) > 60) goto L_monster_oil_pc_bad_ok;
        if (@bubble_mode)
        	mes "As your leaf dissolves, the intensity of the bubbling increases.";
        if (!@bubble_mode)
        	mes "As your leaf dissolves, the brew begins to bubble.";
	next;
        set @bubble_mode, @bubble_mode + 1;
        if (@bubble_mode > 2)
		goto L_monster_oil_explode;
        goto L_monster_oil_loop;

L_monster_oil_pc_bad_ok:
	mes "Your leaf dissolves but seems to have no effect.";
        next;
        goto L_monster_oil_loop;

L_monster_oil_auto_bad:
	if (rand(3) == 0)
		return;
	if (rand(readparam(bInt) + 100) > 70)
		return;
        mes "The brew begins to bubble more violently.";
        set @bubble_mode, @bubble_mode + 1;
        if (@bubble_mode > 2)
                next;
        if (@bubble_mode > 2)
		goto L_monster_oil_explode;
	return;

L_monster_oil_explode:
        mes "[Exploding monster oil]";
        mes "Your brew explodes!";
        if (rand(readparam(bAgi)) > 40)
		goto L_monster_oil_explode_dodge;
	mes "The burst of boiling monster brew hits you.";
        next;
        itemheal (15 * rand(readparam(bVit))) - 1500, 0;
        close;

L_monster_oil_explode_dodge:
	mes "You throw yourself to the ground at the very last moment, barely avoiding the burst of boiling monster brew.";
        next;
	mes "[Caul]";
        mes "Caul nods at you from underneath a chair.";
        mes "\"I told you, it's dangerous!!\"";
        next;
        close;

L_monster_oil_done:
        mes "As you throw in another mauve leaf, the brew takes on a deep black color and calms down.";
        next;

	mes "[Brewing monster oil]";
        mes "As instructed, you toss in your golden scorpion stinger.";

	if (countitem ("GoldenScorpionStinger") < 1) goto L_monster_oil_no_gold_end;

        mes "The brew bubbles once more, then calms completely.";

        delitem "GoldenScorpionStinger", 1;
        getitem "MonsterOilPotion", 1;

        if (!(@Q_status & @SETZER_FLAG_MADE_OIL))
        	getexp @MONSTER_OIL_XP, 0;
        if (!(@Q_status & @SETZER_FLAG_MADE_OIL))
        	mes "[" + @MONSTER_OIL_XP + " experience points]";

	set @Q_status, @Q_status | @SETZER_FLAG_MADE_OIL;
	callsub S_Update_Var;
        next;

	mes "[Caul]";
        mes "Caul gets up from underneath the cover he was taking and looks at your brew.  He is visibly impressed.";
        mes "\"Well done!  This should be just enough for one potion of monster oil.  Let me get you a bottle.\"";
        mes "He hands you the monster oil.";
        next;
        close;

L_monster_oil_no_gold_end:
	mes "But where is your golden stinger?  Didn't you have one earlier?";
        mes "Frustrated, you give up.";
        next;
        close;

L_close:
	close;

S_Update_Var:
	set QUEST_Forestbow_state,
		(QUEST_Forestbow_state & ~(@Q_MASK)
		| (@Q_status << @Q_SHIFT));
	return;

L_NohMask:
	mes "[Caul]";
	mes "\"I'm sorry, but I didn't. I'm staying in town. Try asking one of the miners.\"";
	close;
}