mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 23:53:47 +01:00
Merge branch 'master' of github.com:Baystation12/Baystation12
Conflicts: config/config.txt
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
/mob/dead/dust() //ghosts can't be vaporised.
|
||||
return
|
||||
|
||||
/mob/dead/gib() //ghosts can't be gibbed.
|
||||
return
|
||||
@@ -1,8 +1,3 @@
|
||||
|
||||
/obj/hud/proc/ghost_hud()
|
||||
station_explosion = new h_type( src )
|
||||
station_explosion.icon = 'station_explosion.dmi'
|
||||
station_explosion.icon_state = "start"
|
||||
station_explosion.layer = 20
|
||||
station_explosion.mouse_opacity = 0
|
||||
station_explosion.screen_loc = "1,3"
|
||||
return
|
||||
@@ -71,6 +71,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(key)
|
||||
var/mob/dead/observer/ghost = new(src)
|
||||
ghost.key = key
|
||||
if(timeofdeath)
|
||||
ghost.timeofdeath = timeofdeath
|
||||
verbs -= /mob/proc/ghost
|
||||
if (ghost.client)
|
||||
ghost.client.eye = ghost
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
//This is the proc for gibbing a mob. Cannot gib ghosts.
|
||||
//added different sort of gibs and animations. N
|
||||
/mob/proc/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
// flick("gibbed-m", animation)
|
||||
gibs(loc, viruses, dna)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
|
||||
//This is the proc for turning a mob into ash. Mostly a copy of gib code (above).
|
||||
//Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here.
|
||||
//Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N
|
||||
/mob/proc/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
// flick("dust-m", animation)
|
||||
new /obj/effect/decal/ash(loc)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
|
||||
/mob/proc/death(gibbed)
|
||||
timeofdeath = world.time
|
||||
|
||||
var/cancel = 0
|
||||
for(var/mob/M in world)
|
||||
if(M.client && (M.stat != DEAD))
|
||||
cancel = 1
|
||||
break
|
||||
if(!cancel)
|
||||
world << "<B>Everyone is dead! Resetting in 30 seconds!</B>"
|
||||
|
||||
spawn(300)
|
||||
for(var/mob/M in world)
|
||||
if(M.client && (M.stat != DEAD))
|
||||
world << "Aborting world restart!"
|
||||
return
|
||||
|
||||
feedback_set_details("end_error","no live players")
|
||||
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
|
||||
sleep(50)
|
||||
|
||||
log_game("Rebooting because of no live players")
|
||||
world.Reboot()
|
||||
return
|
||||
|
||||
return ..(gibbed)
|
||||
@@ -15,7 +15,8 @@
|
||||
if(facehugger.stat == CONSCIOUS)
|
||||
var/image/activeIndicator = image('alien.dmi', loc = facehugger, icon_state = "facehugger_active")
|
||||
activeIndicator.override = 1
|
||||
client.images += activeIndicator
|
||||
if(client)
|
||||
client.images += activeIndicator
|
||||
|
||||
/mob/living/carbon/alien/IsAdvancedToolUser()
|
||||
return has_fine_manipulation
|
||||
@@ -0,0 +1,39 @@
|
||||
/mob/living/carbon/alien/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("gibbed-a", animation)
|
||||
xgibs(loc, viruses)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
/mob/living/carbon/alien/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("dust-a", animation)
|
||||
new /obj/effect/decal/remains/xeno(loc)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
@@ -11,6 +11,7 @@
|
||||
src.stand_icon = new /icon('alien.dmi', "aliend_s")
|
||||
src.lying_icon = new /icon('alien.dmi', "aliend_l")
|
||||
src.resting_icon = new /icon('alien.dmi', "aliend_sleep")
|
||||
src.running_icon = new /icon('alien.dmi', "aliend_running")
|
||||
src.icon = src.stand_icon
|
||||
update_clothing()
|
||||
src << "\blue Your icons have been generated!"
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
src.stand_icon = new /icon('alien.dmi', "alienh_s")
|
||||
src.lying_icon = new /icon('alien.dmi', "alienh_l")
|
||||
src.resting_icon = new /icon('alien.dmi', "alienh_sleep")
|
||||
src.running_icon = new /icon('alien.dmi', "alienh_running")
|
||||
src.icon = src.stand_icon
|
||||
update_clothing()
|
||||
src << "\blue Your icons have been generated!"
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
src.stand_icon = new /icon('alien.dmi', "aliens_s")
|
||||
src.lying_icon = new /icon('alien.dmi', "aliens_l")
|
||||
src.resting_icon = new /icon('alien.dmi', "aliens_sleep")
|
||||
src.running_icon = new /icon('alien.dmi', "aliens_running")
|
||||
src.icon = src.stand_icon
|
||||
update_clothing()
|
||||
src << "\blue Your icons have been generated!"
|
||||
|
||||
@@ -37,14 +37,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
stand_icon = new /icon('alien.dmi', "alien_s")
|
||||
lying_icon = new /icon('alien.dmi', "alien_l")
|
||||
resting_icon = new /icon('alien.dmi', "alienh_sleep")
|
||||
running_icon = new /icon('alien.dmi', "alienh_running")
|
||||
icon = stand_icon
|
||||
update_clothing()
|
||||
src << "\blue Your icons have been generated!"
|
||||
@@ -90,7 +91,7 @@
|
||||
flick("flash", flash)
|
||||
|
||||
// if (stat == 2 && client)
|
||||
// gib(1)
|
||||
// gib()
|
||||
// return
|
||||
|
||||
// else if (stat == 2 && !client)
|
||||
@@ -105,7 +106,7 @@
|
||||
switch (severity)
|
||||
if (1.0)
|
||||
b_loss += 500
|
||||
gib(1)
|
||||
gib()
|
||||
return
|
||||
|
||||
if (2.0)
|
||||
@@ -336,6 +337,13 @@
|
||||
else
|
||||
icon = resting_icon
|
||||
|
||||
else if(!lying)
|
||||
if(update_icon)
|
||||
if(m_intent == "run")
|
||||
icon = running_icon
|
||||
else
|
||||
icon = stand_icon
|
||||
|
||||
overlays += body_lying
|
||||
|
||||
if (face_lying)
|
||||
@@ -741,7 +749,7 @@ In all, this is a lot like the monkey code. /N
|
||||
|
||||
if ("help")
|
||||
if(!sleeping_willingly)
|
||||
sleeping = 0
|
||||
sleeping = max(0,sleeping-5)
|
||||
resting = 0
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
@@ -783,7 +791,7 @@ In all, this is a lot like the monkey code. /N
|
||||
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=r_hand'>[(r_hand ? text("[]", r_hand) : "Nothing")]</A>
|
||||
<BR><B>Head:</B> <A href='?src=\ref[src];item=head'>[(head ? text("[]", head) : "Nothing")]</A>
|
||||
<BR><B>(Exo)Suit:</B> <A href='?src=\ref[src];item=suit'>[(wear_suit ? text("[]", wear_suit) : "Nothing")]</A>
|
||||
<BR><A href='?src=\ref[src];item=pockets'>Empty Pockets</A>
|
||||
<BR><A href='?src=\ref[src];item=pockets'>Empty Pouches</A>
|
||||
<BR><A href='?src=\ref[user];mach_close=mob[name]'>Close</A>
|
||||
<BR>"}
|
||||
user << browse(dat, text("window=mob[name];size=340x480"))
|
||||
|
||||
@@ -380,7 +380,7 @@
|
||||
src.drowsyness--
|
||||
src.eye_blurry = max(2, src.eye_blurry)
|
||||
if (prob(5))
|
||||
src.sleeping = 1
|
||||
src.sleeping += 1
|
||||
src.Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
src.verbs -= /mob/living/carbon/alien/humanoid/verb/ventcrawl
|
||||
src.stand_icon = new /icon('alien.dmi', "queen_s")
|
||||
src.lying_icon = new /icon('alien.dmi', "queen_l")
|
||||
src.resting_icon = new /icon('alien.dmi', "queen_sleep")
|
||||
src.running_icon = new /icon('alien.dmi', "queen_running")
|
||||
src.icon = src.stand_icon
|
||||
update_clothing()
|
||||
src << "\blue Your icons have been generated!"
|
||||
|
||||
@@ -39,14 +39,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
flick("flash", flash)
|
||||
/*
|
||||
if (stat == 2 && client)
|
||||
gib(1)
|
||||
gib()
|
||||
return
|
||||
|
||||
else if (stat == 2 && !client)
|
||||
@@ -93,7 +93,7 @@
|
||||
switch (severity)
|
||||
if (1.0)
|
||||
b_loss += 500
|
||||
gib(1)
|
||||
gib()
|
||||
return
|
||||
|
||||
if (2.0)
|
||||
@@ -490,7 +490,7 @@
|
||||
|
||||
if ("help")
|
||||
if(!sleeping_willingly)
|
||||
sleeping = 0
|
||||
sleeping = max(0,sleeping-5)
|
||||
resting = 0
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
|
||||
@@ -303,7 +303,7 @@
|
||||
drowsyness--
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if (prob(5))
|
||||
sleeping = 1
|
||||
sleeping += 1
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/carbon/brain
|
||||
var
|
||||
obj/item/device/mmi/container = null
|
||||
obj/item/container = null
|
||||
timeofhostdeath = 0
|
||||
|
||||
New()
|
||||
@@ -31,9 +31,14 @@
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
Login()
|
||||
if(!container)
|
||||
verbs += /mob/proc/ghost
|
||||
|
||||
Logout()
|
||||
verbs -= /mob/proc/ghost
|
||||
/mob/living/carbon/brain/Login()
|
||||
..()
|
||||
|
||||
if (!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (!container || !istype(container, /obj/item/device/mmi))
|
||||
src.verbs += /mob/proc/ghost
|
||||
|
||||
return
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/brain/death(gibbed)
|
||||
if(!gibbed && container)//If not gibbed but in a container.
|
||||
if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container.
|
||||
for(var/mob/O in viewers(container, null))
|
||||
O.show_message(text("\red <B>[]'s MMI flatlines!</B>", src), 1, "\red You hear something flatline.", 2)
|
||||
container.icon_state = "mmi_dead"
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
/obj/hud/proc/brain_hud(var/ui_style='screen1_old.dmi')
|
||||
station_explosion = new h_type( src )
|
||||
station_explosion.icon = 'station_explosion.dmi'
|
||||
station_explosion.icon_state = "start"
|
||||
station_explosion.layer = 20
|
||||
station_explosion.mouse_opacity = 0
|
||||
station_explosion.screen_loc = "1,3"
|
||||
|
||||
blurry = new h_type( src )
|
||||
blurry.screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
|
||||
clamp_values()
|
||||
|
||||
|
||||
|
||||
proc
|
||||
|
||||
clamp_values()
|
||||
@@ -141,7 +143,7 @@
|
||||
drowsyness--
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if (prob(5))
|
||||
sleeping = 1
|
||||
sleeping += 1
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
@@ -318,4 +320,5 @@
|
||||
if(bodytemperature > 409)
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/mob/living/carbon/brain/say(var/message)
|
||||
if(!container) return //No container, can't speak, bucko./N
|
||||
if(!(container && istype(container, /obj/item/device/mmi)))
|
||||
return //No MMI, can't speak, bucko./N
|
||||
else ..()
|
||||
@@ -35,7 +35,7 @@
|
||||
if(prob(src.getBruteLoss() - 50))
|
||||
src.gib()
|
||||
|
||||
/mob/living/carbon/gib(give_medal,ex_act)
|
||||
/mob/living/carbon/gib()
|
||||
for(var/mob/M in src)
|
||||
if(M in src.stomach_contents)
|
||||
src.stomach_contents.Remove(M)
|
||||
@@ -43,7 +43,7 @@
|
||||
for(var/mob/N in viewers(src, null))
|
||||
if(N.client)
|
||||
N.show_message(text("\red <B>[M] bursts out of [src]!</B>"), 2)
|
||||
. = ..(ex_act)
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/attack_hand(mob/M as mob)
|
||||
if (M.hand)
|
||||
@@ -168,9 +168,9 @@
|
||||
/mob/living/carbon/proc/swap_hand()
|
||||
var/obj/item/item_in_hand = src.get_active_hand()
|
||||
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
|
||||
if(item_in_hand.twohanded == 1)
|
||||
if(item_in_hand.wielded == 1)
|
||||
usr << text("Your other hand is too busy holding the []",item_in_hand.name)
|
||||
if(istype(item_in_hand,/obj/item/weapon/twohanded))
|
||||
if(item_in_hand:wielded == 1)
|
||||
usr << "<span class='warning'>Your other hand is too busy holding the [item_in_hand.name]</span>"
|
||||
return
|
||||
src.hand = !( src.hand )
|
||||
if (!( src.hand ))
|
||||
@@ -193,7 +193,6 @@
|
||||
var/status = ""
|
||||
var/brutedamage = org.brute_dam
|
||||
var/burndamage = org.burn_dam
|
||||
|
||||
if(halloss > 0)
|
||||
if(prob(30))
|
||||
brutedamage += halloss
|
||||
@@ -215,6 +214,9 @@
|
||||
status += "blistered"
|
||||
else if(burndamage > 0)
|
||||
status += "numb"
|
||||
if(org.destroyed)
|
||||
status = "MISSING!"
|
||||
|
||||
if(status == "")
|
||||
status = "OK"
|
||||
src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.getDisplayName(),status),1)
|
||||
@@ -228,10 +230,10 @@
|
||||
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.w_uniform.add_fingerprint(M)
|
||||
src.sleeping = max(0,src.sleeping-5)
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping = 0
|
||||
src.resting = 0
|
||||
src.sleeping = max(0,src.sleeping-5)
|
||||
if(src.sleeping == 0)
|
||||
src.resting = 0
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
|
||||
@@ -1,3 +1,44 @@
|
||||
/mob/living/carbon/human/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("gibbed-h", animation)
|
||||
hgibs(loc, viruses, dna)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
/mob/living/carbon/human/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("dust-h", animation)
|
||||
new /obj/effect/decal/remains/human(loc)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
|
||||
/mob/living/carbon/human/death(gibbed)
|
||||
if(halloss > 0 && (!gibbed))
|
||||
//hallucination = 0
|
||||
@@ -61,8 +102,11 @@
|
||||
/mob/living/carbon/human/proc/ChangeToHusk()
|
||||
if(mutations & HUSK)
|
||||
return
|
||||
var/datum/organ/external/head/head = get_organ("head")
|
||||
if(head)
|
||||
head.disfigured = 1
|
||||
name = get_visible_name()
|
||||
mutations |= HUSK
|
||||
real_name = "Unknown"
|
||||
update_body()
|
||||
return
|
||||
|
||||
|
||||
@@ -164,7 +164,9 @@
|
||||
|
||||
if ("faint")
|
||||
message = "<B>[src]</B> faints."
|
||||
src.sleeping = 1
|
||||
if(src.sleeping)
|
||||
return //Can't faint while asleep
|
||||
src.sleeping += 10 //Short-short nap
|
||||
m_type = 1
|
||||
|
||||
if ("cough")
|
||||
@@ -524,6 +526,8 @@
|
||||
continue //skip monkeys and leavers
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
if(findtext(message," snores.")) //Because we have so many sleeping people.
|
||||
continue
|
||||
if(M.stat == 2 && M.client.ghost_sight && !(M in viewers(src,null)))
|
||||
M.show_message(message)
|
||||
|
||||
|
||||
@@ -41,14 +41,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -70,11 +70,17 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/New()
|
||||
|
||||
..()
|
||||
|
||||
|
||||
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
if(!dna) dna = new /datum/dna(null)
|
||||
if(!dna)
|
||||
dna = new /datum/dna(null)
|
||||
|
||||
new /datum/organ/external/chest(src)
|
||||
new /datum/organ/external/groin(src)
|
||||
@@ -123,19 +129,24 @@
|
||||
gender = MALE
|
||||
g = "m"
|
||||
|
||||
spawn (1)
|
||||
if(!stand_icon)
|
||||
stand_icon = new /icon('human.dmi', "body_[g]_s")
|
||||
if(!lying_icon)
|
||||
lying_icon = new /icon('human.dmi', "body_[g]_l")
|
||||
spawn(1)
|
||||
stand_icon = new /icon('human.dmi', "body_[g]_s")
|
||||
lying_icon = new /icon('human.dmi', "body_[g]_l")
|
||||
icon = stand_icon
|
||||
update_clothing()
|
||||
|
||||
src << "\blue Your icons have been generated!"
|
||||
|
||||
|
||||
spawn(10) // Failsafe for.. weirdness.
|
||||
update_clothing()
|
||||
update_body()
|
||||
|
||||
vessel = new/datum/reagents(600)
|
||||
vessel.my_atom = src
|
||||
vessel.add_reagent("blood",560)
|
||||
spawn(1) fixblood()
|
||||
spawn(1)
|
||||
fixblood()
|
||||
|
||||
..()
|
||||
/*var/known_languages = list()
|
||||
@@ -164,15 +175,15 @@
|
||||
iconL.Remove(G.icon_state)
|
||||
if(nums.len >= 3)
|
||||
var/obj/effect/decal/cleanable/blood/drip/D = pick(nums)
|
||||
D.blood_DNA.len++
|
||||
D.blood_DNA[D.blood_DNA.len] = list(dna.unique_enzymes,dna.b_type)
|
||||
D.blood_DNA[dna.unique_enzymes] = dna.b_type
|
||||
if(virus2)
|
||||
D.virus2 = virus2.getcopy()
|
||||
return
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/drip/this = new(T)
|
||||
this.icon_state = pick(iconL)
|
||||
this.blood_DNA = list(list(dna.unique_enzymes,dna.b_type))
|
||||
this.blood_DNA = list()
|
||||
this.blood_DNA[dna.unique_enzymes] = dna.b_type
|
||||
this.blood_owner = src
|
||||
|
||||
if(virus2)
|
||||
@@ -267,6 +278,7 @@
|
||||
var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80
|
||||
if (hungry >= 70) tally += hungry/50
|
||||
|
||||
|
||||
for(var/organ in list("l_leg","l_foot","r_leg","r_foot"))
|
||||
var/datum/organ/external/o = organs["[organ]"]
|
||||
if(o.broken)
|
||||
@@ -335,7 +347,7 @@
|
||||
// /obj/item/clothing/head/bomb_hood(src)
|
||||
/*
|
||||
if (stat == 2 && client)
|
||||
gib(1)
|
||||
gib()
|
||||
return
|
||||
|
||||
else if (stat == 2 && !client)
|
||||
@@ -350,7 +362,7 @@
|
||||
if (1.0)
|
||||
b_loss += 500
|
||||
if (!prob(getarmor(null, "bomb")))
|
||||
gib(1,1)
|
||||
gib()
|
||||
return
|
||||
else
|
||||
var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
|
||||
@@ -555,8 +567,8 @@
|
||||
return
|
||||
if (!( W.flags & ONBACK ))
|
||||
return
|
||||
if(W.twohanded && W.wielded)
|
||||
usr << "Unwield the [initial(W.name)] first!"
|
||||
if(istype(W,/obj/item/weapon/twohanded) && W:wielded)
|
||||
usr << "<span class='warning'>Unwield the [initial(W.name)] first!</span>"
|
||||
return
|
||||
u_equip(W)
|
||||
back = W
|
||||
@@ -1177,37 +1189,8 @@
|
||||
overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
belt.screen_loc = ui_belt
|
||||
|
||||
if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see the face
|
||||
if (wear_id)
|
||||
if (istype(wear_id, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if (id.registered_name)
|
||||
name = id.registered_name
|
||||
else
|
||||
name = "Unknown"
|
||||
else if (istype(wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if (pda.owner)
|
||||
name = pda.owner
|
||||
else
|
||||
name = "Unknown"
|
||||
else
|
||||
name = "Unknown"
|
||||
else
|
||||
if (wear_id)
|
||||
if (istype(wear_id, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if (id.registered_name != real_name)
|
||||
name = "[real_name] (as [id.registered_name])"
|
||||
|
||||
|
||||
else if (istype(wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if (pda.owner)
|
||||
if (pda.owner != real_name)
|
||||
name = "[real_name] (as [pda.owner])"
|
||||
else
|
||||
name = real_name
|
||||
name = get_visible_name()
|
||||
|
||||
if (wear_id)
|
||||
wear_id.screen_loc = ui_id
|
||||
@@ -1484,7 +1467,6 @@
|
||||
del(face_standing)
|
||||
del(face_lying)
|
||||
return
|
||||
|
||||
if(!facial_hair_style || !hair_style) return//Seems people like to lose their icons, this should stop the runtimes for now
|
||||
del(face_standing)
|
||||
del(face_lying)
|
||||
@@ -1552,7 +1534,6 @@
|
||||
/obj/effect/equip_e/human/process()
|
||||
if (item)
|
||||
item.add_fingerprint(source)
|
||||
var/item_loc = 0
|
||||
if (!item)
|
||||
switch(place)
|
||||
if("mask")
|
||||
@@ -1615,218 +1596,119 @@
|
||||
//SN src = null
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
switch(place)
|
||||
if("mask")
|
||||
if(target.wear_mask)
|
||||
item_loc = 1
|
||||
if("l_hand")
|
||||
if(target.l_hand)
|
||||
item_loc = 1
|
||||
if("r_hand")
|
||||
if(target.r_hand)
|
||||
item_loc = 1
|
||||
if("gloves")
|
||||
if(target.gloves)
|
||||
item_loc = 1
|
||||
if("eyes")
|
||||
if(target.glasses)
|
||||
item_loc = 1
|
||||
if("l_ear")
|
||||
if(target.l_ear)
|
||||
item_loc = 1
|
||||
if("r_ear")
|
||||
if(target.r_ear)
|
||||
item_loc = 1
|
||||
if("head")
|
||||
if(target.head)
|
||||
item_loc = 1
|
||||
if("shoes")
|
||||
if(target.shoes)
|
||||
item_loc = 1
|
||||
if("belt")
|
||||
if(target.belt)
|
||||
item_loc = 1
|
||||
if("suit")
|
||||
if(target.wear_suit)
|
||||
item_loc = 1
|
||||
if("back")
|
||||
if(target.back)
|
||||
item_loc = 1
|
||||
if("uniform")
|
||||
if(target.w_uniform)
|
||||
item_loc = 1
|
||||
if("s_store")
|
||||
if(target.s_store)
|
||||
item_loc = 1
|
||||
if("h_store")
|
||||
if(target.h_store)
|
||||
item_loc = 1
|
||||
if("id")
|
||||
if(target.wear_id)
|
||||
item_loc = 1
|
||||
if("internal")
|
||||
if (target.internal)
|
||||
item_loc = 1
|
||||
if("handcuff")
|
||||
if (target.handcuffed)
|
||||
item_loc = 1
|
||||
|
||||
var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel")
|
||||
if (item && !L.Find(place) && !item_loc)
|
||||
if ((item && !( L.Find(place) )))
|
||||
if(isrobot(source) && place != "handcuff")
|
||||
del(src)
|
||||
return
|
||||
for(var/mob/O in viewers(target, null))
|
||||
O.show_message(text("\red <B>[] is trying to put \a [] on []</B>", source, item, target), 1)
|
||||
else
|
||||
if (place == "syringe")
|
||||
for(var/mob/O in viewers(target, null))
|
||||
O.show_message(text("\red <B>[] is trying to inject []!</B>", source, target), 1)
|
||||
else
|
||||
if (place == "pill")
|
||||
for(var/mob/O in viewers(target, null))
|
||||
O.show_message(text("\red <B>[] is trying to force [] to swallow []!</B>", source, target, item), 1)
|
||||
else
|
||||
if(place == "fuel")
|
||||
for(var/mob/O in viewers(target, null))
|
||||
O.show_message(text("\red [source] is trying to force [target] to eat the [item:content]!"), 1)
|
||||
var/message=null
|
||||
switch(place)
|
||||
if("syringe")
|
||||
message = text("\red <B>[] is trying to inject []!</B>", source, target)
|
||||
if("pill")
|
||||
message = text("\red <B>[] is trying to force [] to swallow []!</B>", source, target, item)
|
||||
if("fuel")
|
||||
message = text("\red [source] is trying to force [target] to eat the [item:content]!")
|
||||
if("drink")
|
||||
message = text("\red <B>[] is trying to force [] to swallow a gulp of []!</B>", source, target, item)
|
||||
if("dnainjector")
|
||||
message = text("\red <B>[] is trying to inject [] with the []!</B>", source, target, item)
|
||||
if("mask")
|
||||
if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_mask, target)
|
||||
else
|
||||
if (place == "drink")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s head!</B>", source, target.wear_mask, target)
|
||||
/* if("headset")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s face!</B>", source, target.w_radio, target) */
|
||||
if("l_hand")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s left hand!</B>", source, target.l_hand, target)
|
||||
if("r_hand")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s right hand!</B>", source, target.r_hand, target)
|
||||
if("gloves")
|
||||
if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.gloves, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s hands!</B>", source, target.gloves, target)
|
||||
if("eyes")
|
||||
if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.glasses, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s eyes!</B>", source, target.glasses, target)
|
||||
if("l_ear")
|
||||
if(istype(target.l_ear, /obj/item/clothing)&&!target.l_ear:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.l_ear, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s left ear!</B>", source, target.l_ear, target)
|
||||
if("r_ear")
|
||||
if(istype(target.r_ear, /obj/item/clothing)&&!target.r_ear:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.r_ear, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s right ear!</B>", source, target.r_ear, target)
|
||||
if("head")
|
||||
if(istype(target.head, /obj/item/clothing)&&!target.head:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.head, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s head!</B>", source, target.head, target)
|
||||
if("shoes")
|
||||
if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.shoes, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s feet!</B>", source, target.shoes, target)
|
||||
if("belt")
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s belt!</B>", source, target.belt, target)
|
||||
if("suit")
|
||||
if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
|
||||
if("back")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s back!</B>", source, target.back, target)
|
||||
if("handcuff")
|
||||
message = text("\red <B>[] is trying to unhandcuff []!</B>", source, target)
|
||||
if("uniform")
|
||||
if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
|
||||
if("s_store")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s suit!</B>", source, target.s_store, target)
|
||||
if("h_store")
|
||||
message = text("\red <B>[] is trying to empty []'s hat!</B>", source, target)
|
||||
if("pockets")
|
||||
for(var/obj/item/weapon/mousetrap/MT in list(target.l_store, target.r_store))
|
||||
if(MT.armed)
|
||||
for(var/mob/O in viewers(target, null))
|
||||
O.show_message(text("\red <B>[] is trying to force [] to swallow a gulp of []!</B>", source, target, item), 1)
|
||||
else
|
||||
if (place == "dnainjector")
|
||||
for(var/mob/O in viewers(target, null))
|
||||
O.show_message(text("\red <B>[] is trying to inject [] with the []!</B>", source, target, item), 1)
|
||||
else
|
||||
var/message = null
|
||||
switch(place)
|
||||
if("mask")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their mask removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) mask</font>")
|
||||
if(istype(target.wear_mask, /obj/item/clothing)&&!target.wear_mask:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_mask, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s head!</B>", source, target.wear_mask, target)
|
||||
/* if("headset")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s face!</B>", source, target.w_radio, target) */
|
||||
if("l_hand")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their left hand item removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) left hand item</font>")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s left hand!</B>", source, target.l_hand, target)
|
||||
if("r_hand")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their right hand item removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) right hand item</font>")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s right hand!</B>", source, target.r_hand, target)
|
||||
if("gloves")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their gloves removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) gloves</font>")
|
||||
if(istype(target.gloves, /obj/item/clothing)&&!target.gloves:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.gloves, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s hands!</B>", source, target.gloves, target)
|
||||
if("eyes")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their eyewear removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) eyewear</font>")
|
||||
if(istype(target.glasses, /obj/item/clothing)&&!target.glasses:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.glasses, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s eyes!</B>", source, target.glasses, target)
|
||||
if("l_ear")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their left ear item removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) left ear item</font>")
|
||||
if(istype(target.l_ear, /obj/item/clothing)&&!target.l_ear:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.l_ear, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s left ear!</B>", source, target.l_ear, target)
|
||||
if("r_ear")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their right ear item removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) right ear item</font>")
|
||||
if(istype(target.r_ear, /obj/item/clothing)&&!target.r_ear:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.r_ear, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s right ear!</B>", source, target.r_ear, target)
|
||||
if("head")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their hat removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) hat</font>")
|
||||
if(istype(target.head, /obj/item/clothing)&&!target.head:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.head, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s head!</B>", source, target.head, target)
|
||||
if("shoes")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their shoes removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) shoes</font>")
|
||||
if(istype(target.shoes, /obj/item/clothing)&&!target.shoes:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.shoes, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s feet!</B>", source, target.shoes, target)
|
||||
if("belt")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their belt item removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) belt item</font>")
|
||||
message = text("\red <B>[] is trying to take off the [] from []'s belt!</B>", source, target.belt, target)
|
||||
if("suit")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their suit removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) suit</font>")
|
||||
if(istype(target.wear_suit, /obj/item/clothing)&&!target.wear_suit:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.wear_suit, target)
|
||||
if("back")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their back item removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) back item</font>")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s back!</B>", source, target.back, target)
|
||||
if("handcuff")
|
||||
message = text("\red <B>[] is trying to unhandcuff []!</B>", source, target)
|
||||
if("uniform")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their uniform removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) uniform</font>")
|
||||
if(istype(target.w_uniform, /obj/item/clothing)&&!target.w_uniform:canremove)
|
||||
message = text("\red <B>[] fails to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s body!</B>", source, target.w_uniform, target)
|
||||
if("s_store")
|
||||
message = text("\red <B>[] is trying to take off \a [] from []'s suit!</B>", source, target.s_store, target)
|
||||
if("h_store")
|
||||
message = text("\red <B>[] is trying to empty []'s hat!</B>", source, target)
|
||||
if("pockets")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their pockets emptied by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to empty [target.name]'s ([target.ckey]) pockets</font>")
|
||||
for(var/obj/item/weapon/mousetrap/MT in list(target.l_store, target.r_store))
|
||||
if(MT.armed)
|
||||
for(var/mob/O in viewers(target, null))
|
||||
if(O == source)
|
||||
O.show_message(text("\red <B>You reach into the [target]'s pockets, but there was a live mousetrap in there!</B>"), 1)
|
||||
else
|
||||
O.show_message(text("\red <B>[source] reaches into [target]'s pockets and sets off a hidden mousetrap!</B>"), 1)
|
||||
target.u_equip(MT)
|
||||
if (target.client)
|
||||
target.client.screen -= MT
|
||||
MT.loc = source.loc
|
||||
MT.triggered(source, source.hand ? "l_hand" : "r_hand")
|
||||
MT.layer = OBJ_LAYER
|
||||
return
|
||||
message = text("\red <B>[] is trying to empty []'s pockets!!</B>", source, target)
|
||||
if("CPR")
|
||||
if (target.cpr_time + 3 >= world.time)
|
||||
//SN src = null
|
||||
del(src)
|
||||
return
|
||||
message = text("\red <B>[] is trying perform CPR on []!</B>", source, target)
|
||||
if("id")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their ID removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) ID</font>")
|
||||
message = text("\red <B>[] is trying to take off [] from []'s uniform!</B>", source, target.wear_id, target)
|
||||
if("internal")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their internals toggled by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to toggle [target.name]'s ([target.ckey]) internals</font>")
|
||||
if (target.internal)
|
||||
message = text("\red <B>[] is trying to remove []'s internals</B>", source, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to set on []'s internals.</B>", source, target)
|
||||
else
|
||||
for(var/mob/M in viewers(target, null))
|
||||
M.show_message(message, 1)
|
||||
if(O == source)
|
||||
O.show_message(text("\red <B>You reach into the [target]'s pockets, but there was a live mousetrap in there!</B>"), 1)
|
||||
else
|
||||
O.show_message(text("\red <B>[source] reaches into [target]'s pockets and sets off a hidden mousetrap!</B>"), 1)
|
||||
target.u_equip(MT)
|
||||
if (target.client)
|
||||
target.client.screen -= MT
|
||||
MT.loc = source.loc
|
||||
MT.triggered(source, source.hand ? "l_hand" : "r_hand")
|
||||
MT.layer = OBJ_LAYER
|
||||
return
|
||||
message = text("\red <B>[] is trying to empty []'s pockets!!</B>", source, target)
|
||||
if("CPR")
|
||||
if (target.cpr_time >= world.time + 3)
|
||||
//SN src = null
|
||||
del(src)
|
||||
return
|
||||
message = text("\red <B>[] is trying perform CPR on []!</B>", source, target)
|
||||
if("id")
|
||||
message = text("\red <B>[] is trying to take off [] from []'s uniform!</B>", source, target.wear_id, target)
|
||||
if("internal")
|
||||
if (target.internal)
|
||||
message = text("\red <B>[] is trying to remove []'s internals</B>", source, target)
|
||||
else
|
||||
message = text("\red <B>[] is trying to set on []'s internals.</B>", source, target)
|
||||
for(var/mob/M in viewers(target, null))
|
||||
M.show_message(message, 1)
|
||||
spawn( 40 )
|
||||
done()
|
||||
return
|
||||
@@ -1846,7 +1728,7 @@ It can still be worn/put on as normal.
|
||||
if(source.loc != s_loc) return
|
||||
if(target.loc != t_loc) return
|
||||
if(LinkBlocked(s_loc,t_loc)) return
|
||||
if(item && source.equipped() != item) return
|
||||
if(item && source.equipped() != item) return
|
||||
if ((source.restrained() || source.stat)) return
|
||||
switch(place)
|
||||
if("mask")
|
||||
@@ -2453,18 +2335,33 @@ It can still be worn/put on as normal.
|
||||
return if_no_id
|
||||
return
|
||||
|
||||
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
|
||||
/mob/living/carbon/human/proc/get_visible_name()
|
||||
if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see their face
|
||||
return get_id_name("Unknown")
|
||||
else
|
||||
var/face_name = get_face_name()
|
||||
var/id_name = get_id_name("")
|
||||
if(id_name && (id_name != face_name))
|
||||
return "[face_name] as ([id_name])"
|
||||
return face_name
|
||||
|
||||
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
|
||||
/mob/living/carbon/human/proc/get_face_name()
|
||||
var/datum/organ/external/head/head = get_organ("head")
|
||||
if(!head || head.disfigured) //no face!
|
||||
return "Unknown"
|
||||
else
|
||||
return "[real_name]"
|
||||
|
||||
//gets name from ID or PDA itself, ID inside PDA doesn't matter
|
||||
//Useful when player is being seen by other mobs
|
||||
/mob/living/carbon/human/proc/get_visible_name(var/if_no_id = "Unknown")
|
||||
/mob/living/carbon/human/proc/get_id_name(var/if_no_id = "Unknown")
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if (istype(pda))
|
||||
. = pda.owner
|
||||
else if (istype(id))
|
||||
. = id.registered_name
|
||||
else
|
||||
return if_no_id
|
||||
return
|
||||
if(istype(pda)) return pda.owner
|
||||
if(istype(id)) return id.registered_name
|
||||
return if_no_id
|
||||
|
||||
//gets ID card object from special clothes slot or null.
|
||||
/mob/living/carbon/human/proc/get_idcard()
|
||||
@@ -2856,4 +2753,4 @@ It can still be worn/put on as normal.
|
||||
else
|
||||
reset_view(0)
|
||||
remoteobserve = null
|
||||
src.tkdisable = 0
|
||||
src.tkdisable = 0
|
||||
|
||||
@@ -119,35 +119,36 @@
|
||||
if("lizard")
|
||||
attack_verb = "scratch"
|
||||
if("plant")
|
||||
attack_verb = "slash"
|
||||
attack_verb = "whip"
|
||||
else
|
||||
attack_verb = "punch"
|
||||
|
||||
if(M.type == /mob/living/carbon/human/tajaran)
|
||||
if(istajaran(M))
|
||||
attack_verb = "slash"
|
||||
|
||||
var/damage = rand(0, 5)
|
||||
if(!damage)
|
||||
if(M.mutantrace == "lizard")
|
||||
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
|
||||
else if(M.type != /mob/living/carbon/human/tajaran)
|
||||
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
|
||||
else if (M.type == /mob/living/carbon/human/tajaran)
|
||||
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
|
||||
switch(attack_verb)
|
||||
if(("slash") || ("scratch"))
|
||||
playsound(loc, 'slashmiss.ogg', 25, 1, -1)
|
||||
else
|
||||
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
|
||||
|
||||
visible_message("\red <B>[M] has attempted to [attack_verb] [src]!</B>")
|
||||
return 0
|
||||
|
||||
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
|
||||
if(M.mutations & HULK) damage += 5
|
||||
if(M.mutantrace == "lizard")
|
||||
damage += 10
|
||||
playsound(loc, 'slice.ogg', 25, 1, -1)
|
||||
else if(M.type != /mob/living/carbon/human/tajaran)
|
||||
playsound(loc, "punch", 25, 1, -1)
|
||||
else if (M.type == /mob/living/carbon/human/tajaran)
|
||||
damage += 10
|
||||
playsound(loc, 'slice.ogg', 25, 1, -1)
|
||||
|
||||
switch(attack_verb)
|
||||
if(("slash") || ("scratch"))
|
||||
damage += 10
|
||||
playsound(loc, 'slice.ogg', 25, 1, -1)
|
||||
else
|
||||
playsound(loc, "punch", 25, 1, -1)
|
||||
|
||||
visible_message("\red <B>[M] has [attack_verb]ed [src]!</B>")
|
||||
|
||||
@@ -157,11 +158,10 @@
|
||||
apply_effect(2, WEAKEN, armor_block)
|
||||
UpdateDamageIcon()
|
||||
|
||||
|
||||
if("disarm")
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Disarmed [src.name] ([src.ckey])</font>")
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been disarmed by [M.name] ([M.ckey])</font>")
|
||||
|
||||
|
||||
log_admin("ATTACK: [src] ([src.ckey]) disarmed [M] ([M.ckey]).")
|
||||
log_attack("<font color='red'>[M.name] ([M.ckey]) disarmed [src.name] ([src.ckey])</font>")
|
||||
|
||||
@@ -212,4 +212,7 @@
|
||||
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
|
||||
visible_message("\red <B>[M] attempted to disarm [src]!</B>")
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
|
||||
return
|
||||
@@ -1,3 +1,13 @@
|
||||
//Instead of setting real_name = "Unknown", use this when necessary.
|
||||
//It will prevent the cloned-as-unknown bug and various other derpy things.
|
||||
/mob/living/carbon/human/proc/disfigure_face()
|
||||
var/datum/organ/external/head/head = get_organ("head")
|
||||
if(head && !head.disfigured)
|
||||
head.disfigured = 1
|
||||
name = get_visible_name()
|
||||
src << "\red Your face has become disfigured."
|
||||
warn_flavor_changed()
|
||||
|
||||
/mob/living/carbon/human/proc/HealDamage(zone, brute, burn)
|
||||
var/datum/organ/external/E = get_organ(zone)
|
||||
if(istype(E, /datum/organ/external))
|
||||
|
||||
@@ -37,7 +37,7 @@ emp_act
|
||||
if(check_shields(P.damage, "the [P.name]"))
|
||||
P.on_hit(src, 2)
|
||||
return 2
|
||||
return (..())
|
||||
return (..(P , def_zone))
|
||||
|
||||
|
||||
/mob/living/carbon/human/getarmor(var/def_zone, var/type)
|
||||
@@ -119,10 +119,9 @@ emp_act
|
||||
if(!I || !user) return 0
|
||||
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting))
|
||||
|
||||
var/hit_area = affecting.display_name
|
||||
|
||||
|
||||
|
||||
if((user != src) && check_shields(I.force, "the [I.name]"))
|
||||
return 0
|
||||
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
|
||||
/mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5)
|
||||
//If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such.
|
||||
if(stat) prob_slip += 50
|
||||
if(stat)
|
||||
prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense.
|
||||
|
||||
//Do we have magboots or such on if so no slip
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP))
|
||||
|
||||
@@ -457,10 +457,17 @@
|
||||
return null
|
||||
|
||||
update_canmove()
|
||||
if(paralysis || stunned || weakened || resting || buckled || (changeling && changeling.changeling_fakedeath))
|
||||
if(sleeping || paralysis || stunned || weakened || resting || buckled || (changeling && changeling.changeling_fakedeath))
|
||||
canmove = 0
|
||||
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
/* for(var/obj/effect/stop/S in geaslist)
|
||||
if(S.victim == src)
|
||||
geaslist -= S
|
||||
del(S)
|
||||
*/
|
||||
|
||||
handle_breath(datum/gas_mixture/breath)
|
||||
if(nodamage || (mutations & mNobreath))
|
||||
@@ -545,7 +552,7 @@
|
||||
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
|
||||
Paralyse(3) // 3 gives them one second to wake up and run away a bit!
|
||||
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
|
||||
sleeping = max(sleeping, 4)
|
||||
sleeping = max(src.sleeping+2, 10)
|
||||
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
if(prob(20) && isbreathing)
|
||||
spawn(0) emote(pick("giggle", "laugh"))
|
||||
@@ -819,7 +826,7 @@
|
||||
drowsyness--
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if (prob(5))
|
||||
sleeping = 1
|
||||
sleeping += 1
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
@@ -964,7 +971,7 @@
|
||||
if (silent)
|
||||
silent--
|
||||
|
||||
if (paralysis || stunned || weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
|
||||
if (resting || sleeping || paralysis || stunned || weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
|
||||
if (stunned > 0)
|
||||
AdjustStunned(-1)
|
||||
stat = 0
|
||||
@@ -978,6 +985,22 @@
|
||||
blinded = 1
|
||||
lying = 1
|
||||
stat = 1
|
||||
|
||||
if (sleeping > 0)
|
||||
handle_dreams()
|
||||
adjustHalLoss(-5)
|
||||
blinded = 1
|
||||
lying = 1
|
||||
stat = 1
|
||||
if (prob(10) && health && !hal_crit)
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
sleeping--
|
||||
|
||||
if(resting)
|
||||
lying = 1
|
||||
stat = 0
|
||||
|
||||
var/h = hand
|
||||
hand = 0
|
||||
drop_item()
|
||||
@@ -998,15 +1021,14 @@
|
||||
if (stuttering) stuttering--
|
||||
if (slurring) slurring--
|
||||
|
||||
//Carn: marker 4#
|
||||
var/datum/organ/external/head/head = organs["head"]
|
||||
if(head && !head.disfigured)
|
||||
if(head.brute_dam >= 45 || head.burn_dam >= 45)
|
||||
head.disfigured = 1
|
||||
emote("scream")
|
||||
real_name = "Unknown"
|
||||
src << "\red Your face has become disfigured."
|
||||
disfigure_face()
|
||||
face_op_stage = 0.0
|
||||
warn_flavor_changed()
|
||||
|
||||
var/blood_max = 0
|
||||
for(var/name in organs)
|
||||
var/datum/organ/external/temp = organs[name]
|
||||
@@ -1064,11 +1086,6 @@
|
||||
if(!druggy)
|
||||
see_invisible = 2
|
||||
|
||||
else if (type == /mob/living/carbon/human/tajaran)
|
||||
// sight |= SEE_MOBS
|
||||
// sight |= SEE_OBJS
|
||||
see_in_dark = 8
|
||||
|
||||
else if (seer)
|
||||
var/obj/effect/rune/R = locate() in loc
|
||||
if (istype(R) && R.word1 == wordsee && R.word2 == wordhell && R.word3 == wordjoin)
|
||||
@@ -1125,22 +1142,41 @@
|
||||
if (mutantrace == "lizard" || mutantrace == "metroid")
|
||||
see_in_dark = 3
|
||||
see_invisible = 1
|
||||
|
||||
else if (istajaran(src))
|
||||
see_in_dark = 8
|
||||
|
||||
else if (druggy) // If drugged~
|
||||
see_in_dark = 2
|
||||
//see_invisible regulated by drugs themselves.
|
||||
else
|
||||
see_in_dark = 2
|
||||
var/seer = 0
|
||||
for(var/obj/effect/rune/R in world)
|
||||
if(loc==R.loc && R.word1==wordsee && R.word2==wordhell && R.word3==wordjoin)
|
||||
seer = 1
|
||||
if(!seer)
|
||||
see_invisible = 0
|
||||
|
||||
else if(istype(head, /obj/item/clothing/head/helmet/welding))
|
||||
var/seer = 0
|
||||
for(var/obj/effect/rune/R in world)
|
||||
if(loc==R.loc && R.word1==wordsee && R.word2==wordhell && R.word3==wordjoin)
|
||||
seer = 1
|
||||
if(!seer)
|
||||
see_invisible = 0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
else if(istype(head, /obj/item/clothing/head/helmet/welding)) // wat. This is never fucking called.
|
||||
if(!head:up && tinted_weldhelh)
|
||||
see_in_dark = 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* HUD shit goes here, as long as it doesn't modify src.sight flags */
|
||||
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
|
||||
if(istype(glasses, /obj/item/clothing/glasses/hud/health))
|
||||
@@ -1242,7 +1278,7 @@
|
||||
|
||||
if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]"
|
||||
|
||||
if(resting || lying || sleeping) rest.icon_state = "rest[(resting || lying || sleeping) ? 1 : 0]"
|
||||
if(rest) rest.icon_state = "rest[(resting || lying || sleeping) ? 1 : 0]"
|
||||
|
||||
|
||||
if (toxin || hal_screwyhud == 4) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
|
||||
@@ -1251,26 +1287,26 @@
|
||||
//NOTE: the alerts dont reset when youre out of danger. dont blame me,
|
||||
//blame the person who coded them. Temporary fix added.
|
||||
|
||||
switch(bodytemperature) //310.055 optimal body temp
|
||||
|
||||
if(370 to INFINITY)
|
||||
bodytemp.icon_state = "temp4"
|
||||
if(350 to 370)
|
||||
bodytemp.icon_state = "temp3"
|
||||
if(335 to 350)
|
||||
bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
bodytemp.icon_state = "temp-4"
|
||||
if(bodytemp)
|
||||
switch(bodytemperature) //310.055 optimal body temp
|
||||
if(370 to INFINITY)
|
||||
bodytemp.icon_state = "temp4"
|
||||
if(350 to 370)
|
||||
bodytemp.icon_state = "temp3"
|
||||
if(335 to 350)
|
||||
bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
bodytemp.icon_state = "temp-4"
|
||||
|
||||
if(!client) return 0 //Wish we did not need these
|
||||
client.screen -= hud_used.blurry
|
||||
@@ -1388,7 +1424,17 @@
|
||||
if(!M.nodamage)
|
||||
M.adjustBruteLoss(5)
|
||||
nutrition += 10
|
||||
|
||||
/* One day.
|
||||
if(nutrition <= 100)
|
||||
if (prob (1))
|
||||
src << "\red Your stomach rumbles."
|
||||
if(nutrition <= 50)
|
||||
if (prob (25))
|
||||
bruteloss++
|
||||
if (prob (5))
|
||||
src << "You feel very weak."
|
||||
weakened += rand(2, 3)
|
||||
*/
|
||||
handle_changeling()
|
||||
if (mind)
|
||||
if (mind.special_role == "Changeling" && changeling)
|
||||
@@ -1436,14 +1482,7 @@
|
||||
/*
|
||||
// Commented out so hunger system won't be such shock
|
||||
// Damage and effect from not eating
|
||||
if(nutrition <= 50)
|
||||
if (prob (0.1))
|
||||
src << "\red Your stomach rumbles."
|
||||
if (prob (10))
|
||||
bruteloss++
|
||||
if (prob (5))
|
||||
src << "You feel very weak."
|
||||
weakened += rand(2, 3)
|
||||
|
||||
*/
|
||||
/*
|
||||
snippets
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/mob/living/carbon/human/say(var/message)
|
||||
/* if(src.mutantrace == "lizard")
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
message = dd_replaceText(message, "s", stutter("ss"))*///Just here for reference. -- Erthilo
|
||||
if(src.mutantrace == "metroid" && prob(5))
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
if(copytext(message, 1, 2) == ";")
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/alt_name = ""
|
||||
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
|
||||
var/mob/living/carbon/human/H = src
|
||||
alt_name = " (as [H.get_visible_name()])"
|
||||
alt_name = " (as [H.get_id_name("Unknown")])"
|
||||
// Mute disability
|
||||
if (src.disabilities & 64)
|
||||
return
|
||||
|
||||
@@ -44,12 +44,4 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
*/
|
||||
@@ -110,7 +110,7 @@
|
||||
src << "\red <i>[pick("This subject is incompatable", \
|
||||
"This subject does not have a life energy", "This subject is empty", \
|
||||
"I am not satisified", "I can not feed from this subject", \
|
||||
"I do not feel nurished", "This subject is not food")]...</i>"
|
||||
"I do not feel nourished", "This subject is not food")]...</i>"
|
||||
|
||||
sleep(rand(15,45))
|
||||
|
||||
@@ -136,13 +136,7 @@
|
||||
if(Victim && !rabid && !attacked)
|
||||
if(Victim.LAssailant && Victim.LAssailant != Victim)
|
||||
if(prob(50))
|
||||
var/Found = 0
|
||||
for(var/mob/F in Friends)
|
||||
if(F == Victim.LAssailant)
|
||||
Found = 1
|
||||
|
||||
if(!Found)
|
||||
Friends += Victim.LAssailant
|
||||
Friends |= Victim.LAssailant
|
||||
|
||||
if(M.client && istype(src, /mob/living/carbon/human))
|
||||
if(prob(85))
|
||||
|
||||
@@ -1,5 +1,46 @@
|
||||
/mob/living/carbon/monkey/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("gibbed-m", animation)
|
||||
gibs(loc, viruses, dna)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
/mob/living/carbon/monkey/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("dust-m", animation)
|
||||
new /obj/effect/decal/ash(loc)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/death(gibbed)
|
||||
if(src.stat == 2)
|
||||
if(src.stat == DEAD)
|
||||
return
|
||||
|
||||
if (src.healths)
|
||||
|
||||
@@ -43,14 +43,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
using = new src.h_type( src )
|
||||
|
||||
@@ -333,7 +333,7 @@
|
||||
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
|
||||
Paralyse(3) // 3 gives them one second to wake up and run away a bit!
|
||||
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
|
||||
src.sleeping = max(src.sleeping, 2)
|
||||
src.sleeping = max(src.sleeping+2, 10)
|
||||
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
if(prob(20))
|
||||
spawn(0) emote(pick("giggle", "laugh"))
|
||||
@@ -591,26 +591,26 @@
|
||||
//NOTE: the alerts dont reset when youre out of danger. dont blame me,
|
||||
//blame the person who coded them. Temporary fix added.
|
||||
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
|
||||
if(345 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp4"
|
||||
if(335 to 345)
|
||||
src.bodytemp.icon_state = "temp3"
|
||||
if(327 to 335)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(316 to 327)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 316)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
src.bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-4"
|
||||
if(bodytemp)
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
if(345 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp4"
|
||||
if(335 to 345)
|
||||
src.bodytemp.icon_state = "temp3"
|
||||
if(327 to 335)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(316 to 327)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 316)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(295 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
if(280 to 295)
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
if(260 to 280)
|
||||
src.bodytemp.icon_state = "temp-3"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-4"
|
||||
|
||||
src.client.screen -= src.hud_used.blurry
|
||||
src.client.screen -= src.hud_used.druggy
|
||||
|
||||
@@ -677,6 +677,14 @@
|
||||
|
||||
/mob/living/carbon/monkey/ex_act(severity)
|
||||
flick("flash", flash)
|
||||
/* if (stat == 2 && client)
|
||||
gib()
|
||||
return
|
||||
|
||||
if (stat == 2 && !client)
|
||||
gibs(loc, viruses)
|
||||
del(src)
|
||||
return*/
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
if (stat != 2)
|
||||
|
||||
@@ -217,11 +217,50 @@
|
||||
SetParalysis(0)
|
||||
SetStunned(0)
|
||||
SetWeakened(0)
|
||||
src.radiation = 0
|
||||
src.nutrition = 400
|
||||
src.bodytemperature = initial(src.bodytemperature)
|
||||
//src.health = 100
|
||||
if(ishuman(src))
|
||||
src.heal_overall_damage(1000, 1000)
|
||||
//M.updatehealth()
|
||||
src.buckled = initial(src.buckled)
|
||||
src.handcuffed = initial(src.handcuffed)
|
||||
if(istype(src,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
for(var/name in H.organs)
|
||||
var/datum/organ/external/e = H.organs[name]
|
||||
e.brute_dam = 0.0
|
||||
e.burn_dam = 0.0
|
||||
e.bandaged = 0.0
|
||||
e.max_damage = initial(e.max_damage)
|
||||
e.bleeding = 0
|
||||
e.open = 0
|
||||
e.broken = 0
|
||||
e.destroyed = 0
|
||||
e.perma_injury = 0
|
||||
e.update_icon()
|
||||
for(var/datum/organ/wound/W in e.wounds)
|
||||
if(W.bleeding || !W.is_healing)
|
||||
W.stopbleeding()
|
||||
del(H.vessel)
|
||||
H.vessel = new/datum/reagents(560)
|
||||
H.vessel.my_atom = H
|
||||
H.vessel.add_reagent("blood",560)
|
||||
spawn(1)
|
||||
H.fixblood()
|
||||
H.pale = 0
|
||||
H.update_body()
|
||||
H.update_face()
|
||||
H.UpdateDamageIcon()
|
||||
if (src.stat > 1)
|
||||
src.stat=0
|
||||
..()
|
||||
src.heal_overall_damage(1000, 1000)
|
||||
src.buckled = initial(src.buckled)
|
||||
src.handcuffed = initial(src.handcuffed)
|
||||
if(src.stat > 1) src.stat = CONSCIOUS
|
||||
if(src.stat > 1)
|
||||
src.stat = CONSCIOUS
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
/mob/living/proc/binarycheck()
|
||||
if (istype(src, /mob/living/silicon/pai)) return
|
||||
if (issilicon(src)) return 1
|
||||
if (!ishuman(src)) return
|
||||
if (istype(src, /mob/living/silicon/pai))
|
||||
return
|
||||
if (issilicon(src))
|
||||
return 1
|
||||
if (!ishuman(src))
|
||||
return
|
||||
var/mob/living/carbon/human/H = src
|
||||
if (H.l_ear || H.r_ear)
|
||||
var/obj/item/device/radio/headset/dongle
|
||||
@@ -64,7 +67,7 @@
|
||||
var/alt_name = ""
|
||||
if (istype(src, /mob/living/carbon/human) && name != real_name)
|
||||
var/mob/living/carbon/human/H = src
|
||||
alt_name = " (as [H.get_visible_name()])"
|
||||
alt_name = " (as [H.get_id_name("Unknown")])"
|
||||
var/italics = 0
|
||||
var/message_range = null
|
||||
var/message_mode = null
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
|
||||
real_name = pickedName
|
||||
name = real_name
|
||||
original_name = real_name
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
loc = loc
|
||||
@@ -329,6 +330,30 @@
|
||||
if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite
|
||||
statelaws()
|
||||
|
||||
if (href_list["track"])
|
||||
var/mob/target = locate(href_list["track"])
|
||||
var/mob/living/silicon/ai/A = locate(href_list["track2"])
|
||||
if(A && target)
|
||||
A.ai_actual_track(target)
|
||||
return
|
||||
|
||||
else if (href_list["faketrack"])
|
||||
var/mob/target = locate(href_list["track"])
|
||||
var/mob/living/silicon/ai/A = locate(href_list["track2"])
|
||||
if(A && target)
|
||||
|
||||
A:cameraFollow = target
|
||||
A << text("Now tracking [] on camera.", target.name)
|
||||
if (usr.machine == null)
|
||||
usr.machine = usr
|
||||
|
||||
while (usr:cameraFollow == target)
|
||||
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
|
||||
sleep(40)
|
||||
continue
|
||||
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
/mob/living/silicon/ai/meteorhit(obj/O as obj)
|
||||
@@ -565,7 +590,7 @@
|
||||
|
||||
malf_picker.use(src)
|
||||
|
||||
//I am the icon meister. Bow fefore me.
|
||||
//I am the icon meister. Bow fefore me. //>fefore
|
||||
/mob/living/silicon/ai/proc/ai_hologram_change()
|
||||
set name = "Change Hologram"
|
||||
set desc = "Change the default hologram available to AI to something else."
|
||||
|
||||
@@ -1,10 +1,2 @@
|
||||
/obj/hud/proc/ai_hud()
|
||||
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
return
|
||||
@@ -12,6 +12,10 @@
|
||||
return 1
|
||||
if (istype(other, /mob/living/silicon/decoy))
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/brain))
|
||||
return 1
|
||||
if (istype(other, /mob/living/silicon/pai))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/ai/say_quote(var/text)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/mob/living/silicon/gib()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
// flick("gibbed-r", animation)
|
||||
robogibs(loc, viruses)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
/mob/living/silicon/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
// flick("dust-r", animation)
|
||||
new /obj/effect/decal/remains/robot(loc)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
@@ -11,6 +11,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
comments
|
||||
ready = 0
|
||||
|
||||
|
||||
|
||||
/datum/paiController
|
||||
var/list/pai_candidates = list()
|
||||
var/list/asked = list()
|
||||
@@ -42,20 +44,39 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
if(href_list["new"])
|
||||
var/datum/paiCandidate/candidate = locate(href_list["candidate"])
|
||||
var/option = href_list["option"]
|
||||
var/t = ""
|
||||
var/maxNameLen = 26
|
||||
|
||||
switch(option)
|
||||
if("name")
|
||||
candidate.name = input("Enter a name for your pAI", "pAI Name", candidate.name) as text
|
||||
t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text
|
||||
if(t)
|
||||
candidate.name = copytext(sanitize(t),1,maxNameLen)
|
||||
if("desc")
|
||||
candidate.description = input("Enter a description for your pAI", "pAI Description", candidate.description) as message
|
||||
t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message
|
||||
if(t)
|
||||
candidate.description = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
if("role")
|
||||
candidate.role = input("Enter a role for your pAI", "pAI Role", candidate.role) as text
|
||||
t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text
|
||||
if(t)
|
||||
candidate.role = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
if("ooc")
|
||||
candidate.comments = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message
|
||||
|
||||
t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message
|
||||
if(t)
|
||||
candidate.comments = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
if("save")
|
||||
candidate.savefile_save(usr)
|
||||
if("load")
|
||||
candidate.savefile_load(usr)
|
||||
//In case people have saved unsanitized stuff.
|
||||
if(candidate.name)
|
||||
candidate.name = copytext(sanitize(candidate.name),1,maxNameLen)
|
||||
if(candidate.description)
|
||||
candidate.description = copytext(sanitize(candidate.description),1,MAX_MESSAGE_LEN)
|
||||
if(candidate.role)
|
||||
candidate.role = copytext(sanitize(candidate.role),1,MAX_MESSAGE_LEN)
|
||||
if(candidate.comments)
|
||||
candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN)
|
||||
|
||||
if("submit")
|
||||
if(candidate)
|
||||
@@ -184,13 +205,16 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
if(c.key == O.key)
|
||||
hasSubmitted = 1
|
||||
if(!hasSubmitted && O.client.be_pai)
|
||||
spawn question(O.client, origin)
|
||||
question(O.client)
|
||||
|
||||
proc/question(var/client/C, var/mob/origin)
|
||||
asked.Add(C.key)
|
||||
asked[C.key] = world.time
|
||||
var/response = alert(C, "[origin] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round")
|
||||
if(response == "Yes")
|
||||
recruitWindow(C.mob)
|
||||
else if (response == "Never for this round")
|
||||
C.be_pai = 0
|
||||
proc/question(var/client/C)
|
||||
spawn(0)
|
||||
if(!C) return
|
||||
asked.Add(C.key)
|
||||
asked[C.key] = world.time
|
||||
var/response = alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round")
|
||||
if(!C) return //handle logouts that happen whilst the alert is waiting for a response.
|
||||
if(response == "Yes")
|
||||
recruitWindow(C.mob)
|
||||
else if (response == "Never for this round")
|
||||
C.be_pai = 0
|
||||
@@ -1,3 +1,45 @@
|
||||
/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
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("gibbed-r", animation)
|
||||
robogibs(loc, viruses)
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
/mob/living/silicon/robot/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
flick("dust-r", animation)
|
||||
new /obj/effect/decal/remains/robot(loc)
|
||||
if(mmi) del(mmi) //Delete the MMI first so that it won't go popping out.
|
||||
|
||||
spawn(15)
|
||||
if(animation) del(animation)
|
||||
if(src) del(src)
|
||||
|
||||
|
||||
/mob/living/silicon/robot/death(gibbed)
|
||||
if (!gibbed)
|
||||
src.emote("deathgasp")
|
||||
|
||||
@@ -38,14 +38,6 @@
|
||||
src.druggy.layer = 17
|
||||
src.druggy.mouse_opacity = 0
|
||||
|
||||
// station explosion cinematic
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
|
||||
var/obj/screen/using
|
||||
|
||||
|
||||
|
||||
@@ -54,12 +54,12 @@
|
||||
src.cell.use(1)
|
||||
else
|
||||
if(src.module_state_1)
|
||||
src.cell.use(5)
|
||||
src.cell.use(5.5)
|
||||
if(src.module_state_2)
|
||||
src.cell.use(5)
|
||||
src.cell.use(5.5)
|
||||
if(src.module_state_3)
|
||||
src.cell.use(5)
|
||||
src.cell.use(1)
|
||||
src.cell.use(5.5)
|
||||
src.cell.use(0.1)
|
||||
src.blinded = 0
|
||||
src.stat = 0
|
||||
else
|
||||
@@ -242,18 +242,18 @@
|
||||
else
|
||||
src.cells.icon_state = "charge-empty"
|
||||
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
|
||||
if(335 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(260 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
if(bodytemp)
|
||||
switch(src.bodytemperature) //310.055 optimal body temp
|
||||
if(335 to INFINITY)
|
||||
src.bodytemp.icon_state = "temp2"
|
||||
if(320 to 335)
|
||||
src.bodytemp.icon_state = "temp1"
|
||||
if(300 to 320)
|
||||
src.bodytemp.icon_state = "temp0"
|
||||
if(260 to 300)
|
||||
src.bodytemp.icon_state = "temp-1"
|
||||
else
|
||||
src.bodytemp.icon_state = "temp-2"
|
||||
|
||||
|
||||
if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]"
|
||||
|
||||
@@ -13,9 +13,10 @@
|
||||
src.real_name += " "
|
||||
src.real_name += "-[ident]"
|
||||
src.name = src.real_name
|
||||
if(!src.connected_ai)
|
||||
/*if(!src.connected_ai)
|
||||
for(var/mob/living/silicon/ai/A in world)
|
||||
src.connected_ai = A
|
||||
A.connected_robots += src
|
||||
break
|
||||
*/
|
||||
return
|
||||
@@ -26,9 +26,9 @@
|
||||
src << "<b>Unit slaved to [connected_ai.name], downloading laws.</b>"
|
||||
lawupdate = 1
|
||||
else
|
||||
laws = new /datum/ai_laws/asimov
|
||||
laws = new /datum/ai_laws/nanotrasen
|
||||
lawupdate = 0
|
||||
src << "<b>Unable to locate an AI, reverting to standard Asimov laws.</b>"
|
||||
src << "<b>Unable to locate an AI, reverting to standard NanoTrasen laws.</b>"
|
||||
else
|
||||
laws = new /datum/ai_laws/antimov
|
||||
lawupdate = 0
|
||||
@@ -265,6 +265,11 @@
|
||||
else
|
||||
stat(null, text("No Cell Inserted!"))
|
||||
|
||||
if(module)
|
||||
internal = locate(/obj/item/weapon/tank/jetpack) in module.modules
|
||||
if(internal)
|
||||
stat("Internal Atmosphere Info", internal.name)
|
||||
stat("Tank Pressure", internal.air_contents.return_pressure())
|
||||
|
||||
/mob/living/silicon/robot/restrained()
|
||||
return 0
|
||||
@@ -1230,4 +1235,4 @@ Frequency:
|
||||
for(var/obj/item/borg/upgrade/flashproof/F in module.modules)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
var
|
||||
list/modules = list()
|
||||
obj/item/emag = null
|
||||
obj/item/borg/upgrade/jetpack = null
|
||||
|
||||
|
||||
emp_act(severity)
|
||||
@@ -24,6 +25,8 @@
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.emag = new /obj/item/toy/sword(src)
|
||||
src.emag.name = "Placeholder Emag Item"
|
||||
// src.jetpack = new /obj/item/toy/sword(src)
|
||||
// src.jetpack.name = "Placeholder Upgrade Item"
|
||||
return
|
||||
|
||||
|
||||
@@ -152,7 +155,7 @@
|
||||
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/melee/baton(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src)
|
||||
// src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)
|
||||
src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -217,9 +220,10 @@
|
||||
..()
|
||||
src.modules += new /obj/item/borg/sight/meson(src)
|
||||
src.emag = new /obj/item/borg/stun(src)
|
||||
src.modules += new /obj/item/weapon/satchel(src)
|
||||
src.modules += new /obj/item/weapon/pickaxe/jackhammer(src)
|
||||
src.modules += new /obj/item/weapon/shovel(src)
|
||||
src.modules += new /obj/item/weapon/satchel/borg(src)
|
||||
src.modules += new /obj/item/weapon/pickaxe/borgdrill(src)
|
||||
// src.modules += new /obj/item/weapon/shovel(src) Uneeded due to buffed drill
|
||||
// src.jetpack += new/obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -231,5 +235,4 @@
|
||||
src.modules += new /obj/item/weapon/melee/energy/sword(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src)
|
||||
src.modules += new /obj/item/weapon/card/emag(src)
|
||||
src.modules += new /obj/item/weapon/tank/jetpack/oxygen(src)
|
||||
return
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
name = "A borg upgrade module."
|
||||
desc = "Protected by FRM."
|
||||
icon = 'module.dmi'
|
||||
icon_state = "id_mod"
|
||||
icon_state = "cyborg_upgrade"
|
||||
var/construction_time = 120
|
||||
var/construction_cost = list("metal"=10000)
|
||||
var/locked = 0
|
||||
@@ -19,6 +19,7 @@
|
||||
/obj/item/borg/upgrade/reset/
|
||||
name = "Borg module reset board"
|
||||
desc = "Used to reset a borg's module. Destroys any other upgrades applied to the borg."
|
||||
icon_state = "cyborg_upgrade1"
|
||||
require_module = 1
|
||||
|
||||
/obj/item/borg/upgrade/reset/action(var/mob/living/silicon/robot/R)
|
||||
@@ -41,6 +42,7 @@
|
||||
name = "Borg Flash-Supression"
|
||||
desc = "A highly advanced, complicated system for supressing incoming flashes directed at the borg's optical processing system."
|
||||
construction_cost = list("metal"=10000,"gold"=2000,"silver"=3000,"glass"=2000, "diamond"=5000)
|
||||
icon_state = "cyborg_upgrade4"
|
||||
require_module = 1
|
||||
|
||||
|
||||
@@ -57,6 +59,7 @@
|
||||
name = "Borg emergancy restart module"
|
||||
desc = "Used to force a restart of a disabled-but-repaired borg, bringing it back online."
|
||||
construction_cost = list("metal"=60000 , "glass"=5000)
|
||||
icon_state = "cyborg_upgrade1"
|
||||
|
||||
|
||||
/obj/item/borg/upgrade/restart/action(var/mob/living/silicon/robot/R)
|
||||
@@ -77,6 +80,7 @@
|
||||
name = "Borg VTEC Module"
|
||||
desc = "Used to kick in a borgs VTEC systems, increasing their speed."
|
||||
construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 5000)
|
||||
icon_state = "cyborg_upgrade2"
|
||||
require_module = 1
|
||||
|
||||
/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R)
|
||||
@@ -91,23 +95,50 @@
|
||||
name = "Borg Rapid Taser Cooling Module"
|
||||
desc = "Used to cool a mounted taser, increasing the potential current in it and thus its recharge rate.."
|
||||
construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 2000, "diamond" = 500)
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
|
||||
|
||||
/obj/item/borg/upgrade/tasercooler/action(var/mob/living/silicon/robot/R)
|
||||
if(R.module != /obj/item/weapon/robot_module/security)
|
||||
if(!istype(R.module, /obj/item/weapon/robot_module/security))
|
||||
R << "Upgrade mounting error! No suitable hardpoint detected!"
|
||||
usr << "There's no mounting point for the module!"
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R
|
||||
var/obj/item/weapon/gun/energy/taser/cyborg/T = locate() in R.module
|
||||
if(!T)
|
||||
T = locate() in R.module.contents
|
||||
if(!T)
|
||||
T = locate() in R.module.modules
|
||||
if(!T)
|
||||
usr << "This cyborg has had its taser removed!"
|
||||
return 0
|
||||
|
||||
if(T.recharge_time <= 2)
|
||||
R << "Maximum cooling achieved for this hardpoint!"
|
||||
usr << "There's no room for another cooling unit!"
|
||||
return 0
|
||||
|
||||
else
|
||||
T.recharge_time = min(2 , T.recharge_time - 4)
|
||||
T.recharge_time = max(2 , T.recharge_time - 4)
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/obj/item/borg/upgrade/jetpack/
|
||||
name = "Mining Borg Jetpack"
|
||||
desc = "A carbon dioxide jetpack suitable for low-gravity mining operations"
|
||||
construction_cost = list("metal"=10000,"plasma"=15000,"uranium" = 20000)
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
|
||||
/obj/item/borg/upgrade/jetpack/action(var/mob/living/silicon/robot/R)
|
||||
if(!istype(R.module, /obj/item/weapon/robot_module/miner))
|
||||
R << "Upgrade mounting error! No suitable hardpoint detected!"
|
||||
usr << "There's no mounting point for the module!"
|
||||
return 0
|
||||
else
|
||||
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide
|
||||
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
|
||||
R.internals = src
|
||||
R.icon_state="Miner+j"
|
||||
return 1
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/human))
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/brain))
|
||||
return 1
|
||||
if (istype(other, /mob/living/silicon/pai))
|
||||
return 1
|
||||
// if (istype(other, /mob/living/silicon/hivebot))
|
||||
// return 1
|
||||
return ..()
|
||||
|
||||
@@ -83,12 +83,23 @@
|
||||
|
||||
var/message_a = say_quote(message)
|
||||
var/rendered = "<i><span class='game say'>Robotic Talk, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
|
||||
|
||||
for (var/mob/living/S in world)
|
||||
if(!S.stat)
|
||||
if(S.robot_talk_understand && (S.robot_talk_understand == robot_talk_understand))
|
||||
S.show_message(rendered, 2)
|
||||
if(S.robot_talk_understand && (S.robot_talk_understand == robot_talk_understand)) // This SHOULD catch everything caught by the one below, but I'm not going to change it.
|
||||
if(istype(S , /mob/living/silicon/ai))
|
||||
var/renderedAI = "<i><span class='game say'>Robotic Talk, <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src]'><span class='name'>[name]</span></a> <span class='message'>[message_a]</span></span></i>"
|
||||
S.show_message(renderedAI, 2)
|
||||
else
|
||||
S.show_message(rendered, 2)
|
||||
|
||||
|
||||
else if (S.binarycheck())
|
||||
S.show_message(rendered, 2)
|
||||
if(istype(S , /mob/living/silicon/ai))
|
||||
var/renderedAI = "<i><span class='game say'>Robotic Talk, <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src]'><span class='name'>[name]</span></a> <span class='message'>[message_a]</span></span></i>"
|
||||
S.show_message(renderedAI, 2)
|
||||
else
|
||||
S.show_message(rendered, 2)
|
||||
|
||||
var/list/listening = hearers(1, src)
|
||||
listening -= src
|
||||
|
||||
+96
-210
@@ -103,38 +103,6 @@
|
||||
/mob/proc/update_clothing()
|
||||
return
|
||||
|
||||
/mob/proc/death(gibbed)
|
||||
timeofdeath = world.time
|
||||
|
||||
var/cancel = 0
|
||||
for(var/mob/M in world)
|
||||
if(M.client && (M.stat != DEAD))
|
||||
cancel = 1
|
||||
break
|
||||
if(!cancel)
|
||||
world << "<B>Everyone is dead! Resetting in 30 seconds!</B>"
|
||||
|
||||
|
||||
|
||||
spawn(300)
|
||||
for(var/mob/M in world)
|
||||
if(M.client && (M.stat != DEAD))
|
||||
world << "Aborting world restart!"
|
||||
return
|
||||
|
||||
//feedback_set_details("end_error","no live players")
|
||||
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
|
||||
sleep(50)
|
||||
|
||||
log_game("Rebooting because of no live players")
|
||||
world.Reboot()
|
||||
return
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
/mob/proc/restrained()
|
||||
if (handcuffed)
|
||||
return 1
|
||||
@@ -191,28 +159,16 @@
|
||||
var/obj/item/W = equipped()
|
||||
|
||||
if (W)
|
||||
if(W.twohanded)
|
||||
if(W.wielded)
|
||||
if(hand)
|
||||
var/obj/item/weapon/offhand/O = r_hand
|
||||
del O
|
||||
else
|
||||
var/obj/item/weapon/offhand/O = l_hand
|
||||
del O
|
||||
W.wielded = 0 //Kinda crude, but gets the job done with minimal pain -Agouri
|
||||
W.name = "[initial(W.name)]" //name reset so people don't see world fireaxes with (unwielded) or (wielded) tags
|
||||
W.update_icon()
|
||||
u_equip(W)
|
||||
if (client)
|
||||
client.screen -= W
|
||||
if (W)
|
||||
W.layer = initial(W.layer)
|
||||
if(target)
|
||||
W.loc = target.loc
|
||||
else
|
||||
W.loc = loc
|
||||
W.dropped(src)
|
||||
if (W)
|
||||
W.layer = initial(W.layer)
|
||||
var/turf/T = get_turf(loc)
|
||||
if (istype(T))
|
||||
T.Entered(W)
|
||||
@@ -235,7 +191,7 @@
|
||||
return r_hand
|
||||
|
||||
/mob/proc/get_inactive_hand()
|
||||
if ( ! hand)
|
||||
if (!hand)
|
||||
return l_hand
|
||||
else
|
||||
return r_hand
|
||||
@@ -650,10 +606,11 @@
|
||||
for (var/mob/living/silicon/decoy/D in world)
|
||||
if (eye)
|
||||
eye = D
|
||||
if (eye)
|
||||
client.eye = eye
|
||||
else
|
||||
client.eye = client.mob
|
||||
if (client)
|
||||
if (eye)
|
||||
client.eye = eye
|
||||
else
|
||||
client.eye = client.mob
|
||||
|
||||
/mob/verb/cancel_camera()
|
||||
set name = "Cancel Camera View"
|
||||
@@ -664,22 +621,7 @@
|
||||
if(src:cameraFollow)
|
||||
src:cameraFollow = null
|
||||
|
||||
|
||||
/client/Topic(href, href_list)
|
||||
if(href_list["priv_msg"])
|
||||
var/client/C = locate(href_list["priv_msg"])
|
||||
if(ismob(C)) //Old stuff can pass in mobs instead of clients
|
||||
var/mob/M = C
|
||||
C = M.client
|
||||
cmd_admin_pm(C,null)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/Topic(href, href_list)
|
||||
if(href_list["priv_msg"]) //for priv_msg references that have yet to be updated to target clients. Forwards it to client/Topic()
|
||||
if(client)
|
||||
client.Topic(href, href_list)
|
||||
|
||||
if(href_list["mach_close"])
|
||||
var/t1 = text("window=[href_list["mach_close"]]")
|
||||
machine = null
|
||||
@@ -728,7 +670,7 @@
|
||||
onclose(usr, "[name]")
|
||||
if(href_list["flavor_change"])
|
||||
update_flavor_text()
|
||||
..()
|
||||
// ..()
|
||||
return
|
||||
|
||||
/mob/proc/get_damage()
|
||||
@@ -754,8 +696,21 @@
|
||||
set category = "IC"
|
||||
set src in oview(1)
|
||||
|
||||
if (!( usr ))
|
||||
if ( !usr || usr==src || !istype(src.loc,/turf) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
|
||||
return
|
||||
|
||||
if(ishuman(usr))
|
||||
if(usr.hand) // if he's using his left hand.
|
||||
var/datum/organ/external/temp = usr:get_organ("l_hand")
|
||||
if(temp.destroyed)
|
||||
usr << "\blue You look at your stump."
|
||||
return
|
||||
else
|
||||
var/datum/organ/external/temp = usr:get_organ("r_hand")
|
||||
if(temp.destroyed)
|
||||
usr << "\blue You look at your stump."
|
||||
return
|
||||
|
||||
if (!( anchored ))
|
||||
usr.pulling = src
|
||||
if(ismob(src))
|
||||
@@ -848,110 +803,6 @@
|
||||
for(var/mob/M in viewers())
|
||||
M.see(message)
|
||||
|
||||
//This is the proc for gibbing a mob. Cannot gib ghosts. Removed the medal reference,
|
||||
//added different sort of gibs and animations. N
|
||||
/mob/proc/gib(var/ex_act = 0)
|
||||
|
||||
if (istype(src, /mob/dead/observer))
|
||||
gibs(loc, viruses)
|
||||
return
|
||||
if(!isrobot(src))//Cyborgs no-longer "die" when gibbed.
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
if(ishuman(src))
|
||||
flick("gibbed-h", animation)
|
||||
else if(ismonkey(src))
|
||||
flick("gibbed-m", animation)
|
||||
else if(ismetroid(src))
|
||||
flick("gibbed-m", animation)
|
||||
else if(iscrab(src))
|
||||
flick("gibbed-m", animation)
|
||||
else if(iscorgi(src))
|
||||
flick("gibbed-m", animation)
|
||||
else if(iscat(src))
|
||||
flick("gibbed-m", animation) //New-has monkey gib effect versus robogib
|
||||
else if(isalien(src))
|
||||
flick("gibbed-a", animation)
|
||||
else
|
||||
flick("gibbed-r", animation)
|
||||
|
||||
spawn()
|
||||
if(key)
|
||||
if(istype(src, /mob/living/silicon))
|
||||
robogibs(loc, viruses)
|
||||
else if (istype(src, /mob/living/carbon/alien))
|
||||
xgibs(loc, viruses)
|
||||
else
|
||||
gibs(loc, viruses, dna)
|
||||
|
||||
/* else if(key)
|
||||
if(istype(src, /mob/living/simple_animals)) //Should gib all simple_animals like a monkey
|
||||
gibs(loc, viruses)
|
||||
else if (istype(src, /mob/living/simple_animals))
|
||||
gibs(loc, viruses)
|
||||
Currently doesn't work, but should be useful later or at least as a template
|
||||
*/
|
||||
|
||||
else
|
||||
if(istype(src, /mob/living/silicon))
|
||||
robogibs(loc, viruses)
|
||||
else if(istype(src, /mob/living/carbon/alien))
|
||||
xgibs(loc, viruses)
|
||||
else
|
||||
gibs(loc, viruses, dna)
|
||||
sleep(15)
|
||||
for(var/obj/item/I in contents)
|
||||
I.loc = get_turf(src)
|
||||
if(ex_act)
|
||||
I.ex_act(ex_act)
|
||||
del(src)
|
||||
|
||||
/*
|
||||
This is the proc for turning a mob into ash. Mostly a copy of gib code (above).
|
||||
Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here.
|
||||
Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N
|
||||
*/
|
||||
/mob/proc/dust()
|
||||
death(1)
|
||||
var/atom/movable/overlay/animation = null
|
||||
monkeyizing = 1
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'mob.dmi'
|
||||
animation.master = src
|
||||
if(ishuman(src))
|
||||
flick("dust-h", animation)
|
||||
new /obj/effect/decal/remains/human(loc)
|
||||
else if(ismonkey(src))
|
||||
flick("dust-m", animation)
|
||||
new /obj/effect/decal/remains/human(loc)
|
||||
else if(isalien(src))
|
||||
flick("dust-a", animation)
|
||||
new /obj/effect/decal/remains/xeno(loc)
|
||||
else
|
||||
flick("dust-r", animation)
|
||||
new /obj/effect/decal/remains/robot(loc)
|
||||
|
||||
sleep(15)
|
||||
if(isrobot(src)&&src:mmi)//Is a robot and it has an mmi.
|
||||
del(src:mmi)//Delete the MMI first so that it won't go popping out.
|
||||
for(var/obj/item/I in contents)
|
||||
I.loc = get_turf(src)
|
||||
del(src)
|
||||
|
||||
/*
|
||||
adds a dizziness amount to a mob
|
||||
use this rather than directly changing var/dizziness
|
||||
@@ -1034,8 +885,8 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
stat(null, "([x], [y], [z])")
|
||||
stat(null, "CPU: [world.cpu]")
|
||||
stat(null, "Controller: [controllernum]")
|
||||
//if (master_controller)
|
||||
// stat(null, "Loop: [master_controller.loop_freq]")
|
||||
if (master_controller)
|
||||
stat(null, "Current Iteration: [controller_iteration]")
|
||||
|
||||
if (spell_list.len)
|
||||
|
||||
@@ -1049,42 +900,6 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
statpanel("Spells","[S.holder_var_type] [S.holder_var_amount]",S)
|
||||
|
||||
|
||||
/client/proc/station_explosion_cinematic(var/station_missed)
|
||||
if(!mob || !ticker) return
|
||||
if(!mob.client || !mob.hud_used || !ticker.mode) return
|
||||
// M.loc = null this might make it act weird but fuck putting them in nullspace, it causes issues.
|
||||
var/obj/screen/boom = mob.hud_used.station_explosion
|
||||
if(!istype(boom)) return
|
||||
|
||||
mob.client.screen += boom
|
||||
|
||||
switch(ticker.mode.name)
|
||||
if("nuclear emergency")
|
||||
flick("start_nuke", boom)
|
||||
if("AI malfunction")
|
||||
flick("start_malf", boom)
|
||||
else
|
||||
boom.icon_state = "start"
|
||||
|
||||
sleep(40)
|
||||
mob << sound('explosionfar.ogg')
|
||||
boom.icon_state = "end"
|
||||
if(!station_missed) flick("explode", boom)
|
||||
else flick("explode2", boom)
|
||||
sleep(40)
|
||||
|
||||
switch(ticker.mode.name)
|
||||
if("nuclear emergency")
|
||||
if(!station_missed) boom.icon_state = "loss_nuke"
|
||||
else boom.icon_state = "loss_nuke2"
|
||||
if("malfunction")
|
||||
boom.icon_state = "loss_malf"
|
||||
if("blob")
|
||||
return//Nothin here yet and the general one does not fit.
|
||||
else
|
||||
boom.icon_state = "loss_general"
|
||||
return
|
||||
|
||||
|
||||
// facing verbs
|
||||
/mob/proc/canface()
|
||||
@@ -1132,54 +947,125 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
|
||||
/mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check
|
||||
return 0
|
||||
/*
|
||||
/mob/proc/createGeas()
|
||||
|
||||
var/obj/effect/stop/S
|
||||
for(var/obj/effect/stop/temp in loc)
|
||||
if(temp.victim == src)
|
||||
S = temp
|
||||
|
||||
if(!S)
|
||||
S = new /obj/effect/stop
|
||||
S.victim = src
|
||||
S.loc = src.loc
|
||||
geaslist += S
|
||||
|
||||
return
|
||||
*/
|
||||
|
||||
/mob/proc/Stun(amount)
|
||||
if(canstun)
|
||||
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
|
||||
// if(stunned)
|
||||
// createGeas()
|
||||
else
|
||||
if(istype(src, /mob/living/carbon/alien)) // add some movement delay
|
||||
var/mob/living/carbon/alien/Alien = src
|
||||
Alien.move_delay_add = min(Alien.move_delay_add + round(amount / 5), 10) // a maximum delay of 10
|
||||
Alien.move_delay_add = min(Alien.move_delay_add + round(amount / 2), 10) // a maximum delay of 10
|
||||
return
|
||||
|
||||
/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
|
||||
if(canstun)
|
||||
stunned = max(amount,0)
|
||||
// if(stunned)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustStunned(amount)
|
||||
if(canstun)
|
||||
stunned = max(stunned + amount,0)
|
||||
// if(stunned)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/Weaken(amount)
|
||||
if(canweaken)
|
||||
weakened = max(max(weakened,amount),0)
|
||||
// if(weakened)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/SetWeakened(amount)
|
||||
if(canweaken)
|
||||
weakened = max(amount,0)
|
||||
// if(weakened)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/AdjustWeakened(amount)
|
||||
if(canweaken)
|
||||
weakened = max(weakened + amount,0)
|
||||
// if(weakened)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/Paralyse(amount)
|
||||
paralysis = max(max(paralysis,amount),0)
|
||||
// if(paralysis)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/SetParalysis(amount)
|
||||
paralysis = max(amount,0)
|
||||
return
|
||||
// if(paralysis)
|
||||
// createGeas()
|
||||
|
||||
/mob/proc/AdjustParalysis(amount)
|
||||
paralysis = max(paralysis + amount,0)
|
||||
// if(paralysis)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/Sleeping(amount)
|
||||
sleeping = max(max(sleeping,amount),0)
|
||||
// if(sleeping)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/SetSleeping(amount)
|
||||
sleeping = max(amount,0)
|
||||
return
|
||||
// if(sleeping)
|
||||
// createGeas()
|
||||
|
||||
|
||||
/mob/proc/AdjustSleeping(amount)
|
||||
sleeping = max(sleeping + amount,0)
|
||||
// if(sleeping)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/Resting(amount)
|
||||
resting = max(max(resting,amount),0)
|
||||
// if(resting)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
/mob/proc/SetResting(amount)
|
||||
resting = max(amount,0)
|
||||
return
|
||||
// if(resting)
|
||||
// createGeas()
|
||||
|
||||
/mob/proc/AdjustResting(amount)
|
||||
resting = max(resting + amount,0)
|
||||
// if(resting)
|
||||
// createGeas()
|
||||
return
|
||||
|
||||
|
||||
// ++++ROCKDTBEN++++ MOB PROCS -- Ask me before touching
|
||||
|
||||
/mob/proc/getBruteLoss()
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
var/canmove = 1.0
|
||||
var/eye_stat = null//Living, potentially Carbon
|
||||
var/lastpuke = 0
|
||||
var/unacidable = 0
|
||||
|
||||
var/name_archive //For admin things like possession
|
||||
|
||||
@@ -290,3 +291,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
|
||||
var/being_strangled = 0
|
||||
|
||||
var/datum/preferences/storedpreferences = null
|
||||
|
||||
// var/geaslist = list()
|
||||
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
return 0
|
||||
|
||||
/proc/iscat(A)
|
||||
if(istype(A, /mob/living/simple_animal/cat))
|
||||
if(istype(A, /mob/living/simple_animal/cat/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -115,12 +115,16 @@ proc/hasorgans(A)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
|
||||
/proc/hsl2rgb(h, s, l)
|
||||
return
|
||||
|
||||
|
||||
/proc/check_zone(zone)
|
||||
if(!zone) return "chest"
|
||||
if(!zone)
|
||||
return "chest"
|
||||
switch(zone)
|
||||
if("eyes")
|
||||
zone = "head"
|
||||
|
||||
@@ -208,6 +208,14 @@
|
||||
move_delay += mob.movement_delay()
|
||||
move_delay += mob.grav_delay
|
||||
|
||||
if(config.Tickcomp)
|
||||
move_delay -= 1.3
|
||||
var/tickcomp = ((1/(world.tick_lag))*1.3)
|
||||
move_delay = move_delay + tickcomp
|
||||
|
||||
|
||||
|
||||
|
||||
//We are now going to move
|
||||
moving = 1
|
||||
//Something with pulling things
|
||||
@@ -343,7 +351,8 @@
|
||||
///Return 1 for movement 0 for none
|
||||
/mob/proc/Process_Spacemove(var/check_drift = 0)
|
||||
//First check to see if we can do things
|
||||
if(restrained()) return 0
|
||||
if(restrained())
|
||||
return 0
|
||||
|
||||
/*
|
||||
if(istype(src,/mob/living/carbon))
|
||||
@@ -389,7 +398,10 @@
|
||||
break
|
||||
|
||||
//Nothing to push off of so end here
|
||||
if(!dense_object) return 0
|
||||
if(!dense_object)
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
//Check to see if we slipped
|
||||
if(prob(Process_Spaceslipping(5)))
|
||||
@@ -405,7 +417,8 @@
|
||||
/mob/proc/Process_Spaceslipping(var/prob_slip = 5)
|
||||
//Setup slipage
|
||||
//If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such.
|
||||
if(stat) prob_slip += 50
|
||||
if(stat)
|
||||
prob_slip = 0 // Changing this to zero to make it line up with the comment.
|
||||
|
||||
prob_slip = round(prob_slip)
|
||||
return(prob_slip)
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
|
||||
//This proc is the most basic of the procs. All it does is make a new mob on the same tile and transfer over a few variables.
|
||||
//Returns the new mob
|
||||
//Note that this proc does NOT do MMI related stuff!
|
||||
/mob/proc/change_mob_type(var/new_type = null, var/turf/location = null, var/new_name = null as text, var/delete_old_mob = 0 as num)
|
||||
|
||||
if(istype(src,/mob/new_player))
|
||||
usr << "\red cannot convert players who have not entered yet."
|
||||
return
|
||||
|
||||
if(!new_type)
|
||||
new_type = input("Mob type path:", "Mob type") as text|null
|
||||
|
||||
if(istext(new_type))
|
||||
new_type = text2path(new_type)
|
||||
|
||||
if( !ispath(new_type) )
|
||||
usr << "Invalid type path (new_type = [new_type]) in change_mob_type(). Contact a coder."
|
||||
return
|
||||
|
||||
if( new_type == /mob/new_player )
|
||||
usr << "\red cannot convert into a new_player mob type."
|
||||
return
|
||||
|
||||
var/mob/M = null
|
||||
if( !isnull(location) && isturf(location))
|
||||
M = new new_type( location )
|
||||
else
|
||||
M = new new_type( src.loc )
|
||||
|
||||
if(!M || !ismob(M))
|
||||
usr << "Type path is not a mob (new_type = [new_type]) in change_mob_type(). Contact a coder."
|
||||
return
|
||||
|
||||
if( istext(new_name) )
|
||||
M.name = new_name
|
||||
M.original_name = new_name
|
||||
M.real_name = new_name
|
||||
else
|
||||
M.name = src.name
|
||||
M.original_name = src.original_name
|
||||
M.real_name = src.real_name
|
||||
|
||||
M.dna = src.dna
|
||||
|
||||
M.ckey = src.ckey
|
||||
if(mind)
|
||||
mind.transfer_to(M)
|
||||
|
||||
if(delete_old_mob)
|
||||
spawn(1)
|
||||
del(src)
|
||||
return M
|
||||
@@ -1,8 +1,3 @@
|
||||
|
||||
/obj/hud/proc/unplayer_hud()
|
||||
src.station_explosion = new src.h_type( src )
|
||||
src.station_explosion.icon = 'station_explosion.dmi'
|
||||
src.station_explosion.icon_state = "start"
|
||||
src.station_explosion.layer = 20
|
||||
src.station_explosion.mouse_opacity = 0
|
||||
src.station_explosion.screen_loc = "1,3"
|
||||
return
|
||||
@@ -3,6 +3,8 @@
|
||||
datum/preferences/preferences = null
|
||||
ready = 0
|
||||
spawning = 0//Referenced when you want to delete the new_player later on in the code.
|
||||
totalPlayers = 0 //Player counts for the Lobby tab
|
||||
totalPlayersReady = 0
|
||||
|
||||
invisibility = 101
|
||||
|
||||
@@ -157,8 +159,8 @@
|
||||
Stat()
|
||||
..()
|
||||
|
||||
statpanel("Game")
|
||||
if(client.statpanel=="Game" && ticker)
|
||||
statpanel("Lobby")
|
||||
if(client.statpanel=="Lobby" && ticker)
|
||||
if(ticker.hide_mode)
|
||||
stat("Game Mode:", "Secret")
|
||||
else
|
||||
@@ -168,14 +170,15 @@
|
||||
stat("Time To Start:", ticker.pregame_timeleft)
|
||||
if((ticker.current_state == GAME_STATE_PREGAME) && !going)
|
||||
stat("Time To Start:", "DELAYED")
|
||||
if((ticker.current_state == GAME_STATE_PLAYING) && going)
|
||||
stat("Round Duration:", "[round(world.time / 36000)]:[(((world.time / 600 % 60)/10) > 1 ? world.time / 600 % 60 : add_zero(world.time / 600 % 60, 2))]:[world.time / 100 % 6][world.time / 100 % 10]")
|
||||
|
||||
statpanel("Lobby")
|
||||
if(client.statpanel=="Lobby" && ticker)
|
||||
if(ticker.current_state == GAME_STATE_PREGAME)
|
||||
stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]")
|
||||
totalPlayers = 0
|
||||
totalPlayersReady = 0
|
||||
for(var/mob/new_player/player in world)
|
||||
stat("[player.key]", (player.ready)?("(Playing)"):(null))
|
||||
totalPlayers++
|
||||
if(player.ready)totalPlayersReady++
|
||||
|
||||
Topic(href, href_list[])
|
||||
if(!client) return 0
|
||||
@@ -185,7 +188,6 @@
|
||||
return 1
|
||||
|
||||
if(href_list["ready"])
|
||||
|
||||
if(!ready)
|
||||
ready = 1
|
||||
else
|
||||
@@ -249,6 +251,9 @@
|
||||
else if(!href_list["late_join"])
|
||||
new_player_panel()
|
||||
|
||||
if(href_list["priv_msg"])
|
||||
..() //pass PM calls along to /mob/Topic
|
||||
return
|
||||
|
||||
proc/IsJobAvailable(rank)
|
||||
var/datum/job/job = job_master.GetJob(rank)
|
||||
@@ -362,13 +367,27 @@
|
||||
|
||||
|
||||
proc/LateChoices()
|
||||
var/dat = "<html><body>"
|
||||
var/mills = world.time // 1/10 of a second, not real milliseconds but whatever
|
||||
//var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
|
||||
var/mins = (mills % 36000) / 600
|
||||
var/hours = mills / 36000
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
dat += "Round Duration: [round(hours)]h [round(mins)]m<br>"
|
||||
|
||||
if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles.
|
||||
if(emergency_shuttle.direction == 2) //Shuttle is going to centcomm, not recalled
|
||||
dat += "<font color='red'><b>The station has been evacuated.</b></font><br>"
|
||||
if(emergency_shuttle.direction == 1 && emergency_shuttle.timeleft() < 300) //Shuttle is past the point of no recall
|
||||
dat += "<font color='red'>The station is currently undergoing evacuation procedures.</font><br>"
|
||||
|
||||
dat += "Choose from the following open positions:<br>"
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
if(job && IsJobAvailable(job.title))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=[job.title]'>[job.title]</a><br>"
|
||||
|
||||
src << browse(dat, "window=latechoices;size=300x640;can_close=0")
|
||||
dat += "</center>"
|
||||
src << browse(dat, "window=latechoices;size=300x640;can_close=1")
|
||||
|
||||
|
||||
proc/create_character()
|
||||
@@ -387,7 +406,6 @@
|
||||
|
||||
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo
|
||||
|
||||
|
||||
new_character.dna.ready_dna(new_character)
|
||||
preferences.copydisabilities(new_character)
|
||||
if(mind)
|
||||
|
||||
@@ -91,7 +91,8 @@
|
||||
brute *= 0.66 //~2/3 damage for ROBOLIMBS
|
||||
burn *= 0.66 //~2/3 damage for ROBOLIMBS
|
||||
|
||||
if(owner && !robot) owner.pain(display_name, (brute+burn)*3, 1)
|
||||
if(owner && !robot)
|
||||
owner.pain(display_name, (brute+burn)*3, 1)
|
||||
if(sharp)
|
||||
var/nux = brute * rand(10,15)
|
||||
if(brute_dam >= max_damage)
|
||||
@@ -382,7 +383,7 @@
|
||||
destspawn = 1
|
||||
if(!robot)
|
||||
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\
|
||||
"\red <b>Your [display_name] goes flying off!</b>",\
|
||||
"<span class='moderate'><b>Your [display_name] goes flying off!</b></span>",\
|
||||
"You hear a terrible sound of ripping tendons and flesh.")
|
||||
else
|
||||
owner.visible_message("\red [owner.name]'s [display_name] explodes violently!",\
|
||||
|
||||
@@ -84,6 +84,8 @@
|
||||
min_broken_damage = 15
|
||||
body_part = HAND_LEFT
|
||||
|
||||
|
||||
|
||||
obj/item/weapon/organ
|
||||
icon = 'human.dmi'
|
||||
|
||||
@@ -92,11 +94,9 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return
|
||||
if(H.dna)
|
||||
if(blood_DNA && blood_DNA.len)
|
||||
blood_DNA.len++
|
||||
blood_DNA[blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||
else
|
||||
blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
|
||||
if(!blood_DNA)
|
||||
blood_DNA = list()
|
||||
blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
|
||||
|
||||
var/icon/I = new /icon(icon, icon_state)
|
||||
|
||||
@@ -112,6 +112,12 @@ obj/item/weapon/organ/head
|
||||
var/mob/living/carbon/brain/brainmob
|
||||
var/brain_op_stage = 0
|
||||
|
||||
obj/item/weapon/organ/head/New()
|
||||
..()
|
||||
spawn(5)
|
||||
if(brainmob && brainmob.client)
|
||||
brainmob.client.screen.len = null //clear the hud
|
||||
|
||||
obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->head
|
||||
brainmob = new(src)
|
||||
brainmob.name = H.real_name
|
||||
@@ -119,6 +125,11 @@ obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)
|
||||
brainmob.dna = H.dna
|
||||
if(H.mind)
|
||||
H.mind.transfer_to(brainmob)
|
||||
brainmob.container = src
|
||||
if (brainmob.client)
|
||||
spawn(10)
|
||||
if(brainmob.client)
|
||||
verbs += /mob/proc/ghost
|
||||
|
||||
obj/item/weapon/organ/head/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/scalpel))
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
return 0
|
||||
|
||||
/mob/proc/say_quote(var/text)
|
||||
if(!text)
|
||||
return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
|
||||
var/ending = copytext(text, length(text))
|
||||
if (src.disease_symptoms & DISEASE_HOARSE)
|
||||
return "rasps, \"[text]\"";
|
||||
@@ -63,7 +65,7 @@
|
||||
return "gibbers, \"[text]\"";
|
||||
if (ending == "?")
|
||||
return "asks, \"[text]\"";
|
||||
else if (ending == "!")
|
||||
if (ending == "!")
|
||||
return "exclaims, \"[text]\"";
|
||||
|
||||
return "says, \"[text]\"";
|
||||
|
||||
@@ -439,13 +439,13 @@
|
||||
usr.pulling = null
|
||||
if("sleep")
|
||||
if(usr.sleeping && usr.sleeping_willingly)
|
||||
usr.sleeping = 0
|
||||
usr.sleeping_willingly = 0
|
||||
return
|
||||
else if(!usr.sleeping)
|
||||
usr.sleeping = 1
|
||||
usr.sleeping = 20 //Short nap
|
||||
usr.sleeping_willingly = 1
|
||||
if("rest")
|
||||
usr.resting = !usr.resting
|
||||
usr.resting = !( usr.resting )
|
||||
//kavala2
|
||||
if("throw")
|
||||
if (!usr.stat && isturf(usr.loc) && !usr.restrained())
|
||||
usr:toggle_throw_mode()
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
/mob/living/simple_animal/constructbehemoth
|
||||
name = "Behemoth"
|
||||
real_name = "Behemoth"
|
||||
original_name = "Behemoth"
|
||||
desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal."
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "behemoth"
|
||||
icon_living = "behemoth"
|
||||
icon_dead = "shade_dead"
|
||||
maxHealth = 750
|
||||
health = 750
|
||||
speak_emote = list("rumbles")
|
||||
emote_hear = list("wails","screeches")
|
||||
response_help = "thinks better of touching"
|
||||
response_disarm = "flails at"
|
||||
response_harm = "harmlessly punches the"
|
||||
harm_intent_damage = 0
|
||||
melee_damage_lower = 50
|
||||
melee_damage_upper = 50
|
||||
attacktext = "brutally crushes"
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 4000
|
||||
min_oxy = 0
|
||||
max_co2 = 0
|
||||
max_tox = 0
|
||||
speed = 5
|
||||
wall_smash = 1
|
||||
nopush = 1
|
||||
a_intent = "harm"
|
||||
stop_automated_movement = 1
|
||||
canstun = 0
|
||||
canweaken = 0
|
||||
var/energy = 0
|
||||
var/max_energy = 1000
|
||||
|
||||
|
||||
Life()
|
||||
..()
|
||||
if(stat == 2)
|
||||
new /obj/item/weapon/ectoplasm (src.loc)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if((M.client && !( M.blinded )))
|
||||
M.show_message("\red [src] collapses in a shattered heap ")
|
||||
ghostize(0)
|
||||
del src
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/constructbehemoth/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(O.force)
|
||||
if(O.force >= 11)
|
||||
health -= O.force
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
|
||||
else
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red \b The [O] bounces harmlessly off of [src]. ")
|
||||
else
|
||||
usr << "\red This weapon is ineffective, it does no damage."
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
||||
|
||||
|
||||
/mob/living/simple_animal/constructbehemoth/Bump(atom/movable/AM as mob|obj, yes)
|
||||
|
||||
spawn( 0 )
|
||||
if ((!( yes ) || now_pushing))
|
||||
return
|
||||
now_pushing = 1
|
||||
if(ismob(AM))
|
||||
var/mob/tmob = AM
|
||||
if(tmob.nopush)
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
tmob.LAssailant = src
|
||||
now_pushing = 0
|
||||
..()
|
||||
if (!( istype(AM, /atom/movable) ))
|
||||
return
|
||||
if (!( now_pushing ))
|
||||
now_pushing = 1
|
||||
if (!( AM.anchored ))
|
||||
var/t = get_dir(src, AM)
|
||||
if (istype(AM, /obj/structure/window))
|
||||
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
|
||||
for(var/obj/structure/window/win in get_step(AM,t))
|
||||
now_pushing = 0
|
||||
return
|
||||
step(AM, t)
|
||||
now_pushing = null
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
////////////////Powers//////////////////
|
||||
|
||||
|
||||
/*
|
||||
/client/proc/summon_cultist()
|
||||
set category = "Behemoth"
|
||||
set name = "Summon Cultist (300)"
|
||||
set desc = "Teleport a cultist to your location"
|
||||
if (istype(usr,/mob/living/simple_animal/constructbehemoth))
|
||||
|
||||
if(usr.energy<300)
|
||||
usr << "\red You do not have enough power stored!"
|
||||
return
|
||||
|
||||
if(usr.stat)
|
||||
return
|
||||
|
||||
usr.energy -= 300
|
||||
var/list/mob/living/cultists = new
|
||||
for(var/datum/mind/H in ticker.mode.cult)
|
||||
if (istype(H.current,/mob/living))
|
||||
cultists+=H.current
|
||||
var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr)
|
||||
if(!cultist)
|
||||
return
|
||||
if (cultist == usr) //just to be sure.
|
||||
return
|
||||
cultist.loc = usr.loc
|
||||
usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
/mob/living/simple_animal/constructarmoured
|
||||
name = "Juggernaut"
|
||||
real_name = "Juggernaut"
|
||||
original_name = "Juggernaut"
|
||||
desc = "A possessed suit of armour driven by the will of the restless dead"
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "armour"
|
||||
@@ -113,8 +115,6 @@
|
||||
health -= damage
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/constructarmoured/examine()
|
||||
set src in oview()
|
||||
|
||||
@@ -131,12 +131,20 @@
|
||||
usr << msg
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/constructarmoured/proc/mind_initialize(mob/G)
|
||||
mind = new
|
||||
mind.current = src
|
||||
mind.assigned_role = "Juggernaut"
|
||||
mind.key = G.key
|
||||
|
||||
////////////////////////Wraith/////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/constructwraith
|
||||
name = "Wraith"
|
||||
real_name = "Wraith"
|
||||
original_name = "Wraith"
|
||||
desc = "A wicked bladed shell contraption piloted by a bound spirit"
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "floating"
|
||||
@@ -255,12 +263,18 @@
|
||||
usr << msg
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_animal/constructwraith/proc/mind_initialize(mob/G)
|
||||
mind = new
|
||||
mind.current = src
|
||||
mind.assigned_role = "Wraith"
|
||||
mind.key = G.key
|
||||
|
||||
/////////////////////////////Artificer/////////////////////////
|
||||
|
||||
/mob/living/simple_animal/constructbuilder
|
||||
name = "Artificer"
|
||||
real_name = "Artificer"
|
||||
original_name = "Artificer"
|
||||
desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies"
|
||||
icon = 'mob.dmi'
|
||||
icon_state = "artificer"
|
||||
@@ -328,4 +342,10 @@
|
||||
msg += "*---------*</span>"
|
||||
|
||||
usr << msg
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/constructbuilder/proc/mind_initialize(mob/G)
|
||||
mind = new
|
||||
mind.current = src
|
||||
mind.assigned_role = "Artificer"
|
||||
mind.key = G.key
|
||||
@@ -21,7 +21,7 @@
|
||||
/mob/living/simple_animal/crab/Life()
|
||||
..()
|
||||
//CRAB movement
|
||||
if(!ckey)
|
||||
if(!ckey && alive)
|
||||
if(isturf(src.loc) && !resting && !buckled) //This is so it only moves if it's not inside a closet, gentics machine, etc.
|
||||
turns_since_move++
|
||||
if(turns_since_move >= turns_per_move)
|
||||
@@ -34,4 +34,36 @@
|
||||
desc = "It's Coffee, the other pet!"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stomps"
|
||||
response_harm = "stomps"
|
||||
|
||||
//LOOK AT THIS - ..()??
|
||||
/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/wirecutters))
|
||||
user << "\red \b This kills the crab."
|
||||
health -= 20
|
||||
Die()
|
||||
if(istype(O, /obj/item/stack/medical))
|
||||
if(alive)
|
||||
var/obj/item/stack/medical/MED = O
|
||||
if(health < maxHealth)
|
||||
if(MED.amount >= 1)
|
||||
health = min(maxHealth, health + MED.heal_brute)
|
||||
MED.amount -= 1
|
||||
if(MED.amount <= 0)
|
||||
del(MED)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\blue [user] applies the [MED] on [src]")
|
||||
else
|
||||
user << "\blue this [src] is dead, medical items won't bring it back to life."
|
||||
else
|
||||
if(O.force)
|
||||
health -= O.force
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
|
||||
else
|
||||
usr << "\red This weapon is ineffective, it does no damage."
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
||||
@@ -352,3 +352,18 @@
|
||||
stat = DEAD
|
||||
density = 0
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/ex_act(severity)
|
||||
flick("flash", flash)
|
||||
switch (severity)
|
||||
if (1.0)
|
||||
health -= 500
|
||||
gib()
|
||||
return
|
||||
|
||||
if (2.0)
|
||||
health -= 60
|
||||
|
||||
|
||||
if(3.0)
|
||||
health -= 30
|
||||
@@ -50,4 +50,10 @@
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/shade/proc/mind_initialize(mob/G)
|
||||
mind = new
|
||||
mind.current = src
|
||||
mind.assigned_role = "Shade"
|
||||
mind.key = G.key
|
||||
Reference in New Issue
Block a user