diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index d793bddb5d5..07741d08633 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -319,8 +319,8 @@ datum/mind
text = "[text]: "
if(src in ticker.mode.shadows)
text += "SHADOWLING|thrall|human"
- else if(src in ticker.mode.thralls)
- text += "shadowling|THRALL|human"
+ else if(src in ticker.mode.shadowling_thralls)
+ text += "Shadowling|THRALL|human"
else
text += "shadowling|thrall|HUMAN"
@@ -965,18 +965,18 @@ datum/mind
else if(href_list["shadowling"])
switch(href_list["shadowling"])
if("clear")
- src.spell_list = null
+ current.spell_list = null
if(src in ticker.mode.shadows)
ticker.mode.shadows -= src
special_role = null
current << "Your powers have been quenched! You are no longer a shadowling!"
- src.spell_list = null
+ current.spell_list = null
message_admins("[key_name_admin(usr)] has de-shadowling'ed [current].")
log_admin("[key_name(usr)] has de-shadowling'ed [current].")
current.verbs -= /mob/living/carbon/human/proc/shadowling_hatch
current.verbs -= /mob/living/carbon/human/proc/shadowling_ascendance
- else if(src in ticker.mode.thralls)
- ticker.mode.thralls -= src
+ else if(src in ticker.mode.shadowling_thralls)
+ ticker.mode.shadowling_thralls -= src
special_role = null
current << "You have been brainwashed! You are no longer a thrall!"
message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
@@ -990,8 +990,8 @@ datum/mind
current << "You notice a brightening around you. No, it isn't that. The shadows grow, darken, swirl. The darkness has a new welcome for you, and you realize with a \
start that you can't be human. No, you are a shadowling, a harbringer of the shadows! Your alien abilities have been unlocked from within, and you may both commune with your allies and use \
a chrysalis to reveal your true form. You are to ascend at all costs."
- src.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind
- src.spell_list += new /obj/effect/proc_holder/spell/targeted/enthrall
+ current.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
+ current.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/enthrall
current.verbs += /mob/living/carbon/human/proc/shadowling_hatch
if("thrall")
if(!ishuman(current))
@@ -1004,11 +1004,11 @@ datum/mind
current << "You may use the Hivemind Commune ability to communicate with your fellow enlightened ones."
message_admins("[key_name_admin(usr)] has thrall'ed [current].")
log_admin("[key_name(usr)] has thrall'ed [current].")
- src.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind
+ current.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
else if (href_list["monkey"])
var/mob/living/L = current
- if (L.monkeyizing)
+ if (L.notransform)
return
switch(href_list["monkey"])
if("healthy")
diff --git a/code/game/dna/dna_misc.dm b/code/game/dna/dna_misc.dm
index bda19278266..bc2098d77a6 100644
--- a/code/game/dna/dna_misc.dm
+++ b/code/game/dna/dna_misc.dm
@@ -402,7 +402,7 @@
if (isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && istype(M, /mob/living/carbon/human))
// human > monkey
var/mob/living/carbon/human/H = M
- H.monkeyizing = 1
+ H.notransform = 1
var/list/implants = list() //Try to preserve implants.
for(var/obj/item/weapon/implant/W in H)
implants += W
@@ -413,7 +413,7 @@
if (W==H.w_uniform) // will be teared
continue
H.unEquip(W)
- M.monkeyizing = 1
+ M.notransform = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
@@ -478,7 +478,7 @@
if (!isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && !istype(M, /mob/living/carbon/human))
// monkey > human,
var/mob/living/carbon/monkey/Mo = M
- Mo.monkeyizing = 1
+ Mo.notransform = 1
var/list/implants = list() //Still preserving implants
for(var/obj/item/weapon/implant/W in Mo)
implants += W
@@ -486,7 +486,7 @@
if(!connected)
for(var/obj/item/W in (Mo.contents-implants))
Mo.unEquip(W)
- M.monkeyizing = 1
+ M.notransform = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm
index 03ca9880c2c..c10178b285a 100644
--- a/code/game/dna/genes/monkey.dm
+++ b/code/game/dna/genes/monkey.dm
@@ -12,7 +12,7 @@
// testing("Cannot monkey-ify [M], type is [M.type].")
return
var/mob/living/carbon/human/H = M
- H.monkeyizing = 1
+ H.notransform = 1
var/list/implants = list() //Try to preserve implants.
for(var/obj/item/weapon/implant/W in H)
implants += W
@@ -23,7 +23,7 @@
if (W==H.w_uniform) // will be teared
continue
H.unEquip(W)
- M.monkeyizing = 1
+ M.notransform = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
@@ -86,7 +86,7 @@
testing("Cannot humanize [M], type is [M.type].")
return
var/mob/living/carbon/monkey/Mo = M
- Mo.monkeyizing = 1
+ Mo.notransform = 1
var/list/implants = list() //Still preserving implants
for(var/obj/item/weapon/implant/W in Mo)
implants += W
@@ -94,7 +94,7 @@
if(!connected)
for(var/obj/item/W in (Mo.contents-implants))
Mo.unEquip(W)
- M.monkeyizing = 1
+ M.notransform = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm
index a769ee47bd0..09751412a30 100644
--- a/code/game/gamemodes/changeling/powers/lesserform.dm
+++ b/code/game/gamemodes/changeling/powers/lesserform.dm
@@ -23,7 +23,7 @@
for(var/obj/item/weapon/implant/W in C)
implants += W
- C.monkeyizing = 1
+ C.notransform = 1
C.canmove = 0
C.icon = null
C.overlays.Cut()
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index c14ad379d68..ccdfed9baec 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -41,7 +41,7 @@ Made by Xhuis
/datum/game_mode
var/list/datum/mind/shadows = list()
- var/list/datum/mind/thralls = list()
+ var/list/datum/mind/shadowling_thralls = list()
var/list/shadow_objectives = list()
var/required_thralls = 15 //How many thralls are needed (hardcoded for now)
var/shadowling_ascended = 0 //If at least one shadowling has ascended
@@ -49,11 +49,11 @@ Made by Xhuis
/proc/is_thrall(var/mob/living/M)
- return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.thralls)
+ return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.shadowling_thralls)
/proc/is_shadow_or_thrall(var/mob/living/M)
- return istype(M) && M.mind && ticker && ticker.mode && ((M.mind in ticker.mode.thralls) || (M.mind in ticker.mode.shadows))
+ return istype(M) && M.mind && ticker && ticker.mode && ((M.mind in ticker.mode.shadowling_thralls) || (M.mind in ticker.mode.shadows))
/proc/is_shadow(var/mob/living/M)
@@ -63,7 +63,6 @@ Made by Xhuis
/datum/game_mode/shadowling
name = "shadowling"
config_tag = "shadowling"
- antag_flag = BE_SHADOWLING
required_players = 30
required_enemies = 2
recommended_enemies = 2
@@ -78,20 +77,22 @@ Made by Xhuis
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
- if(config.protect_assistant_from_antagonist)
- restricted_jobs += "Assistant"
+ var/list/datum/mind/possible_shadowlings = get_players_for_role(BE_SHADOWLING)
- for(var/datum/mind/player in antag_candidates)
+ if(!possible_shadowlings.len)
+ return 0
+
+ for(var/datum/mind/player in possible_shadowlings)
for(var/job in restricted_jobs)
if(player.assigned_role == job)
- antag_candidates -= player
+ possible_shadowlings -= player
var/shadowlings = 2 //How many shadowlings there are; hardcoded to 2
while(shadowlings)
- var/datum/mind/shadow = pick(antag_candidates)
+ var/datum/mind/shadow = pick(possible_shadowlings)
shadows += shadow
- antag_candidates -= shadow
+ possible_shadowlings -= shadow
modePlayer += shadow
shadow.special_role = "Shadowling"
shadowlings--
@@ -130,17 +131,17 @@ Made by Xhuis
/datum/game_mode/proc/finalize_shadowling(var/datum/mind/shadow_mind)
var/mob/living/carbon/human/S = shadow_mind.current
shadow_mind.current.verbs += /mob/living/carbon/human/proc/shadowling_hatch
- shadow_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/enthrall
- shadow_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind
+ S.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/enthrall
+ S.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
if(shadow_mind.assigned_role == "Clown")
S << "Your alien nature has allowed you to overcome your clownishness."
- S.dna.remove_mutation(CLOWNMUT)
+ S.mutations.Remove(CLUMSY)
/datum/game_mode/proc/add_thrall(datum/mind/new_thrall_mind)
if (!istype(new_thrall_mind))
return 0
- if(!(new_thrall_mind in thralls))
- thralls += new_thrall_mind
+ if(!(new_thrall_mind in shadowling_thralls))
+ shadowling_thralls += new_thrall_mind
new_thrall_mind.current.attack_log += "\[[time_stamp()]\] Became a thrall"
return 1
@@ -174,11 +175,11 @@ Made by Xhuis
/datum/game_mode/shadowling/declare_completion()
- if(check_shadow_victory() && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE) //Doesn't end instantly - this is hacky and I don't know of a better way ~X
+ if(check_shadow_victory() && emergency_shuttle.returned()) //Doesn't end instantly - this is hacky and I don't know of a better way ~X
world << "The shadowlings have ascended and taken over the station!"
else if(shadowling_dead && !check_shadow_victory()) //If the shadowlings have ascended, they can not lose the round
world << "The shadowlings have been killed by the crew!"
- else if(!check_shadow_victory() && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE)
+ else if(!check_shadow_victory() && emergency_shuttle.returned())
world << "The crew has escaped the station before the shadowlings could ascend!"
..()
return 1
@@ -189,13 +190,32 @@ Made by Xhuis
if(shadows.len)
text += "
The shadowlings were:"
for(var/datum/mind/shadow in shadows)
- text += printplayer(shadow)
- if(thralls.len)
+ text += "
[shadow.key] was [shadow.name] ("
+ if(shadow.current)
+ if(shadow.current.stat == DEAD)
+ text += "died"
+ else
+ text += "survived"
+ if(shadow.current.real_name != shadow.name)
+ text += " as [shadow.current.real_name]"
+ else
+ text += "body destroyed"
+ text += ")"
+ if(shadowling_thralls.len)
text += "
The thralls were:"
- for(var/datum/mind/thrall in thralls)
- text += printplayer(thrall)
+ for(var/datum/mind/thrall in shadowling_thralls)
+ text += "
[thrall.key] was [thrall.name] ("
+ if(thrall.current)
+ if(thrall.current.stat == DEAD)
+ text += "died"
+ else
+ text += "survived"
+ if(thrall.current.real_name != thrall.name)
+ text += " as [thrall.current.real_name]"
+ else
+ text += "body destroyed"
else
- world << "Round-end code broke! Please report this and its circumstances on GitHub at https://github.com/tgstation/-tg-station/issues"
+ world << "Round-end code broke! Please report this and its circumstances on GitHub at https://github.com/ParadiseSS13/Paradise/issues"
text += "
"
world << text
@@ -205,31 +225,12 @@ Made by Xhuis
*/
-/datum/species/shadow/ling
+/datum/species/shadowling
//Normal shadowpeople but with enhanced effects
name = "Shadowling"
- id = "shadowling"
- say_mod = "chitters"
- specflags = list(NOBREATH,NOBLOOD,RADIMMUNE,NOGUNS) //Can't use guns due to muzzle flash
- burnmod = 2 //2x burn damage lel
- heatmod = 2
-
-/datum/species/shadow/ling/spec_life(mob/living/carbon/human/H)
- //H.shadowling_status = 1 //If they are affected more strongly by flashes and stuff
- var/light_amount = 0
- H.nutrition = NUTRITION_LEVEL_WELL_FED //i aint never get hongry
- if(isturf(H.loc)) //Copypasta
- var/turf/T = H.loc
- var/area/A = T.loc
- if(A)
- if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount
- else light_amount = 10
- if(light_amount > 2) //Rapid death while in the light, countered by...
- H.take_overall_damage(0,6)
- H << "The light burns you!"
- H << 'sound/weapons/sear.ogg'
- else if (light_amount < 2) //...extreme benefits while in the dark
- H.heal_overall_damage(5,3)
- H.adjustToxLoss(-3)
- H.SetWeakened(0)
- H.SetStunned(0)
+ flags = NO_BREATHE | NO_BLOOD | RAD_IMMUNE | REQUIRE_DARK
+ burn_mod = 2 //2x burn damage
+ //heatmod = 2
+ blood_color = "#000000"
+ flesh_color = "#000000"
+ darksight = 8
diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm
index baf3d70c4b2..7f1311f7cd8 100644
--- a/code/game/gamemodes/shadowling/shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm
@@ -1,11 +1,11 @@
-/obj/effect/proc_holder/spell/targeted/glare
+/obj/effect/proc_holder/spell/wizard/targeted/glare
name = "Glare"
desc = "Stuns and mutes a target for a decent duration."
panel = "Shadowling Abilities"
charge_max = 300
clothes_req = 0
-/obj/effect/proc_holder/spell/targeted/glare/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/glare/cast(list/targets)
for(var/mob/living/carbon/human/target in targets)
if(!ishuman(target))
charge_counter = charge_max
@@ -30,7 +30,7 @@
-/obj/effect/proc_holder/spell/aoe_turf/veil
+/obj/effect/proc_holder/spell/wizard/aoe_turf/veil
name = "Veil"
desc = "Extinguishes all electronic lights in a decent radius."
panel = "Shadowling Abilities"
@@ -38,7 +38,7 @@
clothes_req = 0
range = 5
-/obj/effect/proc_holder/spell/aoe_turf/veil/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/aoe_turf/veil/cast(list/targets)
usr << "You silently disable all nearby lights."
var/list/blacklisted_lights = list(/obj/item/device/flashlight/flare, /obj/item/device/flashlight/slime)
for(var/turf/T in targets)
@@ -59,7 +59,7 @@
-/obj/effect/proc_holder/spell/targeted/shadow_walk
+/obj/effect/proc_holder/spell/wizard/targeted/shadow_walk
name = "Shadow Walk"
desc = "Phases you into the space between worlds for a short time, allowing movement through walls and invisbility."
panel = "Shadowling Abilities"
@@ -68,7 +68,7 @@
range = -1
include_user = 1
-/obj/effect/proc_holder/spell/targeted/shadow_walk/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/shadow_walk/cast(list/targets)
for(var/mob/living/user in targets)
playsound(user.loc, 'sound/effects/bamf.ogg', 50, 1)
user.visible_message("[user] vanishes into thin air!", "You enter the space between worlds as a passageway.")
@@ -77,7 +77,7 @@
user.incorporeal_move = 1
user.alpha = 0
if(user.buckled)
- user.buckled.unbuckle_mob()
+ user.buckled.unbuckle()
sleep(40) //4 seconds
user.visible_message("[user] appears out of nowhere!", "The pressure becomes too much and you vacate the interdimensional darkness.")
user.incorporeal_move = 0
@@ -85,7 +85,7 @@
-/obj/effect/proc_holder/spell/aoe_turf/flashfreeze
+/obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze
name = "Flash Freeze"
desc = "Instantly freezes the blood of nearby people, stunning them and causing burn damage."
panel = "Shadowling Abilities"
@@ -93,7 +93,7 @@
charge_max = 1200
clothes_req = 0
-/obj/effect/proc_holder/spell/aoe_turf/flashfreeze/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze/cast(list/targets)
usr << "You freeze the nearby air."
playsound(usr.loc, 'sound/effects/ghost2.ogg', 50, 1)
@@ -115,7 +115,7 @@
//Enthrall is the single most important spell
-/obj/effect/proc_holder/spell/targeted/enthrall
+/obj/effect/proc_holder/spell/wizard/targeted/enthrall
name = "Enthrall"
desc = "Allows you to enslave a conscious, non-braindead, non-catatonic human to your will. This takes some time to cast."
panel = "Shadowling Abilities"
@@ -124,7 +124,7 @@
range = 1 //Adjacent to user
var/enthralling = 0
-/obj/effect/proc_holder/spell/targeted/enthrall/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/enthrall/cast(list/targets)
for(var/mob/living/carbon/human/target in targets)
if(!in_range(usr, target))
usr << "You need to be closer to enthrall [target]."
@@ -183,12 +183,11 @@
target.adjustOxyLoss(-200) //In case the shadowling was choking them out
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Thrall"
- var/datum/mind/thrall_mind = target.mind
- thrall_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind //Lets thralls hive-chat
+ target.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind //Lets thralls hive-chat
-/obj/effect/proc_holder/spell/targeted/shadowling_hivemind
+/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
name = "Hivemind Commune"
desc = "Allows you to silently communicate with all other shadowlings and thralls."
panel = "Shadowling Abilities"
@@ -197,7 +196,7 @@
range = -1
include_user = 1
-/obj/effect/proc_holder/spell/targeted/shadowling_hivemind/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind/cast(list/targets)
for(var/mob/living/user in targets)
var/text = stripped_input(user, "What do you want to say to fellow thralls and shadowlings?.", "Hive Chat", "")
if(!text)
@@ -208,7 +207,7 @@
-/obj/effect/proc_holder/spell/targeted/collective_mind
+/obj/effect/proc_holder/spell/wizard/targeted/collective_mind
name = "Collective Hivemind"
desc = "Gathers the power of all of your thralls and compares it to what is needed for ascendance. Also gains you new abilities."
panel = "Shadowling Abilities"
@@ -221,7 +220,7 @@
var/drain_thrall_acquired
var/thrall_swap_acquired
-/obj/effect/proc_holder/spell/targeted/collective_mind/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/collective_mind/cast(list/targets)
for(var/mob/living/user in targets)
var/thralls = 0
var/victory_threshold = 15
@@ -242,23 +241,23 @@
blind_smoke_acquired = 1
user << "The power of your thralls has granted you the Blinding Smoke ability. It will create a choking cloud that will blind any non-thralls who enter. \
"
- user.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/blindness_smoke
+ user.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/blindness_smoke
if(thralls >= 5 && !drain_thrall_acquired)
drain_thrall_acquired = 1
user << "The power of your thralls has granted you the Drain Thrall ability. You can now drain nearby thralls to heal yourself."
- user.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/drain_thralls
+ user.spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/drain_thralls
if(thralls >= 7 && !screech_acquired)
screech_acquired = 1
user << "The power of your thralls has granted you the Sonic Screech ability. This ability will shatter nearby windows and deafen enemies."
- user.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech
+ user.spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/unearthly_screech
if(thralls >= 10 && !thrall_swap_acquired)
thrall_swap_acquired = 1
user << "The power of your thralls has granted you the Spatial Relocation ability. This will, allow you to instantly swap places with one of your thralls in \
addition to shattering nearby lights."
- user.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/spatial_relocation
+ user.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/spatial_relocation
if(thralls < victory_threshold)
user << "You do not have the power to ascend. You require [victory_threshold] thralls, but only [thralls] living thralls are present."
@@ -268,7 +267,7 @@
usr << "You may find Ascendance in the Shadowling Evolution tab."
for(M in living_mob_list)
if(is_shadow(M))
- M.mind.spell_list -= /obj/effect/proc_holder/spell/targeted/collective_mind
+ M.mind.current.spell_list -= /obj/effect/proc_holder/spell/wizard/targeted/collective_mind
M.mind.current.verbs -= /mob/living/carbon/human/proc/shadowling_hatch //In case a shadowling hasn't hatched
M.mind.current.verbs += /mob/living/carbon/human/proc/shadowling_ascendance
if(M == usr)
@@ -277,7 +276,7 @@
-/obj/effect/proc_holder/spell/targeted/blindness_smoke
+/obj/effect/proc_holder/spell/wizard/targeted/blindness_smoke
name = "Blindness Smoke"
desc = "Spews a cloud of smoke which will blind enemies."
panel = "Shadowling Abilities"
@@ -286,7 +285,7 @@
range = -1
include_user = 1
-/obj/effect/proc_holder/spell/targeted/blindness_smoke/cast(list/targets) //Extremely hacky
+/obj/effect/proc_holder/spell/wizard/targeted/blindness_smoke/cast(list/targets) //Extremely hacky
for(var/mob/living/user in targets)
user.visible_message("[user] suddenly bends over and coughs out a cloud of black smoke, which begins to spread rapidly!")
user << "You regurgitate a vast cloud of blinding smoke."
@@ -329,7 +328,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
-/obj/effect/proc_holder/spell/aoe_turf/unearthly_screech
+/obj/effect/proc_holder/spell/wizard/aoe_turf/unearthly_screech
name = "Sonic Screech"
desc = "Deafens, stuns, and confuses nearby people. Also shatters windows."
panel = "Shadowling Abilities"
@@ -337,7 +336,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
charge_max = 300
clothes_req = 0
-/obj/effect/proc_holder/spell/aoe_turf/unearthly_screech/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/aoe_turf/unearthly_screech/cast(list/targets)
usr.audible_message("[usr] lets out a horrible scream!")
playsound(usr.loc, 'sound/effects/screech.ogg', 100, 1)
@@ -353,7 +352,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
M << "A spike of pain drives into your head and scrambles your thoughts!"
M.Weaken(2)
M.confused += 10
- M.setEarDamage(M.ear_damage + 3)
+ M.ear_damage += 3
else if(issilicon(target))
var/mob/living/silicon/S = target
S << "ERROR $!(@ ERROR )#^! SENSOR INTERFERENCE DETECTED"
@@ -368,7 +367,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
-/obj/effect/proc_holder/spell/aoe_turf/drain_thralls
+/obj/effect/proc_holder/spell/wizard/aoe_turf/drain_thralls
name = "Drain Thralls"
desc = "Damages nearby thralls, draining their life and healing yourself."
panel = "Shadowling Abilities"
@@ -378,7 +377,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
var/thralls_drained = 0
var/list/nearby_thralls = list()
-/obj/effect/proc_holder/spell/aoe_turf/drain_thralls/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/aoe_turf/drain_thralls/cast(list/targets)
thralls_drained = 0
nearby_thralls = list()
for(var/turf/T in targets)
@@ -400,7 +399,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
-/obj/effect/proc_holder/spell/targeted/spatial_relocation
+/obj/effect/proc_holder/spell/wizard/targeted/spatial_relocation
name = "Spatial Relocation"
desc = "Swaps places with a thrall and breaks nearby lights."
panel = "Shadowling Abilities"
@@ -410,7 +409,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
include_user = 1
var/list/thralls_in_world = list()
-/obj/effect/proc_holder/spell/targeted/spatial_relocation/cast(list/targets, distanceoverride)
+/obj/effect/proc_holder/spell/wizard/targeted/spatial_relocation/cast(list/targets, distanceoverride)
for(var/mob/living/carbon/human/M in world)
if(is_thrall(M))
thralls_in_world += M
@@ -433,7 +432,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
// ASCENDANT ABILITIES BEYOND THIS POINT //
-/obj/effect/proc_holder/spell/targeted/annihilate
+/obj/effect/proc_holder/spell/wizard/targeted/annihilate
name = "Annihilate"
desc = "Gibs a human after a short time."
panel = "Ascendant"
@@ -441,7 +440,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
charge_max = 300
clothes_req = 0
-/obj/effect/proc_holder/spell/targeted/annihilate/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/annihilate/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
if(SHA.phasing)
usr << "You are not in the same plane of existence. Unphase first."
@@ -465,7 +464,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
-/obj/effect/proc_holder/spell/targeted/hypnosis
+/obj/effect/proc_holder/spell/wizard/targeted/hypnosis
name = "Hypnosis"
desc = "Instantly enthralls a human."
panel = "Ascendant"
@@ -473,7 +472,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
charge_max = 450
clothes_req = 0
-/obj/effect/proc_holder/spell/targeted/hypnosis/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/hypnosis/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
if(SHA.phasing)
charge_counter = charge_max
@@ -506,12 +505,11 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
target << "You can communicate with the other enlightened ones by using the Hivemind Commune ability."
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Thrall"
- var/datum/mind/thrall_mind = target.mind
- thrall_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind
+ target.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
-/obj/effect/proc_holder/spell/targeted/shadowling_phase_shift
+/obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift
name = "Phase Shift"
desc = "Phases you into the space between worlds at will, allowing you to move through walls and become invisible."
panel = "Ascendant"
@@ -520,7 +518,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
charge_max = 15
clothes_req = 0
-/obj/effect/proc_holder/spell/targeted/shadowling_phase_shift/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
for(SHA in targets)
SHA.phasing = !SHA.phasing
@@ -537,7 +535,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
-/obj/effect/proc_holder/spell/aoe_turf/glacial_blast
+/obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast
name = "Glacial Blast"
desc = "Extremely empowered version of Flash Freeze."
panel = "Ascendant"
@@ -545,7 +543,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
charge_max = 600
clothes_req = 0
-/obj/effect/proc_holder/spell/aoe_turf/glacial_blast/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
if(SHA.phasing)
usr << "You are not in the same plane of existence. Unphase first."
@@ -570,7 +568,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
-/obj/effect/proc_holder/spell/targeted/vortex
+/obj/effect/proc_holder/spell/wizard/targeted/vortex
name = "Vortex"
desc = "Tears open a hole in reality. Anyone, INCLUDING YOU, walking through it will be trapped there for eternity."
panel = "Ascendant"
@@ -579,7 +577,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
charge_max = 1200
clothes_req = 0
-/obj/effect/proc_holder/spell/targeted/vortex/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/vortex/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
if(SHA.phasing)
usr << "You are not in the same plane of existence. Unphase first."
@@ -593,7 +591,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
-/obj/effect/proc_holder/spell/targeted/shadowling_hivemind_ascendant
+/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind_ascendant
name = "Ascendant Commune"
desc = "Allows you to silently communicate with all other shadowlings and thralls."
panel = "Ascendant"
@@ -602,7 +600,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
range = -1
include_user = 1
-/obj/effect/proc_holder/spell/targeted/shadowling_hivemind_ascendant/cast(list/targets)
+/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind_ascendant/cast(list/targets)
for(var/mob/living/user in targets)
var/text = stripped_input(user, "What do you want to say to fellow thralls and shadowlings?.", "Hive Chat", "")
if(!text)
diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm
index 683d0a4bb81..e717bb8d6bb 100644
--- a/code/game/gamemodes/shadowling/shadowling_items.dm
+++ b/code/game/gamemodes/shadowling/shadowling_items.dm
@@ -16,7 +16,7 @@
item_state = "golem"
body_parts_covered = FULL_BODY //Shadowlings are immune to space
cold_protection = FULL_BODY
- min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
+ min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT
flags = ABSTRACT | NODROP | THICKMATERIAL
slowdown = 0
@@ -74,8 +74,7 @@
origin_tech = null
vision_flags = SEE_MOBS
darkness_view = 3
- invis_view = 2
- flash_protect = 2
+ invisa_view = 2
unacidable = 1
flags = ABSTRACT | NODROP
@@ -89,7 +88,7 @@
/obj/structure/shadow_vortex/New()
src.audible_message("\The [src] lets out a dismaying screech as dimensional barriers are torn apart!")
- playsound(loc, 'sound/effects/supermatter.ogg', 100, 1)
+ playsound(loc, 'sound/effects/eleczap.ogg', 100, 1)
sleep(100)
qdel(src)
diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
index 472bee1cd61..b8c106149bc 100644
--- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
@@ -66,7 +66,6 @@
var/mob/living/carbon/human/M = usr
M.underwear = "Nude"
M.undershirt = "Nude"
- M.socks = "Nude"
M.faction |= "faithless"
usr.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(usr), slot_w_uniform)
@@ -76,15 +75,15 @@
usr.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(usr), slot_gloves)
usr.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(usr), slot_wear_mask)
usr.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/shadowling(usr), slot_glasses)
- hardset_dna(usr, null, null, null, null, /datum/species/shadow/ling) //can't be a shadowling without being a shadowling
+ set_species("Shadowling")
sleep(10)
usr << "Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies."
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/glare
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/veil
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadow_walk
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/flashfreeze
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/collective_mind
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/glare
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/veil
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadow_walk
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/collective_mind
@@ -141,14 +140,15 @@
for(var/obj/machinery/power/apc/A in world)
A.overload_lighting()
var/mob/A = new /mob/living/simple_animal/ascendant_shadowling(usr.loc)
- usr.mind.spell_list = list()
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/annihilate
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/hypnosis
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_phase_shift
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/glacial_blast
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/vortex
- usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind_ascendant
+ usr.spell_list = list()
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/annihilate
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/hypnosis
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/vortex
+ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind_ascendant
usr.mind.transfer_to(A)
+ A.spell_list = usr.spell_list
A.name = usr.real_name
if(A.real_name)
A.real_name = usr.real_name
@@ -157,5 +157,7 @@
usr.notransform = 1
sleep(50)
if(!ticker.mode.shadowling_ascended)
- SSshuttle.emergency.request(null, 0.3)
+ if(emergency_shuttle && emergency_shuttle.can_call())
+ emergency_shuttle.call_evac()
+ emergency_shuttle.launch_time = 0 // Cannot recall
qdel(usr)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 43311ce8eb7..ac469958f03 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -442,7 +442,7 @@
src.occupant.loc = src.loc
src.icon_state = "pod_0"
src.eject_wait = 0 //If it's still set somehow.
- domutcheck(src.occupant) //Waiting until they're out before possible monkeyizing.
+ domutcheck(src.occupant) //Waiting until they're out before possible notransform.
src.occupant.add_side_effect("Bad Stomach") // Give them an extra side-effect for free.
src.occupant = null
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index a453aea9eb2..a3d862afce6 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -502,10 +502,10 @@
dat += check_role_table("Traitors", ticker.mode.traitors, src)
if(ticker.mode.shadows.len)
- dat += check_role_table("Shadowlings", ticker.mode.shadowlings, src)
+ dat += check_role_table("Shadowlings", ticker.mode.shadows, src)
if(ticker.mode.thralls.len)
- dat += check_role_table("Shadowling Thralls", ticker.thralls, src)
+ dat += check_role_table("Shadowling Thralls", ticker.mode.thralls, src)
if(ticker.mode.vampires.len)
dat += check_role_table("Vampires", ticker.mode.vampires, src)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 1c3beb5d72f..cb59d0f3282 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -17,13 +17,14 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
"raider" = IS_MODE_COMPILED("heist"), // 1024 / 11
"vampire" = IS_MODE_COMPILED("vampire"), // 2048 / 12
"mutineer" = IS_MODE_COMPILED("mutiny"), // 4096 / 13
- "blob" = IS_MODE_COMPILED("blob") // 8192 / 14
+ "blob" = IS_MODE_COMPILED("blob"), // 8192 / 14
"shadowling" = IS_MODE_COMPILED("shadowling") //16384 / 15
)
var/global/list/special_role_times = list( //minimum age (in days) for accounts to play these roles
num2text(BE_PAI) = 0,
num2text(BE_TRAITOR) = 7,
num2text(BE_CHANGELING) = 14,
+ num2text(BE_SHADOWLING) = 14,
num2text(BE_WIZARD) = 14,
num2text(BE_REV) = 14,
num2text(BE_VAMPIRE) = 14,
diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm
index cb72116b04a..e6107b4cca2 100644
--- a/code/modules/mob/death.dm
+++ b/code/modules/mob/death.dm
@@ -3,7 +3,7 @@
/mob/proc/gib()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -31,7 +31,7 @@
/mob/proc/dust()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -54,7 +54,7 @@
/mob/proc/melt()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm
index 1ae09f9f161..c72220790d1 100644
--- a/code/modules/mob/living/carbon/alien/death.dm
+++ b/code/modules/mob/living/carbon/alien/death.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/alien/gib()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -22,7 +22,7 @@
/mob/living/carbon/alien/dust()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
index 6990eaa9223..9d49b633990 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
@@ -53,7 +53,7 @@
/mob/living/carbon/alien/humanoid/regenerate_icons()
..()
- if (monkeyizing) return
+ if (notransform) return
update_inv_head(0,0)
update_inv_wear_suit(0,0)
diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm
index 897b03c8a14..24b900a7a2d 100644
--- a/code/modules/mob/living/carbon/brain/death.dm
+++ b/code/modules/mob/living/carbon/brain/death.dm
@@ -19,7 +19,7 @@
/mob/living/carbon/brain/gib()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 5c5f877ef74..fbabf1b761b 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/human/gib()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -37,7 +37,7 @@
/mob/living/carbon/human/dust()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -57,7 +57,7 @@
/mob/living/carbon/human/melt()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 56d0f59048d..747ecbb37d9 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1042,6 +1042,8 @@
number += 1
if(istype(src.glasses, /obj/item/clothing/glasses/hud/health_advanced)) // New blueshield / brig phys no flash medi hud
number += 1
+ if(istype(src.glasses, /obj/item/clothing/glasses/night/shadowling))
+ number += 2
if(istype(src.glasses, /obj/item/clothing/glasses/welding))
var/obj/item/clothing/glasses/welding/W = src.glasses
if(!W.up)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 94f4a93d38b..ff4ad8738b0 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -41,7 +41,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
set invisibility = 0
//set background = 1
- if (monkeyizing) return
+ if (notransform) return
if(!loc) return // Fixing a null error that occurs when the mob isn't found in the world -- TLE
..()
@@ -254,7 +254,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if (radiation)
if (radiation > 100)
radiation = 100
- if(!(species.flags & RAD_ABSORB))
+ if(!(species.flags & RAD_ABSORB) && !(species.flags & RAD_IMMUNE))
Weaken(10)
if(!lying)
src << "\red You feel weak."
@@ -274,6 +274,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
adjustToxLoss(-(rads))
updatehealth()
return
+ if(species.flags & RAD_IMMUNE)
+ return
var/damage = 0
switch(radiation)
@@ -807,6 +809,24 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
//adjustToxLoss(-(light_amount))
adjustOxyLoss(-(light_amount))
//TODO: heal wounds, heal broken limbs.
+ if(species.flags & REQUIRE_DARK)
+ var/light_amount = 0
+ nutrition = 450 //i aint never get hongry
+ if(isturf(src.loc)) //Copypasta
+ var/turf/T = loc
+ var/area/A = T.loc
+ if(A)
+ if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount
+ else light_amount = 10
+ if(light_amount > 2) //Rapid death while in the light, countered by...
+ take_overall_damage(0,6)
+ src << "The light burns you!"
+ src << 'sound/weapons/sear.ogg'
+ else if (light_amount < 2) //...extreme benefits while in the dark
+ heal_overall_damage(5,3)
+ adjustToxLoss(-3)
+ SetWeakened(0)
+ SetStunned(0)
if(dna && dna.mutantrace == "shadow")
var/light_amount = 0
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 7223899e84e..d037bed10ae 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -485,7 +485,7 @@ proc/get_damage_icon_part(damage_state, body_part)
//For legacy support.
/mob/living/carbon/human/regenerate_icons()
..()
- if(monkeyizing) return
+ if(notransform) return
update_mutations(0)
update_mutantrace(0)
update_inv_w_uniform(0,0)
diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm
index 6ea67b70c6c..57013309cab 100644
--- a/code/modules/mob/living/carbon/metroid/life.dm
+++ b/code/modules/mob/living/carbon/metroid/life.dm
@@ -9,7 +9,7 @@
set invisibility = 0
//set background = 1
- if (src.monkeyizing)
+ if (src.notransform)
return
..()
diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm
index 8e982eb9356..0c3ef632cca 100644
--- a/code/modules/mob/living/carbon/monkey/death.dm
+++ b/code/modules/mob/living/carbon/monkey/death.dm
@@ -1,7 +1,7 @@
/mob/living/carbon/monkey/gib()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -21,7 +21,7 @@
/mob/living/carbon/monkey/dust()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 51162a425ff..7f7ac0d911d 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -12,7 +12,7 @@
/mob/living/carbon/monkey/Life()
set invisibility = 0
//set background = 1
- if (monkeyizing) return
+ if (notransform) return
if (update_muts)
update_muts=0
domutcheck(src,null,MUTCHK_FORCED)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 2901ae318aa..a1b4e4f37d9 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1,7 +1,7 @@
/mob/living/Life()
..()
- if (monkeyizing) return
+ if (notransform) return
if(!loc) return // Fixing a null error that occurs when the mob isn't found in the world -- TLE
if(mind)
if(mind in ticker.mode.implanted)
diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm
index 45b0268437d..c8c7e41d94e 100644
--- a/code/modules/mob/living/silicon/death.dm
+++ b/code/modules/mob/living/silicon/death.dm
@@ -1,7 +1,7 @@
/mob/living/silicon/gib()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -22,7 +22,7 @@
/mob/living/silicon/dust()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/mob/living/silicon/mommi/life.dm b/code/modules/mob/living/silicon/mommi/life.dm
index eb7aa1dd700..04ab3871af6 100644
--- a/code/modules/mob/living/silicon/mommi/life.dm
+++ b/code/modules/mob/living/silicon/mommi/life.dm
@@ -2,7 +2,7 @@
set invisibility = 0
set background = 1
- if (src.monkeyizing)
+ if (src.notransform)
return
diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm
index fef353eec6d..c73bf68f1ab 100644
--- a/code/modules/mob/living/silicon/robot/death.dm
+++ b/code/modules/mob/living/silicon/robot/death.dm
@@ -1,7 +1,7 @@
/mob/living/silicon/robot/gib()
//robots don't die when gibbed. instead they drop their MMI'd brain
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -23,7 +23,7 @@
/mob/living/silicon/robot/dust()
death(1)
var/atom/movable/overlay/animation = null
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 3810dba4e34..89391a1717c 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -2,7 +2,7 @@
set invisibility = 0
//set background = 1
- if (src.monkeyizing)
+ if (src.notransform)
return
src.blinded = null
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 3af5be404dc..ac726058103 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1023,7 +1023,7 @@ var/list/slot_equipment_priority = list( \
if(world.time < client.move_delay) return 0
if(stat==2) return 0
if(anchored) return 0
- if(monkeyizing) return 0
+ if(notransform) return 0
if(restrained()) return 0
return 1
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index f26d26d2470..f43759f4279 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -57,7 +57,7 @@
var/disabilities = 0 //Carbon
var/atom/movable/pulling = null
var/next_move = null
- var/monkeyizing = null //Carbon
+ var/notransform = null //Carbon
var/other = 0.0
var/hand = null
var/eye_blind = null //Carbon
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 784ae01d668..a50d948dc3b 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -190,7 +190,7 @@
if(isAI(mob))
return AIMove(n,direct,mob)
- if(mob.monkeyizing) return//This is sota the goto stop mobs from moving var
+ if(mob.notransform) return//This is sota the goto stop mobs from moving var
if(isliving(mob))
var/mob/living/L = mob
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 04a57404dca..64149efe61a 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -5,14 +5,14 @@
/*
/mob/living/carbon/human/proc/monkeyize()
- if (monkeyizing)
+ if (notransform)
return
for(var/obj/item/W in src)
if (W==w_uniform) // will be torn
continue
unEquip(W)
regenerate_icons()
- monkeyizing = 1
+ notransform = 1
canmove = 0
stunned = 1
icon = null
@@ -62,7 +62,7 @@
return ..()
/mob/living/carbon/human/AIize(move=1) // 'move' argument needs defining here too because BYOND is dumb
- if (monkeyizing)
+ if (notransform)
return
for(var/t in organs)
del(t)
@@ -70,11 +70,11 @@
return ..(move)
/mob/living/carbon/AIize()
- if (monkeyizing)
+ if (notransform)
return
for(var/obj/item/W in src)
unEquip(W)
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -178,12 +178,12 @@
//human -> robot
/mob/living/carbon/human/proc/Robotize()
- if (monkeyizing)
+ if (notransform)
return
for(var/obj/item/W in src)
unEquip(W)
regenerate_icons()
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -236,12 +236,12 @@
//human -> alien
/mob/living/carbon/human/proc/Alienize()
- if (monkeyizing)
+ if (notransform)
return
for(var/obj/item/W in src)
unEquip(W)
regenerate_icons()
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -267,12 +267,12 @@
return
/mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num)
- if (monkeyizing)
+ if (notransform)
return
for(var/obj/item/W in src)
unEquip(W)
regenerate_icons()
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -302,12 +302,12 @@
return
/mob/living/carbon/human/proc/corgize()
- if (monkeyizing)
+ if (notransform)
return
for(var/obj/item/W in src)
unEquip(W)
regenerate_icons()
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
@@ -332,13 +332,13 @@
usr << "\red Sorry but this mob type is currently unavailable."
return
- if(monkeyizing)
+ if(notransform)
return
for(var/obj/item/W in src)
unEquip(W)
regenerate_icons()
- monkeyizing = 1
+ notransform = 1
canmove = 0
icon = null
invisibility = 101
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 36e0ecaff12..40c9999e84e 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -107,6 +107,8 @@
if(user.dna && user.dna.mutantrace == "adamantine")
user << "\red Your metal fingers don't fit in the trigger guard!"
return
+ if(user.dna && user.dna.species == "Shadowling")
+ user << "The muzzle flash would cause damage to your form!"
add_fingerprint(user)
@@ -128,7 +130,7 @@
if(!in_chamber)
return
-
+
if(heavy_weapon)
if(user.get_inactive_hand())
recoil = 4 //one-handed kick
@@ -154,7 +156,7 @@
user.visible_message("[user] fires [src][reflex ? " by reflex":""]!", \
"You fire [src][reflex ? "by reflex":""]!", \
"You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
-
+
if(heavy_weapon)
if(user.get_inactive_hand())
if(prob(15))
diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm
index a0b96353d4e..23f44bf19da 100644
--- a/code/modules/projectiles/projectile/change.dm
+++ b/code/modules/projectiles/projectile/change.dm
@@ -12,8 +12,8 @@
/obj/item/projectile/change/proc/wabbajack (mob/M as mob in living_mob_list)
if(istype(M, /mob/living) && M.stat != DEAD)
- if(M.monkeyizing) return
- M.monkeyizing = 1
+ if(M.notransform) return
+ M.notransform = 1
M.canmove = 0
M.icon = null
M.overlays.Cut()
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 28bdf2961e2..1066c294a13 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -127,8 +127,8 @@
proc/wabbajack(mob/living/M)
if(istype(M))
if(istype(M, /mob/living) && M.stat != DEAD)
- if(M.monkeyizing) return
- M.monkeyizing = 1
+ if(M.notransform) return
+ M.notransform = 1
M.canmove = 0
M.icon = null
M.overlays.Cut()
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 09d27ee57dc..13908b9db2d 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -376,8 +376,8 @@ datum
if(!M) M = holder.my_atom
if(istype(M, /mob/living/carbon) && M.stat != DEAD)
M << "\red Your flesh rapidly mutates!"
- if(M.monkeyizing) return
- M.monkeyizing = 1
+ if(M.notransform) return
+ M.notransform = 1
M.canmove = 0
M.icon = null
M.overlays.Cut()
diff --git a/code/setup.dm b/code/setup.dm
index 6fad89ebc38..dd3f8c6c570 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -832,7 +832,7 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse
#define IS_SLOW 4
#define RAD_ABSORB 8
#define NO_SCAN 16
-#define NO_PAIN 32
+#define NO_PAIN 32
#define REQUIRE_LIGHT 64
#define IS_WHITELISTED 128
#define HAS_LIPS 512
@@ -840,8 +840,10 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse
#define IS_SYNTHETIC 2048
#define IS_PLANT 4096
#define CAN_BE_FAT 8192
-#define HAS_CHITTIN 16384
-#define NO_INTORGANS 32768
+#define NO_INTORGANS 16384
+#define RAD_IMMUNE 32768
+#define REQUIRE_DARK 65536
+
//Species Blood Flags
#define BLOOD_SLIME 1