Files
Bubberstation/code/datums/components/fantasy/prefixes.dm
SkyratBot 72b1a979ff [MIRROR] Improves the RPG loot wizard event. [MDB IGNORE] (#22800)
* Improves the RPG loot wizard event. (#77218)

## About The Pull Request
As the title says. Adds a bunch more stat changes to various different
items and a somewhat simple way of modifying them whilst minimizing
side-effects as much as possible.
Added a new negative curse of polymorph suffix that can randomly
polymorph you once you pick up the item.
Curse of hunger items won't start on items that are not on a turf.
Curse of polymorph will only activate when equipped.

Bodyparts, two-handed melees, bags, guns and grenades, to name a few,
have a bunch of type-specific stat changes depending on their quality.

Some items won't gain fantasy suffixes during the RPG loot event, like
stacks, chairs and paper, to make gamifying the stats a bit harder.
I'm sure there'll still be other ways to game the event, but it's not
that big of a deal since these are the easiest ways to game it.
High level items also have a cool unusual effect aura

## Why It's Good For The Game
Makes the RPG item event cooler. Right now, it's a bit lame since
everything only gains force value and wound bonus on attack. This makes
the statistic increases more type-based and make it interesting to use

It's okay for some items to be powerful since this is a wizard event and
a very impactful one too. By making the curse of hunger items not spawn
on people, it'll also make it a less painful event too.

## Changelog
🆑
add: Expanded the RPG loot wizard event by giving various different
items their own statistic boost.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>

* Improves the RPG loot wizard event.

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
2023-07-31 20:02:03 -04:00

164 lines
5.1 KiB
Plaintext

/datum/fantasy_affix/cosmetic_prefixes
name = "purely cosmetic prefix"
placement = AFFIX_PREFIX
alignment = AFFIX_GOOD | AFFIX_EVIL
var/list/goodPrefixes
var/list/badPrefixes
/datum/fantasy_affix/cosmetic_prefixes/New()
goodPrefixes = list(
"greater",
"major",
"blessed",
"superior",
"empowered",
"honed",
"true",
"glorious",
"robust",
)
badPrefixes = list(
"lesser",
"minor",
"blighted",
"inferior",
"enfeebled",
"rusted",
"unsteady",
"tragic",
"gimped",
"cursed",
)
weight = (length(goodPrefixes) + length(badPrefixes)) * 10
/datum/fantasy_affix/cosmetic_prefixes/apply(datum/component/fantasy/comp, newName)
if(comp.quality > 0 || (comp.quality == 0 && prob(50)))
return "[pick(goodPrefixes)] [newName]"
else
return "[pick(badPrefixes)] [newName]"
/datum/fantasy_affix/tactical
name = "tactical"
placement = AFFIX_PREFIX
alignment = AFFIX_GOOD
weight = 1 // Very powerful, no one should have such power
/datum/fantasy_affix/tactical/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
comp.appliedComponents += master.AddComponent(/datum/component/tactical)
return "tactical [newName]"
/datum/fantasy_affix/pyromantic
name = "pyromantic"
placement = AFFIX_PREFIX
alignment = AFFIX_GOOD
/datum/fantasy_affix/pyromantic/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
comp.appliedComponents += master.AddComponent(/datum/component/igniter, clamp(comp.quality, 1, 10))
return "pyromantic [newName]"
/datum/fantasy_affix/vampiric
name = "vampiric"
placement = AFFIX_PREFIX
alignment = AFFIX_GOOD
weight = 5
/datum/fantasy_affix/vampiric/validate(obj/item/attached)
return attached.force //don't apply to things that just bap people
/datum/fantasy_affix/vampiric/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
master.AddElement(/datum/element/lifesteal, comp.quality)
return "vampiric [newName]"
/datum/fantasy_affix/vampiric/remove(datum/component/fantasy/comp)
var/obj/item/master = comp.parent
master.RemoveElement(/datum/element/lifesteal, comp.quality)
/datum/fantasy_affix/beautiful
name = "beautiful"
placement = AFFIX_PREFIX
alignment = AFFIX_GOOD
/datum/fantasy_affix/beautiful/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
master.AddElement(/datum/element/beauty, max(comp.quality, 1) * 250)
return "[pick("aesthetic", "beautiful", "gorgeous", "pretty")] [newName]"
/datum/fantasy_affix/beautiful/remove(datum/component/fantasy/comp)
var/obj/item/master = comp.parent
master.RemoveElement(/datum/element/beauty, max(comp.quality, 1) * 250)
/datum/fantasy_affix/ugly
name = "ugly"
placement = AFFIX_PREFIX
alignment = AFFIX_EVIL
/datum/fantasy_affix/ugly/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
master.AddElement(/datum/element/beauty, min(comp.quality, -1) * 250)
return "[pick("fugly", "ugly", "grotesque", "hideous")] [newName]"
/datum/fantasy_affix/ugly/remove(datum/component/fantasy/comp)
var/obj/item/master = comp.parent
master.RemoveElement(/datum/element/beauty, min(comp.quality, -1) * 250)
/datum/fantasy_affix/venomous
name = "<poisonname>-laced (picked from small pool of toxins)"
placement = AFFIX_PREFIX
alignment = AFFIX_GOOD
/datum/fantasy_affix/venomous/validate(obj/item/attached)
return attached.force //don't apply to things that just bap people
/datum/fantasy_affix/venomous/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
var/picked_poison = pick(list(
/datum/reagent/toxin/plantbgone,
/datum/reagent/toxin/mutetoxin,
/datum/reagent/toxin/amanitin,
/datum/reagent/toxin/lipolicide,
/datum/reagent/toxin/spewium,
/datum/reagent/toxin/heparin,
/datum/reagent/toxin/rotatium,
/datum/reagent/toxin/histamine
))
var/list/names = list(
/datum/reagent/toxin/plantbgone = "plantbane",
/datum/reagent/toxin/mutetoxin = "mimemind",
/datum/reagent/toxin/amanitin = "dormant death",
/datum/reagent/toxin/lipolicide = "famineblood",
/datum/reagent/toxin/spewium = "gulchergut",
/datum/reagent/toxin/heparin = "jabberwound",
/datum/reagent/toxin/rotatium = "spindown",
/datum/reagent/toxin/histamine = "creeping malaise"
)
var/poisonname = names[picked_poison]
master.AddElement(/datum/element/venomous, picked_poison, comp.quality+1)
//seriously don't @ me about the correct use of venom vs poison. shut up.
return "[poisonname]-[pick("poisoned", "envenomed", "laced")] [newName]"
/datum/fantasy_affix/venomous/remove(datum/component/fantasy/comp)
var/obj/item/master = comp.parent
master.RemoveElement(/datum/element/venomous)
/datum/fantasy_affix/soul_stealer
name = "soul-stealing"
placement = AFFIX_PREFIX
alignment = AFFIX_GOOD
/datum/fantasy_affix/soul_stealer/validate(obj/item/attached)
if(attached.force)
return FALSE
if(attached.atom_storage)
return FALSE
return TRUE
/datum/fantasy_affix/soul_stealer/apply(datum/component/fantasy/comp, newName)
var/obj/item/master = comp.parent
comp.appliedComponents += master.AddComponent(/datum/component/soul_stealer)
return "soul-[pick("stealing", "hungering", "devouring")] [newName]"