diff options
Diffstat (limited to 'world/map/npc/magic')
-rw-r--r-- | world/map/npc/magic/_import.txt | 1 | ||||
-rw-r--r-- | world/map/npc/magic/level0-reapercry.txt | 244 | ||||
-rw-r--r-- | world/map/npc/magic/level2-lightning-strike.txt | 2 |
3 files changed, 247 insertions, 0 deletions
diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt index 5c82ebac..4671ac7a 100644 --- a/world/map/npc/magic/_import.txt +++ b/world/map/npc/magic/_import.txt @@ -1,6 +1,7 @@ npc: npc/magic/_procedures.txt npc: npc/magic/level0-antiprotect.txt npc: npc/magic/level0-discharge.txt +npc: npc/magic/level0-reapercry.txt npc: npc/magic/level0-wand.txt npc: npc/magic/level1-aggravate.txt npc: npc/magic/level1-experience.txt diff --git a/world/map/npc/magic/level0-reapercry.txt b/world/map/npc/magic/level0-reapercry.txt new file mode 100644 index 00000000..fd80f113 --- /dev/null +++ b/world/map/npc/magic/level0-reapercry.txt @@ -0,0 +1,244 @@ +// #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; +} diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt index 05d358e3..d454abc6 100644 --- a/world/map/npc/magic/level2-lightning-strike.txt +++ b/world/map/npc/magic/level2-lightning-strike.txt @@ -19,6 +19,8 @@ (((200 - Agi) * 3000) / 200), // delay 0, // in_rain 0; // target id (tmp) + if (getequipid(equip_misc1) == 5253 || getequipid(equip_misc2) == 5253) + set @ingravspell[3], @ingravspell[3]*8/10+1; callfunc "magic_exp"; goto L_FreeRecast; |