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