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:
DZD
2015-04-12 19:54:45 -04:00
parent 0ab3a54fcb
commit 00035a51f0
36 changed files with 215 additions and 188 deletions
+10 -10
View File
@@ -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")
+4 -4
View File
@@ -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
+4 -4
View File
@@ -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()
+49 -48
View File
@@ -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)
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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)
+2 -1
View File
@@ -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 -3
View File
@@ -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)
+22 -2
View File
@@ -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 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+15 -15
View File
@@ -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
+4 -2
View File
@@ -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()
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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
View File
@@ -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