Merge branch 'master' of github.com:Baystation12/Baystation12

Conflicts:
	config/config.txt
This commit is contained in:
Miniature
2012-05-12 00:52:42 +09:30
389 changed files with 23433 additions and 22088 deletions
+5
View File
@@ -0,0 +1,5 @@
/mob/dead/dust() //ghosts can't be vaporised.
return
/mob/dead/gib() //ghosts can't be gibbed.
return
+1 -6
View File
@@ -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
+76
View File
@@ -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)
+11 -6
View File
@@ -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"
+5 -2
View File
@@ -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
+2 -1
View File
@@ -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 ..()
+11 -9
View File
@@ -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)
+45 -1
View File
@@ -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 )
+155 -258
View File
@@ -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))
+89 -50
View File
@@ -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))
+42 -1
View File
@@ -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 )
+21 -21
View File
@@ -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)
+40 -1
View File
@@ -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
+7 -4
View File
@@ -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
+26 -1
View File
@@ -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)
+39
View File
@@ -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)
+38 -14
View File
@@ -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
+16 -16
View File
@@ -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 ..()
+14 -3
View File
@@ -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
View File
@@ -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()
+5
View File
@@ -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()
+6 -2
View File
@@ -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"
+16 -3
View File
@@ -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 -6
View File
@@ -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
+28 -10
View File
@@ -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)
+3 -2
View File
@@ -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!",\
+16 -5
View File
@@ -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))
+3 -1
View File
@@ -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]\"";
+4 -4
View File
@@ -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()
+126
View File
@@ -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")*/
+24 -4
View File
@@ -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
+34 -2
View File
@@ -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]. ")
+15
View File
@@ -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
+7 -1
View File
@@ -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