Skip to content

Commit

Permalink
Neotheology Taint (#8064)
Browse files Browse the repository at this point in the history
* Groundwork for NT taint

* bugfix

* Bugfix 2

* Safety check

* update
  • Loading branch information
Humonitarian authored Oct 2, 2024
1 parent 84129ba commit 20c694e
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 8 deletions.
1 change: 1 addition & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@

#define SPECIES_HUMAN "Human"
#define SPECIES_SLIME "Slime"
#define SPECIES_TAINTED "Tainted"
#define SPECIES_MONKEY "Monkey"
#define SPECIES_GOLEM "Golem"
#define SPECIES_SKELETON "Skeleton"
Expand Down
3 changes: 3 additions & 0 deletions code/modules/core_implant/core_implant.dm
Original file line number Diff line number Diff line change
Expand Up @@ -219,3 +219,6 @@

/obj/item/implant/core_implant/proc/get_rituals()
return known_rituals

/obj/item/implant/core_implant/proc/taint()
return
26 changes: 20 additions & 6 deletions code/modules/core_implant/cruciform/cruciform.dm
Original file line number Diff line number Diff line change
Expand Up @@ -91,23 +91,35 @@ var/list/lost_cruciforms = list()
s.set_up(3, 1, src)
s.start()

/obj/item/implant/core_implant/cruciform/taint(mob/living/target)
var/mob/living/carbon/human/H = target
if(istype(H, /mob/living/carbon/human/dummy/mannequin))
var/datum/mutation/U = new MUTATION_GODBLOOD
U.imprint(H)
else
if(H.species.name != SPECIES_TAINTED)
H.set_species(SPECIES_TAINTED)

/obj/item/implant/core_implant/cruciform/activate()
var/observation_points = 200
if(!wearer || active)
return
if(get_active_mutation(wearer, MUTATION_GODBLOOD))
var/delayed_gib = FALSE
if(get_active_mutation(wearer, MUTATION_GODBLOOD) && !istype(wearer, /mob/living/carbon/human/dummy/mannequin))
spawn(2 MINUTES)
for(var/mob/living/carbon/human/H in (disciples - wearer))
to_chat(H, SPAN_WARNING("A distant scream pierced your mind. You feel that a vile mutant sneaked among the faithful."))
playsound(wearer.loc, 'sound/hallucinations/veryfar_noise.ogg', 55, 1)
else if(wearer.get_species() != SPECIES_HUMAN || is_carrion(wearer))
else if(wearer.get_species() != SPECIES_TAINTED || is_carrion(wearer))
if(wearer.get_species() == SPECIES_MONKEY)
observation_points /= 20
playsound(wearer.loc, 'sound/hallucinations/wail.ogg', 55, 1)
wearer.gib()
if(eotp) // le mutants reward
eotp.addObservation(observation_points)
return
if(is_carrion(wearer))
wearer.gib()
if(eotp) // le mutants reward
eotp.addObservation(observation_points)
return
delayed_gib = TRUE
..()
add_module(new CRUCIFORM_COMMON)
update_data()
Expand All @@ -116,6 +128,8 @@ var/list/lost_cruciforms = list()
var/datum/core_module/cruciform/cloning/M = get_module(CRUCIFORM_CLONING)
if(M)
M.write_wearer(wearer) //writes all needed data to cloning module
if(delayed_gib) // Allows cloning
wearer.gib()
if(eotp)
eotp.addObservation(observation_points*0.25)
return TRUE
Expand Down
2 changes: 1 addition & 1 deletion code/modules/core_implant/cruciform/machinery/cloning.dm
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@
occupant.dna_trace = R.dna_trace
occupant.dormant_mutations = R.dormant_mutations
occupant.active_mutations = R.active_mutations
occupant.set_species()
occupant.set_species(SPECIES_TAINTED)
occupant.real_name = R.real_name
occupant.b_type = R.b_type
occupant.age = R.age
Expand Down
3 changes: 3 additions & 0 deletions code/modules/mob/living/carbon/human/human.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1064,6 +1064,7 @@ var/list/rank_prefix = list(\
var/datum/category_item/setup_option/core_implant/I = Pref.get_option("Core implant")
if(I.implant_type && (!mind || mind.assigned_role != "Robot"))
var/obj/item/implant/core_implant/C = new I.implant_type
C.taint(src)
C.install(src)
C.activate()
if(mind)
Expand Down Expand Up @@ -1096,6 +1097,7 @@ var/list/rank_prefix = list(\
var/datum/category_item/setup_option/core_implant/I = client.prefs.get_option("Core implant")
if(I.implant_type)
var/obj/item/implant/core_implant/C = new I.implant_type
C.taint(src)
C.install(src)
C.activate()
C.install_default_modules_by_job(mind.assigned_job)
Expand All @@ -1113,6 +1115,7 @@ var/list/rank_prefix = list(\
/mob/living/carbon/human/proc/post_prefinit()
var/obj/item/implant/core_implant/C = locate() in src
if(C)
C.taint(src)
C.install(src)
C.activate()
C.install_default_modules_by_job(mind.assigned_job)
Expand Down
8 changes: 8 additions & 0 deletions code/modules/mob/living/carbon/human/species/station/slime.dm
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,11 @@
var/datum/organ_description/OD = species.has_limbs[missing_limb_tag]
OD.create_organ(src)
to_chat(user, "You regenerate your [OD.name]")

/datum/species/slime/tainted
name = SPECIES_TAINTED
name_plural = "tainteds"
blood_color = "#deff05"
flesh_color = "#babd19"
icobase = 'icons/mob/human_races/r_tainted.dmi'
deform = 'icons/mob/human_races/r_tainted.dmi'
2 changes: 1 addition & 1 deletion code/modules/mob/living/carbon/slime/life.dm
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@

if(ishuman(L)) //Ignore slime(wo)men
var/mob/living/carbon/human/H = L
if(H.species.name == SPECIES_SLIME)
if(H.species.name == SPECIES_SLIME || H.species.name == SPECIES_TAINTED)
continue

if(!L.canmove) // Only one slime can latch on at a time.
Expand Down
Binary file added icons/mob/human_races/r_tainted.dmi
Binary file not shown.

0 comments on commit 20c694e

Please sign in to comment.