From 67543201d8646c059b3928d14c2591c02168237a Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Thu, 15 Apr 2021 14:45:36 -0300 Subject: Joyplim, Frillyar and Kalmurk --- db/pre-re/skill_db.conf | 67 ++++++++++++++++++++++++++++++- npc/008-1/hinnak.txt | 78 +++++++++++++++++++------------------ npc/009-3/sword.txt | 6 +-- npc/012-3/mana-seed.txt | 2 +- npc/017-4/waric.txt | 4 +- npc/magic/config.txt | 5 ++- npc/magic/final.txt | 16 -------- npc/magic/level1-summon-maggots.txt | 15 +++++++ npc/magic/level2-arrow-hail.txt | 44 +++++++++++++++++++++ npc/magic/level2-happy-curse.txt | 30 ++++++++++++++ npc/scripts.conf | 3 ++ 11 files changed, 206 insertions(+), 64 deletions(-) create mode 100644 npc/magic/level1-summon-maggots.txt create mode 100644 npc/magic/level2-arrow-hail.txt create mode 100644 npc/magic/level2-happy-curse.txt diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf index 1a2ab65a..1ef5c931 100644 --- a/db/pre-re/skill_db.conf +++ b/db/pre-re/skill_db.conf @@ -39109,9 +39109,72 @@ skill_db: ( } } }, +{ + Id: 20044 + Name: "SKILL_FRILLYAR" + Description: "Frillyar" + MaxLevel: 10 + Range: 4 + SkillType: { + Enemy: true + } + SkillInfo: { + Quest: true + } + Hit: "BDT_SKILL" + AttackType: "Magic" + Element: "Ele_Neutral" + DamageType: { + NoDamage: true + } + CoolDown: 2000 + Requirements: { + SPCost: 25 + Items: { + SulphurPowder: 0 + } + } +}, +{ + Id: 20045 + Name: "SKILL_JOYPLIM" + Description: "Joyplim" + MaxLevel: 9 + SkillType: { + Self: true + } + SkillInfo: { + Quest: true + } + CoolDown: 200 + Requirements: { + SPCost: 13 + Items: { + GingerBreadMan: 0 + } + } +}, +{ + Id: 20046 + Name: "SKILL_KALMURK" + Description: "Kalmurk" + MaxLevel: 9 + SkillType: { + Self: true + } + SkillInfo: { + Quest: true + } + CoolDown: 20000 + Requirements: { + SPCost: 21 + Items: { + Root: 0 + MaggotSlime: 0 + } + } +}, // MakeSulphur Parum EnchantLifestone MakeArrow MakeIronPowder MakeShirt MakeTanktop MakeSTanktop -// Kalmurk -// ArrowHail Joyplim // FlyingBackpack(?) Shear ) diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt index 3672ed93..2cf07931 100644 --- a/npc/008-1/hinnak.txt +++ b/npc/008-1/hinnak.txt @@ -12,7 +12,7 @@ L_No_NohMask: if (@state == 2) goto L_ThanksAgain; if (getequipid(equip_head) == 751) goto L_Intro_Hat; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Argh! I hate them! I @#$% hate them! I @#$% hate these @#$% pinkies!\""; next; menu @@ -28,13 +28,13 @@ L_Intro_Hat: "Whoa, what are you doing?", L_Intro_Hat_Explain; L_Intro_Hat_Explain: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Sorry, you look like a pinkie. They've been destroying my fields, and I guess I got a bit worked up.\""; next; goto L_Help; L_Reason: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"These @#$% beasts are jumping around in my fields destroying all my harvest."; mes "But they are too fast. I can't catch them.\""; next; @@ -43,7 +43,7 @@ L_Reason: "Well, life ain't fair.", L_close; L_Help: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Yes, you look quite fast. Maybe you can catch some of them. That will pay them a lesson."; mes "Slay some of them and bring me 10 of their antennae.\""; @state = 1; @@ -54,7 +54,7 @@ L_Help: "How much is this worth to you?", L_Reward; L_Reward: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Well, I can't offer you much. But I got an old scythe laying around. Maybe you can use it as a weapon.\""; goto L_close; @@ -66,7 +66,7 @@ L_Exchange: goto L_Exchange_Start; L_Exchange_Start: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Have you got the 10 antennae?\""; next; menu @@ -83,36 +83,36 @@ L_Exchange_Exchange: getitem "Scythe", 1; @state = 2; callsub S_Update_Mask; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Thank you very much. I've got something for you. My old scythe. Maybe you can use it as a weapon. It is a bit cumbersome but its strikes are deadly.\""; goto L_close; L_Exchange_Notenough: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"It doesn't look like you do.\""; goto L_close; L_Exchange_TooMany: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Looks like you don't have room for this. Come back later to receive your reward. Hold on to the antennea until then.\""; goto L_close; L_ThanksAgain: if (getequipid(equip_head) == 751) goto L_ThanksHat; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Good to see you again, and thanks again for helping me with the pinkies!\""; next; goto L_ThanksMenu; L_ThanksHat: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"That better be a trophy on your head.\""; menu "It is.", L_Next; L_Next: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Good then. Thanks for your help with the pinkies.\""; goto L_ThanksMenu; @@ -123,7 +123,7 @@ L_ThanksMenu: "You're welcome. Bye!", L_Bye; L_Next1: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Actually, it's been a long day. If it's no trouble, could you get me a beer?\""; next; menu @@ -132,7 +132,7 @@ L_Next1: "You shouldn't drink while working!", L_Next2; L_Next2: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Well, I'm done for the day, and I'm quite old enough to decide when I can have a beer, thank you!\""; next; menu @@ -143,52 +143,52 @@ L_GiveBeer: if (countitem("Beer") < 1) goto L_NoBeer; delitem "Beer", 1; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "Hinnak takes a sip."; mes "\"Aaah! Nothing like a well-deserved beer after a long day of tending the crops!\""; mes "\"Thanks, that was very kind of you!\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "He takes another sip."; mes "\"Thanks! You know, I had the strangest thing happen to me. I had this patch of ground that was really clumpy; lots of clay, you see.\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Right over there.\""; mes "He points to a stretch of soft, raked ground."; mes "\"Looks much better now, doesn't it? But how I got there is kind-a scary...\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"I'd been trying to break it up for a while, but that kind of work is a pain. So my wife said that I should go and see the witch, just in case she knows something.\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"And sure enough I ask the witch, and she has a look at it. 'Nothing I can do', she says, 'but I can ask a friend'.\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"So the next day another witch shows up. Gorgeous woman, but when she looked at me, the scares went scuttling down my spine....\""; mes "\"First thing she asked was if I'm a farmer. Said her friend had told her that I needed help.\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"I show her what the problem is, and she tells me to go inside and wait.\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Hinnak drains his beer in one long sip, then hesitates."; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"So I go inside. I'm barely in when it starts raining outside, pouring cats and mouboos!\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Not so weird, perhaps, except that it was been bright and sunny just a second before! So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain...\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"None of the raindrops touched her, as if they was afraid!\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs...\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"And then she turns to me! Seeing her stare, for a moment there I think that she'll turn me into a pinkie, for sure...\""; next; - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"But all she says is, 'if you'd stayed inside, you wouldn't be wet now'.\""; next; menu @@ -198,29 +198,31 @@ L_GiveBeer: "I better go now.", L_Bye; L_Sagatha_hahaha: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Yeah, funny now... But you should've seen that stare! Ah, well, never mind.\""; goto L_close; L_Sagatha_scary: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Yeah, you could say that...\""; mes "He stares into his empty beer jug, as if wishing it weren't empty yet."; goto L_close; L_Sagatha_word: - mes "[Farmer Hinnak]"; - mes "\"Oh, I can't be sure... but something like '" + get(.invocation$, "summon-maggots") + "', I think.\""; + mesn l("Farmer Hinnak"); + mesq l("Oh, I can't be sure... but something like '%s', I think.", b("kalmurk")); + if (getskilllv(SKILL_MAGIC)) + learnskill SKILL_KALMURK; goto L_close; L_NoBeer: - mes "[Farmer Hinnak]"; - mes "\"Ah... no beer? Oh well.\""; + mesn l("Farmer Hinnak"); + mesq l("Ah... no beer? Oh well."); goto L_close; L_Bye: - mes "[Farmer Hinnak]"; - mes "\"Bye!\""; + mesn l("Farmer Hinnak"); + mesq l("Bye!"); goto L_close; L_NohMask: @@ -230,12 +232,12 @@ L_NohMask: "Hello.", L_No_NohMask; L_NohMask_Mask: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"No. It tends to be too dark to see a mask.\""; goto L_close; L_NohMask_Satchel: - mes "[Farmer Hinnak]"; + mesn l("Farmer Hinnak"); mes "\"Yes, I saw someone with a large sack on their back go to the mining camp.\""; goto L_close; diff --git a/npc/009-3/sword.txt b/npc/009-3/sword.txt index a22fba60..eacd490e 100644 --- a/npc/009-3/sword.txt +++ b/npc/009-3/sword.txt @@ -152,12 +152,12 @@ L_Next3: mes "\"The spell I shall teach thee is the hail of arrows spell. It will make arrows fall down from the heavens unto thy enemies.\""; next; mesn l("Magic Sword"); - mes "\"Take twenty arrows, sprinkle sulphur powder over them, and then speak '" + get(.invocation$, "arrow-hail") + "'. Throw them high up in the air, and watch the hail unfold before thy feet.\""; + mesq l("Take %s arrows, sprinkle sulphur powder over them, and then speak '%s'. Throw them high up in the air, and watch the hail unfold before thy feet.", l("fifteen"), b("Frillyar")); close; L_L2_almost_done: mesn l("Magic Sword"); - mes "\"Return to my sister now. I expect that she shall teach thee one more spell.\""; + mesq l("Return to my sister now. I expect that she shall teach thee one more spell."); close; L_lacking_mobpoints: @@ -167,7 +167,7 @@ L_lacking_mobpoints: L_Farewell2: mesn l("Magic Sword"); - mes "\"Please leave me in peace.\""; + mesq l("Please leave me in peace."); close; S_Update_Var: diff --git a/npc/012-3/mana-seed.txt b/npc/012-3/mana-seed.txt index 8c960a56..ea6dabcf 100644 --- a/npc/012-3/mana-seed.txt +++ b/npc/012-3/mana-seed.txt @@ -187,7 +187,7 @@ L_Magic_levelup: next; @nr = rand(@visions_nr); if (@nr == 0) - mes "FIXME get happy-curse"; + learnskill SKILL_JOYPLIM; mes @visions$[@nr]; next; mes "The image fades."; diff --git a/npc/017-4/waric.txt b/npc/017-4/waric.txt index b2508c9d..1ada69ff 100644 --- a/npc/017-4/waric.txt +++ b/npc/017-4/waric.txt @@ -242,9 +242,9 @@ L_Next4: goto L_close; L_Snakes: - mes "Waric nods at you."; + mesc l("Waric nods at you."); mesn; - mes "\"Have you practiced enough?\""; + mesq l("Have you practiced enough?"); menu "Yes, I'm an outstanding Dark Mage!", L_Next5, "No. I'm too lazy.", L_ComeBackLater; diff --git a/npc/magic/config.txt b/npc/magic/config.txt index 2cede16a..a179982c 100644 --- a/npc/magic/config.txt +++ b/npc/magic/config.txt @@ -160,13 +160,14 @@ function script SK_summon { .@amt=getarg(1); .@mex=getarg(2, 1); .@sum=getarg(3, true); + .@lvl=getskilllv(SKILL_MAGIC); if ($@GM_OVERRIDE || debug) debugmes "Skill "+@skillId+" Lv "+@skillLv; - if (ispcdead()) + if (ispcdead() || !.@lvl || !@skillLv) return; if (rand2(10) < abizit()) { // Summon Magic (with magic level bonus) - SummonMagic(@skillId, .@mob, .@amt, MAGIC_LVL+@skillLv-1, @skillLv, .@sum); + SummonMagic(@skillId, .@mob, .@amt, .@lvl+@skillLv-1, @skillLv, .@sum); } else if (rand2(10) < abizit()) { // Re-roll dispbottom l("You cannot complete the casting correctly!"); diff --git a/npc/magic/final.txt b/npc/magic/final.txt index e22aa6e7..a4de3bc8 100644 --- a/npc/magic/final.txt +++ b/npc/magic/final.txt @@ -82,14 +82,6 @@ function script HUB_SkillInvoke { //////////////////////////////// /* XXX: Fire Class // (May burn targets for damage over time) - case TMW2_FIREBALL: - .@PW=140+(10*@skillLv); - .@RG=2+(@skillLv/5); - // 22% chance, 2.5s - areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire); - sc_start SC_BLOODING, 2500, 1, 4200, SCFLAG_NONE, @skillTarget; - GetManaExp(TMW2_FIREBALL, 2); - break; case TMW2_ARMAGEDDON: .@PW=140+(10*@skillLv); .@RG=5+(@skillLv/5); @@ -137,14 +129,6 @@ function script HUB_SkillInvoke { GetManaExp(@skillId, 1); break; //////////////////////////////// - // XXX: Physical Class (Archery) - case TMW2_ARROWSHOWER: - .@PW=150+(10*@skillLv); - .@dmg=AdjustAttackpower(.@PW); - .@RG=1+(@skillLv/3); - areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral); - GetManaExp(@skillId, 1); - break; // Summons which never fail case TMW2_ZARKOR: SummonMagic(@skillId, CaveMaggot, 2, @skillLv); diff --git a/npc/magic/level1-summon-maggots.txt b/npc/magic/level1-summon-maggots.txt new file mode 100644 index 00000000..7ca9f74d --- /dev/null +++ b/npc/magic/level1-summon-maggots.txt @@ -0,0 +1,15 @@ +// The Mana World script +// Author: Jesusalva +// +// Magic Script: SKILL_KALMURK (Level 1) +// School: Astral 1 + +function script SK_Kalmurk { + delitem Root, 1; + delitem .@it, 1; + specialeffect(FX_MAGIC_MAGGOT_CAST, AREA, getcharid(3)); + sleep2(cap_value(5400-AdjustSpellpower(100)-@skillLv*400, 500, 5000)); + SK_summon(Maggot, 2, 1); + return; +} + diff --git a/npc/magic/level2-arrow-hail.txt b/npc/magic/level2-arrow-hail.txt new file mode 100644 index 00000000..217f7fb0 --- /dev/null +++ b/npc/magic/level2-arrow-hail.txt @@ -0,0 +1,44 @@ +// The Mana World script +// Author: Jesusalva +// +// Magic Script: SKILL_FRILLYAR (Level 1) +// School: War 2 + +function script SK_Frillyar { + // Additional check for ammo + .@it=getequipid(EQI_AMMO); + if (.@it < 1) { + dispbottom l("Please equip your ammo first!"); + return; + } + if (countitem(.@it) < 15) { + dispbottom l("You need at least %d %s to use this spell!", + 15, getitemname(.@it)); + return; + } + // Delete items + delitem(SulphurPowder, 1); + delitem(.@it, 15); + // Proccess attack power + .@RG=4+(@skillLv/2); + .@PW=90+(10*@skillLv); + .@PW+=getiteminfo(.@it, ITEMINFO_ATK); + // Weather modifiers + if ("#WeatherCore"::weather(MASK_RAIN)) + .@PW-=10; + if ("#WeatherCore"::weather(MASK_SANDSTORM)) + .@PW-=10; + if ("#WeatherCore"::weather(MASK_SNOW)) + .@PW-=10; + // Effective magic code + .@dmg=AdjustSpellpower(.@PW); + .@dmg+=getiteminfo(.@it, ITEMINFO_ATK); + specialeffect(FX_MAGIC_AHAIL_CAST, AREA, @skillTarget); + areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral); + harm(@skillTarget, .@dmg/20, HARM_MAGI, Ele_Holy); + specialeffect(FX_ARROW_HAIL, AREA, @skillTarget); + GetManaExp(@skillId, 2); + return; +} + + diff --git a/npc/magic/level2-happy-curse.txt b/npc/magic/level2-happy-curse.txt new file mode 100644 index 00000000..08987293 --- /dev/null +++ b/npc/magic/level2-happy-curse.txt @@ -0,0 +1,30 @@ +// The Mana World script +// Author: Jesusalva +// +// Magic Script: SKILL_JOYPLIM (Level 1) +// School: General 2 + +function script SK_Joyplim { + delitem GingerBreadMan, 1; + .@b=(BL_PC | BL_PET | BL_MER | BL_HOM); // | BL_MOB + .@r=3+cap_value(getskilllv(SKILL_MAGIC)+(@skillLv/2), 1, 12); // Your radius + .@s=AdjustSpellpower(100); // Your magical stamina + .@c=cap_value(11-@skillLv, 1, 10)*2; // MATK stamina cost per char + .@e=(getskilllv(SKILL_MAGIC_DARK) ? E_EVIL : E_HAPPY); // Emote + + getmapxy(.@m$, .@x, .@y, 0); + + // TODO: Maybe put this loop in a timer, etc? But... Do we want to? + .@c=getunits(.@b, .@mbs, false, .@m$, .@x-.@r, .@y-.@r, .@x+.@r, .@y+.@r); + for (.@i = 0; .@i < .@c; .@i++) { + unitemote(.@mbs[.@i], E_HAPPY); + // Stamina cost + .@s-=.@c; + if (.@s < 0) + break; + } + specialeffect(FX_MAGIC_JOY_CAST, AREA, getcharid(3)); + GetManaExp(@skillId, 2); + return; +} + diff --git a/npc/scripts.conf b/npc/scripts.conf index 18d3a1e1..1c17a4a5 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -76,6 +76,9 @@ "npc/magic/level1-grow-plants.txt", "npc/magic/level1-lesser-heal.txt", "npc/magic/level1-magic-blade.txt", +"npc/magic/level1-summon-maggots.txt", +"npc/magic/level2-arrow-hail.txt", +"npc/magic/level2-happy-curse.txt", "npc/magic/level2-lay-on-hands.txt", "npc/magic/level2-lightning-strike.txt", "npc/magic/level2-magic-knuckles.txt", -- cgit v1.2.3-60-g2f50