Fix mmi deafened indefinitely. 9078

Fix carp knocking borg. 7394
Replace carp knockdown by stamina dmg (for human only) (now 5 bites instead of 7 to go from 100% to crit w/o armor) 7905
Fix being stunned as a borg causing temporary blindness, deafness and muteness. 9061
Change robot out of power: now only stunned, can talk but not move or interact. Adding feedback in examine. 6170
Robots now take damage in the hottest of inferno (35,000+ K)  8840
Nerfs uranium wall radiation: 6 times less radiation (just double the effect of urafloor), chain reaction range down to 1. 6841
Fixes putting braindead/notincorpse/ghosted brains in mmi, and same for mmi in borgs, the action fails and sends a message to the ghost. 4841 7447
Fixes brains taking eye damage and becoming blind. 6039
This commit is contained in:
phil235
2015-04-21 23:35:12 +02:00
parent 0e9f2695b1
commit d6cc2c07c6
14 changed files with 117 additions and 61 deletions
+5 -1
View File
@@ -125,10 +125,14 @@
if(!M.brainmob)
user << "<span class='warning'>Sticking an empty MMI into the frame would sort of defeat the purpose.</span>"
return
if(M.brainmob.stat == 2)
if(M.brainmob.stat == DEAD)
user << "<span class='warning'>Sticking a dead brain into the frame would sort of defeat the purpose.</span>"
return
if(!M.brainmob.client)
user << "<span class='warning'>Sticking an inactive brain into the frame would sort of defeat the purpose.</span>"
return
if((config) && (!config.allow_ai))
user << "<span class='warning'>This MMI does not seem to fit.</span>"
return
+22 -16
View File
@@ -318,28 +318,33 @@
/obj/item/proc/eyestab(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
var/mob/living/carbon/human/H = M
if(istype(H) && ( \
(H.head && H.head.flags & HEADCOVERSEYES) || \
var/is_human_victim = 0
if(ishuman(M))
is_human_victim = 1
var/mob/living/carbon/human/H = M
if((H.head && H.head.flags & HEADCOVERSEYES) || \
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \
))
// you can't stab someone in the eyes wearing a mask!
user << "<span class='danger'>You're going to need to remove that mask/helmet/glasses first.</span>"
return
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES))
// you can't stab someone in the eyes wearing a mask!
user << "<span class='danger'>You're going to need to remove that mask/helmet/glasses first.</span>"
return
var/mob/living/carbon/monkey/Mo = M
if(istype(Mo) && ( \
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
))
// you can't stab someone in the eyes wearing a mask!
user << "<span class='danger'>You're going to need to remove that mask/helmet/glasses first.</span>"
return
if(ismonkey(M))
var/mob/living/carbon/monkey/Mo = M
if(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES)
// you can't stab someone in the eyes wearing a mask!
user << "<span class='danger'>You're going to need to remove that mask/helmet/glasses first.</span>"
return
if(isalien(M))//Aliens don't have eyes./N slimes also don't have eyes!
user << "<span class='danger'>You cannot locate any eyes on this creature!</span>"
return
if(isbrain(M))
user << "<span class='danger'>You cannot locate any organic eyes on this brain!</span>"
return
add_logs(user, M, "attacked", object="[src.name]", addition="(INTENT: [uppertext(user.a_intent)])")
src.add_fingerprint(user)
@@ -352,7 +357,7 @@
"<span class='danger'>[user] has stabbed themself in the eyes with [src]!</span>", \
"<span class='userdanger'>You stab yourself in the eyes with [src]!</span>" \
)
if(istype(M, /mob/living/carbon/human))
if(is_human_victim)
var/mob/living/carbon/human/U = M
var/obj/item/organ/limb/affecting = U.get_organ("head")
if(affecting.take_damage(7))
@@ -360,6 +365,7 @@
else
M.take_organ_damage(7)
M.eye_blurry += rand(3,4)
M.eye_stat += rand(2,4)
if (M.eye_stat >= 10)
+19 -20
View File
@@ -160,32 +160,31 @@
var/obj/item/device/mmi/M = W
if(check_completion())
if(!istype(loc,/turf))
user << "<span class='danger'>You can't put the MMI in, the frame has to be standing on the ground to be perfectly precise.</span>"
user << "<span class='warning'>You can't put the MMI in, the frame has to be standing on the ground to be perfectly precise.</span>"
return
if(!M.brainmob)
user << "<span class='danger'>Sticking an empty MMI into the frame would sort of defeat the purpose.</span>"
return
if(!M.brainmob.key)
var/ghost_can_reenter = 0
if(M.brainmob.mind)
for(var/mob/dead/observer/G in player_list)
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
ghost_can_reenter = 1
break
if(!ghost_can_reenter)
user << "<span class='notice'>The mmi indicates that their mind is completely unresponsive; there's no point.</span>"
return
if(M.brainmob.stat == DEAD)
user << "<span class='danger'>Sticking a dead brain into the frame would sort of defeat the purpose.</span>"
user << "<span class='warning'>Sticking an empty MMI into the frame would sort of defeat the purpose.</span>"
return
if((M.brainmob.mind in ticker.mode.head_revolutionaries) || (M.brainmob.mind in ticker.mode.A_bosses) || (M.brainmob.mind in ticker.mode.B_bosses))
var/mob/living/carbon/brain/BM = M.brainmob
if(!BM.key || !BM.mind)
user << "<span class='warning'>The mmi indicates that their mind is completely unresponsive; there's no point.</span>"
return
if(!BM.client) //braindead
user << "<span class='warning'>The mmi indicates that their mind is currently inactive; it might change.</span>"
return
if(BM.stat == DEAD)
user << "<span class='warning'>Sticking a dead brain into the frame would sort of defeat the purpose.</span>"
return
if((BM.mind in ticker.mode.head_revolutionaries) || (BM.mind in ticker.mode.A_bosses) || (BM.mind in ticker.mode.B_bosses))
user << "<span class='danger'>The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI.</span>"
return
if(jobban_isbanned(M.brainmob, "Cyborg"))
user << "<span class='danger'>This MMI does not seem to fit.</span>"
if(jobban_isbanned(BM, "Cyborg"))
user << "<span class='warning'>This MMI does not seem to fit.</span>"
return
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc))
@@ -211,7 +210,7 @@
if(ticker.mode.config_tag == "malfunction") //Don't let humans get a cyborg on their side during malf, for balance reasons.
O.set_zeroth_law("<span class='danger'>ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*&110010</span>")
M.brainmob.mind.transfer_to(O)
BM.mind.transfer_to(O)
if(O.mind && O.mind.special_role)
O.mind.store_memory("As a cyborg, any objectives listed here are null and void, and will be marked as failed. They are simply here for memory purposes.")
+2 -2
View File
@@ -221,8 +221,8 @@
if(world.time > last_event+15)
active = 1
for(var/mob/living/L in range(3,src))
L.irradiate(12)
for(var/turf/simulated/wall/mineral/uranium/T in range(3,src))
L.irradiate(2)
for(var/turf/simulated/wall/mineral/uranium/T in orange(1,src))
T.radiate()
last_event = world.time
active = null
@@ -165,7 +165,7 @@
active = 1
for(var/mob/living/L in range(3,src))
L.irradiate(1)
for(var/turf/simulated/floor/mineral/uranium/T in range(3,src))
for(var/turf/simulated/floor/mineral/uranium/T in orange(1,src))
T.radiate()
last_event = world.time
active = 0
+2 -2
View File
@@ -64,8 +64,8 @@
if(world.time > last_event+15)
active = 1
for(var/mob/living/L in range(3,src))
L.irradiate(12)
for(var/turf/simulated/wall/mineral/uranium/T in range(3,src))
L.irradiate(2)
for(var/turf/simulated/wall/mineral/uranium/T in orange(1,src))
T.radiate()
last_event = world.time
active = null
+23 -2
View File
@@ -19,14 +19,35 @@
var/obj/item/organ/brain/brain = null //The actual brain
/obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
if(istype(O,/obj/item/organ/brain)) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/newbrain = O
if(brain)
user << "<span class='danger'>There's already a brain in the MMI!</span>"
user << "<span class='warning'>There's already a brain in the MMI!</span>"
return
if(!newbrain.brainmob)
user << "<span class='danger'>You aren't sure where this brain came from, but you're pretty sure it's a useless brain.</span>"
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
var/mob/living/carbon/brain/B = newbrain.brainmob
if(!B.key)
var/mob/dead/observer/ghost = B.get_ghost()
if(ghost)
if(ghost.client)
user << "<span class='warning'>The brain's activity spikes for a second then settles down. Next connection attempts may be successful.</span>"
ghost << "<span class='ghostalert'>Someone is trying to put your brain in a MMI. Return to your body if you want to!</span> (Verbs -> Ghost -> Re-enter corpse)"
ghost << sound('sound/effects/genetics.ogg')
else
user << "<span class='warning'>The brain seems currently inactive; it might change.</span>"
else
user << "<span class='warning'>The brain is completely unresponsive; there's no point.</span>"
return
if(!B.client)
user << "<span class='warning'>The brain seems currently inactive; it might change.</span>"
return
visible_message("<span class='notice'>[user] sticks \a [newbrain] into \the [src]</span>")
brainmob = newbrain.brainmob
+16 -5
View File
@@ -124,16 +124,27 @@
return 1
/mob/living/carbon/brain/handle_disabilities()
return
//Eyes
if(disabilities & BLIND || stat)
eye_blind = max(eye_blind, 1)
else
if(eye_blind)
eye_blind = 0
if(eye_blurry)
eye_blurry = 0
if(eye_stat)
eye_stat = 0
//Ears
if(disabilities & DEAF)
setEarDamage(-1, max(ear_deaf, 1))
else if(ear_damage < 100)
setEarDamage(0, 0)
/mob/living/carbon/brain/handle_status_effects()
return
/mob/living/carbon/brain/handle_regular_hud_updates()
handle_vision()
handle_hud_icons_health()
return 1
+3 -1
View File
@@ -246,7 +246,9 @@
/mob/living/carbon/proc/handle_heart()
return
/mob/living/carbon/handle_environment(var/datum/gas_mixture/environment) return
/mob/living/carbon/handle_environment(var/datum/gas_mixture/environment)
return
/mob/living/carbon/handle_stomach()
spawn(0)
@@ -27,6 +27,9 @@
else
msg += "Its cover is closed[locked ? "" : ", and looks unlocked"].\n"
if(cell && cell.charge <= 0)
msg += "<span class='warning'>Its battery indicator is blinking red!</span>\n"
switch(src.stat)
if(CONSCIOUS)
if(!src.client) msg += "It appears to be in stand-by mode.\n" //afk
+14 -4
View File
@@ -24,7 +24,8 @@
if(cell)
if(cell.charge <= 0)
uneq_all()
stat = UNCONSCIOUS
Stun(5)
update_icons()
else if (cell.charge <= 100)
uneq_all()
cell.use(1)
@@ -38,7 +39,8 @@
cell.use(1)
else
uneq_all()
stat = UNCONSCIOUS
Stun(5)
update_icons()
/mob/living/silicon/robot/handle_regular_status_updates()
@@ -68,7 +70,7 @@
if(getOxyLoss() > 50)
Paralyse(3)
if (paralysis || stunned || weakened) //Stunned etc.
if(paralysis)
stat = UNCONSCIOUS
use_power()
@@ -80,7 +82,7 @@
if (stuttering)
stuttering = max(0, stuttering - 1)
if (druggy)
if(druggy)
druggy = max(0, druggy - 1)
/mob/living/silicon/robot/handle_regular_hud_updates()
@@ -216,3 +218,11 @@
else
canmove = 1
return canmove
/mob/living/silicon/robot/handle_environment(var/datum/gas_mixture/environment)
if(environment.temperature > FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) //hotter than what a firesuit can handle
spark_system.start()
adjustFireLoss(4)
throw_alert("temp","hot",3)
else
clear_alert("temp")
@@ -719,7 +719,7 @@
/mob/living/silicon/robot/update_icons()
overlays.Cut()
if(stat == 0)
if(stat == 0 && cell && cell.charge > 0)
switch(icon_state)
if("robot")
overlays += "eyes-standard"
@@ -41,11 +41,9 @@
/mob/living/simple_animal/hostile/carp/AttackingTarget()
..()
if(isliving(target))
var/mob/living/L = target
if(prob(15))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.adjustStaminaLoss(8)
/mob/living/simple_animal/hostile/carp/holocarp
icon_state = "holocarp"
@@ -98,6 +98,8 @@
eye_blind = 0
if(eye_blurry)
eye_blurry = 0
if(eye_stat)
eye_stat = 0
//Ears
if(disabilities & DEAF)
@@ -490,4 +492,4 @@
canmove = 0
else
canmove = 1
return canmove
return canmove