diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/emergency_shuttle_controller.dm
index 83a9d379434..2e966288fac 100644
--- a/code/controllers/emergency_shuttle_controller.dm
+++ b/code/controllers/emergency_shuttle_controller.dm
@@ -18,7 +18,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
var/deny_shuttle = 0 //allows admins to prevent the shuttle from being called
var/departed = 0 //if the shuttle has left the station at least once
-
+
var/datum/announcement/priority/emergency_shuttle_docked = new(0, new_sound = sound('sound/AI/shuttledock.ogg'))
var/datum/announcement/priority/emergency_shuttle_called = new(0, new_sound = sound('sound/AI/shuttlecalled.ogg'))
var/datum/announcement/priority/emergency_shuttle_recalled = new(0, new_sound = sound('sound/AI/shuttlerecalled.ogg'))
@@ -34,7 +34,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
if(is_stranded())
priority_announcement.Announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.")
wait_for_launch = 0
- return
+ return
//launch the pods!
for (var/datum/shuttle/ferry/escape_pod/pod in escape_pods)
if (!pod.arming_controller || pod.arming_controller.armed)
@@ -57,10 +57,9 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
priority_announcement.Announce("The scheduled Crew Transfer Shuttle has docked with the station. It will depart in approximately [round(emergency_shuttle.estimate_launch_time()/60,1)] minutes.")
//arm the escape pods
- if (evac)
- for (var/datum/shuttle/ferry/escape_pod/pod in escape_pods)
- if (pod.arming_controller)
- pod.arming_controller.arm()
+ for (var/datum/shuttle/ferry/escape_pod/pod in escape_pods)
+ if (pod.arming_controller)
+ pod.arming_controller.arm()
//begins the launch countdown and sets the amount of time left until launch
/datum/emergency_shuttle_controller/proc/set_launch_countdown(var/seconds)
@@ -186,7 +185,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
/datum/emergency_shuttle_controller/proc/has_eta()
return (wait_for_launch || shuttle.moving_status != SHUTTLE_IDLE && shuttle.moving_status != SHUTTLE_STRANDED)
-
+
/datum/emergency_shuttle_controller/proc/is_stranded()
return (shuttle.moving_status == SHUTTLE_STRANDED)
@@ -224,10 +223,10 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
var/timeleft = emergency_shuttle.estimate_launch_time()
return "ETD-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]"
-
+
if (is_stranded())
return "ETA-ERR"
-
+
return ""
/*
Some slapped-together star effects for maximum spess immershuns. Basically consists of a
diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm
index 9eb45f5d8d6..ac24812f285 100644
--- a/code/controllers/shuttle_controller.dm
+++ b/code/controllers/shuttle_controller.dm
@@ -46,7 +46,7 @@ var/global/datum/shuttle_controller/shuttle_controller
shuttle.dock_target_station = "escape_pod_1_berth"
shuttle.dock_target_offsite = "escape_pod_1_recovery"
shuttle.transit_direction = NORTH
- shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
+ shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN
process_shuttles += shuttle
shuttles["Escape Pod 1"] = shuttle
@@ -60,7 +60,7 @@ var/global/datum/shuttle_controller/shuttle_controller
shuttle.dock_target_station = "escape_pod_2_berth"
shuttle.dock_target_offsite = "escape_pod_2_recovery"
shuttle.transit_direction = NORTH
- shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
+ shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN
process_shuttles += shuttle
shuttles["Escape Pod 2"] = shuttle
@@ -74,7 +74,7 @@ var/global/datum/shuttle_controller/shuttle_controller
shuttle.dock_target_station = "escape_pod_3_berth"
shuttle.dock_target_offsite = "escape_pod_3_recovery"
shuttle.transit_direction = EAST
- shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
+ shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN
process_shuttles += shuttle
shuttles["Escape Pod 3"] = shuttle
@@ -90,7 +90,7 @@ var/global/datum/shuttle_controller/shuttle_controller
shuttle.dock_target_station = "escape_pod_5_berth"
shuttle.dock_target_offsite = "escape_pod_5_recovery"
shuttle.transit_direction = EAST //should this be WEST? I have no idea.
- shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
+ shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN
process_shuttles += shuttle
shuttles["Escape Pod 5"] = shuttle
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 3c9a0a2d1a8..0dcc68dd51b 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -208,7 +208,7 @@
icon = 'icons/obj/doors/Dooruranium.dmi'
mineral = "uranium"
var/last_event = 0
-
+
/obj/machinery/door/airlock/process()
// Deliberate no call to parent.
if(main_power_lost_until > 0 && world.time >= main_power_lost_until)
@@ -300,6 +300,11 @@
hackProof = 1
aiControlDisabled = 1
+/obj/machinery/door/airlock/shuttle
+ name = "shuttle airlock"
+ icon = 'icons/obj/doors/doorshuttle.dmi'
+ assembly_type = /obj/structure/door_assembly/door_assembly_shuttle
+
/obj/machinery/door/airlock/alien
name = "Alien Airlock"
desc = "A mysterious alien airlock with a complicated opening mechanism."
@@ -319,7 +324,7 @@
else
user << "You do not know how to operate this airlock's mechanism."
return
-
+
/*
@@ -388,7 +393,7 @@ About the new airlock wires panel:
if(mainPowerCablesCut() && backupPowerCablesCut())
return 1
return 0
-
+
/obj/machinery/door/airlock/proc/mainPowerCablesCut()
return src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1) || src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)
@@ -426,7 +431,7 @@ About the new airlock wires panel:
// Restore backup power only if main power is offline, otherwise permanently disable
backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0
update_icon()
-
+
/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0)
var/message = ""
if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY) && arePowerSystemsOn())
@@ -475,7 +480,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/update_icon()
if(overlays) overlays.Cut()
overlays = list()
- if(emergency && arePowerSystemsOn())
+ if(emergency && arePowerSystemsOn())
overlays += image('icons/obj/doors/doorint.dmi', "elights")
if(density)
if(locked && lights)
@@ -494,7 +499,7 @@ About the new airlock wires panel:
icon_state = "door_open"
return
-
+
/obj/machinery/door/airlock/do_animate(animation)
switch(animation)
@@ -918,7 +923,7 @@ About the new airlock wires panel:
var/obj/structure/window/killthis = (locate(/obj/structure/window) in turf)
if(killthis)
killthis.ex_act(2)//Smashin windows
-
+
if(density)
return 1
operating = 1
@@ -1049,7 +1054,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/CanAStarPass(var/obj/item/weapon/card/id/ID)
//Airlock is passable if it is open (!density), bot has access, and is not bolted shut)
return !density || (check_access(ID) && !locked)
-
+
/obj/machinery/door/airlock/emp_act(var/severity)
if(prob(40/severity))
var/duration = world.time + SecondsToTicks(30 / severity)
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index 02e3ec5a543..ebd2d4626f1 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -193,6 +193,10 @@
item_state = "waterbackpackatmos"
volume = 200
+/obj/item/weapon/watertank/atmos/New()
+ ..()
+ reagents.add_reagent("water", 200)
+
/obj/item/weapon/watertank/atmos/make_noz()
return new /obj/item/weapon/extinguisher/mini/nozzle(src)
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 1c178848899..eff4159c867 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -101,6 +101,12 @@ obj/structure/door_assembly
airlock_type = "/highsecurity"
glass = -1
+ door_assembly_shuttle
+ base_icon_state = "shuttle"
+ base_name = "shuttle airlock"
+ airlock_type = "/shuttle"
+ glass = -1
+
multi_tile
icon = 'icons/obj/doors/door_assembly2x1.dmi'
dir = EAST
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 90e31356d0b..e75a0d4dc33 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -63,8 +63,10 @@ var/list/wood_icons = list("wood","wood-broken")
//set src in oview(1)
switch(severity)
if(1.0)
+ src.ChangeTurf(/turf/space)
+ if(2.0)
switch(pick(1,2;75,3))
- if (1)
+ if(1)
spawn(0)
src.ReplaceWithLattice()
if(prob(33)) new /obj/item/stack/sheet/metal(src)
@@ -77,14 +79,10 @@ var/list/wood_icons = list("wood","wood-broken")
src.break_tile()
src.hotspot_expose(1000,CELL_VOLUME)
if(prob(33)) new /obj/item/stack/sheet/metal(src)
- if(2.0)
+ if(3.0)
if (prob(50))
src.break_tile()
src.hotspot_expose(1000,CELL_VOLUME)
- if(3.0)
- if (prob(25))
- src.break_tile()
- src.hotspot_expose(500,CELL_VOLUME)
return
/turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index afbcc4b74be..e9a59453030 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -163,7 +163,7 @@
src.ChangeTurf(/turf/space)
return
if(2.0)
- if(prob(75))
+ if(prob(50))
take_damage(rand(150, 250))
else
dismantle_wall(1,1)
@@ -175,7 +175,7 @@
/turf/simulated/wall/blob_act()
take_damage(rand(75, 125))
return
-
+
/turf/simulated/wall/mech_melee_attack(obj/mecha/M)
if(M.damtype == "brute")
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
@@ -185,7 +185,7 @@
dismantle_wall(1)
M.occupant_message("You smash through the wall.")
visible_message("[src.name] smashes through the wall!")
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
// Wall-rot effect, a nasty fungus that destroys walls.
/turf/simulated/wall/proc/rot()
@@ -459,8 +459,8 @@
else if(istype(W,/obj/item/newscaster_frame))
var/obj/item/newscaster_frame/AH = W
AH.try_build(src)
- return 1
-
+ return 1
+
else if(istype(W,/obj/item/alarm_frame))
var/obj/item/alarm_frame/AH = W
AH.try_build(src)
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index 91d3b5935a0..aea443181fd 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -30,6 +30,7 @@
var/lights = 0
var/lights_power = 6
var/allow2enter = 1
+ var/empcounter = 0 //Used for disabling movement when hit by an EMP
/obj/spacepod/New()
. = ..()
@@ -56,6 +57,13 @@
spacepods_list -= src
..()
+/obj/spacepod/process()
+ if(src.empcounter > 0)
+ src.empcounter--
+ else
+ processing_objects.Remove(src)
+
+
/obj/spacepod/proc/update_icons()
if(!pod_overlays)
pod_overlays = new/list(2)
@@ -72,6 +80,8 @@
/obj/spacepod/bullet_act(var/obj/item/projectile/P)
if(P.damage && !P.nodamage)
deal_damage(P.damage)
+ else if(P.flag == "energy" && istype(P,/obj/item/projectile/ion)) //needed to make sure ions work properly
+ empulse(src, 1, 1)
/obj/spacepod/blob_act()
deal_damage(30)
@@ -159,6 +169,36 @@
if(prob(40))
deal_damage(50)
+/obj/spacepod/emp_act(severity)
+ switch(severity)
+ if(1)
+ if(src.occupant)
+ src.occupant << "The pod console flashes 'Heavy EMP WAVE DETECTED'." //warn the occupants
+ if(src.occupant2)
+ src.occupant2 << "The pod console flashes 'EMP WAVE DETECTED'." //warn the occupants
+
+ if(battery)
+ battery.charge = max(0, battery.charge - 5000) //Cell EMP act is too weak, this pod needs to be sapped.
+ src.deal_damage(100)
+ if(src.empcounter < 40)
+ src.empcounter = 40 //Disable movement for 40 ticks. Plenty long enough.
+ processing_objects.Add(src)
+
+ if(2)
+ if(src.occupant)
+ src.occupant << "The pod console flashes 'EMP WAVE DETECTED'." //warn the occupants
+ if(src.occupant2)
+ src.occupant2 << "The pod console flashes 'EMP WAVE DETECTED'." //warn the occupants
+
+ src.deal_damage(40)
+ if(battery)
+ battery.charge = max(0, battery.charge - 2500) //Cell EMP act is too weak, this pod needs to be sapped.
+ if(src.empcounter < 20)
+ src.empcounter = 20 //Disable movement for 20 ticks.
+ processing_objects.Add(src)
+
+
+
/obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params)
if(iscrowbar(W))
hatch_open = !hatch_open
@@ -454,10 +494,6 @@
else if(src.occupant2 && !src.occupant)
usr << "\red You can't put a corpse into the driver's seat!"
return
- else
- return
- else
- return
else
return
else
@@ -718,16 +754,7 @@
return
/obj/spacepod/verb/fireWeapon()
- if(src.occupant2)
- if(usr.ckey != src.occupant2.ckey)
- set name = "Fire Pod Weapons"
- set desc = "Fire the weapons."
- set category = "Spacepod"
- set src = usr.loc
- equipment_system.weapon_system.fire_weapons()
- else
- return
- else
+ if(!CheckIfOccupant2(usr))
set name = "Fire Pod Weapons"
set desc = "Fire the weapons."
set category = "Spacepod"
@@ -735,35 +762,20 @@
equipment_system.weapon_system.fire_weapons()
obj/spacepod/verb/toggleLights()
- if(src.occupant2)
- if(usr.ckey != src.occupant2.ckey)
- set name = "Toggle Lights"
- set category = "Spacepod"
- set src = usr.loc
- if (usr != occupant)
- return
- lights = !lights
- if(lights)
- SetLuminosity(luminosity + lights_power)
- else
- SetLuminosity(luminosity - lights_power)
- occupant << "Toggled lights [lights?"on":"off"]."
- return
- else
- return
+ set name = "Toggle Lights"
+ set category = "Spacepod"
+ set src = usr.loc
+ if(!CheckIfOccupant2(usr))
+ lightsToggle()
+
+/obj/spacepod/proc/lightsToggle()
+ lights = !lights
+ if(lights)
+ SetLuminosity(luminosity + lights_power)
else
- set name = "Toggle Lights"
- set category = "Spacepod"
- set src = usr.loc
- if (usr != occupant)
- return
- lights = !lights
- if(lights)
- SetLuminosity(luminosity + lights_power)
- else
- SetLuminosity(luminosity - lights_power)
- occupant << "Toggled lights [lights?"on":"off"]."
- return
+ SetLuminosity(luminosity - lights_power)
+ occupant << "Toggled lights [lights?"on":"off"]."
+ return
/obj/spacepod/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5)
var/delayfraction = delay/numticks
@@ -838,82 +850,60 @@ obj/spacepod/verb/toggleLights()
return 1
/obj/spacepod/relaymove(mob/user, direction)
- if(src.occupant2)
- if(user.ckey != src.occupant2.ckey)
- var/moveship = 1
- if(battery && battery.charge >= 3 && health)
- src.dir = direction
- switch(direction)
- if(1)
- if(inertia_dir == 2)
- inertia_dir = 0
- moveship = 0
- if(2)
- if(inertia_dir == 1)
- inertia_dir = 0
- moveship = 0
- if(4)
- if(inertia_dir == 8)
- inertia_dir = 0
- moveship = 0
- if(8)
- if(inertia_dir == 4)
- inertia_dir = 0
- moveship = 0
- if(moveship)
- step(src, direction)
- if(istype(src.loc, /turf/space))
- inertia_dir = direction
- else
- if(!battery)
- user << "No energy cell detected."
- else if(battery.charge < 3)
- user << "Not enough charge left."
- else if(!health)
- user << "She's dead, Jim"
- else
- user << "Unknown error has occurred, yell at pomf."
- return 0
- battery.charge = max(0, battery.charge - 3)
- else
- return
+ if(!CheckIfOccupant2(user))
+ handlerelaymove(user, direction)
else
- var/moveship = 1
- if(battery && battery.charge >= 3 && health)
- src.dir = direction
- switch(direction)
- if(1)
- if(inertia_dir == 2)
- inertia_dir = 0
- moveship = 0
- if(2)
- if(inertia_dir == 1)
- inertia_dir = 0
- moveship = 0
- if(4)
- if(inertia_dir == 8)
- inertia_dir = 0
- moveship = 0
- if(8)
- if(inertia_dir == 4)
- inertia_dir = 0
- moveship = 0
- if(moveship)
- step(src, direction)
- if(istype(src.loc, /turf/space))
- inertia_dir = direction
+ return
+
+/obj/spacepod/proc/handlerelaymove(mob/user, direction)
+ var/moveship = 1
+ if(battery && battery.charge >= 3 && health && empcounter == 0)
+ src.dir = direction
+ switch(direction)
+ if(1)
+ if(inertia_dir == 2)
+ inertia_dir = 0
+ moveship = 0
+ if(2)
+ if(inertia_dir == 1)
+ inertia_dir = 0
+ moveship = 0
+ if(4)
+ if(inertia_dir == 8)
+ inertia_dir = 0
+ moveship = 0
+ if(8)
+ if(inertia_dir == 4)
+ inertia_dir = 0
+ moveship = 0
+ if(moveship)
+ step(src, direction)
+ if(istype(src.loc, /turf/space))
+ inertia_dir = direction
+ else
+ if(!battery)
+ user << "No energy cell detected."
+ else if(battery.charge < 3)
+ user << "Not enough charge left."
+ else if(!health)
+ user << "She's dead, Jim"
+ else if(empcounter != 0)
+ user << "The pod control interface isn't responding. The console indicates [empcounter] seconds before reboot."
+ else
+ user << "Unknown error has occurred, yell at pomf."
+ return 0
+ battery.charge = max(0, battery.charge - 3)
+
+/obj/spacepod/proc/CheckIfOccupant2(mob/user)
+ if(!src.occupant2)
+ return 0
+ if(src.occupant2)
+ if(user == src.occupant2)
+ return 1
else
- if(!battery)
- user << "No energy cell detected."
- else if(battery.charge < 3)
- user << "Not enough charge left."
- else if(!health)
- user << "She's dead, Jim"
- else
- user << "Unknown error has occurred, yell at pomf."
return 0
- battery.charge = max(0, battery.charge - 3)
+
/obj/effect/landmark/spacepod/random
name = "spacepod spawner"
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index bbcd527386b..c56a6480b40 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -56,6 +56,9 @@
use_me = 1 //If it can move, let it emote
else canmove = 0
return canmove
-
+
+/mob/living/carbon/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
+ return
+
/mob/living/carbon/brain/binarycheck()
return istype(loc, /obj/item/device/mmi/posibrain)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 05ec3909226..59f4fba99d7 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -214,9 +214,6 @@
stat("Spacepod Integrity", "[!S.health ? "0" : "[(S.health / initial(S.health)) * 100]"]%")
/mob/living/carbon/human/ex_act(severity)
- if(!blinded)
- flick("flash", flash)
-
var/shielded = 0
var/b_loss = null
var/f_loss = null
@@ -235,8 +232,8 @@
while(limbs_affected != 0)
processing_dismember = pick(organs)
- if(processing_dismember.name != "chest" && processing_dismember.name != "groin")
- processing_dismember.dismember_limb()
+ if(processing_dismember.name != "chest" && processing_dismember.name != "groin" && processing_dismember.name != "head")
+ processing_dismember.droplimb(1,1,1)
limbs_affected -= 1
@@ -260,7 +257,7 @@
while(limbs_affected != 0)
processing_dismember = pick(organs)
if(processing_dismember.name != "chest" && processing_dismember.name != "groin" && processing_dismember.name != "head")
- processing_dismember.dismember_limb()
+ processing_dismember.droplimb(1,1,1)
limbs_affected -= 1
else
@@ -269,8 +266,8 @@
while(limbs_affected != 0)
processing_dismember = pick(organs)
- if(processing_dismember.name != "chest" && processing_dismember.name != "groin")
- processing_dismember.dismember_limb()
+ if(processing_dismember.name != "chest" && processing_dismember.name != "groin" && processing_dismember.name != "head")
+ processing_dismember.droplimb(1,1,1)
limbs_affected -= 1
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
@@ -292,7 +289,7 @@
while(limbs_affected != 0)
processing_dismember = pick(organs)
if(processing_dismember.name != "chest" && processing_dismember.name != "groin" && processing_dismember.name != "head")
- processing_dismember.dismember_limb()
+ processing_dismember.droplimb(1,1,1)
limbs_affected -= 1
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
@@ -302,23 +299,15 @@
Paralyse(10)
var/update = 0
-
- // focus most of the blast on one organ
- var/datum/organ/external/take_blast = pick(organs)
- update |= take_blast.take_damage(b_loss * 0.9, f_loss * 0.9, used_weapon = "Explosive blast")
-
- // distribute the remaining 10% on all limbs equally
- b_loss *= 0.1
- f_loss *= 0.1
-
var/weapon_message = "Explosive Blast"
-
for(var/datum/organ/external/temp in organs)
switch(temp.name)
if("head")
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2, used_weapon = weapon_message)
if("chest")
update |= temp.take_damage(b_loss * 0.4, f_loss * 0.4, used_weapon = weapon_message)
+ if("groin")
+ update |= temp.take_damage(b_loss * 0.1, f_loss * 0.1, used_weapon = weapon_message)
if("l_arm")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_arm")
@@ -328,15 +317,16 @@
if("r_leg")
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if("r_foot")
- update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
+ update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
if("l_foot")
- update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
- if("r_arm")
- update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
- if("l_arm")
- update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
+ update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
+ if("r_hand")
+ update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
+ if("l_hand")
+ update |= temp.take_damage(b_loss * 0.025, f_loss * 0.025, used_weapon = weapon_message)
if(update) UpdateDamageIcon()
+ ..()
/mob/living/carbon/human/blob_act()
if(stat == 2) return
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 598bcacf1d0..7b00947daa2 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -190,7 +190,7 @@
var/f_loss = null
switch (severity)
if (1.0)
- del(src)
+ qdel(src)
return
if (2.0)
@@ -255,7 +255,7 @@
if (Victim) return // can't attack while eating!
if (health > -100)
-
+
M.do_attack_animation(src)
visible_message(" The [M.name] has glomped [src]!", \
" The [M.name] has glomped [src]!")
@@ -338,7 +338,7 @@
var/damage = rand(1, 3)
L.amount_grown = min(L.amount_grown + damage, L.max_grown)
adjustBruteLoss(damage)
-
+
/mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M as mob)
if (!ticker)
M << "You cannot attack people before the game has started."
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index feb0a420f28..aecf82f3a00 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -462,26 +462,18 @@
..()
/mob/living/carbon/monkey/ex_act(severity)
- if(!blinded)
- flick("flash", flash)
-
+ ..()
switch(severity)
if(1.0)
- if (stat != 2)
- adjustBruteLoss(200)
- health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
+ gib()
+ return
if(2.0)
- if (stat != 2)
- adjustBruteLoss(60)
- adjustFireLoss(60)
- health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
+ adjustBruteLoss(60)
+ adjustFireLoss(60)
if(3.0)
- if (stat != 2)
- adjustBruteLoss(30)
- health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
+ adjustBruteLoss(30)
if (prob(50))
Paralyse(10)
- else
return
/mob/living/carbon/monkey/blob_act()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 15991b13201..e3917bf373f 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -33,6 +33,11 @@
/mob/living/proc/InCritical()
return (src.health < 0 && src.health > -95.0 && stat == UNCONSCIOUS)
+/mob/living/ex_act(severity)
+ ..()
+ if(client && !eye_blind)
+ flick("flash", src.flash)
+
/mob/living/proc/updatehealth()
if(status_flags & GODMODE)
health = 100
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 3782a996a3f..9ffbc114f4d 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -466,14 +466,11 @@ var/list/ai_verbs_default = list(
..()
/mob/living/silicon/ai/ex_act(severity)
- if(!blinded)
- flick("flash", flash)
+ ..()
switch(severity)
if(1.0)
- if (stat != 2)
- adjustBruteLoss(100)
- adjustFireLoss(100)
+ gib()
if(2.0)
if (stat != 2)
adjustBruteLoss(60)
@@ -482,7 +479,7 @@ var/list/ai_verbs_default = list(
if (stat != 2)
adjustBruteLoss(30)
- updatehealth()
+ return
/mob/living/silicon/ai/Topic(href, href_list)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index fcb51fdbc08..566ed88266b 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -183,23 +183,22 @@
src << "You feel an electric surge run through your circuitry and become acutely aware at how lucky you are that you can still feel at all."
/mob/living/silicon/pai/ex_act(severity)
- if(!blinded)
- flick("flash", src.flash)
+ ..()
switch(severity)
if(1.0)
- if (src.stat != 2) //Let's not have two of these instantly kill you.
- adjustBruteLoss(45)
- adjustFireLoss(45)
+ if (src.stat != 2)
+ adjustBruteLoss(100)
+ adjustFireLoss(100)
if(2.0)
if (src.stat != 2)
- adjustBruteLoss(30)
- adjustFireLoss(30)
+ adjustBruteLoss(60)
+ adjustFireLoss(60)
if(3.0)
if (src.stat != 2)
- adjustBruteLoss(20)
+ adjustBruteLoss(30)
- src.updatehealth()
+ return
// See software.dm for Topic()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 3f70e98c3ac..15d48f454d4 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -514,16 +514,10 @@ var/list/robot_verbs_default = list(
/mob/living/silicon/robot/ex_act(severity)
- if(!blinded)
- flick("flash", flash)
-
switch(severity)
if(1.0)
- if (stat != 2)
- adjustBruteLoss(100)
- adjustFireLoss(100)
- gib()
- return
+ gib()
+ return
if(2.0)
if (stat != 2)
adjustBruteLoss(60)
@@ -531,8 +525,7 @@ var/list/robot_verbs_default = list(
if(3.0)
if (stat != 2)
adjustBruteLoss(30)
-
- updatehealth()
+ return
/mob/living/silicon/robot/meteorhit(obj/O as obj)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 4046d556947..76c8c4733d7 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -477,11 +477,9 @@
return
/mob/living/simple_animal/ex_act(severity)
- if(!blinded)
- flick("flash", flash)
+ ..()
switch (severity)
if (1.0)
- adjustBruteLoss(500)
gib()
return
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 01f32df8e14..54c3accb3ef 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -189,14 +189,14 @@
s_click(hud)
return
if(M == assailant && state >= GRAB_AGGRESSIVE)
- if( (ishuman(user) && (FAT in user.mutations) && iscarbon(affecting) ) || ( isalien(user) && iscarbon(affecting) ) || ( istype(user,/mob/living/carbon/human/kidan) && istype(affecting,/mob/living/carbon/monkey/diona) ) )
+ if( (ishuman(user) && (FAT in user.mutations) && iscarbon(affecting) ) || ( isalien(user) && iscarbon(affecting) ) || ( istype(user,/mob/living/carbon/human/kidan) && istype(affecting,/mob/living/carbon/monkey/diona) ) || ( ishuman(user) && user.get_species() == "Tajaran" && istype(affecting,/mob/living/simple_animal/mouse) ) )
var/mob/living/carbon/attacker = user
- user.visible_message("[user] is attempting to devour [affecting]!")
- if(istype(user, /mob/living/carbon/alien/humanoid/hunter))
+ user.visible_message("[user] is attempting to devour \the [affecting]!")
+ if(istype(user, /mob/living/carbon/alien/humanoid/hunter) || istype(affecting, /mob/living/simple_animal/mouse)) //mice are easy to eat
if(!do_mob(user, affecting)||!do_after(user, 30)) return
else
if(!do_mob(user, affecting)||!do_after(user, 100)) return
- user.visible_message("[user] devours [affecting]!")
+ user.visible_message("[user] devours \the [affecting]!")
affecting.loc = user
attacker.stomach_contents.Add(affecting)
del(src)
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 95d8694c449..2931989b977 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -90,7 +90,6 @@
icon = 'icons/obj/objects.dmi'
icon_state = "weldtank"
amount_per_transfer_from_this = 10
- var/modded = 0
var/obj/item/device/assembly_holder/rig = null
New()
..()
@@ -98,7 +97,9 @@
bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
- if(!istype(Proj ,/obj/item/projectile/lasertag) && !istype(Proj ,/obj/item/projectile/practice) )
+ if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
+ message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
+ log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
explode()
blob_act()
@@ -107,13 +108,10 @@
ex_act()
explode()
-
/obj/structure/reagent_dispensers/fueltank/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
- if (modded)
- usr << "\red Fuel faucet is wrenched open, leaking the fuel!"
if(rig)
usr << "There is some kind of device rigged to the tank."
@@ -127,12 +125,6 @@
overlays = new/list()
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if (istype(W,/obj/item/weapon/wrench))
- user.visible_message("[user] wrenches [src]'s faucet [modded ? "closed" : "open"].", \
- "You wrench [src]'s faucet [modded ? "closed" : "open"]")
- modded = modded ? 0 : 1
- if (modded)
- leak_fuel(amount_per_transfer_from_this)
if (istype(W,/obj/item/device/assembly_holder))
if (rig)
user << "\red There is another device in the way."
@@ -157,14 +149,8 @@
return ..()
-
/obj/structure/reagent_dispensers/fueltank/proc/explode()
- if (reagents.total_volume > 500)
- explosion(src.loc,1,2,4)
- else if (reagents.total_volume > 100)
- explosion(src.loc,0,1,3)
- else
- explosion(src.loc,-1,1,2)
+ explosion(src.loc,0,1,4)
if(src)
del(src)
@@ -175,19 +161,9 @@
/obj/structure/reagent_dispensers/fueltank/Move()
..()
- if(modded)
- leak_fuel(amount_per_transfer_from_this)
if(rig)
rig.process_movement()
-/obj/structure/reagent_dispensers/fueltank/proc/leak_fuel(amount)
- if (reagents.total_volume == 0)
- return
-
- amount = min(amount, reagents.total_volume)
- reagents.remove_reagent("fuel",amount)
-// new /obj/effect/decal/cleanable/liquid_fuel(src.loc, amount)
-
/obj/structure/reagent_dispensers/fueltank/HasProximity(atom/movable/AM)
if(rig)
rig.HasProximity(AM)
diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi
index 3cc3b44b4a3..877daf4f736 100644
Binary files a/icons/obj/doors/door_assembly.dmi and b/icons/obj/doors/door_assembly.dmi differ
diff --git a/icons/obj/doors/doorshuttle.dmi b/icons/obj/doors/doorshuttle.dmi
new file mode 100644
index 00000000000..a32899e4221
Binary files /dev/null and b/icons/obj/doors/doorshuttle.dmi differ