diff --git a/baystation12.dme b/baystation12.dme
index 5846ac2f2b8..e351b5b9c0d 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -388,6 +388,7 @@
#include "code\game\machinery\doors\checkForMultipleDoors.dm"
#include "code\game\machinery\doors\door.dm"
#include "code\game\machinery\doors\firedoor.dm"
+#include "code\game\machinery\doors\multi_tile.dm"
#include "code\game\machinery\doors\poddoor.dm"
#include "code\game\machinery\doors\shutters.dm"
#include "code\game\machinery\doors\unpowered.dm"
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 63ba22d87f8..93d54a56550 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -106,7 +106,10 @@
src << "We stab [T] with the proboscis."
src.visible_message("[src] stabs [T] with the proboscis!")
T << "You feel a sharp stabbing pain!"
- T.take_overall_damage(40)
+ var/datum/organ/external/affecting = T.get_organ(src.zone_sel.selecting)
+ if(affecting.take_damage(39,0,1,"large organic needle"))
+ T:UpdateDamageIcon()
+ continue
feedback_add_details("changeling_powers","A[stage]")
if(!do_mob(src, T, 150))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index d4ec1e588f7..424e94eee07 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -141,30 +141,6 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
opacity = 1
assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
-/obj/machinery/door/airlock/glass_large
- name = "Glass Airlock"
- icon = 'icons/obj/doors/Door2x1glassfull.dmi'
- opacity = 0
- bound_width = 64
- glass = 1
-
- update_nearby_tiles(need_rebuild)
- . = ..()
-
- if(!.)
- return
-
- var/turf/simulated/second_turf = get_step(src, EAST)
- var/turf/simulated/north = get_step(second_turf, NORTH)
- var/turf/simulated/east = get_step(second_turf, EAST)
- var/turf/simulated/south = get_step(second_turf, SOUTH)
-
- update_heat_protection(second_turf)
-
- if(istype(north)) air_master.tiles_to_update |= north
- if(istype(south)) air_master.tiles_to_update |= south
- if(istype(east)) air_master.tiles_to_update |= east
-
/obj/machinery/door/airlock/freezer
name = "Freezer Airlock"
icon = 'icons/obj/doors/Doorfreezer.dmi'
@@ -1217,7 +1193,8 @@ About the new airlock wires panel:
da.anchored = 1
if(mineral)
da.glass = mineral
- else if(glass)
+ //else if(glass)
+ else if(glass && !da.glass)
da.glass = 1
da.state = 1
da.created_name = src.name
@@ -1316,7 +1293,7 @@ About the new airlock wires panel:
var/obj/effect/stop/S
S = new /obj/effect/stop
S.victim = M
- S.loc = src.loc
+ S.loc = M.loc
spawn(20)
del(S)
M.emote("scream")
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 9ac8ad6c7f4..6aec44f7f17 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -20,8 +20,12 @@
var/heat_proof = 0 // For glass airlocks/opacity firedoors
var/air_properties_vary_with_direction = 0
+ //Multi-tile doors
+ dir = EAST
+ var/width = 1
+
/obj/machinery/door/New()
- ..()
+ . = ..()
if(density)
layer = 3.1 //Above most items if closed
explosion_resistance = initial(explosion_resistance)
@@ -29,6 +33,16 @@
else
layer = 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
explosion_resistance = 0
+
+
+ if(width > 1)
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
+
update_nearby_tiles(need_rebuild=1)
return
@@ -258,6 +272,22 @@
if(istype(south)) air_master.tiles_to_update += south
if(istype(east)) air_master.tiles_to_update += east
if(istype(west)) air_master.tiles_to_update += west
+
+ if(width > 1)
+ var/turf/simulated/next_turf = src
+ var/step_dir = turn(dir, 180)
+ for(var/current_step = 2, current_step <= width, current_step++)
+ next_turf = get_step(src, step_dir)
+ north = get_step(next_turf, step_dir)
+ east = get_step(next_turf, turn(step_dir, 90))
+ south = get_step(next_turf, turn(step_dir, -90))
+
+ update_heat_protection(next_turf)
+
+ if(istype(north)) air_master.tiles_to_update |= north
+ if(istype(south)) air_master.tiles_to_update |= south
+ if(istype(east)) air_master.tiles_to_update |= east
+
return 1
/obj/machinery/door/proc/update_heat_protection(var/turf/simulated/source)
@@ -273,5 +303,18 @@
close()
return
+/obj/machinery/door/Move(new_loc, new_dir)
+ update_nearby_tiles()
+ . = ..()
+ if(width > 1)
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
+
+ update_nearby_tiles()
+
/obj/machinery/door/morgue
icon = 'icons/obj/doors/doormorgue.dmi'
\ No newline at end of file
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 93f0abb4d09..e05d9511e4e 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -276,21 +276,4 @@
/obj/machinery/door/firedoor/multi_tile
icon = 'DoorHazard2x1.dmi'
- bound_width = 64
-
-
- update_nearby_tiles(need_rebuild)
- if(!.)
- return
-
- . = ..()
- var/turf/simulated/second_turf = get_step(src, EAST)
- var/turf/simulated/north = get_step(second_turf, NORTH)
- var/turf/simulated/east = get_step(second_turf, EAST)
- var/turf/simulated/south = get_step(second_turf, SOUTH)
-
- update_heat_protection(second_turf)
-
- if(istype(north)) air_master.tiles_to_update |= north
- if(istype(south)) air_master.tiles_to_update |= south
- if(istype(east)) air_master.tiles_to_update |= east
\ No newline at end of file
+ width = 2
\ No newline at end of file
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
new file mode 100644
index 00000000000..986b25b7648
--- /dev/null
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -0,0 +1,10 @@
+//Terribly sorry for the code doubling, but things go derpy otherwise.
+/obj/machinery/door/airlock/multi_tile
+ width = 2
+
+/obj/machinery/door/airlock/multi_tile/glass
+ name = "Glass Airlock"
+ icon = 'icons/obj/doors/Door2x1glass.dmi'
+ opacity = 0
+ glass = 1
+ assembly_type = "obj/structure/door_assembly/multi_tile"
\ 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 aa938a13e55..3d3b88f4d06 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -215,6 +215,12 @@
O.cell.loc = O
W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame.
+ // Since we "magically" installed a cell, we also have to update the correct component.
+ if(O.cell)
+ var/datum/robot_component/cell_component = O.components["power cell"]
+ cell_component.wrapped = O.cell
+ cell_component.installed = 1
+
feedback_inc("cyborg_birth",1)
O.Namepick()
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index e9ce0e9c5ba..e35bae22499 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -57,6 +57,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
), 4), \
null, \
new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade), \
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 8052fe52806..6856c706341 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -101,6 +101,39 @@ obj/structure/door_assembly
airlock_type = "/highsecurity"
glass = -1
+ multi_tile
+ icon = 'icons/obj/doors/door_assembly2x1.dmi'
+ dir = EAST
+ var/width = 1
+
+/*Temporary until we get sprites.
+ glass_type = "/multi_tile/glass"
+ airlock_type = "/multi_tile/maint"
+ glass = 1*/
+ base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1.
+ airlock_type = "/multi_tile/glass"
+ glass = -1 //To prevent bugs in deconstruction process.
+
+ New()
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
+ update_state()
+
+ Move()
+ . = ..()
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
+
+
+
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
var/t = copytext(stripped_input(user, "Enter the name for the door.", src.name, src.created_name),1,MAX_NAME_LEN)
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 11d6bea91b4..748c9bdcdca 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -37,7 +37,7 @@
/mob/living/silicon/robot/proc/use_power()
- if (is_component_functioning("power cell"))
+ if (is_component_functioning("power cell") && cell)
if(src.cell.charge <= 0)
uneq_all()
src.stat = 1
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 6ff3c4a1efa..ace234eb7c2 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -116,13 +116,13 @@
cell.maxcharge = 7500
cell.charge = 7500
+ ..()
+
if(cell)
var/datum/robot_component/cell_component = components["power cell"]
cell_component.wrapped = cell
cell_component.installed = 1
- ..()
-
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
// setup the PDA and its name
@@ -725,7 +725,7 @@
var/datum/robot_component/C = components["power cell"]
if(wiresexposed)
user << "Close the panel first."
- else if(cell || C.installed)
+ else if(cell)
user << "There is a power cell already installed."
else
user.drop_item()
@@ -1015,6 +1015,8 @@
user.put_in_active_hand(cell)
user << "You remove \the [cell]."
cell = null
+ cell_component.wrapped = null
+ cell_component.installed = 0
updateicon()
else if(cell_component.installed == -1)
cell_component.installed = 0
diff --git a/icons/obj/doors/Door2x1glass.dmi b/icons/obj/doors/Door2x1glass.dmi
new file mode 100644
index 00000000000..fe4a9723539
Binary files /dev/null and b/icons/obj/doors/Door2x1glass.dmi differ
diff --git a/icons/obj/doors/Door2x1glassfull.dmi b/icons/obj/doors/Door2x1glassfull.dmi
deleted file mode 100644
index 96653338e11..00000000000
Binary files a/icons/obj/doors/Door2x1glassfull.dmi and /dev/null differ
diff --git a/icons/obj/doors/door_assembly2x1.dmi b/icons/obj/doors/door_assembly2x1.dmi
new file mode 100644
index 00000000000..a8d69b6f6a2
Binary files /dev/null and b/icons/obj/doors/door_assembly2x1.dmi differ