Skip to content

Commit 7775159

Browse files
committed
Add all rings of resistance
1 parent 4e17fd3 commit 7775159

File tree

2 files changed

+263
-3
lines changed

2 files changed

+263
-3
lines changed

src/ts/effects/dnd5e/defined-effects/magic-items.ts

Lines changed: 223 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function magicItems(): ItemEffects {
4343
beltOfCloudGiantStrength(),
4444
beltOfStormGiantStrength(),
4545
bootsOfElvenkind(),
46-
// this.#bootsOfSpeed, // TODO maybe - it's an active effect
46+
// bootsOfSpeed(), // TODO maybe - it's an active effect
4747
bootsOfTheWinterlands(),
4848
bracersOfArchery(),
4949
bracersOfDefense(),
@@ -68,9 +68,18 @@ function magicItems(): ItemEffects {
6868
// stoneOfGoodLuck(),
6969
// wingedBoots, // TODO maybe
7070
// wingsOfFlying, // TODO maybe
71-
ringOfAcidResistance(),
7271
ringOfFreeAction(),
73-
// ringOfResistance(), // todo maybe - either nested or lots of them
72+
ringOfResistance(),
73+
ringOfAcidResistance(),
74+
ringOfColdResistance(),
75+
ringOfFireResistance(),
76+
ringOfForceResistance(),
77+
ringOfLightningResistance(),
78+
ringOfNecroticResistance(),
79+
ringOfPoisonResistance(),
80+
ringOfPsychicResistance(),
81+
ringOfRadiantResistance(),
82+
ringOfThunderResistance(),
7483
ringOfSwimming(),
7584
ringOfWarmth(),
7685
// TODO oils? https://www.5esrd.com/gamemastering/magic-items/potions-oils/
@@ -435,6 +444,37 @@ function cloakOfTheMantaRay(): PreCreate<ActiveEffectSource> {
435444
});
436445
}
437446

