summaryrefslogblamecommitdiff
path: root/world/map/npc/magic/level0-reapercry.txt
blob: fd80f11359ae1788af48ab19365c2bbd97c1df8c (plain) (tree)



















































































































































































































































                                                                                               
// #reapercry
// Spell to warp to Keshlam Outskirts
// Variable: @reapercry -> Holds summon state
//
// If this was Evol2 engine, I would be able to easily use bitmasks,
// Having a custom password sequence unique per character.
// But alas, on TMWA, I can't really abuse player variables.
// So I allow you to cheat. Or not. Lemme think. Account variable...

// Returns true if player inside candle area
// call("alacriuspos", bitwise)
function|script|alacriuspos
{
    set @alacriusp, 0;

    // Left side
    if (1 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_25_53_29_56;
    if (2 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_20_47_22_51;
    if (4 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_22_40_25_43;
    if (8 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_29_40_32_43;
    if (16 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_32_47_35_50;
    if (32 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_25_53_29_56;
    // Left not set
    if (1 == getarg(0))
        goto L_29_40_32_43;
    if (2 == getarg(0))
        goto L_32_47_35_50;
    if (4 == getarg(0))
        goto L_25_53_29_56;
    if (8 == getarg(0))
        goto L_20_47_22_51;
    if (16 == getarg(0))
        goto L_22_40_25_43;
    if (32 == getarg(0))
        goto L_29_40_32_43;
    // Right side
    if (64 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_49_53_53_56;
    if (128 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_43_47_46_51;
    if (256 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_46_40_49_43;
    if (512 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_53_40_56_43;
    if (1024 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_56_47_58_50;
    if (2048 == getarg(0) && #CRYPT_PASSWORD & getarg(0))
        goto L_49_53_53_56;
    // Right side not set
    if (64 == getarg(0))
        goto L_53_40_56_43;
    if (128 == getarg(0))
        goto L_56_47_58_50;
    if (256 == getarg(0))
        goto L_49_53_53_56;
    if (512 == getarg(0))
        goto L_43_47_46_51;
    if (1024 == getarg(0))
        goto L_46_40_49_43;
    if (2048 == getarg(0))
        goto L_53_40_56_43;

    // Nope, all wrong
    set @alacriusp, 0;
    return;

// Left Side Labels
L_29_40_32_43:
    set @alacriusp, isin("027-8", 29, 40, 32, 43);
    return;
L_22_40_25_43:
    set @alacriusp, isin("027-8", 22, 40, 25, 43);
    return;
L_20_47_22_51:
    set @alacriusp, isin("027-8", 20, 47, 22, 51);
    return;
L_25_53_29_56:
    set @alacriusp, isin("027-8", 25, 53, 29, 56);
    return;
L_32_47_35_50:
    set @alacriusp, isin("027-8", 32, 47, 35, 50);
    return;

// Right Side Labels
L_53_40_56_43:
    set @alacriusp, isin("027-8", 53, 40, 56, 43);
    return;
L_46_40_49_43:
    set @alacriusp, isin("027-8", 46, 40, 49, 43);
    return;
L_43_47_46_51:
    set @alacriusp, isin("027-8", 43, 47, 46, 51);
    return;
L_49_53_53_56:
    set @alacriusp, isin("027-8", 49, 53, 53, 56);
    return;
L_56_47_58_50:
    set @alacriusp, isin("027-8", 56, 47, 58, 50);
    return;

}

-|script|reapercry|32767
{
    if(call("magic_checks")) end;
    callfunc "magic_exp";

    // Not in Terogan's Room
    if (getmap() != "027-8") end;

    // Terogan is asleep
    if (!$@CRYPT_FIGHT3) end;

    // No password is set o.o
    if (!#CRYPT_PASSWORD) end;

    // Switch the quest state
    if (@reapercry == 0)
        goto L_Check0;
    if (@reapercry == 1)
        goto L_Check1;
    if (@reapercry == 2)
        goto L_Check2;
    if (@reapercry == 3)
        goto L_Check3;
    if (@reapercry == 4)
        goto L_Check4;
    if (@reapercry == 5)
        goto L_Check5;

    // Something went wrong!!
    end;

//////////////////////////////////////////////////////
L_Check0:
    void call("alacriuspos", 1);
    if (@alacriusp) goto L_Exec0;
    void call("alacriuspos", 64);
    if (@alacriusp) goto L_Exec0;

    set @reapercry, 0;
    misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0);
    end;

L_Exec0:
    misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME
    set @reapercry, 1;
    end;

//////////////////////////////////////////////////////
L_Check1:
    void call("alacriuspos", 2);
    if (@alacriusp) goto L_Exec1;
    void call("alacriuspos", 128);
    if (@alacriusp) goto L_Exec1;

    set @reapercry, 0;
    misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0);
    end;

L_Exec1:
    misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME
    set @reapercry, 2;
    end;

//////////////////////////////////////////////////////
L_Check2:
    void call("alacriuspos", 4);
    if (@alacriusp) goto L_Exec2;
    void call("alacriuspos", 256);
    if (@alacriusp) goto L_Exec2;

    set @reapercry, 0;
    misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0);
    end;

L_Exec2:
    misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME
    set @reapercry, 3;
    end;

//////////////////////////////////////////////////////
L_Check3:
    void call("alacriuspos", 8);
    if (@alacriusp) goto L_Exec3;
    void call("alacriuspos", 512);
    if (@alacriusp) goto L_Exec3;

    set @reapercry, 0;
    misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0);
    end;

L_Exec3:
    misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME
    set @reapercry, 4;
    end;

//////////////////////////////////////////////////////
L_Check4:
    void call("alacriuspos", 16);
    if (@alacriusp) goto L_Exec4;
    void call("alacriuspos", 1024);
    if (@alacriusp) goto L_Exec4;

    set @reapercry, 0;
    misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0);
    end;

L_Exec4:
    misceffect FX_FIRE_EXPLOSION, strcharinfo(0); // Hmm FIXME
    set @reapercry, 5;
    end;

//////////////////////////////////////////////////////
L_Check5:
    void call("alacriuspos", 32);
    if (@alacriusp) goto L_Exec5;
    void call("alacriuspos", 2048);
    if (@alacriusp) goto L_Exec5;

    set @reapercry, 0;
    misceffect FX_MAGIC_DARK_EXPLOSION, strcharinfo(0);
    end;

L_Exec5:
    // This means cast sequence complete
    // Maybe FX_MAGIC_BLUE_TELEPORT? (iilia's effect)
    set @reapercry, 0;
    misceffect FX_MAGIC_TELEPORT, strcharinfo(0);
    warp "099-7", 75, 36;
    end;

//////////////////////////////////////////////////////
OnInit:
    set .invocation$, chr(MAGIC_SYMBOL) + "reapercry"; // used in npcs that refer to this spell
    registercmd .invocation$, strnpcinfo(0);
    end;
}