From e31b9729aaf213d53b0489cf7d22473e22ffd87b Mon Sep 17 00:00:00 2001 From: AlaunusLux <89751433+AlaunusLux@users.noreply.github.com> Date: Thu, 26 Feb 2026 18:38:07 -0600 Subject: [PATCH] Adds vampiric and changeling jumpstarters to the traitor uplink, removes them from the voting list (#21179) This idea is from [UltraNumeron over on the forums.](https://forums.aurorastation.org/topic/22577-merging-lings-and-vamps-with-tator-tots/#comment-181862) Thanks/blame go to them :D Everything subject to change, just wanted to get something potentially testable. I imagine a proper rework of this would change much more, but this at least lets us test "ling but with uplink and BC." I also added a global datum for changelings, not sure if there's a better way to turn someone into a ling already. I think the probabilities for modes are done outside of version control, so I could not remove the modes from the pool entirely. It may be that we want to allow voting of these modes anyway, to allow for strictly vamp/feeding/etc rounds, though the Horizon is more likely to teleport into Earth orbit IRL. I just used the same icon as the psionic jumpstarter because I didn't want there to be anything residual left behind, like an empty implanter ~and this was easier~. --------- Co-authored-by: JohnWildkins --- .../highly visible and dangerous weapons.dm | 12 ++++ .../station/changeling/changeling.dm | 6 ++ .../changeling/helpers/_framework.dm | 27 +++++++++ .../changeling/helpers/changeling.dm | 1 + code/game/gamemodes/mixed/feeding.dm | 2 +- code/game/gamemodes/mixed/traitorling.dm | 1 + code/game/gamemodes/mixed/veilparty.dm | 2 +- code/game/gamemodes/vampire/vampire.dm | 1 + .../game/gamemodes/vampire/vampire_helpers.dm | 28 +++++++++ ...x-merge-vamp-and-ling-with-autotraitor.yml | 58 +++++++++++++++++++ 10 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/AlaunusLux-merge-vamp-and-ling-with-autotraitor.yml diff --git a/code/datums/uplink/highly visible and dangerous weapons.dm b/code/datums/uplink/highly visible and dangerous weapons.dm index 5703ab8eeeb..50c8b9ce506 100644 --- a/code/datums/uplink/highly visible and dangerous weapons.dm +++ b/code/datums/uplink/highly visible and dangerous weapons.dm @@ -275,6 +275,18 @@ telecrystal_cost = 19 path = /obj/item/psionic_jumpstarter +/datum/uplink_item/item/visible_weapons/vampiric_jumpstarter + name = "Vampiric Jumpstarter" + telecrystal_cost = 20 + path = /obj/item/vampiric_jumpstarter + antag_roles = list(MODE_TRAITOR) + +/datum/uplink_item/item/visible_weapons/changeling_jumpstarter + name = "Changeling Jumpstarter" + telecrystal_cost = 20 + path = /obj/item/changeling_jumpstarter + antag_roles = list(MODE_TRAITOR) + /datum/uplink_item/item/visible_weapons/flamethrower name = "Flamethrower" desc = "A flamethrower, with a full canister of fuel installed. Handle with caution." diff --git a/code/game/antagonist/station/changeling/changeling.dm b/code/game/antagonist/station/changeling/changeling.dm index 0691a0ce1bc..94867a6e5da 100644 --- a/code/game/antagonist/station/changeling/changeling.dm +++ b/code/game/antagonist/station/changeling/changeling.dm @@ -1,3 +1,5 @@ +GLOBAL_DATUM(changelings, /datum/antagonist/changeling) + /datum/antagonist/changeling id = MODE_CHANGELING role_text = "Changeling" @@ -25,6 +27,10 @@ faction = "Changeling" +/datum/antagonist/changeling/New() + ..() + GLOB.changelings = src + /datum/antagonist/changeling/get_special_objective_text(var/datum/mind/player) var/datum/changeling/changeling = player.antag_datums[MODE_CHANGELING] return "
Changeling ID: [changeling.changelingID].
Genomes Absorbed: [changeling.absorbedcount]" diff --git a/code/game/gamemodes/changeling/helpers/_framework.dm b/code/game/gamemodes/changeling/helpers/_framework.dm index 9ea9450534e..87cd8a3052e 100644 --- a/code/game/gamemodes/changeling/helpers/_framework.dm +++ b/code/game/gamemodes/changeling/helpers/_framework.dm @@ -258,3 +258,30 @@ GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","E to_chat(src, SPAN_WARNING("We cannot find a path to sting \the [M] by!")) return FALSE return TRUE + +/obj/item/changeling_jumpstarter + name = "changeling jumpstarter" + desc = "Use this to morph into a changeling. This won't work on synthetics! This item is definitely not canon." + icon = 'icons/obj/clothing/hats.dmi' + icon_state = "amp" + contained_sprite = FALSE + +/obj/item/changeling_jumpstarter/attack_self(mob/user) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(isipc(H)) //should this check for diona? + to_chat(H, SPAN_WARNING("You don't have any changeling potential.")) + return + + var/datum/changeling/changeling = H.mind.antag_datums[MODE_CHANGELING] + if(changeling) + to_chat(H, SPAN_WARNING("You've already awakened your changeling potential!")) + return + + if(GLOB.changelings.add_antagonist(H.mind)) + to_chat(H, SPAN_NOTICE("You've awakened your changeling potential!")) + qdel(src) + else + to_chat(H, SPAN_WARNING("Something prevented you from becoming a changeling.")) diff --git a/code/game/gamemodes/changeling/helpers/changeling.dm b/code/game/gamemodes/changeling/helpers/changeling.dm index 7dc50114a88..90a77700cf0 100644 --- a/code/game/gamemodes/changeling/helpers/changeling.dm +++ b/code/game/gamemodes/changeling/helpers/changeling.dm @@ -3,6 +3,7 @@ config_tag = "changeling" required_players = 10 required_enemies = 1 + votable = 0 antag_scaling_coeff = 8 antag_tags = list(MODE_CHANGELING) diff --git a/code/game/gamemodes/mixed/feeding.dm b/code/game/gamemodes/mixed/feeding.dm index 98cd9bb161b..aeb82b1f6fd 100644 --- a/code/game/gamemodes/mixed/feeding.dm +++ b/code/game/gamemodes/mixed/feeding.dm @@ -6,5 +6,5 @@ required_players = 20 required_enemies = 2 require_all_templates = 1 - votable = 1 + votable = 0 antag_tags = list(MODE_VAMPIRE, MODE_CHANGELING) diff --git a/code/game/gamemodes/mixed/traitorling.dm b/code/game/gamemodes/mixed/traitorling.dm index 2040f273734..02d636e4790 100644 --- a/code/game/gamemodes/mixed/traitorling.dm +++ b/code/game/gamemodes/mixed/traitorling.dm @@ -5,6 +5,7 @@ required_players = 10 required_enemies = 2 require_all_templates = 1 + votable = 0 antag_tags = list(MODE_CHANGELING, MODE_TRAITOR) /datum/game_mode/traitorling/pre_setup() diff --git a/code/game/gamemodes/mixed/veilparty.dm b/code/game/gamemodes/mixed/veilparty.dm index 0f8186ad5a8..ed16142ab93 100644 --- a/code/game/gamemodes/mixed/veilparty.dm +++ b/code/game/gamemodes/mixed/veilparty.dm @@ -5,7 +5,7 @@ required_players = 15 required_enemies = 5 require_all_templates = 1 - votable = 1 + votable = 0 antag_tags = list(MODE_VAMPIRE, MODE_CULTIST) /datum/game_mode/veilparty/pre_setup() diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 4dc2ce021c8..fb682b3d9ae 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -4,6 +4,7 @@ And now, you are cursed even more than the ground, which opened its mouth to take your brother's blood from your hand. \ When you till the soil, it will not continue to give its strength to you; you shall be a wanderer and an exile in the land.\"" config_tag = "vampire" + votable = 0 required_players = 2 required_enemies = 1 antag_scaling_coeff = 8 diff --git a/code/game/gamemodes/vampire/vampire_helpers.dm b/code/game/gamemodes/vampire/vampire_helpers.dm index 936314f9531..dc5102ffba7 100644 --- a/code/game/gamemodes/vampire/vampire_helpers.dm +++ b/code/game/gamemodes/vampire/vampire_helpers.dm @@ -298,3 +298,31 @@ if (vamp_flags && !(vampire.status & vamp_flags)) return FALSE return TRUE + +/obj/item/vampiric_jumpstarter + name = "vampiric jumpstarter" + desc = "Use this to morph into a vampire. This won't work on synthetics! This item is definitely not canon." + icon = 'icons/obj/clothing/hats.dmi' + icon_state = "amp" + contained_sprite = FALSE + +/obj/item/vampiric_jumpstarter/attack_self(mob/user) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(isipc(H)) //should this check for diona? + to_chat(H, SPAN_WARNING("You don't have any vampiric potential.")) + return + + var/datum/vampire/vampire = H.mind.antag_datums[MODE_VAMPIRE] + if(vampire) + to_chat(H, SPAN_WARNING("You've already awakened your vampiric potential!")) + return + + //H.make_vampire() + if(GLOB.vamp.add_antagonist(H.mind)) + to_chat(H, SPAN_NOTICE("You've awakened your vampiric potential!")) + qdel(src) + else + to_chat(H, SPAN_WARNING("Something prevented you from becoming a vampire.")) diff --git a/html/changelogs/AlaunusLux-merge-vamp-and-ling-with-autotraitor.yml b/html/changelogs/AlaunusLux-merge-vamp-and-ling-with-autotraitor.yml new file mode 100644 index 00000000000..f923bcb91f5 --- /dev/null +++ b/html/changelogs/AlaunusLux-merge-vamp-and-ling-with-autotraitor.yml @@ -0,0 +1,58 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: AlaunusLux + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - experiment: "Adds vampiric and changeling jumpstarters to the uplink and prohibits voting for those modes."