Merge pull request #2355 from Fox-McCloud/eye-fixes

Eyes Fixes and Chem Tweaks
This commit is contained in:
TheDZD
2015-10-14 18:29:57 -04:00
16 changed files with 111 additions and 104 deletions
+27 -27
View File
@@ -79,7 +79,7 @@
component_parts += new /obj/item/stack/cable_coil(null, 1)
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/dna_scannernew/RefreshParts()
scan_level = 0
damage_coeff = 0
@@ -190,7 +190,7 @@
return
if(L == user)
return
visible_message("[user] puts [L.name] into the DNA Scanner.", 3)
visible_message("[user] puts [L.name] into the DNA Scanner.")
put_in(L)
if(user.pulling == L)
user.pulling = null
@@ -316,21 +316,21 @@
for(var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
qdel(src)
// Checks if occupants can be irradiated/mutated - prevents exploits where wearing full rad protection would still let you gain mutations
/obj/machinery/dna_scannernew/proc/radiation_check()
if(!occupant)
return 1
if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant
if((H.species.flags & NO_DNA_RAD))
return 1
var/radiation_protection = occupant.run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.")
if (radiation_protection > NEGATE_MUTATION_THRESHOLD)
return 1
return 0
/obj/machinery/computer/scan_consolenew
@@ -445,9 +445,9 @@
if(..(user))
return
if(stat & (NOPOWER|BROKEN))
return
if(stat & (NOPOWER|BROKEN))
return
ui_interact(user)
/**
@@ -588,10 +588,10 @@
return 1 // return 1 forces an update to all Nano uis attached to src
var/radiation = (((src.radiation_intensity*3)+src.radiation_duration*3) / connected.damage_coeff)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
if(src.connected.radiation_check())
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
if(src.connected.radiation_check())
return 1
if (prob(95))
if(prob(75))
randmutb(src.connected.occupant)
@@ -691,29 +691,29 @@
if (!src.connected.occupant)
return 1
if (prob((80 + (src.radiation_duration / 2))))
var/radiation = (src.radiation_intensity+src.radiation_duration)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
if(src.connected.radiation_check())
return 1
block = miniscrambletarget(num2text(selected_ui_target), src.radiation_intensity, src.radiation_duration)
src.connected.occupant.dna.SetUISubBlock(src.selected_ui_block,src.selected_ui_subblock,block)
src.connected.occupant.UpdateAppearance()
else
var/radiation = ((src.radiation_intensity*2)+src.radiation_duration)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
if(src.connected.radiation_check())
return 1
if (prob(20+src.radiation_intensity))
randmutb(src.connected.occupant)
domutcheck(src.connected.occupant,src.connected)
else
randmuti(src.connected.occupant)
src.connected.occupant.UpdateAppearance()
src.connected.occupant.UpdateAppearance()
return 1 // return 1 forces an update to all Nano uis attached to src
////////////////////////////////////////////////////////
@@ -755,16 +755,16 @@
sleep(10*src.radiation_duration) // sleep for radiation_duration seconds
irradiating = 0
src.connected.locked = lock_state
if(src.connected.occupant)
src.connected.locked = lock_state
if(src.connected.occupant)
if (prob((80 + ((src.radiation_duration / 2) + (connected.precision_coeff ** 3)))))
var/radiation = ((src.radiation_intensity+src.radiation_duration) / connected.damage_coeff)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
if(src.connected.radiation_check())
return 1
var/real_SE_block=selected_se_block
block = miniscramble(block, src.radiation_intensity, src.radiation_duration)
if(prob(20))
@@ -782,7 +782,7 @@
if(src.connected.radiation_check())
return 1
if (prob(80-src.radiation_duration))
//testing("Random bad mut!")
randmutb(src.connected.occupant)
@@ -893,8 +893,8 @@
src.connected.locked = lock_state
var/radiation = (rand(20,50) / connected.damage_coeff)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
src.connected.occupant.apply_effect(radiation,IRRADIATE,0)
if(src.connected.radiation_check())
return 1
+1 -1
View File
@@ -92,7 +92,7 @@
if (C == user)
user.visible_message("[user] climbs on the operating table.","You climb on the operating table.")
else
visible_message("<span class='alert'>[C] has been laid on the operating table by [user].</span>", 3)
visible_message("<span class='alert'>[C] has been laid on the operating table by [user].</span>")
if (C.client)
C.client.perspective = EYE_PERSPECTIVE
C.client.eye = src
+5 -5
View File
@@ -308,7 +308,7 @@
user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!")
src.updateUsrDialog()
return
else
user << "\red The sleeper has a beaker already."
return
@@ -354,7 +354,7 @@
usr << "[G:affecting.name] will not fit into the sleeper because they have a slime latched onto their head."
return
visible_message("[user] starts putting [G:affecting:name] into the sleeper.", 3)
visible_message("[user] starts putting [G:affecting:name] into the sleeper.")
if(do_after(user, 20, target = G:affecting))
if(src.occupant)
@@ -555,9 +555,9 @@
usr << "[L.name] will not fit into the sleeper because they have a slime latched onto their head."
return
if(L == user)
visible_message("[user] starts climbing into the sleeper.", 3)
visible_message("[user] starts climbing into the sleeper.")
else
visible_message("[user] starts putting [L.name] into the sleeper.", 3)
visible_message("[user] starts putting [L.name] into the sleeper.")
if(do_after(user, 20, target = L))
if(src.occupant)
@@ -599,7 +599,7 @@
if(M.Victim == usr)
usr << "You're too busy getting your life sucked out of you."
return
visible_message("[usr] starts climbing into the sleeper.", 3)
visible_message("[usr] starts climbing into the sleeper.")
if(do_after(usr, 20, target = usr))
if(src.occupant)
usr << "\blue <B>The sleeper is already occupied!</B>"
+7 -7
View File
@@ -28,7 +28,7 @@
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 2)
RefreshParts()
/obj/machinery/bodyscanner/upgraded/New()
..()
component_parts = list()
@@ -129,9 +129,9 @@
usr << "[L.name] will not fit into the body scanner because they have a slime latched onto their head."
return
if(L == user)
visible_message("[user] climbs into the body scanner.", 3)
visible_message("[user] climbs into the body scanner.")
else
visible_message("[user] puts [L.name] into the body scanner.", 3)
visible_message("[user] puts [L.name] into the body scanner.")
if (L.client)
L.client.perspective = EYE_PERSPECTIVE
@@ -350,21 +350,21 @@
/obj/machinery/body_scanconsole/attack_ai(user as mob)
return attack_hand(user)
/obj/machinery/body_scanconsole/attack_ghost(user as mob)
return attack_hand(user)
/obj/machinery/body_scanconsole/attack_hand(user as mob)
if(stat & (NOPOWER|BROKEN))
return
if (panel_open)
user << "<span class='notice'>Close the maintenance panel first.</span>"
return
if(!src.connected)
findscanner()
if (src.connected)
if(!connected.occupant)
user << "<span class='notice'>The scanner is empty.</span>"
+10 -10
View File
@@ -19,7 +19,7 @@
/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob)
if(..())
return 1
user.set_machine(src)
var/dat
@@ -195,7 +195,7 @@
if(!..())
return
if(active)
if(!checkInteg(linkedholodeck))
damaged = 1
@@ -348,10 +348,10 @@
/obj/structure/table/holotable
name = "table"
/obj/structure/table/holotable/attack_alien(mob/user as mob)
/obj/structure/table/holotable/attack_alien(mob/user as mob)
return attack_hand(user)
/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob)
/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob)
return attack_hand(user)
/obj/structure/table/holotable/attack_hand(mob/user as mob)
@@ -387,11 +387,11 @@
pressure_resistance = 4*ONE_ATMOSPHERE
anchored = 1.0
flags = ON_BORDER
/obj/structure/rack/holorack
name = "rack"
/obj/structure/rack/holorack/attack_alien(mob/user as mob)
/obj/structure/rack/holorack/attack_alien(mob/user as mob)
return attack_hand(user)
/obj/structure/rack/holorack/attack_animal(mob/living/simple_animal/user as mob)
@@ -480,12 +480,12 @@
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>", 3)
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>")
qdel(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src)
visible_message("<span class='notice'>[user] dunks [W] into the [src]!</span>", 3)
visible_message("<span class='notice'>[user] dunks [W] into the [src]!</span>")
return
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -495,9 +495,9 @@
return
if(prob(50))
I.loc = src.loc
visible_message("<span class='notice'>Swish! \the [I] lands in \the [src].</span>", 3)
visible_message("<span class='notice'>Swish! \the [I] lands in \the [src].</span>")
else
visible_message("<span class='alert'>\The [I] bounces off of \the [src]'s rim!</span>", 3)
visible_message("<span class='alert'>\The [I] bounces off of \the [src]'s rim!</span>")
return 0
else
return ..(mover, target, height, air_group)
+5 -5
View File
@@ -49,7 +49,7 @@
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/atmospherics/unary/cryo_cell/construction()
..(dir,dir)
@@ -113,9 +113,9 @@
return
if(put_mob(L))
if(L == user)
visible_message("[user] climbs into the cryo cell.", 3)
visible_message("[user] climbs into the cryo cell.")
else
visible_message("[user] puts [L.name] into the cryo cell.", 3)
visible_message("[user] puts [L.name] into the cryo cell.")
if(user.pulling == L)
user.pulling = null
@@ -157,11 +157,11 @@
/obj/machinery/atmospherics/unary/cryo_cell/attack_ghost(mob/user)
return attack_hand(user)
/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user)
if(user == occupant)
return
if(panel_open)
usr << "\blue <b>Close the maintenance panel first.</b>"
return
+7 -7
View File
@@ -110,7 +110,7 @@
user << "<span class='notice'>\The [I] is no longer in storage.</span>"
return
visible_message("<span class='notice'>The console beeps happily as it disgorges \the [I].</span>", 3)
visible_message("<span class='notice'>The console beeps happily as it disgorges \the [I].</span>")
I.loc = get_turf(src)
frozen_items -= I
@@ -125,7 +125,7 @@
user << "<span class='notice'>There is nothing to recover from storage.</span>"
return
visible_message("<span class='notice'>The console beeps happily as it disgorges the desired objects.</span>", 3)
visible_message("<span class='notice'>The console beeps happily as it disgorges the desired objects.</span>")
for(var/obj/item/I in frozen_items)
I.loc = get_turf(src)
@@ -420,7 +420,7 @@
else
announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
visible_message("<span class='notice'>\The [src] hums and hisses as it moves [occupant.real_name] into storage.</span>", 3)
visible_message("<span class='notice'>\The [src] hums and hisses as it moves [occupant.real_name] into storage.</span>")
// Delete the mob.
qdel(occupant)
@@ -458,7 +458,7 @@
if(willing)
visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3)
visible_message("[user] starts putting [G:affecting:name] into \the [src].")
if(do_after(user, 20, target = G:affecting))
if(!M || !G || !G:affecting) return
@@ -547,9 +547,9 @@
if(willing)
if(L == user)
visible_message("[user] starts climbing into the cryo pod.", 3)
visible_message("[user] starts climbing into the cryo pod.")
else
visible_message("[user] starts putting [L] into the cryo pod.", 3)
visible_message("[user] starts putting [L] into the cryo pod.")
if(do_after(user, 20, target = L))
if(!L) return
@@ -637,7 +637,7 @@
usr << "You're too busy getting your life sucked out of you."
return
visible_message("[usr] starts climbing into \the [src].", 3)
visible_message("[usr] starts climbing into \the [src].")
if(do_after(usr, 20, target = usr))
+4 -4
View File
@@ -389,7 +389,7 @@
src.SUIT = null
if(src.MASK)
src.MASK = null
visible_message("<font color='red'>With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.</font>", 3)
visible_message("<font color='red'>With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.</font>")
src.isbroken = 1
src.isopen = 1
src.islocked = 0
@@ -484,7 +484,7 @@
if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) )
usr << "<font color='red'>It's too cluttered inside for you to fit in!</font>"
return
visible_message("[usr] starts squeezing into the suit storage unit!", 3)
visible_message("[usr] starts squeezing into the suit storage unit!")
if(do_after(usr, 10, target = usr))
usr.stop_pulling()
usr.client.perspective = EYE_PERSPECTIVE
@@ -528,7 +528,7 @@
if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty
user << "<font color='red'>The unit's storage area is too cluttered.</font>"
return
visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3)
visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.")
if(do_after(user, 20, target = G:affecting))
if(!G || !G.affecting) return //derpcheck
var/mob/M = G.affecting
@@ -685,7 +685,7 @@
user << "\red There is no room inside the cycler for [G.affecting.name]."
return
visible_message("[user] starts putting [G.affecting.name] into the suit cycler.", 3)
visible_message("[user] starts putting [G.affecting.name] into the suit cycler.")
if(do_after(user, 20, target = G:affecting))
if(!G || !G.affecting) return
+5 -5
View File
@@ -2,12 +2,12 @@
if(!ticker)
alert("The game hasn't started yet!")
return
var/list/incompatible_species = list("Plasmaman")
for(var/mob/living/carbon/human/H in player_list)
if(H.stat == DEAD || !(H.client))
if(H.stat == DEAD || !(H.client))
continue
if(is_special_character(H))
if(is_special_character(H))
continue
if(H.species.name in incompatible_species)
H.set_species("Human")
@@ -55,7 +55,7 @@
H.species.equip(H)
H.regenerate_icons()
message_admins("[key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
log_admin("[key_name(usr)] used dodgeball.")
nologevent = 1
@@ -85,6 +85,6 @@
return
else
playsound(src, 'sound/items/dodgeball.ogg', 50, 1)
visible_message("<span class='danger'>[H] HAS BEEN ELIMINATED!</span>", 3)
visible_message("<span class='danger'>[H] HAS BEEN ELIMINATED!</span>")
H.melt()
return
@@ -18,6 +18,12 @@
/obj/item/organ/brain/attack_self(mob/user as mob)
return //let's not have players taken out of the round as easily as a click, once you have their brain.
/obj/item/organ/brain/surgeryize()
if(!owner)
return
owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain.
owner.ear_deaf = 0
/obj/item/organ/brain/xeno
name = "thinkpan"
desc = "It looks kind of like an enormous wad of purple bubblegum."
+4 -1
View File
@@ -323,4 +323,7 @@ var/list/organ_cache = list()
if(fingerprintslast) O.fingerprintslast = fingerprintslast
user.put_in_active_hand(O)
qdel(src)
qdel(src)
/obj/item/organ/proc/surgeryize()
return
+8
View File
@@ -81,6 +81,14 @@
owner.b_eyes ? owner.b_eyes : 0
)
/obj/item/organ/eyes/surgeryize()
if(!owner)
return
owner.disabilities &= ~NEARSIGHTED
owner.sdisabilities &= ~BLIND
owner.eye_blurry = 0
owner.eye_blind = 0
/obj/item/organ/liver
name = "liver"
icon_state = "liver"
+17 -8
View File
@@ -513,16 +513,25 @@ datum/reagent/morphine/addiction_act_stage4(var/mob/living/M as mob)
datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.eye_blurry = max(M.eye_blurry-5 , 0)
M.eye_blind = max(M.eye_blind-5 , 0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
if(istype(E))
if(E.damage > 0)
E.damage -= 1
if(prob(80))
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
if(istype(E))
E.damage = max(E.damage-1, 0)
M.eye_blurry = max(M.eye_blurry-1 , 0)
M.ear_damage = max(M.ear_damage-1, 0)
if(prob(50))
M.disabilities &= ~NEARSIGHTED
if(prob(30))
M.sdisabilities &= ~BLIND
M.eye_blind = 0
if(M.ear_damage <= 25)
if(prob(30))
M.ear_deaf = 0
..()
return
/datum/chemical_reaction/oculine
name = "Oculine"
id = "oculine"
@@ -30,13 +30,6 @@
result_amount = 2
mix_message = "The solvent extracts an antibiotic compound from the fungus."
audioline
name = "Audioline"
id = "audioline"
result = "audioline"
required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1)
result_amount = 3
rezadone
name = "Rezadone"
id = "rezadone"
@@ -61,20 +61,6 @@
..()
return
/datum/reagent/audioline
name = "Audioline"
id = "audioline"
description = "Heals ear damage."
reagent_state = LIQUID
color = "#6600FF" // rgb: 100, 165, 255
/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.ear_damage = 0
M.ear_deaf = 0
..()
return
/datum/reagent/mitocholide
name = "Mitocholide"
id = "mitocholide"
@@ -91,7 +77,7 @@
for(var/name in H.internal_organs_by_name)
var/obj/item/organ/I = H.internal_organs_by_name[name]
if(I.damage > 0)
I.damage -= 0.20
I.damage = max(I.damage-0.4, 0)
..()
return
+4 -2
View File
@@ -150,6 +150,8 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
for(var/obj/item/organ/I in affected.internal_organs)
if(I)
I.surgeryize()
if(I && I.damage > 0)
if(I.robotic < 2)
user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \
@@ -193,7 +195,7 @@
if (!..())
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!(affected && !(affected.status & ORGAN_ROBOT)))
@@ -310,7 +312,7 @@
if(!istype(O))
return 0
if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT))
user << "<span class='danger'>You cannot install a naked organ into a robotic body.</span>"
return 2