Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into ImportentpAIUpdate

This commit is contained in:
Aurorablade
2015-06-24 16:04:17 -04:00
237 changed files with 1015 additions and 1092 deletions
+17 -8
View File
@@ -384,17 +384,26 @@ var/list/admin_verbs_mentor = list(
if(null)
return 0
if("Small Bomb")
explosion(epicenter, 1, 2, 3)
explosion(epicenter, 1, 2, 3, 3)
if("Medium Bomb")
explosion(epicenter, 2, 3, 4)
explosion(epicenter, 2, 3, 4, 4)
if("Big Bomb")
explosion(epicenter, 3, 5, 7)
explosion(epicenter, 3, 5, 7, 5)
if("Custom Bomb")
var/devastation_range = input("Devastation range (in tiles):") as num
var/heavy_impact_range = input("Heavy impact range (in tiles):") as num
var/light_impact_range = input("Light impact range (in tiles):") as num
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range)
message_admins("\blue [ckey] creating an admin explosion at [epicenter.loc].")
var/devastation_range = input("Devastation range (in tiles):") as null|num
if(devastation_range == null)
return
var/heavy_impact_range = input("Heavy impact range (in tiles):") as null|num
if(heavy_impact_range == null)
return
var/light_impact_range = input("Light impact range (in tiles):") as null|num
if(light_impact_range == null)
return
var/flash_range = input("Flash range (in tiles):") as null|num
if(flash_range == null)
return
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, 1, 1)
message_admins("<span class='adminnotice'>[ckey] creating an admin explosion at [epicenter.loc].</span>")
feedback_add_details("admin_verb","DB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_spell(mob/T as mob in mob_list) // -- Urist
+16 -12
View File
@@ -2332,18 +2332,22 @@
if("togglebombcap")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BC")
switch(MAX_EXPLOSION_RANGE)
if(14) MAX_EXPLOSION_RANGE = 16
if(16) MAX_EXPLOSION_RANGE = 20
if(20) MAX_EXPLOSION_RANGE = 28
if(28) MAX_EXPLOSION_RANGE = 56
if(56) MAX_EXPLOSION_RANGE = 128
else MAX_EXPLOSION_RANGE = 14
var/range_dev = MAX_EXPLOSION_RANGE *0.25
var/range_high = MAX_EXPLOSION_RANGE *0.5
var/range_low = MAX_EXPLOSION_RANGE
message_admins("\red <b> [key_name_admin(usr)] changed the bomb cap to [range_dev], [range_high], [range_low]</b>", 1)
log_admin("[key_name_admin(usr)] changed the bomb cap to [MAX_EXPLOSION_RANGE]")
var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be between 4 and 128)", "New Bomb Cap", MAX_EX_LIGHT_RANGE) as num|null
if (newBombCap < 4)
return
if (newBombCap > 128)
newBombCap = 128
MAX_EX_DEVESTATION_RANGE = round(newBombCap/4)
MAX_EX_HEAVY_RANGE = round(newBombCap/2)
MAX_EX_LIGHT_RANGE = newBombCap
//I don't know why these are their own variables, but fuck it, they are.
MAX_EX_FLASH_RANGE = newBombCap
MAX_EX_FLAME_RANGE = newBombCap
message_admins("<span class='boldannounce'>[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]</span>")
log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
if("flicklights")
feedback_inc("admin_secrets_fun_used",1)
+7 -5
View File
@@ -698,15 +698,17 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(light == null) return
var/flash = input("Range of flash. -1 to none", text("Input")) as num|null
if(flash == null) return
var/flames = input("Range of flames. -1 to none", text("Input")) as num|null
if(flames == null) return
if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1))
if ((devastation > 20) || (heavy > 20) || (light > 20))
if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1) || (flames != -1))
if ((devastation > 20) || (heavy > 20) || (light > 20) || (flames > 20))
if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No")
return
explosion(O, devastation, heavy, light, flash)
log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])")
message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])", 1)
explosion(O, devastation, heavy, light, flash, null, null,flames)
log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])")
message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flames]) at ([O.x],[O.y],[O.z])")
feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
else
+3 -3
View File
@@ -192,15 +192,15 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
if(3.0)
if (prob(25))
del(src)
qdel(src)
return
return
+1 -1
View File
@@ -216,4 +216,4 @@
if(previous)
previous.next = null
master.last = previous
..()
return ..()
+1 -2
View File
@@ -12,8 +12,7 @@
/obj/item/assembly/shock_kit/Destroy()
del(part1)
del(part2)
..()
return
return ..()
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/wrench) && !status)
+1 -1
View File
@@ -138,7 +138,7 @@
/obj/item/clothing/mask/horsehead/Destroy()
if(flags & NODROP)
goodbye_horses(loc)
..()
return ..()
/obj/item/clothing/mask/horsehead/proc/goodbye_horses(mob/user) //I'm flying over you
if(!ismob(user))
@@ -14,7 +14,7 @@
/obj/item/clothing/head/helmet/space/chronos/Destroy()
dropped()
..()
return ..()
/obj/item/clothing/suit/space/chronos
@@ -55,7 +55,7 @@
/obj/item/clothing/suit/space/chronos/Destroy()
dropped()
..()
return ..()
/obj/item/clothing/suit/space/chronos/emp_act(severity)
var/mob/living/carbon/human/user = src.loc
@@ -209,4 +209,4 @@
holder.remote_control = null
if(holder.client && (holder.client.eye == src))
holder.client.eye = holder
..()
return ..()
+45 -73
View File
@@ -214,82 +214,54 @@
if(!istype(user,/mob/living)) return
if(user.a_intent == "help")
if(istype(src.loc,/mob/living))
user << "How do you propose to modify a hardsuit while it is being worn?"
if(istype(src.loc,/mob/living))
user << "How do you propose to modify a hardsuit while it is being worn?"
return
if(istype(W,/obj/item/weapon/screwdriver))
if(!helmet)
user << "\The [src] does not have a helmet installed."
else
user << "You detach \the [helmet] from \the [src]'s helmet mount."
helmet.loc = get_turf(src)
src.helmet = null
return
if(!boots)
user << "\The [src] does not have any boots installed."
else
user << "You detatch \the [boots] from \the [src]'s boot mounts."
boots.loc = get_turf(src)
boots = null
return
else if(istype(W,/obj/item/clothing/head/helmet/space))
if(!attached_helmet)
user << "\The [src] does not have a helmet mount."
return
if(helmet)
user << "\The [src] already has a helmet installed."
else
user << "You attach \the [W] to \the [src]'s helmet mount."
user.drop_item()
W.loc = src
src.helmet = W
return
else if(istype(W,/obj/item/clothing/shoes/magboots))
if(!attached_boots)
user << "\The [src] does not have boot mounts."
return
var/target_zone = user.zone_sel.selecting
if(target_zone == "head")
//Installing a component into or modifying the contents of the helmet.
if(!attached_helmet)
user << "\The [src] does not have a helmet mount."
return
if(istype(W,/obj/item/weapon/screwdriver))
if(!helmet)
user << "\The [src] does not have a helmet installed."
else
user << "You detach \the [helmet] from \the [src]'s helmet mount."
helmet.loc = get_turf(src)
src.helmet = null
return
else if(istype(W,/obj/item/clothing/head/helmet/space))
if(helmet)
user << "\The [src] already has a helmet installed."
else
user << "You attach \the [W] to \the [src]'s helmet mount."
user.drop_item()
W.loc = src
src.helmet = W
return
else
return ..()
else if(target_zone == "l_leg" || target_zone == "r_leg" || target_zone == "l_foot" || target_zone == "r_foot")
//Installing a component into or modifying the contents of the feet.
if(!attached_boots)
user << "\The [src] does not have boot mounts."
return
if(istype(W,/obj/item/weapon/screwdriver))
if(!boots)
user << "\The [src] does not have any boots installed."
else
user << "You detatch \the [boots] from \the [src]'s boot mounts."
boots.loc = get_turf(src)
boots = null
return
else if(istype(W,/obj/item/clothing/shoes/magboots))
if(boots)
user << "\The [src] already has magboots installed."
else
user << "You attach \the [W] to \the [src]'s boot mounts."
user.drop_item()
W.loc = src
boots = W
else
return ..()
/*
else if(target_zone == "l_arm" || target_zone == "r_arm" || target_zone == "l_hand" || target_zone == "r_hand")
//Installing a component into or modifying the contents of the hands.
else if(target_zone == "torso" || target_zone == "groin")
//Modifying the cell or mounted devices
if(!mounted_devices)
return
*/
else //wat
return ..()
if(boots)
user << "\The [src] already has magboots installed."
else
user << "You attach \the [W] to \the [src]'s boot mounts."
user.drop_item()
W.loc = src
boots = W
else
return ..()
..()
+2 -10
View File
@@ -201,14 +201,6 @@
// todo does this do enough
meteorhit(var/obj/O as obj)
for(var/x in verbs)
verbs -= x
set_broken()
return
emp_act(severity)
if(prob(20/severity)) set_broken()
..()
@@ -217,11 +209,11 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(25))
del(src)
qdel(src)
return
if (prob(50))
for(var/x in verbs)
+23 -2
View File
@@ -236,7 +236,7 @@
icon_state = "noble_boot"
_color = "noble_boot"
item_state = "noble_boot"
/////Arachno-Man Costume set //the flagbearer: Willow Walker
/obj/item/clothing/under/fluff/arachno_suit // Custom Jumpsuit
name = "Arachno-Man costume"
@@ -247,7 +247,7 @@
_color = "superior_suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES
/obj/item/clothing/head/fluff/arachno_mask
name = "Arachno-Man mask"
desc = "Put it on. The mask, it's gonna make you stronger!"
@@ -258,4 +258,25 @@
flags = BLOCKHAIR
flags_inv = HIDEFACE
///Aeronuatical Jumpsuit and Jacket //Fox P McCloud: Fox McCloud
//Huge thanks to Nienhaus for these sprites!
/obj/item/clothing/under/fluff/fox
name = "Aeronuatics Jumpsuit"
desc = "A jumpsuit tailor made for spacefaring fighter pilots; this one seems very old."
icon = 'icons/obj/custom_items.dmi'
icon_state = "fox_suit"
item_state = "g_suit"
_color = "fox_suit"
displays_id = 0 //still appears on examine; this is pure fluff.
/obj/item/clothing/suit/jacket/fluff/fox
name = "Aeronautics Jacket"
desc = "An aviator styled jacket made from a peculiar material; this one seems very old."
icon = 'icons/obj/custom_items.dmi'
icon_state = "fox_jacket"
item_state = "fox_jacket"
//////////// Weapons ////////////
+1 -1
View File
@@ -144,7 +144,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Vines", /datum/event/spacevine, 250, list(ASSIGNMENT_ENGINEER = 10)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 20)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ores", /datum/event/dust/meaty, 0, list(ASSIGNMENT_ENGINEER = 30)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
-1
View File
@@ -86,7 +86,6 @@ var/global/list/possibleEvents = list()
possibleEvents[/datum/event/anomaly/anomaly_flux] = 50 + 50 * active_with_role["Engineer"]
possibleEvents[/datum/event/meteor_wave] = 10 * active_with_role["Engineer"]
possibleEvents[/datum/event/meteor_shower] = 20 * active_with_role["Engineer"]
possibleEvents[/datum/event/blob] = 10 * active_with_role["Engineer"]
if(active_with_role["Medical"] > 0)
+28 -35
View File
@@ -1,46 +1,39 @@
//cael - two events here
//meteor storms are much heavier
/datum/event/meteor_wave
startWhen = 6
endWhen = 33
/datum/event/meteor_wave/setup()
endWhen = rand(10,25) * 3
/datum/event/meteor_wave/announce()
command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
/datum/event/meteor_wave/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(rand(2,5))
/datum/event/meteor_wave/end()
command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
//
/datum/event/meteor_shower
startWhen = 5
endWhen = 7
var/next_meteor = 6
var/waves = 1
/datum/event/meteor_shower/setup()
waves = rand(1,4)
/datum/event/meteor_wave/setup()
waves = severity * rand(1,3)
/datum/event/meteor_shower/announce()
command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
/datum/event/meteor_wave/announce()
switch(severity)
if(EVENT_LEVEL_MAJOR)
command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
else
command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
//meteor showers are lighter and more common,
/datum/event/meteor_shower/tick()
if(activeFor >= next_meteor)
spawn_meteors(rand(1,4))
next_meteor += rand(20,100)
/datum/event/meteor_wave/tick()
if(waves && activeFor >= next_meteor)
spawn() spawn_meteors(severity * rand(1,2), get_meteors())
next_meteor += rand(15, 30) / severity
waves--
if(waves <= 0)
endWhen = activeFor + 1
else
endWhen = next_meteor + 1
endWhen = (waves ? next_meteor + 1 : activeFor + 15)
/datum/event/meteor_shower/end()
command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
/datum/event/meteor_wave/end()
switch(severity)
if(EVENT_LEVEL_MAJOR)
command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
else
command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
/datum/event/meteor_wave/proc/get_meteors()
switch(severity)
if(EVENT_LEVEL_MAJOR)
return meteors_catastrophic
if(EVENT_LEVEL_MODERATE)
return meteors_threatening
else
return meteors_normal
+1 -1
View File
@@ -32,7 +32,7 @@
invisibility = 101
new /obj/effect/decal/cleanable/blood(get_turf(A))
if(ismob(A))
A.meteorhit(src)
A.ex_act(strength)
else
spawn(0)
if(A)
+2 -2
View File
@@ -12,6 +12,6 @@
newAnomaly = new /obj/effect/anomaly/flux(T.loc)
/datum/event/anomaly/anomaly_flux/end()
if(newAnomaly)//If it hasn't been neutralized, it's time to blow up.
explosion(newAnomaly.loc, 0, 4, 6, 5)
if(newAnomaly.loc)//If it hasn't been neutralized, it's time to blow up.
explosion(newAnomaly, -1, 3, 5, 5)
qdel(newAnomaly)
+1 -1
View File
@@ -20,7 +20,7 @@
/datum/event/anomaly/anomaly_pyro/end()
if(newAnomaly.loc)
explosion(get_turf(newAnomaly), -1,0,3)
explosion(get_turf(newAnomaly), -1,0,3, flame_range = 4)
var/mob/living/carbon/slime/S = new/mob/living/carbon/slime(get_turf(newAnomaly))
S.colour = pick("red", "orange")
@@ -50,7 +50,7 @@
M.speak = rampant_speeches.Copy()
M.speak_chance = 15
else
explosion(upriser.loc, -1, 1, 2)
explosion(upriser.loc, -1, 1, 2, 4, 0)
qdel(upriser)
kill()
+2 -2
View File
@@ -80,7 +80,7 @@
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
if(ismob(A))
A.meteorhit(src)//This should work for now I guess
A.ex_act(strength)//This should work for now I guess
else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round!
A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4
@@ -99,5 +99,5 @@
ex_act(severity)
del(src)
qdel(src)
return
@@ -85,7 +85,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
else if (istype(clong, /mob))
if(clong.density || prob(10))
clong.meteorhit(src)
clong.ex_act(2)
else
del(src)
+1
View File
@@ -25,6 +25,7 @@
/obj/effect/landmark/animal_spawner/Destroy()
processing_objects.Remove(src)
return ..()
/obj/effect/landmark/animal_spawner/panther
name = "panther spawner"
+1
View File
@@ -29,6 +29,7 @@
/obj/effect/jungle_tribe_spawn/Destroy()
processing_objects.Remove(src)
return ..()
/obj/effect/jungle_tribe_spawn/process()
set background = 1
@@ -113,3 +113,5 @@
D.effect_r -= src
D.effect_g -= src
D.effect_b -= src
return ..()
+1 -1
View File
@@ -133,7 +133,7 @@ obj/effect/liquid/Move()
obj/effect/liquid/Destroy()
src.controller.liquid_objects.Remove(src)
..()
return ..()
obj/effect/liquid/proc/update_icon2()
//icon_state = num2text( max(1,min(7,(floor(volume),10)/10)) )
+1 -1
View File
@@ -101,4 +101,4 @@
/obj/machinery/media/Destroy()
disconnect_media_source()
..()
return ..()
+2 -2
View File
@@ -82,8 +82,8 @@
if (attempts == 0)
user << "<span class='danger'>The crate's anti-tamper system activates!</span>"
var/turf/T = get_turf(src.loc)
explosion(T, 0, 0, 0, 1)
del(src)
explosion(T, -1, -1, 1, 1)
qdel(src)
return
else
user << "<span class='notice'>You attempt to interact with the device using a hand gesture, but it appears this crate is from before the DECANECT came out.</span>"
+1 -1
View File
@@ -264,7 +264,7 @@
s.set_up(5, 1, src)
s.start()
if(prob(50 / severity) && severity < 3)
del(src)
qdel(src)
/**********************Mining Equipment Locker Items**************************/
+1 -5
View File
@@ -43,7 +43,7 @@
ex_act(severity)
switch(severity)
if(1.0) del(src)
if(1.0) qdel(src)
if(2.0)
if (prob(60)) stat |= BROKEN
if(3.0)
@@ -54,10 +54,6 @@
if (prob(25)) del src
return
meteorhit()
if (prob(50)) del src
return
power_change()
if(stat & BROKEN) icon_state = "fab-broken"
else
+2 -2
View File
@@ -343,12 +343,12 @@
if(5)
var/quantity = rand(1,3)
for(var/i=0, i<quantity, i++)
getFromPool(/obj/item/weapon/shard, loc)
PoolOrNew(/obj/item/weapon/shard, loc)
if(6)
var/quantity = rand(1,3)
for(var/i=0, i<quantity, i++)
getFromPool(/obj/item/weapon/shard/plasma, loc)
PoolOrNew(/obj/item/weapon/shard/plasma, loc)
if(7)
var/obj/item/stack/sheet/mineral/uranium/R = new(src)
+1 -1
View File
@@ -92,7 +92,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi
del(ghostimage)
ghostimage = null
updateallghostimages()
..()
return ..()
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 1
@@ -125,18 +125,6 @@
adjustFireLoss(damage)
return
/mob/living/carbon/alien/humanoid/meteorhit(O as obj)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0)
adjustFireLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
adjustFireLoss(30)
updatehealth()
return
/mob/living/carbon/alien/humanoid/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
@@ -129,17 +129,6 @@
/mob/living/carbon/alien/larva/attack_ui(slot_id)
return
/mob/living/carbon/alien/larva/meteorhit(O as obj)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0)
adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
adjustFireLoss(30)
updatehealth()
return
/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]")
@@ -25,7 +25,7 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
affected_mob.status_flags &= ~(XENO_HOST)
spawn(0)
RemoveInfectionImages(affected_mob)
..()
return ..()
/obj/item/alien_embryo/process()
if(!affected_mob) return
@@ -382,22 +382,6 @@
apply_damage(rand(20,30), BRUTE, affecting, run_armor_check(affecting, "melee"))
return
/mob/living/carbon/human/meteorhit(O as obj)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [src] has been hit by [O]", 1)
if (health > 0)
var/obj/item/organ/external/affecting = get_organ(pick("chest", "chest", "chest", "head"))
if(!affecting) return
if (istype(O, /obj/effect/immovablerod))
if(affecting.take_damage(101, 0))
UpdateDamageIcon()
else
if(affecting.take_damage((istype(O, /obj/effect/meteor/small) ? 10 : 25), 30))
UpdateDamageIcon()
updatehealth()
return
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
@@ -239,17 +239,6 @@
/mob/living/carbon/slime/attack_ui(slot)
return
/mob/living/carbon/slime/meteorhit(O as obj)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0)
adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25))
adjustFireLoss(30)
updatehealth()
return
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
+1 -12
View File
@@ -225,7 +225,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/Destroy()
ai_list -= src
..()
return ..()
/*
@@ -591,17 +591,6 @@ var/list/ai_verbs_default = list(
return
/mob/living/silicon/ai/meteorhit(obj/O as obj)
for(var/mob/M in viewers(src, null))
M.show_message(text("\red [] has been hit by []", src, O), 1)
//Foreach goto(19)
if (health > 0)
adjustBruteLoss(30)
if ((O.icon_state == "flaming"))
adjustFireLoss(40)
updatehealth()
return
/mob/living/silicon/ai/bullet_act(var/obj/item/projectile/Proj)
..(Proj)
updatehealth()
@@ -29,6 +29,7 @@
del(ghostimage)
ghostimage = null;
updateallghostimages()
return ..()
// Movement code. Returns 0 to stop air movement from moving it.
/mob/aiEye/Move()
+1 -11
View File
@@ -201,16 +201,6 @@
// See software.dm for Topic()
/mob/living/silicon/pai/meteorhit(obj/O as obj)
for(var/mob/M in viewers(src, null))
M.show_message(text("\red [] has been hit by []", src, O), 1)
if (src.health > 0)
src.adjustBruteLoss(30)
if ((O.icon_state == "flaming"))
src.adjustFireLoss(40)
src.updatehealth()
return
/mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0)
M.emote("[M.friendly] [src]")
@@ -545,4 +535,4 @@
pie.item_state = "pai-[icon_state]"
return
..()
..()
+2 -14
View File
@@ -179,7 +179,7 @@ var/list/robot_verbs_default = list(
if(T) mmi.loc = T
if(mind) mind.transfer_to(mmi.brainmob)
mmi = null
..()
return ..()
/mob/living/silicon/robot/proc/pick_module()
if(module)
@@ -528,18 +528,6 @@ var/list/robot_verbs_default = list(
return
/mob/living/silicon/robot/meteorhit(obj/O as obj)
for(var/mob/M in viewers(src, null))
M.show_message(text("\red [src] has been hit by [O]"), 1)
//Foreach goto(19)
if (health > 0)
adjustBruteLoss(30)
if ((O.icon_state == "flaming"))
adjustFireLoss(40)
updatehealth()
return
/mob/living/silicon/robot/bullet_act(var/obj/item/projectile/Proj)
..(Proj)
updatehealth()
@@ -1236,7 +1224,7 @@ var/list/robot_verbs_default = list(
if(emagged)
if(mmi)
qdel(mmi)
explosion(src.loc,1,2,4)
explosion(src.loc,1,2,4,flame_range = 2)
else
explosion(src.loc,-1,0,2)
gib()
@@ -35,7 +35,7 @@
/mob/living/simple_animal/bee/Destroy()
if(parent)
parent.owned_bee_swarms.Remove(src)
..()
return ..()
/mob/living/simple_animal/bee/Life()
..()
@@ -14,6 +14,7 @@
user << "<span class='notice'>You put the [P] around [src]'s neck.</span>"
if(P.tagname)
name = P.tagname
real_name = P.tagname
qdel(P)
return
if(istype(O, /obj/item/weapon/newspaper))
@@ -43,4 +44,4 @@
/mob/living/simple_animal/pet/regenerate_icons()
overlays.Cut()
overlays += collar
overlays += pettag
overlays += pettag
@@ -193,7 +193,7 @@
/mob/living/simple_animal/spiderbot/Destroy()
eject_brain()
..()
return ..()
/mob/living/simple_animal/spiderbot/New()
@@ -170,16 +170,16 @@
var/obj/O
//shards
O = getFromPool(/obj/item/weapon/shard, loc)
O = PoolOrNew(/obj/item/weapon/shard, loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
O = getFromPool(/obj/item/weapon/shard, loc)
O = PoolOrNew(/obj/item/weapon/shard, loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
O = getFromPool(/obj/item/weapon/shard, loc)
O = PoolOrNew(/obj/item/weapon/shard, loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
O = getFromPool(/obj/item/weapon/shard, loc)
O = PoolOrNew(/obj/item/weapon/shard, loc)
step_to(O, get_turf(pick(view(7, src))))
//rods
@@ -270,7 +270,7 @@
C.name = "Corrupted drone morality core"
C.origin_tech = "illegal=[rand(3,6)]"
..()
return ..()
/obj/item/projectile/beam/drone
damage = 15
@@ -216,7 +216,7 @@
/mob/living/simple_animal/hostile/spaceWorm/Destroy()
if(previousWorm)
previousWorm.Detach(0)
..()
return ..()
//Move all segments if one piece moves.
@@ -140,7 +140,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
if (1)
new /obj/item/weapon/shard( src.loc )
Break()
del(src)
qdel(src)
if (2)
if (prob(50))
src.health -= 15
@@ -165,12 +165,6 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
del(src)
/obj/structure/tribble_cage/meteorhit(obj/O as obj)
new /obj/item/weapon/shard( src.loc )
Break()
del(src)
/obj/structure/tribble_cage/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
+1 -1
View File
@@ -3,7 +3,7 @@
dead_mob_list -= src
living_mob_list -= src
ghostize()
..()
return ..()
/mob/New()
mob_list += src
+1 -1
View File
@@ -416,7 +416,7 @@
affecting.layer = initial(affecting.layer)
affecting.grabbed_by -= src
del(hud)
..()
return ..()
#undef EAT_TIME_XENO
#undef EAT_TIME_FAT
+3 -3
View File
@@ -132,10 +132,10 @@
/obj/machinery/photocopier/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
if(2.0)
if(prob(50))
del(src)
qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/blood/oil(get_turf(src))
@@ -149,7 +149,7 @@
/obj/machinery/photocopier/blob_act()
if(prob(50))
del(src)
qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/blood/oil(get_turf(src))
+101
View File
@@ -0,0 +1,101 @@
/*
/tg/station13 /atom/movable Pool:
---------------------------------
By RemieRichards
Creation/Deletion is laggy, so let's reduce reuse and recycle!
Locked to /atom/movable and it's subtypes due to Loc being a const var on /atom
but being read&write on /movable due to how they... move.
Usage:
To get a object, just called PoolOrNew(type, list of args to pass to New)
To put a object back in the pool, call place in pool.
This will call destroy on the object, set its loc to null,
and reset all of its vars to their default
You can override your object's destroy to return QDEL_HINT_PLACEINPOOL
to ensure its always placed in this pool (this will only be acted on if qdel calls destroy, and destroy will not get called twice)
*/
var/global/list/GlobalPool = list()
//You'll be using this proc 90% of the time.
//It grabs a type from the pool if it can
//And if it can't, it creates one
//The pool is flexible and will expand to fit
//The new created atom when it eventually
//Goes into the pool
//Second argument can be a new location
//Or a list of arguments
//Either way it gets passed to new
/proc/PoolOrNew(var/get_type,var/second_arg)
if(!get_type)
return
var/atom/movable/AM
AM = GetFromPool(get_type,second_arg)
if(!AM)
if(ispath(get_type))
if(islist(second_arg))
AM = new get_type (arglist(second_arg))
else
AM = new get_type (second_arg)
if(AM)
return AM
/proc/GetFromPool(var/get_type,var/second_arg)
if(!get_type)
return 0
if(isnull(GlobalPool[get_type]))
return 0
if(length(GlobalPool[get_type]) == 0)
return 0
var/atom/movable/AM = pick_n_take(GlobalPool[get_type])
if(AM)
AM.ResetVars()
if(islist(second_arg))
AM.loc = second_arg[1]
AM.New(arglist(second_arg))
else
AM.loc = second_arg
AM.New(second_arg)
return AM
return 0
/proc/PlaceInPool(var/atom/movable/AM, destroy = 1)
if(!istype(AM))
return
if(AM in GlobalPool[AM.type])
return
if(!GlobalPool[AM.type])
GlobalPool[AM.type] = list()
GlobalPool[AM.type] |= AM
if (destroy)
AM.Destroy()
AM.ResetVars()
/atom/movable/proc/ResetVars()
var/list/excluded = list("animate_movement", "loc", "locs", "parent_type", "vars", "verbs", "type")
for(var/V in vars)
if(V in excluded)
continue
vars[V] = initial(vars[V])
vars["loc"] = null
+1 -1
View File
@@ -38,7 +38,7 @@
/obj/machinery/power/am_control_unit/Destroy()//Perhaps damage and run stability checks rather than just del on the others
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
del(AMS)
..()
return ..()
/obj/machinery/power/am_control_unit/process()
+1 -2
View File
@@ -70,8 +70,7 @@ proc/cardinalrange(var/center)
if(processing) shutdown_core()
visible_message("\red The [src.name] melts!")
//Might want to have it leave a mess on the floor but no sprites for now
..()
return
return ..()
/obj/machinery/am_shielding/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+1 -6
View File
@@ -1254,11 +1254,6 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
// damage and destruction acts
/obj/machinery/power/apc/meteorhit(var/obj/O as obj)
set_broken()
return
/obj/machinery/power/apc/emp_act(severity)
if(cell)
cell.emp_act(severity)
@@ -1335,7 +1330,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
area.power_change()
if(occupant)
malfvacate(1)
..()
return ..()
/obj/machinery/power/apc/proc/shock(mob/user, prb)
if(!prob(prb))
+1 -1
View File
@@ -98,7 +98,7 @@
attached.anchored = 0
attached.attached = null
attached = null*/
..() // then go ahead and delete the cable
return ..() // then go ahead and delete the cable
/obj/structure/cable/hide(var/i)
+1 -3
View File
@@ -110,9 +110,7 @@
message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
spawn(1)
del(src)
qdel(src)
/obj/item/weapon/stock_parts/cell/proc/corrupt()
charge /= 2
+2 -2
View File
@@ -54,7 +54,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
set_broken()
if(main_part)
qdel(main_part)
..()
return ..()
//
// Part generator which is mostly there for looks
@@ -126,7 +126,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
if (!(A.z in config.station_levels)) continue
A.gravitychange(0,A)
shake_everyone()
..()
return ..()
+1 -1
View File
@@ -211,7 +211,7 @@
if(A)
on = 0
// A.update_lights()
..()
return ..()
/obj/machinery/light/update_icon()
+1 -1
View File
@@ -125,7 +125,7 @@ display round(lastgen) and plasmatank amount
/obj/machinery/power/port_gen/pacman/Destroy()
DropFuel()
..()
return ..()
/obj/machinery/power/port_gen/pacman/RefreshParts()
var/temp_rating = 0
+1 -1
View File
@@ -11,7 +11,7 @@
/obj/machinery/power/Destroy()
disconnect_from_network()
..()
return ..()
// common helper procs for all power machines
/obj/machinery/power/proc/add_avail(var/amount)
+1 -1
View File
@@ -23,7 +23,7 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/Destroy()
rad_collectors -= src
..()
return ..()
/obj/machinery/power/rad_collector/process()
if(P)
@@ -19,7 +19,7 @@
FG1.cleanup()
if(FG2 && !FG2.clean_up)
FG2.cleanup()
..()
return ..()
/obj/machinery/containment_field/attack_hand(mob/user as mob)
if(get_dist(src, user) > 1)
@@ -36,8 +36,6 @@
/obj/machinery/containment_field/ex_act(severity)
return 0
/obj/machinery/containment_field/meteorhit()
return 0
/obj/machinery/containment_field/HasProximity(atom/movable/AM as mob|obj)
if(istype(AM,/mob/living/silicon) && prob(40))
+6 -5
View File
@@ -89,7 +89,7 @@
msg_admin_attack("Emitter deleted at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Emitter deleted at ([x],[y],[z])")
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z])","singulo")
..()
return ..()
/obj/machinery/power/emitter/update_icon()
if (active && powernet && avail(active_power_usage))
@@ -135,8 +135,6 @@
src.use_power = 1 */
return 1
/obj/machinery/containment_field/meteorhit()
return 0
/obj/machinery/power/emitter/process()
if(stat & (BROKEN))
@@ -167,13 +165,16 @@
else
src.fire_delay = rand(20,100)
src.shot_number = 0
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter(src.loc)
var/obj/item/projectile/beam/emitter/A = PoolOrNew(/obj/item/projectile/beam/emitter,src.loc)
A.dir = src.dir
playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1)
if(prob(35))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
A.dir = src.dir
switch(dir)
if(NORTH)
A.yo = 20
@@ -163,8 +163,6 @@ field_generator power level display
else
..()
/obj/machinery/containment_field/meteorhit()
return 0
/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj)
if(Proj.flag != "bullet")
@@ -175,7 +173,7 @@ field_generator power level display
/obj/machinery/field_generator/Destroy()
src.cleanup()
..()
return ..()
@@ -157,11 +157,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return
/obj/structure/particle_accelerator/meteorhit()
if(prob(50))
del(src)
return
/obj/structure/particle_accelerator/update_icon()
switch(construction_state)
if(0,1)
@@ -344,12 +339,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return
/obj/machinery/particle_accelerator/meteorhit()
if(prob(50))
del(src)
return
/obj/machinery/particle_accelerator/proc/update_state()
return 0
@@ -43,7 +43,7 @@
/obj/singularity/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/singularity/Move(atom/newloc, direct)
if(current_size >= STAGE_FIVE || check_turfs_in(direct))
+1 -1
View File
@@ -219,7 +219,7 @@
investigate_log("<font color='red'>deleted</font> at ([area.name])","singulo")
if(terminal)
disconnect_terminal()
..()
return ..()
// create a terminal object pointing towards the SMES
// wires will attach to this
+4 -4
View File
@@ -29,7 +29,7 @@ var/list/solars_list = list()
/obj/machinery/power/solar/Destroy()
unset_control() //remove from control computer
..()
return ..()
//set the control of the panel to a given computer if closer than SOLAR_MAX_DIST
/obj/machinery/power/solar/proc/set_control(var/obj/machinery/power/solar_control/SC)
@@ -304,7 +304,7 @@ var/list/solars_list = list()
M.unset_control()
if(connected_tracker)
connected_tracker.unset_control()
..()
return ..()
/obj/machinery/power/solar_control/disconnect_from_network()
..()
@@ -386,7 +386,7 @@ var/list/solars_list = list()
data["connected_panels"] = connected_panels.len
data["connected_tracker"] = (connected_tracker ? 1 : 0)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "solar_control.tmpl", name, 490, 420)
ui.set_initial_data(data)
@@ -446,7 +446,7 @@ var/list/solars_list = list()
/obj/machinery/power/solar_control/Topic(href, href_list)
if(..())
return
if(href_list["rate_control"])
if(href_list["cdir"])
src.cdir = dd_range(0,359,(360+src.cdir+text2num(href_list["cdir"]))%360)
+1 -1
View File
@@ -23,7 +23,7 @@
/obj/machinery/power/tracker/Destroy()
unset_control() //remove from control computer
..()
return ..()
//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST
/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC)
+1 -1
View File
@@ -229,7 +229,7 @@
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
getFromPool(/obj/item/weapon/shard, loc)
PoolOrNew(/obj/item/weapon/shard, loc)
var/obj/item/weapon/circuitboard/turbine_control/M = new /obj/item/weapon/circuitboard/turbine_control( A )
for (var/obj/C in src)
C.loc = src.loc
@@ -38,7 +38,7 @@ obj/item/weapon/gun/energy/laser/retro
/obj/item/weapon/gun/energy/laser/captain/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/gun/energy/laser/captain/process()
charge_tick++
@@ -312,7 +312,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
/obj/item/weapon/gun/energy/disabler/cyborg/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/gun/energy/disabler/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg
if(power_supply.charge == power_supply.maxcharge)
@@ -369,7 +369,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
/obj/item/weapon/gun/energy/printer/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/gun/energy/printer/process()
if(power_supply.charge == power_supply.maxcharge)
+2 -2
View File
@@ -26,7 +26,7 @@
/obj/item/weapon/gun/energy/taser/cyborg/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/gun/energy/taser/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg
if(power_supply.charge == power_supply.maxcharge)
@@ -77,7 +77,7 @@
/obj/item/weapon/gun/energy/crossbow/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/gun/energy/crossbow/process()
charge_tick++
+1 -1
View File
@@ -46,7 +46,7 @@
/obj/item/weapon/gun/magic/Destroy()
if(can_charge) processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/gun/magic/process()
+1 -1
View File
@@ -148,6 +148,6 @@
/obj/item/weapon/gun/magic/wand/fireball/zap_self(mob/living/user as mob)
if(alert(user, "Zapping yourself with a wand of fireball is probably a bad idea, do it anyway?",, "Yes", "No") == "Yes" && charges && user.get_active_hand() == src && isliving(user))
explosion(user.loc, -1, 0, 2, 3, 0)
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
charges--
..()
@@ -75,6 +75,9 @@
/obj/item/projectile/beam/emitter/singularity_pull()
return //don't want the emitters to miss
/obj/item/projectile/beam/emitter/Destroy()
return QDEL_HINT_PUTINPOOL
/obj/item/projectile/lasertag
name = "laser tag beam"
icon_state = "omnilaser"
+1 -1
View File
@@ -24,7 +24,7 @@
/obj/item/projectile/magic/fireball/on_hit(var/target)
var/turf/T = get_turf(target)
explosion(T, -1, 0, 2, 3, 0)
explosion(T, -1, 0, 2, 3, 0, flame_range = 2)
if(ismob(target)) //multiple flavors of pain
var/mob/living/M = target
M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
@@ -38,7 +38,8 @@
flag = "bullet"
/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0)
explosion(target, -1, 0, 2, 1, 0)
..()
explosion(target, -1, 0, 2, 1, 0, flame_range = 3)
return 1
/obj/item/projectile/temp
@@ -75,7 +76,7 @@
if(src)//Do not add to this if() statement, otherwise the meteor won't delete them
if(A)
A.meteorhit(src)
A.ex_act(2)
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
for(var/mob/M in range(10, src))
@@ -217,6 +218,7 @@ obj/item/projectile/kinetic/New()
weaken = 5
/obj/item/projectile/bullet/frag12/on_hit(atom/target, blocked = 0)
..()
explosion(target, -1, 0, 1)
return 1
+3 -1
View File
@@ -633,4 +633,6 @@ atom/proc/create_reagents(var/max_vol)
reagent.Destroy()
if(my_atom)
my_atom = null
my_atom = null
return ..()
@@ -97,10 +97,6 @@
if (prob(50))
del(src)
/obj/machinery/chem_dispenser/meteorhit()
del(src)
return
/**
* The ui_interact proc is used to open and update Nano UIs
* If ui_interact is not used then the UI will not update correctly
@@ -401,10 +397,6 @@
if (prob(50))
qdel(src)
/obj/machinery/chem_master/meteorhit()
qdel(src)
return
/obj/machinery/chem_master/power_change()
if(powered())
stat &= ~NOPOWER
@@ -3215,3 +3215,5 @@ datum
if(holder)
holder.reagent_list -= src
holder = null
return ..()
+1 -1
View File
@@ -560,7 +560,7 @@ datum/reagent/atropine/on_mob_life(var/mob/living/M as mob)
M.losebreath = 5
if(M.confused > 60)
M.confused += 5
M.reagents.remove_reagent("sarin",10)
M.reagents.remove_reagent("tabun",10)
..()
return
+10 -10
View File
@@ -502,25 +502,25 @@ datum/reagent/curare/on_mob_life(var/mob/living/M as mob)
..()
return
datum/reagent/sarin
name = "Sarin"
id = "sarin"
datum/reagent/tabun
name = "Tabun"
id = "tabun"
description = "An extremely deadly neurotoxin."
reagent_state = LIQUID
color = "#C7C7C7"
metabolization_rate = 0.1
penetrates_skin = 1
/datum/chemical_reaction/sarin
name = "sarin"
id = "sarin"
result = "sarin"
required_reagents = list("chlorine" = 1, "fluorine" = 1, "hydrogen" = 1, "oxygen" = 1, "phosphorus" = 1, "fuel" = 1, "acetone" = 1, "atrazine" = 1)
result_amount = 3
/datum/chemical_reaction/tabun
name = "tabun"
id = "tabun"
result = "tabun"
required_reagents = list("phenol" = 1, "diethylamine" = 1, "phosphorus" = 1, "oxygen" = 1, "chlorine" = 1, "sodiumchloride" = 1, "ethanol" = 1, "cyanide" = 1)
result_amount = 8
mix_message = "The mixture yields a colorless, odorless liquid."
required_temp = 374
datum/reagent/sarin/on_mob_life(var/mob/living/M as mob)
datum/reagent/tabun/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustFireLoss(1)
if(prob(20))
+1 -1
View File
@@ -29,7 +29,7 @@
/obj/item/weapon/reagent_containers/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/reagent_containers/process()
if(reagents)
@@ -33,7 +33,7 @@
/obj/item/weapon/reagent_containers/borghypo/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
charge_tick++
@@ -18,7 +18,7 @@
var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(user.loc)
user.put_in_active_hand(B)
if(prob(33))
getFromPool(/obj/item/weapon/shard, target.loc) // Create a glass shard at the target's location!
PoolOrNew(/obj/item/weapon/shard, target.loc) // Create a glass shard at the target's location!
B.icon_state = src.icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
@@ -12,7 +12,7 @@
proc/smash(mob/living/target as mob, mob/living/user as mob)
//Creates a shattering noise and replaces the drinking glass with a glass shard
user.drop_item()
var/obj/item/weapon/shard/S = getFromPool(/obj/item/weapon/shard, user.loc)
var/obj/item/weapon/shard/S = PoolOrNew(/obj/item/weapon/shard, user.loc)
user.put_in_active_hand(S)
playsound(src, "shatter", 70, 1)
@@ -78,7 +78,7 @@
/obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy()
for(var/obj/item/O in ingredients)
del(O)
..()
return ..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine()
..()
@@ -235,7 +235,7 @@
if(contents)
for(var/atom/movable/something in contents)
something.loc = get_turf(src)
..()
return ..()
/obj/item/weapon/reagent_containers/food/snacks/attack_animal(mob/M)
if(isanimal(M))
@@ -186,7 +186,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Destroy()
if(istype(loc,/mob))
loc.set_light(round(loc.luminosity - potency/5,1))
..()
return ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/pickup(mob/user)
src.set_light(0)
@@ -614,7 +614,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/Destroy()
if(istype(loc,/mob))
loc.set_light(round(loc.luminosity - potency/10,1))
..()
return ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/pickup(mob/user)
set_light(0)
@@ -275,4 +275,4 @@
New()
..()
reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","sarin","histamine","venom","cyanide"), 40)
reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","tabun","histamine","venom","cyanide"), 40)
+6 -7
View File
@@ -103,7 +103,7 @@
explode()
blob_act()
explode()
explosion(src.loc,0,1,5,7,10, flame_range = 5)
ex_act()
explode()
@@ -150,14 +150,13 @@
return ..()
/obj/structure/reagent_dispensers/fueltank/proc/explode()
explosion(src.loc,0,1,4)
explosion(src.loc,-1,0,2, flame_range = 2)
if(src)
del(src)
qdel(src)
/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+500)
explode()
return ..()
blob_act() //saving a few lines of copypasta
/obj/structure/reagent_dispensers/fueltank/Move()
..()
@@ -219,7 +218,7 @@
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
del(src)
qdel(src)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
+3 -4
View File
@@ -68,8 +68,7 @@ var/global/list/obj/machinery/message_server/message_servers = list()
/obj/machinery/message_server/Destroy()
message_servers -= src
..()
return
return ..()
/obj/machinery/message_server/process()
//if(decryptkey == "password")
@@ -185,7 +184,7 @@ var/obj/machinery/blackbox_recorder/blackbox
var/list/msg_syndicate = list()
var/list/msg_mining = list()
var/list/msg_cargo = list()
var/list/msg_service = list()
var/list/msg_service = list()
var/list/datum/feedback_variable/feedback = new()
@@ -217,7 +216,7 @@ var/obj/machinery/blackbox_recorder/blackbox
BR.messages_admin = messages_admin
if(blackbox != BR)
blackbox = BR
..()
return ..()
/obj/machinery/blackbox_recorder/proc/find_feedback_datum(var/variable)
for(var/datum/feedback_variable/FV in feedback)
+1 -6
View File
@@ -26,7 +26,7 @@
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
..()
return ..()
/obj/machinery/r_n_d/server/RefreshParts()
var/tot_rating = 0
@@ -70,11 +70,6 @@
produce_heat(heat_gen)
delay = initial(delay)
/obj/machinery/r_n_d/server/meteorhit(var/obj/O as obj)
griefProtection()
..()
/obj/machinery/r_n_d/server/emp_act(severity)
griefProtection()
..()
@@ -18,19 +18,19 @@
"It's mesmerizing to behold.")
/obj/structure/crystal/Destroy()
src.visible_message("\red<b>[src] shatters!</b>")
src.visible_message("<span class='danger'>\The [src] shatters!</span>")
if(prob(75))
getFromPool(/obj/item/weapon/shard/plasma, loc)
PoolOrNew(/obj/item/weapon/shard/plasma, loc)
if(prob(50))
getFromPool(/obj/item/weapon/shard/plasma, loc)
PoolOrNew(/obj/item/weapon/shard/plasma, loc)
if(prob(25))
getFromPool(/obj/item/weapon/shard/plasma, loc)
PoolOrNew(/obj/item/weapon/shard/plasma, loc)
if(prob(75))
getFromPool(/obj/item/weapon/shard, loc)
PoolOrNew(/obj/item/weapon/shard, loc)
if(prob(50))
getFromPool(/obj/item/weapon/shard, loc)
PoolOrNew(/obj/item/weapon/shard, loc)
if(prob(25))
getFromPool(/obj/item/weapon/shard, loc)
..()
PoolOrNew(/obj/item/weapon/shard, loc)
return ..()
//todo: laser_act
@@ -311,9 +311,9 @@
apply_material_decorations = 0
if(22)
if(prob(50))
new_item = getFromPool(/obj/item/weapon/shard, loc)
new_item = PoolOrNew(/obj/item/weapon/shard, loc)
else
new_item = getFromPool(/obj/item/weapon/shard/plasma, loc)
new_item = PoolOrNew(/obj/item/weapon/shard/plasma, loc)
apply_prefix = 0
apply_image_decorations = 0
@@ -38,7 +38,7 @@
G.attackby(NG, user, params)
usr << "You add the newly-formed plasma glass to the stack. It now contains [NG.amount] sheets."
//SN src = null
returnToPool(src)
qdel(src)
return
return ..()
@@ -56,4 +56,4 @@ datum/chemical_reaction/coolant
sleep(10)
if(src)
del(src)
qdel(src)
@@ -192,7 +192,7 @@
/obj/item/weapon/anodevice/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/weapon/anodevice/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
if (!istype(M))
@@ -315,7 +315,7 @@
/obj/machinery/suspension_gen/Destroy()
//safety checks: clear the field and drop anything it's holding
deactivate()
..()
return ..()
/obj/machinery/suspension_gen/verb/rotate_ccw()
set src in view(1)
@@ -347,4 +347,4 @@
/obj/effect/suspension_field/Destroy()
for(var/obj/I in src)
I.loc = src.loc
..()
return ..()
@@ -18,7 +18,7 @@
/obj/item/device/beacon_locator/Destroy()
processing_objects.Remove(src)
..()
return ..()
/obj/item/device/beacon_locator/process()
if(target_radio)
-5
View File
@@ -18,11 +18,6 @@
/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj)
Stress(Proj.damage / 10)
/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj)
if(M)
walk(M,0)
Stress(2)
/obj/effect/energy_field/proc/Stress(var/severity)
strength -= severity

Some files were not shown because too many files have changed in this diff Show More