Merge branch 'master' into development

This commit is contained in:
skull132
2017-04-29 01:51:38 +03:00
25 changed files with 316 additions and 99 deletions

View File

@@ -34,21 +34,24 @@
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O,/obj/item/organ/brain) && !(istype(O,/obj/item/organ/brain/golem)) && !brainmob) //Time to stick a brain in it --NEO /MMI'ing a scroll of paper makes 0 sense
if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/B = O
if(B.health <= 0)
user << "\red That brain is well and truly dead."
user << "<span class='warning'>That brain is well and truly dead.</span>"
return
else if(!B.lobotomized && B.can_lobotomize)
user << "<span class='warning'>The brain won't fit until you perform a lobotomy!</span>"
return
else if(!B.can_lobotomize)
user << "<span class='warning'>The [B] is incompatible with [src]!</span>"
else if(!B.brainmob)
user << "\red You aren't sure where this brain came from, but you're pretty sure it's a useless brain."
user << "<span class='warning'>You aren't sure where this brain came from, but you're pretty sure it's a useless brain.</span>"
return
for(var/mob/V in viewers(src, null))
V.show_message(text("\blue [user] sticks \a [O] into \the [src]."))
user.visible_message("<span class='notice'>[user] sticks \a [B] into \the [src].</span>")
brainmob = O:brainmob
O:brainmob = null
brainmob = B.brainmob
B.brainmob = null
brainmob.loc = src
brainmob.container = src
brainmob.stat = 0
@@ -56,7 +59,7 @@
living_mob_list += brainmob
user.drop_item()
brainobj = O
brainobj = B
brainobj.loc = src
name = "Man-Machine Interface: [brainmob.real_name]"

View File

@@ -14,6 +14,8 @@
origin_tech = list(TECH_BIO = 3)
attack_verb = list("attacked", "slapped", "whacked")
var/mob/living/carbon/brain/brainmob = null
var/lobotomized = 0
var/can_lobotomize = 1
/obj/item/organ/pariah_brain
name = "brain remnants"
@@ -90,12 +92,44 @@
target.key = brainmob.key
..()
/obj/item/organ/brain/proc/lobotomize(mob/user as mob)
lobotomized = 1
if(owner)
owner << "<span class='danger'>As part of your brain is drilled out, you feel your past self, your memories, your very being slip away...</span>"
owner << "<b>You have been lobotomized. Your memories and your former life have been surgically removed from your brain, and while you are lobotomized you remember nothing that ever came before this moment.</b>"
else if(brainmob)
brainmob << "<span class='danger'>As part of your brain is drilled out, you feel your past self, your memories, your very being slip away...</span>"
brainmob << "<b>You have been lobotomized. Your memories and your former life have been surgically removed from your brain, and while you are lobotomized you remember nothing that ever came before this moment.</b>"
return
/obj/item/organ/brain/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/surgicaldrill))
if(!lobotomized)
user.visible_message("<span class='danger'>[user] drills [src] deftly with [W], severing part of the brain!</span>")
lobotomize(user)
else
user << "<span class='notice'>The brain has already been operated on!</span>"
..()
/obj/item/organ/brain/process()
..()
if(!owner)
return
if(lobotomized && (owner.getBrainLoss() < 50)) //lobotomized brains cannot be healed with chemistry. Part of the brain is irrevocably missing. Can be fixed magically with cloning, ofc.
owner.setBrainLoss(50)
/obj/item/organ/brain/slime
name = "slime core"
desc = "A complex, organic knot of jelly and crystalline particles."
robotic = 2
icon = 'icons/mob/slimes.dmi'
icon_state = "green slime extract"
can_lobotomize = 0
/obj/item/organ/brain/golem
name = "chelm"
@@ -103,3 +137,4 @@
robotic = 2
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
can_lobotomize = 0

View File

