// TMW2 Script
// Author: Jesusalva
// With parts from The Mana World.
function script SoulMenhir {
// Create @x and @y for this script
@n = rand2(getarraysize(@Xs));
@x = @Xs[@n];
@y = @Ys[@n];
deletearray @Xs;
deletearray @Ys;
@n = 0;
mes l("[Soul Menhir]");
mes l("(A mystical aura surrounds this stone. You feel mysteriously attracted to it. Something tells you to touch it. What do you do?)");
menu
rif(@x && @y, l("Touch it.")), L_Bind,
rif($@GM_EVENT, l("Send soul to the Mana Plane for GM events")), L_Aeros,
rif($EVENT$ == "Valentine", l("[Valentine Day] Send soul to the Valentine Highlands!")), L_Valentine,
rif($EVENT$ == "Easter", l("[Easter] Send soul to the Mana Forest!")), L_Easter,
rif($EVENT$ == "Worker", l("[Worker Day] Send soul to the Contributor Cave!")), L_Worker,
rif($EVENT$ == "Christmas" && BaseLevel >= 20, l("[Christmas] Send soul to the Christmas Workshop!")), L_Xmas, // TODO: In future there'll be an event map
rif($EVENT$ == "Tower" && countitem(EventDreamTicket), l("Dream Tower")), L_Tower,
rif($EVENT$ == "Raid", l("Boss Raid")), L_Raid,
rif($EVENT$ == "Olympics", l("[Magic Olympics] Send soul to Porthos")), L_Porthos,
l("Leave it alone."), -;
return;
L_Bind:
if (@map$ == "003-1" && !(TELEPORTERS & TP_TULIM))
TELEPORTERS=TELEPORTERS|TP_TULIM;
if (@map$ == "012-1" && !(TELEPORTERS & TP_HURNS))
TELEPORTERS=TELEPORTERS|TP_HURNS;
if (@map$ == "020-1" && !(TELEPORTERS & TP_NIVAL))
TELEPORTERS=TELEPORTERS|TP_NIVAL;
if (Menhir_Activated == 1)
goto L_Shortversion;
mes l("[Soul Menhir]");
mes l("(You touch the mysterious stone. Somehow it feels warm and cold at the same time.)");
mes l("(Suddenly a strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone.)");
mes l("(As suddenly as the feeling started it stops. The strange attraction is away from one moment to the next and the menhir feels like just an ordinary stone.)");
Menhir_Activated = 1;
goto L_Save;
L_Shortversion:
mes l("[Soul Menhir]");
mes l("(A strange sensation flows through you. It feels like your soul leaves your body and becomes one with the stone. As suddenly as the feeling started it stops.)");
goto L_Save;
L_Aeros:
if (!$@GM_EVENT) goto L_DontPanic;
.@gt=$@AEROS_SPWN;
if (.@gt == 2) {
select
l("East Aeros"),
l("West Aeros");
.@gt=@menu-1;
}
switch (.@gt) {
case 0:
warp "001-1", 235, 26; break;
case 1:
warp "001-1", 23, 108; break;
}
specialeffect(63, AREA, getcharid(3));
message strcharinfo(0), l("You are now at the Mana Plane of Existence, at the Floating Island of Aeros.");
close;
L_Valentine:
if ($EVENT$ != "Valentine") goto L_DontPanic;
warp "001-11", 38, 32;
message strcharinfo(0), l("You are now at the Valentine Highlands.");
close;
L_Easter:
if ($EVENT$ != "Easter") goto L_DontPanic;
warp "001-4", 151, 157;
message strcharinfo(0), l("You are now at the Mana Plane of Existence, at the Magical Forest.");
close;
L_Worker:
if ($EVENT$ != "Worker") goto L_DontPanic;
warp "001-5", 22, 79;
message strcharinfo(0), l("You are now at the Mana Plane of Existence, at the Contributor's Cave.");
close;
L_Xmas:
if ($EVENT$ != "Christmas") goto L_DontPanic;
warp "019-4-1", 32, 36;
message strcharinfo(0), l("You are now at the Christmas Workshop.");
close;
L_Tower:
if ($EVENT$ != "Tower") goto L_DontPanic;
if (!countitem(EventDreamTicket)) goto L_DontPanic;
doevent "sDreamTower::OnWarpTo";
close;
L_Raid:
if ($EVENT$ != "Raid") goto L_DontPanic;
callfunc("FYRaid_Select");
close;
L_Porthos:
if ($EVENT$ != "Olympics") goto L_DontPanic;
callfunc("FYE_Olympics_TO");
closeclientdialog;
close;
L_DontPanic:
message strcharinfo(0), l("(A strange barrier keeps you from touching the stone at this time.)");
return;
L_Save:
if (GSET_SOULMENHIR_MANUAL) {
.@v$=MapToLoc(@map$);
.@tp=POL_LocToTP(strtoupper(.@v$));
if (!(#EXILED & .@tp)) {
savepoint @map$, @x, @y;
specialeffect(4, SELF, getcharid(3));
} else {
mesc l("You are exiled from this town and therefore, unable to use the Menhir."), 1;
}
} else {
EnterTown(MapToLoc(@map$));
dispbottom col(l("Your position is auto-saved when entering a town - use @ucp to change this behavior."), 1);
}
return;
}