diff --git a/.gitignore b/.gitignore
index 5090fd0a..59920aca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ maps/tgstation2.dmm.bak
*.bak
maps/newmedical tgstation2.dmm
*.bak2
+maps/tgstation2_medbayrework_final.dmm
diff --git a/aurora.dme b/aurora.dme
index b0c9d37a..7a76a56c 100644
--- a/aurora.dme
+++ b/aurora.dme
@@ -481,7 +481,6 @@
#include "code\game\mecha\equipment\tools\medical_tools.dm"
#include "code\game\mecha\equipment\tools\tools.dm"
#include "code\game\mecha\equipment\weapons\weapons.dm"
-#include "code\game\mecha\exo\exoskeleton.dm"
#include "code\game\mecha\medical\medical.dm"
#include "code\game\mecha\medical\odysseus.dm"
#include "code\game\mecha\working\ripley.dm"
diff --git a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm
index 3581c9ff..7eb9c011 100644
--- a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm
@@ -306,7 +306,7 @@
switch(trap_type)
if("sawburst")
M << "\red A sawblade shoots out of the ground and strikes you!"
- M.apply_damage(rand(5,10), BRUTE)
+ M.apply_damage(rand(5,10), BRUTE, sharp=1, edge=1)
var/atom/myloc = src.loc
var/image/flicker = image('code/WorkInProgress/Cael_Aislinn/Jungle/jungle.dmi',"sawblade")
diff --git a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_turfs.dm b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_turfs.dm
index 7be8108d..e839a5ed 100644
--- a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_turfs.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_turfs.dm
@@ -143,25 +143,25 @@
var/turf/T = get_turf(M)
if(istype(T, /turf/unsimulated/jungle/water))
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE)
+ M.apply_damage(rand(0,1), BRUTE, sharp=1)
if(prob(50))
spawn(rand(25,50))
var/turf/T = get_turf(M)
if(istype(T, /turf/unsimulated/jungle/water))
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE)
+ M.apply_damage(rand(0,1), BRUTE, sharp=1)
if(prob(50))
spawn(rand(25,50))
var/turf/T = get_turf(M)
if(istype(T, /turf/unsimulated/jungle/water))
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE)
+ M.apply_damage(rand(0,1), BRUTE, sharp=1)
if(prob(50))
spawn(rand(25,50))
var/turf/T = get_turf(M)
if(istype(T, /turf/unsimulated/jungle/water))
M << pick("\red Something sharp bites you!","\red Sharp teeth grab hold of you!","\red You feel something take a chunk out of your leg!")
- M.apply_damage(rand(0,1), BRUTE)
+ M.apply_damage(rand(0,1), BRUTE, sharp=1)
/turf/unsimulated/jungle/water/deep
plants_spawn = 0
diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm
index 58ad2f8e..2ffb18c2 100644
--- a/code/WorkInProgress/Ported/policetape.dm
+++ b/code/WorkInProgress/Ported/policetape.dm
@@ -136,7 +136,7 @@
breaktape(/obj/item/weapon/wirecutters,user)
/obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob)
- if(user.a_intent == "help" && ((!is_sharp(W) && src.allowed(user))))
+ if(user.a_intent == "help" && ((!can_puncture(W) && src.allowed(user))))
user << "You can't break the [src] with that!"
return
user.show_viewers("\blue [user] breaks the [src]!")
diff --git a/code/WorkInProgress/Susan/susan_desert_turfs.dm b/code/WorkInProgress/Susan/susan_desert_turfs.dm
index 947f6b67..a52f90a4 100644
--- a/code/WorkInProgress/Susan/susan_desert_turfs.dm
+++ b/code/WorkInProgress/Susan/susan_desert_turfs.dm
@@ -227,7 +227,7 @@ Alien plants should do something if theres a lot of poison
del(src)
-/obj/effect/alien/flesh/weeds/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/alien/flesh/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
health -= 5
healthcheck()
diff --git a/code/WorkInProgress/buildmode.dm b/code/WorkInProgress/buildmode.dm
index e59a419c..153b094a 100644
--- a/code/WorkInProgress/buildmode.dm
+++ b/code/WorkInProgress/buildmode.dm
@@ -259,7 +259,8 @@
if(4)
if(pa.Find("left"))
- holder.throw_atom = object
+ if(istype(object, /atom/movable))
+ holder.throw_atom = object
if(pa.Find("right"))
if(holder.throw_atom)
holder.throw_atom.throw_at(object, 10, 1)
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index 74540039..fbf2338e 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -84,7 +84,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
air_contents.trace_gases.Remove(fuel)
//check if there is something to combust
- if(!air_contents.check_recombustability(liquid))
+ if(!air_contents.check_combustability(liquid))
//del src
RemoveFire()
@@ -116,7 +116,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
var/datum/gas_mixture/acs = enemy_tile.return_air()
var/obj/effect/decal/cleanable/liquid_fuel/liq = locate() in enemy_tile
if(!acs) continue
- if(!acs.check_recombustability(liq)) continue
+ if(!acs.check_combustability(liq)) continue
//If extinguisher mist passed over the turf it's trying to spread to, don't spread and
//reduce firelevel.
if(enemy_tile.fire_protection > world.time-30)
@@ -134,16 +134,8 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
///////////////////////////////// FLOW HAS BEEN CREATED /// DONT DELETE THE FIRE UNTIL IT IS MERGED BACK OR YOU WILL DELETE AIR ///////////////////////////////////////////////
if(flow)
-
- if(flow.check_recombustability(liquid))
- //Ensure flow temperature is higher than minimum fire temperatures.
- //this creates some energy ex nihilo but is necessary to get a fire started
- //lets just pretend this energy comes from the ignition source and dont mention this again
- //flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature)
-
- //burn baby burn!
-
- flow.zburn(liquid,1)
+ //burn baby burn!
+ flow.zburn(liquid,1)
//merge the air back
S.assume_air(flow)
@@ -275,9 +267,9 @@ datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fu
if(oxygen && (toxins || fuel || liquid))
if(liquid)
return 1
- if (toxins >= 0.1)
+ if(QUANTIZE(toxins * vsc.fire_consuption_rate) >= 0.1)
return 1
- if(fuel && fuel.moles >= 0.1)
+ if(fuel && QUANTIZE(fuel.moles * vsc.fire_consuption_rate) >= 0.1)
return 1
return 0
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index ff3a1ed8..6f4ab5a1 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1275,8 +1275,21 @@ proc/is_hot(obj/item/W as obj)
return 0
-//Is this even used for anything besides balloons? Yes I took out the W:lit stuff because : really shouldnt be used.
-/proc/is_sharp(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
+//Whether or not the given item counts as sharp in terms of dealing damage
+/proc/is_sharp(obj/O as obj)
+ if (!O) return 0
+ if (O.sharp) return 1
+ if (O.edge) return 1
+ return 0
+
+//Whether or not the given item counts as cutting with an edge in terms of removing limbs
+/proc/has_edge(obj/O as obj)
+ if (!O) return 0
+ if (O.edge) return 1
+ return 0
+
+//Returns 1 if the given item is capable of popping things like balloons, inflatable barriers, or cutting police tape.
+/proc/can_puncture(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
if(!W) return 0
if(W.sharp) return 1
return ( \
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 093899c5..147d7909 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -16,9 +16,11 @@
Note that this proc can be overridden, and is in the case of screen objects.
*/
/atom/Click(location,control,params)
- usr.ClickOn(src, params)
+ if(src)
+ usr.ClickOn(src, params)
/atom/DblClick(location,control,params)
- usr.DblClickOn(src,params)
+ if(src)
+ usr.DblClickOn(src,params)
/*
Standard mob ClickOn()
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 3d21926e..ddc78f4a 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -276,7 +276,7 @@
var/list/nicename = null
var/list/tankcheck = null
var/breathes = "oxygen" //default, we'll check later
- var/list/contents = list()
+ var/list/contents = list()
if(ishuman(C))
var/mob/living/carbon/human/H = C
@@ -284,7 +284,7 @@
nicename = list ("suit", "back", "belt", "right hand", "left hand", "left pocket", "right pocket")
tankcheck = list (H.s_store, C.back, H.belt, C.r_hand, C.l_hand, H.l_store, H.r_store)
- else
+ else
nicename = list("Right Hand", "Left Hand", "Back")
tankcheck = list(C.r_hand, C.l_hand, C.back)
@@ -295,14 +295,14 @@
if (!isnull(t.manipulated_by) && t.manipulated_by != C.real_name && findtext(t.desc,breathes))
contents.Add(t.air_contents.total_moles) //Someone messed with the tank and put unknown gasses
continue //in it, so we're going to believe the tank is what it says it is
- switch(breathes)
+ switch(breathes)
//These tanks we're sure of their contents
if("nitrogen") //So we're a bit more picky about them.
-
+
if(t.air_contents.nitrogen && !t.air_contents.oxygen)
contents.Add(t.air_contents.nitrogen)
else
- contents.Add(0)
+ contents.Add(0)
if ("oxygen")
if(t.air_contents.oxygen && !t.air_contents.toxins)
@@ -316,9 +316,9 @@
contents.Add(t.air_contents.carbon_dioxide)
else
contents.Add(0)
-
-
- else
+
+
+ else
//no tank so we set contents to 0
contents.Add(0)
@@ -328,19 +328,19 @@
var/bestcontents = 0
for(var/i=1, i < contents.len + 1 , ++i)
if(!contents[i])
- continue
+ continue
if(contents[i] > bestcontents)
best = i
bestcontents = contents[i]
-
-
+
+
//We've determined the best container now we set it as our internals
if(best)
C << "You are now running on internals from [tankcheck[best]] on your [nicename[best]]."
C.internal = tankcheck[best]
-
-
+
+
if(C.internal)
if(C.internals)
C.internals.icon_state = "internal1"
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 9960b638..c039d862 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -146,6 +146,11 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
if(E.status & ORGAN_ROBOT)
temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
preview_icon.Blend(temp, ICON_OVERLAY)
+
+ //Tail
+ if(H.species.tail && H.species.flags & HAS_TAIL)
+ temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s")
+ preview_icon.Blend(temp, ICON_OVERLAY)
// Skin tone
if(H.species.flags & HAS_SKIN_TONE)
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 43fd1be5..e8a72f1d 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -228,6 +228,7 @@
icon = 'icons/obj/shards.dmi'
icon_state = "large"
sharp = 1
+ edge = 1
desc = "Could probably be used as ... a throwing weapon?"
w_class = 2.0
force = 5.0
@@ -471,6 +472,8 @@
icon_state = "hatchet"
flags = FPRINT | TABLEPASS | CONDUCT
force = 12.0
+ sharp = 1
+ edge = 1
w_class = 2.0
throwforce = 15.0
throw_speed = 4
@@ -496,6 +499,8 @@
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
force = 13.0
throwforce = 5.0
+ sharp = 1
+ edge = 1
throw_speed = 1
throw_range = 3
w_class = 4.0
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index 43dea8c3..882f1618 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -188,7 +188,8 @@
//message_admins("The probability of a new traitor is [traitor_prob]%")
if(prob(traitor_prob))
message_admins("New traitor roll passed. Making a new Traitor.")
- forge_traitor_objectives(character.mind)
+ if (!config.objectives_disabled)
+ forge_traitor_objectives(character.mind)
equip_traitor(character)
traitors += character.mind
character << "\red You are the traitor."
diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm
index e0d8b8c4..2189b228 100644
--- a/code/game/gamemodes/blob/blobs/factory.dm
+++ b/code/game/gamemodes/blob/blobs/factory.dm
@@ -57,7 +57,7 @@
factory.spores += src
..(loc)
return
- Die()
+ death()
..()
if(factory)
factory.spores -= src
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 3648d9a1..52c7602b 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -87,7 +87,7 @@
return 1
return 0
-/* temperature_expose(datum/gas_mixture/air, temperature, volume) Blob is currently fireproof
+/* fire_act(datum/gas_mixture/air, temperature, volume) Blob is currently fireproof
if(temperature > T0C+200)
health -= 0.01 * temperature
update()
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index a97f178c..92256192 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -88,6 +88,9 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
//No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting
//If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone
+ if (config.objectives_disabled)
+ return
+
var/datum/objective/absorb/absorb_objective = new
absorb_objective.owner = changeling
absorb_objective.gen_amount_goal(2, 3)
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 824c0ff7..538e63dc 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -169,7 +169,7 @@
src.visible_message("[src] stabs [T] with the proboscis!")
T << "You feel a sharp stabbing pain!"
var/datum/organ/external/affecting = T.get_organ(src.zone_sel.selecting)
- if(affecting.take_damage(39,0,1,"large organic needle"))
+ if(affecting.take_damage(39,0,1,0,"large organic needle"))
T:UpdateDamageIcon()
continue
diff --git a/code/game/gamemodes/events/biomass.dm b/code/game/gamemodes/events/biomass.dm
index 4ca0d526..174866e6 100644
--- a/code/game/gamemodes/events/biomass.dm
+++ b/code/game/gamemodes/events/biomass.dm
@@ -154,7 +154,7 @@
return
return
-/obj/effect/biomass/temperature_expose(null, temp, volume) //hotspots kill biomass
+/obj/effect/biomass/fire_act(null, temp, volume) //hotspots kill biomass
del src
diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm
index d2bd2dbc..b4264f24 100644
--- a/code/game/gamemodes/events/ninja_equipment.dm
+++ b/code/game/gamemodes/events/ninja_equipment.dm
@@ -1367,17 +1367,20 @@ It is possible to destroy the net by the occupant or someone else.
playsound(M.loc, 'sound/effects/sparks4.ogg', 50, 1)
anim(M.loc,M,'icons/mob/mob.dmi',,"phaseout",,M.dir)
- M.loc = pick(holdingfacility)//Throw mob in to the holding facility.
- M << "\red You appear in a strange place!"
+ if(holdingfacility.len)
+ M.loc = pick(holdingfacility)//Throw mob in to the holding facility.
+ spawn(0)
+ var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
+ spark_system.set_up(5, 0, M.loc)
+ spark_system.start()
+ playsound(M.loc, 'sound/effects/phasein.ogg', 25, 1)
+ playsound(M.loc, 'sound/effects/sparks2.ogg', 50, 1)
+ anim(M.loc,M,'icons/mob/mob.dmi',,"phasein",,M.dir)
+ del(src)//Wait for everything to finish, delete the net. Else it will stop everything once net is deleted, including the spawn(0).
+ else
+ M.loc = null
- spawn(0)
- var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
- spark_system.set_up(5, 0, M.loc)
- spark_system.start()
- playsound(M.loc, 'sound/effects/phasein.ogg', 25, 1)
- playsound(M.loc, 'sound/effects/sparks2.ogg', 50, 1)
- anim(M.loc,M,'icons/mob/mob.dmi',,"phasein",,M.dir)
- del(src)//Wait for everything to finish, delete the net. Else it will stop everything once net is deleted, including the spawn(0).
+ M << "\red You appear in a strange place!"
for(var/mob/O in viewers(src, 3))
O.show_message(text("[] vanished!", M), 1, text("You hear sparks flying!"), 2)
diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm
index 96154c37..d2a98261 100644
--- a/code/game/gamemodes/events/spacevines.dm
+++ b/code/game/gamemodes/events/spacevines.dm
@@ -239,7 +239,7 @@
return
return
-/obj/effect/spacevine/temperature_expose(null, temp, volume) //hotspots kill vines
+/obj/effect/spacevine/fire_act(null, temp, volume) //hotspots kill vines
del src
//Carn: Spacevines random event.
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 34bbcc19..b9ac22bc 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -116,8 +116,6 @@ Implants;
feedback_set_details("round_start","[time2text(world.realtime)]")
if(ticker && ticker.mode)
feedback_set_details("game_mode","[ticker.mode]")
- if(revdata)
- feedback_set_details("revision","[revdata.revision]")
feedback_set_details("server_ip","[world.internet_address]:[world.port]")
return 1
diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm
index b9f7a054..b918139f 100644
--- a/code/game/gamemodes/meme/meme.dm
+++ b/code/game/gamemodes/meme/meme.dm
@@ -108,6 +108,9 @@
/datum/game_mode/proc/forge_meme_objectives(var/datum/mind/meme, var/datum/mind/first_host)
+ if (config.objectives_disabled)
+ return
+
// meme always needs to attune X hosts
var/datum/objective/meme_attune/attune_objective = new
attune_objective.owner = meme
diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm
index 42f5b69d..33810a2e 100644
--- a/code/game/gamemodes/ninja/ninja.dm
+++ b/code/game/gamemodes/ninja/ninja.dm
@@ -85,6 +85,8 @@
return 1
/datum/game_mode/ninja/proc/forge_ninja_objectives(var/datum/mind/ninja)
+ if (config.objectives_disabled)
+ return
var/objective_list = list(1,2,3,4,5)
for(var/i=rand(2,4),i>0,i--)
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 9ff4d2fc..89b5af22 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -186,6 +186,8 @@
/datum/game_mode/proc/forge_syndicate_objectives(var/datum/mind/syndicate)
+ if (config.objectives_disabled)
+ return
var/datum/objective/nuclear/syndobj = new
syndobj.owner = syndicate
syndicate.objectives += syndobj
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index c8a55d3e..272e80f6 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -78,6 +78,9 @@
/datum/game_mode/proc/forge_traitor_objectives(var/datum/mind/traitor)
+ if (config.objectives_disabled)
+ return
+
if(istype(traitor.current, /mob/living/silicon))
var/datum/objective/assassinate/kill_objective = new
kill_objective.owner = traitor
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index aec051de..30989912 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -64,6 +64,9 @@
/datum/game_mode/proc/forge_wizard_objectives(var/datum/mind/wizard)
+ if (config.objectives_disabled)
+ return
+
switch(rand(1,100))
if(1 to 30)
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 7889a19b..50df6335 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -92,12 +92,12 @@
H.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store)
H.equip_to_slot_or_del(new /obj/item/device/pda/botanist(H), slot_belt)
- if(H.backbag == 3)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_hyd(H), slot_back)
- else if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+ switch(H.backbag)
+ if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_hyd(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index e0940ef2..6a5e2491 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -71,8 +71,12 @@
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/virologist(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
- if(H.backbag == 3)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_vir(H), slot_back)
+ switch(H.backbag)
+ if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
if("Medical Doctor")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
@@ -122,12 +126,12 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/chemist(H), slot_wear_suit)
- if(H.backbag == 3)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_chem(H), slot_back)
- else if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+ switch(H.backbag)
+ if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_chem(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -153,12 +157,12 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/genetics(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
- if(H.backbag == 3)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back)
- else if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+ switch(H.backbag)
+ if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
/*/datum/job/virologist
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 6592e2a1..684e5c00 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -27,12 +27,12 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
- if(H.backbag == 3)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
- else if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+ switch(H.backbag)
+ if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -57,12 +57,12 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit)
- if(H.backbag == 3)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
- else if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+ switch(H.backbag)
+ if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -86,12 +86,12 @@
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit)
- if(H.backbag == 3)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
- else if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+ switch(H.backbag)
+ if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm
index 2bce84ae..f9bb469f 100644
--- a/code/game/jobs/whitelist.dm
+++ b/code/game/jobs/whitelist.dm
@@ -36,8 +36,6 @@ var/list/whitelist = list()
return 1
if(species == "human" || species == "Human")
return 1
-// if(species == "machine" || species == "Machine")
-// return 1
// if(check_rights(R_ADMIN, 0))
// return 1
if(!alien_whitelist)
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 6af4d627..088770da 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -110,7 +110,7 @@ update_flag
overlays += "can-o3"
return
-/obj/machinery/portable_atmospherics/canister/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > temperature_resistance)
health -= 5
healthcheck()
diff --git a/code/game/machinery/bots/farmbot.dm b/code/game/machinery/bots/farmbot.dm
index b6f81984..228b5250 100644
--- a/code/game/machinery/bots/farmbot.dm
+++ b/code/game/machinery/bots/farmbot.dm
@@ -441,7 +441,7 @@
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = human.get_organ(ran_zone(dam_zone))
var/armor = human.run_armor_check(affecting, "melee")
- human.apply_damage(damage,BRUTE,affecting,armor)
+ human.apply_damage(damage,BRUTE,affecting,armor,sharp=1,edge=1)
else // warning, plants infested with weeds!
mode = FARMBOT_MODE_WAITING
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index fcf525cc..8c86629d 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -115,6 +115,15 @@
jobs_all += "
Captain | "
jobs_all += "Custom | "
+ counter = 0
+ jobs_all += "| Security | "//Red
+ for(var/job in security_positions)
+ counter++
+ if(counter >= 6)
+ jobs_all += "
| | "
+ counter = 0
+ jobs_all += "[replacetext(job, " ", " ")] | "
+
counter = 0
jobs_all += "
| Engineering | "//Orange
for(var/job in engineering_positions)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 81c0eeb3..0074f1c0 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -107,13 +107,9 @@
/obj/machinery/computer/crew/proc/scan()
- for(var/obj/item/clothing/under/C in world)
- if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human)))
- var/check = 0
- for(var/O in src.tracked)
- if(O == C)
- check = 1
- break
- if(!check)
- src.tracked.Add(C)
+ for(var/mob/living/carbon/human/H in mob_list)
+ if(istype(H.w_uniform, /obj/item/clothing/under))
+ var/obj/item/clothing/under/C = H.w_uniform
+ if (C.has_sensor)
+ tracked |= C
return 1
\ No newline at end of file
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index 264246c6..b834fddc 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -26,7 +26,7 @@
********************/
/obj/machinery/microwave/New()
- //..() //do not need this
+ ..()
reagents = new/datum/reagents(100)
reagents.my_atom = src
if (!available_recipes)
diff --git a/code/game/machinery/podmen.dm b/code/game/machinery/podmen.dm
index 041a0334..b3e26603 100644
--- a/code/game/machinery/podmen.dm
+++ b/code/game/machinery/podmen.dm
@@ -101,7 +101,7 @@ Growing it to term with nothing injected will grab a ghost from the observers. *
/obj/item/seeds/replicapod/proc/question(var/client/C)
spawn(0)
if(!C) return
- var/response = alert(C, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No", "Never for this round.")
+ var/response = alert(C, "Someone is harvesting a diona pod. Would you like to play as a diona?", "Dionaea harvest", "Yes", "No", "Never for this round.")
if(!C || ckey)
return
if(response == "Yes")
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index ef816a0d..48ade625 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -147,10 +147,10 @@
if(new_shoe_icon_state && new_shoe_name)
for(var/obj/item/clothing/shoes/S in contents)
//world << "DEBUG: YUP! FOUND IT!"
-// if (S.chained == 1)
-// S.chained = 0
-// S.slowdown = SHOES_SLOWDOWN
-// new /obj/item/weapon/handcuffs( src )
+ if (istype(S,/obj/item/clothing/shoes/orange))
+ var/obj/item/clothing/shoes/orange/L = S
+ if (L.chained)
+ L.remove_cuffs()
S.icon_state = new_shoe_icon_state
S.item_color = wash_color
S.name = new_shoe_name
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index dc821839..77238b1f 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -315,7 +315,7 @@
var/obj/item/device/assembly/mousetrap/M = AM
M.secured = 1
..()
-
+/*
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taserexo
name = "Heavy Duty Exoskeleton Tasergun"
icon_state = "mecha_taser"
@@ -343,7 +343,7 @@
return 0
else
return ..()
-
+*/
/obj/item/mecha_parts/mecha_equipment/handcuffs
name = "handcuffs"
desc = "Use this to keep prisoners in line."
diff --git a/code/game/mecha/exo/exoskeleton.dm b/code/game/mecha/exo/exoskeleton.dm
index 3de2c6ee..3db2291f 100644
--- a/code/game/mecha/exo/exoskeleton.dm
+++ b/code/game/mecha/exo/exoskeleton.dm
@@ -6,7 +6,7 @@
step_in = 2
max_temperature = 7000 // DON'T FORGET TO TEST THIS
health = 200
- wreckage = /obj/effect/decal/mecha_wreckage/exoskeleton
+// wreckage = /obj/effect/decal/mecha_wreckage/exoskeleton
internal_damage_threshold = 35
deflect_chance = 25
step_energy_drain = 4
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index d64ce6f5..dfbca044 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -36,6 +36,7 @@
var/screen = "main"
var/opened = 0
var/temp
+ var/output_dir = SOUTH //the direction relative to the fabber at which completed parts appear.
var/list/part_sets = list( //set names must be unique
"Robot"=list(
/obj/item/robot_parts/robot_suit,
@@ -90,19 +91,7 @@
/obj/item/mecha_parts/part/durand_right_leg,
/obj/item/mecha_parts/part/durand_armour
),
-
-/* "Exoskeleton"=list(
- /obj/item/mecha_parts/chassis/exoskeleton,
- /obj/item/mecha_parts/part/exoskeletonarmor,
- /obj/item/mecha_parts/part/hydraulicspack,
- /obj/item/mecha_parts/part/electricalpack
-
-
-
-
- ),*/
-
-/* "H.O.N.K"=list(
+ /*"H.O.N.K"=list(
/obj/item/mecha_parts/chassis/honker,
/obj/item/mecha_parts/part/honker_torso,
/obj/item/mecha_parts/part/honker_head,
@@ -111,25 +100,6 @@
/obj/item/mecha_parts/part/honker_left_leg,
/obj/item/mecha_parts/part/honker_right_leg
), */
- "Exosuit Equipment"=list(
- /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,
- /obj/item/mecha_parts/mecha_equipment/tool/drill,
- /obj/item/mecha_parts/mecha_equipment/tool/extinguisher,
- /obj/item/mecha_parts/mecha_equipment/tool/cable_layer,
- /obj/item/mecha_parts/mecha_equipment/tool/sleeper,
- /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,
- /obj/item/mecha_parts/chassis/firefighter,
- ///obj/item/mecha_parts/mecha_equipment/repair_droid,
- /obj/item/mecha_parts/mecha_equipment/generator,
- ///obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING
- /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
- /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
-// /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/mousetrap_mortar
-// /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
-// /obj/item/mecha_parts/mecha_equipment/weapon/honker
- /obj/item/mecha_parts/mecha_equipment/weapon/energy/laserexo,
- /obj/item/mecha_parts/mecha_equipment/weapon/energy/taserexo,
- ),
"Robotic Upgrade Modules" = list(
/obj/item/borg/upgrade/reset,
@@ -392,7 +362,7 @@
src.overlays -= "fab-active"
src.desc = initial(src.desc)
if(being_built)
- src.being_built.Move(get_step(src,SOUTH))
+ src.being_built.Move(get_step(src,output_dir))
src.visible_message("\icon[src] [src] beeps, \"The following has been completed: [src.being_built] is built\".")
src.being_built = null
src.updateUsrDialog()
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index b4c954c4..ee5d1927 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -618,7 +618,7 @@
check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
return
-/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/mecha/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature>src.max_temperature)
src.log_message("Exposed to dangerous temperature.",1)
src.take_damage(5,"fire")
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index 69c4e263..245bf161 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -1372,183 +1372,4 @@
spawn_result()
..()
feedback_inc("mecha_odysseus_created",1)
- return
-/*
-/datum/construction/mecha/exoskeleton_chasis
- steps = list(list("key"=/obj/item/mecha_parts/part/exoskeletonarmor),//1
- list("key"=/obj/item/mecha_parts/part/electricalpack),//2
- list("key"=/obj/item/mecha_parts/part/hydraulicspack),//3
- )
-
- custom_action(step, atom/used_atom, mob/user)
- user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
- holder.overlays += used_atom.icon_state+"+o"
- del used_atom
- return 1
-
- action(atom/used_atom,mob/user as mob)
- return check_all_steps(used_atom,user)
-
- spawn_result()
- var/obj/item/mecha_parts/chassis/const_holder = holder
- const_holder.construct = new /datum/construction/reversible/mecha/exoskeleton(const_holder)
- const_holder.icon = 'icons/mecha/mech_construction.dmi'
- const_holder.icon_state = "exoskeleton0"
- const_holder.density = 1
- spawn()
- del src
- return
-*/
-/*
-/datum/construction/reversible/mecha/exoskeleton
- result = "/obj/mecha/combat/exoskeleton"
- steps = list(
- //1
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=/obj/item/weapon/wrench,
- "desc"="External armor is wrenched."),
- //2
- list("key"=/obj/item/weapon/wrench,
- "backkey"=/obj/item/weapon/crowbar,
- "desc"="External armor is installed."),
- //3
- list("key"=/obj/item/weapon/weldingtool,
- "backkey"=/obj/item/weapon/wrench,
- "desc"="Internal armor is wrenched"),
- //4
- list("key"=/obj/item/weapon/wrench,
- "backkey"=/obj/item/weapon/crowbar,
- "desc"="Internal armor is installed"),
- //5
- list("key"=/obj/item/stack/sheet/metal,
- "backkey"=/obj/item/weapon/screwdriver,
- "desc"="Central control module is secured"),
- //6
- list("key"=/obj/item/weapon/screwdriver,
- "backkey"=/obj/item/weapon/crowbar,
- "desc"="Central control module is installed"),
- //7
- list("key"=/obj/item/weapon/circuitboard/mecha/exoskeleton/main,
- "backkey"=/obj/item/weapon/screwdriver,
- "desc"="The wiring is adjusted"),
- //8
- list("key"=/obj/item/weapon/wirecutters,
- "backkey"=/obj/item/weapon/screwdriver,
- "desc"="The wiring is added"),
- //9
- list("key"=/obj/item/weapon/cable_coil,
- "backkey"=/obj/item/weapon/screwdriver,
- "desc"="The hydraulic systems are active."),
- //11
- list("key"=/obj/item/weapon/screwdriver,
- "backkey"=/obj/item/weapon/wrench,
- "desc"="The hydraulic systems are connected."),
- //12
- list("key"=/obj/item/weapon/wrench,
- "backkey"=/obj/item/weapon/screwdriver,
- "desc"="The hydraulic systems are disconnected.")
- )
-
- action(atom/used_atom,mob/user as mob)
- return check_step(used_atom,user)
-
- custom_action(index, diff, atom/used_atom, mob/user)
- if(!..())
- return 0
-
- //TODO: better messages.
- switch(index)
- if(12)
- user.visible_message("[user] installs [holder] hydraulics pack", "You install [holder] hydraulics pack.")
- holder.icon_state = "exoskeleton1"
- if(11)
- if(diff==FORWARD)
- user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
- holder.icon_state = "exoskeleton2"
- else
- user.visible_message("[user] removes [holder] hydraulics pack", "You remove [holder] hydraulics pack.")
- holder.icon_state = "exoskeleton0"
- if(10)
- if(diff==FORWARD)
- user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
- holder.icon_state = "exoskeleton3"
- else
- user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
- holder.icon_state = "exoskeleton1"
- if(9)
- if(diff==FORWARD)
- user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
- holder.icon_state = "exoskeleton4"
- else
- user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
- holder.icon_state = "exoskeleton2"
- if(8)
- if(diff==FORWARD)
- user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
- holder.icon_state = "exoskeleton5"
- else
- user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
- var/obj/item/weapon/cable_coil/coil = new /obj/item/weapon/cable_coil(get_turf(holder))
- coil.amount = 4
- holder.icon_state = "exoskeleton3"
- if(7)
- if(diff==FORWARD)
- user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- del used_atom
- holder.icon_state = "exoskeleton7"
- else
- user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
- holder.icon_state = "exoskeleton5"
- if(6)
- if(diff==FORWARD)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
- holder.icon_state = "exoskeleton8"
- else
- user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
- new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder))
- holder.icon_state = "exoskeleton6"
- if(5)
- if(diff==FORWARD)
- user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
- holder.icon_state = "exoskeleton10"
- else
- user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
- var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder))
- MS.amount = 5
- holder.icon_state = "exoskeleton8"
- if(4)
- if(diff==FORWARD)
- user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
- holder.icon_state = "exoskeleton11"
- else
- user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
- holder.icon_state = "exoskeleton9"
- if(3)
- if(diff==FORWARD)
- user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
- holder.icon_state = "exoskeleton12"
- else
- user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
- holder.icon_state = "exoskeleton10"
- if(2)
- if(diff==FORWARD)
- user.visible_message("[user] secures armor layer.", "You secure the reinforced armor layer.")
- holder.icon_state = "exoskeleton13"
- else
- user.visible_message("[user] pries the armor layer from [holder].", "You prie the armor layer from [holder].")
- var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder))
- MS.amount = 5
- holder.icon_state = "exoskeleton11"
- if(1)
- if(diff==FORWARD)
- user.visible_message("[user] welds the armor layer to [holder].", "You weld the armor layer to [holder].")
- else
- user.visible_message("[user] unfastens the armor layer.", "You unfasten the armor layer.")
- holder.icon_state = "exoskeleton12"
- return 1
-
- spawn_result()
- ..()
- feedback_inc("mecha_exoskeleton_created",1)
- return*/
-
+ return
\ No newline at end of file
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 1f28823a..a92d8659 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -394,43 +394,6 @@
construction_time = 200
construction_cost = list("metal"=15000)*/
-///////// Exoskeleton
-/*
-
-/obj/item/mecha_parts/chassis/exoskeleton
- name = "Exoskeleton Chassis"
- icon = 'icons/mecha/mech_construction.dmi'
- icon_state = "exoskeleton0"
-
- New()
- ..()
- construct = new /datum/construction/mecha/exoskeleton_chasis(src) ///datum/construction/mecha/odysseus_chassis(src)
-
-/obj/item/mecha_parts/part/exoskeletonarmor
- name="Exoskeleton Armor"
- icon = 'icons/obj/clothing/suits.dmi'
- icon_state = "riot"
- construction_time = 120
- construction_cost = list("metal"=30000)
- origin_tech = "programming=3;materials=2"
-
-/obj/item/mecha_parts/part/hydraulicspack
- name="Exoskeleton Hydraulics Pack"
- icon = 'icons/obj/device.dmi'
- icon_state = "modkit"
- construction_time = 90
- construction_cost = list("metal"=20000,"glass"=6000)
- origin_tech = "programming=3;materials=2;engineering=2"
-
-/obj/item/mecha_parts/part/electricalpack
- name="Exoskeleton Power Generator Pack"
- desc="Contains power unit and processing core for modifications."
- icon = 'icons/obj/device.dmi'
- icon_state = "modkit"
- origin_tech = "programming=3;materials=2;engineering=2"
- construction_time = 90
- construction_cost = list("metal"=25000)
-*/
///////// Circuitboards
@@ -447,13 +410,6 @@
throw_speed = 3
throw_range = 15
- exoskeleton
- origin_tech = "programming=4"
-
- exoskeleton/main
- name = "Exoskeleton Circuit Board"
- icon_state = "mainboard" // put something here.
-
ripley
origin_tech = "programming=3"
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index fe0caee1..ae039b4d 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -217,8 +217,4 @@
var/part = pick(parts)
welder_salvage += part
parts -= part
- return
-
-/obj/effect/decal/mecha_wreckage/exoskeleton
- name = "Useless Exoskeleton"
- icon_state = "exosuit-broken"
\ No newline at end of file
+ return
\ No newline at end of file
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 25edeb2d..6ff7ea15 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -287,7 +287,7 @@ Alien plants should do something if theres a lot of poison
del(src)
-/obj/effect/alien/weeds/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
health -= 5
healthcheck()
@@ -469,7 +469,7 @@ Alien plants should do something if theres a lot of poison
if(health <= 0)
Burst()
-/obj/effect/alien/egg/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 500)
health -= 5
healthcheck()
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index be6b87ca..8c147cca 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -27,24 +27,6 @@ would spawn and follow the beaker, even if it is carried or thrown.
reagents.delete()
return
-
-/obj/effect/effect/water/New()
- ..()
- //var/turf/T = src.loc
- //if (istype(T, /turf))
- // T.firelevel = 0 //TODO: FIX
- spawn( 70 )
- delete()
- return
- return
-
-/obj/effect/effect/water/Del()
- //var/turf/T = src.loc
- //if (istype(T, /turf))
- // T.firelevel = 0 //TODO: FIX
- ..()
- return
-
/obj/effect/effect/water/Move(turf/newloc)
//var/turf/T = src.loc
//if (istype(T, /turf))
@@ -559,7 +541,7 @@ steam.start() -- spawns the effect
// foam disolves when heated
// except metal foams
-/obj/effect/effect/foam/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/effect/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(!metal && prob(max(0, exposed_temperature - 475)))
flick("[icon_state]-disolve", src)
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 35ed5119..f9708f24 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -154,7 +154,7 @@
else
return
-/obj/effect/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/glowshroom/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
endurance -= 5
CheckEndurance()
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index 8f920536..7fe38eca 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -137,8 +137,9 @@
OT.master = V
PT.air_contents.temperature = PLASMA_FLASHPOINT
- PT.air_contents.toxins = 3
- PT.air_contents.carbon_dioxide = 17
+ PT.air_contents.toxins = 12
+ PT.air_contents.carbon_dioxide = 8
+
PT.air_contents.update_values()
OT.air_contents.temperature = PLASMA_FLASHPOINT
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 48e01f55..0a65ada4 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -47,7 +47,7 @@
if(health <= 0)
del(src)
-/obj/effect/spider/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
health -= 5
healthcheck()
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 2672a2c8..1ce4162a 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -127,6 +127,7 @@
brightness_on = 2
w_class = 1
+
// the desk lamps are a bit special
/obj/item/device/flashlight/lamp
name = "desk lamp"
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 14804f2b..d00825cf 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -761,10 +761,10 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
continue
src.channels += ch_name
src.channels[ch_name] += keyslot.channels[ch_name]
-
+
if(keyslot.syndie)
src.syndie = 1
-
+
for (var/ch_name in src.channels)
if(!radio_controller)
diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm
index 049eac7f..8a3db9ec 100644
--- a/code/game/objects/items/latexballoon.dm
+++ b/code/game/objects/items/latexballoon.dm
@@ -38,11 +38,11 @@
/obj/item/latexballon/bullet_act()
burst()
-/obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume)
+/obj/item/latexballon/fire_act(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+100)
burst()
return
/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob)
- if (is_sharp(W))
+ if (can_puncture(W))
burst()
\ No newline at end of file
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 3d3b88f4..a37b2f5f 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -264,7 +264,10 @@
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
..()
if(istype(W, /obj/item/device/flash))
- if(src.flash1 && src.flash2)
+ if(istype(user,/mob/living/silicon/robot))
+ user << "\red How do you propose to do that?"
+ return
+ else if(src.flash1 && src.flash2)
user << "\blue You have already inserted the eyes!"
return
else if(src.flash1)
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 4a6e48aa..c700748c 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -117,7 +117,7 @@
//Step two - washing..... it's actually in washing machine code.
//Step three - drying
-/obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/item/stack/sheet/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
if(exposed_temperature >= drying_threshold_temperature)
wetness--
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 091314c6..8a9093fe 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -414,7 +414,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.visible_message("After a few attempts, [user] manages to light the [src].")
else
user << "You burn yourself while lighting the lighter."
- user.adjustFireLoss(5)
+ if (user.l_hand == src)
+ user.apply_damage(2,BURN,"l_hand")
+ else
+ user.apply_damage(2,BURN,"r_hand")
user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.")
user.SetLuminosity(user.luminosity + 2)
diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm
index 5d5266b3..6d7fe96e 100644
--- a/code/game/objects/items/weapons/dice.dm
+++ b/code/game/objects/items/weapons/dice.dm
@@ -5,6 +5,7 @@
icon_state = "d66"
w_class = 1
var/sides = 6
+ attack_verb = list("diced")
/obj/item/weapon/dice/New()
icon_state = "[name][rand(sides)]"
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 81386b84..dc595239 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -123,6 +123,7 @@
W.reagents.reaction(atm)
if(W.loc == my_target) break
sleep(2)
+ W.delete()
if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0))
user.inertia_dir = get_dir(target, user)
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 95763034..ed161809 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -7,19 +7,21 @@
prime()
..()
- for(var/obj/structure/closet/L in view(get_turf(src), null))
+ for(var/obj/structure/closet/L in hear(7, get_turf(src)))
if(locate(/mob/living/carbon/, L))
for(var/mob/living/carbon/M in L)
bang(get_turf(src), M)
- for(var/mob/living/carbon/M in viewers(get_turf(src), null))
+ for(var/mob/living/carbon/M in hear(7, get_turf(src)))
bang(get_turf(src), M)
- for(var/obj/effect/blob/B in view(8,get_turf(src))) //Blob damage here
+ for(var/obj/effect/blob/B in hear(8,get_turf(src))) //Blob damage here
var/damage = round(30/(get_dist(B,get_turf(src))+1))
B.health -= damage
B.update_icon()
+
+ new/obj/effect/effect/smoke/flashbang(src.loc)
del(src)
return
@@ -30,7 +32,7 @@
S.icon_state = "shield0"
M << "\red BANG"
- playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
+ playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 5)
//Checking for protections
var/eye_safety = 0
@@ -98,6 +100,15 @@
M << "\red Your ears start to ring!"
M.update_icons()
+/obj/effect/effect/smoke/flashbang
+ name = "illumination"
+ time_to_live = 10
+ opacity = 0
+ icon_state = "sparks"
+
+/obj/effect/effect/smoke/flashbang/New()
+ ..()
+ SetLuminosity(15)
/obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index de160213..1615c756 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -112,7 +112,7 @@ var/last_chew = 0
H.attack_log += text("\[[time_stamp()]\] [s] ([H.ckey])")
log_attack("[s] ([H.ckey])")
- if(O.take_damage(3,0,1,"teeth marks"))
+ if(O.take_damage(3,0,1,1,"teeth marks"))
H:UpdateDamageIcon()
last_chew = world.time
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index 06258f4b..4e9d781b 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -53,6 +53,7 @@
name = "fork"
desc = "Pointy."
icon_state = "fork"
+ sharp = 1
/obj/item/weapon/kitchen/utensil/fork/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
@@ -114,6 +115,8 @@
icon_state = "knife"
force = 10.0
throwforce = 10.0
+ sharp = 1
+ edge = 1
suicide_act(mob/user)
viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \
@@ -154,6 +157,7 @@
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
flags = FPRINT | TABLEPASS | CONDUCT
sharp = 1
+ edge = 1
force = 10.0
w_class = 3.0
throwforce = 6.0
@@ -192,6 +196,8 @@
m_amt = 12000
origin_tech = "materials=1"
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
+ sharp = 1
+ edge = 1
/obj/item/weapon/butch/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index c4146854..a16dc018 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -19,6 +19,8 @@
flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS | NOBLOODY
origin_tech = "combat=3"
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
+ sharp = 1
+ edge = 1
suicide_act(mob/user)
viewers(user) << "\red [user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide."
@@ -37,6 +39,8 @@
flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
origin_tech = "magnets=3;syndicate=4"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
+ sharp = 1
+ edge = 1
/obj/item/weapon/melee/energy/sword/pirate
name = "energy cutlass"
@@ -48,6 +52,8 @@
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
icon_state = "blade"
force = 70.0//Normal attacks deal very high damage.
+ sharp = 1
+ edge = 1
throwforce = 1//Throwing or dropping the item deletes it.
throw_speed = 1
throw_range = 1
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 00d2eafa..503f7b99 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -48,6 +48,8 @@
/obj/item/weapon/storage/box/gloves
name = "box of latex gloves"
desc = "Contains white gloves."
+ icon_state = "latex"
+
New()
..()
new /obj/item/clothing/gloves/latex(src)
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 4bd89f7d..245ebea7 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -379,6 +379,8 @@ LOOK FOR SURGERY.DM*/
icon_state = "scalpel"
flags = FPRINT | TABLEPASS | CONDUCT
force = 10.0
+ sharp = 1
+ edge = 1
w_class = 2.0
throwforce = 5.0
throw_speed = 3
@@ -668,6 +670,8 @@ LOOK FOR SURGERY.DM*/
g_amt = 10000
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "sawed", "cut")
+ sharp = 1
+ edge = 1
/*
/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 55e04456..b8494a7b 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -106,6 +106,8 @@
m_amt = 80
origin_tech = "materials=1;engineering=1"
attack_verb = list("pinched", "nipped")
+ sharp = 1
+ edge = 1
/obj/item/weapon/wirecutters/New()
if(prob(50))
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index d0092619..bb714ca9 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -109,6 +109,8 @@
name = "fire axe"
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
force = 5
+ sharp = 1
+ edge = 1
w_class = 4.0
slot_flags = SLOT_BACK
force_unwielded = 10
@@ -154,6 +156,8 @@
flags = FPRINT | TABLEPASS | NOSHIELD
origin_tech = "magnets=3;syndicate=4"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
+ sharp = 1
+ edge = 1
/obj/item/weapon/twohanded/dualsaber/update_icon()
icon_state = "dualsaber[wielded]"
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 58bd7933..8eb24e90 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -79,6 +79,8 @@
slot_flags = SLOT_BELT
force = 2
throwforce = 1
+ sharp = 1
+ edge = 1
w_class = 3
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
@@ -99,6 +101,8 @@
slot_flags = SLOT_BELT
force = 40
throwforce = 10
+ sharp = 1
+ edge = 1
w_class = 3
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
@@ -122,6 +126,8 @@
slot_flags = SLOT_BELT | SLOT_BACK
force = 40
throwforce = 10
+ sharp = 1
+ edge = 1
w_class = 3
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
@@ -139,6 +145,7 @@
/obj/item/weapon/harpoon
name = "harpoon"
sharp = 1
+ edge = 0
desc = "Tharr she blows!"
icon_state = "harpoon"
item_state = "harpoon"
@@ -150,6 +157,7 @@
/obj/item/weapon/canesword
name = "cane sword"
sharp = 1
+ edge = 1
desc = "A thin, sharp blade with an elegant handle."
icon_state = "canesword"
item_state = "canesword"
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 8377f883..1357510d 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -10,7 +10,8 @@
animate_movement = 2
var/throwforce = 1
var/list/attack_verb = list() //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
- var/sharp = 0 // whether this object cuts
+ var/sharp = 0 // whether this object cuts
+ var/edge = 0 // whether this object is more likely to dismember
var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
var/damtype = "brute"
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 82a8e425..b6dda25f 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -216,7 +216,7 @@
return 0
return 0
-/obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/structure/grille/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(!destroyed)
if(exposed_temperature > T0C + 1500)
health -= 1
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index a0a9a913..3d21a3a2 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -110,7 +110,7 @@
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(!istype(W)) return
- if (is_sharp(W))
+ if (can_puncture(W))
visible_message("\red [user] pierces [src] with [W]!")
deflate(1)
if(W.damtype == BRUTE || W.damtype == BURN)
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 9ff142c6..cbd2e9b9 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -82,6 +82,7 @@
state = 1
update_icon()
isSwitchingStates = 0
+ update_nearby_tiles()
proc/Close()
isSwitchingStates = 1
@@ -93,6 +94,7 @@
state = 0
update_icon()
isSwitchingStates = 0
+ update_nearby_tiles()
update_icon()
if(state)
@@ -198,7 +200,7 @@
TemperatureAct(100)
..()
- temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
TemperatureAct(exposed_temperature)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 88f6cc0f..798060f8 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -361,7 +361,7 @@
return
-/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > T0C + 800)
hit(round(exposed_volume / 100), 0)
..()
@@ -381,7 +381,7 @@
shardtype = /obj/item/weapon/shard/plasma
health = 120
-/obj/structure/window/plasmabasic/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/structure/window/phoronbasic/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > T0C + 32000)
hit(round(exposed_volume / 1000), 0)
..()
@@ -395,7 +395,7 @@
reinf = 1
health = 160
-/obj/structure/window/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/structure/window/plasmareinforced/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
/obj/structure/window/reinforced
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 1d90122a..c4ed38d2 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -144,8 +144,11 @@
for(var/obj/effect/decal/cleanable/blood/B in contents)
if(!B.blood_DNA[M.dna.unique_enzymes])
B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
+ B.virus2 = virus_copylist(M.virus2)
return 1 //we bloodied the floor
+
+
//if there isn't a blood decal already, make one.
var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src)
@@ -156,6 +159,7 @@
newblood.basecolor = "#A10808"
newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
+ newblood.virus2 = virus_copylist(M.virus2)
newblood.update_icon()
return 1 //we bloodied the floor
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 592773d5..4ca0d8c7 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -608,22 +608,22 @@ var/list/admin_verbs_mod = list(
feedback_add_details("admin_verb","GD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the disease [D].", 1)
-
+
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
set category = "Fun"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
-
+
var/datum/disease2/disease/D = new /datum/disease2/disease()
-
+
var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
-
+
D.makerandom(greater)
if (!greater)
D.infectionchance = 1
-
+
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
-
+
if(istype(T,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
if (H.species)
@@ -632,7 +632,7 @@ var/list/admin_verbs_mod = list(
var/mob/living/carbon/monkey/M = T
D.affected_species = list(M.greaterform)
infect_virus2(T,D,1)
-
+
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 8daf267b..e16e809a 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -114,7 +114,7 @@
//play the recieving admin the adminhelp sound (if they have them enabled)
//non-admins shouldn't be able to disable this
- if(C.prefs.toggles & SOUND_ADMINHELP)
+ if(C.prefs && C.prefs.toggles & SOUND_ADMINHELP)
C << 'sound/effects/adminhelp.ogg'
log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]")
diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm
index 789e33f9..82d8df28 100644
--- a/code/modules/clothing/shoes/colour.dm
+++ b/code/modules/clothing/shoes/colour.dm
@@ -84,22 +84,31 @@
name = "orange shoes"
icon_state = "orange"
item_color = "orange"
+ var/obj/item/weapon/handcuffs/chained = null
+
+/obj/item/clothing/shoes/orange/proc/attach_cuffs(var/obj/item/weapon/handcuffs/cuffs)
+ if (src.chained) return
+
+ cuffs.loc = src
+ src.chained = cuffs
+ src.slowdown = 15
+ src.icon_state = "orange1"
+
+/obj/item/clothing/shoes/orange/proc/remove_cuffs()
+ if (!src.chained) return
+
+ src.chained.loc = get_turf(src)
+ src.slowdown = initial(slowdown)
+ src.icon_state = "orange"
+ src.chained = null
+
+/obj/item/clothing/shoes/orange/attack_self(mob/user as mob)
+ ..()
+ remove_cuffs()
+
+/obj/item/clothing/shoes/orange/attackby(H as obj, mob/user as mob)
+ ..()
+ if (istype(H, /obj/item/weapon/handcuffs))
+ attach_cuffs(H)
-///obj/item/clothing/shoes/orange/attack_self(mob/user as mob)
-// if (src.chained)
-// src.chained = null
-// src.slowdown = SHOES_SLOWDOWN
-// new /obj/item/weapon/handcuffs( user.loc )
-// src.icon_state = "orange"
-// return
-///obj/item/clothing/shoes/orange/attackby(H as obj, loc)
-// ..()
-// if ((istype(H, /obj/item/weapon/handcuffs) && !( src.chained )))
-// //H = null
-// if (src.icon_state != "orange") return
-// del(H)
-// src.chained = 1
-// src.slowdown = 15
-// src.icon_state = "orange1"
-// return
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index dad2f7c2..de9ce67c 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -30,42 +30,4 @@
name = "roboticist's jumpsuit"
icon_state = "robotics"
item_state = "robotics"
- item_color = "robotics"
-
-//Down below follows a partial attempt at getting the rolldown verb for jumpsuits.
-//Issue: Sprites vanishing again... Hueh - Skull132
-/*
-/obj/item/clothing/under/rank/verb/rolldown()
- set name = "Roll Down Jumpsuit"
- set category = "Object"
- set src in usr
-
- if(!usr.canmove || usr.stat || usr.restrained())
- return 0
-
- switch(icon_state)
- if("atmos")
- src.icon_state = "atmos_rd"
- src.item_color = "atmos_rd"
- src.item_state = "atmos_rd"
- usr << "You roll down the jumpsuit."
- if("atmos_rd")
- src.icon_state = "atmos"
- src.item_color = "atmos"
- src.item_state = "atmos"
- usr << "You roll the jumpsuit back up."
- if("engine")
- src.icon_state = "engine_rd"
- src.item_color = "engine_rd"
- src.item_state = "engine_rd"
- usr << "You roll down the jumpsuit."
- if("engine_rd")
- src.icon_state = "engine"
- src.item_color = "engine"
- src.item_state = "engine"
- usr << "You roll the jumpsuit back up."
- else
- usr << "You attempt to roll down your [src], before promptly realising how stupid it would be for you to expose your chest."
- return
- usr.update_inv_w_uniform() */
-
+ item_color = "robotics"
\ No newline at end of file
diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm
index c52b196d..f1bd79a9 100644
--- a/code/modules/customitems/item_spawning.dm
+++ b/code/modules/customitems/item_spawning.dm
@@ -4,13 +4,15 @@
//for multiple items just add mutliple entries, unless i change it to be a listlistlist
//yes, it has to be an item, you can't pick up nonitems
+/var/list/custom_items = list()
+
+/hook/startup/proc/loadCustomItems()
+ var/custom_items_file = file2text("config/custom_items.txt")
+ custom_items = text2list(custom_items_file, "\n")
+ return 1
/proc/EquipCustomItems(mob/living/carbon/human/M)
- // load lines
- var/file = file2text("config/custom_items.txt")
- var/lines = text2list(file, "\n")
-
- for(var/line in lines)
+ for(var/line in custom_items)
// split & clean up
var/list/Entry = text2list(line, ":")
for(var/i = 1 to Entry.len)
@@ -25,6 +27,8 @@
var/ok = 0 // 1 if the item was placed successfully
P = trim(P)
var/path = text2path(P)
+ if(!path) continue
+
var/obj/item/Item = new path()
if(istype(Item,/obj/item/weapon/card/id))
//id card needs to replace the original ID
@@ -58,6 +62,23 @@
del(C)
ok = M.equip_if_possible(I, slot_wear_id, 0) //if 1, last argument deletes on fail
break
+/* else if(istype(Item,/obj/item/weapon/storage/belt))
+ if(M.ckey == "jakksergal" && M.real_name == "Nashi Ra'hal" && M.mind.role_alt_title && M.mind.role_alt_title != "Nurse" && M.mind.role_alt_title != "Chemist")
+ ok = 1
+ del(Item)
+ goto skip
+ var/obj/item/weapon/storage/belt/medical/fluff/nashi_belt/I = Item
+ if(istype(M.belt,/obj/item/weapon/storage/belt))
+ for(var/obj/item/weapon/storage/belt/B in M)
+ del(B)
+ M.belt=null
+ ok = M.equip_if_possible(I, slot_belt, 0)
+ break
+ if(istype(M.belt,/obj/item/device/pda))
+ for(var/obj/item/device/pda/Pda in M)
+ M.belt=null
+ M.equip_if_possible(Pda, slot_l_store, 0)
+ ok = M.equip_if_possible(I, slot_belt, 0)*/
else if(istype(M.back,/obj/item/weapon/storage) && M.back:contents.len < M.back:storage_slots) // Try to place it in something on the mob's back
Item.loc = M.back
ok = 1
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 81165e30..77cbe616 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -190,6 +190,7 @@ proc/move_mining_shuttle()
attack_verb = list("hit", "pierced", "sliced", "attacked")
var/drill_sound = 'sound/weapons/Genhit.ogg'
var/drill_verb = "picking"
+ sharp = 1
var/excavation_amount = 100
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index c9b059e6..f01d98ca 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -72,7 +72,7 @@ var/const/MAX_ACTIVE_TIME = 400
Die()
return
-/obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/item/clothing/mask/facehugger/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
Die()
return
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index a704eede..becedb1e 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -279,4 +279,4 @@
emp_damage += rand(10,20)
if(3)
emp_damage += rand(0,10)
- ..()*/
+ ..()*/
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 41b6e86c..d2e90b55 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -52,6 +52,7 @@
brainmob.real_name = H.real_name
brainmob.dna = H.dna
brainmob.timeofhostdeath = H.timeofdeath
+ brainmob.stat = 0
if(brainmob.mind)
brainmob.mind.assigned_role = "Positronic Brain"
if(H.mind)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 7785b9ea..d1beaa15 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -252,11 +252,13 @@
/mob/living/carbon/proc/throw_mode_off()
src.in_throw_mode = 0
- src.throw_icon.icon_state = "act_throw_off"
+ if(src.throw_icon) //in case we don't have the HUD and we use the hotkey
+ src.throw_icon.icon_state = "act_throw_off"
/mob/living/carbon/proc/throw_mode_on()
src.in_throw_mode = 1
- src.throw_icon.icon_state = "act_throw_on"
+ if(src.throw_icon)
+ src.throw_icon.icon_state = "act_throw_on"
/mob/proc/throw_item(atom/target)
return
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 03253da1..75ebd7d7 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -111,19 +111,16 @@
return 1
if("hurt")
+ var/datum/unarmed_attack/attack = M.species.unarmed
- M.attack_log += text("\[[time_stamp()]\] [M.species.attack_verb]ed [src.name] ([src.ckey])")
- src.attack_log += text("\[[time_stamp()]\] Has been [M.species.attack_verb]ed by [M.name] ([M.ckey])")
- msg_admin_attack("[key_name(M)] [M.species.attack_verb]ed [key_name(src)]")
+ M.attack_log += text("\[[time_stamp()]\] [pick(attack.attack_verb)]ed [src.name] ([src.ckey])")
+ src.attack_log += text("\[[time_stamp()]\] Has been [pick(attack.attack_verb)]ed by [M.name] ([M.ckey])")
+ msg_admin_attack("[key_name(M)] [pick(attack.attack_verb)]ed [key_name(src)]")
var/damage = rand(0, 5)//BS12 EDIT
if(!damage)
- if(M.species.attack_verb == "punch")
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- else
- playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
-
- visible_message("\red [M] has attempted to [M.species.attack_verb] [src]!")
+ playsound(loc, attack.miss_sound, 25, 1, -1)
+ visible_message("\red [M] tried to [pick(attack.attack_verb)] [src]!")
return 0
@@ -133,20 +130,16 @@
if(HULK in M.mutations) damage += 5
- if(M.species.attack_verb == "punch")
- playsound(loc, "punch", 25, 1, -1)
- else
- playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
+ playsound(loc, attack.attack_sound, 25, 1, -1)
- visible_message("\red [M] has [M.species.attack_verb]ed [src]!")
+ visible_message("\red [M] [pick(attack.attack_verb)]ed [src]!")
//Rearranged, so claws don't increase weaken chance.
if(damage >= 5 && prob(50))
visible_message("\red [M] has weakened [src]!")
apply_effect(2, WEAKEN, armor_block)
- if(M.species.punch_damage)
- damage += M.species.punch_damage
- apply_damage(damage, BRUTE, affecting, armor_block)
+ damage += attack.damage
+ apply_damage(damage, BRUTE, affecting, armor_block, sharp=attack.sharp, edge=attack.edge)
if("disarm")
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 4fbd84b7..9748eca3 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -59,6 +59,36 @@
heal_overall_damage(0, -amount)
hud_updateflag |= 1 << HEALTH_HUD
+/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
+ if(species && species.brute_mod)
+ amount = amount*species.brute_mod
+
+ if (organ_name in organs_by_name)
+ var/datum/organ/external/O = get_organ(organ_name)
+
+ if(amount > 0)
+ O.take_damage(amount, 0, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source)
+ else
+ //if you don't want to heal robot organs, they you will have to check that yourself before using this proc.
+ O.heal_damage(-amount, 0, internal=0, robo_repair=(O.status & ORGAN_ROBOT))
+
+ hud_updateflag |= 1 << HEALTH_HUD
+
+/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
+ if(species && species.burn_mod)
+ amount = amount*species.burn_mod
+
+ if (organ_name in organs_by_name)
+ var/datum/organ/external/O = get_organ(organ_name)
+
+ if(amount > 0)
+ O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source)
+ else
+ //if you don't want to heal robot organs, they you will have to check that yourself before using this proc.
+ O.heal_damage(0, -amount, internal=0, robo_repair=(O.status & ORGAN_ROBOT))
+
+ hud_updateflag |= 1 << HEALTH_HUD
+
/mob/living/carbon/human/Stun(amount)
if(HULK in mutations) return
..()
@@ -138,11 +168,11 @@
//Damages ONE external organ, organ gets randomly selected from damagable ones.
//It automatically updates damage overlays if necesary
//It automatically updates health status
-/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0)
+/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0)
var/list/datum/organ/external/parts = get_damageable_organs()
if(!parts.len) return
var/datum/organ/external/picked = pick(parts)
- if(picked.take_damage(brute,burn,sharp))
+ if(picked.take_damage(brute,burn,sharp,edge))
UpdateDamageIcon()
hud_updateflag |= 1 << HEALTH_HUD
updatehealth()
@@ -172,7 +202,7 @@
if(update) UpdateDamageIcon()
// damage MANY external organs, in random order
-/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/used_weapon = null)
+/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/used_weapon = null)
if(status_flags & GODMODE) return //godmode
var/list/datum/organ/external/parts = get_damageable_organs()
var/update = 0
@@ -182,7 +212,7 @@
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
- update |= picked.take_damage(brute,burn,sharp,used_weapon)
+ update |= picked.take_damage(brute,burn,sharp,edge,used_weapon)
brute -= (picked.brute_dam - brute_was)
burn -= (picked.burn_dam - burn_was)
@@ -227,7 +257,7 @@ This function restores all organs.
zone = "head"
return organs_by_name[zone]
-/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/obj/used_weapon = null)
+/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/edge = 0, var/obj/used_weapon = null)
//visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]")
if((damagetype != BRUTE) && (damagetype != BURN))
@@ -250,11 +280,15 @@ This function restores all organs.
switch(damagetype)
if(BRUTE)
damageoverlaytemp = 20
- if(organ.take_damage(damage, 0, sharp, used_weapon))
+ if(species && species.brute_mod)
+ damage = damage*species.brute_mod
+ if(organ.take_damage(damage, 0, sharp, edge, used_weapon))
UpdateDamageIcon()
if(BURN)
damageoverlaytemp = 20
- if(organ.take_damage(0, damage, sharp, used_weapon))
+ if(species && species.burn_mod)
+ damage = damage*species.burn_mod
+ if(organ.take_damage(0, damage, sharp, edge, used_weapon))
UpdateDamageIcon()
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index caea7519..9d22b72a 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -232,7 +232,7 @@ emp_act
if(armor >= 2) return 0
if(!I.force) return 0
- apply_damage(I.force, I.damtype, affecting, armor , is_sharp(I), I)
+ apply_damage(I.force, I.damtype, affecting, armor , is_sharp(I), has_edge(I), I)
var/bloody = 0
if(((I.damtype == BRUTE) || (I.damtype == HALLOSS)) && prob(25 + (I.force * 2)))
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 029dd3ce..b25833ea 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1488,21 +1488,21 @@
for (var/ID in virus2)
var/datum/disease2/disease/V = virus2[ID]
V.cure(src)
+ if(life_tick % 3) //don't spam checks over all objects in view every tick.
+ for(var/obj/effect/decal/cleanable/O in view(1,src))
+ if(istype(O,/obj/effect/decal/cleanable/blood))
+ var/obj/effect/decal/cleanable/blood/B = O
+ if(B.virus2.len)
+ for (var/ID in B.virus2)
+ var/datum/disease2/disease/V = B.virus2[ID]
+ infect_virus2(src,V.getcopy())
- for(var/obj/effect/decal/cleanable/O in view(1,src))
- if(istype(O,/obj/effect/decal/cleanable/blood))
- var/obj/effect/decal/cleanable/blood/B = O
- if(B.virus2.len)
- for (var/ID in B.virus2)
- var/datum/disease2/disease/V = B.virus2[ID]
- infect_virus2(src,V)
-
- else if(istype(O,/obj/effect/decal/cleanable/mucus))
- var/obj/effect/decal/cleanable/mucus/M = O
- if(M.virus2.len)
- for (var/ID in M.virus2)
- var/datum/disease2/disease/V = M.virus2[ID]
- infect_virus2(src,V)
+ else if(istype(O,/obj/effect/decal/cleanable/mucus))
+ var/obj/effect/decal/cleanable/mucus/M = O
+ if(M.virus2.len)
+ for (var/ID in M.virus2)
+ var/datum/disease2/disease/V = M.virus2[ID]
+ infect_virus2(src,V.getcopy())
if(virus2.len)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 7ec30fa3..056ce003 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -184,6 +184,29 @@
/mob/living/carbon/human/proc/GetSpecialVoice()
return special_voice
+
+/*
+ ***Deprecated***
+ let this be handled at the hear_say or hear_radio proc
+ This is left in for robot speaking when humans gain binary channel access until I get around to rewriting
+ robot_talk() proc.
+ There is no language handling build into it however there is at the /mob level so we accept the call
+ for it but just ignore it.
+*/
+
+/mob/living/carbon/human/say_quote(var/message, var/datum/language/speaking = null)
+ var/verb = "says"
+ var/ending = copytext(message, length(message))
+ if(ending=="!")
+ verb=pick("exclaims","shouts","yells")
+ else if(ending=="?")
+ verb="asks"
+
+ return verb
+
+
+
+
/mob/living/carbon/human/proc/handle_speech_problems(var/message)
var/list/returns[3]
var/verb = "says"
diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/monkey/diona.dm
index cf1ea1cc..8e6f10df 100644
--- a/code/modules/mob/living/carbon/monkey/diona.dm
+++ b/code/modules/mob/living/carbon/monkey/diona.dm
@@ -10,6 +10,8 @@
icon_state = "nymph1"
var/list/donors = list()
var/ready_evolve = 0
+ universal_understand = 0 // Dionaea do not need to speak to people
+ universal_speak = 0 // before becoming an adult. Use *chirp.
/mob/living/carbon/monkey/diona/attack_hand(mob/living/carbon/human/M as mob)
@@ -207,7 +209,7 @@
src.visible_message("\red [src] flicks out a feeler and neatly steals a sample of [M]'s blood.","\red You flick out a feeler and neatly steal a sample of [M]'s blood.")
donors += M.real_name
for(var/datum/language/L in M.languages)
- languages += L
+ languages |= L
spawn(25)
update_progression()
@@ -245,14 +247,11 @@
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
-
if(stat == 2)
return say_dead(message)
var/datum/language/speaking = null
-
-
if(length(message) >= 2)
var/channel_prefix = copytext(message, 1 ,3)
if(languages.len)
@@ -270,6 +269,4 @@
if(!message || stat)
return
-
-
..(message, speaking, verb, null, null, message_range, null)
diff --git a/code/modules/mob/living/carbon/monkey/npc.dm b/code/modules/mob/living/carbon/monkey/npc.dm
index 34f77bc7..f8635586 100644
--- a/code/modules/mob/living/carbon/monkey/npc.dm
+++ b/code/modules/mob/living/carbon/monkey/npc.dm
@@ -86,14 +86,4 @@ mob/living/carbon/monkey/react_to_attack(mob/M)
emote("me", 2, "whimpers fearfully!")
npc_fleeing = M
- fleeing_duration = 30
-
-
-/*/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/slash = 0, var/used_weapon = null)
- if(!client && !stat)
- if(damage > 10)
- if(prob(40) || health == 100)
- emote("me", 2, pick("screams loudly!", "whimpers in pain!"))
- else if(health == 100 || (damage > 0 && prob(10)))
- emote("me", 1, pick("flails about wildly!", "cringes visibly!", "chimpers nervously."))
- return ..()*/
\ No newline at end of file
+ fleeing_duration = 30
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm
index f24171d9..2f8dfd97 100644
--- a/code/modules/mob/living/carbon/species.dm
+++ b/code/modules/mob/living/carbon/species.dm
@@ -12,8 +12,8 @@
var/primitive // Lesser form, if any (ie. monkey for humans)
var/tail // Name of tail image in species effects icon file.
var/language // Default racial language, if any.
- var/attack_verb = "punch" // Empty hand hurt intent verb.
- var/punch_damage = 0 // Extra empty hand attack damage.
+ var/unarmed //For empty hand harm-intent attack
+ var/unarmed_type = /datum/unarmed_attack
var/mutantrace // Safeguard due to old code.
var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
@@ -68,6 +68,9 @@
var/list/sprite_sheets = list()
+/datum/species/New()
+ unarmed = new unarmed_type()
+
/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
//This is a basic humanoid limb setup.
H.organs = list()
@@ -121,6 +124,7 @@
name = "Human"
language = "Sol Common"
primitive = /mob/living/carbon/monkey
+ unarmed_type = /datum/unarmed_attack/punch
flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR
@@ -133,8 +137,7 @@
deform = 'icons/mob/human_races/r_def_lizard.dmi'
language = "Sinta'unathi"
tail = "sogtail"
- attack_verb = "scratch"
- punch_damage = 5
+ unarmed_type = /datum/unarmed_attack/claws
primitive = /mob/living/carbon/monkey/unathi
darksight = 3
@@ -156,8 +159,7 @@
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
language = "Siik'tajr"
tail = "tajtail"
- attack_verb = "scratch"
- punch_damage = 5
+ unarmed_type = /datum/unarmed_attack/claws
darksight = 8
cold_level_1 = 200 //Default 260
@@ -180,6 +182,7 @@
deform = 'icons/mob/human_races/r_def_skrell.dmi'
language = "Skrellian"
primitive = /mob/living/carbon/monkey/skrell
+ unarmed_type = /datum/unarmed_attack/punch
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
@@ -190,6 +193,7 @@
icobase = 'icons/mob/human_races/r_vox.dmi'
deform = 'icons/mob/human_races/r_def_vox.dmi'
language = "Vox-pidgin"
+ unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
warning_low_pressure = 50
hazard_low_pressure = 0
@@ -231,7 +235,7 @@
icobase = 'icons/mob/human_races/r_armalis.dmi'
deform = 'icons/mob/human_races/r_armalis.dmi'
language = "Vox-pidgin"
- attack_verb = "slash"
+ unarmed_type = /datum/unarmed_attack/claws/armalis
warning_low_pressure = 50
hazard_low_pressure = 0
@@ -295,8 +299,7 @@
icobase = 'icons/mob/human_races/r_diona.dmi'
deform = 'icons/mob/human_races/r_def_plant.dmi'
language = "Rootspeak"
- attack_verb = "slash"
- punch_damage = 5
+ unarmed_type = /datum/unarmed_attack/diona
primitive = /mob/living/carbon/monkey/diona
warning_low_pressure = 50
@@ -341,7 +344,7 @@
icobase = 'icons/mob/human_races/r_machine.dmi'
deform = 'icons/mob/human_races/r_machine.dmi'
language = "Tradeband"
- punch_damage = 2
+ unarmed_type = /datum/unarmed_attack/punch
eyes = "blank_eyes"
brute_mod = 0.5
@@ -362,3 +365,32 @@
blood_color = "#1F181F"
flesh_color = "#575757"
+
+//Species unarmed attacks
+
+/datum/unarmed_attack
+ var/attack_verb = list("attack") // Empty hand hurt intent verb.
+ var/damage = 0 // Extra empty hand attack damage.
+ var/attack_sound = "punch"
+ var/miss_sound = 'sound/weapons/punchmiss.ogg'
+ var/sharp = 0
+ var/edge = 0
+
+/datum/unarmed_attack/punch
+ attack_verb = list("punch")
+
+/datum/unarmed_attack/diona
+ attack_verb = list("lash", "bludgeon")
+ damage = 5
+
+/datum/unarmed_attack/claws
+ attack_verb = list("scratch", "claw")
+ attack_sound = 'sound/weapons/slice.ogg'
+ miss_sound = 'sound/weapons/slashmiss.ogg'
+ damage = 5
+ sharp = 1
+ edge = 1
+
+/datum/unarmed_attack/claws/armalis
+ attack_verb = list("slash", "claw")
+ damage = 10 //they're huge! they should do a little more damage, i'd even go for 15-20 maybe...
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index f76b1dc3..f216a74c 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -8,7 +8,7 @@
Returns
standard 0 if fail
*/
-/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null)
+/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null, var/sharp = 0, var/edge = 0)
if(!damage || (blocked >= 2)) return 0
switch(damagetype)
if(BRUTE)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 4447c5f2..98659018 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -431,7 +431,8 @@
else
stop_pulling()
. = ..()
- if ((s_active && !( s_active in contents ) ))
+
+ if (s_active && !( s_active in contents ) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much.
s_active.close(src)
if(update_slimes)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 7136c09a..12614e3a 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -53,11 +53,8 @@
signaler.signal()
var/absorb = run_armor_check(def_zone, P.flag)
- if(absorb >= 2)
- P.on_hit(src,2)
- return 2
if(!P.nodamage)
- apply_damage((P.damage/(absorb+1)), P.damage_type, def_zone, absorb, 0, P)
+ apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=is_sharp(P), edge=has_edge(P))
P.on_hit(src, absorb, def_zone)
return absorb
@@ -72,7 +69,7 @@
src.visible_message("\red [src] has been hit by [O].")
var/armor = run_armor_check(zone, "melee", "Your armor has protected your [zone].", "Your armor has softened hit to your [zone].")
if(armor < 2)
- apply_damage(O.throwforce*(speed/5), dtype, zone, armor, O.sharp, O)
+ apply_damage(O.throwforce*(speed/5), dtype, zone, armor, O, sharp=is_sharp(O), edge=has_edge(O))
if(!O.fingerprintslast)
return
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 4ba9f221..b6eedfc3 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -103,7 +103,7 @@ var/list/department_radio_keys = list(
var/obj/O = I
hearturfs += O.locs[1]
objects |= O
-
+
for(var/mob/M in player_list)
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
listening |= M
@@ -113,7 +113,8 @@ var/list/department_radio_keys = list(
for(var/obj/O in objects)
spawn(0)
- O.hear_talk(src, message, verb, speaking)
+ if(O) //It's possible that it could be deleted in the meantime.
+ O.hear_talk(src, message, verb, speaking)
var/speech_bubble_test = say_test(message)
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 0fa2b9a9..28efbfef 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -241,13 +241,13 @@ var/list/ai_list = list()
for (var/area_name in alarmlist)
var/datum/alarm/alarm = alarmlist[area_name]
dat += ""
-
+
var/cameratext = ""
if (alarm.cameras)
for (var/obj/machinery/camera/I in alarm.cameras)
cameratext += text("[][]", (cameratext=="") ? "" : " | ", src, I, I.c_tag)
dat += text("-- [] ([])", alarm.area.name, (cameratext)? cameratext : "No Camera")
-
+
if (alarm.sources.len > 1)
dat += text(" - [] sources", alarm.sources.len)
dat += "
\n"
@@ -398,23 +398,11 @@ var/list/ai_list = list()
if (href_list["track"])
var/mob/target = locate(href_list["track"]) in mob_list
-/*
- var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list
- if(A && target)
- A.ai_actual_track(target)
-*/
- //Strip off any "(as Derplord)".
- //If there's a way to do this via a var that doesn't give the AI extra info, please let me know.
- var/seeking = target.name
- var/index = findtext(seeking, "(as ")
- if(index)
- seeking = copytext(seeking, 1, index-1)
-
- if(target && html_decode(href_list["trackname"]) == seeking)
+ if(target && (!istype(target, /mob/living/carbon/human) || html_decode(href_list["trackname"]) == target:get_face_name()))
ai_actual_track(target)
- else
- src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]."
+
+ src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]."
return
else if (href_list["faketrack"])
@@ -530,24 +518,24 @@ var/list/ai_list = list()
/mob/living/silicon/ai/triggerAlarm(var/class, area/A, list/cameralist, var/source)
if (stat == 2)
return 1
-
+
..()
-
+
var/cameratext = ""
for (var/obj/machinery/camera/C in cameralist)
cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]"
-
+
queueAlarm("--- [class] alarm detected in [A.name]! ([(cameratext)? cameratext : "No Camera"])", class)
-
+
if (viewalerts) ai_alerts()
/mob/living/silicon/ai/cancelAlarm(var/class, area/A as area, var/source)
var/has_alarm = ..()
-
+
if (!has_alarm)
queueAlarm(text("--- [] alarm in [] has been cleared.", class, A.name), class, 0)
if (viewalerts) ai_alerts()
-
+
return has_alarm
/mob/living/silicon/ai/cancel_camera()
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 4bf9f9ca..8c85447f 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -33,7 +33,7 @@
installed = -1
uninstall()
-/datum/robot_component/proc/take_damage(brute, electronics, sharp)
+/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge)
if(installed != 1) return
brute_damage += brute
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 485ff99e..55270907 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -60,7 +60,6 @@
//Some tidying-up.
flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'NanoTrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
- updatename()
updateicon()
//Redefining some robot procs...
@@ -104,15 +103,8 @@
if(copytext(message,1,2) == "*")
return emote(copytext(message,2))
else if(length(message) >= 2)
- if(copytext(message, 1 ,3) == ":b" || copytext(message, 1 ,3) == ":B")
- if(!is_component_functioning("comms"))
- src << "\red Your binary communications component isn't functional."
- return
-
- robot_talk(trim(copytext(message,3)))
-
- else if(copytext(message, 1 ,3) == ":d" || copytext(message, 1 ,3) == ":D")
+ if(copytext(message, 1 ,3) == ":d" || copytext(message, 1 ,3) == ":D")
if(!is_component_functioning("radio"))
src << "\red Your radio transmitter isn't functional."
@@ -329,8 +321,8 @@
full_law_reset()
src << "
You are a maintenance drone, a tiny-brained robotic repair machine."
src << "You have no individual will, no personality, and no drives or urges other than your laws."
- src << "Use :b to talk to your fellow synthetics, :d to talk to other drones, and say to speak silently to your nearby fellows."
- src << "Remember, you are lawed against interference with the crew."
+ src << "Use :d to talk to other drones and say to speak silently to your nearby fellows."
+ src << "Remember, you are lawed against interference with the crew. Also remember, you DO NOT take orders from the AI."
src << "Don't invade their worksites, don't steal their resources, don't tell them about the changeling in the toilets."
src << "If a crewmember has noticed you, you are probably breaking your third law."
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index b8d3025d..7c2dc565 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -266,10 +266,8 @@
if(!module)
module = new /obj/item/weapon/robot_module/drone(src)
- var/dat = "Drone modules\n"
- dat += {"Close
-
-
+ var/dat = "Drone modules\n"
+ dat += {"
Activated Modules
Module 1: [module_state_1 ? "[module_state_1]" : "No Module"]
@@ -310,7 +308,7 @@
dat += resources
- src << browse(dat, "window=robotmod&can_close=0")
+ src << browse(dat, "window=robotmod")
//Putting the decompiler here to avoid doing list checks every tick.
/mob/living/silicon/robot/drone/use_power()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 90973fbc..cfc0ad86 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -559,9 +559,6 @@
if(istype(WC))
C.brute_damage = WC.brute
C.electronics_damage = WC.burn
- else //This will nominally mean that removing and replacing a power cell will repair the mount, but I don't care at this point. ~Z
- C.brute_damage = 0
- C.electronics_damage = 0
usr << "\blue You install the [W.name]."
@@ -599,8 +596,12 @@
user << "You close the cover."
opened = 0
updateicon()
- else if(mmi && wiresexposed && isWireCut(1) && isWireCut(2) && isWireCut(3) && isWireCut(4) && isWireCut(5))
+ else if(wiresexposed && isWireCut(1) && isWireCut(2) && isWireCut(3) && isWireCut(4) && isWireCut(5))
//Cell is out, wires are exposed, remove MMI, produce damaged chassis, baleet original mob.
+ if(!mmi)
+ user << "\The [src] has no brain to remove."
+ return
+
user << "You jam the crowbar into the robot and begin levering [mmi]."
sleep(30)
user << "You damage some parts of the chassis, but eventually manage to rip out [mmi]!"
@@ -660,6 +661,9 @@
C.installed = 1
C.wrapped = W
C.install()
+ //This will mean that removing and replacing a power cell will repair the mount, but I don't care at this point. ~Z
+ C.brute_damage = 0
+ C.electronics_damage = 0
else if (istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool))
if (wiresexposed)
@@ -1026,10 +1030,8 @@
if(!module)
pick_module()
return
- var/dat = "Modules\n"
- dat += {"Close
-
-
+ var/dat = "Modules\n"
+ dat += {"
Activated Modules
Module 1: [module_state_1 ? "[module_state_1]" : "No Module"]
@@ -1057,16 +1059,11 @@
else
dat += text("[obj]: \[Activate | Deactivated\]
")
*/
- src << browse(dat, "window=robotmod&can_close=0")
+ src << browse(dat, "window=robotmod")
/mob/living/silicon/robot/Topic(href, href_list)
..()
- if (href_list["mach_close"])
- var/t1 = text("window=[href_list["mach_close"]]")
- unset_machine()
- src << browse(null, t1)
- return
if (href_list["showalerts"])
robot_alerts()
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index c4e15059..544992cc 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -62,7 +62,7 @@
var/datum/robot_component/picked = pick(parts)
picked.heal_damage(brute,burn)
-/mob/living/silicon/robot/take_organ_damage(var/brute = 0, var/burn = 0, var/sharp = 0)
+/mob/living/silicon/robot/take_organ_damage(var/brute = 0, var/burn = 0, var/sharp = 0, var/edge = 0)
var/list/components = get_damageable_components()
if(!components.len)
return
@@ -86,11 +86,11 @@
var/datum/robot_component/armour/A = get_armour()
if(A)
- A.take_damage(brute,burn,sharp)
+ A.take_damage(brute,burn,sharp,edge)
return
var/datum/robot_component/C = pick(components)
- C.take_damage(brute,burn,sharp)
+ C.take_damage(brute,burn,sharp,edge)
/mob/living/silicon/robot/heal_overall_damage(var/brute, var/burn)
var/list/datum/robot_component/parts = get_damaged_components(brute,burn)
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index 7fd3493f..ef80c631 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -23,7 +23,7 @@
if (src.client.handle_spam_prevention(message,MUTE_IC))
return
- message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
+ message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
if (stat == 2)
return say_dead(message)
@@ -65,7 +65,7 @@
if(message_mode != "binary" && !R.is_component_functioning("radio"))
src << "\red Your radio isn't functional at this time."
return
-
+
if(message_mode && message_mode != "general")
message = trim(copytext(message,3))
@@ -73,7 +73,7 @@
switch(message_mode)
if("department")
switch(bot_type)
- if(IS_AI)
+ if(IS_AI)
AI.holopad_talk(message)
if(IS_ROBOT)
log_say("[key_name(src)] : [message]")
@@ -118,9 +118,9 @@
R.radio.talk_into(src,message,message_mode,verb)
if(IS_PAI)
log_say("[key_name(src)] : [message]")
- P.radio.talk_into(src,message,message_mode,verb)
+ P.radio.talk_into(src,message,message_mode,verb)
return
-
+
return ..(message,null,verb)
@@ -167,14 +167,14 @@
return
var/verb = say_quote(message)
-
+
var/rendered = "Robotic Talk, [name] [verb], \"[message]\""
for (var/mob/living/S in living_mob_list)
if(S.robot_talk_understand && (S.robot_talk_understand == robot_talk_understand)) // This SHOULD catch everything caught by the one below, but I'm not going to change it.
if(istype(S , /mob/living/silicon/ai))
- var/renderedAI = "Robotic Talk, [name] [verb], \"[message]\""
+ var/renderedAI = "Robotic Talk, [name] [verb], \"[message]\""
S.show_message(renderedAI, 2)
else
S.show_message(rendered, 2)
@@ -182,14 +182,13 @@
else if (S.binarycheck())
if(istype(S , /mob/living/silicon/ai))
- var/renderedAI = "Robotic Talk, [name] [verb], \"[message]\""
+ var/renderedAI = "Robotic Talk, [name] [verb], \"[message]\""
S.show_message(renderedAI, 2)
else
S.show_message(rendered, 2)
var/list/listening = hearers(1, src)
listening -= src
- listening += src
var/list/heard = list()
for (var/mob/M in listening)
@@ -199,7 +198,7 @@
var/message_beep
verb = "beeps"
message_beep = "beep beep beep"
-
+
rendered = "[voice_name] [verb], \"[message_beep]\""
for (var/mob/M in heard)
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index 76e1de94..45ece9f6 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -41,7 +41,7 @@
if(worn_helmet)
sting_prob -= min(worn_helmet.armor["bio"],30) // Is your helmet sealed? I can't get to 30% of your body.
if( prob(sting_prob) && (M.stat == CONSCIOUS || (M.stat == UNCONSCIOUS && prob(25))) ) // Try to sting! If you're not moving, think about stinging.
- M.apply_damage(min(strength,2)+mut, BRUTE) // Stinging. The more mutated I am, the harder I sting.
+ M.apply_damage(min(strength,2)+mut, BRUTE, sharp=1) // Stinging. The more mutated I am, the harder I sting.
M.apply_damage((round(feral/10,1)*(max((round(strength/20,1)),1)))+toxic, TOX) // Bee venom based on how angry I am and how many there are of me!
M << "\red You have been stung!"
M.flash_pain()
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index d98d5f47..03e05d57 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -34,7 +34,7 @@
for(var/spell in construct_spells)
spell_list += new spell(src)
-/mob/living/simple_animal/construct/Die()
+/mob/living/simple_animal/construct/death()
..()
new /obj/item/weapon/ectoplasm (src.loc)
for(var/mob/M in viewers(src, null))
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index cd9f2ab4..6e502895 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -46,7 +46,7 @@
if(prob(50))
user << "\red \b This kills the crab."
health -= 20
- Die()
+ death()
else
GetMad()
get
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index e44e9fb1..0621bc50 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -222,7 +222,7 @@ var/global/chicken_count = 0
pixel_y = rand(0, 10)
chicken_count += 1
-/mob/living/simple_animal/chicken/Die()
+/mob/living/simple_animal/chicken/death()
..()
chicken_count -= 1
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index fc303349..31cda60c 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -134,7 +134,7 @@
M << 'sound/effects/mousesqueek.ogg'
..()
-/mob/living/simple_animal/mouse/Die()
+/mob/living/simple_animal/mouse/death()
layer = MOB_LAYER
if(client)
client.time_died_as_mouse = world.time
diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm
index 7920580f..3321b67f 100644
--- a/code/modules/mob/living/simple_animal/friendly/slime.dm
+++ b/code/modules/mob/living/simple_animal/friendly/slime.dm
@@ -70,7 +70,7 @@
overlays += "aslime-:33"
-/mob/living/simple_animal/slime/adult/Die()
+/mob/living/simple_animal/slime/adult/death()
var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc)
S1.icon_state = "[src.colour] baby slime"
S1.icon_living = "[src.colour] baby slime"
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index 4f50ef31..007872c3 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -162,7 +162,7 @@
M.show_message("\red [src] makes an odd warbling noise, fizzles, and explodes.")
explosion(get_turf(loc), -1, -1, 3, 5)
eject_brain()
- Die()
+ death()
/mob/living/simple_animal/spiderbot/proc/update_icon()
if(mmi)
@@ -200,7 +200,7 @@
..()
-/mob/living/simple_animal/spiderbot/Die()
+/mob/living/simple_animal/spiderbot/death()
living_mob_list -= src
dead_mob_list += src
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index f365d212..af7978b1 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -87,7 +87,7 @@
damage = 30
icon_state = "toxin"
-/mob/living/simple_animal/hostile/alien/Die()
+/mob/living/simple_animal/hostile/alien/death()
..()
visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...")
playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index a8c7f358..92ff94b6 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -135,7 +135,7 @@
var/mob/living/carbon/human/H = target_mob
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
- H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
+ H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1, edge=1)
return H
else if(isliving(target_mob))
var/mob/living/L = target_mob
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index 32b77715..41f74e93 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -44,7 +44,7 @@
ranged = 1
-/mob/living/simple_animal/hostile/hivebot/Die()
+/mob/living/simple_animal/hostile/hivebot/death()
..()
visible_message("[src] blows apart!")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 03c342cd..426a52a6 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -116,7 +116,7 @@
L += mechas_list
return L
-/mob/living/simple_animal/hostile/Die()
+/mob/living/simple_animal/hostile/death()
..()
walk(src, 0)
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index d4452720..d31f0ff2 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -41,7 +41,7 @@
if(.)
emote("growls at [.]")
-/mob/living/simple_animal/hostile/mimic/Die()
+/mob/living/simple_animal/hostile/mimic/death()
..()
visible_message("\red [src] stops moving!")
del(src)
@@ -107,7 +107,7 @@
..()
icon_state = initial(icon_state)
-/mob/living/simple_animal/hostile/mimic/crate/Die()
+/mob/living/simple_animal/hostile/mimic/crate/death()
var/obj/structure/closet/crate/C = new(get_turf(src))
// Put loot in crate
@@ -141,7 +141,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
..(loc)
CopyObject(copy, creator)
-/mob/living/simple_animal/hostile/mimic/copy/Die()
+/mob/living/simple_animal/hostile/mimic/copy/death()
for(var/atom/movable/M in src)
M.loc = get_turf(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
index 3ea447bd..c45a511c 100644
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm
@@ -47,7 +47,7 @@
weapon1 = /obj/item/weapon/gun/energy/laser
-/mob/living/simple_animal/hostile/pirate/Die()
+/mob/living/simple_animal/hostile/pirate/death()
..()
if(corpse)
new corpse (src.loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index f97e0eb8..92af76fe 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -157,7 +157,7 @@
hostile_drone = 0
walk(src,0)
-/mob/living/simple_animal/hostile/retaliate/malf_drone/Die()
+/mob/living/simple_animal/hostile/retaliate/malf_drone/death()
src.visible_message("\blue \icon[src] [src] suddenly breaks apart.")
..()
del(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm
index a5d36ed5..8d5b6964 100644
--- a/code/modules/mob/living/simple_animal/hostile/russian.dm
+++ b/code/modules/mob/living/simple_animal/hostile/russian.dm
@@ -45,7 +45,7 @@
casingtype = /obj/item/ammo_casing/a357
-/mob/living/simple_animal/hostile/russian/Die()
+/mob/living/simple_animal/hostile/russian/death()
..()
if(corpse)
new corpse (src.loc)
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 82ce2d02..2a9b8ad0 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -35,7 +35,7 @@
faction = "syndicate"
status_flags = CANPUSH
-/mob/living/simple_animal/hostile/syndicate/Die()
+/mob/living/simple_animal/hostile/syndicate/death()
..()
if(corpse)
new corpse (src.loc)
@@ -157,7 +157,7 @@
max_n2 = 0
minbodytemp = 0
-/mob/living/simple_animal/hostile/viscerator/Die()
+/mob/living/simple_animal/hostile/viscerator/death()
..()
visible_message("\red [src] is smashed into pieces!")
del src
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index ae6e8633..e6b0458c 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -50,7 +50,7 @@
L.Weaken(3)
L.visible_message("\the [src] knocks down \the [L]!")
-/mob/living/simple_animal/hostile/tree/Die()
+/mob/living/simple_animal/hostile/tree/death()
..()
visible_message("\red [src] is hacked into pieces!")
new /obj/item/stack/sheet/wood(loc)
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index f1ab86db..df63ce83 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -101,7 +101,7 @@
/mob/living/simple_animal/parrot/proc/perch_player)
-/mob/living/simple_animal/parrot/Die()
+/mob/living/simple_animal/parrot/death()
if(held_item)
held_item.loc = src.loc
held_item = null
@@ -496,7 +496,7 @@
var/mob/living/carbon/human/H = parrot_interest
var/datum/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
- H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
+ 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"))
else
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 1d130be9..bed6a20e 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -82,7 +82,7 @@
if(health < 1)
- Die()
+ death()
if(health > maxHealth)
health = maxHealth
@@ -405,13 +405,11 @@
statpanel("Status")
stat(null, "Health: [round((health / maxHealth) * 100)]%")
-/mob/living/simple_animal/proc/Die()
- living_mob_list -= src
- dead_mob_list += src
+/mob/living/simple_animal/death()
icon_state = icon_dead
stat = DEAD
density = 0
- return
+ return ..()
/mob/living/simple_animal/ex_act(severity)
if(!blinded)
diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm
index f3354ce8..c0fda9e7 100644
--- a/code/modules/mob/living/simple_animal/vox.dm
+++ b/code/modules/mob/living/simple_animal/vox.dm
@@ -23,7 +23,7 @@
var/amp = null
var/quills = 3
-/mob/living/simple_animal/vox/armalis/Die()
+/mob/living/simple_animal/vox/armalis/death()
living_mob_list -= src
dead_mob_list += src
diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm
index 519556ab..676c29b2 100644
--- a/code/modules/mob/living/simple_animal/worm.dm
+++ b/code/modules/mob/living/simple_animal/worm.dm
@@ -167,7 +167,7 @@
newHead.Attach(newHeadPrevious)
if(die)
- newHead.Die()
+ newHead.death()
del(src)
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index c9b90f32..66c6f5ff 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -198,12 +198,7 @@ datum/preferences
preview_icon.Blend(new /icon(icobase, "groin_[g]"), ICON_OVERLAY)
preview_icon.Blend(new /icon(icobase, "head_[g]"), ICON_OVERLAY)
- for(var/name in list("l_arm","r_arm","l_leg","r_leg","l_foot","r_foot","l_hand","r_hand"))
- // make sure the organ is added to the list so it's drawn
- if(organ_data[name] == null)
- organ_data[name] = null
-
- for(var/name in organ_data)
+ for(var/name in list("r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","l_arm","l_hand"))
if(organ_data[name] == "amputated") continue
var/icon/temp = new /icon(icobase, "[name]")
@@ -212,6 +207,11 @@ datum/preferences
preview_icon.Blend(temp, ICON_OVERLAY)
+ //Tail
+ if(current_species && (current_species.flags & HAS_TAIL))
+ var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s")
+ preview_icon.Blend(temp, ICON_OVERLAY)
+
// Skin color
if(current_species && (current_species.flags & HAS_SKIN_COLOR))
preview_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 361b9f19..c95d3a0d 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -157,7 +157,7 @@
if(length(message) >= 2)
var/channel_prefix = copytext(message, 1 ,3)
return department_radio_keys[channel_prefix]
-
+
return null
//parses the language code (e.g. :j) from text, such as that supplied to say.
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index e68913fd..810a7f9c 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -160,12 +160,11 @@
O.gender = gender
O.invisibility = 0
-
if(mind) //TODO
mind.transfer_to(O)
if(O.mind.assigned_role == "Cyborg")
O.mind.original = O
- else if(mind&&mind.special_role)
+ else if(mind && mind.special_role)
O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
else
O.key = key
@@ -175,11 +174,12 @@
if(O.mind.assigned_role == "Cyborg")
if(O.mind.role_alt_title == "Android")
O.mmi = new /obj/item/device/mmi/posibrain(O)
- if(O.mind.role_alt_title == "Robot")
- O.mmi = new /obj/item/device/mmi/posibrain(O) //Ravensdale wants a circuit based brain for another robot class, this is a placeholder.
- else
- O.mmi = new /obj/item/device/mmi(O)
- O.mmi.transfer_identity(src)//Does not transfer key/client.
+ else if(O.mind.role_alt_title == "Robot")
+ O.mmi = null //Robots do not have removable brains.
+ else
+ O.mmi = new /obj/item/device/mmi(O)
+
+ if(O.mmi) O.mmi.transfer_identity(src) //Does not transfer key/client.
O.Namepick()
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index c100e747..e9f1563c 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -159,6 +159,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
this.icon_state = pick(iconL)
this.blood_DNA = list()
this.blood_DNA[dna.unique_enzymes] = dna.b_type
+ for (var/ID in virus2)
+ var/datum/disease2/disease/V = virus2[ID]
+ this.virus2[ID] = V.getcopy()
if (species) this.basecolor = species.blood_color
this.update_icon()
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 72b26c93..c51d5167 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -70,9 +70,9 @@
if(prob(probability))
droplimb(1)
else
- take_damage(damage, 0, 1, used_weapon = "EMP")
+ take_damage(damage, 0, 1, 1, used_weapon = "EMP")
-/datum/organ/external/proc/take_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list())
+/datum/organ/external/proc/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
if((brute <= 0) && (burn <= 0))
return 0
@@ -95,7 +95,7 @@
//If limb took enough damage, try to cut or tear it off
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you.
if(config.limbs_can_break && brute_dam >= max_damage * config.organ_health_multiplier)
- if( (sharp && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
+ if( (edge && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
droplimb(1)
return
@@ -159,7 +159,7 @@
if(possible_points.len)
//And pass the pain around
var/datum/organ/external/target = pick(possible_points)
- target.take_damage(brute, burn, sharp, used_weapon, forbidden_limbs + src)
+ target.take_damage(brute, burn, sharp, edge, used_weapon, forbidden_limbs + src)
// sync the organ's damage with its wounds
src.update_damages()
@@ -223,35 +223,7 @@ This function completely restores a damaged organ to perfect condition.
/datum/organ/external/proc/createwound(var/type = CUT, var/damage)
if(damage == 0) return
- // first check whether we can widen an existing wound
- if(wounds.len > 0 && prob(max(50+owner.number_wounds*10,100)))
- if((type == CUT || type == BRUISE) && damage >= 5)
- var/datum/wound/W = pick(wounds)
- if(W.amount == 1 && W.started_healing())
- W.open_wound(damage)
- if(prob(25))
- owner.visible_message("\red The wound on [owner.name]'s [display_name] widens with a nasty ripping voice.",\
- "\red The wound on your [display_name] widens with a nasty ripping voice.",\
- "You hear a nasty ripping noise, as if flesh is being torn apart.")
- return
-
- //Creating wound
- var/datum/wound/W
- var/size = min( max( 1, damage/10 ) , 6)
- //Possible types of wound
- var/list/size_names = list()
- switch(type)
- if(CUT)
- size_names = typesof(/datum/wound/cut/) - /datum/wound/cut/
- if(BRUISE)
- size_names = typesof(/datum/wound/bruise/) - /datum/wound/bruise/
- if(BURN)
- size_names = typesof(/datum/wound/burn/) - /datum/wound/burn/
-
- size = min(size,size_names.len)
- var/wound_type = size_names[size]
- W = new wound_type(damage)
-
+ //moved this before the open_wound check so that having many small wounds for example doesn't somehow protect you from taking internal damage
//Possibly trigger an internal wound, too.
var/local_damage = brute_dam + burn_dam + damage
if(damage > 15 && type != BURN && local_damage > 30 && prob(damage) && !(status & ORGAN_ROBOT))
@@ -259,16 +231,58 @@ This function completely restores a damaged organ to perfect condition.
wounds += I
owner.custom_pain("You feel something rip in your [display_name]!", 1)
- //Check whether we can add the wound to an existing wound
- for(var/datum/wound/other in wounds)
- if(other.desc == W.desc)
- // okay, add it!
- other.damage += W.damage
- other.amount += 1
- W = null // to signify that the wound was added
- break
- if(W)
- wounds += W
+ // first check whether we can widen an existing wound
+ if(wounds.len > 0 && prob(max(50+(number_wounds-1)*10,90)))
+ if((type == CUT || type == BRUISE) && damage >= 5)
+ //we need to make sure that the wound we are going to worsen is compatible with the type of damage...
+ var/list/compatible_wounds = list()
+ for (var/datum/wound/W in wounds)
+ if (W.can_worsen(type, damage))
+ compatible_wounds += W
+
+ if(compatible_wounds.len)
+ var/datum/wound/W = pick(compatible_wounds)
+ W.open_wound(damage)
+ if(prob(25))
+ //maybe have a separate message for BRUISE type damage?
+ owner.visible_message("\red The wound on [owner.name]'s [display_name] widens with a nasty ripping voice.",\
+ "\red The wound on your [display_name] widens with a nasty ripping voice.",\
+ "You hear a nasty ripping noise, as if flesh is being torn apart.")
+ return
+
+ //Creating wound
+ var/wound_type = get_wound_type(type, damage)
+
+ if(wound_type)
+ var/datum/wound/W = new wound_type(damage)
+
+ //Check whether we can add the wound to an existing wound
+ for(var/datum/wound/other in wounds)
+ if(other.can_merge(W))
+ other.merge_wound(W)
+ W = null // to signify that the wound was added
+ break
+ if(W)
+ wounds += W
+
+/datum/organ/external/proc/get_wound_type(var/type = CUT, var/damage)
+ //if you look a the names in the wound's stages list for each wound type you will see the logic behind these values
+ switch(type)
+ if(CUT)
+ if (damage <= 5) return /datum/wound/cut/small
+ if (damage <= 15) return /datum/wound/cut/deep
+ if (damage <= 25) return /datum/wound/cut/flesh
+ if (damage <= 50) return /datum/wound/cut/gaping
+ if (damage <= 60) return /datum/wound/cut/gaping_big
+ return /datum/wound/cut/massive
+ if(BRUISE)
+ return /datum/wound/bruise
+ if(BURN)
+ if (damage <= 5) return /datum/wound/burn/moderate
+ if (damage <= 15) return /datum/wound/burn/large
+ if (damage <= 30) return /datum/wound/burn/severe
+ if (damage <= 40) return /datum/wound/burn/deep
+ return /datum/wound/burn/carbonised
/****************************************************
PROCESSING & UPDATING
@@ -388,15 +402,12 @@ This function completely restores a damaged organ to perfect condition.
if(prob(1 * wound_update_accuracy))
owner.custom_pain("You feel a stabbing pain in your [display_name]!",1)
-
// slow healing
var/heal_amt = 0
- if (W.damage < 15) //this thing's edges are not in day's travel of each other, what healing?
- heal_amt += 0.2
-
- if(W.is_treated() && W.damage < 50) //whoa, not even magical band aid can hold it together
- heal_amt += 0.3
+ // if damage >= 50 AFTER treatment then it's probably too severe to heal within the timeframe of a round.
+ if (W.is_treated() && W.wound_damage() < 50)
+ heal_amt += 0.5
//we only update wounds once in [wound_update_accuracy] ticks so have to emulate realtime
heal_amt = heal_amt * wound_update_accuracy
@@ -800,8 +811,8 @@ This function completely restores a damaged organ to perfect condition.
else
. = new /icon(owner.race_icon, "[icon_name]_[g]")
-/datum/organ/external/head/take_damage(brute, burn, sharp, used_weapon = null, list/forbidden_limbs = list())
- ..(brute, burn, sharp, used_weapon, forbidden_limbs)
+/datum/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
+ ..(brute, burn, sharp, edge, used_weapon, forbidden_limbs)
if (!disfigured)
if (brute_dam > 40)
if (prob(50))
diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm
index 3df9e206..a7892486 100644
--- a/code/modules/organs/wound.dm
+++ b/code/modules/organs/wound.dm
@@ -3,8 +3,6 @@
WOUNDS
****************************************************/
/datum/wound
- // stages such as "cut", "deep cut", etc.
- var/list/stages
// number representing the current stage
var/current_stage = 0
@@ -18,38 +16,42 @@
// amount of damage the current wound type requires(less means we need to apply the next healing stage)
var/min_damage = 0
- // one of CUT, BRUISE, BURN
- var/damage_type = CUT
-
- // whether this wound needs a bandage/salve to heal at all
- var/needs_treatment = 0
-
// is the wound bandaged?
- var/tmp/bandaged = 0
+ var/bandaged = 0
// Similar to bandaged, but works differently
- var/tmp/clamped = 0
+ var/clamped = 0
// is the wound salved?
- var/tmp/salved = 0
+ var/salved = 0
// is the wound disinfected?
- var/tmp/disinfected = 0
- var/tmp/created = 0
-
+ var/disinfected = 0
+ var/created = 0
// number of wounds of this type
- var/tmp/amount = 1
+ var/amount = 1
+ // amount of germs in the wound
+ var/germ_level = 0
+ /* These are defined by the wound type and should not be changed */
+
+ // stages such as "cut", "deep cut", etc.
+ var/list/stages
+ // internal wounds can only be fixed through surgery
+ var/internal = 0
// maximum stage at which bleeding should still happen, counted from the right rather than the left of the list
// 1 means all stages except the last should bleed
var/max_bleeding_stage = 1
+ // one of CUT, BRUISE, BURN
+ var/damage_type = CUT
+ // whether this wound needs a bandage/salve to heal at all
+ // the maximum amount of damage that this wound can have and still autoheal
+ var/autoheal_cutoff = 15
+
- // internal wounds can only be fixed through surgery
- var/internal = 0
- // amount of germs in the wound
- var/germ_level = 0
// helper lists
var/tmp/list/desc_list = list()
var/tmp/list/damage_list = list()
+
New(var/damage)
created = world.time
@@ -62,42 +64,58 @@
src.damage = damage
- // initialize with the first stage
- next_stage()
-
- // this will ensure the size of the wound matches the damage
- src.heal_damage(0)
-
- // make the max_bleeding_stage count from the end of the list rather than the start
- // this is more robust to changes to the list
max_bleeding_stage = src.desc_list.len - max_bleeding_stage
+
+ // initialize with the appropriate stage
+ src.init_stage(damage)
bleed_timer += damage
// returns 1 if there's a next stage, 0 otherwise
- proc/next_stage()
- if(current_stage + 1 > src.desc_list.len)
- return 0
-
- current_stage++
+ proc/init_stage(var/initial_damage)
+ current_stage = stages.len
+
+ while(src.current_stage > 1 && src.damage_list[current_stage-1] <= initial_damage / src.amount)
+ src.current_stage--
src.min_damage = damage_list[current_stage]
src.desc = desc_list[current_stage]
- return 1
-
- // returns 1 if the wound has started healing
- proc/started_healing()
- return (current_stage > 1)
+ // the amount of damage per wound
+ proc/wound_damage()
+ return src.damage / src.amount
+
// checks whether the wound has been appropriately treated
- // always returns 1 for wounds that don't need to be treated
+ // always returns 1 for wounds that are too minor to need treatment
proc/is_treated()
- if(!needs_treatment) return 1
+ if(src.wound_damage() <= autoheal_cutoff)
+ return 1
if(damage_type == BRUISE || damage_type == CUT)
return bandaged
else if(damage_type == BURN)
return salved
+
+
+ // Checks whether other other can be merged into src.
+ proc/can_merge(var/datum/wound/other)
+ if (other.type != src.type) return 0
+ if (other.current_stage != src.current_stage) return 0
+ if (other.damage_type != src.damage_type) return 0
+ if (!(other.is_treated()) != !(src.is_treated())) return 0
+ if (!(other.bandaged) != !(src.bandaged)) return 0
+ if (!(other.clamped) != !(src.clamped)) return 0
+ if (!(other.salved) != !(src.salved)) return 0
+ if (!(other.disinfected) != !(src.disinfected)) return 0
+ //if (other.germ_level != src.germ_level) return 0
+ return 1
+
+ proc/merge_wound(var/datum/wound/other)
+ src.damage += other.damage
+ src.amount += other.amount
+ src.bleed_timer += other.bleed_timer
+ src.germ_level = max(src.germ_level, other.germ_level)
+ src.created = max(src.created, other.created) //take the newer created time
// checks if wound is considered open for external infections
// untreated cuts (and bleeding bruises) and burns are possibly infectable, chance higher if wound is bigger
@@ -128,7 +146,7 @@
amount -= healed_damage
src.damage -= healed_damage
- while(src.damage / src.amount < damage_list[current_stage] && current_stage < src.desc_list.len)
+ while(src.wound_damage() < damage_list[current_stage] && current_stage < src.desc_list.len)
current_stage++
desc = desc_list[current_stage]
src.min_damage = damage_list[current_stage]
@@ -141,118 +159,98 @@
src.damage += damage
bleed_timer += damage
- while(src.current_stage > 1 && src.damage_list[current_stage-1] <= src.damage)
+ while(src.current_stage > 1 && src.damage_list[current_stage-1] <= src.damage / src.amount)
src.current_stage--
src.desc = desc_list[current_stage]
src.min_damage = damage_list[current_stage]
+ // returns whether this wound can absorb the given amount of damage.
+ // this will prevent large amounts of damage being trapped in less severe wound types
+ proc/can_worsen(damage_type, damage)
+ if (src.damage_type != damage_type)
+ return 0 //incompatible damage types
+
+ if (src.amount > 1)
+ return 0
+
+ //with 1.5*, a shallow cut will be able to carry at most 30 damage,
+ //37.5 for a deep cut
+ //52.5 for a flesh wound, etc.
+ var/max_wound_damage = 1.5*src.damage_list[1]
+ if (src.damage + damage > max_wound_damage)
+ return 0
+
+ return 1
+
+
proc/bleeding()
// internal wounds don't bleed in the sense of this function
- return ((damage > 30 || bleed_timer > 0) && !(bandaged||clamped) && (damage_type == BRUISE && damage >= 20 || damage_type == CUT && damage >= 5) && current_stage <= max_bleeding_stage && !src.internal)
+ return ((wound_damage() > 30 || bleed_timer > 0) && !(bandaged||clamped) && (damage_type == BRUISE && wound_damage() >= 20 || damage_type == CUT && wound_damage() >= 5) && current_stage <= max_bleeding_stage && !src.internal)
/** CUTS **/
/datum/wound/cut/small
// link wound descriptions to amounts of damage
max_bleeding_stage = 2
stages = list("ugly ripped cut" = 20, "ripped cut" = 10, "cut" = 5, "healing cut" = 2, "small scab" = 0)
+ damage_type = CUT
/datum/wound/cut/deep
max_bleeding_stage = 3
stages = list("ugly deep ripped cut" = 25, "deep ripped cut" = 20, "deep cut" = 15, "clotted cut" = 8, "scab" = 2, "fresh skin" = 0)
+ damage_type = CUT
/datum/wound/cut/flesh
max_bleeding_stage = 3
stages = list("ugly ripped flesh wound" = 35, "ugly flesh wound" = 30, "flesh wound" = 25, "blood soaked clot" = 15, "large scab" = 5, "fresh skin" = 0)
+ damage_type = CUT
/datum/wound/cut/gaping
max_bleeding_stage = 2
- stages = list("gaping wound" = 50, "large blood soaked clot" = 25, "large clot" = 15, "small angry scar" = 5, \
- "small straight scar" = 0)
+ stages = list("gaping wound" = 50, "large blood soaked clot" = 25, "large clot" = 15, "small angry scar" = 5, "small straight scar" = 0)
+ damage_type = CUT
/datum/wound/cut/gaping_big
max_bleeding_stage = 2
stages = list("big gaping wound" = 60, "healing gaping wound" = 40, "large angry scar" = 10, "large straight scar" = 0)
-
- needs_treatment = 1 // this only heals when bandaged
+ damage_type = CUT
datum/wound/cut/massive
max_bleeding_stage = 2
stages = list("massive wound" = 70, "massive healing wound" = 50, "massive angry scar" = 10, "massive jagged scar" = 0)
-
- needs_treatment = 1 // this only heals when bandaged
+ damage_type = CUT
/** BRUISES **/
/datum/wound/bruise
stages = list("monumental bruise" = 80, "huge bruise" = 50, "large bruise" = 30,\
"moderate bruise" = 20, "small bruise" = 10, "tiny bruise" = 5)
-
- needs_treatment = 1 // this only heals when bandaged
+ max_bleeding_stage = 3
+ autoheal_cutoff = 30
damage_type = BRUISE
-/datum/wound/bruise/monumental
-
-// implement sub-paths by starting at a later stage
-
-/datum/wound/bruise/tiny
- current_stage = 5
- needs_treatment = 0
-
-/datum/wound/bruise/small
- current_stage = 4
- needs_treatment = 0
-
-/datum/wound/bruise/moderate
- current_stage = 3
- needs_treatment = 0
-
-/datum/wound/bruise/large
- current_stage = 2
-
-/datum/wound/bruise/huge
- current_stage = 1
-
/** BURNS **/
/datum/wound/burn/moderate
stages = list("ripped burn" = 10, "moderate burn" = 5, "moderate salved burn" = 2, "fresh skin" = 0)
-
- needs_treatment = 1 // this only heals when bandaged
-
damage_type = BURN
/datum/wound/burn/large
stages = list("ripped large burn" = 20, "large burn" = 15, "large salved burn" = 5, "fresh skin" = 0)
-
- needs_treatment = 1 // this only heals when bandaged
-
damage_type = BURN
/datum/wound/burn/severe
stages = list("ripped severe burn" = 35, "severe burn" = 30, "severe salved burn" = 10, "burn scar" = 0)
-
- needs_treatment = 1 // this only heals when bandaged
-
damage_type = BURN
/datum/wound/burn/deep
stages = list("ripped deep burn" = 45, "deep burn" = 40, "deep salved burn" = 15, "large burn scar" = 0)
-
- needs_treatment = 1 // this only heals when bandaged
-
damage_type = BURN
-
/datum/wound/burn/carbonised
stages = list("carbonised area" = 50, "treated carbonised area" = 20, "massive burn scar" = 0)
-
- needs_treatment = 1 // this only heals when bandaged
-
damage_type = BURN
/datum/wound/internal_bleeding
internal = 1
-
stages = list("severed vein" = 30, "cut vein" = 20, "damaged vein" = 10, "bruised vein" = 5)
- max_bleeding_stage = 0
-
- needs_treatment = 1
+ autoheal_cutoff = 5
+ max_bleeding_stage = 0 //all stages bleed. It's called internal bleeding after all.
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index da9a3e15..0143b595 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -61,7 +61,10 @@
usr << browse("", "window=[name]") //Closes the dialog
P = src[page]
P.attackby(W, user)
+
+
update_icon()
+ attack_self(usr) //Update the browsed page.
add_fingerprint(usr)
return
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 8d8fd5f3..357f3587 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -618,7 +618,7 @@
// called when on fire
-/obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+/obj/machinery/light/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C
broken()
@@ -750,5 +750,6 @@
src.visible_message("\red [name] shatters.","\red You hear a small glass object shatter.")
status = LIGHT_BROKEN
force = 5
+ sharp = 1
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
update()
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 0aa2d463..ce22fb3c 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -201,7 +201,7 @@
in_chamber.on_hit(M)
if (in_chamber.damage_type != HALLOSS)
- user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]")
+ user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1)
user.death()
else
user << "Ow..."
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index 1a2889e0..6aa16bc0 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -5,6 +5,7 @@
name = "alloy spike"
desc = "It's about a foot of weird silver metal with a wicked point."
sharp = 1
+ edge = 0
throwforce = 5
w_class = 2
icon = 'icons/obj/weapons.dmi'
diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm
index 3d80063a..912b5f2f 100644
--- a/code/modules/projectiles/guns/projectile/bow.dm
+++ b/code/modules/projectiles/guns/projectile/bow.dm
@@ -9,6 +9,7 @@
throwforce = 8
w_class = 3.0
sharp = 1
+ edge = 0
/obj/item/weapon/arrow/proc/removed() //Helper for metal rods falling apart.
return
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index f0d63824..e3fad9d7 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -191,7 +191,7 @@
playsound(user, fire_sound, 50, 1)
user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
if(!P.nodamage)
- user.apply_damage(300, BRUTE, affecting) // You are dead, dead, dead.
+ user.apply_damage(300, BRUTE, affecting, sharp=1) // You are dead, dead, dead.
return
..()
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index c8a591ca..d1d783da 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -6,6 +6,7 @@
nodamage = 0
flag = "bullet"
embed = 1
+ sharp = 1
on_hit(var/atom/target, var/blocked = 0)
if (..(target, blocked))
@@ -17,6 +18,7 @@
stun = 5
weaken = 5
embed = 0
+ sharp = 0
/obj/item/projectile/bullet/weakbullet/beanbag //because beanbags are not bullets
name = "beanbag"
@@ -47,6 +49,8 @@
/obj/item/projectile/bullet/burstbullet//I think this one needs something for the on hit
name = "exploding bullet"
damage = 20
+ embed = 0
+ edge = 1
/obj/item/projectile/bullet/stunshot
@@ -56,6 +60,7 @@
weaken = 10
stutter = 10
embed = 0
+ sharp = 0
/obj/item/projectile/bullet/a762
damage = 25
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index ad5e8c7c..82c9e1b8 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -17,7 +17,8 @@
icon_state= "bolter"
damage = 50
flag = "bullet"
-
+ sharp = 1
+ edge = 1
on_hit(var/atom/target, var/blocked = 0)
explosion(target, -1, 0, 2)
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index b472e46d..cabb0b7c 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -293,6 +293,7 @@
var/max_pill_count = 20
/obj/machinery/chem_master/New()
+ ..()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index da146d73..502b1992 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -118,10 +118,15 @@ datum
else //injected
M.contract_disease(D, 1, 0)
if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
- if(method == TOUCH)
- infect_virus2(M,self.data["virus2"])
- else
- infect_virus2(M,self.data["virus2"],1) //injected, force infection!
+ var/list/vlist = self.data["virus2"]
+ if (vlist.len)
+ for (var/ID in vlist)
+ var/datum/disease2/disease/V = vlist[ID]
+
+ if(method == TOUCH)
+ infect_virus2(M,V.getcopy())
+ else
+ infect_virus2(M,V.getcopy(),1) //injected, force infection!
if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
var/mob/living/carbon/C = M
C.antibodies |= self.data["antibodies"]
@@ -146,6 +151,9 @@ datum
blood_prop.viruses += newVirus
newVirus.holder = blood_prop
+ if(self.data["virus2"])
+ blood_prop.virus2 = virus_copylist(self.data["virus2"])
+
else if(istype(self.data["donor"], /mob/living/carbon/monkey))
var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T
@@ -778,6 +786,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if (volume > overdose)
M.hallucination = max(M.hallucination, 2)
+ ..()
+ return
tramadol
name = "Tramadol"
@@ -790,6 +800,8 @@ datum
on_mob_life(var/mob/living/M as mob)
if (volume > overdose)
M.hallucination = max(M.hallucination, 2)
+ ..()
+ return
oxycodone
name = "Oxycodone"
@@ -803,6 +815,8 @@ datum
if (volume > overdose)
M.druggy = max(M.druggy, 10)
M.hallucination = max(M.hallucination, 3)
+ ..()
+ return
virus_food
@@ -1574,14 +1588,14 @@ datum
var/turf/the_turf = get_turf(O)
var/datum/gas_mixture/napalm = new
var/datum/gas/volatile_fuel/fuel = new
- fuel.moles = 5
+ fuel.moles = volume
napalm.trace_gases += fuel
the_turf.assume_air(napalm)
reaction_turf(var/turf/T, var/volume)
src = null
var/datum/gas_mixture/napalm = new
var/datum/gas/volatile_fuel/fuel = new
- fuel.moles = 5
+ fuel.moles = volume
napalm.trace_gases += fuel
T.assume_air(napalm)
return
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index 004298dd..0def51ea 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -77,7 +77,7 @@
armor_duration /= 10
//Apply the damage!
- target.apply_damage(force, BRUTE, affecting, armor_block)
+ target.apply_damage(force, BRUTE, affecting, armor_block, sharp=0)
// You are going to knock someone out for longer if they are not wearing a helmet.
if(affecting == "head" && istype(target, /mob/living/carbon/))
@@ -125,6 +125,8 @@
throw_range = 5
item_state = "beer"
attack_verb = list("stabbed", "slashed", "attacked")
+ sharp = 1
+ edge = 0
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
/obj/item/weapon/broken_bottle/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 47a038ad..2fb1e3eb 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -16,6 +16,7 @@
possible_transfer_amounts = null //list(5,10,15)
volume = 15
w_class = 1
+ sharp = 1
var/mode = SYRINGE_DRAW
on_reagent_change()
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 60c34f61..830ea767 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -166,7 +166,7 @@
if(src)
del(src)
-/obj/structure/reagent_dispensers/fueltank/temperature_expose(datum/gas_mixture/air, temperature, volume)
+/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+500)
explode()
return ..()
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 1f8264be..5f72368e 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -234,20 +234,8 @@
flush()
flushing = 1
flick("intake-closing", src)
- var/deliveryCheck = 0
var/obj/structure/disposalholder/H = new() // virtual holder object which actually
// travels through the pipes.
- for(var/obj/structure/bigDelivery/O in src)
- deliveryCheck = 1
- if(O.sortTag == 0)
- O.sortTag = 1
- for(var/obj/item/smallDelivery/O in src)
- deliveryCheck = 1
- if (O.sortTag == 0)
- O.sortTag = 1
- if(deliveryCheck == 0)
- H.destinationTag = 1
-
air_contents = new() // new empty gas resv.
sleep(10)
diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm
index 67d56c6e..4d5ee1a6 100644
--- a/code/modules/research/xenoarchaeology/geosample.dm
+++ b/code/modules/research/xenoarchaeology/geosample.dm
@@ -20,6 +20,7 @@
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "sliver1" //0-4
w_class = 1
+ sharp = 1
//item_state = "electronic"
var/source_rock = "/turf/simulated/mineral/"
var/datum/geosample/geological_data
diff --git a/code/modules/surgery/appendix.dm b/code/modules/surgery/appendix.dm
index ede75704..91332eab 100644
--- a/code/modules/surgery/appendix.dm
+++ b/code/modules/surgery/appendix.dm
@@ -8,6 +8,8 @@
can_infect = 1
blood_level = 1
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (!hasorgans(target))
+ return 0
if (target_zone != "groin")
return 0
var/datum/organ/external/groin = target.get_organ("groin")
diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm
index d0d30cfd..0bc14075 100644
--- a/code/modules/surgery/bones.dm
+++ b/code/modules/surgery/bones.dm
@@ -15,6 +15,8 @@
max_duration = 60
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (!hasorgans(target))
+ return 0
var/datum/organ/external/affected = target.get_organ(target_zone)
return affected.open == 2 && affected.stage == 0
@@ -47,6 +49,8 @@
max_duration = 70
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (!hasorgans(target))
+ return 0
var/datum/organ/external/affected = target.get_organ(target_zone)
return affected.name != "head" && affected.open == 2 && affected.stage == 1
@@ -84,6 +88,8 @@
max_duration = 70
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (!hasorgans(target))
+ return 0
var/datum/organ/external/affected = target.get_organ(target_zone)
return affected.name == "head" && affected.open == 2 && affected.stage == 1
@@ -118,6 +124,8 @@
max_duration = 60
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (!hasorgans(target))
+ return 0
var/datum/organ/external/affected = target.get_organ(target_zone)
return affected.open == 2 && affected.stage == 2
diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm
index 767cef71..b89c4827 100644
--- a/code/modules/surgery/braincore.dm
+++ b/code/modules/surgery/braincore.dm
@@ -62,7 +62,7 @@
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, cutting a vein in [target]'s brain with \the [tool]!", \
"\red Your hand slips, cutting a vein in [target]'s brain with \the [tool]!")
- target.apply_damage(50, BRUTE, "head", 1)
+ target.apply_damage(50, BRUTE, "head", 1, sharp=1)
/datum/surgery_step/brain/saw_spine
allowed_tools = list(
@@ -114,7 +114,7 @@
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, cutting a vein in [target]'s brain with \the [tool]!", \
"\red Your hand slips, cutting a vein in [target]'s brain with \the [tool]!")
- target.apply_damage(30, BRUTE, "head", 1)
+ target.apply_damage(30, BRUTE, "head", 1, sharp=1)
if (ishuman(user))
user:bloody_body(target)
user:bloody_hands(target, 0)
@@ -151,7 +151,7 @@
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, jabbing \the [tool] in [target]'s brain!", \
"\red Your hand slips, jabbing \the [tool] in [target]'s brain!")
- target.apply_damage(30, BRUTE, "head", 1)
+ target.apply_damage(30, BRUTE, "head", 1, sharp=1)
/datum/surgery_step/brain/hematoma
allowed_tools = list(
@@ -181,7 +181,7 @@
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, bruising [target]'s brain with \the [tool]!", \
"\red Your hand slips, bruising [target]'s brain with \the [tool]!")
- target.apply_damage(20, BRUTE, "head", 1)
+ target.apply_damage(20, BRUTE, "head", 1, sharp=1)
//////////////////////////////////////////////////////////////////
// SLIME CORE EXTRACTION //
diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm
index b65aaf96..9977271c 100644
--- a/code/modules/surgery/eye.dm
+++ b/code/modules/surgery/eye.dm
@@ -104,7 +104,7 @@
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, stabbing \the [tool] into [target]'s eye!", \
"\red Your hand slips, stabbing \the [tool] into [target]'s eye!")
- target.apply_damage(10, BRUTE, affected)
+ target.apply_damage(10, BRUTE, affected, sharp=1)
eyes.take_damage(5, 0)
/datum/surgery_step/eye/cauterize
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index b3569b08..7c04800f 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -98,7 +98,7 @@
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \
"\red Your hand slips, tearing skin on [target]'s face with \the [tool]!")
- target.apply_damage(10, BRUTE, affected)
+ target.apply_damage(10, BRUTE, affected, sharp=1, sharp=1)
/datum/surgery_step/face/cauterize
allowed_tools = list(
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index 1ee3408b..5109b72e 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -35,8 +35,9 @@
max_duration = 110
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open == 0 && target_zone != "mouth"
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open == 0 && target_zone != "mouth"
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -74,8 +75,9 @@
max_duration = 120
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open == 0 && target_zone != "mouth"
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open == 0 && target_zone != "mouth"
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -114,10 +116,9 @@
max_duration = 110
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- if(isslime(target))
- return 0
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open == 0 && target_zone != "mouth"
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open == 0 && target_zone != "mouth"
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -153,8 +154,9 @@
max_duration = 60
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open && (affected.status & ORGAN_BLEEDING)
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open && (affected.status & ORGAN_BLEEDING)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -187,8 +189,9 @@
max_duration = 40
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open == 1 && !(affected.status & ORGAN_BLEEDING)
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open == 1 && !(affected.status & ORGAN_BLEEDING)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -228,7 +231,7 @@
msg = "\red [user]'s hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]"
self_msg = "\red Your hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!"
user.visible_message(msg, self_msg)
- target.apply_damage(12, BRUTE, affected)
+ target.apply_damage(12, BRUTE, affected, sharp=1)
/datum/surgery_step/generic/cauterize
allowed_tools = list(
@@ -242,8 +245,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open && target_zone != "mouth"
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open && target_zone != "mouth"
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
diff --git a/code/modules/surgery/headreattach.dm b/code/modules/surgery/headreattach.dm
index eb5c6964..17db2c30 100644
--- a/code/modules/surgery/headreattach.dm
+++ b/code/modules/surgery/headreattach.dm
@@ -28,8 +28,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && !(affected.status & ORGAN_CUT_AWAY)
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return !(affected.status & ORGAN_CUT_AWAY)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts peeling back tattered flesh where [target]'s head used to be with \the [tool].", \
@@ -61,8 +62,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.status & ORGAN_CUT_AWAY && affected.open < 3 && !(affected.status & ORGAN_ATTACHABLE)
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.status & ORGAN_CUT_AWAY && affected.open < 3 && !(affected.status & ORGAN_ATTACHABLE)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -94,8 +96,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open == 3
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open == 3
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] is stapling and suturing flesh into place in [target]'s esophagal and vocal region with \the [tool].", \
@@ -128,8 +131,9 @@
max_duration = 70
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open == 4
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open == 4
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts adjusting area around [target]'s neck with \the [tool].", \
@@ -162,8 +166,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/head = target.get_organ(target_zone)
- return ..() && head.status & ORGAN_ATTACHABLE
+ if(..())
+ var/datum/organ/external/head = target.get_organ(target_zone)
+ return head.status & ORGAN_ATTACHABLE
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts attaching [tool] to [target]'s reshaped neck.", \
@@ -189,4 +194,4 @@
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s neck!", \
"\red Your hand slips, damaging connectors on [target]'s neck!")
- target.apply_damage(10, BRUTE, affected)
+ target.apply_damage(10, BRUTE, affected, sharp=1)
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index a57d1d89..c3f4f329 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -7,6 +7,8 @@
/datum/surgery_step/cavity
priority = 1
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(!hasorgans(target))
+ return 0
var/datum/organ/external/affected = target.get_organ(target_zone)
return affected.open == 2 && !(affected.status & ORGAN_BLEEDING) && (target_zone != "chest" || target.op_stage.ribcage == 2)
@@ -41,8 +43,9 @@
max_duration = 80
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && !affected.cavity && !affected.hidden
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return !affected.cavity && !affected.hidden
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -76,8 +79,9 @@
max_duration = 80
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.cavity
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.cavity
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -106,11 +110,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- if(isslime(target))
- return 0
- var/datum/organ/external/affected = target.get_organ(target_zone)
- var/can_fit = !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected)
- return ..() && can_fit
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return !affected.hidden && affected.cavity && tool.w_class <= get_max_wclass(affected)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -185,7 +187,7 @@
affected.implants -= obj
target.hud_updateflag |= 1 << IMPLOYAL_HUD
-
+
//Handle possessive brain borers.
if(istype(obj,/mob/living/simple_animal/borer))
var/mob/living/simple_animal/borer/worm = obj
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index 55fc59dd..bd1002b0 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -17,6 +17,9 @@
max_duration = 90
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(!hasorgans(target))
+ return 0
+
var/datum/organ/external/affected = target.get_organ(target_zone)
var/internal_bleeding = 0
diff --git a/code/modules/surgery/ribcage.dm b/code/modules/surgery/ribcage.dm
index 7515fa05..7bbad9b5 100644
--- a/code/modules/surgery/ribcage.dm
+++ b/code/modules/surgery/ribcage.dm
@@ -19,7 +19,7 @@
max_duration = 70
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- if (!istype(target))
+ if (!hasorgans(target))
return
var/datum/organ/external/affected = target.get_organ(target_zone)
return ..() && target.op_stage.ribcage == 0 && affected.open >= 2
@@ -197,6 +197,9 @@
max_duration = 90
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(!hasorgans(target))
+ return 0
+
var/is_chest_organ_damaged = 0
var/datum/organ/external/chest/chest = target.get_organ("chest")
for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0)
@@ -278,6 +281,9 @@
max_duration = 90
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(!hasorgans(target))
+ return 0
+
var/is_chest_organ_damaged = 0
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
var/datum/organ/external/chest/chest = target.get_organ("chest")
diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm
index 3be16401..354b4483 100644
--- a/code/modules/surgery/robolimbs.dm
+++ b/code/modules/surgery/robolimbs.dm
@@ -30,8 +30,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && !(affected.status & ORGAN_CUT_AWAY)
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return !(affected.status & ORGAN_CUT_AWAY)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -64,8 +65,9 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.status & ORGAN_CUT_AWAY && affected.open < 3 && !(affected.status & ORGAN_ATTACHABLE)
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.status & ORGAN_CUT_AWAY && affected.open < 3 && !(affected.status & ORGAN_ATTACHABLE)
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -85,7 +87,7 @@
affected = affected.parent
user.visible_message("\red [user]'s hand slips, tearing flesh on [target]'s [affected.display_name]!", \
"\red Your hand slips, tearing flesh on [target]'s [affected.display_name]!")
- target.apply_damage(10, BRUTE, affected)
+ target.apply_damage(10, BRUTE, affected, sharp=1)
/datum/surgery_step/limb/prepare
@@ -100,8 +102,9 @@
max_duration = 70
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.open == 3
+ if(..())
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.open == 3
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -134,12 +137,13 @@
max_duration = 100
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/robot_parts/p = tool
- if (p.part)
- if (!(target_zone in p.part))
- return 0
- var/datum/organ/external/affected = target.get_organ(target_zone)
- return ..() && affected.status & ORGAN_ATTACHABLE
+ if(..())
+ var/obj/item/robot_parts/p = tool
+ if (p.part)
+ if (!(target_zone in p.part))
+ return 0
+ var/datum/organ/external/affected = target.get_organ(target_zone)
+ return affected.status & ORGAN_ATTACHABLE
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -166,4 +170,4 @@
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s [affected.display_name]!", \
"\red Your hand slips, damaging connectors on [target]'s [affected.display_name]!")
- target.apply_damage(10, BRUTE, affected)
+ target.apply_damage(10, BRUTE, affected, sharp=1)
diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm
index 93acbd6e..f9cb07b7 100644
--- a/code/modules/virus2/helpers.dm
+++ b/code/modules/virus2/helpers.dm
@@ -68,7 +68,7 @@ proc/airborne_can_reach(turf/source, turf/target)
if ("[disease.uniqueID]" in M.virus2)
return
// if one of the antibodies in the mob's body matches one of the disease's antigens, don't infect
- if(M.antibodies & disease.antigen != 0)
+ if((M.antibodies & disease.antigen) != 0)
return
if(M.reagents.has_reagent("spaceacillin"))
return
diff --git a/code/setup.dm b/code/setup.dm
index b585db7a..70a91b6d 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -552,15 +552,6 @@ var/list/liftable_structures = list(\
//some arbitrary defines to be used by self-pruning global lists. (see master_controller)
#define PROCESS_KILL 26 //Used to trigger removal from a processing list
-// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to
-// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages
-// tagged for the Cargo Bay.
-var/list/TAGGERLOCATIONS = list("Disposals",
- "Cargo Bay", "QM Office", "Engineering", "CE Office",
- "Atmospherics", "Security", "HoS Office", "Medbay",
- "CMO Office", "Chemistry", "Research", "RD Office",
- "Robotics", "HoP Office", "Library", "Chapel", "Theatre",
- "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics","Drone Fabrication")
#define HOSTILE_STANCE_IDLE 1
#define HOSTILE_STANCE_ALERT 2
diff --git a/code/world.dm b/code/world.dm
index 66c66ea6..95b6cb5c 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -108,7 +108,6 @@ var/world_topic_spam_protect_time = world.timeofday
n++
s["players"] = n
- if(revdata) s["revision"] = revdata.revision
s["admins"] = admins
return list2params(s)
diff --git a/html/AddToChangelog.exe b/html/AddToChangelog.exe
index a4fe303f..3625bd27 100644
Binary files a/html/AddToChangelog.exe and b/html/AddToChangelog.exe differ
diff --git a/icons/mob/human_races/robotic.dmi b/icons/mob/human_races/robotic.dmi
index cf7767f4..4bd119b6 100644
Binary files a/icons/mob/human_races/robotic.dmi and b/icons/mob/human_races/robotic.dmi differ
diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl
index 3a2dff64..088f1cec 100644
--- a/nano/templates/pda.tmpl
+++ b/nano/templates/pda.tmpl
@@ -380,10 +380,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{:~string('{1}%', aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , aircontents.carbon_dioxide)}}
- Plasma:
+ Phoron:
- {{:~string('{1}%', aircontents.plasma > 0 ? 'bad' : 'good' , aircontents.plasma)}}
+ {{:~string('{1}%', aircontents.phoron > 0 ? 'bad' : 'good' , aircontents.phoron)}}
{{if aircontents.other > 0}}
diff --git a/tools/AddToChangelog/AddToChangelog/Form1.cs b/tools/AddToChangelog/AddToChangelog/Form1.cs
index acaa5ffe..567c1fb3 100644
--- a/tools/AddToChangelog/AddToChangelog/Form1.cs
+++ b/tools/AddToChangelog/AddToChangelog/Form1.cs
@@ -190,7 +190,7 @@ namespace AddToChangelog
string[] changelogFile = null;
- changelogFile = editBox.Text.Split('\n');
+ changelogFile = Regex.Split(editBox.Text, "\r\n");
if (changelogFile != null)
{
@@ -218,7 +218,7 @@ namespace AddToChangelog
}
else
{
- editBox.Text = String.Join("\n", changelogFile);
+ editBox.Text = String.Join("\r\n", changelogFile);
ScrollToMarker();
}
diff --git a/tools/mapmerge/clean_map_git.sh b/tools/mapmerge/clean_map_git.sh
index 6ff986e0..0a5f4cc7 100644
--- a/tools/mapmerge/clean_map_git.sh
+++ b/tools/mapmerge/clean_map_git.sh
@@ -1,9 +1,7 @@
#!/bin/sh
-MAPFILE='tgstation.2.1.3.dmm'
+MAPFILE='tgstation2.dmm'
-git show HEAD:_maps/map_files/$MAPFILE > tmp.dmm
-java -jar MapPatcher.jar -clean tmp.dmm '../../_maps/map_files/'$MAPFILE '../../_maps/map_files/'$MAPFILE
-dos2unix -U '../../_maps/map_files/'$MAPFILE
+git show HEAD:maps/$MAPFILE > tmp.dmm
+java -jar MapPatcher.jar -clean tmp.dmm '../../maps/'$MAPFILE '../../maps/'$MAPFILE
rm tmp.dmm
-