@@ -225,10 +225,9 @@ proc/get_radio_key_from_channel(var/channel)
if (speech_sound)
sound_vol *= 0.5
var/turf/T = get_turf(src)
var/list/listening = list()
var/list/listening_obj = list()
var/turf/T = get_turf(src)
if(T)
//make sure the air can transmit speech - speaker's side
@@ -241,26 +240,8 @@ proc/get_radio_key_from_channel(var/channel)
italics = 1
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
var/list/hear = hear(message_range,T)
var/list/hearturfs = list()
get_mobs_and_objs_in_view_fast(T, message_range, listening, listening_obj)
for(var/I in hear)
if(ismob(I))
var/mob/M = I
listening += M
hearturfs += M.locs[1]
else if(isobj(I))
var/obj/O = I
hearturfs += O.locs[1]
listening_obj |= O
for(var/mob/M in player_list)
if(src.client && M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
listening |= M
continue
if(M.loc && M.locs[1] in hearturfs)
listening |= M
var/speech_bubble_test = say_test(message)
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")

View File

@@ -163,6 +163,8 @@ var/list/ai_verbs_default = list(
else
if (B.brainmob.mind)
B.brainmob.mind.transfer_to(src)
if(B.brainobj)
B.brainobj.lobotomized = 1
on_mob_init()
@@ -271,7 +273,7 @@ var/list/ai_verbs_default = list(
aiPDA.ownjob = "AI"
aiPDA.owner = pickedName
aiPDA.name = pickedName + " (" + aiPDA.ownjob + ")"
setup_icon() //this is because the ai custom name is related to the ai name, so, we just call the setup icon after someone named their ai
/*

View File

@@ -128,6 +128,8 @@
icontype = "Basic"
updatename(modtype)
updateicon()
if(mmi && mmi.brainobj)
mmi.brainobj.lobotomized = 1
radio = new /obj/item/device/radio/borg(src)
common_radio = radio

View File

@@ -1,12 +1,12 @@
//Corgi
/mob/living/simple_animal/corgi
name = "\improper corgi"
name = "corgi"
real_name = "corgi"
desc = "It's a corgi."
icon_state = "corgi"
icon_living = "corgi"
icon_dead = "corgi_dead"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
speak = list("YAP!", "Woof!", "Bark!", "AUUUUUU!")
speak_emote = list("barks", "woofs")
emote_hear = list("barks", "woofs", "yaps","pants")
emote_see = list("shakes its head", "shivers")
@@ -19,7 +19,7 @@
response_harm = "kicks"
see_in_dark = 5
mob_size = 5
max_nutrition = 250//Dogs are insatiable eating monsters. This scales with their mob size too
max_nutrition = 250 //Dogs are insatiable eating monsters. This scales with their mob size too
stomach_size_mult = 30
seek_speed = 6
possession_candidate = 1
@@ -29,7 +29,7 @@
/mob/living/simple_animal/corgi/New()
..()
nutrition = max_nutrition * 0.3//Ian doesn't start with a full belly so will be hungry at roundstart
nutrition = max_nutrition * 0.3 //Ian doesn't start with a full belly so will be hungry at roundstart
nutrition_step = mob_size * 0.12
//IAN! SQUEEEEEEEEE~
@@ -55,12 +55,10 @@
sleep(1)
/mob/living/simple_animal/corgi/beg(var/atom/thing, var/atom/holder)
visible_emote("stares at the [thing] that [holder] has with sad puppy eyes.",0)
/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
name = "Corgi meat"
desc = "Tastes like... well you know..."

View File

@@ -1,11 +1,12 @@
//Foxxy
/mob/living/simple_animal/corgi/fox
name = "fox"
real_name = "fox"
desc = "It's a fox. I wonder what it says?"
icon_state = "fox"
icon_living = "fox"
icon_dead = "fox_dead"
speak = list("Ack-Ack","Ack-Ack-Ack-Ackawoooo","Geckers","Awoo","Tchoff")
speak = list("Ack-Ack.", "Ack-Ack-Ack-Ackawoooo!", "Awoo!", "Tchoff.")
speak_emote = list("geckers", "barks")
emote_hear = list("howls","barks")
emote_see = list("shakes its head", "shivers")
@@ -18,8 +19,9 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
mob_size = 4
//Captain fox
/mob/living/simple_animal/corgi/fox/Chauncey
name = "Chauncey"
real_name = "Chauncey"
desc = "Chauncey, the Captain's trustworthy fox. I wonder what it says?"

View File

@@ -158,21 +158,26 @@
var/range = world.view
if(hearing_distance)
range = hearing_distance
var/list/hear = get_mobs_or_objects_in_view(range,src)
for(var/I in hear)
if(isobj(I))
spawn(0)
if(I) //It's possible that it could be deleted in the meantime.
var/obj/O = I
O.show_message( message, 2, deaf_message, 1)
else if(ismob(I))
var/mob/M = I
var/msg = message
if(self_message && M==src)
msg = self_message
M.show_message( msg, 2, deaf_message, 1)
var/turf/T = get_turf(src)
var/list/mobs = list()
var/list/objs = list()
get_mobs_and_objs_in_view_fast(T, range, mobs, objs)
for(var/m in mobs)
var/mob/M = m
if(self_message && M==src)
M.show_message(self_message,2,deaf_message,1)
continue
M.show_message(message,2,deaf_message,1)
for(var/o in objs)
var/obj/O = o
O.show_message(message,2,deaf_message,1)
/mob/proc/findname(msg)
for(var/mob/M in mob_list)