mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 05:30:05 +01:00
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:
@@ -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
@@ -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)
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user