-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathraw-svo.defs.lua
3696 lines (3334 loc) · 190 KB
/
raw-svo.defs.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
-- Svof (c) 2011-2015 by Vadim Peretokin
-- Svof is licensed under a
-- Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
-- You should have received a copy of the license along with this
-- work. If not, see <http://creativecommons.org/licenses/by-nc-sa/4.0/>.
pl.dir.makepath(getMudletHomeDir() .. "/svo/defup+keepup")
--[[ a small dictionary to know which defences belong to which skillset ]]
defences.def_types = {}
-- the list from 'def'
defences.def_def_list = {}
defences.defup_timer = createStopWatch()
function defences.gettime(defence, max)
if not defc[defence] then return "" end
local time = max-math.ceil(getStopWatchTime(dict[defence].stopwatch)/max)
if time < 0 then return "" else
return time.."m"
end
end
-- functions to handle the defc table events updates
function defences.got(def)
if not defc[def] then defc[def] = true; raiseEvent("svo got def", def) end
end
function defences.lost(def)
if defc[def] then defc[def] = false; raiseEvent("svo lost def", def) end
end
-- custom def types like channels
defences.custom_types = {}
defences.nodef_list = phpTable()
defdefup = {
basic = {},
combat = {},
empty = {},
}
defkeepup = {
basic = {},
combat = {},
empty = {},
}
-- set an initial mode to something, as it always needs to be a valid mode
defs.mode = "basic"
-- defc = current defs
-- specialskip: if this function returns true, that defence will be ignored for defup
defs_data = pl.OrderedMap {}
defs_data:set("softfocus", { type = "general",
mana = "lots",
def = "You have softened the focus of your eyes.",
on = {"You let your eyes go out of focus, causing you to miss some details.", "Your eyes are already out of focus."},
off = {"You bring your eyes back into focus.", "Your eyes are already in focus."}})
defs_data:set("metawake", { type = "general",
def = "You are concentrating on maintaining distance from the dreamworld.",
mana = "lots",
on = {"You order your mind to ensure you will not journey far into the dreamworld.", "You already have metawake turned on."},
off = {"You cease concentrating on maintaining distance from the dreamworld.", "You already have metawake turned off."}})
defs_data:set("mass", { type = "general",
def = "You are extremely heavy and difficult to move.",
offr = {[[^You are pulled out of the room by \w+ and (?:his|her) whip\!$]],
[[^A large handaxe comes flying into the room, arcs toward you, and carries you away with it to \w+!$]]},
off = {"You feel your density return to normal.", "The savage winds pick you up and toss you through the air."}})
defs_data:set("magicresist", { type = "general",
on_only = "That resistance already suffuses your form.",
def = "You are enchanted against magic damage."})
defs_data:set("fireresist", { type = "general",
on_only = "That resistance already suffuses your form.",
def = "You are enchanted against fire damage."})
defs_data:set("electricresist", { type = "general",
on_only = "That resistance already suffuses your form.",
def = "You are enchanted against electric damage."})
defs_data:set("coldresist", { type = "general",
on_only = "That resistance already suffuses your form.",
def = "You are enchanted against cold damage."})
defs_data:set("skywatch", { type = "general",
mana = "little",
def = "You are aware of movement in the skies.",
on = {"You are now watching the skies.", "You are already watching the skies."},
off = "You are no longer watching the skies."})
defs_data:set("toughness", { nodef = true,
def = "Your skin is toughened." })
defs_data:set("chivalry defended", { nodef = true,
def = "You are being defended by a stalwart ally." })
defs_data:set("waterbubble", { type = "general",
def = "You are surrounded by a pocket of air."})
defs_data:set("resistance", { nodef = true,
def = "You are resisting magical damage."})
#if not skills.alchemy then
defs_data:set("empower", { nodef = true,
ondef = function () return "("..matches[2]..")" end,
on = "You are already empowered by astronomical energies.",
defr = [[^You are resonating with (?:the )?(?:Nebula )?(\w+)'s energy\.$]]})
#end
#if not skills.elementalism then
defs_data:set("reflection", { nodef = true,
def = "You are surrounded by one reflection of yourself.",
defr = [[^You are surrounded by \d+ reflections? of yourself\.$]]})
#end
defs_data:set("shipwarning", { nodef = true,
def = "You are aware of all nearby ship movements."})
defs_data:set("constitution", { nodef = true,
def = "You are using your superior constitution to prevent nausea." })
defs_data:set("preaching", { nodef = true,
def = "You have accepted a blessing for aid in times of need." })
defs_data:set("frostblessing", { nodef = true,
def = "You are protected by the power of a Frost Spiritshield."})
defs_data:set("willpowerblessing", { nodef = true,
def = "You are regenerating willpower at an increased rate."})
defs_data:set("thermalblessing", { nodef = true,
def = "You are protected by the power of a Thermal Spiritshield."})
defs_data:set("earthblessing", { nodef = true,
def = "You are protected by the power of an Earth Spiritshield."})
#if not skills.groves then
defs_data:set("harmony", { nodef = true,
ondef = function () return "("..matches[2]..")" end,
defr = [[^You are under the blessing of the (\w+) environment\.$]]})
#end
defs_data:set("enduranceblessing", { nodef = true,
def = "You are regenerating endurance at an increased rate.",})
defs_data:set("thirdeye", { type = "general", def = "You possess the sight of the third eye.",
on = {"You now possess the gift of the third eye.", "You already possess the thirdeye.", "You already possess the gift of the third eye."}})
defs_data:set("treewatch", { type = "general",
mana = "little",
def = "You are watching the trees or rigging above for signs of movement.",
on = {"You begin to keep a watchful eye on the treeline.", "You begin to keep a watchful eye on the rigging."},
off = "You cease to watch the treeline."})
defs_data:set("groundwatch", { type = "general",
mana = "little",
def = "You are aware of movement on the ground.",
on = {"You begin to keep a watchful eye on the ground below.", "You are already keeping a watchful eye on the ground."},
off = "You cease keeping a watchful eye on the ground below."})
defs_data:set("alertness", { type = "general",
mana = "little",
def = "Your senses are attuned to nearby movement.",
on = {"You prick up your ears.", "Alertness is already on!", "Your sense of hearing is already heightened."},
off = {"You cease your watchful alertness.", "Alertness is already off!"}})
defs_data:set("curseward", { type = "general",
def = "A curseward has been established about your person.",
off = "Your curseward has been breached!",
on = {"You bring a curseward into being to protect you from harm.", "You already have curseward up."}})
defs_data:set("bell", { type = "general",
on = {"You will now attempt to detect attempts to spy on your person.", "You touch the bell tattoo."},
def = "You are protected by the bell tattoo."})
defs_data:set("cloak", { type = "general",
on = {"You caress the tattoo and immediately you feel a cloak of protection surround you.", "You are already protected by the cloak tattoo."},
def = "You are surrounded by a cloak of protection."})
defs_data:set("favour", { nodef = true,
ondef = function () return string.format("(%s by %s, %sh)",matches[2],matches[3], matches[4]) end,
defr = [[^You are (\w+)favoured by (\w+) for over \d+ Achaean month \(which is about (\d+) hours?\)$]] })
defs_data:set("telesense", { type = "general",
mana = "little",
def = "You are attuned to local telepathic interference.",
on = {"You attune your mind to local telepathic interference.", "Your mind is already attuned to local telepathic interference."},
off = {"Your mind is no longer concentrating on telepathic interference.", "Your mind is already not attuned to local telepathic interference."}})
defs_data:set("hypersight", { type = "general",
mana = "little",
def = "You are utilising hypersight.",
on = {"You concentrate your mind and engage your ability of hypersight.", "You are already concentrating on hypersight."},
off = {"You cease to concentrate on hypersight.", "You are already not concentrating on hypersight."}})
defs_data:set("parry", { nodef = true,
ondef = function ()
local t = sps.parry_currently
for limb, _ in pairs(t) do t[limb] = false end
t[matches[2]] = true
check_sp_satisfied()
return "("..matches[2]..")"
end,
tooltip = "Completely blocks health and wound damage on a limb if you aren't hindered.",
defr = [[^You will attempt to parry attacks to your (.+)\.$]]
})
defs_data:set("nightsight", { type = "general",
def = "Your vision is heightened to see in the dark.",
on = {"Your vision sharpens with light as you gain night sight.", "Your eyes already have the benefit of night sight."},
off = {"Your eyes lose the benefit of night sight.", "Your eyes cannot lose the benefit of night sight, since they do not already have it!"}})
defs_data:set("block", { type = "general",
specialskip = function ()
return (not sys.enabledgmcp) or not (gmcp.Room and gmcp.Room.Info.exits[conf.blockingdir])
end,
ondef = function ()
dict.block.physical.blockingdir = sk.anytoshort(matches[2])
return "("..dict.block.physical.blockingdir..")"
end,
defr = [[^You are blocking the exit (.+)\.$]],
off = {"You stop blocking.", "You were not blocking.", "You cease blocking the exit.", "You begin to flap your wings powerfully, and rise quickly up into the firmament."},
})
defs_data:set("targetting", { nodef = true,
ondef = function () return "("..matches[2]..")" end,
tooltip = "Focuses hits on the targetted limb.",
defr = [[^You are aiming your attacks to the (.+)\.$]]
})
defs_data:set("breath", { type = "general",
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].meditate then
svo["def"..whereto][mode].meditate = false
if echoback then echof("Removed meditate from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].dilation then
svo["def"..whereto][mode].dilation = false
if echoback then echof("Removed dilation from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].flame then
svo["def"..whereto][mode].flame = false
if echoback then echof("Removed flame from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].lyre then
svo["def"..whereto][mode].lyre = false
if echoback then echof("Removed lyre from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end}) -- added in xml w/ conf.gagbreath
defs_data:set("vigilance", { type = "general",
on = {"You squint your eyes, more alert to potential danger.", "You are already vigilant."},
mana = "little",
def = "You are vigilantly watching for potential danger.",
off = {"You relax your vigilance.", "You are not maintaining vigilance."}})
defs_data:set("satiation", { type = "general",
invisibledef = true,
on = {"You begin concentrating on efficient digestion.", "You are already concentrating on efficient digestion."},
off = "Your digestive efficiency returns to normal."})
defs_data:set("clinging", { type = "general",
on = {"You begin to use your entire body to cleverly cling to the branches of the tree while still maintaining a great deal of freedom of action.","You are already clinging to the trees.", "You must be in the trees to cling to branches, or in the rigging of a ship to cling to the ropes."},
off = "You cease your clinging behaviour and release the tree.",
def = {"You are clinging tightly to the trees.", "You are clinging tightly to a ship's rigging."}})
defs_data:set("selfishness", { type = "general", def = "You are feeling quite selfish.",
onenable = function (mode, newdef, whereto, echoback)
if conf.serverside and svo.serverignore.selfishness then
svo.serverignore.selfishness = nil
echof("Setting Selfishness to be handled by Svof - serverside can't auto-generosity.")
end
return true
end,
on = {"You rub your hands together greedily.", "You already are a selfish bastard."},
off = {"A feeling of generosity spreads throughout you.", "No worries. You're not a selfish bastard as is."}})
defs_data:set("flying", { nodef = true,
def = "You are soaring high above the ground." })
defs_data:set("starburst", { nodef = true,
def = "You are walking with the grace of the stars." })
defs_data:set("chameleon", { nodef = true,
ondef = function () return "("..matches[2]..")" end,
defr = [[^You are assuming the identity of (\w+)\.$]]})
defs_data:set("insomnia", { type = "general",
def = "You have insomnia, and cannot easily go to sleep.",
-- insomnia curing it is done in trigs as well
-- "Your insomnia has cleared up.": done in triggers for loki
})
defs_data:set("kola", { type = "general",
def = "You are feeling extremely energetic." })
defs_data:set("extra crits", { nodef = true,
def = "You are surrounded by a lucky green aura."})
defs_data:set("rebounding", { type = "general",
def = "You are protected from hand-held weapons with an aura of rebounding.",
off = {"Your defensive barriers disappear.", "Your aura of weapons rebounding disappears.", "A small brown lemming rips apart your aura of rebounding defence with its claws.", "The vines rip apart the aura of rebounding surrounding you."},
offr = {[[^\w+'s cantata shatters the defences surrounding you\.$]], [[^\w+ delivers a single, powerful blow to the aura of rebounding surrounding you, shattering it\.$]], [[^\w+ brings .+? down in a single diagonal stroke, carving cleanly through your aura of rebounding\.$]], [[^\w+ whirls .+? over (?:her|his) head, before bringing it down upon your aura of rebounding, shattering it instantly\.$]], [[^The point of .+? strikes your aura of rebounding, and rapid cracks begin to spread outward from the point of impact\. Moments later, the protection shatters\.$]]}})
defs_data:set("blind", { type = "general",
def = "You are blind." })
defs_data:set("xpboost", { nodef = true,
ondef = function () return "("..matches[2]..")" end,
defr = [[^You are experiencing a (\d+) percent experience boost\.$]] })
defs_data:set("xpbonus", { nodef = true,
ondef = function () return "("..matches[2]..")" end,
defr = {[[^You are benefitt?ing from a (\d+)% experience bonus\.$]], [[^You are benefitting from a (\d+)% bonus to experience gain\.$]] }})
defs_data:set("deaf", { type = "general",
def = "You are deaf.",
off = "The unnatural sound rips through your defences against auditory attacks." })
defs_data:set("xp gain", { nodef = true,
def = "You are surrounded by a vibrant white aura." })
defs_data:set("myrrh", { type = "general",
def = "Your mind is racing with enhanced speed." })
defs_data:set("deathsight", { type = "general",
def = "Your mind has been attuned to the realm of Death.",
on = {"Your mind is already attuned to the realm of Death.", "You shut your eyes and concentrate on the Soulrealms. A moment later, you feel inextricably linked with the realm of Death."},
onr = "^A miasma of darkness passes over your eyes and you feel a link to the realm of Death,? form in your mind\.$",
off = {"You relax your link with the realm of Death.", "You are not linked with the realm of Death."}})
defs_data:set("mindseye", { type = "general",
on = {"Touching the mindseye tattoo, your senses are suddenly heightened.", "You already possess the mindseye defence."},
def = "Your senses are magically heightened."})
defs_data:set("lyre", { type = "general",
specialskip = function() return not conf.lyre end,
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].meditate then
svo["def"..whereto][mode].meditate = false
if echoback then echof("Removed meditate from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].breath then
svo["def"..whereto][mode].breath = false
if echoback then echof("Removed breath from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].dilation then
svo["def"..whereto][mode].dilation = false
if echoback then echof("Removed dilation from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end,
on = "You deftly shape the wall of light into a barrier surrounding yourself.",
onr = [[^You strum .+, and a prismatic barrier forms around you\.$]],
def = "You are standing within a prismatic barrier.",
off = {"Your prismatic barrier dissolves into nothing.", "The stream hits your prismatic barrier, shattering it.", "The breath weapon rips apart your prismatic barrier.", "The breath weapon rips through both your shield and prismatic barrier.", "The spear shatters your prismatic barrier."}})
defs_data:set("speed", { type = "general",
def = "Your sense of time is heightened, and your reactions are speeded."})
defs_data:set("frost", { type = "general", def = "You are tempered against fire damage.",
on = "A chill runs over your icy skin.",
off = "Forks of flame lick against your skin, melting away your protection against fire."})
defs_data:set("venom", { type = "general", def = "Your resistance to damage by poison has been increased.",
on = "You feel a momentary dizziness as your resistance to damage by poison increases."})
defs_data:set("levitation", { type = "general", def = "You are walking on a small cushion of air.",
on = {"Your body begins to feel lighter and you feel that you are floating slightly.", "Your body grows light and buoyant as you touch the feather tattoo, and you begin hovering above the ground."}})
defs_data:set("caloric", { type = "general",
def = "You are coated in an insulating unguent."})
defs_data:set("sileris", { type = "general",
def = "You are protected from the fangs of serpents."})
defs_data:set("chargeshield", { nodef = true,
def = "You are surrounded by a non-conducting chargeshield."})
defs_data:set("meditate", { type = "general",
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].breath then
svo["def"..whereto][mode].breath = false
if echoback then echof("Removed breath from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].dilation then
svo["def"..whereto][mode].dilation = false
if echoback then echof("Removed dilation from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].flame then
svo["def"..whereto][mode].flame = false
if echoback then echof("Removed flame from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].lyre then
svo["def"..whereto][mode].lyre = false
if echoback then echof("Removed lyre from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end,
on = "You close your eyes, bow your head, and empty your mind of all thought.",
off = {"You snap your head up as you break your meditation.", "You cease your meditation having achieved full will and mana."}})
defs_data:set("shield", { type = "general",
on = {"You touch the tattoo and a nearly invisible magical shield forms around you.", "You bid your guardian angel to raise an aura to shield you."},
onr = [[^(\w+)'s angel surrounds you with a protective shield\.$]],
off = {"Your movement causes your magical shield to dissipate.", "The breath weapon rips through your shield.", "The point of the weapon comes to a sudden stop as its tip impacts your magical shield. Originating at the point of impact, fractures spread across the barrier before it shatters.", "Your action causes the nearly invisible magical shield around you to fade away.", "The stream hits your magical shield, shattering it.", "The spout of molten lava surges against your shield, which shatters under the intense force and heat.", "Your defensive barriers disappear.", "A glowing spear comes flying in towards you. The spear shatters your shield.", "The breath weapon rips through both your shield and prismatic barrier.", "With a mad cackle, a gremlin leaps at you and batters your shield with a flurry of blows, fracturing it in moments.", "A dissonant tone shatters the magical shield surrounding you."},
offr = {[[^\w+ razes your magical shield with ]],
[[^A massive, translucent hammer rises out of .+'s tattoo and smashes your magical shield\.]],
[[^\w+'s cantata shatters your magical shield\.$]],
[[^The meteor, shot by \w+, slams into your shield, shattering it\.$]],
[[^\w+ flays away your shield defence\.$]],
[[^\w+ sends myriad russet streams towards you, shattering your shield\.$]],
[[^\w+'s cantata shatters the defences surrounding you\.$]],
[[^\w+'s many heads lash out around you, shattering your protective shield\.$]],
[[^\w+ delivers a single, powerful blow to the magical shield surrounding you, shattering it\.$]],
[[^\w+ continues (?:his|her) assault, coming around for a second blow that scythes straight through your magical shield\.$]],
[[^\w+ brings .+? down in a single diagonal stroke, carving cleanly through your magical shield\.$]],
[[^\w+ continues (?:his|his) attack, coming back around with a bone rattling blow with .+? that causes your magical shield to explode in a shower of twinkling shards\.$]],
[[^\w+ whirls .+ over (?:her|his) head, before bringing it down upon your magical shield, shattering it instantly\.$]],
[[^\w+ summons a blade of condensed air and shears cleanly through the magical shield surrounding you\.$]],
[[^The shadow of \w+ suddenly comes alive, leaping forward to hammer at your shield in a silent frenzy of blows\. Your protection lasts mere moments before exploding in a shower of prismatic shards\.$]],
},
def = "You are surrounded by a nearly invisible magical shield."})
defs_data:set("riding", { type = "general",
specialskip = function() return defc.dragonform end,
ondef = function ()
if tostring(conf.ridingsteed) and tostring(conf.ridingsteed):match("([A-Za-z]+)") and string.find(matches[2], tostring(conf.ridingsteed):match("([A-Za-z]+)"), nil, true) then
return "("..tostring(conf.ridingsteed):match("([A-Za-z]+)")..")"
else
return "("..matches[2]..")"
end
end,
defr = [[^You are riding (.+)\.$]],
onr = {[[^You climb up on .+\.$]], [[^You easily vault onto the back of .+\.$]]},
on = {"You step aboard the chariot and firmly grasp the reins."},
offr = {[[^You step down off of .+\.$]], [[^You lose purchase on .+\.$]], [[^\w+ waves (?:his|her) palm in your direction, and you can only watch as your surroundings dissolve and fade from existence\.$]], [[^You feel your blessed soul drawn toward \w+ as you are delivered out of harm's way\.$]], [[^\w+ steps into the attack, grabs your arm, and throws you violently to the ground\.$]], [[^You feel a strong tug in the pit of your stomach\. Your surroundings dissolve into the featureless swirl of the ether, resolving once more into a recognisable landscape as you land before \w+\.$]]},
off = {"You are not currently riding anything.", "You are not currently riding that.", "You must be mounted to trample.", "You are thrown from the room by the sheer force of the fiery blast.", "You're drawn screaming into its hellish maw.", "The ring of shining metal carries you up into the skies.", "You clamber off of your mount.","You need to be riding a proper mount to gallop.",
#if skills.necromancy then
"You call upon your dark power, and instantly a black wind descends upon you. In seconds your body begins to dissipate, and you are one with the odious vapour.",
#end
#if skills.tarot then
"You vaguely make out a large, square doorway of light and you step through it.",
#end
}})
#if not skills.groves then
defs_data:set("grove vigour", { nodef = true,
def = "You are bathed in an aura of radiant sunlight."})
#end
-- Dragoncraft: everyone gets it
defs_data:set("dragonform", { type = "dragoncraft",
offline_defence = true,
invisibledef = true,
stays_on_death = true,
on = "You already maintain the form of the Dragon.",
off = "Your draconic form melts away, leaving you suddenly weaker and more vulnerable." })
defs_data:set("dragonarmour", { type = "dragoncraft",
specialskip = function() return not defc.dragonform end,
def = "You are surrounded by draconic armour.",
off = "You relax your draconic armour.",
on = {"With a low rumbling from deep within your belly, you beseech Ashaxei for protection. Your skin ripples as a web of crackling magical energy dances like fire across its surface, settling to solidify into a flexible, translucent shell.", "You are already surrounded by draconic armour, Wyrm."}})
defs_data:set("dragonbreath", { type = "dragoncraft",
specialskip = function() return not defc.dragonform end,
def = "You have summoned your draconic breath weapon.",
off = {"You have not summoned your breath weapon.", "As the strain on your inflated lungs reaches extremity, you open your glistening, tooth-lined maw wide and rain a great tempest of venom down upon the ground below."},
offr = {[[^As the strain on your inflated lungs reaches extremity, you open your glistening, tooth-lined maw wide and rain .+]], [[^Focusing your breath into a concentrated stream, you direct a blast of]], [[^Opening your great maw, you unleash an overpowering blast of flesh-searing lightning at .+, whose body goes rigid as s?he screams in agony\.$]], [[^Opening your dragon's mouth to its fullest, you blast .+ with your toxic wrath, damaging (?:her|his) very essence\.$]], [[^Opening your massive maw, you throw your head forward and blast wave after wave of deadly, all-consuming cold at .+\.$]], [[^Opening your maw, you force out a tremendous stream of acid, blasting the flesh from the very bones of .+\.$]], [[^Drawing a mighty breath to fill your lungs, you crane your neck backwards and send a screaming volley of \w+-infused vapour into the air\.$]], [[^You rear back your head, and with a keening roar unleash incandescent hell upon]], [[^With a roar of triumph, you unleash a cataclysm of crushing psi energy, laying waste to .+'s mind\.]], [[^Summoning a torpid cloud of \w+ deep within your belly, you expel your breath toward]] }})
#if skills.necromancy then
defs_data:set("deathsight", { type = "necromancy",
staysindragon = true,
availableindragon = true,
def = "Your mind has been attuned to the realm of Death.",
on = {"Your mind is already attuned to the realm of Death.", "You shut your eyes and concentrate on the Soulrealms. A moment later, you feel inextricably linked with realm of Death."},
onr = "^A miasma of darkness passes over your eyes and you feel a link to the realm of Death,? form in your mind\.$",
off = {"You relax your link with the realm of Death.", "You are not linked with the realm of Death."}})
defs_data:set("soulcage", { type = "necromancy",
staysindragon = true,
offline_defence = true,
on = {"Your soul is already protected by the soulcage.", "You lower the barrier between your spirit and the soulcage.", "You begin to spin a web of necromantic power about your soul, drawing on your vast reserves of life essence. Moment by moment the bonds grow stronger, until your labours are complete. Your soul is entirely safe from harm, fortified in a cage of immortal power."},
off = {"You have not caged your soul in life essence.", "You carefully raise a barrier between your spirit and the soulcage.", "As you feel the last remnants of strength ebb from your tormented body, you close your eyes and let darkness embrace you. Suddenly, you feel your consciousness wrenched from its pitiful mortal frame and your soul is free. You feel your form shifting, warping and changing as you whirl and spiral outward, ever outward. A jolt of sensation awakens you, and you open your eyes tentatively to find yourself trapped within a physical body once more."},
onr = [[^You may not use soulcage for another \d+ Achaean day\(s\)\.$]],
def = "Your being is protected by the soulcage."})
defs_data:set("deathaura", { type = "necromancy",
on = {"You let the blackness of your soul pour forth.", "You already possess an aura of death."},
def = "You are emanating an aura of death.",
off = "Your aura of death has worn off."})
defs_data:set("shroud", { type = "necromancy",
on = {"Calling on your dark power, you draw a thick shroud of concealment about yourself to cover your every action.", "You draw a Shadowcloak about you and blend into your surroundings.", "You draw a cloak of the Blood Maiden about you and blend into your surroundings."},
def = "Your actions are cloaked in secrecy.",
off = {"Your shroud dissipates and you return to the realm of perception.", "The flash of light illuminates you - you have been discovered!"}})
defs_data:set("lifevision", { type = "necromancy",
on = {"You narrow your eyes and blink rapidly, enhancing your vision to seek out sources of lifeforce in others.", "You already possess enhanced vision."},
def = "You have enhanced your vision to be able to see traces of lifeforce."})
defs_data:set("putrefaction", { type = "necromancy",
on = {"You concentrate for a moment and your flesh begins to dissolve away, becoming slimy and wet.", "You have already melted your flesh. Why do it again?"},
def = "You are bathed in the glorious protection of decaying flesh.",
off = "You concentrate briefly and your flesh is once again solid."})
defs_data:set("vengeance", { type = "necromancy",
staysindragon = true,
offline_defence = true,
on = {"You swear to yourself that you will wreak vengeance on your slayer.", "Vengeance already burns within your heart, Necromancer."},
def = "You have sworn vengeance upon those who would slay you.",
off = {"You forswear your previous oath for vengeance, sudden forgiveness entering your heart.", "You have sworn vengeance against none, Necromancer."}})
#end
#if skills.chivalry then
defs_data:set("weathering", { type = "chivalry",
on = "A brief shiver runs through your body.",
def = "Your body is weathering the storm of life a little better."})
defs_data:set("fury", { type = "chivalry",
on = {"Your eyes rage with fury.", "You're already raged with fury!", "Too much fury in a day is unhealthy!"},
off = {"You suddenly lose the fury in your eyes.", "You are already calm and not feeling any fury."},
def = "Fury rages in your eyes."})
defs_data:set("sturdiness", { type = "chivalry",
on = "You cross your arms, standing firm and resolute.",
def = "You are standing firm against attempts to move you.",
off = "You cease to stand firm against attempts to move you."})
defs_data:set("grip", { type = "chivalry",
on = {"You concentrate on gripping tightly with your hands.", "You are already tightly gripping with your hands."},
def = "Your hands are gripping your wielded items tightly.",
off = "You relax your grip."})
defs_data:set("mastery", { type = "chivalry",
on = {"You have begun exercising true mastery of the blades through superior concentration.", "You already have mastery on."},
def = "You are concentrating on mastery of bladecraft.",
off = "You relax your mastery of the blades a bit, finding it too taxing to maintain."})
defs_data:set("resistance", { type = "chivalry",
on = "You call aloud and feel an aura of resistance shroud itself silently about you.",
def = "You are resisting magical damage."})
#end
#if skills.evileye then
defs_data:set("truestare", { type = "evileye",
on = {"A sharp pain spikes through your skull, before settling into a dull throbbing just behind your eyes.", "You are already enhancing your ocular prowess. Lost: Your truestare defence erodes away."},
def = "You are enhancing your ocular prowess."})
#end
#if skills.weaponmastery then
defs_data:set("deflect", { type = "weaponmastery",
on = "You will now attempt to deflect arrows toward less vital areas.",
def = "You are attempting to deflect arrows toward less vital areas."})
#end
#if skills.shindo then
defs_data:set("weathering", { type = "shindo",
on = "A brief shiver runs through your body.",
def = "Your body is weathering the storm of life a little better."})
defs_data:set("sturdiness", { type = "shindo",
on = "You cross your arms, standing firm and resolute.",
def = "You are standing firm against attempts to move you.",
off = "You cease to stand firm against attempts to move you." })
defs_data:set("toughness", { type = "shindo",
def = "Your skin is toughened.",
on = "Flexing your muscles, you concentrate on forcing unnatural toughness over the surface of your skin."})
defs_data:set("clarity", { type = "shindo",
on = {"You are already concentrating on a clearer awareness of your environs.", "As you focus upon your visual field, the shadows grow faint, details become pronounced, and the world seems somehow more real."},
def = "You are seeing the world around you with greater clarity of vision." })
defs_data:set("mindnet", { type = "shindo",
on = {"You cast an invisible mind net out into the distance, allowing it to settle about the surrounding land.", "Extending your well-trained senses, you focus upon the movements of others nearby.", "You already have mindnet active."},
def = "You have cast a mindnet over the local area.",
off = "You cease concentration and your mind net vanishes."})
defs_data:set("constitution", { type = "shindo",
def = "You are using your superior constitution to prevent nausea.",
on = {"You clench the muscles in your stomach, determined to assert your superior constitution.", "You are using your superior constitution to prevent nausea."}})
defs_data:set("waterwalk", { type = "shindo",
def = "You are poised to glide across the surface of water.",
on = {"You are already poised to glide across the surface of water.", "Dancing lightly on your feet, you prepare to run across the surface of water."}})
defs_data:set("shintrance", { type = "shindo",
on = {"You are already focused upon gaining shindo energy.", "You centre your focus inwards, slowly opening yourself up to the energy of Shindo."},
off = "You break out of the Shin Trance, sighing as you feel your accumulated Shin energy vanish.",
def = "You are deep within the Shin trance."})
defs_data:set("consciousness", { type = "shindo",
def = "You are maintaining consciousness at all times.",
off = {"You are not maintaining consciousness.", "You will no longer concentrate on retaining full consciousness."},
on = {"You are already maintaining consciousness.", "You will remain conscious at all times."}})
defs_data:set("bind", { type = "shindo",
on = {"You bind Shin energy to your form, willing your body to accept its restorative power.", "You are already binding Shin energy."},
def = "You are diverting excess Shin energy into regeneration.",
off = "You cease binding excess Shin energy towards regeneration."})
defs_data:set("projectiles", { type = "shindo",
def = "You are alert to incoming projectiles.",
off = {"You cease your watch for projectiles.", "You are not watching for projectiles."},
on = "You look about sharply, poised to avoid all incoming projectiles."})
defs_data:set("dodging", { type = "shindo",
on = "You resolve to keep an eye on the skies for danger.",
def = "You are watching the skies for danger.",
off = {"You are not using Shindo Dodging.", "You cease watching the skies."}})
defs_data:set("grip", { type = "shindo",
on = {"You concentrate on gripping tightly with your hands.", "You are already tightly gripping with your hands."},
def = "Your hands are gripping your wielded items tightly.",
off = "You relax your grip."})
defs_data:set("immunity", { type = "shindo",
on = "You close your eyes and grit your teeth, feeling the heat of the blood pumping through your veins.",
off = "You cease concentrating on immunity."})
#end
#if skills.twoarts then
defs_data:set("retaliationstrike", { type = "twoarts",
def = "You are performing retaliatory strikes against your attackers.",
off = "You will no longer strike in retaliation.",
onr = [[Grasping the hilt of \w+ \w+, you prepare to counterattack when the opportunity arises\.$]]})
defs_data:set("doya", { type = "twoarts",
off = {"You adopt a neutral stance.", "You are not in any stance, Warrior."},
on = "Lowering your centre of gravity, you drop into the Doya stance.",
def = "You are in the Doya stance.",
onenable = function (mode, newdef, whereto, echoback)
for _, stance in ipairs{"thyr", "mir", "arash", "sanya", "doya"} do
if stance ~= newdef and svo["def"..whereto][mode][stance] then
svo["def"..whereto][mode][stance] = false
if echoback then echof("Removed %s from %s, it's incompatible with %s to have simultaneously up.", stance, whereto, newdef) end
end
end
return true
end,
specialskip = function ()
return (defc.thyr or defc.mir or defc.arash or defc.sanya)
end })
defs_data:set("thyr", { type = "twoarts",
off = {"You adopt a neutral stance.", "You are not in any stance, Warrior."},
on = "Readying yourself with a flourish, you flow into the Thyr stance.",
def = "You are in the Thyr stance.",
onenable = function (mode, newdef, whereto, echoback)
for _, stance in ipairs{"thyr", "mir", "arash", "sanya", "doya"} do
if stance ~= newdef and svo["def"..whereto][mode][stance] then
svo["def"..whereto][mode][stance] = false
if echoback then echof("Removed %s from %s, it's incompatible with %s to have simultaneously up.", stance, whereto, newdef) end
end
end
return true
end,
specialskip = function ()
return (defc.doya or defc.mir or defc.arash or defc.sanya)
end })
defs_data:set("mir", { type = "twoarts",
off = {"You adopt a neutral stance.", "You are not in any stance, Warrior."},
on = "Resolving to move as water, you enter the Mir stance.",
def = "You are in the Mir stance.",
onenable = function (mode, newdef, whereto, echoback)
for _, stance in ipairs{"thyr", "mir", "arash", "sanya", "doya"} do
if stance ~= newdef and svo["def"..whereto][mode][stance] then
svo["def"..whereto][mode][stance] = false
if echoback then echof("Removed %s from %s, it's incompatible with %s to have simultaneously up.", stance, whereto, newdef) end
end
end
return true
end,
specialskip = function ()
return (defc.thyr or defc.doya or defc.arash or defc.sanya)
end })
defs_data:set("arash", { type = "twoarts",
off = {"You adopt a neutral stance.", "You are not in any stance, Warrior."},
on = "Mind set on the dancing flame, you take up the Arash stance.",
def = "You are in the Arash stance.",
onenable = function (mode, newdef, whereto, echoback)
for _, stance in ipairs{"thyr", "mir", "arash", "sanya", "doya"} do
if stance ~= newdef and svo["def"..whereto][mode][stance] then
svo["def"..whereto][mode][stance] = false
if echoback then echof("Removed %s from %s, it's incompatible with %s to have simultaneously up.", stance, whereto, newdef) end
end
end
return true
end,
specialskip = function ()
return (defc.thyr or defc.mir or defc.doya or defc.sanya)
end })
defs_data:set("sanya", { type = "twoarts",
off = {"You adopt a neutral stance.", "You are not in any stance, Warrior."},
on = "Clearing your mind, you sink into the Sanya stance.",
def = "You are in the Sanya stance.",
onenable = function (mode, newdef, whereto, echoback)
for _, stance in ipairs{"thyr", "mir", "arash", "sanya", "doya"} do
if stance ~= newdef and svo["def"..whereto][mode][stance] then
svo["def"..whereto][mode][stance] = false
if echoback then echof("Removed %s from %s, it's incompatible with %s to have simultaneously up.", stance, whereto, newdef) end
end
end
return true
end,
specialskip = function ()
return (defc.thyr or defc.mir or defc.arash or defc.doya)
end })
#end
#if skills.subterfuge then
defs_data:set("phase", { type = "subterfuge",
on = {"A short burst of azure light fills your vision and when it is gone, you find yourself phased out of sync with the rest of reality." , "You are already phased!"},
def = "Phased slightly out of reality, you are effectively untouchable.",
off = {"There's a flash of light and you're pulled back into phase with reality." , "Your surroundings shatter into a cloud of glowing stars which dissipate to leave you back where you began." , "You are suddenly and unexpectedly pulled back into phase with reality."}})
defs_data:set("hiding", { type = "subterfuge",
on = {"You conceal yourself using all the guile you possess.", "You are already hidden.", "Too many prying eyes prevent you from finding a suitable hiding place."},
def = "You have used great guile to conceal yourself.",
off = {"You emerge from your hiding place.","You are discovered!","The flash of light illuminates you - you have been discovered!", "From what do you wish to emerge?"}})
defs_data:set("scales", { type = "subterfuge",
on = {"You concentrate and slowly your body is covered by protective, serpentine scales.","You are already covered in protective, serpentine scales."},
def = "Serpentine scales protect your body.",
off = "You ripple your muscles and as you watch, your skin turns white and peels off, taking your protective scaling with it."})
defs_data:set("pacing", { type = "subterfuge",
on = {"You begin to pace yourself and prepare for sudden bursts of exertion.","You are already pacing."},
def = "You are paced for bursts of exertion.",
off = "You are no longer pacing yourself."})
defs_data:set("bask", { type = "subterfuge",
on = {"You lie down and stretch yourself out, ready to bask beneath the blazing sun.", "The stresses and strains of existence gradually fall from you.", "The rays of sunlight spread a healing warmth through your body."},
def = "Your blood is being heated by the sun.",
off = "You rise to your feet."})
defs_data:set("listen", { type = "subterfuge",
onr = [[^You listen intently to the (.+)\.$]],
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].eavesdrop then
svo["def"..whereto][mode].eavesdrop = false
if echoback then echof("Removed eavesdrop from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end,
def = "You are listening in on another conversation.",
specialskip = function ()
return (defc.eavesdrop)
end
})
defs_data:set("eavesdrop", { type = "subterfuge",
onr = [[^You listen intently to the (.+)\.$]],
def = "You are listening in on another conversation."}) --this ability completely replaces listen
defs_data:set("lipread", { type = "subterfuge",
on = {"You will now lip read to overcome the effects of deafness.", "You are already lipreading."},
def = "You are lipreading to overcome deafness.",
specialskip = function()
return ((not defc.deaf and not affs.deafaff) or defc.mindseye)
end })
defs_data:set("weaving", { type = "subterfuge",
mana = "lots",
on = {"You picture a cobra in your mind, and slowly begin to weave back and forth agilely.", "You are already imitating the cobra."},
def = "Cobra-like, you are weaving back and forth to dodge blows.",
off = "You cease your cobra-like weaving.", --this vanishes when mana is 0 without a message, just like alertness
})
defs_data:set("cloaking", { type = "subterfuge",
on = "You toss a sparkling cloud of dust over yourself and as it settles you shimmer into invisibility.",
def = "Your actions are cloaked in secrecy.",
off = {"You dispel all illusion magics that were woven about yourself.","Your shroud dissipates and you return to the realm of perception."},
-- not compatible with ghost per Alyssea
offr = [[^\w+ points a finger at you and you feel anti-magic sweep over you\.$]] })
defs_data:set("ghost", { type = "subterfuge",
on = "You project a net of light about yourself until your image becomes faded and ghostly.",
def = "You are shimmering with a ghostly light.",
off = {"You dispel all illusion magics that were woven about yourself.", "Your ghostly image slowly intensifies until you appear flesh and blood again."},
offr = [[^\w+ points a finger at you and you feel anti-magic sweep over you\.$]], })
defs_data:set("secondsight", { type = "subterfuge",
on = {"You narrow your eyes, allowing your vision to extend beyond the normal spectrum.", "You already possess the second sight."},
def = "You are able to detect wormholes due to possessing the second sight.",})
#end
#if skills.swashbuckling then
defs_data:set("drunkensailor", { type = "swashbuckling",
on = {"You start swaying to and fro seemingly unpredictably as you enter the stance of the Drunken Sailor.", "You are already in the stance of the Drunken Sailor."},
def = "The Drunken Sailor stance protects you.",
off = "You relax into your normal fighting stance.",
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].heartsfury then
svo["def"..whereto][mode].heartsfury = false
if echoback then echof("Removed heartsfury from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end,
specialskip = function ()
return (defc.heartsfury)
end})
defs_data:set("arrowcatch", { type = "swashbuckling",
mana = "lots",
on = {"You have begun to look for arrows to pluck from the air.", "You already have arrowcatching on."},
def = "You are attempting to pluck arrows from the air.",
off = "You've turned off arrowcatching."})
defs_data:set("balancing", { type = "swashbuckling",
mana = "lots",
on = {"You move onto the balls of your feet and begin to concentrate on balance.", "You're already balancing."},
def = "You are balancing on the balls of your feet.",
off = "You cease to balance on the balls of your feet."})
defs_data:set("acrobatics", { type = "swashbuckling",
on = {"You begin leaping and bouncing about, making it more difficult to hit you.", "You are already bouncing around acrobatically."},
def = "You are bouncing around acrobatically.",
off = "You cease your acrobatic leaping and bouncing."})
defs_data:set("dodging", { type = "swashbuckling",
on = {"You resolve to keep an eye on the skies for danger.", "You are already watching the skies."},
def = "You are watching the skies for danger.",
off = "You cease watching the skies."})
defs_data:set("grip", { type = "swashbuckling",
on = {"You concentrate on gripping tightly with your hands.", "You are already tightly gripping with your hands."},
def = "Your hands are gripping your wielded items tightly.",
off = "You relax your grip."})
defs_data:set("heartsfury", { type = "swashbuckling",
on = {"Taut with rage, you enter the Heart's Fury stance.", "You are already in the Heart's Fury stance."},
def = "The Heart's Fury stance protects you.",
off = "You relax into your normal fighting stance.",
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].drunkensailor then
svo["def"..whereto][mode].drunkensailor = false
if echoback then echof("Removed drunkensailor from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end,
specialskip = function ()
return (defc.drunkensailor)
end})
--[[trueparry = { type = "swashbuckling",
on = "You will now attempt to parry attacks on your arms", --arms replaceable with legs/centre/right/left
def = {"You will attempt to parry attacks to your left arm.", "You will attempt to parry attacks to your right arm."} --DEF shows both limbs being parried when trueparrying
off = "You cease your attempts at parrying."]]
#end
#if skills.voicecraft then
defs_data:set("lay", { type = "voicecraft",
on = {"You sing a powerful Lay of distortion, protecting against the creation of physical images of yourself.", "You sing a powerful Lay of distortion."},
def = "You are protected from the creation of physical images of yourself.",
offr = [[^Your Lay of distortion is destroyed by \w+'s attempted fashion\.$]]})
defs_data:set("tune", { type = "voicecraft",
on = "Singing a powerful tune of safety and protection, you weave musical defences around yourself.",
def = "You are protected from damage by a tune of safety."})
defs_data:set("songbird", { type = "voicecraft",
on = {"Lifting your head, you whistle an intricate, lilting tune. You are soon answered by a blue-feathered songbird that wings swiftly in and perches upon your shoulder.", "Your songbird twitters upon your shoulder, reminding you of its presence."},
def = "A songbird is perched upon your shoulder.",
off = "With a final chirp, the songbird upon your shoulder takes flight and wings swiftly away."})
defs_data:set("aria", { type = "voicecraft",
on = {"Your voice rises to the heavens with your instrument as you sing an Aria of healing to yourself.", "Your voice rises to the heavens with your instrument, but without your audience, as you sing an Aria of healing to yourself."},
def = "Your health is enhanced by the beauties of an Aria.",
off = "The heavenly strains of the Aria slowly fall silent."})
#end
#if skills.harmonics then
defs_data:set("lament", {type = "harmonics", custom_def_type = "harmonic",
on = "Slowly you take up the dark and sombre tones of a Lament.",
off = "A burdensome sense of oppression lifts as the Lament arrives at its mournful conclusion."})
defs_data:set("anthem", {type = "harmonics", custom_def_type = "harmonic",
on = "An Anthem fills the air with its mighty fortress of protective influences as you take up its stately music.",
off = "The structure of protection afforded by the Anthem decays with the final notes of the composition."})
defs_data:set("harmonius", {type = "harmonics", custom_def_type = "harmonic",
on = "Blending several seemingly distinct musical ideas into one majestic whole, you begin the Harmonius.",
off = "The individual strands blended by the Harmonius slowly disintegrate into cacophony as the song ends."})
defs_data:set("contradanse", {type = "harmonics", custom_def_type = "harmonic",
on = "An elaborate Contradanse melody begins to pervade the room.",
off = "Melody slows, simplifies, and comes to an end, terminating the elaborate Contradanse."})
defs_data:set("paxmusicalis", {type = "harmonics", custom_def_type = "harmonic",
on = "You experience true rest and relief as you gently enter into the first soothing passage of the Pax Musicalis.",
off = "The peaceful strains of the Paxmusicalis slowly fade to silence."})
defs_data:set("gigue", {type = "harmonics", custom_def_type = "harmonic",
on = "You dash off a few bars, launching into the detailed patterns of a Gigue.",
off = "Your thoughts return to their normal order as the Gigue's airs fade from the room."})
defs_data:set("bagatelle", {type = "harmonics", custom_def_type = "harmonic",
on = "Through a series of musical twists and turns you begin the Bagatelle.",
off = "Twisting and turning no more, the Bagatelle ends suddenly."})
defs_data:set("partita", {type = "harmonics", custom_def_type = "harmonic",
on = "Delicate and precise, you take up a Partita.",
off = "The Partita ends without fanfare, precisely as it began."})
defs_data:set("berceuse", {type = "harmonics", custom_def_type = "harmonic",
on = "You begin a delicate Berceuse, playing with great tenderness.",
off = "The Berceuse drifts faintly away as its final notes float softly through the area."})
defs_data:set("continuo", {type = "harmonics", custom_def_type = "harmonic",
on = "Your feelings rise with a Continuo's opening movement.",
off = "The Continuo falters and dies and, along with it, the thrilling feeling it had brought."})
defs_data:set("wassail", {type = "harmonics", custom_def_type = "harmonic",
on = "The Wassail's first notes stir and strengthen you.",
off = "The Wassail trails slowly off, coming to a melancholy conclusion."})
defs_data:set("canticle", {type = "harmonics", custom_def_type = "harmonic",
on = "You enter into the realms of the divine as you play the opening strains of a sacred Canticle.",
off = "The instabilities of the world again impinge upon you as the Canticle draws to a close."})
defs_data:set("reel", {type = "harmonics", custom_def_type = "harmonic",
on = "With a hop you enter into the complex, up-tempo dance melody of a Reel.",
off = "The Reel comes around again, sounding as though ready to begin another step, and suddenly stops."})
defs_data:set("hallelujah", {type = "harmonics", custom_def_type = "harmonic",
on = "With a powerful fanfare, you begin a resounding Hallelujah.",
off = "The Hallelujah's final amen fills you with awe at its power, and sorrow for the ending of this uplifting piece."})
#end
#if skills.devotion then
defs_data:set("inspiration", { type = "devotion",
on = {"You bow your head and, praying to the gods for inspiration, you are soon rewarded as your body is suffused with strength."},
def = "Your limbs are suffused with divinely-inspired strength.",
off = "You slump slightly as the divinely-inspired strength leaves your body." })
defs_data:set("bliss", { type = "devotion",
staysindragon = true,
on = {"You pour blessings of bliss over yourself, granting visions of the majesty of the divine.", "The divine choir lingers on in your mind, and your spirit soars.", "That person is already experiencing bliss."},
onr = [[^(\w+) pours blessings over you, and divine choirs begin to sing joyously at the edge of your hearing\.]],
invisibledef = true })
defs_data:set("bloodsworn", { type = "devotion",
onr = [[^You are bloodsworn to \w+\.$]],
on = "The true power of the bloodsworn begins to rage in your veins.",
invisibledef = true,
off = "The power of the bloodsworn leaves you." })
#end
#if skills.spirituality then
defs_data:set("mace", { type = "spirituality",
invisibledef = true})
defs_data:set("heresy", { type = "spirituality",
def = "You are hunting heretics.",
off = "Your rage to destroy heretics subsides.",
on = {"Rage fills you as the thought of heresy inspires you to greater efforts.", "You are already hunting the heretics."}})
defs_data:set("summon", { type = "spirituality",
def = "You are regenerating endurance at an increased rate.",
custom_def_type = "angel",
off = {"The light of the guardian angel dims quietly out of existence.", "Your guardian angel must be visible before you can communicate with her.", "Your guardian angel shimmers silently away."},
on = {"A flower of white light blooms in the air beside you, and your guardian is by your side.", "You feel confusion radiate from your guardian, who hovers already at your side."}})
defs_data:set("empathy", { type = "spirituality",
specialskip = function() return not defc.summon end,
off = {"You stop using your guardian angel's empathic link.", "You're not using your guardian angel's empathic link.", "Your empathic link with your angel is severed."},
custom_def_type = "angel",
on = {"A feeling of deep peace fills you as your fate is bound with that of your guardian angel.", "Your guardian informs you sadly that she lacks the power to obey your command."}})
defs_data:set("care", { type = "spirituality",
specialskip = function() return not defc.summon end,
off = {"Your guardian angel ceases healing your afflictions.", "Your guardian angel is not currently healing your afflictions.", "Your guardian ceases to pass on her care."},
custom_def_type = "angel",
on = {"Your guardian angel begins to shimmer with a soft red light.", "Your guardian informs you sadly that she lacks the power to obey your command."}})
defs_data:set("watch", { type = "spirituality",
on = "You bid your angel to watch over you.",
off = {"You order your angel to cease tracking the movements of your enemies.", "Your guardian angel is not currently watching your enemies.", "Your guardian ceases to watch."},
custom_def_type = "angel",
})
#end
#if skills.metamorphosis then
defs_data:set("affinity", { type = "metamorphosis",
on = {"You are already embracing the spirit that dwells within you.", "You embrace the spirit that dwells within you and are overcome with the joy of true unity."},
def = "You have a great affinity with your spirit form." })
--general meta ability,
defs_data:set("bonding", { type = "metamorphosis",
on = {"You are already bonding with the spirits, Metamorph.", "Your soul draws inexorably closer to its spirit host as the spiritual bonding magic works about you."},
def = "You are bonded to your spirit totem.",
off = {"Your soul is not under the influence of a spiritual bond to its spirit host", "You shiver briefly as the spiritual bonding of your soul to its spirit host ends."}})
--general meta ability
defs_data:set("elusiveness", { type = "metamorphosis",
specialskip = function() return not sk.morphsforskill.elusiveness end,
on = {"You are already watching for pursuit.", "Your eyes flicker this way and that as you watch for pursuers."},
def = "You are alert to those who would pursue you.",
off = {"You are not watching for pursuers, Metamorph.", "You cease watching for pursuit."},
})
--Basilisk, Hyena, Wolverine, Jaguar
defs_data:set("flame", { type = "metamorphosis",
specialskip = function() return not sk.morphsforskill.flame end,
onenable = function (mode, newdef, whereto, echoback)
for _, morph in ipairs{"squirrel", "wildcat", "wolf", "turtle", "jackdaw", "cheetah", "owl", "hyena", "condor", "gopher", "sloth", "bear", "nightingale", "elephant", "wolverine", "jaguar", "eagle", "gorilla", "icewyrm", "hydra"} do
if morph ~= newdef and svo["def"..whereto][mode][morph] then
svo["def"..whereto][mode][morph] = false
if echoback then echof("Removed %s from %s, it's incompatible with %s to have simultaneously up.", morph, whereto, newdef) end
end
end
return true
end,
invisibledef = true,
on = {"You take a deep breath and realise your error - you sputter and engulf yourself in fire!", "You take a deep breath and feel the heat begin to build within you.", "You are ready to breathe yellow fire.", "You are ready to breathe blue fire.","You are ready to breathe white fire.", "With a roar you channel your reserves into your inner flame, instantly summoning forth a raging inferno."},
offr = [[^You inhale deeply, allowing the raging flames to build up inside you. With an earth-shaking roar, you release a white-hot jet of fire directly at \w+\.$]],
off = {"A small gout of fire erupts harmlessly from your mouth.", "You take a deep breath and realise your error - you sputter and engulf yourself in fire!", "Unleashing white-hot flames in a reckless burst of fire, you create a roaring inferno about your person.", "Your inner fire does not burn with sufficient intensity, Metamorph.", "You take a deep breath and realise your error - you splutter and engulf yourself in fire!"},
})
--Wyvern, Basilisk
defs_data:set("lyre", { type = "metamorphosis",
specialskip = function() return not conf.lyre or not sk.morphsforskill.lyre end,
availableindragon = true,
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].meditate then
svo["def"..whereto][mode].meditate = false
if echoback then echof("Removed meditate from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].breath then
svo["def"..whereto][mode].breath = false
if echoback then echof("Removed breath from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
if svo["def"..whereto][mode].flame then
svo["def"..whereto][mode].flame = false
if echoback then echof("Removed flame from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end,
on = {"You begin to weave a melody of magical, heart-rending beauty and a beautiful barrier of prismatic light surrounds you.", "You strum a Lasallian lyre, and a prismatic barrier forms around you.", "You deftly shape the wall of light into a barrier surrounding yourself.", "You strum a darkly glowing mandolin, and a prismatic barrier forms around you."},
def = "You are standing within a prismatic barrier.",
off = {"Your prismatic barrier dissolves into nothing.", "The stream hits your prismatic barrier, shattering it.", "The breath weapon rips apart your prismatic barrier.", "The breath weapon rips through both your shield and prismatic barrier.", "The spear shatters your prismatic barrier."}})
--Nightingale Only
-- defs_data:set("nightsight", { type = "metamorphosis",
-- specialskip = function() return not sk.morphsforskill.nightsight end,
-- on = "Your vision sharpens with light as you gain night sight.",
-- def = "Your vision is heightened to see in the dark.",
-- off = "Your eyes lose the benefit of night sight.",
-- })
--Wildcat, Wolf, Cheetah, Owl, Hyena, Condor, Wolverine, Jaguar, Eagle, Icewyrm, Wyvern, Hydra
defs_data:set("rest", { type = "metamorphosis",
specialskip = function() return not sk.morphsforskill.rest end,
onenable = function (mode, newdef, whereto, echoback)
if svo["def"..whereto][mode].flame then
svo["def"..whereto][mode].flame = false
if echoback then echof("Removed flame from %s, it's incompatible with %s to have simultaneously up.", whereto, newdef) end
end
return true
end,
on = {"You find a quiet corner, curl up and settle down to rest.","You feel the strains of the world falling away from your weary limbs.", "But you're already resting, O sloth!"},
invisibledef = true,
off = "Your rest is interrupted.","You rise from your rest, refreshed and full of energy."})
--Sloth only
defs_data:set("resistance", { type = "metamorphosis",
specialskip = function() return not sk.morphsforskill.resistance end,
on = "You call aloud and feel an aura of resistance shroud itself silently about you.",
def = "You are resisting magical damage."})
--Basilisk, Jaguar, Hydra
defs_data:set("stealth", { type = "metamorphosis",
specialskip = function() return not sk.morphsforskill.stealth end,
on = {"You are already moving in total silence.", "You will now move in total silence."},
def = "Your movements are incredibly stealthy.",
off = {"You are not currently moving silently, Metamorph.", "You cease concentrating on stealth."},
})
--Basilisk, Hyena, Jaguar
defs_data:set("temperance", { type = "metamorphosis",
specialskip = function() return not sk.morphsforskill.temperance end,
on = {"Your skin is already chilled, Metamorph.", "A chill runs over your icy skin."},
def = "You are tempered against fire damage.",
})
--Icewyrm, Wyvern, Hydra
defs_data:set("vitality", { type = "metamorphosis",
specialskip = function() return not sk.morphsforskill.vitality end,
on = {"Your body is already aglow with vitality.", "Your body positively glows with health and vitality."},
def = "You will call upon your fortitude in need.",
off = {"You cannot call upon your vitality again so soon.", "A surge of rejuvenating energy floods your system, healing your wounds."}})
--Bear, Elephant, Jaguar, Icewyrm, Wyvern, Hydra
defs_data:set("squirrel", { type = "metamorphosis",
onenable = function (mode, newdef, whereto, echoback)
for _, morph in ipairs{"squirrel", "wildcat", "wolf", "turtle", "jackdaw", "cheetah", "owl", "hyena", "condor", "gopher", "sloth", "basilisk", "bear", "nightingale", "elephant", "wolverine", "jaguar", "eagle", "gorilla", "icewyrm", "wyvern", "hydra", "flame"} do
if morph ~= newdef and svo["def"..whereto][mode][morph] then
svo["def"..whereto][mode][morph] = false
if echoback then echof("Removed %s from %s, it's incompatible with %s to have simultaneously up.", morph, whereto, newdef) end
end
end
return true
end,
def = "A squirrel spirit co-habits your body." })