summaryrefslogtreecommitdiff
path: root/npc/034-3
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/034-3
downloadserverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/034-3')
-rw-r--r--npc/034-3/_import.txt4
-rw-r--r--npc/034-3/_mobs.txt3
-rw-r--r--npc/034-3/gemini.txt241
3 files changed, 248 insertions, 0 deletions
diff --git a/npc/034-3/_import.txt b/npc/034-3/_import.txt
new file mode 100644
index 0000000..d9fef7b
--- /dev/null
+++ b/npc/034-3/_import.txt
@@ -0,0 +1,4 @@
+// Map 034-3: Archipelago
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/034-3/_mobs.txt",
+"npc/034-3/gemini.txt",
diff --git a/npc/034-3/_mobs.txt b/npc/034-3/_mobs.txt
new file mode 100644
index 0000000..6b648eb
--- /dev/null
+++ b/npc/034-3/_mobs.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 034-3: Archipelago mobs
+034-3,55,29,21,19 monster AzulSlime 1100,18,100000,20000
diff --git a/npc/034-3/gemini.txt b/npc/034-3/gemini.txt
new file mode 100644
index 0000000..72c4707
--- /dev/null
+++ b/npc/034-3/gemini.txt
@@ -0,0 +1,241 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Gemini Sisters Quest - Outside the Building
+
+034-3,23,50,0 script #GeminiBack2 NPC_HIDDEN,0,0,{
+ end;
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(8);
+ .@p=getcharid(1);
+ warp "val2@"+.@p, 37, 25;
+ end;
+}
+
+034-3,57,29,0 script #GeminiDoor NPC_HIDDEN,0,0,{
+ end;
+
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(8);
+ .@p=getcharid(1);
+ if ($@VALIA_STATUS[.@p] >= 9) {
+ warp "val4@"+.@p, 43, 51;
+ end;
+ }
+ slide 58, 34;
+ percentheal -20, 0;
+ dispbottom l("You are pushed back violently. There is probably some way to break this barrier.");
+ end;
+}
+
+034-3,51,38,0 script Engravings#Gemini NPC_NO_SPRITE,{
+ mes l("You can read some words engraved inside this rock, but some are erased by wind and time:");
+ next;
+ mes l("\".. can use this .. power..´. . .´. . . amplify a spell ..´.");
+ mes l(" . ´´. Don't let .. spell power .´..´ . .. fade away ...");
+ mes l("´ .Use lazurite stones ´..´. they will appear. ..´ .. drop them inside .. this circle.");
+ mes l(". ´ power.. drains .. life..´. .´ focus . .not move at all´. .\"");
+ next;
+ mes l("Below this strange writing, you notice a word still deeply engraved in the stone:");
+ next;
+ mesq b("catalazuli");
+ next;
+ .@p=getcharid(1);
+ mes l("... that looks like an incantation or something.");
+ if (strcharinfo(0) != getpartyleader(.@p)) {
+ mes l("I probably should let %s chant it.", getpartyleader(.@p));
+ close;
+ }
+ next;
+ mes l("I think this blue circle right here can be helpful to break the enchantment that blocks the door of the Inn.");
+ next;
+ mes l("Let's see how I can activate it...");
+ mes l("But I should probably get inside it, first.");
+ close;
+
+OnChannel:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(8);
+
+ // Check location
+ getmapxy(.@m$, .@x, .@y, 0);
+ if (.@x < 52 ||
+ .@x > 54 ||
+ .@y < 37 ||
+ .@y > 38) end;
+
+ // Only party leader may proceed
+ .@p=getcharid(1);
+ if (strcharinfo(0) != getpartyleader(.@p)) {
+ percentheal 0, -25;
+ specialeffect(312, AREA, getcharid(3));
+ dispbottom l("Argh! I assume I can't do this chant!");
+ end;
+ }
+
+ // Bonus is based on int
+ .@bonus = readparam2(bInt) / 25;
+ // Unlike TMW's, all Lazurites show up at same place
+ // ...
+ // amount of initial magic power
+ .@magic_power = 1811 + readparam2(bInt)*2;
+ // Channelling required power depends on the base Int of the character
+ .@magic_power_required = 5707 - 2*readparam2(bInt);
+ // magic power loss depends also on Int. TMW uses 53, we use 21
+ .@magic_power_loss = 21 - (((readparam2(bInt)+1)*2)/10);
+
+ dispbottom l("Ok, let's stay focused now!");
+ areamonster getmap(), 27, 20, 77, 47, strmobinfo(1, Forain), Forain, 1;
+ // TODO: Loop
+ debugmes "NPC: %s / %s (%d)", .name$, .extname$, instance_id();
+ .aid=getcharid(3);
+ .mp$=getmap();
+ .power=.@magic_power;
+ .state=0;
+ .maxpw=.@magic_power_required;
+ .mloss=.@magic_power_loss;
+ initnpctimer;
+ end;
+
+OnTimer13000:
+ initnpctimer; // Reset timer
+ // Time to spawn monsters
+ .@pc = getmapusers(.mp$);
+ areamonster .mp$, 56, 30, 60, 31, "Guardian", Scar, 1+.@pc;
+ areamonster .mp$, 27, 20, 77, 47, strmobinfo(1, Forain), Forain, 2;
+ // Terranites only show up when doing multiplayer, based on number of players
+ if (.@pc >= 2)
+ areamonster .mp$, 56, 30, 60, 31, "Guardian", Terranite, (.@pc/2);
+OnTimer10000:
+OnTimer8000:
+OnTimer6000:
+OnTimer4000:
+OnTimer2000:
+ if (instance_id() < 0) end;
+
+ if (!attachrid(.aid)) {
+ npctalk "The caster ceased to exist!";
+ stopnpctimer;
+ end;
+ }
+
+ getmapxy(.@m$, .@x, .@y, 0, .aid);
+ if (.@m$ != .mp$) {
+ npctalk "The caster is gone!";
+ stopnpctimer;
+ end;
+ }
+ if (.@x < 52 ||
+ .@x > 54 ||
+ .@y < 37 ||
+ .@y > 38) {
+ npctalk "The caster left the power circle!";
+ dispbottom l("The magic accumulated backfires at you!");
+ heal -(.power), -(.power/2);
+ stopnpctimer;
+ end;
+ }
+
+ // Harm you
+ //misceffect FX_CHANNELLING_RAISE;
+ percentheal -4, -1;
+
+ if (ispcdead()) {
+ npctalk "The caster is dead!";
+ stopnpctimer;
+ end;
+ }
+ if (Sp <= 0) {
+ npctalk "The caster ran out of mana!";
+ stopnpctimer;
+ end;
+ }
+
+ // Deplete power over time
+ // But only if not doing solo
+ if (getmapusers(.mp$) > 1 || .mloss < 0)
+ .power -= .mloss;
+
+ // Remove stones inside the circle
+ .@cat=getareadropitem(.mp$, 52, 37, 54, 39, LazuriteShard, true) * 12;
+ .@cbt=getareadropitem(.mp$, 52, 37, 54, 39, LazuriteCrystal, true) * 32;
+ .@cct=getareadropitem(.mp$, 52, 37, 54, 39, LazuriteHeart, true) * 65;
+
+ // Grant them POWER
+ .power+=.@cat+.@cbt+.@cct;
+ .@cur = 4 * .power / .maxpw; // Goes from 0 to 4
+
+ // Check status and update
+ if (.@cur < .status)
+ npctalk "NOTICING a sudden power loss!";
+ else if (.@cur > .status)
+ npctalk "NOTICING an increase of power!";
+ .status=.@cur;
+
+ // Are we done?
+ if (.power >= .maxpw) {
+ npctalk "*the gate spell has been redefined*";
+ if (getcharid(1) > 0) {
+ $@VALIA_STATUS[getcharid(1)]=9;
+ stopnpctimer;
+ .power=0;
+ .mloss=0;
+ .maxpw=0;
+ .state=0;
+ .mp$="";
+ .aid=0;
+ }
+ stopnpctimer;
+ end;
+ }
+ detachrid();
+ // Should we spawn items?
+ .@t = (getnpctimer(0)+500) / 1000;
+ // Item time!
+ if (.@t == 6 ||
+ .@t == 10) {
+ .@i = 0;
+ // More Shards than Crystals and Hearts
+ freeloop(true);
+ while (.@i < ((5-getmapusers(.mp$)) * 2 + 5)) {
+ .@it=any(LazuriteShard, LazuriteShard, LazuriteShard,
+ LazuriteCrystal, LazuriteCrystal,
+ LazuriteHeart);
+ makeitem(.@it, 1, .mp$, rand2(27, 77), rand2(20, 47));
+ .@i += 1;
+ }
+ freeloop(false);
+ }
+ end;
+
+OnTalkNearby:
+ // not very obvious stuff by gumi
+ .@no_nick$ = strip(substr($@p0$, getstrlen(strcharinfo(PC_NAME)) + 3, getstrlen($@p0$) - 1));
+ .@message$ = strtoupper(.@no_nick$);
+ if (.@message$ == "CATALAZULI") {
+ goto OnChannel;
+ }
+ end;
+
+OnInit:
+OnInstanceInit:
+ .distance=3;
+ .pid=getnpcid();
+ // For players
+ .aid=0;
+ .mp$="";
+ .power=0;
+ .state=0;
+ .maxpw=0;
+ .mloss=0;
+
+ debugmes "Gemini Pattern %d", .pid;
+ //defpattern(.pid, "^([Kk][Aa][Tt][Aa][Zz][Uu][Ll][Ii])$", "OnTalkNearby");
+ defpattern(.pid, "^(.*)$", "OnTalkNearby");
+ activatepset(.pid);
+ end;
+}
+