summaryrefslogblamecommitdiff
path: root/npc/009-4/torches.txt
blob: fe1fc187b0ba766b019da8aedc62044435d08c4e (plain) (tree)





























































































































































































































































































                                                                                                                                                                                   
function	script	GetTorchColor	{
    if (@Torch < 0 || @Torch > 2) goto L_Error;

    @Mask = 15;
    @shift = 4 * @Torch;
    @TorchColor = (OrumQuestTorch >> @shift) & @Mask;
    return;

L_Error:
    mes "Torch number is out of range.";
    close2;
    return;
}

function	script	SetTorchColor	{
    if (@Torch < 0 || @Torch > 2) goto L_Error;
    if (@TorchColor < 1 || @TorchColor > 12) goto L_Error2;

    @Mask = (15 << (4 * @Torch));
    OrumQuestTorch = (OrumQuestTorch & (~(@Mask))) | @TorchColor << (4 * @Torch);
    return;

L_Error:
    mes "Torch number is out of range.";
    close2;
    return;

L_Error2:
    mes "Torch color is out of range.";
    close2;
    return;
}

function	script	GetTorchIntensity	{
    if (@Torch < 0 || @Torch > 2) goto L_Error;

    @Mask = 15;
    @shift = 4 * (@Torch + 3);
    @TorchIntensity = (OrumQuestTorch >> @shift) & @Mask;
    return;

L_Error:
    mes "Torch number is out of range.";
    close2;
    return;
}

function	script	SetTorchIntensity	{
    if (@Torch < 0 || @Torch > 2) goto L_Error;
    if (@TorchIntensity < 0 || @TorchIntensity > 2) goto L_Error2;

    @Mask = (15 << (4 * (@Torch + 3)));
    OrumQuestTorch = (OrumQuestTorch & (~(@Mask))) | @TorchIntensity << (4 * (@Torch + 3));
    return;

L_Error:
    mes "Torch number is out of range.";
    close2;
    return;

L_Error2:
    mes "Torch intensity is out of range.";
    close2;
    return;
}

function	script	DoneWithTorches	{
    if (OrumQuest < 11 && OrumQuest >= 8)
        goto L_Return;

    if (OrumQuest < 7) goto L_Different;

    if (OrumQuest >= 11)
        mes "The flame on the torch looks ordinary. Lowering the final barrier seems to have drained them of their magic.";

    if (OrumQuest < 8)
        mes "Without that powder the note mentions there isn't much you can do with this torch.";
    close2;
    goto L_Return;

L_Different:
    mes "The flame on this torch looks different than the rest. You better tell Orum about it before doing anything.";
    OrumQuest = 6;
    close2;
    goto L_Return;

L_Return:
    return;
}