447+
function ringOfResistance(): PreCreate<ActiveEffectSource> {
448+
const nestedEffectIds = [
449+
ringOfAcidResistance(),
450+
ringOfColdResistance(),
451+
ringOfFireResistance(),
452+
ringOfForceResistance(),
453+
ringOfLightningResistance(),
454+
ringOfNecroticResistance(),
455+
ringOfPoisonResistance(),
456+
ringOfPsychicResistance(),
457+
ringOfRadiantResistance(),
458+
ringOfThunderResistance(),
459+
]
460+
.map((effect) => Flags.getCeEffectId(effect))
461+
.filter(notEmpty);
462+
463+
return createConvenientEffect({
464+
effect: {
465+
name: game.i18n.localize(
466+
"ConvenientEffects.Dnd.RingOfResistance.name",
467+
),
468+
description: game.i18n.localize(
469+
"ConvenientEffects.Dnd.RingOfResistance.description",
470+
),
471+
img: "icons/equipment/finger/ring-faceted-silver-orange.webp",
472+
},
473+
nestedEffectIds,
474+
isTemporary: false,
475+
});
476+
}
477+
438478
function ringOfAcidResistance(): PreCreate<ActiveEffectSource> {
439479
return createConvenientEffect({
440480
effect: {
@@ -455,6 +495,186 @@ function ringOfAcidResistance(): PreCreate<ActiveEffectSource> {
455495
});
456496
}
457497

498+
function ringOfColdResistance(): PreCreate<ActiveEffectSource> {
499+
return createConvenientEffect({
500+
effect: {
501+
name: game.i18n.localize(
502+
"ConvenientEffects.Dnd.RingOfColdResistance.name",
503+
),
504+
description: game.i18n.localize(
505+
"ConvenientEffects.Dnd.RingOfColdResistance.description",
506+
),
507+
img: "icons/equipment/finger/ring-faceted-silver-orange.webp",
508+
changes: [
509+
addDamageResistance({
510+
damageType: "cold",
511+
}),
512+
],
513+
},
514+
isTemporary: false,
515+
});
516+
}
517+
518+
function ringOfFireResistance(): PreCreate<ActiveEffectSource> {
519+
return createConvenientEffect({
520+
effect: {
521+
name: game.i18n.localize(
522+
"ConvenientEffects.Dnd.RingOfFireResistance.name",
523+
),
524+
description: game.i18n.localize(
525+
"ConvenientEffects.Dnd.RingOfFireResistance.description",
526+
),
527+
img: "icons/equipment/finger/ring-cabochon-gold-orange.webp",
528+
changes: [
529+
addDamageResistance({
530+
damageType: "fire",
531+
}),
532+
],
533+
},
534+
isTemporary: false,
535+
});
536+
}
537+
538+
function ringOfForceResistance(): PreCreate<ActiveEffectSource> {
539+
return createConvenientEffect({
540+
effect: {
541+
name: game.i18n.localize(
542+
"ConvenientEffects.Dnd.RingOfForceResistance.name",
543+
),
544+
description: game.i18n.localize(
545+
"ConvenientEffects.Dnd.RingOfForceResistance.description",
546+
),
547+
img: "icons/equipment/finger/ring-faceted-gold-purple.webp",
548+
changes: [
549+
addDamageResistance({
550+
damageType: "force",
551+
}),
552+
],
553+
},
554+
isTemporary: false,
555+
});
556+
}
557+
558+
function ringOfLightningResistance(): PreCreate<ActiveEffectSource> {
559+
return createConvenientEffect({
560+
effect: {
561+
name: game.i18n.localize(
562+
"ConvenientEffects.Dnd.RingOfLightningResistance.name",
563+
),
564+
description: game.i18n.localize(
565+
"ConvenientEffects.Dnd.RingOfLightningResistance.description",
566+
),
567+
img: "icons/equipment/finger/ring-cabochon-gold-orange.webp",
568+
changes: [
569+
addDamageResistance({
570+
damageType: "lightning",
571+
}),
572+
],
573+
},
574+
isTemporary: false,
575+
});
576+
}
577+
578+
function ringOfNecroticResistance(): PreCreate<ActiveEffectSource> {
579+
return createConvenientEffect({
580+
effect: {
581+
name: game.i18n.localize(
582+
"ConvenientEffects.Dnd.RingOfNecroticResistance.name",
583+
),
584+
description: game.i18n.localize(
585+
"ConvenientEffects.Dnd.RingOfNecroticResistance.description",
586+
),
587+
img: "icons/equipment/finger/ring-band-engraved-scrolls-silver.webp",
588+
changes: [
589+
addDamageResistance({
590+
damageType: "necrotic",
591+
}),
592+
],
593+
},
594+
isTemporary: false,
595+
});
596+
}
597+
598+
function ringOfPoisonResistance(): PreCreate<ActiveEffectSource> {
599+
return createConvenientEffect({
600+
effect: {
601+
name: game.i18n.localize(
602+
"ConvenientEffects.Dnd.RingOfPoisonResistance.name",
603+
),
604+
description: game.i18n.localize(
605+
"ConvenientEffects.Dnd.RingOfPoisonResistance.description",
606+
),
607+
img: "icons/equipment/finger/ring-faceted-gold-purple.webp",
608+
changes: [
609+
addDamageResistance({
610+
damageType: "poison",
611+
}),
612+
],
613+
},
614+
isTemporary: false,
615+
});
616+
}
617+
618+
function ringOfPsychicResistance(): PreCreate<ActiveEffectSource> {
619+
return createConvenientEffect({
620+
effect: {
621+
name: game.i18n.localize(
622+
"ConvenientEffects.Dnd.RingOfPsychicResistance.name",
623+
),
624+
description: game.i18n.localize(
625+
"ConvenientEffects.Dnd.RingOfPsychicResistance.description",
626+
),
627+
img: "icons/equipment/finger/ring-cabochon-notched-gold-green.webp",
628+
changes: [
629+
addDamageResistance({
630+
damageType: "psychic",
631+
}),
632+
],
633+
},
634+
isTemporary: false,
635+
});
636+
}
637+
638+
function ringOfRadiantResistance(): PreCreate<ActiveEffectSource> {
639+
return createConvenientEffect({
640+
effect: {
641+
name: game.i18n.localize(
642+
"ConvenientEffects.Dnd.RingOfRadiantResistance.name",
643+
),
644+
description: game.i18n.localize(
645+
"ConvenientEffects.Dnd.RingOfRadiantResistance.description",
646+
),
647+
img: "icons/equipment/finger/ring-inlay-red.webp",
648+
changes: [
649+
addDamageResistance({
650+
damageType: "radiant",
651+
}),
652+
],
653+
},
654+
isTemporary: false,
655+
});
656+
}
657+
658+
function ringOfThunderResistance(): PreCreate<ActiveEffectSource> {
659+
return createConvenientEffect({
660+
effect: {
661+
name: game.i18n.localize(
662+
"ConvenientEffects.Dnd.RingOfThunderResistance.name",
663+
),
664+
description: game.i18n.localize(
665+
"ConvenientEffects.Dnd.RingOfThunderResistance.description",
666+
),
667+
img: "icons/equipment/finger/ring-faceted-silver-orange.webp",
668+
changes: [
669+
addDamageResistance({
670+
damageType: "thunder",
671+
}),
672+
],
673+
},
674+
isTemporary: false,
675+
});
676+
}
677+
458678
function ringOfFreeAction(): PreCreate<ActiveEffectSource> {
459679
return createConvenientEffect({
460680
effect: {

static/lang/en.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,10 +671,50 @@
671671
"name": "Restrained",
672672
"description": "- A restrained creature's speed becomes 0, and it can't benefit from any bonus to its speed.<br />- Attack rolls against the creature have advantage, and the creature's attack rolls have disadvantage.<br />- The creature has disadvantage on Dexterity saving throws."
673673
},
674+
"RingOfResistance": {
675+
"name": "Ring of Resistance",
676+
"description": "Choose between acid, cold, fire, force, lightning, necrotic, poison, psychic, radiant, or thunder resistance"
677+
},
674678
"RingOfAcidResistance": {
675679
"name": "Ring of Acid Resistance",
676680
"description": "Adds acid resistance"
677681
},
682+
"RingOfColdResistance": {
683+
"name": "Ring of Cold Resistance",
684+
"description": "Adds cold resistance"
685+
},
686+
"RingOfFireResistance": {
687+
"name": "Ring of Fire Resistance",
688+
"description": "Adds fire resistance"
689+
},
690+
"RingOfForceResistance": {
691+
"name": "Ring of Force Resistance",
692+
"description": "Adds force resistance"
693+
},
694+
"RingOfLightningResistance": {
695+
"name": "Ring of Lightning Resistance",
696+
"description": "Adds lightning resistance"
697+
},
698+
"RingOfNecroticResistance": {
699+
"name": "Ring of Necrotic Resistance",
700+
"description": "Adds necrotic resistance"
701+
},
702+
"RingOfPoisonResistance": {
703+
"name": "Ring of Poison Resistance",
704+
"description": "Adds poison resistance"
705+
},
706+
"RingOfPsychicResistance": {
707+
"name": "Ring of Psychic Resistance",
708+
"description": "Adds psychic resistance"
709+
},
710+
"RingOfRadiantResistance": {
711+
"name": "Ring of Radiant Resistance",
712+
"description": "Adds radiant resistance"
713+
},
714+
"RingOfThunderResistance": {
715+
"name": "Ring of Thunder Resistance",
716+
"description": "Adds thunder resistance"
717+
},
678718
"RingOfFreeAction": {
679719
"name": "Ring of Free Action",
680720
"description": "Adds immunity to paralyzed and restrained"

0 commit comments

Comments
 (0)