mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
It compiles!
- Makes shadowlings compile, require snowflaking of a few things to the human Life() proc due to how Bay species works. - Renames monkeyizing var to notransform, as that's effectively what it was used for, to prevent transformation. (/tg/ port)
This commit is contained in:
+10
-10
@@ -319,8 +319,8 @@ datum/mind
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(src in ticker.mode.shadows)
|
||||
text += "<b>SHADOWLING</b>|thrall|<a href='?src=\ref[src];shadowling=clear'>human</a>"
|
||||
else if(src in ticker.mode.thralls)
|
||||
text += "shadowling|<b>THRALL</b>|<a href='?src=\ref[src];shadowling=clear'>human</a>"
|
||||
else if(src in ticker.mode.shadowling_thralls)
|
||||
text += "Shadowling|<b>THRALL</b>|<a href='?src=\ref[src];shadowling=clear'>human</a>"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];shadowling=shadowling'>shadowling</a>|<a href='?src=\ref[src];shadowling=thrall'>thrall</a>|<b>HUMAN</b>"
|
||||
|
||||
@@ -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 << "<span class='userdanger'>Your powers have been quenched! You are no longer a shadowling!</span>"
|
||||
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 << "<span class='userdanger'>You have been brainwashed! You are no longer a thrall!</span>"
|
||||
message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
|
||||
@@ -990,8 +990,8 @@ datum/mind
|
||||
current << "<span class='deadsay'><b>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.</b></span>"
|
||||
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 << "<span class='danger'>You may use the Hivemind Commune ability to communicate with your fellow enlightened ones.</span>"
|
||||
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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 << "<span class='notice'>Your alien nature has allowed you to overcome your clownishness.</span>"
|
||||
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()]\] <span class='danger'>Became a thrall</span>"
|
||||
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 << "<font size=3 color=green><b>The shadowlings have ascended and taken over the station!</FONT></b></span>"
|
||||
else if(shadowling_dead && !check_shadow_victory()) //If the shadowlings have ascended, they can not lose the round
|
||||
world << "<span class='danger'><font size=3><b>The shadowlings have been killed by the crew!</b></FONT></span>"
|
||||
else if(!check_shadow_victory() && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE)
|
||||
else if(!check_shadow_victory() && emergency_shuttle.returned())
|
||||
world << "<span class='danger'><font size=3><b>The crew has escaped the station before the shadowlings could ascend!</b></FONT></span>"
|
||||
..()
|
||||
return 1
|
||||
@@ -189,13 +190,32 @@ Made by Xhuis
|
||||
if(shadows.len)
|
||||
text += "<br><font size=2><b>The shadowlings were:</b></font>"
|
||||
for(var/datum/mind/shadow in shadows)
|
||||
text += printplayer(shadow)
|
||||
if(thralls.len)
|
||||
text += "<br>[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 <b>[shadow.current.real_name]</b>"
|
||||
else
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
if(shadowling_thralls.len)
|
||||
text += "<br><font size=2><b>The thralls were:</b></font>"
|
||||
for(var/datum/mind/thrall in thralls)
|
||||
text += printplayer(thrall)
|
||||
for(var/datum/mind/thrall in shadowling_thralls)
|
||||
text += "<br>[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 <b>[thrall.current.real_name]</b>"
|
||||
else
|
||||
text += "body destroyed"
|
||||
else
|
||||
world << "<font size=3>Round-end code broke! Please report this and its circumstances on GitHub at https://github.com/tgstation/-tg-station/issues</font>"
|
||||
world << "<font size=3>Round-end code broke! Please report this and its circumstances on GitHub at https://github.com/ParadiseSS13/Paradise/issues</font>"
|
||||
text += "<br>"
|
||||
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 << "<span class='userdanger'>The light burns you!</span>"
|
||||
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
|
||||
|
||||
@@ -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 << "<span class='deadsay'>You silently disable all nearby lights.</span>"
|
||||
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("<span class='danger'>[user] vanishes into thin air!</span>", "<span class='deadsay'>You enter the space between worlds as a passageway.</span>")
|
||||
@@ -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("<span class='danger'>[user] appears out of nowhere!</span>", "<span class='deadsay'>The pressure becomes too much and you vacate the interdimensional darkness.</span>")
|
||||
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 << "<span class='deadsay'>You freeze the nearby air.</span>"
|
||||
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 << "<span class='warning'>You need to be closer to enthrall [target].</span>"
|
||||
@@ -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 << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Blinding Smoke</b> ability. It will create a choking cloud that will blind any non-thralls who enter. \
|
||||
</i></span>"
|
||||
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 << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Drain Thrall</b> ability. You can now drain nearby thralls to heal yourself.</i></span>"
|
||||
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 << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Sonic Screech</b> ability. This ability will shatter nearby windows and deafen enemies.</span>"
|
||||
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 << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Spatial Relocation</b> ability. This will, allow you to instantly swap places with one of your thralls in \
|
||||
addition to shattering nearby lights.</i></span>"
|
||||
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 << "<span class='shadowling'>You do not have the power to ascend. You require [victory_threshold] thralls, but only [thralls] living thralls are present.</span>"
|
||||
@@ -268,7 +267,7 @@
|
||||
usr << "<span class='shadowling'><b>You may find Ascendance in the Shadowling Evolution tab.</b></span>"
|
||||
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("<span class='warning'>[user] suddenly bends over and coughs out a cloud of black smoke, which begins to spread rapidly!</span>")
|
||||
user << "<span class='deadsay'>You regurgitate a vast cloud of blinding smoke.</span>"
|
||||
@@ -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("<span class='warning'><b>[usr] lets out a horrible scream!</b></span>")
|
||||
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 << "<span class='danger'><b>A spike of pain drives into your head and scrambles your thoughts!</b></span>"
|
||||
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 << "<span class='warning'><b>ERROR $!(@ ERROR )#^! SENSOR INTERFERENCE DETECTED</b></span>"
|
||||
@@ -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 << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
@@ -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 << "<span class='deadsay'>You can communicate with the other enlightened ones by using the Hivemind Commune ability.</span>"
|
||||
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 << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
@@ -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 << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
|
||||
@@ -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)
|
||||
|
||||
@@ -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("<span class='warning'><b>\The [src] lets out a dismaying screech as dimensional barriers are torn apart!</span>")
|
||||
playsound(loc, 'sound/effects/supermatter.ogg', 100, 1)
|
||||
playsound(loc, 'sound/effects/eleczap.ogg', 100, 1)
|
||||
sleep(100)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -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 << "<span class='shadowling'><b><i>Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies.</b></i></span>"
|
||||
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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 << "<span class='userdanger'>The light burns you!</span>"
|
||||
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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
set invisibility = 0
|
||||
//set background = 1
|
||||
|
||||
if (src.monkeyizing)
|
||||
if (src.notransform)
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set invisibility = 0
|
||||
set background = 1
|
||||
|
||||
if (src.monkeyizing)
|
||||
if (src.notransform)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set invisibility = 0
|
||||
//set background = 1
|
||||
|
||||
if (src.monkeyizing)
|
||||
if (src.notransform)
|
||||
return
|
||||
|
||||
src.blinded = null
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 << "<span class='danger'>The muzzle flash would cause damage to your form!</span>"
|
||||
|
||||
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("<span class='warning'>[user] fires [src][reflex ? " by reflex":""]!</span>", \
|
||||
"<span class='warning'>You fire [src][reflex ? "by reflex":""]!</span>", \
|
||||
"You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
|
||||
|
||||
|
||||
if(heavy_weapon)
|
||||
if(user.get_inactive_hand())
|
||||
if(prob(15))
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
+5
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user