summaryrefslogtreecommitdiff
path: root/npc/003-0
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
committerJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
commita7c45a192268da2601cef47a4cdba987ae2327ca (patch)
treec5fb5b97db109fe7106496dd96498c475881046b /npc/003-0
downloadserverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/003-0')
-rw-r--r--npc/003-0/_import.txt7
-rw-r--r--npc/003-0/_mobs.txt4
-rw-r--r--npc/003-0/_warps.txt3
-rw-r--r--npc/003-0/mainquest.txt178
-rw-r--r--npc/003-0/notes138
-rw-r--r--npc/003-0/recepcionist.txt162
-rw-r--r--npc/003-0/trickmaster.txt125
7 files changed, 617 insertions, 0 deletions
diff --git a/npc/003-0/_import.txt b/npc/003-0/_import.txt
new file mode 100644
index 0000000..d7fe2f9
--- /dev/null
+++ b/npc/003-0/_import.txt
@@ -0,0 +1,7 @@
+// Map 003-0: Magic Academy
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/003-0/_mobs.txt",
+"npc/003-0/_warps.txt",
+"npc/003-0/mainquest.txt",
+"npc/003-0/recepcionist.txt",
+"npc/003-0/trickmaster.txt",
diff --git a/npc/003-0/_mobs.txt b/npc/003-0/_mobs.txt
new file mode 100644
index 0000000..23f6637
--- /dev/null
+++ b/npc/003-0/_mobs.txt
@@ -0,0 +1,4 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 003-0: Magic Academy mobs
+003-0,45,32,24,2 monster Piou 1002,3,60000,30000
+003-0,45,30,24,1 monster Croc 1006,3,60000,30000
diff --git a/npc/003-0/_warps.txt b/npc/003-0/_warps.txt
new file mode 100644
index 0000000..0d4ddff
--- /dev/null
+++ b/npc/003-0/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 003-0: Magic Academy warps
+003-0,48,52,0 warp #003-0_48_52 2,0,003-1,34,34
diff --git a/npc/003-0/mainquest.txt b/npc/003-0/mainquest.txt
new file mode 100644
index 0000000..28f49a8
--- /dev/null
+++ b/npc/003-0/mainquest.txt
@@ -0,0 +1,178 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Main Quest
+
+003-0,49,35,0 script #MQ25Trigger NPC_HIDDEN,3,0,{
+ end;
+
+OnTouch:
+ .@m$=getmap();
+ .@n$=instance_npcname(.name$);
+ if (is_night())
+ doevent instance_npcname(.name$)+"::OnBegin";
+ else
+ addtimer 1000, instance_npcname(.name$)+"::OnCheck";
+ end;
+
+// Checks if you are in designated ambush zone. If not, keep hidden
+OnCheck:
+ .@m$=getmap();
+ .@n$=instance_npcname(.name$);
+ if (!isin(.@m$, 44, 24, 54, 34))
+ end;
+ // goto OnBegin;
+
+// Begin
+OnBegin:
+ .@m$=getmap();
+ .@n$=instance_npcname(.name$);
+ .PLAYER=getcharid(3);
+
+ // Is assassin ambushing you or professor?
+ if (is_night()) {
+ .@x=any(46, 52);
+ .@y=34;
+ } else {
+ getmapxy(.@m$, .@x, .@y, 0);
+ .@y-=3;
+ if (.@y < 34)
+ .@y=34;
+ }
+ setcells .@m$, 47, 35, 51, 35, 3, "MQ2Wall"+getcharid(0);
+ if (isin(.@m$, 44, 24, 54, 34)) {
+ warp .@m$, 49, 33;
+ atcommand("@refresh");
+ }
+ .ASSASSIN=monster(.@m$, .@x, .@y, l("Assassin"), Assassin, 1, .@n$+"::OnAssassinDefeat");
+ unittalk(.ASSASSIN, l("Die now!!"));
+ // Nerf ATK, boost HP
+ /*
+ Hp: 4211
+ Attack: [198, 214]
+ */
+ setunitdata(.@REF, UDT_MAXHP, 4750);
+ setunitdata(.@REF, UDT_HP, 4750);
+ setunitdata(.@REF, UDT_ATKMIN, 150);
+ setunitdata(.@REF, UDT_ATKMAX, 180);
+
+ // TODO: unitwalk
+ /*
+ // TODO: Energy Balls. Should they spawn at (21,31) and (69,31)?
+ // At this time they are utterly deadly. You could use a skill to
+ // disable them... Perhaps... A grenade?
+ dispbottom col(l("SCRIPT ERROR (%s/%s)", .@m$, .@n$), 1);
+ dispbottom l("An error happened: unitwalk failed");
+ */
+ // TODO: Assassinate
+ initnpctimer;
+ end;
+
+OnTimer15000:
+ .@n$=instance_npcname(.name$);
+ unittalk(.ASSASSIN, ("Heh... He gave me a ball, but..."));
+ end;
+
+OnTimer20000:
+ .@n$=instance_npcname(.name$);
+ unittalk(.ASSASSIN, ("I can do this alone!"));
+ end;
+
+OnTimer60000:
+ .@n$=instance_npcname(.name$);
+ unittalk(.ASSASSIN, ("Tsc...! I'll need reinforcements!"));
+ end;
+
+OnTimer65000:
+ .@n$=instance_npcname(.name$);
+ unittalk(.ASSASSIN, ("How was the summoning again...?!"));
+ end;
+
+OnTimer75000:
+ .@n$=instance_npcname(.name$);
+ unittalk(.ASSASSIN, ("Oh, that's right!"));
+ end;
+
+OnTimer82000:
+ .@n$=instance_npcname(.name$);
+ unittalk(.ASSASSIN, ("ENEEEEEEEEERGY BALLLLLLL!"));
+ getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, .ASSASSIN);
+ .@REF=monster(.@m$, .@x, .@y, "Energy Ball", EnergyBall, 1);
+
+ // Nerf the monster, be careful, it has a powerful skill!
+ setunitdata(.@REF, UDT_AGI, 1);
+ setunitdata(.@REF, UDT_LUK, 1);
+ setunitdata(.@REF, UDT_DEF, 10);
+ setunitdata(.@REF, UDT_MDEF, 20);
+ setunitdata(.@REF, UDT_MAXHP, 1000);
+ setunitdata(.@REF, UDT_HP, 1000);
+ end;
+
+OnAssassinDefeat:
+ stopnpctimer;
+ .@m$=getmap();
+ .@n$=instance_npcname(.name$);
+ delcells "MQ2Wall"+getcharid(0);
+ LUA_ASKED_TO_SAVE_PROFESSOR=false;
+ getexp 16, 5; // Extra bonus :>
+
+ if (is_night()) {
+ unittalk(getnpcid(instance_npcname(.name$)), l("Thanks for the help, I guess...?"));
+ } else {
+ dispbottom l("A mission well done. I should report to lua now.");
+ }
+ // Extra extra EXTRA bonus
+ CsysNpcCraft(SmallKnife, IOPT_SPLASHDAMAGE, 1, 0,0, 0,0, VAR_MAXHPPERCENT, -5);
+ addtimer 100, instance_npcname(.name$)+"::OnAbort";
+ specialeffect(FX_FANFARE, SELF, getcharid(3));
+ end;
+
+OnAbort:
+ stopnpctimer;
+ end;
+
+OnInit:
+ disablenpc .name$;
+ end;
+
+OnInstanceInit:
+ if (is_night()) {
+ .@n$=instance_npcname("Professor#003-0");
+ enablenpc .@n$;
+ }
+ .ASSASSIN=0;
+ .PLAYER=0;
+ end;
+}
+
+003-0,49,24,4 script Professor#003-0 NPC_PLAYER,{
+ npctalkonce l("I wonder if it'll take too long for the ship to arrive...");
+ end;
+
+OnTouchNPC:
+ npctalk l("An error happened: professor_was_assasinated() error");
+ npctalk ("SCRIPT ERROR (OnTouch Game Over)");
+ end;
+
+OnInit:
+ .@ini=true;
+OnInstanceInit:
+ if (.@ini)
+ .@npcId = getnpcid(.name$);
+ else
+ .@npcId = getnpcid(instance_npcname(.name$));
+
+ setunitdata(.@npcId, UDT_HEADTOP, GraduationCap);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, GraduationRobe); // TODO: Bathrobe
+ setunitdata(.@npcId, UDT_HEADBOTTOM, Slippers); // Hey hey!
+ setunitdata(.@npcId, UDT_WEAPON, CottonGloves);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 2);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 4);
+
+ .sex=G_MALE;
+ .distance=5;
+ disablenpc .name$;
+ end;
+}
+
diff --git a/npc/003-0/notes b/npc/003-0/notes
new file mode 100644
index 0000000..f5ce8d6
--- /dev/null
+++ b/npc/003-0/notes
@@ -0,0 +1,138 @@
+FFA - FREE FOR ALL
+ AL_DP (Divine Protection, +DEF vs undead/evil) (raised at Mana Stone)
+
+----
+AOE (DESTRUCTIVE MAGIC)
+ MG_NAPALMBEAT
+ MG_FIREBALL
+ WZ_FROSTNOVA (38%+5% freeze, 73%+7%/lv MATK)
+
+SINGLE TARGET (D.M.)
+ AL_HOLYLIGHT (standard holy magic attack - 125% of MATK)
+ MG_SOULSTRIKE (+5% MATK, +1 hit each 2 levels)
+ MG_COLDBOLT (ele)
+ MG_FIREBOLT (ele)
+ MG_LIGHTININGBOLT (ele)
+ WZ_EARTHSPIKE (ele / not a bolt for PF_DOUBLECASTING)
+ MG_FROSTDIVER (38%+3% freeze, +10% MATK)
+
+
+
+AOE (P.S.)
+ ASC_METEORASSAULT (area: self 2X2, 80%+40%/lv ATK, 10+5%/lv stun/blind/bleed)
+ AC_SHOWER (3x3 attack for BOWS)
+
+SINGLE TARGET (PHYSICAL SCIENCE)
+ SM_BASH (+30% ATK, HIT +5%, após lv 6: stun (5%/lv))
+ MC_MAMMONITE (+50% atk/lv)
+ KN_AUTOCOUNTER (contra-ataque, TOP)
+
+ AC_CHARGEARROW (Ranged, 150% DMG, 6 tiles knockback, NEED GWENDOLYN)
+ SN_SHARPSHOOTING (ULTIMATE ranged attack)
+
+
+
+SUPPORT SCIENCE / SCHOLARSHIP (self)
+ AC_OWL (raise 1 DEX per level)
+ SA_DRAGONOLOGY (PV: +4% ATK, +2% MATK, +1 INT and +4% resist against DRAGONS)
+ TMW2_SAGE (PV: grants up to 1.5 extra mana exp point/level)
+ MG_SRECOVERY (PV: small increase to SP Recovery while idle each 10 sec.)
+ SM_RECOVERY (PV: small increase to HP Recovery while idle each 10 sec.)
+
+ SN_WINDWALK (raise walking speed +2%/lv and flee rate +1/2lv)
+
+ CR_TRUST (PV: MaxHP +200/lv, Holy DEF +5%/lv)
+ AC_VULTURE (PV: raise range and cth with BOWS)
+
+SUPPORT SCIENCE / SCHOLARSHIP (MMO)
+ AL_HEAL (basic healing)
+ AL_INCAGI (raise agi in 3+1/lv)
+ HW_MAGICPOWER (aumenta poder da próxima skill em MATK 5%/lv)
+ SM_PROVOKE (provoca um monstro especifico - exceto BOSS)
+ **AL_ANGELUS (14x14, party, def +5%/lv)
+ TF_DETOXIFY (cancels poison. 40% MP.)
+ AC_CONCENTRATION (self: agi/dex 3+1%/lv, unhide enemies 3x3)
+ AB_HIGHNESSHEAL (REAL healing skill)
+ ALL_RESURRECTION (reviver, requer permitir target players mortos)
+ EVOL_MASS_PROVOKE (provoca mobs em área)
+
+ PR_ASPERSIO (bestow holy element on weapon for 1m. Holy dmg to undead/evil.)
+ SA_FLAMELAUNCHER (bestow fire element on weapon for 2m, 70% cth)
+ SA_FROSTWEAPON (bestow water element on weapon for 2m, 70% cth)
+ SA_LIGHTNINGLOADER (bestow wind element on weapon for 2m, 70% cth)
+ SA_SEISMICWEAPON (bestow earth element on weapon for 2m, 70% cth)
+
+ GC_DARKCROW (Max Lv 1: DMG +100%, Short Range DMG +30%)
+
+
+
+TRICKS SCIENCE
+ SA_FREECAST (move after casting)
+ TF_BACKSLIDING (pulo pra trás)
+ MG_FIREWALL (wall of fire: 50% dmg x3+1/lv hits, knockback 2 cells)
+ ALL_FULL_THROTTLE (Stat +20%, full heal, move speed x2 - w/ rebound, last resort)
+ GC_DARKILLUSION (tp pra cima do mob/player com um ataque, pode causar dano extra - 4%/lv)
+ NV_TRICKDEAD (se finge de morto)
+ SO_FIREWALK (deixa fogo aonde passa - 60% MATK)
+
+
+
+
+
+
+UNUSED/SPECIAL
+ BA_PANGVOICE (confuse, EXTREME DESYNC)
+ GS_SNAKEEYE (→AC_VULTURE)
+
+THIEF/MERCHANT-POLICE
+ TF_STEAL
+ ALL_INCCARRY
+ TF_MISS / TF_DOUBLE ?
+ MC_DISCOUNT / MC_OVERCHARGE (FIXME) ?
+ TF_HIDING?
+ MC_PUSHCART?
+ MC_VENDING?
+
+
+
+BROKEN
+ PF_HPCONVERSION (10% HP vira MP (10%/lv))
+ HP_MEDITATIO (PV: MP Regen +3%/lv, MSP +1%/lv, AL_HEAL +2%/lv stronger)
+ GS_MAGICALBULLET (adds MATK to your regular attack) Does'nt works?
+ CR_DEFENDER (less damage from ranged attacks, but lowers move & attack speed. Req. Shield) - max lv 4 plz. Last 3m?
+
+USEFUL COMMANDS
+ npcskill(<skill id>, <skill lvl>, <stat point>, <NPC level>)
+ npcskill(AL_HEAL, 10, 99, 60);
+
+ unitskilluseid(<GID>, <skill id>, <skill lvl>{, <target id>})
+ unitskillusepos(<GID>, <skill id>, <skill lvl>, <x>, <y>)
+
+ *defpattern(<set number>, "<regular expression pattern>", "<event label>")
+ *activatepset(<set number>)
+ *deactivatepset(<set number>)
+ *deletepset(<set number>)
+ Regex commands (iilia)
+
+ *statusup2(<stat>, <amount>)
+ Needs testing, said to be permanent but will it survive a status reset?
+ Actually, we could add an extra memory and re-cast this, if we control
+ usage correctly.
+
+ *autobonus2(<bonus script>, <rate>, <duration>{, <flag>, {<other script>}})
+ May cast a bonus when attacked :>
+
+ SC_TENSIONRELAX
+ Tension relax allows the user to recover HP while overweight at 1x speed.
+ Also, looks like sitting _should_ allow you to regen even overweight, need
+ plugin check for possible overrides on this behavior. status_natural_heal
+
+ SC_VITATA_500
+ Apparently regens SP? Requires further studies.
+
+ SC_NOEQUIPWEAPON [Evol]
+ Forces your opponent to fight without a weapon.
+
+
+
+
diff --git a/npc/003-0/recepcionist.txt b/npc/003-0/recepcionist.txt
new file mode 100644
index 0000000..90c4a42
--- /dev/null
+++ b/npc/003-0/recepcionist.txt
@@ -0,0 +1,162 @@
+// TMW2 Scripts.
+// Author:
+// Jesusalva
+// Description:
+// Magic School receptionist (TODO: Give S. Badge)
+
+003-0,61,44,4 script Receptionist#003-0 NPC_FEMALE,{
+ mesn;
+ mesq l("Hello, and welcome to the Magic School of Tulimshar.");
+ next;
+ mesn;
+ mesq l("Actually I'm responsible of dispatching mages to the Magic Academy.");
+ next;
+ select
+ l("What is the Magic Academy?"),
+ l("I am a mage. How do I get to Academy?"),
+ l("What magic classes are there?"),
+ l("Erm... Good bye.");
+ mes "";
+ switch (@menu) {
+ case 1:
+ goto L_Prologue;
+ case 2:
+ goto L_Academy;
+ case 3:
+ goto L_Classes;
+ }
+ closeclientdialog;
+ goodbye;
+ close;
+
+//////////////
+/* Prologue */
+//////////////
+L_Prologue:
+ mesn l("Magic Academy Tutorial");
+ mesc l("The Magic Academy System is responsible for learning most skills ingame. For that, you need two things: Magic Skill Points and a reagent.");
+ next;
+ mesn l("Magic Academy Tutorial");
+ mesc l("The reagent is always the same for the same class. If you do not have enough reagents but have an @@, it'll be used to continue.", getitemlink(ScholarshipBadge));
+ next;
+ mesn l("Magic Academy Tutorial");
+ mesc l("Magic Skill Points can be obtained in three ways: By touching a Mana Stone, by signing up in a Special Class (if you have enough magic power) and by having high amounts of Job Level.");
+ next;
+ mesn l("Magic Academy Tutorial");
+ mesc l("Upgrading a skill level can be done the same away and will always cost a single Magic Skill Point. Job Level points are obtained only after Lv @@, and is a single point each @@ levels.", 15+12, 12);
+ next;
+ if (!MGQUEST) {
+ inventoryplace ScholarshipBadge, 1;
+ mesn;
+ mesq l("That being said, I'll give you an @@, which allows you to learn a skill even if you can't pay for it.", getitemlink(ScholarshipBadge));
+ next;
+ }
+ mesn;
+ mesq l("Please note unless you have Magic Powers, obtained from the Mana Seed, all you will be able to learn are small tricks, so please make a wise choice.");
+ if (!MGQUEST) {
+ MGQUEST=true;
+ getitem ScholarshipBadge, 1;
+ }
+ tutmes l("Magic skills allows for a more advanced gameplay, but they are meant for level 30 onward.");
+ tutmes l("If you follow %s's quest, you will eventually reach the requirements for here.", b("Lua"));
+ close;
+
+
+//////////////
+/* Academy */
+//////////////
+L_Academy:
+ if (!MAGIC_LVL) {
+ mesn;
+ mesq l("Oh please. Even if you know a trick or two, you don't have real magic.");
+ next;
+ mesn;
+ mesq l("You need to touch a Mana Stone to get magic. Certainly the only Mana Stone on Tulimshar is highly protected by the Council, so no chances here.");
+ next;
+ mesn;
+ mesq l("Well, the biggest mana stones mine was in %s, but I'm afraid it has already depleted... Besides, it is very dangerous.", b("Halinarzo"));
+ } else {
+ mesn;
+ mesq l("Oh, just walk on the dock, and you'll be warped there.");
+ next;
+ mesn;
+ mesq l("I mean, a ship should come to pick you up, but the arch-wizards said they were too lazy to take care of those small details. So you'll be warped.");
+ }
+ close;
+
+
+//////////////
+/* Classes */
+//////////////
+L_Classes:
+ mesn;
+ mesq l("We have four classes, but you can make a mix between them.");
+ next;
+ mesc ".:: "+l("Physical Science")+" ::.", 3;
+ mes l("They use magic to boost their bodies, allowing them to do very, VERY powerful physical attacks.");
+ mes l("They also don't need much intelligence or magic equipment.");
+ mes "";
+ mes l("Physical Science Institute is on the %s area of the campus.", b(l("west")));
+ next;
+ mesc ".:: "+l("Wizardry")+" ::.", 3;
+ mes l("They use mana to create magic attacks and blast their foes away.");
+ mes l("They rely entirely in intelligence and magic equipment.");
+ mes "";
+ mes l("Wizardry Institute is on the %s area of the campus.", b(l("north")));
+ next;
+ mesc ".:: "+l("Scholarship Science")+" ::.", 3;
+ mes l("Training to be sages, their knowledge is unparalleled. They're masters of boosting skills.");
+ mes l("Most of their skills are stat-independent, but not all of them.");
+ mes "";
+ mes l("Scholarship Institute is on the %s area of the campus.", b(l("north")));
+ next;
+ mesc ".:: "+l("Tricks")+" ::.", 3;
+ mes l("They cheat! They make silly tricks which look like magic.");
+ mes "";
+ mes l("The trickster can be found right here.");
+ close;
+
+
+/// Core code
+OnTimer1000:
+ domovestep;
+
+OnInit:
+OnInstanceInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADTOP, FancyHat);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, SorcererRobe);
+ //setunitdata(.@npcId, UDT_HEADBOTTOM, NPCEyes);
+ //setunitdata(.@npcId, UDT_WEAPON, JeansShorts);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, any(8,11,20));
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 5);
+
+ // Small movement
+ initpath "move", 61, 44,
+ "dir", UP, 0,
+ "wait", 7, 0,
+ "move", 62, 46,
+ "dir", DOWN, 0,
+ "wait", 7, 0,
+ "move", 63, 44,
+ "dir", UP, 0,
+ "wait", 7, 0,
+ "move", 61, 44;
+ initialmove;
+ initnpctimer;
+
+ .sex=G_FEMALE;
+ .distance=5;
+ end;
+}
+
+
+003-0,48,24,0 script #MagicAcademy NPC_HIDDEN,1,0,{
+ end;
+
+OnTouch:
+ if (MAGIC_LVL && $HURNS_LIBDATE)
+ warp "027-1", any(89,90), 155;
+ end;
+}
+
diff --git a/npc/003-0/trickmaster.txt b/npc/003-0/trickmaster.txt
new file mode 100644
index 0000000..1488587
--- /dev/null
+++ b/npc/003-0/trickmaster.txt
@@ -0,0 +1,125 @@
+// TMW2 Script
+// Author:
+// Jesusalva
+// Description:
+// Trickmaster of Tricksters Class
+
+003-0,35,42,0 script Trickmaster NPC_SITTED_NINJA,{
+ function basicMagic;
+ function standardMagic;
+ function advancedMagic;
+ mes l(".:: Trickster Class ::.");
+ mesc l("Specialized in miscellaneous skills.");
+ next;
+ mesn;
+ mesc l("You have @@ magic skill points available.", sk_points());
+ select
+ l("Basic Tricks"),
+ l("Standard Tricks"),
+ l("Advanced Tricks");
+ mes "";
+ .@lv=@menu;
+ do
+ {
+ // Display appropriate menu
+ if (.@lv == 1)
+ basicMagic();
+ else if (.@lv == 2)
+ standardMagic();
+ else if (.@lv == 3)
+ advancedMagic();
+
+ // Handle result
+ mes "";
+ if (@menuret) {
+ if (!learn_magic(@menuret)) {
+ mesc l("You do not meet all requisites for this skill."), 1;
+ next;
+ }
+ } else {
+ closeclientdialog;
+ }
+
+ } while (@menuret);
+ close;
+
+L_NoMagic:
+ next;
+ mesn;
+ mesq l("You do not have enough magic power for these classes.");
+ next;
+ if ($FIRESOFSTEAM < 9) {
+ mesn;
+ mesq l("Besides the Magic Council, Andrei Sakar have his own Mana Stone, but I doubt he would train the likes of you, or share his Mana Stone.");
+ next;
+ }
+ mesn;
+ mesq l("Perhaps, in the city, someone knows rumors about Mana Stones and can teach you. Other than that, you're on your own.");
+ close;
+
+function basicMagic {
+ mes l(".:: Mana Bomb ::.");
+ mesc l("Converts all your mana in damage. Damages all enemies in same tile.");
+ mes "";
+ mes l(".:: Backsliding ::.");
+ mesc l("Instantly jumps 5 tiles backwards.");
+ mes "";
+ mes l(".:: Nature Wall ::.");
+ mesc l("Create a natural wall under the cursor, to delay your enemies.");
+ mes "";
+ mes l(".:: Archers Eye ::.");
+ mesc l("Increase bow range and accuracy.");
+ mes "";
+ mes l(".:: First Aid ::.");
+ mesc l("Recover some HP.");
+ mes "";
+ menuint
+ l("Mana Bomb"), TMW2_MANABOMB,
+ l("Backsliding"), TF_BACKSLIDING,
+ l("Nature Wall"), MG_FIREWALL,
+ l("Archers Eye"), AC_VULTURE,
+ l("First Aid"), TMW2_FIRSTAID,
+ l("Cancel"), 0;
+ return;
+}
+
+function standardMagic {
+ if (!MAGIC_LVL) goto L_NoMagic;
+ mes l(".:: Free Cast ::.");
+ mesc l("Allows to attack right after casting.");
+ mes "";
+ mes l(".:: Full Throttle ::.");
+ mesc l("An emergency skill which temporarily raises all your stats.");
+ mes "";
+ mes l(".:: Sudden Attack ::.");
+ mesc l("Instantly jumps to target and delivers an attack.");
+ mes "";
+ mes l(".:: Trick Dead ::.");
+ mesc l("Plop dead in the ground. Enemies won't attack you this way.");
+ mes "";
+ menuint
+ l("Free Cast"), SA_FREECAST,
+ l("Full Throttle"), ALL_FULL_THROTTLE,
+ l("Sudden Attack"), GC_DARKILLUSION,
+ l("Trick Dead"), NV_TRICKDEAD,
+ l("Cancel"), 0;
+ return;
+}
+
+function advancedMagic {
+ if (MAGIC_LVL < 2) goto L_NoMagic;
+ mes l(".:: There are no skills ::.");
+ mesc l("You can bug Jesusalva to extend the Battlefield Control skills.");
+ mes "";
+ menuint
+ l("Cancel"), 0;
+ return;
+}
+
+OnInit:
+ .sex = G_FEMALE;
+ .distance = 5;
+ end;
+
+}
+