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 <john.wildkins@gmail.com>
This commit is contained in:
AlaunusLux
2026-02-27 00:38:07 +00:00
committed by GitHub
co-authored by JohnWildkins
parent 538fd914bb
commit e31b9729aa
10 changed files with 136 additions and 2 deletions
@@ -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."
@@ -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 "<br><b>Changeling ID:</b> [changeling.changelingID].<br><b>Genomes Absorbed:</b> [changeling.absorbedcount]"
@@ -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."))
@@ -3,6 +3,7 @@
config_tag = "changeling"
required_players = 10
required_enemies = 1
votable = 0
antag_scaling_coeff = 8
antag_tags = list(MODE_CHANGELING)
+1 -1
View File
@@ -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)
+1
View File
@@ -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()
+1 -1
View File
@@ -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()
+1
View File
@@ -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
@@ -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."))
@@ -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."