From 0c9c16b6f3fe8a0ad1310330a021b3d82ae301ce Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Tue, 3 Aug 2021 13:21:57 -0300 Subject: Groata's Grotto. --- npc/006-5/_import.txt | 1 + npc/006-5/groata.txt | 477 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 478 insertions(+) create mode 100644 npc/006-5/groata.txt (limited to 'npc/006-5') diff --git a/npc/006-5/_import.txt b/npc/006-5/_import.txt index e0c3f4199..94dce7e92 100644 --- a/npc/006-5/_import.txt +++ b/npc/006-5/_import.txt @@ -1,3 +1,4 @@ // Map 006-5: Groata Grotto // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/006-5/_warps.txt", +"npc/006-5/groata.txt", diff --git a/npc/006-5/groata.txt b/npc/006-5/groata.txt new file mode 100644 index 000000000..645238eaa --- /dev/null +++ b/npc/006-5/groata.txt @@ -0,0 +1,477 @@ +// TMW2 Script +// Author: +// Jesusalva +// Note: +// Groata Grotto is NOT instanced, NOT timed, and meant to be weird. + +function script GroataGrotto { + .@lv = getarg(0, BaseLevel) + ($@GROTTO/3); + + .@mb[0] = MagicGoblin; + .@mb[1] = IceMaggot; + + // Artillery + if (.@lv > 40) + array_push(.@mb, RobinBandit); + if (.@lv > 50) + array_push(.@mb, DustGatling); + if (.@lv > 60) + array_push(.@mb, DustRifle); + if (.@lv > 70) + array_push(.@mb, DustRevolver); + if (.@lv > 80) + array_push(.@mb, DustBoss); + if (.@lv > 90) + array_push(.@mb, GreatMoubooSlime); + if (.@lv > 100) + array_push(.@mb, Jhon); + + // Monsters + if (is_between(0, .@lv, 30)) { + array_push(.@mb, Piou); + array_push(.@mb, Piousse); + array_push(.@mb, Squirrel); + array_push(.@mb, ManaPiou); + array_push(.@mb, ForestPiou); + array_push(.@mb, RedButterfly); + array_push(.@mb, Maggot); + array_push(.@mb, CandorScorpion); + array_push(.@mb, HouseMaggot); + array_push(.@mb, LittleYellowSlime); + array_push(.@mb, Ratto); + array_push(.@mb, RudolphSlime); + array_push(.@mb, MoubooSlime); + array_push(.@mb, Croc); + array_push(.@mb, Scorpion); + array_push(.@mb, SmallFrog); + } + if (is_between(10, .@lv, 40)) { + array_push(.@mb, BigFrog); + array_push(.@mb, Lavern); + array_push(.@mb, LittleRedSlime); + array_push(.@mb, ChocolateSlime); + array_push(.@mb, Blub); + array_push(.@mb, Duck); + array_push(.@mb, Bat); + array_push(.@mb, CaveMaggot); + array_push(.@mb, ManaGhost); + array_push(.@mb, ManaBug); + array_push(.@mb, Fluffy); + array_push(.@mb, FireGoblin); + array_push(.@mb, ViciousSquirrel); + array_push(.@mb, RedScorpion); + array_push(.@mb, WhiteSlime); + array_push(.@mb, AzulSlime); + array_push(.@mb, DesertLogHead); + } + if (is_between(20, .@lv, 50)) { + array_push(.@mb, RedSlime); + array_push(.@mb, PoisonSpikyMushroom); + array_push(.@mb, DesertBandit); + array_push(.@mb, OceanCroc); + array_push(.@mb, ToppyBlub); + array_push(.@mb, Sarracenus); + array_push(.@mb, IceMaggot); + array_push(.@mb, VampireBat); + array_push(.@mb, Bandit); + array_push(.@mb, Pinkie); + array_push(.@mb, LivingPotato); + array_push(.@mb, Assassin); + array_push(.@mb, Skeleton); + } + if (is_between(30, .@lv, 60)) { + array_push(.@mb, CaveSnake); + array_push(.@mb, GreenSlime); + array_push(.@mb, CopperSlime); + array_push(.@mb, YellowSlime); + array_push(.@mb, SantaSlime); + array_push(.@mb, LavaSlime); + array_push(.@mb, Bluepar); + array_push(.@mb, DeathCat); + array_push(.@mb, Moggun); + array_push(.@mb, SeaSlime); + array_push(.@mb, RedMushroom); + array_push(.@mb, Mouboo); + array_push(.@mb, LogHead); + array_push(.@mb, CandiedSlime); + array_push(.@mb, OldSnake); + array_push(.@mb, GrassSnake); + } + if (is_between(40, .@lv, 70)) { + array_push(.@mb, GiantMaggot); + array_push(.@mb, IcedFluffy); + array_push(.@mb, Snake); + array_push(.@mb, BlackSlime); + array_push(.@mb, Tipiou); + array_push(.@mb, AlphaMouboo); + array_push(.@mb, Pollet); + array_push(.@mb, PiouKnight); + array_push(.@mb, Shrewboo); + } + if (is_between(40, .@lv, 80)) { + array_push(.@mb, Wolvern); + array_push(.@mb, FireSkull); + array_push(.@mb, DarkLizard); + } + if (is_between(50, .@lv, 90)) { + array_push(.@mb, ArmoredSkeleton); + array_push(.@mb, BlackScorpion); + array_push(.@mb, ElectroWorm); + array_push(.@mb, EarthFairy); + array_push(.@mb, FireFairy); + array_push(.@mb, WaterFairy); + array_push(.@mb, WindFairy); + array_push(.@mb, PoisonFairy); + array_push(.@mb, MountainSnake); + array_push(.@mb, HoodedNinja); + array_push(.@mb, ForestMushroom); + array_push(.@mb, GoldenScorpion); + } + if (is_between(60, .@lv, 100)) { + array_push(.@mb, Yeti); + array_push(.@mb, FallenGuard1); + array_push(.@mb, GreenSlimeMother); + array_push(.@mb, SnowFlower); + array_push(.@mb, BlueSlimeMother); + array_push(.@mb, WickedMushroom); + array_push(.@mb, CopperSlimeMother); + array_push(.@mb, YellowSlimeMother); + array_push(.@mb, RedSlimeMother); + array_push(.@mb, ChocolateSlimeMother); + array_push(.@mb, WhiteSlimeMother); + array_push(.@mb, Archant); + array_push(.@mb, Scar); + } + if (is_between(70, .@lv, 110)) { + array_push(.@mb, AzulSlimeMother); + array_push(.@mb, SeaSlimeMother); + array_push(.@mb, LavaSlimeMother); + array_push(.@mb, BlackSlimeMother); + array_push(.@mb, Crafty); + array_push(.@mb, Forain); + array_push(.@mb, GreenDragon); + array_push(.@mb, Michel); + array_push(.@mb, Troll); + } + if (is_between(80, .@lv, 120)) { + array_push(.@mb, EliteDuck); + array_push(.@mb, AzulSkullSlime); + array_push(.@mb, Moonshroom); + array_push(.@mb, RedSkullSlime); + array_push(.@mb, Terranite); + array_push(.@mb, JackO); + array_push(.@mb, BlackMamba); + array_push(.@mb, GreenSkullSlime); + array_push(.@mb, BloodyMouboo); + array_push(.@mb, Centaur); + array_push(.@mb, GoboBear); + } + if (is_between(90, .@lv, 130)) { + array_push(.@mb, CopperSkullSlime); + array_push(.@mb, LavaSkullSlime); + array_push(.@mb, BlackSkullSlime); + array_push(.@mb, GiantCaveMaggot); + array_push(.@mb, TerraniteProtector); + array_push(.@mb, VanityPixie); + array_push(.@mb, HolyPixie); + } + if (is_between(100, .@lv, 140)) { + array_push(.@mb, ShadowPixie); + array_push(.@mb, NulityPixie); + array_push(.@mb, Reaper); + array_push(.@mb, NightmareDragon); + array_push(.@mb, Snail); + array_push(.@mb, WhirlyBird); + } + if (is_between(110, .@lv, 150)) { + array_push(.@mb, PinkieSuseran); + array_push(.@mb, Mandragora); + array_push(.@mb, PinkieMaximus); + } + if (.@lv > 120) { + array_push(.@mb, Junglefowl); + array_push(.@mb, Tengu); + array_push(.@mb, Moubi); + } + if (.@lv > 130) { + array_push(.@mb, SuperiorShroom); + array_push(.@mb, Nutcracker); + array_push(.@mb, Golem); + } + if (.@lv > 140) { + array_push(.@mb, SiegeTower); + array_push(.@mb, GreenhornAbomination); + array_push(.@mb, ShadowTortuga); + array_push(.@mb, FireElement); + array_push(.@mb, WaterElement); + array_push(.@mb, EarthElement); + array_push(.@mb, WindElement); + } + if (.@lv > 150) { + array_push(.@mb, SacredWisp); + array_push(.@mb, EvilWisp); + array_push(.@mb, PanthomWisp); + array_push(.@mb, EpiphanyWisp); + } + if (.@lv > 175) + array_push(.@mb, Tortuga); + + /* Spawn them and make hostile */ + freeloop(true); + for (.@i = 0; .@i < 1+($@GROTTO*2/3); .@i++) { + .@mid = any_of(.@mb); + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), strmobinfo(1, .@mid), .@mid, 1); + set_aggro(.@m); + } + freeloop(false); + + // TODO: Boss Logic if needed + // One boss each 10 grottos or something? + if (is_between(10, $@GROTTO, 15)) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", MonsterSergeant, 1); + set_aggro(.@m); + } + if ($@GROTTO > 15) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", SaxsoGhost, 1); + set_aggro(.@m); + } + if ($@GROTTO > 20) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", BlueSlime, 1); + set_aggro(.@m); + } + if ($@GROTTO > 25) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", MurdererScorpion, 1); + set_aggro(.@m); + } + if ($@GROTTO > 30) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", NightScorpion, 1); + set_aggro(.@m); + } + if ($@GROTTO > 35) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", SpiderQueen, 1); + set_aggro(.@m); + } + if ($@GROTTO > 40) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", HoodedAssassin, 1); + set_aggro(.@m); + } + if ($@GROTTO > 45) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", BanditLord, 1); + set_aggro(.@m); + } + if ($@GROTTO > 50) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", Tipiu, 1); + set_aggro(.@m); + maptimer2("006-5", 10, "Torch#0065::OnLv50"); + } + if ($@GROTTO > 55) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", FafiDragon, 1); + set_aggro(.@m); + } + if ($@GROTTO > 60) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", NightDragon, 1); + set_aggro(.@m); + } + if ($@GROTTO > 65) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", GiantMutatedBat, 1); + set_aggro(.@m); + } + if ($@GROTTO > 70) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", EvilScythe, 1); + set_aggro(.@m); + } + if ($@GROTTO > 75) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", AndreiSakar, 1); + set_aggro(.@m); + } + if ($@GROTTO > 80) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", Yetifly, 1); + set_aggro(.@m); + } + if ($@GROTTO > 85) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", DemureFirstForm, 1); + set_aggro(.@m); + } + if ($@GROTTO > 90) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", YetiKing, 1); + set_aggro(.@m); + } + if ($@GROTTO > 95) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", FallenKing1, 1); + set_aggro(.@m); + } + if ($@GROTTO > 100) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", PsiConscience, 1); + set_aggro(.@m); + maptimer2("006-5", 10, "Torch#0065::OnLv100"); + } + if ($@GROTTO > 105) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", Isbamuth, 1); + set_aggro(.@m); + } + if ($@GROTTO > 110) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", TerraniteKing, 1); + set_aggro(.@m); + } + if ($@GROTTO > 120) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", PinkieEmperor, 1); + set_aggro(.@m); + } + if ($@GROTTO > 130) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", PanthomLord, 1); + set_aggro(.@m); + } + if ($@GROTTO > 140) { + .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", MonsterKing, 1); + set_aggro(.@m); + } + if ($@GROTTO > 150) + maptimer2("006-5", 10, "Torch#0065::OnLv150"); + return; +} + +006-5,49,36,0 script Torch#0065 NPC_NO_SPRITE,{ + if (!mobcount("006-5", "all")) { + if ($@GROTTO) { + mesc l("The torch is currently lit."); + mesc l("Do you want to put it out, or to make it brighter?"); + next; + select + l("I have to think."), + l("Put it out"), + l("Make it brighter"); + mes ""; + // Put it out + if (@menu == 2) { + $@GROTTO = 0; + $@GROATA = 0; + enablenpc "#006-5_49_54"; + } + // I do not want to continue + if (@menu != 3) + close; + } else { + mesc l("Lit the torch?"); + if (askyesno() == ASK_NO) close; + disablenpc "#006-5_49_54"; + } + if (!getq(CandorQuest_Groata)) { + getitem any(Coal, SulfurPowder, FluoPowder, PileOfAsh, Pearl), 2; + setq CandorQuest_Groata, 1; + } + $@GROTTO += 1; + // Create monsters based on GROTTO + $@GROATA = max(BaseLevel, $@GROATA); + GroataGrotto($@GROATA); + close; + } + mesc l("The torch is lit."); + close; + +// Rewards +OnLv50: + if (getq(CandorQuest_Groata) == 1) { + dispbottom l("This is ridiculous. Groata is not here, I am wasting my time!"); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Uh? Hey, look! A platinum card! This should be worth something with the Guild Merchant Guild, right?"); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("...I'll take it."); + Zeny+=7500; + Mobpt+=2500; + getexp 0, 10000; + setq CandorQuest_Groata, 2; + } + end; + +OnLv100: + if (getq(CandorQuest_Groata) == 2) { + dispbottom l("Groata : Uh. What's happening here?"); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : Hey. I live here. Why are you spawning monsters in my home??"); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : This is rude. Seriously, stop doing this."); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : Let's make a deal. Take this, clear my house, and get out."); + getitem Mustache, 1; + setq CandorQuest_Groata, 3; + } + end; + +OnLv150: + if (getq(CandorQuest_Groata) == 3) { + dispbottom l("Groata : You must be idiotic in keeping spawning."); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : I wonder for how long you can survive here..."); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : ...Will you seriously just keep running around? Like a headless chicken?"); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : C'mon, that is boring. What I need to do to get you out of my house?"); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : ...Meh. I'll give you this... stuff, and for the last time, don't bother me again..."); + sleep2(5000); + if (getmap() != "006-5") end; + dispbottom l("Groata : ...Because I am out of freebies and need to sleep. So shoo."); + getitembound MylarinDust, 1, 1; + setq CandorQuest_Groata, 4; + } + end; + +OnInit: + .sex = G_OTHER; + .distance = 1; + end; +} + +006-5,52,36,0 script Crystal#0065 NPC_NO_SPRITE,{ + if (!mobcount("006-5", "all")) { + if ($@GROTTO) { + mesc l("The crystal looks damaged."); + mesc l("Do you want to restore it, or to keep breaking it?"); + next; + select + l("I have to think."), + l("Restore it"), + l("Keep breaking"); + mes ""; + // Restore it + if (@menu == 2) { + $@GROTTO = 0; + $@GROATA = 0; + enablenpc "#006-5_49_54"; + } + // I do not want to continue + if (@menu != 3) + close; + } else { + mesc l("Break the crystal?"); + if (askyesno() == ASK_NO) close; + disablenpc "#006-5_49_54"; + } + if (!getq(CandorQuest_Groata)) { + getitem any(WurtziteOre, DarkCrystal, CandorWarpCrystal), 1; + setq CandorQuest_Groata, 1; + } + $@GROTTO += 5; + // Create monsters based on GROTTO + $@GROATA = max(BaseLevel, $@GROATA); + GroataGrotto($@GROATA); + close; + } + mesc l("The crystal has a shard missing."); + close; + +OnInit: + .sex = G_OTHER; + .distance = 1; + end; +} + -- cgit v1.2.3-60-g2f50