Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master' into ForTheSwarm2

This commit is contained in:
Aurorablade
2015-10-18 21:37:28 -04:00
96 changed files with 504 additions and 1603 deletions
-16
View File
@@ -477,22 +477,6 @@
dat += "<tr><td><i>Head not found!</i></td></tr>"
dat += "</table>"
if(ticker.mode.name == "nations")
dat += "</table><br><table><tr><td><B>Flags(s)</B></td></tr>"
for(var/obj/item/flag/nation/N in world)
dat += "<tr><td>[N.name], "
var/atom/flag_loc = N.loc
while(!istype(flag_loc, /turf))
if(istype(flag_loc, /mob))
var/mob/M = flag_loc
dat += "carried by <a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a> "
if(istype(flag_loc, /obj))
var/obj/O = flag_loc
dat += "in \a [O.name] "
flag_loc = flag_loc.loc
dat += "in [flag_loc.loc] at ([flag_loc.x], [flag_loc.y], [flag_loc.z])</td></tr>"
dat += "</table>"
if(istype(ticker.mode, /datum/game_mode/blob))
var/datum/game_mode/blob/mode = ticker.mode
dat += "<br><table cellspacing=5><tr><td><B>Blob</B></td><td></td><td></td></tr>"
+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
+36 -27
View File
@@ -3,34 +3,43 @@
desc = "A small electronic device able to ignite combustable substances."
icon_state = "igniter"
materials = list(MAT_METAL=500, MAT_GLASS=50)
w_amt = 10
origin_tech = "magnets=1"
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread
describe()
return "The igniter is [secured?"secured.":"unsecured."]"
/obj/item/device/assembly/igniter/New()
..()
sparks.set_up(2, 0, src)
sparks.attach(src)
/obj/item/device/assembly/igniter/Destroy()
qdel(sparks)
sparks = null
return ..()
/obj/item/device/assembly/igniter/describe()
return "The igniter is [secured?"secured.":"unsecured."]"
/obj/item/device/assembly/igniter/activate()
if(!..()) return 0//Cooldown check
var/turf/location = get_turf(loc)
if(location) location.hotspot_expose(1000,1000)
if (istype(src.loc,/obj/item/device/assembly_holder))
if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank)
tank.explode()
if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
if(beakerbomb)
beakerbomb.heat_beaker()
sparks.start()
return 1
/obj/item/device/assembly/igniter/attack_self(mob/user as mob)
activate()
if(!..()) return 0//Cooldown check
var/turf/location = get_turf(loc)
if(location) location.hotspot_expose(1000,1000)
if (istype(src.loc,/obj/item/device/assembly_holder))
if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank)
tank.explode()
if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/))
var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc
if(beakerbomb)
beakerbomb.heat_beaker()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
return 1
attack_self(mob/user as mob)
activate()
add_fingerprint(user)
return
add_fingerprint(user)
return
+2
View File
@@ -11,7 +11,9 @@
/obj/item/assembly/shock_kit/Destroy()
qdel(part1)
part1 = null
qdel(part2)
part2 = null
return ..()
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+6
View File
@@ -27,6 +27,12 @@
spawn(1) // For things that set the frequency directly
set_frequency(frequency)
return
Destroy()
if(radio_controller)
radio_controller.remove_object(src,frequency)
return ..()
describe()
return "\The [src]'s power light is [receiving?"on":"off"]"
@@ -1,4 +1,4 @@
/obj/machinery/power/supermatter
/obj/machinery/power/supermatter_shard
description_info = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \
After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \
Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum.<br>\
+1 -6
View File
@@ -119,7 +119,7 @@ Works together with spawning an observer, noted above.
if(antagHUD)
var/list/target_list = list()
for(var/mob/living/target in oview(src, 14))
if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation))
if(target.mind && (target.mind.special_role || issilicon(target)))
target_list += target
if(target_list.len)
assess_targets(target_list, src)
@@ -146,7 +146,6 @@ Works together with spawning an observer, noted above.
var/client/C = U.client
for(var/mob/living/carbon/human/target in target_list)
C.images += target.hud_list[SPECIALROLE_HUD]
C.images += target.hud_list[NATIONS_HUD] // ??? THE SNOWFLAKE IS KILLING ME
for(var/mob/living/silicon/target in target_list)
C.images += target.hud_list[SPECIALROLE_HUD]
@@ -172,10 +171,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Ghost"
set desc = "Relinquish your life and enter the land of the dead."
if(ticker && ticker.mode.name == "nations")
usr << "\blue Ghosting is disabled."
return
var/mob/M = src
if(stat == DEAD)
@@ -171,7 +171,7 @@
/mob/living/carbon/alien/humanoid/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -107,7 +107,7 @@
/mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -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."
@@ -36,7 +36,6 @@
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
..()
@@ -395,7 +394,7 @@
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -75,10 +75,10 @@ emp_act
unEquip(c_hand)
if (affected.status & ORGAN_ROBOT)
emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!")
custom_emote(1, "drops what they were holding, their [affected.name] malfunctioning!")
else
var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and")
emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!")
custom_emote(1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!")
if(used_weapon)
var/obj/item/W = used_weapon
@@ -117,7 +117,7 @@
unEquip(r_hand)
var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
emote("me", 1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
custom_emote(1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!")
else if(E.is_malfunctioning())
@@ -130,7 +130,7 @@
continue
unEquip(r_hand)
emote("me", 1, "drops what they were holding, their [E.name] malfunctioning!")
custom_emote(1, "drops what they were holding, their [E.name] malfunctioning!")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
+4 -33
View File
@@ -1234,9 +1234,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(see_override) //Override all
see_invisible = see_override
if(ticker && ticker.mode.name == "nations")
process_nations()
if(healths)
if (analgesic)
healths.icon_state = "health_health_numb"
@@ -1507,7 +1504,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
src << "<font color='red'><b>"+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!")
if(shock_stage >= 30)
if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.")
if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.")
eye_blurry = max(2, eye_blurry)
stuttering = max(stuttering, 5)
@@ -1515,7 +1512,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
src << "<font color='red'><b>"+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
if(shock_stage >=60)
if(shock_stage == 60) emote("me",1,"'s body becomes limp.")
if(shock_stage == 60) custom_emote(1,"falls limp.")
if (prob(2))
src << "<font color='red'><b>"+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
Weaken(20)
@@ -1531,7 +1528,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
Paralyse(5)
if(shock_stage == 150)
emote("me",1,"can no longer stand, collapsing!")
custom_emote(1,"can no longer stand, collapsing!")
Weaken(20)
if(shock_stage >= 150)
@@ -1820,34 +1817,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
holder.icon_state = "hudshadowlingthrall"
hud_list[SPECIALROLE_HUD] = holder
if(hud_updateflag & 1 << NATIONS_HUD)
var/image/holder = hud_list[NATIONS_HUD]
holder.icon_state = "hudblank"
if(mind && mind.nation)
switch(mind.nation.name)
if("Atmosia")
holder.icon_state = "hudatmosia"
if("Brigston")
holder.icon_state = "hudbrigston"
if("Cargonia")
holder.icon_state = "hudcargonia"
if("People's Republic of Commandzakstan")
holder.icon_state = "hudcommand"
if("Medistan")
holder.icon_state = "hudmedistan"
if("Scientopia")
holder.icon_state = "hudscientopia"
hud_list[NATIONS_HUD] = holder
hud_updateflag = 0
/mob/living/carbon/human/proc/process_nations()
var/client/C = client
for(var/mob/living/carbon/human/H in view(src, 14))
C.images += H.hud_list[NATIONS_HUD]
/mob/living/carbon/human/handle_silent()
if(..())
speech_problem_flag = 1
@@ -1882,4 +1853,4 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
// Need this in species.
//#undef HUMAN_MAX_OXYLOSS
//#undef HUMAN_CRIT_MAX_OXYLOSS
//#undef HUMAN_CRIT_MAX_OXYLOSS
@@ -252,7 +252,7 @@
/mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
+1 -2
View File
@@ -183,7 +183,6 @@ var/list/ai_verbs_default = list(
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
ai_list += src
..()
@@ -596,7 +595,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
+2 -2
View File
@@ -207,7 +207,7 @@
/mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -445,7 +445,7 @@
"<span class='notice'>You apply some [W] at [src.name]'s damaged areas.</span>")
else
user << "<span class='notice'>All [src.name]'s systems are nominal.</span>"
return
else if(W.force)
visible_message("<span class='danger'>[user.name] attacks [src] with [W]!</span>")
@@ -149,7 +149,6 @@ var/list/robot_verbs_default = list(
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
scanner.Grant(src)
/mob/living/silicon/robot/proc/init(var/alien=0)
@@ -910,7 +909,7 @@ var/list/robot_verbs_default = list(
/mob/living/silicon/robot/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -64,10 +64,10 @@
/mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob)
if(istype(M, /mob/living/simple_animal/construct/builder))
health += 5
M.emote("mends some of \the <EM>[src]'s</EM> wounds.")
M.custom_emote(1,"mends some of \the <EM>[src]'s</EM> wounds.")
else
if(M.melee_damage_upper <= 0)
M.emote("[M.friendly] \the <EM>[src]</EM>")
M.custom_emote(1, "[M.friendly] \the <EM>[src]</EM>")
else
M.do_attack_animation(src)
if(M.attack_sound)
@@ -39,7 +39,7 @@
if(!stat && !resting && !buckled)
for(var/mob/living/simple_animal/mouse/M in view(1,src))
if(!M.stat && Adjacent(M))
emote("me", 1, "splats \the [M]!")
custom_emote(1, "splats \the [M]!")
M.splat()
movement_target = null
stop_automated_movement = 0
@@ -94,7 +94,7 @@
user << "<span class='warning'>[src] is wearing too much armor! You can't reach \his skin.<span>"
visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
return
if (istype(O, /obj/item/weapon/razor))
@@ -464,10 +464,10 @@
movement_target.attack_animal(src)
else if(ishuman(movement_target.loc) )
if(prob(20))
emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
custom_emote(1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
if(prob(1))
emote("me", 1, pick("dances around.","chases its tail!"))
custom_emote(1, pick("dances around.","chases its tail!"))
spawn(0)
if (ckey == null)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
@@ -594,7 +594,7 @@
if(!stat && !resting && !buckled)
if(prob(1))
if (ckey == null)
emote("me", 1, pick("dances around.","chases her tail."))
custom_emote(1, pick("dances around.","chases her tail."))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
@@ -612,10 +612,10 @@
if(change > 0)
if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454
flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20)
emote("me", 1, "yaps happily!")
custom_emote(1, "yaps happily!")
else
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
emote("me", 1, "growls!")
custom_emote(1, "growls!")
/mob/living/simple_animal/pet/corgi/Ian/borgi
name = "E-N"
@@ -24,7 +24,7 @@
if(!stat && !resting && !buckled)
if(prob(1))
emote("me", 1, pick("chases its tail."))
custom_emote(1, pick("chases its tail."))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
@@ -50,13 +50,13 @@
/mob/living/simple_animal/hostile/scarybat/FindTarget()
. = ..()
if(.)
emote("flutters towards [.]")
custom_emote(1, "flutters towards [.]")
/mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available
if(istype(A) && A == owner)
return 0
return ..()
/mob/living/simple_animal/hostile/scarybat/CanAttack(var/atom/the_target)//This is here as a potential override to pick a specific target if available
if(istype(the_target) && the_target == owner)
return 0
@@ -86,7 +86,7 @@
if(stance_step in list(1,4,7)) //every 3 ticks
var/action = pick( list( "growls at [target]", "stares angrily at [target]", "prepares to attack [target]", "closely watches [target]" ) )
if(action)
emote(action)
custom_emote(1, action)
if(!found_mob)
stance_step--
@@ -97,7 +97,7 @@
if(HOSTILE_STANCE_ATTACKING)
if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest
emote( "is worn out and needs to rest" )
custom_emote(1, "is worn out and needs to rest" )
stance = HOSTILE_STANCE_TIRED
stance_step = 0
walk(src, 0) //This stops the bear's walking
@@ -125,14 +125,14 @@
/mob/living/simple_animal/hostile/bear/FindTarget()
. = ..()
if(.)
emote("stares alertly at [.]")
custom_emote(1, "stares alertly at [.]")
stance = HOSTILE_STANCE_ALERT
/mob/living/simple_animal/hostile/bear/LoseTarget()
..(5)
/mob/living/simple_animal/hostile/bear/AttackingTarget()
emote( pick( list("slashes at [target]", "bites [target]") ) )
custom_emote(1, pick( list("slashes at [target]", "bites [target]") ) )
var/damage = rand(20,30)
@@ -48,7 +48,7 @@
/mob/living/simple_animal/hostile/carp/FindTarget()
. = ..()
if(.)
emote("me", 1, "gnashes at [.]!")
custom_emote(1, "gnashes at [.]!")
/mob/living/simple_animal/hostile/carp/AttackingTarget()
..()
@@ -39,7 +39,7 @@
/mob/living/simple_animal/hostile/faithless/FindTarget()
. = ..()
if(.)
emote("me", 1, "wails at [.]!")
custom_emote(1, "wails at [.]!")
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
..()
@@ -41,7 +41,7 @@
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
if(.)
emote("growls at [.]")
custom_emote(1, "growls at [.]")
/mob/living/simple_animal/hostile/mimic/Die()
..()
@@ -161,7 +161,7 @@
..()
qdel(src)
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy()
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell.
//some random debris left behind
if(has_loot)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -59,7 +59,7 @@
/mob/living/simple_animal/hostile/retaliate/ghost/FindTarget()
. = ..()
if(.)
emote("wails at [.]")
custom_emote(1, "wails at [.]")
/mob/living/simple_animal/hostile/retaliate/ghost/Life()
if(target)
@@ -40,7 +40,7 @@
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
if(.)
emote("growls at [.]")
custom_emote(1, "growls at [.]")
/mob/living/simple_animal/hostile/tree/AttackingTarget()
. =..()
@@ -343,7 +343,7 @@
//Search for item to steal
parrot_interest = search_for_item()
if(parrot_interest)
emote("looks in [parrot_interest]'s direction and takes flight")
custom_emote(1,"looks in [parrot_interest]'s direction and takes flight")
parrot_state = PARROT_SWOOP | PARROT_STEAL
icon_state = "parrot_fly"
return
@@ -365,7 +365,7 @@
if(AM)
if(istype(AM, /obj/item) || isliving(AM)) //If stealable item
parrot_interest = AM
emote("turns and flies towards [parrot_interest]")
custom_emote(1,"turns and flies towards [parrot_interest]")
parrot_state = PARROT_SWOOP | PARROT_STEAL
return
else //Else it's a perch
@@ -479,11 +479,11 @@
var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
custom_emote(1, pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
else
L.adjustBruteLoss(damage)
emote(pick("pecks at [L].", "claws [L]."))
custom_emote(1, pick("pecks at [L].", "claws [L]."))
return
//Otherwise, fly towards the mob!
@@ -154,23 +154,23 @@
else
randomValue -= speak.len
if(emote_see && randomValue <= emote_see.len)
emote(pick(emote_see),1)
custom_emote(1, pick(emote_see))
else
emote(pick(emote_hear),2)
custom_emote(2, pick(emote_hear))
else
say(pick(speak))
else
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
emote(pick(emote_see),1)
custom_emote(1, pick(emote_see))
if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len))
emote(pick(emote_hear),2)
custom_emote(2, pick(emote_hear))
if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
var/length = emote_hear.len + emote_see.len
var/pick = rand(1,length)
if(pick <= emote_see.len)
emote(pick(emote_see),1)
custom_emote(1, pick(emote_see))
else
emote(pick(emote_hear),2)
custom_emote(2,pick(emote_hear))
//Atmos
@@ -274,7 +274,7 @@
/mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("me", 1, "[M.friendly] [src]")
M.custom_emote(1, "[M.friendly] [src]")
else
M.do_attack_animation(src)
if(M.attack_sound)
+3 -1
View File
@@ -30,7 +30,9 @@
client.images = null //remove the images such as AIs being unable to see runes
client.screen = list() //remove hud items just in case
if(hud_used) qdel(hud_used) //remove the hud objects
if(hud_used)
qdel(hud_used) //remove the hud objects
hud_used = null
hud_used = new /datum/hud(src)
next_move = 1
+1
View File
@@ -3,6 +3,7 @@
dead_mob_list -= src
living_mob_list -= src
qdel(hud_used)
hud_used = null
if(mind && mind.current == src)
spellremove(src)
ghostize()
+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
+10 -2
View File
@@ -33,10 +33,10 @@
if(is_bruised())
if(prob(2))
spawn owner.emote("me", 1, "coughs up blood!")
spawn owner.custom_emote(1, "coughs up blood!")
owner.drip(10)
if(prob(4))
spawn owner.emote("me", 1, "gasps for air!")
spawn owner.custom_emote(1, "gasps for air!")
owner.losebreath += 5
/obj/item/organ/kidneys
@@ -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"
@@ -45,6 +45,7 @@
/obj/singularity/Destroy()
processing_objects.Remove(src)
singularities -= src
target = null
return ..()
/obj/singularity/Move(atom/newloc, direct)
@@ -72,6 +72,7 @@
/obj/machinery/power/supermatter_shard/Destroy()
investigate_log("has been destroyed.", "supermatter")
qdel(radio)
radio = null
return ..()
/obj/machinery/power/supermatter_shard/proc/explode()
@@ -233,7 +234,7 @@
/obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob)
ui_interact(user)
/obj/machinery/power/supermatter_shard/attack_ghost(mob/user as mob)
ui_interact(user)
@@ -242,16 +243,16 @@
"<span class=\"danger\">You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"</span>",\
"<span class=\"warning\">You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.</span>")
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
Consume(user)
/obj/machinery/power/supermatter_shard/proc/get_integrity()
var/integrity = damage / explosion_point
integrity = round(100 - integrity * 100)
integrity = integrity < 0 ? 0 : integrity
return integrity
// This is purely informational UI that may be accessed by AIs or robots
/obj/machinery/power/supermatter_shard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0]
+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"
+1 -1
View File
@@ -290,7 +290,7 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
M << "<span class = 'danger'>Something isn't right!"
M.adjustBruteLoss(1)
if(2)
M.emote("me",1,"strains, but nothing happens.")
M.custom_emote(1,"strains, but nothing happens.")
M.adjustBruteLoss(2)
if(3)
M.emote("scream")
@@ -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
@@ -1652,82 +1652,40 @@
icon_state = "monkeycube"
bitesize = 12
filling_color = "#ADAC7F"
var/monkey_type = "Monkey"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
..()
reagents.add_reagent("protein",10)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O as obj, mob/user as mob, proximity)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity)
if(!proximity) return
if(istype(O,/obj/structure/sink) && !wrapped)
user << "You place [name] under a stream of water..."
if(loc == user)
user.unEquip(src)
forceMove(get_turf(src))
user << "<span class='notice'>You place [src] under a stream of water...</span>"
user.drop_item()
forceMove(get_turf(O))
return Expand()
..()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user)
if(wrapped)
Unwrap(user)
/*
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M)
M << "<span class = 'warning'>Something inside of you suddently expands!</span>"
if (istype(M, /mob/living/carbon/human))
//Do not try to understand.
var/obj/item/weapon/surprise = new/obj/item/weapon(M)
var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas
surprise.icon = ook.icon
surprise.icon_state = ook.icon_state
surprise.name = "malformed [ook.name]"
surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life."
qdel(ook) //rip nullspace monkey
surprise.transform *= 0.6
surprise.add_blood(M)
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/E = H.get_organ("chest")
E.fracture()
for (var/obj/item/organ/I in E.internal_organs)
I.take_damage(rand(I.min_bruised_damage, I.min_broken_damage+1))
if (!E.hidden && prob(60)) //set it snuggly
E.hidden = surprise
E.cavity = 0
else //someone is having a bad day
E.createwound(CUT, 30)
E.embed(surprise)
else if (issmall(M))
M.visible_message("<span class='danger'>[M] suddenly tears in half!</span>")
var/mob/living/carbon/monkey/ook = new monkey_type(M.loc)
ook.name = "malformed [ook.name]"
ook.transform *= 0.6
ook.add_blood(M)
M.gib()
..()
*/
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
if(volume >= 5)
return Expand()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
for(var/mob/M in viewers(src,7))
M << "\red \The [src] expands!"
var/mob/living/carbon/human/H = new (src)
visible_message("<span class='notice'>[src] expands!</span>")
var/mob/living/carbon/human/H = new (get_turf(src))
H.set_species(monkey_type)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user)
icon_state = "monkeycube"
desc = "Just add water!"
user << "You unwrap the cube."
user << "<span class='notice'>You unwrap the cube.</span>"
wrapped = 0
return
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
desc = "Still wrapped in some paper."
@@ -1737,22 +1695,23 @@
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube
name = "farwa cube"
monkey_type = "Farwa"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube
name = "farwa cube"
monkey_type = "Farwa"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube
name = "wolpin cube"
monkey_type = "Wolpin"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube
name = "wolpin cube"
monkey_type = "Wolpin"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube
name = "stok cube"
monkey_type = "Stok"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube
name = "stok cube"
monkey_type = "Stok"
+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
+3 -3
View File
@@ -552,7 +552,7 @@
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
if(prob(30))
mob.emote("me",1,"is sweating profusely!")
mob.custom_emote(1,"is sweating profusely!")
if(istype(mob.loc,/turf/simulated))
var/turf/simulated/T = mob.loc
@@ -583,7 +583,7 @@
if(pick(0,1))
mob.say(pick("Uh HUH!", "Thank you, Thank you very much...", "I ain't nothin' but a hound dog!", "Swing low, sweet chariot!"))
else
mob.emote("me",1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!"))
mob.custom_emote(1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!"))
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
if(H.species.name == "Human" && !(H.f_style == "Pompadour"))
@@ -945,7 +945,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human)
name = "Wheezing"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
mob.emote("me",1,"wheezes.")
mob.custom_emote(1,"wheezes.")
/datum/disease2/effect/optimistic_minor