function	script	TorchLoop	{
    // Variables used here:
    // @Torch - pass before calling
    // @TorchColor - initialized here, updated throughout
    // @TorchIntensity - initialized here, updated throughout
    callfunc "GetTorchColor";
    callfunc "GetTorchIntensity";

    setarray @colors$, "transparent",
        "red", "dark orange", "orange", "light orange",
        "yellow", "light green", "green", "dark green",
        "blue", "dark purple", "purple", "light purple";
    setarray @intensities$, "calm", "bright", "blinding";
    mes "Looking closely you notice that this torch is not like the others. This one has a " + @intensities$[@TorchIntensity] + " ##B" + @colors$[@TorchColor] + "##b tint to it.";
    goto L_Color_Loop;

L_Color_Loop:
    menu
        "Add Red Powder", L_Use_Red,
        "Add Yellow Powder", L_Use_Yellow,
        "Add Blue Powder", L_Use_Blue,
        "Leave it alone.", L_Leave;

L_Leave:
    mes "The flame flickers as if it's laughing at you.";
    close2;
    return;

L_Use_Red:
    if (countitem("RedPowder") < 1)
        goto L_No_Powder;
    delitem "RedPowder", 1;

    // 0 1 2 3 4 5 6 7 8 9 a b c
    // T R   o   Y   g   B   p
    //   ^ < < < < , X . > > > >
    if (@TorchColor == 1)
        goto L_WrongColor;
    if (2 <= @TorchColor && @TorchColor <= 5)
        goto L_Color_Dec;
    if (@TorchColor == 6)
        goto L_Color_Dec_Wrong;
    if (@TorchColor == 7)
        goto L_WrongColor;
    if (@TorchColor == 8)
        goto L_Color_Inc_Wrong;
    if (9 <= @TorchColor && @TorchColor <= 12)
        goto L_Color_Inc;

    // work around an old bug
    if (@TorchColor == 0)
        @TorchColor = 1;
    goto L_Show_Color;

L_Use_Yellow:
    if (countitem("YellowPowder") < 1)
        goto L_No_Powder;
    delitem "YellowPowder", 1;

    // 0 1 2 3 4 5 6 7 8 9 a b c
    // T R   o   Y   g   B   p
    //   > > > > ^ < < < < , X .
    if (1 <= @TorchColor && @TorchColor <= 4)
        goto L_Color_Inc;
    if (@TorchColor == 5)
        goto L_WrongColor;
    if (6 <= @TorchColor && @TorchColor <= 9)
        goto L_Color_Dec;
    if (@TorchColor == 10)
        goto L_Color_Dec_Wrong;
    if (@TorchColor == 11)
        goto L_WrongColor;
    if (@TorchColor == 12)
        goto L_Color_Inc_Wrong;

    // work around an old bug
    if (@TorchColor == 0)
        @TorchColor = 5;
    goto L_Show_Color;

L_Use_Blue:
    if (countitem("BluePowder") < 1)
        goto L_No_Powder;
    delitem "BluePowder", 1;

    // 0 1 2 3 4 5 6 7 8 9 a b c
    // T R   o   Y   g   B   p
    //   < , X . > > > > ^ < < <
    if (@TorchColor == 1)
        goto L_Color_Dec;
    if (@TorchColor == 2)
        goto L_Color_Dec_Wrong;
    if (@TorchColor == 3)
        goto L_WrongColor;
    if (@TorchColor == 4)
        goto L_Color_Inc_Wrong;
    if (5 <= @TorchColor && @TorchColor <= 8)
        goto L_Color_Inc;
    if (@TorchColor == 9)
        goto L_WrongColor;
    if (10 <= @TorchColor && @TorchColor <= 12)
        goto L_Color_Dec;

    // work around an old bug
    if (@TorchColor == 0)
        @TorchColor = 9;
    goto L_Show_Color;

L_No_Powder:
    mes "You notice you're all out of that color of powder. Perhaps Orum can make you some more.";
    close2;
    return;

L_Color_Dec:
    @TorchColor = @TorchColor - 1;
    if (@TorchColor == 0)
        @TorchColor = 12;
    goto L_Show_Color;

L_Color_Dec_Wrong:
    @TorchColor = @TorchColor - 1;
    if (@TorchColor == 0)
        @TorchColor = 12;
    goto L_WrongColor;

L_Color_Inc_Wrong:
    @TorchColor = @TorchColor + 1;
    if (@TorchColor == 13)
        @TorchColor = 1;
    goto L_WrongColor;

L_Color_Inc:
    @TorchColor = @TorchColor + 1;
    if (@TorchColor == 13)
        @TorchColor = 1;
    goto L_Show_Color;

L_Show_Color:
    callfunc "SetTorchColor";
    misceffect 5;
    mes "As your pour the powder into the flame you can see its tint transform to a " + @intensities$[@TorchIntensity] + " ##B" + @colors$[@TorchColor] + "##b.";
    goto L_Color_Loop;

L_WrongColor:
    callfunc "SetTorchColor";
    @TorchIntensity = @TorchIntensity + 1;
    if (@TorchIntensity > 2)
        goto L_Failed;
    callfunc "SetTorchIntensity";
    misceffect 5;
    mes "As you pour the powder into the flame it flares violently for a moment and then turns into a " + @intensities$[@TorchIntensity] + " ##B" + @colors$[@TorchColor] + "##b.";
    goto L_Color_Loop;

L_Failed:
    mes "As you pour the powder into the flame it flares violently before bursting into your face!";
    misceffect 5;
    misceffect 16;
    @TorchIntensity = 0;
    callfunc "SetTorchIntensity";
    heal -Hp, 0;
    close2;
    return;
}

009-4,68,21,0	script	Torch#1	NPC400,{
    callfunc "PCtoNPCRange";
    if(@npc_check) end;
    callfunc "DoneWithTorches";

    @Torch = 0;
    callfunc "TorchLoop";
    // unreachable
    end;
}

009-4,67,42,0	script	Torch#2	NPC400,{
    callfunc "PCtoNPCRange";
    if(@npc_check) end;
    callfunc "DoneWithTorches";

    @Torch = 1;
    callfunc "TorchLoop";
    // unreachable
    end;
}

009-4,33,86,0	script	Torch#3	NPC400,{
    callfunc "PCtoNPCRange";
    if(@npc_check) end;
    callfunc "DoneWithTorches";

    @Torch = 2;
    callfunc "TorchLoop";
    // unreachable
    end;
}