Merge branch 'master' into upstream-merge-30297
This commit is contained in:
@@ -411,7 +411,7 @@
|
||||
to_chat(src, "<span class='danger'>Error: Invalid (non-numeric) votes in the vote data.</span>")
|
||||
return 0
|
||||
if (!(vote in optionlist))
|
||||
to_chat(src, "<span class='danger'>Votes for choices that do not appear to be in the poll detected<span>")
|
||||
to_chat(src, "<span class='danger'>Votes for choices that do not appear to be in the poll detected.</span>")
|
||||
return 0
|
||||
if (!numberedvotelist.len)
|
||||
to_chat(src, "<span class='danger'>Invalid vote data</span>")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/sprite_accessory
|
||||
var/extra = 0
|
||||
var/extra = FALSE
|
||||
var/extra_icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
|
||||
var/extra2 = 0
|
||||
var/extra2 = FALSE
|
||||
var/extra2_icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
var/extra2_color_src = MUTCOLORS3
|
||||
// var/list/ckeys_allowed = null
|
||||
@@ -13,6 +13,10 @@
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
*/
|
||||
|
||||
/***************** Alphabetical Order please ***************
|
||||
************* Keep it to Ears, Tails, Tails Animated *********/
|
||||
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/none
|
||||
name = "None"
|
||||
icon_state = "None"
|
||||
@@ -31,12 +35,17 @@
|
||||
color_src = 0
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/bear
|
||||
/datum/sprite_accessory/tails_animated/human/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
@@ -51,10 +60,27 @@
|
||||
icon_state = "catbig"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/tails/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/tails/human/fennec
|
||||
name = "Fennec"
|
||||
@@ -76,37 +102,49 @@
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails/human/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails/human/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails/human/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS2
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS2
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
@@ -146,6 +184,24 @@
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/ears/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
hasinner= 1
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = 0
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = 0
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
@@ -191,7 +247,7 @@
|
||||
/datum/sprite_accessory/ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
extra = 1
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/tails/human/wolf
|
||||
name = "Wolf"
|
||||
@@ -203,18 +259,6 @@
|
||||
icon_state = "wolf"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = 0
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
hasinner= 1
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/******************************************
|
||||
*************** Body Parts ****************
|
||||
*******************************************/
|
||||
@@ -248,36 +292,37 @@
|
||||
name = "Beak"
|
||||
icon_state = "bird"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/lcanid
|
||||
name = "Fox, Long"
|
||||
icon_state = "lcanid"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/snouts/scanid
|
||||
name = "Fox, Short"
|
||||
icon_state = "scanid"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/snouts/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/snouts/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/snouts/otie
|
||||
name = "Otie"
|
||||
icon_state = "otie"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/******************************************
|
||||
************ Actual Species ***************
|
||||
@@ -286,31 +331,30 @@
|
||||
/datum/sprite_accessory/mam_tails/ailurus
|
||||
name = "Ailurus"
|
||||
icon_state = "ailurus"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/ailurus
|
||||
name = "Ailurus"
|
||||
icon_state = "ailurus"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
|
||||
/datum/sprite_accessory/mam_tails/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_ears/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_tails/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/bear
|
||||
name = "Bear"
|
||||
icon_state = "bear"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "cat"
|
||||
hasinner = 1
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
|
||||
/datum/sprite_accessory/mam_tails/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
@@ -323,6 +367,14 @@
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/mam_tail/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/deer
|
||||
name = "Deer"
|
||||
@@ -331,8 +383,7 @@
|
||||
/datum/sprite_accessory/mam_tails/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_ears/eevee
|
||||
name = "Eevee"
|
||||
@@ -341,8 +392,7 @@
|
||||
/datum/sprite_accessory/mam_tails_animated/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_ears/fennec
|
||||
name = "Fennec"
|
||||
@@ -360,25 +410,17 @@
|
||||
/datum/sprite_accessory/mam_ears/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
hasinner = 0
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/mam_tails/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
|
||||
/datum/sprite_accessory/mam_ears/husky
|
||||
name = "Husky"
|
||||
icon_state = "wolf"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails/hawk
|
||||
name = "Hawk"
|
||||
@@ -388,20 +430,36 @@
|
||||
name = "Hawk"
|
||||
icon_state = "hawk"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/horse
|
||||
name = "Horse"
|
||||
icon_state = "Horse"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/mam_ears/husky
|
||||
name = "Husky"
|
||||
icon_state = "wolf"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_ears/kangaroo
|
||||
name = "kangaroo"
|
||||
icon_state = "kangaroo"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails/kangaroo
|
||||
name = "kangaroo"
|
||||
@@ -414,14 +472,12 @@
|
||||
/datum/sprite_accessory/mam_tails/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/kitsune
|
||||
name = "Kitsune"
|
||||
icon_state = "kitsune"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_ears/lab
|
||||
name = "Dog, Long"
|
||||
@@ -462,6 +518,32 @@
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
hasinner= 1
|
||||
|
||||
/datum/sprite_accessory/mam_tails/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
hasinner= 1
|
||||
|
||||
/datum/sprite_accessory/mam_tails/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
@@ -470,13 +552,13 @@
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
color_src = 0
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
color_src = 0
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails/shark
|
||||
name = "Shark"
|
||||
@@ -486,19 +568,19 @@
|
||||
/datum/sprite_accessory/mam_tails_animated/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = 0
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/mam_tails/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
extra = 1
|
||||
extra2 = 1
|
||||
extra = TRUE
|
||||
extra2 = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
extra = 1
|
||||
extra2 = 1
|
||||
extra = TRUE
|
||||
extra2 = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_ears/squirrel
|
||||
name = "Squirrel"
|
||||
@@ -516,7 +598,7 @@
|
||||
/datum/sprite_accessory/mam_ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
extra = 1
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/mam_tails/wolf
|
||||
name = "Wolf"
|
||||
@@ -526,26 +608,13 @@
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/mam_tails/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
hasinner= 1
|
||||
|
||||
/******************************************
|
||||
************ Body Markings ****************
|
||||
*******************************************/
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings
|
||||
extra = 1
|
||||
extra2 = 1
|
||||
extra = TRUE
|
||||
extra2 = TRUE
|
||||
icon = 'icons/mob/mam_body_markings.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/none
|
||||
@@ -555,8 +624,6 @@
|
||||
/datum/sprite_accessory/mam_body_markings/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "ailurus"
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra2_color_src = MUTCOLORS3
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/belly
|
||||
@@ -598,13 +665,11 @@
|
||||
/datum/sprite_accessory/mam_body_markings/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "Fennec"
|
||||
extra_color_src = MUTCOLORS3
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
extra_color_src = MUTCOLORS3
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/hawk
|
||||
@@ -668,9 +733,9 @@
|
||||
/datum/sprite_accessory/taur
|
||||
icon = 'icons/mob/mam_taur.dmi'
|
||||
extra_icon = 'icons/mob/mam_taur.dmi'
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
extra2_icon = 'icons/mob/mam_taur.dmi'
|
||||
extra2 = 1
|
||||
extra2 = TRUE
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
|
||||
@@ -805,19 +870,17 @@
|
||||
/datum/sprite_accessory/mam_body_markings/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
extra_color_src = MUTCOLORS2
|
||||
extra2_color_src = MUTCOLORS3
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/mam_tails/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_ears/guilmon
|
||||
name = "Guilmon"
|
||||
@@ -834,33 +897,33 @@
|
||||
name = "DataShark"
|
||||
icon_state = "datashark"
|
||||
color_src = 0
|
||||
|
||||
|
||||
/*
|
||||
//Till I get my snowflake only ckey lock, these are locked-locked :D
|
||||
|
||||
/datum/sprite_accessory/mam_ears/sabresune
|
||||
name = "sabresune"
|
||||
icon_state = "sabresune"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
locked = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails/sabresune
|
||||
name = "sabresune"
|
||||
icon_state = "sabresune"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
locked = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/sabresune
|
||||
name = "sabresune"
|
||||
icon_state = "sabresune"
|
||||
extra = 1
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/sabresune
|
||||
name = "Sabresune"
|
||||
icon_state = "sabresune"
|
||||
color_src = MUTCOLORS2
|
||||
extra = 0
|
||||
extra2 = 0
|
||||
extra = FALSE
|
||||
extra2 = FALSE
|
||||
locked = TRUE
|
||||
*/
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
return
|
||||
src.loc = B.loc
|
||||
src.client.eye = src
|
||||
src.visible_message("<span class='warning'><B>[src] rises out of the pool of blood!</B>")
|
||||
src.visible_message("<span class='warning'><B>[src] rises out of the pool of blood!</B></span>")
|
||||
exit_blood_effect(B)
|
||||
if(iscarbon(src))
|
||||
var/mob/living/carbon/C = src
|
||||
|
||||
@@ -1,62 +1,62 @@
|
||||
/obj/effect/proc_holder/alien/hide
|
||||
name = "Hide"
|
||||
desc = "Allows aliens to hide beneath tables or certain items. Toggled on or off."
|
||||
plasma_cost = 0
|
||||
|
||||
action_icon_state = "alien_hide"
|
||||
|
||||
/obj/effect/proc_holder/alien/hide/fire(mob/living/carbon/alien/user)
|
||||
if(user.stat != CONSCIOUS)
|
||||
return
|
||||
|
||||
if (user.layer != ABOVE_NORMAL_TURF_LAYER)
|
||||
user.layer = ABOVE_NORMAL_TURF_LAYER
|
||||
user.visible_message("<span class='name'>[user] scurries to the ground!</span>", \
|
||||
"<span class='noticealien'>You are now hiding.</span>")
|
||||
else
|
||||
user.layer = MOB_LAYER
|
||||
user.visible_message("[user.] slowly peeks up from the ground...", \
|
||||
"<span class='noticealien'>You stop hiding.</span>")
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/proc_holder/alien/larva_evolve
|
||||
name = "Evolve"
|
||||
desc = "Evolve into a higher alien caste."
|
||||
plasma_cost = 0
|
||||
|
||||
action_icon_state = "alien_evolve_larva"
|
||||
|
||||
/obj/effect/proc_holder/alien/larva_evolve/fire(mob/living/carbon/alien/user)
|
||||
if(!islarva(user))
|
||||
return
|
||||
var/mob/living/carbon/alien/larva/L = user
|
||||
|
||||
if(L.handcuffed || L.legcuffed) // Cuffing larvas ? Eh ?
|
||||
to_chat(user, "<span class='danger'>You cannot evolve when you are cuffed.</span>")
|
||||
|
||||
if(L.amount_grown >= L.max_grown) //TODO ~Carn
|
||||
to_chat(L, "<span class='name'>You are growing into a beautiful alien! It is time to choose a caste.</span>")
|
||||
to_chat(L, "<span class='info'>There are three to choose from:")
|
||||
to_chat(L, "<span class='name'>Hunters</span> <span class='info'>are the most agile caste, tasked with hunting for hosts. They are faster than a human and can even pounce, but are not much tougher than a drone.</span>")
|
||||
to_chat(L, "<span class='name'>Sentinels</span> <span class='info'>are tasked with protecting the hive. With their ranged spit, invisibility, and high health, they make formidable guardians and acceptable secondhand hunters.</span>")
|
||||
to_chat(L, "<span class='name'>Drones</span> <span class='info'>are the weakest and slowest of the castes, but can grow into a praetorian and then queen if no queen exists, and are vital to maintaining a hive with their resin secretion abilities.</span>")
|
||||
var/alien_caste = alert(L, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
|
||||
|
||||
if(user.incapacitated()) //something happened to us while we were choosing.
|
||||
return
|
||||
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno
|
||||
switch(alien_caste)
|
||||
if("Hunter")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter(L.loc)
|
||||
if("Sentinel")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(L.loc)
|
||||
if("Drone")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone(L.loc)
|
||||
|
||||
L.alien_evolve(new_xeno)
|
||||
return 0
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You are not fully grown.</span>")
|
||||
return 0
|
||||
/obj/effect/proc_holder/alien/hide
|
||||
name = "Hide"
|
||||
desc = "Allows aliens to hide beneath tables or certain items. Toggled on or off."
|
||||
plasma_cost = 0
|
||||
|
||||
action_icon_state = "alien_hide"
|
||||
|
||||
/obj/effect/proc_holder/alien/hide/fire(mob/living/carbon/alien/user)
|
||||
if(user.stat != CONSCIOUS)
|
||||
return
|
||||
|
||||
if (user.layer != ABOVE_NORMAL_TURF_LAYER)
|
||||
user.layer = ABOVE_NORMAL_TURF_LAYER
|
||||
user.visible_message("<span class='name'>[user] scurries to the ground!</span>", \
|
||||
"<span class='noticealien'>You are now hiding.</span>")
|
||||
else
|
||||
user.layer = MOB_LAYER
|
||||
user.visible_message("[user.] slowly peeks up from the ground...", \
|
||||
"<span class='noticealien'>You stop hiding.</span>")
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/proc_holder/alien/larva_evolve
|
||||
name = "Evolve"
|
||||
desc = "Evolve into a higher alien caste."
|
||||
plasma_cost = 0
|
||||
|
||||
action_icon_state = "alien_evolve_larva"
|
||||
|
||||
/obj/effect/proc_holder/alien/larva_evolve/fire(mob/living/carbon/alien/user)
|
||||
if(!islarva(user))
|
||||
return
|
||||
var/mob/living/carbon/alien/larva/L = user
|
||||
|
||||
if(L.handcuffed || L.legcuffed) // Cuffing larvas ? Eh ?
|
||||
to_chat(user, "<span class='danger'>You cannot evolve when you are cuffed.</span>")
|
||||
|
||||
if(L.amount_grown >= L.max_grown) //TODO ~Carn
|
||||
to_chat(L, "<span class='name'>You are growing into a beautiful alien! It is time to choose a caste.</span>")
|
||||
to_chat(L, "<span class='info'>There are three to choose from:</span>")
|
||||
to_chat(L, "<span class='name'>Hunters</span> <span class='info'>are the most agile caste, tasked with hunting for hosts. They are faster than a human and can even pounce, but are not much tougher than a drone.</span>")
|
||||
to_chat(L, "<span class='name'>Sentinels</span> <span class='info'>are tasked with protecting the hive. With their ranged spit, invisibility, and high health, they make formidable guardians and acceptable secondhand hunters.</span>")
|
||||
to_chat(L, "<span class='name'>Drones</span> <span class='info'>are the weakest and slowest of the castes, but can grow into a praetorian and then queen if no queen exists, and are vital to maintaining a hive with their resin secretion abilities.</span>")
|
||||
var/alien_caste = alert(L, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
|
||||
|
||||
if(user.incapacitated()) //something happened to us while we were choosing.
|
||||
return
|
||||
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno
|
||||
switch(alien_caste)
|
||||
if("Hunter")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter(L.loc)
|
||||
if("Sentinel")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(L.loc)
|
||||
if("Drone")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone(L.loc)
|
||||
|
||||
L.alien_evolve(new_xeno)
|
||||
return 0
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You are not fully grown.</span>")
|
||||
return 0
|
||||
|
||||
@@ -128,12 +128,12 @@
|
||||
return
|
||||
if(isalien(owner)) //Different effects for aliens than humans
|
||||
to_chat(owner, "<span class='userdanger'>Your Queen has been struck down!</span>")
|
||||
to_chat(owner, "<span class='danger'>You are struck with overwhelming agony! You feel confused, and your connection to the hivemind is severed.")
|
||||
to_chat(owner, "<span class='danger'>You are struck with overwhelming agony! You feel confused, and your connection to the hivemind is severed.</span>")
|
||||
owner.emote("roar")
|
||||
owner.Stun(200) //Actually just slows them down a bit.
|
||||
|
||||
else if(ishuman(owner)) //Humans, being more fragile, are more overwhelmed by the mental backlash.
|
||||
to_chat(owner, "<span class='danger'>You feel a splitting pain in your head, and are struck with a wave of nausea. You cannot hear the hivemind anymore!")
|
||||
to_chat(owner, "<span class='danger'>You feel a splitting pain in your head, and are struck with a wave of nausea. You cannot hear the hivemind anymore!</span>")
|
||||
owner.emote("scream")
|
||||
owner.Knockdown(100)
|
||||
|
||||
|
||||
@@ -860,7 +860,7 @@
|
||||
/mob/living/carbon/vv_get_dropdown()
|
||||
. = ..()
|
||||
. += "---"
|
||||
.["Make AI"] = "?_src_=vars;makeai=\ref[src]"
|
||||
.["Modify bodypart"] = "?_src_=vars;editbodypart=\ref[src]"
|
||||
.["Modify organs"] = "?_src_=vars;editorgans=\ref[src]"
|
||||
.["Hallucinate"] = "?_src_=vars;hallucinate=\ref[src]"
|
||||
.["Make AI"] = "?_src_=vars;[HrefToken()];makeai=\ref[src]"
|
||||
.["Modify bodypart"] = "?_src_=vars;[HrefToken()];editbodypart=\ref[src]"
|
||||
.["Modify organs"] = "?_src_=vars;[HrefToken()];editorgans=\ref[src]"
|
||||
.["Hallucinate"] = "?_src_=vars;[HrefToken()];hallucinate=\ref[src]"
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
|
||||
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
|
||||
if(on_fire)
|
||||
to_chat(M, "<span class='warning'>You can't put them out with just your bare hands!")
|
||||
to_chat(M, "<span class='warning'>You can't put them out with just your bare hands!</span>")
|
||||
return
|
||||
|
||||
if(health >= 0 && !(status_flags & FAKEDEATH))
|
||||
|
||||
@@ -643,6 +643,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
|
||||
update_hair()
|
||||
|
||||
/mob/living/carbon/human/singularity_pull(S, current_size)
|
||||
..()
|
||||
if(current_size >= STAGE_THREE)
|
||||
for(var/obj/item/hand in held_items)
|
||||
if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && dropItemToGround(hand))
|
||||
@@ -651,7 +652,6 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
|
||||
rad_act(current_size * 3)
|
||||
if(mob_negates_gravity())
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/proc/do_cpr(mob/living/carbon/C)
|
||||
CHECK_DNA_AND_SPECIES(C)
|
||||
@@ -906,12 +906,12 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
|
||||
/mob/living/carbon/human/vv_get_dropdown()
|
||||
. = ..()
|
||||
. += "---"
|
||||
.["Make monkey"] = "?_src_=vars;makemonkey=\ref[src]"
|
||||
.["Set Species"] = "?_src_=vars;setspecies=\ref[src]"
|
||||
.["Make cyborg"] = "?_src_=vars;makerobot=\ref[src]"
|
||||
.["Make alien"] = "?_src_=vars;makealien=\ref[src]"
|
||||
.["Make slime"] = "?_src_=vars;makeslime=\ref[src]"
|
||||
.["Toggle Purrbation"] = "?_src_=vars;purrbation=\ref[src]"
|
||||
.["Make monkey"] = "?_src_=vars;[HrefToken()];makemonkey=\ref[src]"
|
||||
.["Set Species"] = "?_src_=vars;[HrefToken()];setspecies=\ref[src]"
|
||||
.["Make cyborg"] = "?_src_=vars;[HrefToken()];makerobot=\ref[src]"
|
||||
.["Make alien"] = "?_src_=vars;[HrefToken()];makealien=\ref[src]"
|
||||
.["Make slime"] = "?_src_=vars;[HrefToken()];makeslime=\ref[src]"
|
||||
.["Toggle Purrbation"] = "?_src_=vars;[HrefToken()];purrbation=\ref[src]"
|
||||
|
||||
/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user)
|
||||
if((target != pulling) || (grab_state < GRAB_AGGRESSIVE) || (user != target) || !isliving(user) || stat || user.stat)//Get consent first :^)
|
||||
|
||||
@@ -1,67 +1,67 @@
|
||||
/mob/living/carbon/human/movement_delay()
|
||||
. = 0
|
||||
. += ..()
|
||||
. += config.human_delay
|
||||
. += dna.species.movement_delay(src)
|
||||
|
||||
/mob/living/carbon/human/slip(knockdown_amount, obj/O, lube)
|
||||
/mob/living/carbon/human/movement_delay()
|
||||
. = 0
|
||||
. += ..()
|
||||
. += config.human_delay
|
||||
. += dna.species.movement_delay(src)
|
||||
|
||||
/mob/living/carbon/human/slip(knockdown_amount, obj/O, lube)
|
||||
if(isobj(shoes) && (shoes.flags_1&NOSLIP_1) && !(lube&GALOSHES_DONT_HELP))
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/experience_pressure_difference()
|
||||
playsound(src, 'sound/effects/space_wind.ogg', 50, 1)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/experience_pressure_difference()
|
||||
playsound(src, 'sound/effects/space_wind.ogg', 50, 1)
|
||||
if(shoes && shoes.flags_1&NOSLIP_1)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/mob_has_gravity()
|
||||
. = ..()
|
||||
if(!.)
|
||||
if(mob_negates_gravity())
|
||||
. = 1
|
||||
|
||||
/mob/living/carbon/human/mob_negates_gravity()
|
||||
return ((shoes && shoes.negates_gravity()) || dna.species.negates_gravity(src))
|
||||
|
||||
/mob/living/carbon/human/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
HM.on_move(src, NewLoc)
|
||||
if(shoes)
|
||||
if(!lying && !buckled)
|
||||
if(loc == NewLoc)
|
||||
if(!has_gravity(loc))
|
||||
return
|
||||
var/obj/item/clothing/shoes/S = shoes
|
||||
|
||||
//Bloody footprints
|
||||
var/turf/T = get_turf(src)
|
||||
if(S.bloody_shoes && S.bloody_shoes[S.blood_state])
|
||||
var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T
|
||||
if(oldFP && oldFP.blood_state == S.blood_state)
|
||||
return
|
||||
else
|
||||
//No oldFP or it's a different kind of blood
|
||||
S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state]-BLOOD_LOSS_PER_STEP)
|
||||
var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T)
|
||||
FP.blood_state = S.blood_state
|
||||
FP.entered_dirs |= dir
|
||||
FP.bloodiness = S.bloody_shoes[S.blood_state]
|
||||
if(S.blood_DNA && S.blood_DNA.len)
|
||||
FP.transfer_blood_dna(S.blood_DNA)
|
||||
FP.update_icon()
|
||||
update_inv_shoes()
|
||||
//End bloody footprints
|
||||
|
||||
S.step_action()
|
||||
|
||||
/mob/living/carbon/human/Moved()
|
||||
. = ..()
|
||||
if(buckled_mobs && buckled_mobs.len && riding_datum)
|
||||
riding_datum.on_vehicle_move()
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee.
|
||||
if(..())
|
||||
return 1
|
||||
return dna.species.space_move(src)
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/mob_has_gravity()
|
||||
. = ..()
|
||||
if(!.)
|
||||
if(mob_negates_gravity())
|
||||
. = 1
|
||||
|
||||
/mob/living/carbon/human/mob_negates_gravity()
|
||||
return ((shoes && shoes.negates_gravity()) || dna.species.negates_gravity(src))
|
||||
|
||||
/mob/living/carbon/human/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
HM.on_move(src, NewLoc)
|
||||
|
||||
if(shoes)
|
||||
if(!lying && !buckled)
|
||||
if(loc == NewLoc)
|
||||
if(!has_gravity(loc))
|
||||
return
|
||||
var/obj/item/clothing/shoes/S = shoes
|
||||
|
||||
//Bloody footprints
|
||||
var/turf/T = get_turf(src)
|
||||
if(S.bloody_shoes && S.bloody_shoes[S.blood_state])
|
||||
var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T
|
||||
if(oldFP && oldFP.blood_state == S.blood_state)
|
||||
return
|
||||
else
|
||||
//No oldFP or it's a different kind of blood
|
||||
S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state]-BLOOD_LOSS_PER_STEP)
|
||||
var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T)
|
||||
FP.blood_state = S.blood_state
|
||||
FP.entered_dirs |= dir
|
||||
FP.bloodiness = S.bloody_shoes[S.blood_state]
|
||||
if(S.blood_DNA && S.blood_DNA.len)
|
||||
FP.transfer_blood_dna(S.blood_DNA)
|
||||
FP.update_icon()
|
||||
update_inv_shoes()
|
||||
//End bloody footprints
|
||||
|
||||
S.step_action()
|
||||
/mob/living/carbon/human/Moved()
|
||||
. = ..()
|
||||
if(buckled_mobs && buckled_mobs.len && riding_datum)
|
||||
riding_datum.on_vehicle_move()
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee.
|
||||
if(..())
|
||||
return 1
|
||||
return dna.species.space_move(src)
|
||||
|
||||
@@ -1108,7 +1108,7 @@
|
||||
|
||||
if(prob(15))
|
||||
if(!( H.hair_style == "Shaved") || !(H.hair_style == "Bald") || (HAIR in species_traits))
|
||||
to_chat(H, "<span class='danger'>Your hair starts to fall out in clumps...<span>")
|
||||
to_chat(H, "<span class='danger'>Your hair starts to fall out in clumps...</span>")
|
||||
addtimer(CALLBACK(src, .proc/go_bald, H), 50)
|
||||
|
||||
if(75 to 100)
|
||||
|
||||
@@ -80,11 +80,11 @@
|
||||
/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H)
|
||||
if(H.bodytemperature > 750)
|
||||
if(!boom_warning && H.on_fire)
|
||||
to_chat(H, "<span class='userdanger'>You feel like you could blow up at any moment!<span>")
|
||||
to_chat(H, "<span class='userdanger'>You feel like you could blow up at any moment!</span>")
|
||||
boom_warning = TRUE
|
||||
else
|
||||
if(boom_warning)
|
||||
to_chat(H, "<span class='notice'>You feel more stable.<span>")
|
||||
to_chat(H, "<span class='notice'>You feel more stable.</span>")
|
||||
boom_warning = FALSE
|
||||
|
||||
if(H.bodytemperature > 850 && H.on_fire && prob(25))
|
||||
|
||||
@@ -1,23 +1,115 @@
|
||||
/datum/species/shadow
|
||||
// Humans cursed to stay in the darkness, lest their life forces drain. They regain health in shadow and die in light.
|
||||
name = "???"
|
||||
id = "shadow"
|
||||
sexes = 0
|
||||
blacklisted = 1
|
||||
ignored_by = list(/mob/living/simple_animal/hostile/faithless)
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
|
||||
species_traits = list(NOBREATH,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
|
||||
dangerous_existence = 1
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision
|
||||
|
||||
|
||||
/datum/species/shadow/spec_life(mob/living/carbon/human/H)
|
||||
var/light_amount = 0
|
||||
if(isturf(H.loc))
|
||||
var/turf/T = H.loc
|
||||
light_amount = T.get_lumcount()
|
||||
|
||||
if(light_amount > 0.2) //if there's enough light, start dying
|
||||
H.take_overall_damage(1,1)
|
||||
else if (light_amount < 0.2) //heal in the dark
|
||||
H.heal_overall_damage(1,1)
|
||||
/datum/species/shadow
|
||||
// Humans cursed to stay in the darkness, lest their life forces drain. They regain health in shadow and die in light.
|
||||
name = "???"
|
||||
id = "shadow"
|
||||
sexes = 0
|
||||
blacklisted = 1
|
||||
ignored_by = list(/mob/living/simple_animal/hostile/faithless)
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
|
||||
species_traits = list(NOBREATH,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
|
||||
|
||||
dangerous_existence = 1
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision
|
||||
|
||||
|
||||
/datum/species/shadow/spec_life(mob/living/carbon/human/H)
|
||||
var/turf/T = H.loc
|
||||
if(istype(T))
|
||||
var/light_amount = T.get_lumcount()
|
||||
|
||||
if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying
|
||||
H.take_overall_damage(1,1)
|
||||
else if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark
|
||||
H.heal_overall_damage(1,1)
|
||||
|
||||
|
||||
/datum/species/shadow/nightmare
|
||||
name = "Nightmare"
|
||||
id = "nightmare"
|
||||
limbs_id = "shadow"
|
||||
burnmod = 1.5
|
||||
blacklisted = TRUE
|
||||
no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform, slot_s_store)
|
||||
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR,NOHUNGER)
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
|
||||
var/obj/effect/proc_holder/spell/targeted/shadowwalk/shadowwalk
|
||||
|
||||
var/info_text = "You are a <span class='danger'>Nightmare</span>. The ability <span class='warning'>shadow walk</span> allows unlimited, unrestricted movement in the dark using. \
|
||||
Your <span class='warning'>light eater</span> will destroy any light producing objects you attack, as well as destroy any lights a living creature may be holding. You will automatically dodge gunfire and melee attacks when on a dark tile."
|
||||
|
||||
/datum/species/shadow/nightmare/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
var/obj/effect/proc_holder/spell/targeted/shadowwalk/SW = new
|
||||
C.AddSpell(SW)
|
||||
shadowwalk = SW
|
||||
var/obj/item/light_eater/blade = new
|
||||
C.put_in_hands(blade)
|
||||
|
||||
to_chat(C, "[info_text]")
|
||||
|
||||
C.real_name = "Nightmare"
|
||||
C.name = "Nightmare"
|
||||
if(C.mind)
|
||||
C.mind.name = "Nightmare"
|
||||
C.dna.real_name = "Nightmare"
|
||||
|
||||
/datum/species/shadow/nightmare/on_species_loss(mob/living/carbon/C)
|
||||
. = ..()
|
||||
if(shadowwalk)
|
||||
C.RemoveSpell(shadowwalk)
|
||||
|
||||
/datum/species/shadow/nightmare/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
|
||||
var/turf/T = H.loc
|
||||
if(istype(T))
|
||||
var/light_amount = T.get_lumcount()
|
||||
if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD)
|
||||
H.visible_message("<span class='danger'>[H] dances in the shadows, evading [P]!</span>")
|
||||
playsound(T, "bullet_miss", 75, 1)
|
||||
return -1
|
||||
return 0
|
||||
|
||||
/obj/item/light_eater
|
||||
name = "light eater"
|
||||
icon_state = "arm_blade"
|
||||
item_state = "arm_blade"
|
||||
force = 25
|
||||
armour_penetration = 35
|
||||
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
|
||||
flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/light_eater/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(isopenturf(AM)) //So you can actually melee with it
|
||||
return
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(iscyborg(AM))
|
||||
var/mob/living/silicon/robot/borg = AM
|
||||
borg.update_headlamp(TRUE, 100)
|
||||
else
|
||||
for(var/obj/item/O in AM)
|
||||
if(O.light_range && O.light_power)
|
||||
disintegrate(O)
|
||||
if(L.pulling && L.pulling.light_range && isitem(L.pulling))
|
||||
disintegrate(L.pulling)
|
||||
else if(isitem(AM))
|
||||
var/obj/item/I = AM
|
||||
if(I.light_range && I.light_power)
|
||||
disintegrate(I)
|
||||
|
||||
/obj/item/light_eater/proc/disintegrate(obj/item/O)
|
||||
if(istype(O, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/PDA = O
|
||||
PDA.set_light(0)
|
||||
PDA.fon = 0
|
||||
PDA.f_lum = 0
|
||||
PDA.update_icon()
|
||||
visible_message("<span class='danger'>The light in [PDA] shorts out!</span>")
|
||||
else
|
||||
visible_message("<span class='danger'>[O] is disintegrated by [src]!</span>")
|
||||
O.burn()
|
||||
playsound(src, 'sound/items/welder.ogg', 50, 1)
|
||||
|
||||
@@ -58,11 +58,16 @@
|
||||
|
||||
var/datum/gas_mixture/breath
|
||||
|
||||
if(health <= HEALTH_THRESHOLD_CRIT || (pulledby && pulledby.grab_state >= GRAB_KILL && !getorganslot("breathing_tube")))
|
||||
losebreath++
|
||||
if(!getorganslot("breathing_tube"))
|
||||
if(health <= HEALTH_THRESHOLD_FULLCRIT || (pulledby && pulledby.grab_state >= GRAB_KILL))
|
||||
losebreath++ //You can't breath at all when in critical or when being choked, so you're going to miss a breath
|
||||
|
||||
else if(health <= HEALTH_THRESHOLD_CRIT)
|
||||
losebreath += 0.25 //You're having trouble breathing in soft crit, so you'll miss a breath one in four times
|
||||
|
||||
|
||||
//Suffocate
|
||||
if(losebreath > 0)
|
||||
if(losebreath >= 1) //You've missed a breath, take oxy damage
|
||||
losebreath--
|
||||
if(prob(10))
|
||||
emote("gasp")
|
||||
@@ -150,7 +155,7 @@
|
||||
|
||||
else //Enough oxygen
|
||||
failed_last_breath = 0
|
||||
if(oxyloss)
|
||||
if(health >= HEALTH_THRESHOLD_CRIT)
|
||||
adjustOxyLoss(-5)
|
||||
oxygen_used = breath_gases["o2"][MOLES]
|
||||
clear_alert("not_enough_oxy")
|
||||
|
||||
@@ -68,6 +68,6 @@
|
||||
if(!ancestor_name)
|
||||
file_data["ancestor_name"] = name
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(json_file))
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
if(!dead)
|
||||
memory_saved = 1
|
||||
@@ -429,6 +429,7 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
var/old_direction = dir
|
||||
var/atom/movable/pullee = pulling
|
||||
if(pullee && get_dist(src, pullee) > 1)
|
||||
stop_pulling()
|
||||
@@ -444,10 +445,6 @@
|
||||
|
||||
var/pull_dir = get_dir(src, pulling)
|
||||
if(get_dist(src, pulling) > 1 || ((pull_dir - 1) & pull_dir)) //puller and pullee more than one tile away or in diagonal position
|
||||
if(isliving(pulling))
|
||||
var/mob/living/M = pulling
|
||||
if(M.lying && !M.buckled && (prob(M.getBruteLoss()*200/M.maxHealth)))
|
||||
M.makeTrail(T)
|
||||
pulling.Move(T, get_dir(pulling, T)) //the pullee tries to reach our previous position
|
||||
if(pulling && get_dist(src, pulling) > 1) //the pullee couldn't keep up
|
||||
stop_pulling()
|
||||
@@ -458,6 +455,10 @@
|
||||
if (s_active && !(CanReach(s_active,view_only = TRUE)))
|
||||
s_active.close(src)
|
||||
|
||||
if(lying && !buckled && prob(getBruteLoss()*200/maxHealth))
|
||||
|
||||
makeTrail(newloc, T, old_direction)
|
||||
|
||||
/mob/living/movement_delay(ignorewalk = 0)
|
||||
. = ..()
|
||||
if(isopenturf(loc) && !is_flying())
|
||||
@@ -474,31 +475,32 @@
|
||||
if(MOVE_INTENT_WALK)
|
||||
. += config.walk_speed
|
||||
|
||||
/mob/living/proc/makeTrail(turf/target_turf)
|
||||
/mob/living/proc/makeTrail(turf/target_turf, turf/start, direction)
|
||||
if(!has_gravity())
|
||||
return
|
||||
var/blood_exists = FALSE
|
||||
|
||||
for(var/obj/effect/decal/cleanable/trail_holder/C in loc) //checks for blood splatter already on the floor
|
||||
for(var/obj/effect/decal/cleanable/trail_holder/C in start) //checks for blood splatter already on the floor
|
||||
blood_exists = TRUE
|
||||
if(isturf(loc))
|
||||
if(isturf(start))
|
||||
var/trail_type = getTrail()
|
||||
if(trail_type)
|
||||
var/brute_ratio = round(getBruteLoss() / maxHealth, 0.1)
|
||||
if(blood_volume && blood_volume > max(BLOOD_VOLUME_NORMAL*(1 - brute_ratio * 0.25), 0))//don't leave trail if blood volume below a threshold
|
||||
blood_volume = max(blood_volume - max(1, brute_ratio * 2), 0) //that depends on our brute damage.
|
||||
var/newdir = get_dir(target_turf, loc)
|
||||
if(newdir != dir)
|
||||
newdir = newdir | dir
|
||||
var/newdir = get_dir(target_turf, start)
|
||||
if(newdir != direction)
|
||||
newdir = newdir | direction
|
||||
if(newdir == 3) //N + S
|
||||
newdir = NORTH
|
||||
else if(newdir == 12) //E + W
|
||||
newdir = EAST
|
||||
if((newdir in GLOB.cardinals) && (prob(50)))
|
||||
newdir = turn(get_dir(target_turf, loc), 180)
|
||||
newdir = turn(get_dir(target_turf, start), 180)
|
||||
if(!blood_exists)
|
||||
new /obj/effect/decal/cleanable/trail_holder(loc)
|
||||
for(var/obj/effect/decal/cleanable/trail_holder/TH in loc)
|
||||
new /obj/effect/decal/cleanable/trail_holder(start)
|
||||
|
||||
for(var/obj/effect/decal/cleanable/trail_holder/TH in start)
|
||||
if((!(newdir in TH.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && TH.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled)
|
||||
TH.existing_dirs += newdir
|
||||
TH.add_overlay(image('icons/effects/blood.dmi', trail_type, dir = newdir))
|
||||
@@ -569,10 +571,10 @@
|
||||
var/obj/C = loc
|
||||
C.container_resist(src)
|
||||
|
||||
else if(has_status_effect(/datum/status_effect/freon))
|
||||
else if(IsFrozen())
|
||||
to_chat(src, "You start breaking out of the ice cube!")
|
||||
if(do_mob(src, src, 40))
|
||||
if(has_status_effect(/datum/status_effect/freon))
|
||||
if(IsFrozen())
|
||||
to_chat(src, "You break out of the ice cube!")
|
||||
remove_status_effect(/datum/status_effect/freon)
|
||||
update_canmove()
|
||||
@@ -690,6 +692,7 @@
|
||||
who.equip_to_slot(what, where, TRUE)
|
||||
|
||||
/mob/living/singularity_pull(S, current_size)
|
||||
..()
|
||||
if(current_size >= STAGE_SIX)
|
||||
throw_at(S,14,3, spin=1)
|
||||
else
|
||||
@@ -971,7 +974,7 @@
|
||||
fall()
|
||||
else if(ko || move_and_fall || (!has_legs && !ignore_legs) || chokehold)
|
||||
fall(forced = 1)
|
||||
canmove = !(ko || resting || has_status_effect(STATUS_EFFECT_STUN) || has_status_effect(/datum/status_effect/freon) || chokehold || buckled || (!has_legs && !ignore_legs && !has_arms))
|
||||
canmove = !(ko || resting || IsStun() || IsFrozen() || chokehold || buckled || (!has_legs && !ignore_legs && !has_arms))
|
||||
density = !lying
|
||||
if(lying)
|
||||
if(layer == initial(layer)) //to avoid special cases like hiding larvas.
|
||||
|
||||
@@ -180,6 +180,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
spans |= SPAN_ITALICS
|
||||
if(radio_return & REDUCE_RANGE)
|
||||
message_range = 1
|
||||
if(radio_return & NOPASS)
|
||||
return 1
|
||||
|
||||
//No screams in space, unless you're next to someone.
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
if(nuking)
|
||||
set_security_level("red")
|
||||
nuking = FALSE
|
||||
for(var/obj/item/pinpointer/P in GLOB.pinpointer_list)
|
||||
for(var/obj/item/pinpointer/nuke/P in GLOB.pinpointer_list)
|
||||
P.switch_mode_to(TRACK_NUKE_DISK) //Party's over, back to work, everyone
|
||||
P.nuke_warning = FALSE
|
||||
P.alert = FALSE
|
||||
|
||||
if(doomsday_device)
|
||||
doomsday_device.timing = FALSE
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
diff a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm (rejected hunks)
|
||||
@@ -35,9 +35,9 @@
|
||||
if(nuking)
|
||||
set_security_level("red")
|
||||
nuking = FALSE
|
||||
- for(var/obj/item/weapon/pinpointer/P in GLOB.pinpointer_list)
|
||||
+ for(var/obj/item/weapon/pinpointer/nuke/P in GLOB.pinpointer_list)
|
||||
P.switch_mode_to(TRACK_NUKE_DISK) //Party's over, back to work, everyone
|
||||
- P.nuke_warning = FALSE
|
||||
+ P.alert = FALSE
|
||||
|
||||
if(doomsday_device)
|
||||
doomsday_device.timing = FALSE
|
||||
@@ -104,7 +104,7 @@
|
||||
pda.owner = text("[]", src)
|
||||
pda.name = pda.owner + " (" + pda.ownjob + ")"
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
var/datum/action/innate/pai/shell/AS = new /datum/action/innate/pai/shell
|
||||
var/datum/action/innate/pai/chassis/AC = new /datum/action/innate/pai/chassis
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
var/lamp_max = 10 //Maximum brightness of a borg lamp. Set as a var for easy adjusting.
|
||||
var/lamp_intensity = 0 //Luminosity of the headlamp. 0 is off. Higher settings than the minimum require power.
|
||||
var/lamp_recharging = 0 //Flag for if the lamp is on cooldown after being forcibly disabled.
|
||||
var/lamp_cooldown = 0 //Flag for if the lamp is on cooldown after being forcibly disabled.
|
||||
|
||||
var/sight_mode = 0
|
||||
hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD)
|
||||
@@ -742,7 +742,7 @@
|
||||
set_autosay()
|
||||
|
||||
/mob/living/silicon/robot/proc/control_headlamp()
|
||||
if(stat || lamp_recharging || low_power_mode)
|
||||
if(stat || lamp_cooldown > world.time || low_power_mode)
|
||||
to_chat(src, "<span class='danger'>This function is currently offline.</span>")
|
||||
return
|
||||
|
||||
@@ -757,8 +757,7 @@
|
||||
if(lamp_intensity && (turn_off || stat || low_power_mode))
|
||||
to_chat(src, "<span class='danger'>Your headlamp has been deactivated.</span>")
|
||||
lamp_intensity = 0
|
||||
lamp_recharging = TRUE
|
||||
addtimer(CALLBACK(src, .proc/reset_headlamp), cooldown)
|
||||
lamp_cooldown = world.time + cooldown
|
||||
else
|
||||
set_light(lamp_intensity)
|
||||
|
||||
@@ -767,9 +766,6 @@
|
||||
|
||||
update_icons()
|
||||
|
||||
/mob/living/silicon/robot/proc/reset_headlamp()
|
||||
lamp_recharging = FALSE
|
||||
|
||||
/mob/living/silicon/robot/proc/deconstruct()
|
||||
var/turf/T = get_turf(src)
|
||||
if (robot_suit)
|
||||
|
||||
@@ -599,7 +599,7 @@
|
||||
/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg,
|
||||
/obj/item/card/emag,
|
||||
/obj/item/crowbar/cyborg,
|
||||
/obj/item/pinpointer/syndicate/cyborg)
|
||||
/obj/item/pinpointer/syndicate_cyborg)
|
||||
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/security,
|
||||
@@ -625,7 +625,7 @@
|
||||
/obj/item/roller/robo,
|
||||
/obj/item/card/emag,
|
||||
/obj/item/crowbar/cyborg,
|
||||
/obj/item/pinpointer/syndicate/cyborg,
|
||||
/obj/item/pinpointer/syndicate_cyborg,
|
||||
/obj/item/stack/medical/gauze/cyborg,
|
||||
/obj/item/gun/medbeam)
|
||||
ratvar_modules = list(
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
diff a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm (rejected hunks)
|
||||
@@ -519,7 +519,7 @@
|
||||
/obj/item/weapon/gun/ballistic/revolver/grenadelauncher/cyborg,
|
||||
/obj/item/weapon/card/emag,
|
||||
/obj/item/weapon/crowbar/cyborg,
|
||||
- /obj/item/weapon/pinpointer/syndicate/cyborg)
|
||||
+ /obj/item/weapon/pinpointer/syndicate_cyborg)
|
||||
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/security,
|
||||
@@ -545,7 +545,7 @@
|
||||
/obj/item/roller/robo,
|
||||
/obj/item/weapon/card/emag,
|
||||
/obj/item/weapon/crowbar/cyborg,
|
||||
- /obj/item/weapon/pinpointer/syndicate/cyborg,
|
||||
+ /obj/item/weapon/pinpointer/syndicate_cyborg,
|
||||
/obj/item/stack/medical/gauze/cyborg,
|
||||
/obj/item/weapon/gun/medbeam)
|
||||
ratvar_modules = list(
|
||||
File diff suppressed because it is too large
Load Diff
@@ -39,7 +39,7 @@
|
||||
#define TILE_EMAG 7
|
||||
|
||||
/mob/living/simple_animal/bot/floorbot/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
update_icon()
|
||||
var/datum/job/engineer/J = new/datum/job/engineer
|
||||
access_card.access += J.get_access()
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
var/bloodiness = 0
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
wires = new /datum/wires/mulebot(src)
|
||||
var/datum/job/cargo_tech/J = new/datum/job/cargo_tech
|
||||
access_card.access = J.get_access()
|
||||
@@ -650,7 +650,7 @@
|
||||
/mob/living/simple_animal/bot/mulebot/proc/RunOver(mob/living/carbon/human/H)
|
||||
add_logs(src, H, "run over", null, "(DAMTYPE: [uppertext(BRUTE)])")
|
||||
H.visible_message("<span class='danger'>[src] drives over [H]!</span>", \
|
||||
"<span class='userdanger'>[src] drives over you!<span>")
|
||||
"<span class='userdanger'>[src] drives over you!</span>")
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/damage = rand(5,15)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/lay_down
|
||||
|
||||
/mob/living/simple_animal/pet/cat/update_canmove()
|
||||
@@ -92,7 +92,7 @@
|
||||
icon_living = "original"
|
||||
icon_dead = "original_dead"
|
||||
Read_Memory()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/Life()
|
||||
if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
flavortext = null
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
internal_storage.hidden_uplink.telecrystals = 10
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone/Login()
|
||||
@@ -46,7 +46,7 @@
|
||||
default_storage = /obj/item/device/radio/uplink/nuclear
|
||||
|
||||
/mob/living/simple_animal/drone/syndrone/badass/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
internal_storage.hidden_uplink.telecrystals = 30
|
||||
var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(src)
|
||||
W.implant(src)
|
||||
@@ -55,7 +55,7 @@
|
||||
default_hatmask = /obj/item/clothing/head/chameleon/drone
|
||||
|
||||
/mob/living/simple_animal/drone/snowflake/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
desc += " This drone appears to have a complex holoprojector built on its 'head'."
|
||||
|
||||
/obj/item/drone_shell/syndrone
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
//Gondolas
|
||||
|
||||
/mob/living/simple_animal/pet/gondola
|
||||
name = "gondola"
|
||||
real_name = "gondola"
|
||||
desc = "Gondola is the silent walker. Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable."
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "kicks"
|
||||
emote_see = list("watches.", "stares off into the distance.","contemplates.")
|
||||
faction = list("gondola")
|
||||
turns_per_move = 10
|
||||
icon = 'icons/mob/gondolas.dmi'
|
||||
icon_state = "gondola"
|
||||
icon_living = "gondola"
|
||||
icon_dead = "gondola_dead"
|
||||
butcher_results = list(/obj/item/stack/sheet/animalhide/gondola = 1)
|
||||
//Gondolas aren't affected by cold.
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
|
||||
/mob/living/simple_animal/pet/gondola/IsVocal() //Gondolas are the silent walker.
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/gondola/emote()
|
||||
return
|
||||
@@ -27,7 +27,7 @@
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/mouse/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
if(!body_color)
|
||||
body_color = pick( list("brown","gray","white") )
|
||||
icon_state = "mouse_[body_color]"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
if(pcollar)
|
||||
pcollar = new(src)
|
||||
regenerate_icons()
|
||||
|
||||
@@ -54,7 +54,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
GLOB.parasites += src
|
||||
setthemename(theme)
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/med_hud_set_health()
|
||||
if(!QDELETED(summoner))
|
||||
@@ -659,7 +659,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
name = "holoparasite injector kit"
|
||||
|
||||
/obj/item/storage/box/syndie_kit/guardian/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
new /obj/item/guardiancreator/tech/choose/traitor(src)
|
||||
new /obj/item/paper/guides/antag/guardian(src)
|
||||
return
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/boss/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
atb = new()
|
||||
atb.point_regen_delay = point_regen_delay
|
||||
|
||||
@@ -85,35 +85,70 @@
|
||||
loot = list()
|
||||
butcher_results = list(/obj/item/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/make_shiny()
|
||||
if(prob(75))
|
||||
name = "magmawing watcher"
|
||||
real_name = name
|
||||
desc = "When raised very close to lava, some watchers adapt to the extreme heat and change coloration. Such watchers are known as magmawings and use intense heat as their tool for hunting and defense."
|
||||
icon_state = "watcher_magmawing"
|
||||
icon_living = "watcher_magmawing"
|
||||
icon_aggro = "watcher_magmawing"
|
||||
icon_dead = "watcher_magmawing_dead"
|
||||
maxHealth = 215 //Compensate for the lack of slowdown on projectiles with a bit of extra health
|
||||
health = 215
|
||||
projectiletype = /obj/item/projectile/temp/basilisk/magmawing
|
||||
else
|
||||
name = "icewing watcher"
|
||||
real_name = name
|
||||
desc = "Very rarely, some watchers will eke out an existence far from heat sources. In the absence of warmth, their wings will become papery and turn to an icy blue; these watchers are fragile but much quicker to fire their trademark freezing blasts."
|
||||
icon_state = "watcher_icewing"
|
||||
icon_living = "watcher_icewing"
|
||||
icon_aggro = "watcher_icewing"
|
||||
icon_dead = "watcher_icewing_dead"
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
ranged_cooldown_time = 20
|
||||
butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/bone = 1) //No sinew; the wings are too fragile to be usable
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random/Initialize()
|
||||
. = ..()
|
||||
if(prob(1))
|
||||
if(prob(75))
|
||||
new /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing(loc)
|
||||
else
|
||||
new /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing
|
||||
name = "magmawing watcher"
|
||||
desc = "When raised very close to lava, some watchers adapt to the extreme heat and use lava as both a weapon and wings."
|
||||
icon_state = "watcher_magmawing"
|
||||
icon_living = "watcher_magmawing"
|
||||
icon_aggro = "watcher_magmawing"
|
||||
icon_dead = "watcher_magmawing_dead"
|
||||
maxHealth = 215 //Compensate for the lack of slowdown on projectiles with a bit of extra health
|
||||
health = 215
|
||||
light_range = 3
|
||||
light_power = 2.5
|
||||
light_color = LIGHT_COLOR_LAVA
|
||||
projectiletype = /obj/item/projectile/temp/basilisk/magmawing
|
||||
crusher_loot = /obj/item/crusher_trophy/blaster_tubes/magma_wing
|
||||
crusher_drop_mod = 60
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing
|
||||
name = "icewing watcher"
|
||||
desc = "Very rarely, some watchers will eke out an existence far from heat sources. In the absence of warmth, they become icy and fragile but fire much stronger freezing blasts."
|
||||
icon_state = "watcher_icewing"
|
||||
icon_living = "watcher_icewing"
|
||||
icon_aggro = "watcher_icewing"
|
||||
icon_dead = "watcher_icewing_dead"
|
||||
maxHealth = 170
|
||||
health = 170
|
||||
projectiletype = /obj/item/projectile/temp/basilisk/icewing
|
||||
butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/bone = 1) //No sinew; the wings are too fragile to be usable
|
||||
crusher_loot = /obj/item/crusher_trophy/watcher_wing/ice_wing
|
||||
crusher_drop_mod = 30
|
||||
|
||||
/obj/item/projectile/temp/basilisk/magmawing
|
||||
name = "scorching blast"
|
||||
icon_state = "gaussstrong"
|
||||
icon_state = "lava"
|
||||
damage = 5
|
||||
damage_type = BURN
|
||||
nodamage = FALSE
|
||||
temperature = 500 //Heats you up!
|
||||
|
||||
/obj/item/projectile/temp/basilisk/magmawing/on_hit(atom/target, blocked = FALSE)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/mob/living/L = target
|
||||
L.adjust_fire_stacks(0.1)
|
||||
L.IgniteMob()
|
||||
|
||||
/obj/item/projectile/temp/basilisk/icewing
|
||||
damage = 5
|
||||
damage_type = BURN
|
||||
nodamage = FALSE
|
||||
|
||||
/obj/item/projectile/temp/basilisk/icewing/on_hit(atom/target, blocked = FALSE)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/mob/living/L = target
|
||||
L.apply_status_effect(/datum/status_effect/freon/watcher)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
|
||||
fromtendril = TRUE
|
||||
|
||||
@@ -31,10 +31,9 @@
|
||||
var/pre_attack = 0
|
||||
var/pre_attack_icon = "Goliath_preattack"
|
||||
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
|
||||
..()
|
||||
. = ..()
|
||||
handle_preattack()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/proc/handle_preattack()
|
||||
@@ -58,8 +57,8 @@
|
||||
if(!isturf(tturf))
|
||||
return
|
||||
if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen
|
||||
visible_message("<span class='warning'>The [src.name] digs its tentacles under [target.name]!</span>")
|
||||
new /obj/effect/goliath_tentacle/original(tturf)
|
||||
visible_message("<span class='warning'>[src] digs its tentacles under [target]!</span>")
|
||||
new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src)
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
icon_state = icon_aggro
|
||||
pre_attack = 0
|
||||
@@ -87,62 +86,106 @@
|
||||
throw_message = "does nothing to the tough hide of the"
|
||||
pre_attack_icon = "goliath2"
|
||||
crusher_loot = /obj/item/crusher_trophy/goliath_tentacle
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
|
||||
loot = list()
|
||||
stat_attack = UNCONSCIOUS
|
||||
robust_searching = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/make_shiny()
|
||||
name = "precursor goliath"
|
||||
real_name = name
|
||||
desc = "Due to their stone hide, goliaths are biologically immortal, although future generations evolved to look much different. This goliath is likely a very early ancestor to many others here, and at least several centuries old."
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
|
||||
. = ..()
|
||||
if(prob(1))
|
||||
new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient
|
||||
name = "ancient goliath"
|
||||
desc = "Goliaths are biologically immortal, and rare specimens have survived for centuries. This one is clearly ancient, and its tentacles constantly churn the earth around it."
|
||||
icon_state = "Goliath"
|
||||
icon_living = "Goliath"
|
||||
icon_aggro = "Goliath_alert"
|
||||
icon_dead = "Goliath_dead"
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
speed = 4
|
||||
pre_attack_icon = "Goliath_preattack"
|
||||
throw_message = "does nothing to the rocky hide of the"
|
||||
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/bone = 2)
|
||||
crusher_drop_mod = 30
|
||||
wander = FALSE
|
||||
var/list/cached_tentacle_turfs
|
||||
var/turf/last_location
|
||||
var/tentacle_recheck_cooldown = 100
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/Life()
|
||||
. = ..()
|
||||
if(isturf(loc))
|
||||
if(!LAZYLEN(cached_tentacle_turfs) || loc != last_location || tentacle_recheck_cooldown <= world.time)
|
||||
LAZYCLEARLIST(cached_tentacle_turfs)
|
||||
last_location = loc
|
||||
tentacle_recheck_cooldown = world.time + initial(tentacle_recheck_cooldown)
|
||||
for(var/turf/open/T in orange(4, loc))
|
||||
LAZYADD(cached_tentacle_turfs, T)
|
||||
for(var/t in cached_tentacle_turfs)
|
||||
if(isopenturf(t))
|
||||
if(prob(10))
|
||||
new /obj/effect/temp_visual/goliath_tentacle(t, src)
|
||||
else
|
||||
cached_tentacle_turfs -= t
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
|
||||
fromtendril = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril/make_shiny()
|
||||
return //Precursor goliaths don't come from tendrils!
|
||||
|
||||
//tentacles
|
||||
/obj/effect/goliath_tentacle
|
||||
name = "Goliath tentacle"
|
||||
/obj/effect/temp_visual/goliath_tentacle
|
||||
name = "goliath tentacle"
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Goliath_tentacle"
|
||||
var/latched = FALSE
|
||||
anchored = TRUE
|
||||
icon_state = "Goliath_tentacle_spawn"
|
||||
layer = BELOW_MOB_LAYER
|
||||
var/mob/living/spawner
|
||||
|
||||
/obj/effect/goliath_tentacle/Initialize()
|
||||
/obj/effect/temp_visual/goliath_tentacle/Initialize(mapload, mob/living/new_spawner)
|
||||
. = ..()
|
||||
if(locate(/obj/effect/temp_visual/goliath_tentacle) in loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
if(!QDELETED(new_spawner))
|
||||
spawner = new_spawner
|
||||
if(ismineralturf(loc))
|
||||
var/turf/closed/mineral/M = loc
|
||||
M.gets_drilled()
|
||||
addtimer(CALLBACK(src, .proc/Trip), 10)
|
||||
deltimer(timerid)
|
||||
timerid = addtimer(CALLBACK(src, .proc/tripanim), 7, TIMER_STOPPABLE)
|
||||
|
||||
/obj/effect/goliath_tentacle/original/Initialize()
|
||||
/obj/effect/temp_visual/goliath_tentacle/original/Initialize(mapload, new_spawner)
|
||||
. = ..()
|
||||
for(var/obj/effect/goliath_tentacle/original/O in loc)//No more GG NO RE from 2+ goliaths simultaneously tentacling you
|
||||
if(O != src)
|
||||
qdel(src)
|
||||
var/list/directions = GLOB.cardinals.Copy()
|
||||
for(var/i in 1 to 3)
|
||||
var/spawndir = pick_n_take(directions)
|
||||
var/turf/T = get_step(src,spawndir)
|
||||
var/turf/T = get_step(src, spawndir)
|
||||
if(T)
|
||||
new /obj/effect/goliath_tentacle(T)
|
||||
new /obj/effect/temp_visual/goliath_tentacle(T, spawner)
|
||||
|
||||
/obj/effect/goliath_tentacle/proc/Trip()
|
||||
for(var/mob/living/M in src.loc)
|
||||
visible_message("<span class='danger'>The [src.name] grabs hold of [M.name]!</span>")
|
||||
M.Stun(100)
|
||||
M.adjustBruteLoss(rand(10,15))
|
||||
/obj/effect/temp_visual/goliath_tentacle/proc/tripanim()
|
||||
icon_state = "Goliath_tentacle_wiggle"
|
||||
deltimer(timerid)
|
||||
timerid = addtimer(CALLBACK(src, .proc/trip), 3, TIMER_STOPPABLE)
|
||||
|
||||
/obj/effect/temp_visual/goliath_tentacle/proc/trip()
|
||||
var/latched = FALSE
|
||||
for(var/mob/living/L in loc)
|
||||
if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD)
|
||||
continue
|
||||
visible_message("<span class='danger'>[src] grabs hold of [L]!</span>")
|
||||
L.Stun(100)
|
||||
L.adjustBruteLoss(rand(10,15))
|
||||
latched = TRUE
|
||||
if(!latched)
|
||||
qdel(src)
|
||||
retract()
|
||||
else
|
||||
QDEL_IN(src, 50)
|
||||
deltimer(timerid)
|
||||
timerid = addtimer(CALLBACK(src, .proc/retract), 10, TIMER_STOPPABLE)
|
||||
|
||||
/obj/effect/temp_visual/goliath_tentacle/proc/retract()
|
||||
icon_state = "Goliath_tentacle_retract"
|
||||
deltimer(timerid)
|
||||
timerid = QDEL_IN(src, 7)
|
||||
|
||||
@@ -110,13 +110,18 @@
|
||||
del_on_death = 1
|
||||
stat_attack = UNCONSCIOUS
|
||||
robust_searching = 1
|
||||
shiny_chance = 5
|
||||
var/dwarf_mob = FALSE
|
||||
var/mob/living/carbon/human/stored_mob
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/make_shiny()
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random/Initialize()
|
||||
. = ..()
|
||||
if(prob(5))
|
||||
new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf
|
||||
name = "dwarf legion"
|
||||
real_name = name
|
||||
desc = "On the rare occasion that a human with dwarfism falls to a legion, they can become infested like any other."
|
||||
desc = "You can still see what was once a rather small human under the shifting mass of corruption."
|
||||
icon_state = "dwarf_legion"
|
||||
icon_living = "dwarf_legion"
|
||||
icon_aggro = "dwarf_legion"
|
||||
@@ -124,6 +129,8 @@
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
speed = 2 //faster!
|
||||
crusher_drop_mod = 20
|
||||
dwarf_mob = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/death(gibbed)
|
||||
visible_message("<span class='warning'>The skulls on [src] wail in anger as they flee from their dying host!</span>")
|
||||
@@ -134,6 +141,8 @@
|
||||
stored_mob = null
|
||||
else if(fromtendril)
|
||||
new /obj/effect/mob_spawn/human/corpse/charredskeleton(T)
|
||||
else if(dwarf_mob)
|
||||
new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/dwarf(T)
|
||||
else
|
||||
new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested(T)
|
||||
..(gibbed)
|
||||
@@ -177,14 +186,16 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H)
|
||||
visible_message("<span class='warning'>[name] burrows into the flesh of [H]!</span>")
|
||||
var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L = new(H.loc)
|
||||
var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L
|
||||
if(H.dna.check_mutation(DWARFISM)) //dwarf legions aren't just fluff!
|
||||
L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc)
|
||||
else
|
||||
L = new(H.loc)
|
||||
visible_message("<span class='warning'>[L] staggers to their feet!</span>")
|
||||
H.death()
|
||||
H.adjustBruteLoss(1000)
|
||||
L.stored_mob = H
|
||||
H.forceMove(L)
|
||||
if(H.dna.check_mutation(DWARFISM))
|
||||
L.make_shiny() //dwarf legions aren't just fluff!
|
||||
qdel(src)
|
||||
|
||||
//Advanced Legion is slightly tougher to kill and can raise corpses (revive other legions)
|
||||
@@ -251,6 +262,10 @@
|
||||
|
||||
//Legion infested mobs
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/dwarf/equip(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
H.dna.add_mutation(DWARFISM)
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize()
|
||||
var/type = pickweight(list("Miner" = 66, "Ashwalker" = 10, "Golem" = 10,"Clown" = 10, pick(list("Shadow", "YeOlde","Operative", "Cultist")) = 4))
|
||||
switch(type)
|
||||
|
||||
@@ -20,17 +20,11 @@
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
var/icon_aggro = null
|
||||
var/shiny = FALSE //If this mob is a much rarer version of its normal self
|
||||
var/shiny_chance = 1 //If this chance passes, the mob will somehow be different from normal ones
|
||||
var/crusher_drop_mod = 5
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/Initialize(mapload)
|
||||
. = ..()
|
||||
apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
if(prob(shiny_chance))
|
||||
shiny = TRUE
|
||||
make_shiny()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/proc/make_shiny() //Override this on a per-mob basis
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/Aggro()
|
||||
..()
|
||||
@@ -64,7 +58,7 @@
|
||||
/mob/living/simple_animal/hostile/asteroid/death(gibbed)
|
||||
SSblackbox.add_details("mobs_killed_mining","[src.type]")
|
||||
var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
|
||||
if(C && crusher_loot && prob(((C.total_damage/maxHealth)) * 5) + shiny) //on average, you'll need to kill 20 creatures before getting the item
|
||||
if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 20 creatures before getting the item
|
||||
spawn_crusher_loot()
|
||||
..(gibbed)
|
||||
|
||||
|
||||
@@ -734,7 +734,7 @@
|
||||
visible_message("[src] grabs [held_item] out of [C]'s hand!", "<span class='notice'>You snag [held_item] out of [C]'s hand!</span>", "<span class='italics'>You hear the sounds of wings flapping furiously.</span>")
|
||||
return held_item
|
||||
|
||||
to_chat(src, "<span class='warning'>There is nothing of interest to take!</spawn>")
|
||||
to_chat(src, "<span class='warning'>There is nothing of interest to take!</span>")
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/parrot/verb/drop_held_item_player()
|
||||
@@ -896,7 +896,7 @@
|
||||
else
|
||||
speak += pick("...alive?", "This isn't parrot heaven!", "I live, I die, I live again!", "The void fades!")
|
||||
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/Life()
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
|
||||
@@ -99,6 +99,11 @@
|
||||
K = apply_status_effect(STATUS_EFFECT_KNOCKDOWN, amount, updating)
|
||||
return K
|
||||
|
||||
///////////////////////////////// FROZEN /////////////////////////////////////
|
||||
|
||||
/mob/living/proc/IsFrozen()
|
||||
return has_status_effect(/datum/status_effect/freon)
|
||||
|
||||
///////////////////////////////////// STUN ABSORPTION /////////////////////////////////////
|
||||
|
||||
/mob/living/proc/add_stun_absorption(key, duration, priority, message, self_message, examine_message)
|
||||
|
||||
+13
-13
@@ -587,7 +587,7 @@
|
||||
var/turf/T = get_turf(client.eye)
|
||||
stat("Location:", COORD(T))
|
||||
stat("CPU:", "[world.cpu]")
|
||||
stat("Instances:", "[world.contents.len]")
|
||||
stat("Instances:", "[num2text(world.contents.len, 10)]")
|
||||
GLOB.stat_entry()
|
||||
config.stat_entry()
|
||||
stat(null)
|
||||
@@ -950,18 +950,18 @@
|
||||
/mob/vv_get_dropdown()
|
||||
. = ..()
|
||||
. += "---"
|
||||
.["Gib"] = "?_src_=vars;gib=\ref[src]"
|
||||
.["Give Spell"] = "?_src_=vars;give_spell=\ref[src]"
|
||||
.["Remove Spell"] = "?_src_=vars;remove_spell=\ref[src]"
|
||||
.["Give Disease"] = "?_src_=vars;give_disease=\ref[src]"
|
||||
.["Toggle Godmode"] = "?_src_=vars;godmode=\ref[src]"
|
||||
.["Drop Everything"] = "?_src_=vars;drop_everything=\ref[src]"
|
||||
.["Regenerate Icons"] = "?_src_=vars;regenerateicons=\ref[src]"
|
||||
.["Make Space Ninja"] = "?_src_=vars;ninja=\ref[src]"
|
||||
.["Show player panel"] = "?_src_=vars;mob_player_panel=\ref[src]"
|
||||
.["Toggle Build Mode"] = "?_src_=vars;build_mode=\ref[src]"
|
||||
.["Assume Direct Control"] = "?_src_=vars;direct_control=\ref[src]"
|
||||
.["Offer Control to Ghosts"] = "?_src_=vars;offer_control=\ref[src]"
|
||||
.["Gib"] = "?_src_=vars;[HrefToken()];gib=\ref[src]"
|
||||
.["Give Spell"] = "?_src_=vars;[HrefToken()];give_spell=\ref[src]"
|
||||
.["Remove Spell"] = "?_src_=vars;[HrefToken()];remove_spell=\ref[src]"
|
||||
.["Give Disease"] = "?_src_=vars;[HrefToken()];give_disease=\ref[src]"
|
||||
.["Toggle Godmode"] = "?_src_=vars;[HrefToken()];godmode=\ref[src]"
|
||||
.["Drop Everything"] = "?_src_=vars;[HrefToken()];drop_everything=\ref[src]"
|
||||
.["Regenerate Icons"] = "?_src_=vars;[HrefToken()];regenerateicons=\ref[src]"
|
||||
.["Make Space Ninja"] = "?_src_=vars;[HrefToken()];ninja=\ref[src]"
|
||||
.["Show player panel"] = "?_src_=vars;[HrefToken()];mob_player_panel=\ref[src]"
|
||||
.["Toggle Build Mode"] = "?_src_=vars;[HrefToken()];build_mode=\ref[src]"
|
||||
.["Assume Direct Control"] = "?_src_=vars;[HrefToken()];direct_control=\ref[src]"
|
||||
.["Offer Control to Ghosts"] = "?_src_=vars;[HrefToken()];offer_control=\ref[src]"
|
||||
|
||||
/mob/vv_get_var(var_name)
|
||||
switch(var_name)
|
||||
|
||||
@@ -385,7 +385,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
return
|
||||
for(var/mob/dead/observer/O in GLOB.player_list)
|
||||
if(O.client)
|
||||
to_chat(O, "<span class='ghostalert'>[message][(enter_link) ? " [enter_link]" : ""]<span>")
|
||||
to_chat(O, "<span class='ghostalert'>[message][(enter_link) ? " [enter_link]" : ""]</span>")
|
||||
if(ghost_sound)
|
||||
SEND_SOUND(O, sound(ghost_sound))
|
||||
if(flashwindow)
|
||||
|
||||
Reference in New Issue
Block a user