diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
commit | a7c45a192268da2601cef47a4cdba987ae2327ca (patch) | |
tree | c5fb5b97db109fe7106496dd96498c475881046b /npc/034-3 | |
download | serverdata-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.txt | 4 | ||||
-rw-r--r-- | npc/034-3/_mobs.txt | 3 | ||||
-rw-r--r-- | npc/034-3/gemini.txt | 241 |
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; +} + |