diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index 9fcdad86139..faefa64883d 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -10,6 +10,7 @@ anchored = 1 use_power = 0 idle_power_usage = 5 // 5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/cooler var/heatsink_temperature = T20C // The constant temperature reservoir into which the freezer pumps heat. Probably the hull of the station or something. var/internal_volume = 600 // L @@ -24,7 +25,6 @@ ..() initialize_directions = dir component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/unary_atmos/cooler(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index e139f6faf3f..aa51d9669f0 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -10,6 +10,7 @@ anchored = 1 use_power = 0 idle_power_usage = 5 //5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/heater var/max_temperature = T20C + 680 var/internal_volume = 600 //L @@ -25,7 +26,6 @@ initialize_directions = dir component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/unary_atmos/heater(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 7222470f71c..bb4ec95a844 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -406,7 +406,7 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs) //Get heat transfer coefficients for clothing. for(var/obj/item/clothing/C in src) - if(l_hand == C || r_hand == C) + if(item_is_in_hands(C)) continue if( C.max_heat_protection_temperature >= last_temperature ) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 9fa5fa36546..7d7468b91a7 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -94,10 +94,7 @@ if(W == A) // Handle attack_self W.attack_self(src) - if(hand) - update_inv_l_hand(0) - else - update_inv_r_hand(0) + update_inv_active_hand(0) return 1 //Atoms on your person diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 751021892c8..63ef549122e 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -162,7 +162,7 @@ inv_box.name = "r_hand" inv_box.icon = ui_style inv_box.icon_state = "r_hand_inactive" - if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use + if(!target.hand) //This being 0 or null means the right hand is in use inv_box.icon_state = "r_hand_active" inv_box.screen_loc = ui_rhand inv_box.slot_id = slot_r_hand @@ -177,7 +177,7 @@ inv_box.name = "l_hand" inv_box.icon = ui_style inv_box.icon_state = "l_hand_inactive" - if(mymob && mymob.hand) //This being 1 means the left hand is in use + if(target.hand) //This being 1 means the left hand is in use inv_box.icon_state = "l_hand_active" inv_box.screen_loc = ui_lhand inv_box.slot_id = slot_l_hand diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 1bf774c8500..c4f43411fba 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1001,7 +1001,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Security barrier crate" group = "Security" -/datum/supply_packs/securitybarriers +/datum/supply_packs/securityshieldgen name = "Wall shield Generators" contains = list(/obj/machinery/shieldwallgen, /obj/machinery/shieldwallgen, @@ -1729,7 +1729,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/device/camera_film, /obj/item/device/camera_film, /obj/item/weapon/storage/photo_album, - /obj/item/device/reagent_scanner) + /obj/item/device/reagent_scanner, + /obj/item/device/flashlight/maglight) cost = 35 containertype = "/obj/structure/closet/crate/secure" containername = "Forensic equipment" @@ -1785,7 +1786,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/head/soft/sec/corp, /obj/item/clothing/under/rank/security/corp, - /obj/item/weapon/gun/energy/taser) + /obj/item/weapon/gun/energy/taser, + /obj/item/device/flashlight/maglight) cost = 30 containertype = "/obj/structure/closet/crate/secure" containername = "Officer equipment" @@ -1811,7 +1813,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/melee/baton/loaded, /obj/item/weapon/storage/box/holobadge, - /obj/item/clothing/head/beret/sec/corporate/warden) + /obj/item/clothing/head/beret/sec/corporate/warden, + /obj/item/device/flashlight/maglight) cost = 45 containertype = "/obj/structure/closet/crate/secure" containername = "Warden equipment" @@ -1835,7 +1838,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/holster/waist, /obj/item/weapon/melee/telebaton, /obj/item/weapon/shield/riot/tele, - /obj/item/clothing/head/beret/sec/corporate/hos) + /obj/item/clothing/head/beret/sec/corporate/hos, + /obj/item/device/flashlight/maglight) cost = 65 containertype = "/obj/structure/closet/crate/secure" containername = "Head of security equipment" diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index c34b0291fbb..ace1ba9ec35 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -11,7 +11,7 @@ var/const/AALARM_WIRE_AALARM = 16 /datum/wires/alarm/CanUse(var/mob/living/L) var/obj/machinery/alarm/A = holder - if(A.wiresexposed && A.buildstage == 2) + if(A.wiresexposed) return 1 return 0 diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 83033257e37..a366dc98460 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -599,3 +599,29 @@ icon = 'icons/obj/stock_parts.dmi' icon_state = "smes_coil" origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19) + +// Additional construction stock parts + +/obj/item/weapon/stock_parts/gear + name = "gear" + desc = "A gear used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "gear" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 50) + +/obj/item/weapon/stock_parts/motor + name = "motor" + desc = "A motor used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "motor" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 60, "glass" = 10) + +/obj/item/weapon/stock_parts/spring + name = "spring" + desc = "A spring used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "spring" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 40) \ No newline at end of file diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 072dd88bee4..65c7a080cd8 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -76,7 +76,7 @@ P.info = "The nuclear authorization code is: [code]" P.name = "nuclear bomb code" if(leader && leader.current) - if(get_turf(P) == get_turf(leader.current) && !(leader.current.l_hand && leader.current.r_hand)) + if(get_turf(P) == get_turf(leader.current)) leader.current.put_in_hands(P) if(!code_owner && leader) diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index cd9dd9b83bb..b077977fd7a 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -50,8 +50,7 @@ var/datum/antagonist/renegade/renegades var/gun_type = pick(spawn_guns) var/obj/item/gun = new gun_type(get_turf(player)) - if(!(player.l_hand && player.r_hand)) - player.put_in_hands(gun) + player.put_in_hands(gun) /proc/rightandwrong() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 07b3dcacc5c..81f0da074de 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -292,12 +292,14 @@ var/list/mob/living/forced_ambiance_list = new mob << "The sudden appearance of gravity makes you fall to the floor!" /area/proc/prison_break() - for(var/obj/machinery/power/apc/temp_apc in src) - temp_apc.overload_lighting(70) - for(var/obj/machinery/door/airlock/temp_airlock in src) - temp_airlock.prison_open() - for(var/obj/machinery/door/window/temp_windoor in src) - temp_windoor.open() + var/obj/machinery/power/apc/theAPC = get_apc() + if(theAPC.operating) + for(var/obj/machinery/power/apc/temp_apc in src) + temp_apc.overload_lighting(70) + for(var/obj/machinery/door/airlock/temp_airlock in src) + temp_airlock.prison_open() + for(var/obj/machinery/door/window/temp_windoor in src) + temp_windoor.open() /area/proc/has_gravity() return has_gravity diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index b37342ced52..3138c654394 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -47,6 +47,7 @@ idle_power_usage = 50 active_power_usage = 300 interact_offline = 1 + circuit = /obj/item/weapon/circuitboard/clonescanner var/locked = 0 var/mob/living/carbon/occupant = null var/obj/item/weapon/reagent_containers/glass/beaker = null @@ -55,7 +56,6 @@ /obj/machinery/dna_scannernew/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonescanner(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/game/gamemodes/changeling/generic_equip_procs.dm b/code/game/gamemodes/changeling/generic_equip_procs.dm index 5569db85125..930e50c9c84 100644 --- a/code/game/gamemodes/changeling/generic_equip_procs.dm +++ b/code/game/gamemodes/changeling/generic_equip_procs.dm @@ -244,7 +244,7 @@ var/mob/living/carbon/human/M = src - if(M.l_hand && M.r_hand) //Make sure our hands aren't full. + if(M.hands_are_full()) //Make sure our hands aren't full. src << "Our hands are full. Drop something first." return 0 diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm index c5441d90eef..92b86ce2ee5 100644 --- a/code/game/gamemodes/changeling/powers/armblade.dm +++ b/code/game/gamemodes/changeling/powers/armblade.dm @@ -68,7 +68,7 @@ ..() /obj/item/weapon/melee/arm_blade/process() //Stolen from ninja swords. - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index d3603fe96e1..699898fde07 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -54,6 +54,7 @@ var/wiresexposed = 0 // If it's been screwdrivered open. var/aidisabled = 0 var/shorted = 0 + circuit = /obj/item/weapon/circuitboard/airalarm var/datum/wires/alarm/wires @@ -61,7 +62,6 @@ var/screen = AALARM_SCREEN_MAIN var/area_uid var/area/alarm_area - var/buildstage = 2 //2 is built, 1 is building, 0 is frame. var/target_temperature = T0C+20 var/regulating_temperature = 0 @@ -105,23 +105,8 @@ wires = null return ..() -/obj/machinery/alarm/New(var/loc, var/dir, var/building = 0) +/obj/machinery/alarm/New() ..() - - if(building) - if(loc) - src.loc = loc - - if(dir) - src.set_dir(dir) - - buildstage = 0 - wiresexposed = 1 - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - update_icon() - return - first_run() /obj/machinery/alarm/proc/first_run() @@ -148,7 +133,7 @@ elect_master() /obj/machinery/alarm/process() - if((stat & (NOPOWER|BROKEN)) || shorted || buildstage != 2) + if((stat & (NOPOWER|BROKEN)) || shorted) return var/turf/simulated/location = loc @@ -605,9 +590,6 @@ data["thresholds"] = thresholds /obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list()) - if(buildstage != 2) - return STATUS_CLOSE - if(aidisabled && isAI(user)) user << "AI control for \the [src] interface has been disabled." return STATUS_CLOSE @@ -763,73 +745,43 @@ /obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) src.add_fingerprint(user) + if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up. + //user << "You pop the Air Alarm's maintence panel open." + wiresexposed = !wiresexposed + user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + update_icon() + return - switch(buildstage) - if(2) - if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up. - //user << "You pop the Air Alarm's maintence panel open." - wiresexposed = !wiresexposed - user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" - update_icon() - return + if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + new/obj/item/stack/cable_coil(get_turf(src), 5) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "airalarm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "airalarm_2" + M.deconstruct(src) + qdel(src) + return - if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) - user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - buildstage = 1 - update_icon() - return - - if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card - if(stat & (NOPOWER|BROKEN)) - user << "It does nothing" - return - else - if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) - locked = !locked - user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface." - else - user << "Access denied." + if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card + if(stat & (NOPOWER|BROKEN)) + user << "It does nothing" return - - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You wire \the [src]." - buildstage = 2 - update_icon() - first_run() - return - else - user << "You need 5 pieces of cable to do wire \the [src]." - return - - else if(istype(W, /obj/item/weapon/crowbar)) - user << "You start prying out the circuit." - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user,20)) - user << "You pry out the circuit!" - var/obj/item/weapon/airalarm_electronics/circuit = new /obj/item/weapon/airalarm_electronics() - circuit.loc = user.loc - buildstage = 0 - update_icon() - return - if(0) - if(istype(W, /obj/item/weapon/airalarm_electronics)) - user << "You insert the circuit!" - qdel(W) - buildstage = 1 - update_icon() - return - - else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" - new /obj/item/frame/air_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - + else + if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) + locked = !locked + user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface." + else + user << "Access denied." return ..() /obj/machinery/alarm/power_change() @@ -839,14 +791,10 @@ /obj/machinery/alarm/examine(mob/user) ..(user) - if (buildstage < 2) - user << "It is not wired." - if (buildstage < 1) - user << "The circuit is missing." /* AIR ALARM CIRCUIT Just a object used in constructing air alarms -*/ + /obj/item/weapon/airalarm_electronics name = "air alarm electronics" icon = 'icons/obj/doors/door_assembly.dmi' @@ -854,7 +802,7 @@ Just a object used in constructing air alarms desc = "Looks like a circuit. Probably is." w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - +*/ /* FIRE ALARM */ @@ -875,20 +823,13 @@ FIRE ALARM power_channel = ENVIRON var/last_process = 0 var/wiresexposed = 0 - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone var/seclevel + circuit = /obj/item/weapon/circuitboard/firealarm /obj/machinery/firealarm/update_icon() overlays.Cut() if(wiresexposed) - switch(buildstage) - if(2) - icon_state="fire_b2" - if(1) - icon_state="fire_b1" - if(0) - icon_state="fire_b0" set_light(0) return @@ -932,56 +873,36 @@ FIRE ALARM /obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob) src.add_fingerprint(user) - if (istype(W, /obj/item/weapon/screwdriver) && buildstage == 2) + if (istype(W, /obj/item/weapon/screwdriver)) wiresexposed = !wiresexposed update_icon() return if(wiresexposed) - switch(buildstage) - if(2) - if (istype(W, /obj/item/device/multitool)) - src.detecting = !( src.detecting ) - if (src.detecting) - user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") - else - user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") - else if (istype(W, /obj/item/weapon/wirecutters)) - user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - new/obj/item/stack/cable_coil(get_turf(src), 5) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - buildstage = 1 - update_icon() - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You wire \the [src]." - buildstage = 2 - return - else - user << "You need 5 pieces of cable to wire \the [src]." - return - else if(istype(W, /obj/item/weapon/crowbar)) - user << "You pry out the circuit!" - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - spawn(20) - var/obj/item/weapon/firealarm_electronics/circuit = new /obj/item/weapon/firealarm_electronics() - circuit.loc = user.loc - buildstage = 0 - update_icon() - if(0) - if(istype(W, /obj/item/weapon/firealarm_electronics)) - user << "You insert the circuit!" - qdel(W) - buildstage = 1 - update_icon() - - else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" - new /obj/item/frame/fire_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) + if (istype(W, /obj/item/device/multitool)) + src.detecting = !( src.detecting ) + if (src.detecting) + user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") + else + user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") + else if (istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + new/obj/item/stack/cable_coil(get_turf(src), 5) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "firealarm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "firealarm_2" + M.deconstruct(src) + qdel(src) return src.alarm() @@ -1016,9 +937,6 @@ FIRE ALARM if(user.stat || stat & (NOPOWER|BROKEN)) return - if (buildstage != 2) - return - user.set_machine(src) var/area/A = src.loc var/d1 @@ -1061,9 +979,6 @@ FIRE ALARM if (usr.stat || stat & (BROKEN|NOPOWER)) return - if (buildstage != 2) - return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) if (href_list["reset"]) @@ -1106,23 +1021,6 @@ FIRE ALARM //playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0) return - - -/obj/machinery/firealarm/New(loc, dir, building) - ..() - - if(loc) - src.loc = loc - - if(dir) - src.set_dir(dir) - - if(building) - buildstage = 0 - wiresexposed = 1 - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - /obj/machinery/firealarm/proc/set_security_level(var/newlevel) if(seclevel != newlevel) seclevel = newlevel @@ -1135,7 +1033,7 @@ FIRE ALARM /* FIRE ALARM CIRCUIT Just a object used in constructing fire alarms -*/ + /obj/item/weapon/firealarm_electronics name = "fire alarm electronics" icon = 'icons/obj/doors/door_assembly.dmi' @@ -1143,7 +1041,7 @@ Just a object used in constructing fire alarms desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - +*/ /obj/machinery/partyalarm name = "\improper PARTY BUTTON" desc = "Cuban Pete is in the house!" diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 972d9a717bf..14512fb8391 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 10 active_power_usage = 2000 - + circuit = /obj/item/weapon/circuitboard/autolathe var/list/machine_recipes var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0) var/list/storage_capacity = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0) @@ -30,14 +30,13 @@ wires = new(src) //Create parts for lathe. component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/autolathe(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/console_screen(src) RefreshParts() - + /obj/machinery/autolathe/Destroy() qdel(wires) wires = null diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 8c4c2447998..244b74f17fc 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -158,12 +158,12 @@ /datum/autolathe/recipe/airalarm name = "air alarm electronics" - path = /obj/item/weapon/airalarm_electronics + path = /obj/item/weapon/circuitboard/airalarm category = "Engineering" /datum/autolathe/recipe/firealarm name = "fire alarm electronics" - path = /obj/item/weapon/firealarm_electronics + path = /obj/item/weapon/circuitboard/firealarm category = "Engineering" /datum/autolathe/recipe/powermodule @@ -171,6 +171,96 @@ path = /obj/item/weapon/module/power_control category = "Engineering" +/datum/autolathe/recipe/statusdisplay + name = "status display electronics" + path = /obj/item/weapon/circuitboard/status_display + category = "Engineering" + +/datum/autolathe/recipe/aistatusdisplay + name = "ai status display electronics" + path = /obj/item/weapon/circuitboard/ai_status_display + category = "Engineering" + +/datum/autolathe/recipe/newscaster + name = "newscaster electronics" + path = /obj/item/weapon/circuitboard/newscaster + category = "Engineering" + +/datum/autolathe/recipe/atm + name = "atm electronics" + path = /obj/item/weapon/circuitboard/atm + category = "Engineering" + +/datum/autolathe/recipe/intercom + name = "intercom electronics" + path = /obj/item/weapon/circuitboard/intercom + category = "Engineering" + +/datum/autolathe/recipe/holopad + name = "holopad electronics" + path = /obj/item/weapon/circuitboard/holopad + category = "Engineering" + +/datum/autolathe/recipe/guestpass + name = "guestpass console electronics" + path = /obj/item/weapon/circuitboard/guestpass + category = "Engineering" + +/datum/autolathe/recipe/entertainment + name = "entertainment camera electronics" + path = /obj/item/weapon/circuitboard/security/telescreen/entertainment + category = "Engineering" + +/datum/autolathe/recipe/keycard + name = "keycard authenticator electronics" + path = /obj/item/weapon/circuitboard/keycard_auth + category = "Engineering" + +/datum/autolathe/recipe/photocopier + name = "photocopier electronics" + path = /obj/item/weapon/circuitboard/photocopier + category = "Engineering" + +/datum/autolathe/recipe/fax + name = "fax machine electronics" + path = /obj/item/weapon/circuitboard/fax + category = "Engineering" + +/datum/autolathe/recipe/conveyor + name = "conveyor electronics" + path = /obj/item/weapon/circuitboard/conveyor + category = "Engineering" + +/datum/autolathe/recipe/microwave + name = "microwave electronics" + path = /obj/item/weapon/circuitboard/microwave + category = "Engineering" + +/datum/autolathe/recipe/vending + name = "vending machine electronics" + path = /obj/item/weapon/circuitboard/vending + category = "Engineering" + +/datum/autolathe/recipe/washing + name = "washing machine electronics" + path = /obj/item/weapon/circuitboard/washing + category = "Engineering" + +/datum/autolathe/recipe/motor + name = "motor" + path = /obj/item/weapon/stock_parts/motor + category = "Engineering" + +/datum/autolathe/recipe/gear + name = "gear" + path = /obj/item/weapon/stock_parts/gear + category = "Engineering" + +/datum/autolathe/recipe/spring + name = "spring" + path = /obj/item/weapon/stock_parts/spring + category = "Engineering" + /datum/autolathe/recipe/rcd_ammo name = "matter cartridge" path = /obj/item/weapon/rcd_ammo diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 61ed92d58e5..f2500f0afaa 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -5,6 +5,7 @@ icon_state = "biogen-stand" density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/biogenerator use_power = 1 idle_power_usage = 40 var/processing = 0 @@ -23,7 +24,6 @@ beaker = new /obj/item/weapon/reagent_containers/glass/bottle(src) component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/biogenerator(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index a06b22927db..3f7a8d600ce 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -30,6 +30,7 @@ desc = "An electronically-lockable pod for growing organic tissue." density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/clonepod icon = 'icons/obj/cloning.dmi' icon_state = "pod_0" req_access = list(access_genetics) //For premature unlocking. @@ -47,7 +48,6 @@ /obj/machinery/clonepod/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonepod(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index e7f92e02375..4b64cbadce9 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -215,7 +215,8 @@ icon_screen = "entertainment" light_color = "#FFEEDB" light_range_on = 2 - circuit = null + network = list(NETWORK_THUNDER) + circuit = /obj/item/weapon/circuitboard/security/telescreen/entertainment /obj/machinery/computer/security/wooden_tv name = "security camera monitor" desc = "An old TV hooked into the stations camera network." diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index d9d5f4707be..6f380739cc4 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 300 active_power_usage = 300 - var/circuit = null //The path to the circuit board type. If circuit==null, the computer can't be disassembled. + frame_type = "computer" var/processing = 0 var/icon_keyboard = "generic_key" @@ -98,23 +98,28 @@ /obj/machinery/computer/attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) if(do_after(user, 20)) - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M A.anchored = 1 + A.density = 1 + A.frame_type = M.board_type for (var/obj/C in src) - C.loc = src.loc + C.forceMove(loc) if (src.stat & BROKEN) user << "The broken glass falls out." new /obj/item/weapon/material/shard( src.loc ) A.state = 3 - A.icon_state = "3" + A.icon_state = "[A.frame_type]_3" else user << "You disconnect the monitor." A.state = 4 - A.icon_state = "4" + A.icon_state = "[A.frame_type]_4" + A.pixel_x = pixel_x + A.pixel_y = pixel_y M.deconstruct(src) qdel(src) else diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index ccbce91b619..648df34dc0c 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -46,6 +46,7 @@ icon_keyboard = null icon_screen = "pass" density = 0 + circuit = /obj/item/weapon/circuitboard/guestpass var/obj/item/weapon/card/id/giver var/list/accesses = list() @@ -60,11 +61,30 @@ ..() uid = "[rand(100,999)]-G[rand(10,99)]" -/obj/machinery/computer/guestpass/attackby(obj/O, mob/user) - if(istype(O, /obj/item/weapon/card/id)) - if(!giver && user.unEquip(O)) - O.loc = src - giver = O +/obj/machinery/computer/guestpass/attackby(obj/I, mob/user) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "guestpass" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "guestpass_4" + M.deconstruct(src) + qdel(src) + return + if(istype(I, /obj/item/weapon/card/id)) + if(!giver && user.unEquip(I)) + I.loc = src + giver = I updateUsrDialog() else if(giver) user << "There is already ID card inside." diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index c2c45987063..1c54fb0f4ce 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -26,32 +26,6 @@ var/prison_shuttle_timeleft = 0 attack_ai(var/mob/user as mob) return src.attack_hand(user) - attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/prison_shuttle/M = new /obj/item/weapon/circuitboard/prison_shuttle( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.anchored = 1 - - if (src.stat & BROKEN) - user << "The broken glass falls out." - new /obj/item/weapon/material/shard( src.loc ) - A.state = 3 - A.icon_state = "3" - else - user << "You disconnect the monitor." - A.state = 4 - A.icon_state = "4" - - qdel(src) - else - return src.attack_hand(user) - - attack_hand(var/mob/user as mob) if(!src.allowed(user) && (!hacked)) user << "Access Denied." diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm index 37d9a67d924..e0040a6d838 100644 --- a/code/game/machinery/computer3/computer.dm +++ b/code/game/machinery/computer3/computer.dm @@ -29,7 +29,7 @@ // when you had to search the list to find what you had. // Mostly decorative, holds the OS rom - var/obj/item/part/computer/circuitboard/circuit + var/obj/item/part/computer/circuitboard/circuitb // Storage var/obj/item/part/computer/storage/hdd/hdd = null @@ -97,11 +97,11 @@ overlays += kb if(!built) - if(!circuit || !istype(circuit)) - circuit = new(src) - if(circuit.OS) - os = circuit.OS - circuit.OS.computer = src + if(!circuitb || !istype(circuitb)) + circuitb = new(src) + if(circuitb.OS) + os = circuitb.OS + circuitb.OS.computer = src else os = null @@ -121,10 +121,10 @@ floppy.addfile(P) program = P else - circuit.OS = P - circuit.OS.computer = src - os = circuit.OS - circuit.name = "Circuitboard ([P])" + circuitb.OS = P + circuitb.OS.computer = src + os = circuitb.OS + circuitb.name = "Circuitboard ([P])" if(hdd) // Spawn files diff --git a/code/game/machinery/computer3/computers/camera.dm b/code/game/machinery/computer3/computers/camera.dm index 5a1b3acc0e2..0f92519c361 100644 --- a/code/game/machinery/computer3/computers/camera.dm +++ b/code/game/machinery/computer3/computers/camera.dm @@ -26,7 +26,7 @@ New() ..(built=0) os = program - circuit.OS = os + circuitb.OS = os /obj/machinery/computer3/security/mining diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 08d47db1582..266aeb2f234 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -221,7 +221,7 @@ if (stat & BROKEN) new /obj/item/weapon/circuitboard/broken(src.loc) else - new/obj/item/weapon/airalarm_electronics(src.loc) + new/obj/item/weapon/circuitboard/airalarm(src.loc) var/obj/structure/firedoor_assembly/FA = new/obj/structure/firedoor_assembly(src.loc) FA.anchored = 1 diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index c01fff5bed3..a96065d2c6d 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -36,7 +36,7 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob) new/obj/item/stack/cable_coil(src.loc, 1) wired = 0 - else if(istype(C, /obj/item/weapon/airalarm_electronics) && wired) + else if(istype(C, /obj/item/weapon/circuitboard/airalarm) && wired) if(anchored) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] has inserted a circuit into \the [src]!", diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm new file mode 100644 index 00000000000..35f0cf6af0c --- /dev/null +++ b/code/game/machinery/frame.dm @@ -0,0 +1,412 @@ +/obj/structure/frame + anchored = 0 + name = "frame" + icon = 'icons/obj/stock_parts.dmi' + icon_state = "machine_0" + var/state = 0 + var/obj/item/weapon/circuitboard/circuit = null + var/need_circuit = 1 + var/frame_type = "machine" + + var/list/components = null + var/list/req_components = null + var/list/req_component_names = null + + var/list/alarms = list("firealarm", "airalarm", "intercom", "keycard") + var/list/machines = list("machine", "photocopier", "fax", "microwave", "conveyor", "vending", "recharger", "wrecharger", "washing", "grinder") + var/list/computers = list("computer", "holopad") + var/list/displays = list("display", "guestpass", "newscaster", "atm") + var/list/no_circuit = list("wrecharger", "recharger", "grinder","conveyor") + +/obj/structure/frame/proc/update_desc() + var/D + if(req_components) + var/list/component_list = new + for(var/I in req_components) + if(req_components[I] > 0) + component_list += "[num2text(req_components[I])] [req_component_names[I]]" + D = "Requires [english_list(component_list)]." + desc = D + +/obj/structure/frame/proc/check_components(mob/user as mob) + components = list() + req_components = circuit.req_components.Copy() + for(var/A in circuit.req_components) + req_components[A] = circuit.req_components[A] + req_component_names = circuit.req_components.Copy() + for(var/A in req_components) + var/cp = text2path(A) + var/obj/ct = new cp() // have to quickly instantiate it get name + req_component_names[A] = ct.name + +/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/obj/item/frame/frame_type, mob/user as mob) + ..() + if(building) + src.frame_type = frame_type + icon_state = "[frame_type]_0" + + if(frame_type in alarms) + if(loc) + src.loc = loc + + state = 0 + if(frame_type == "airalarm" || frame_type == "firealarm" || frame_type == "keycard") + if(dir) + src.set_dir(dir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) + pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0 + + if(frame_type == "intercom") + if(dir) + src.set_dir(dir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -28 : 28) : 0 + + update_icon() + return + + if(frame_type in displays) + if(loc) + src.loc = loc + + if(frame_type == "display" || frame_type == "atm") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0 + + if(frame_type == "newscaster") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + + if(frame_type == "guestpass") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + + update_icon() + return + + if(frame_type in no_circuit) + need_circuit = 0 + if(frame_type == "wrecharger") + circuit = new /obj/item/weapon/circuitboard/recharger/wrecharger(src) + if(loc) + src.loc = loc + + state = 0 + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -26 : 32) + pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0 + + update_icon() + return + if(frame_type == "recharger") + circuit = new /obj/item/weapon/circuitboard/recharger(src) + if(frame_type == "grinder") + circuit = new /obj/item/weapon/circuitboard/grinder(src) + if(frame_type == "conveyor") + circuit = new /obj/item/weapon/circuitboard/conveyor(src) + if(dir) + src.set_dir(dir) + + if(frame_type == "computer") + density = 1 + if(frame_type in machines) + density = 1 + return + +/obj/structure/frame/attackby(obj/item/P as obj, mob/user as mob) + if(istype(P, /obj/item/weapon/wrench)) + if(state == 0) + user << "You start to wrench the frame into place." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + src.anchored = 1 + if(!need_circuit && circuit) + src.state = 2 + check_components() + update_desc() + src.icon_state = "[frame_type]_2" + user << "You wrench the frame into place and set the outer cover." + else + src.state = 1 + user << "You wrench the frame into place." + return + + if(state == 1) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the frame." + src.anchored = 0 + src.state = 0 + return + + if(istype(P, /obj/item/weapon/weldingtool)) + if(state == 0) + var/obj/item/weapon/weldingtool/WT = P + if(!WT.remove_fuel(0, user)) + user << "The welding tool must be on to complete this task." + return + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(do_after(user, 20)) + if(!src || !WT.isOn()) return + user << "You deconstruct the frame." + if(frame_type == "holopad" || frame_type == "microwave") + new /obj/item/stack/material/steel( src.loc, 4 ) + else if(frame_type == "fax" || frame_type == "newscaster" || frame_type == "recharger" || frame_type == "wrecharger" || frame_type == "grinder") + new /obj/item/stack/material/steel( src.loc, 3 ) + else if(frame_type == "firealarm" || frame_type == "airalarm" || frame_type == "intercom" || frame_type == "guestpass") + new /obj/item/stack/material/steel( src.loc, 2 ) + else if(frame_type == "keycard") + new /obj/item/stack/material/steel( src.loc, 1 ) + else + new /obj/item/stack/material/steel( src.loc, 5 ) + qdel(src) + return + + if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit) + if(state == 1) + var/obj/item/weapon/circuitboard/B = P + if(B.board_type == frame_type) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You place the circuit board inside the frame." + src.icon_state = "[frame_type]_1" + src.circuit = P + user.drop_item() + P.loc = src + if(frame_type in machines) //because machines are assholes + check_components() + update_desc() + return + else + user << "This frame does not accept circuit boards of this type!" + return + + if(istype(P, /obj/item/weapon/screwdriver)) + if(state == 1) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You screw the circuit board into place." + src.state = 2 + src.icon_state = "[frame_type]_2" + return + + if(state == 2) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You unfasten the circuit board." + src.state = 1 + src.icon_state = "[frame_type]_1" + return + + if(!need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You unfasten the outer cover." + src.state = 1 + src.icon_state = "[frame_type]_0" + return + + if(state == 3) + if(frame_type in machines) + var/component_check = 1 + for(var/R in req_components) + if(req_components[R] > 0) + component_check = 0 + break + if(component_check) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir) + if(!new_machine.component_parts) + for(var/obj/O in src.components) + O.forceMove(null) + new_machine.RefreshParts() + + src.circuit.construct(new_machine) + new_machine.pixel_x = src.pixel_x + new_machine.pixel_y = src.pixel_y + qdel(src) + return + + if(frame_type in alarms) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You fasten the cover." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + B.set_dir(dir) + src.circuit.construct(B) + qdel(src) + return + + if(state == 4) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You connect the monitor." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + src.circuit.construct(B) + qdel(src) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You connect the monitor." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + src.circuit.construct(B) + qdel(src) + return + + if(istype(P, /obj/item/weapon/crowbar)) + if(state == 1) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the circuit board." + src.state = 1 + src.icon_state = "[frame_type]_0" + circuit.loc = src.loc + src.circuit = null + if(frame_type in machines) //becuase machines are assholes + req_components = null + return + + if(state == 3) + if(frame_type in machines) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + if(components.len == 0) + user << "There are no components to remove." + else + user << "You remove the components." + for(var/obj/item/weapon/W in components) + W.forceMove(loc) + check_components() + update_desc() + user << desc + return + + if(state == 4) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass panel." + src.state = 3 + src.icon_state = "[frame_type]_3" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass panel." + src.state = 3 + src.icon_state = "[frame_type]_3" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(istype(P, /obj/item/stack/cable_coil)) + if(state == 2) + var/obj/item/stack/cable_coil/C = P + if (C.get_amount() < 5) + user << "You need five coils of wire to add them to the frame." + return + user << "You start to add cables to the frame." + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && state == 2) + if (C.use(5)) + user << "You add cables to the frame." + state = 3 + icon_state = "[frame_type]_3" + if(frame_type in machines) + user << desc + return + + if(istype(P, /obj/item/weapon/wirecutters)) + if(state == 3) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in alarms) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in machines) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass") + if(state == 3) + if(frame_type in computers) + var/obj/item/stack/G = P + if (G.get_amount() < 2) + user << "You need two sheets of glass to put in the glass panel." + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You start to put in the glass panel." + if(do_after(user, 20) && state == 3) + if (G.use(2)) + user << "You put in the glass panel." + src.state = 4 + src.icon_state = "[frame_type]_4" + return + + if(frame_type in displays) + var/obj/item/stack/G = P + if (G.get_amount() < 2) + user << "You need two sheets of glass to put in the glass panel." + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You start to put in the glass panel." + if(do_after(user, 20) && state == 3) + if (G.use(2)) + user << "You put in the glass panel." + src.state = 4 + src.icon_state = "[frame_type]_4" + return + + if(istype(P, /obj/item)) + if(state == 3) + if(frame_type in machines) + for(var/I in req_components) + if(istype(P, text2path(I)) && (req_components[I] > 0)) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + if(istype(P, /obj/item/stack)) + var/obj/item/stack/CP = P + if(CP.get_amount() > 1) + var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided + var/obj/item/stack/CC = new /obj/item/stack(src) + CC.amount = camt + CC.update_icon() + CP.use(camt) + components += CC + req_components[I] -= camt + update_desc() + break + user.drop_item() + P.forceMove(src) + components += P + req_components[I]-- + update_desc() + break + user << desc + if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil) && !istype(P, /obj/item/stack/material)) + user << "You cannot add that component to the machine!" + return \ No newline at end of file diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index d34acd5d2d4..58c8423a23e 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -36,6 +36,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." icon_state = "holopad0" show_messages = 1 + circuit = /obj/item/weapon/circuitboard/holopad layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. @@ -47,6 +48,30 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/last_request = 0 //to prevent request spam. ~Carn var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. +/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start removing the glass." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.circuit = M + A.anchored = 1 + A.density = 1 + A.frame_type = "holopad" + for (var/obj/C in src) + C.forceMove(loc) + user << "You remove the glass." + A.state = 4 + A.icon_state = "holopad_4" + M.deconstruct(src) + for (var/mob/living/silicon/ai/master in masters) + clear_holo(master) + qdel(src) + else + src.attack_hand(user) + return + /obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests. if(!istype(user)) return diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index d2fa5478cbb..1df586b809e 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -62,6 +62,19 @@ user << "You attach \the [W] to \the [src]." src.update_icon() return + + if(istype(W, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You start to dismantle the IV drip." + if(do_after(user, 15)) + user << "You dismantle the IV drip." + var/obj/item/stack/rods/A = new /obj/item/stack/rods( src.loc ) + A.amount = 6 + if(src.beaker) + src.beaker.loc = get_turf(src) + src.beaker = null + qdel(src) + return else return ..() diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index e78f2b52271..ace68645d8a 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -10,6 +10,7 @@ idle_power_usage = 5 active_power_usage = 100 flags = OPENCONTAINER | NOREACT + circuit = /obj/item/weapon/circuitboard/microwave var/operating = 0 // Is it on? var/dirty = 0 // = {0..100} Does it need cleaning? var/broken = 0 // ={0,1,2} How broken is it??? @@ -29,6 +30,13 @@ ..() reagents = new/datum/reagents(100) reagents.my_atom = src + + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + RefreshParts() + if (!available_recipes) available_recipes = new for (var/type in (typesof(/datum/recipe)-/datum/recipe)) @@ -82,6 +90,11 @@ else user << "It's broken!" return 1 + else if(default_deconstruction_screwdriver(user, O)) + return + else if(default_deconstruction_crowbar(user, O)) + return + else if(src.dirty==100) // The microwave is all dirty so can't be used! if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner)) // If they're trying to clean it then let them user.visible_message( \ diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index ded7ebc9b98..74f60a3a729 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -7,10 +7,12 @@ icon = 'icons/obj/power.dmi' icon_state = "light1" anchored = 1.0 + use_power = 1 + idle_power_usage = 10 + power_channel = LIGHT var/on = 1 var/area/area = null var/otherarea = null - // luminosity = 1 /obj/machinery/light_switch/New() ..() @@ -31,8 +33,12 @@ /obj/machinery/light_switch/proc/updateicon() if(stat & NOPOWER) icon_state = "light-p" + set_light(0) + layer = OBJ_LAYER else icon_state = "light[on]" + set_light(2, 1.5, on ? "#82FF4C" : "#F86060") + layer = LIGHTING_LAYER+0.1 /obj/machinery/light_switch/examine(mob/user) if(..(user, 1)) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 6c391b75b5e..9ad2fd73eb1 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -112,6 +112,8 @@ Class Procs: var/panel_open = 0 var/global/gl_uid = 1 var/interact_offline = 0 // Can the machine be interacted with while de-powered. + var/circuit = null + var/frame_type = "machine" /obj/machinery/New(l, d=0) ..(l) @@ -225,11 +227,6 @@ Class Procs: istype(usr, /mob/living/silicon))) usr << "You don't have the dexterity to do this!" return 1 -/* - //distance checks are made by atom/proc/DblClick - if ((get_dist(src, user) > 1 || !istype(src.loc, /turf)) && !istype(user, /mob/living/silicon)) - return 1 -*/ if (ishuman(user)) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 55) @@ -280,29 +277,13 @@ Class Procs: return 1 return 0 -/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) - if(!istype(C)) - return 0 - if(!panel_open) - return 0 - . = dismantle() - -/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) - if(!istype(S)) - return 0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - panel_open = !panel_open - user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." - update_icon() - return 1 - /obj/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/weapon/storage/part_replacer/R) if(!istype(R)) return 0 if(!component_parts) return 0 if(panel_open) - var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts + var/obj/item/weapon/circuitboard/CB = circuit var/P for(var/obj/item/weapon/stock_parts/A in component_parts) for(var/D in CB.req_components) @@ -328,13 +309,45 @@ Class Procs: user << " [C.name]" return 1 +/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) + if(!istype(C)) + return 0 + if(!panel_open) + return 0 + . = dismantle() + +/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) + if(!istype(S)) + return 0 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + panel_open = !panel_open + user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." + update_icon() + return 1 + /obj/machinery/proc/dismantle() playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) - M.set_dir(src.dir) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - I.loc = loc + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.circuit = M + A.anchored = 1 + A.density = 1 + A.frame_type = M.board_type + if(A.frame_type in A.no_circuit) + A.need_circuit = 0 + for (var/obj/D in src) + D.forceMove(loc) + if(A.components) + A.components.Cut() + else + A.components = list() + component_parts = list() + A.icon_state = "[A.frame_type]_3" + A.state = 3 + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.check_components() + A.update_desc() + M.deconstruct(src) qdel(src) return 1 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 5a2663a7d1b..7bfe32d7191 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -167,7 +167,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co light_range = 0 anchored = 1 var/obj/machinery/exonet_node/node = null - + circuit = /obj/item/weapon/circuitboard/newscaster /obj/machinery/newscaster/security_unit //Security unit name = "Security Newscaster" @@ -751,32 +751,34 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co -/obj/machinery/newscaster/attackby(obj/item/I as obj, mob/user as mob) - if (src.isbroken) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] further abuses the shattered [src.name].") - else - if(istype(I, /obj/item/weapon) ) - var/obj/item/weapon/W = I - if(W.force <15) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] hits the [src.name] with the [W.name] with no visible effect." ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) +/obj/machinery/newscaster/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "newscaster" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + if (src.stat & isbroken == 1) + user << "The broken glass falls out." + new /obj/item/weapon/material/shard( src.loc ) + A.state = 3 + A.icon_state = "newscaster_3" else - src.hitstaken++ - if(src.hitstaken==3) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] smashes the [src.name]!" ) - src.isbroken=1 - playsound(src.loc, 'sound/effects/Glassbr3.ogg', 100, 1) - else - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] forcefully slams the [src.name] with the [I.name]!" ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) - else - user << "This does nothing." - src.update_icon() + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "newscaster_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return /obj/machinery/newscaster/attack_ai(mob/user as mob) return src.attack_hand(user) //or maybe it'll have some special functions? No idea. diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 992a93c40a9..72c125e8b26 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -14,6 +14,15 @@ obj/machinery/recharger var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered var/portable = 1 + circuit = /obj/item/weapon/circuitboard/recharger + frame_type = "recharger" + +obj/machinery/recharger/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + component_parts += new /obj/item/stack/cable_coil(src, 5) + RefreshParts() + return obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) if(istype(user,/mob/living/silicon)) @@ -52,6 +61,10 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) anchored = !anchored user << "You [anchored ? "attached" : "detached"] the recharger." playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + else if(default_deconstruction_screwdriver(user, G)) + return + else if(default_deconstruction_crowbar(user, G)) + return obj/machinery/recharger/attack_hand(mob/user as mob) if(istype(user,/mob/living/silicon)) @@ -156,3 +169,5 @@ obj/machinery/recharger/wallcharger icon_state_charging = "wrecharger1" icon_state_idle = "wrecharger0" portable = 0 + circuit = /obj/item/weapon/circuitboard/recharger/wrecharger + frame_type = "wrecharger" \ No newline at end of file diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index efcc8314c12..c3759100fb3 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -5,6 +5,7 @@ icon_state = "borgcharger0" density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/recharge_station use_power = 1 idle_power_usage = 50 var/mob/occupant = null @@ -25,7 +26,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/recharge_station(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index dd862a77543..8b0d78cb968 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -17,6 +17,7 @@ density = 0 use_power = 1 idle_power_usage = 10 + circuit = /obj/item/weapon/circuitboard/status_display var/mode = 1 // 0 = Blank // 1 = Shuttle timer // 2 = Arbitrary message(s) @@ -51,6 +52,29 @@ radio_controller.remove_object(src,frequency) return ..() +/obj/machinery/status_display/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "display" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "display_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + + // register for radio system /obj/machinery/status_display/initialize() ..() diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm index 0b7371c1b08..51fcfb4f51c 100644 --- a/code/game/machinery/status_display_ai.dm +++ b/code/game/machinery/status_display_ai.dm @@ -59,6 +59,7 @@ var/list/ai_status_emotions = list( name = "AI display" anchored = 1 density = 0 + circuit = /obj/item/weapon/circuitboard/ai_status_display var/mode = 0 // 0 = Blank // 1 = AI emoticon @@ -68,6 +69,28 @@ var/list/ai_status_emotions = list( var/emotion = "Neutral" +/obj/machinery/ai_status_display/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "display" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "display_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + /obj/machinery/ai_status_display/attack_ai/(mob/user as mob) var/list/ai_emotions = get_ai_emotions(user.ckey) var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 072c99322fe..b9cc3428f93 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -10,6 +10,7 @@ var/screen = 0 // the screen number: var/list/servers = list() // the servers located by the computer var/obj/machinery/telecomms/server/SelectedServer + circuit = /obj/item/weapon/circuitboard/comm_server var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages @@ -188,36 +189,6 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/server/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 2859083c9d6..2b3561395f5 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -98,8 +98,8 @@ // Drop a circuit board too C.loc = user.loc - // Create a machine frame and delete the current machine - var/obj/machinery/constructable_frame/machine_frame/F = new + // Create a frame and delete the current machine + var/obj/structure/frame/F = new F.loc = src.loc qdel(src) diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 24549bd8b71..6567012a800 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -14,6 +14,7 @@ var/screen = 0 // the screen number: var/list/machinelist = list() // the machines located by the computer var/obj/machinery/telecomms/SelectedMachine + circuit = /obj/item/weapon/circuitboard/comm_monitor var/network = "NULL" // the network to probe @@ -123,36 +124,6 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index e941a268ef9..0d372b2aaae 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -14,6 +14,7 @@ var/mob/lasteditor var/list/viewingcode = list() var/obj/machinery/telecomms/server/SelectedServer + circuit = /obj/item/weapon/circuitboard/comm_traffic var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages @@ -206,40 +207,10 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/traffic/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) emagged = 1 user << "You you disable the security protocols" src.updateUsrDialog() - return 1 + return 1 \ No newline at end of file diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index b1b8d497b33..8099103d8af 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -36,6 +36,8 @@ layer = 2.9 anchored = 1 density = 1 + circuit = /obj/item/weapon/circuitboard/vending + frame_type = "vending" var/icon_vend //Icon_state when vending var/icon_deny //Icon_state when denying access @@ -94,6 +96,14 @@ /obj/machinery/vending/New() ..() wires = new(src) + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/spring(src) + component_parts += new /obj/item/weapon/stock_parts/spring(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/stack/material/glass/reinforced(src, 2) + RefreshParts() spawn(4) if(src.product_slogans) src.slogan_list += splittext(src.product_slogans, ";") @@ -232,6 +242,8 @@ user << "You [anchored? "un" : ""]secured \the [src]!" anchored = !anchored return + else if(default_deconstruction_crowbar(user, W)) + return else @@ -922,7 +934,15 @@ icon_state = "engivend" icon_deny = "engivend-deny" req_access = list(access_engine_equip) - products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/cell/high = 10) + products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10, + /obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10, + /obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2, + /obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2, + /obj/item/weapon/circuitboard/intercom = 4,/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4, + /obj/item/weapon/circuitboard/atm = 0,/obj/item/weapon/circuitboard/guestpass = 0,/obj/item/weapon/circuitboard/keycard_auth = 0, + /obj/item/weapon/circuitboard/photocopier = 0,/obj/item/weapon/circuitboard/fax = 0,/obj/item/weapon/circuitboard/conveyor = 0, + /obj/item/weapon/circuitboard/microwave = 0,/obj/item/weapon/circuitboard/vending = 0,/obj/item/weapon/circuitboard/washing = 0, + /obj/item/weapon/stock_parts/motor = 0,/obj/item/weapon/stock_parts/spring = 0,/obj/item/weapon/stock_parts/gear = 0) contraband = list(/obj/item/weapon/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index c9182586c8c..fd0fd3ce7c2 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -1,13 +1,14 @@ /obj/item/frame - name = "frame" - desc = "Used for building machines." - icon = 'icons/obj/monitors.dmi' - icon_state = "fire_bitem" + name = "frame parts" + desc = "Used for building frames." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "frame_bitem" flags = CONDUCT - var/build_machine_type - var/refund_amt = 2 + var/build_machine_type = /obj/structure/frame + var/refund_amt = 5 var/refund_type = /obj/item/stack/material/steel var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) + var/frame_type = null /obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) @@ -16,7 +17,82 @@ return ..() -/obj/item/frame/proc/try_build(turf/on_wall) +/obj/item/frame/attack_self(mob/user as mob) + ..() + if(!build_machine_type) + return + + var/ndir + if(!frame_type) + var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Computer", "Machine", "Holopad", "Conveyor", + "Photocopier", "Fax", "Microwave", "Vending Machine", + "Recharger", "Washing Machine", "Grinder", + "Cancel") + + if(response == "Cancel") + return + + frame_type = lowertext(response) + + switch(response) + if("Holopad") + new /obj/item/stack/material/steel( usr.loc, 1 ) //holopads are smaller, they only need 4 sheets + if("Conveyor") + ndir = get_dir(src,usr) + if (!(ndir in cardinal)) + return + if("Fax") + new /obj/item/stack/material/steel( usr.loc, 2 ) //faxes are smaller, they only need 3 sheets + if("Microwave") + new /obj/item/stack/material/steel( usr.loc, 1 ) //microwaves are smaller, they only need 4 sheets + if("Vending Machine") + frame_type = "vending" + if("Recharger") + new /obj/item/stack/material/steel( usr.loc, 2 ) //rechargers are smaller, they only need 3 sheets + if("Washing Machine") + frame_type = "washing" + if("Grinder") + new /obj/item/stack/material/steel( usr.loc, 2 ) //grinders are smaller, they only need 3 sheets + + var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type) + M.fingerprints = src.fingerprints + M.fingerprintshidden = src.fingerprintshidden + M.fingerprintslast = src.fingerprintslast + qdel(src) + +/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob) + if(!frame_type) + var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Fire Alarm", "Air Alarm", "Display", "Newscaster", + "ATM", "Guest Pass Console", "Intercom", "Keycard Authenticator", + "Wall Charger", + "Cancel") + + if(response == "Cancel") + return + + frame_type = lowertext(response) + + switch(response) + if("Fire Alarm") + frame_type = "firealarm" + new /obj/item/stack/material/steel( usr.loc, 3 ) //fire alarms are smaller, they only need 2 sheets + if("Air Alarm") + frame_type = "airalarm" + new /obj/item/stack/material/steel( usr.loc, 3 ) //air alarms are smaller, they only need 2 sheets + if("Intercom") + new /obj/item/stack/material/steel( usr.loc, 3 ) //intercoms are smaller, they only need 2 sheets + if("Newscaster") + new /obj/item/stack/material/steel( usr.loc, 2 ) //newscasters are smaller, they only need 3 sheets + if("Guest Pass Console") + frame_type = "guestpass" + new /obj/item/stack/material/steel( usr.loc, 3 ) //guestpass consoles are smaller, they only need 2 sheets + if("Keycard Authenticator") + frame_type = "keycard" + new /obj/item/stack/material/steel( usr.loc, 4 ) //keycard authenticators are smaller, they only need 1 sheets + if("Wall Charger") + frame_type = "wrecharger" + new /obj/item/stack/material/steel( usr.loc, 2 ) //wall rechargers are smaller, they only need 3 sheets + if(!build_machine_type) return @@ -35,7 +111,7 @@ var/turf/loc = get_turf(usr) var/area/A = loc.loc if (!istype(loc, /turf/simulated/floor)) - usr << "\The [src] Alarm cannot be placed on this spot." + usr << "\The frame cannot be placed on this spot." return if (A.requires_power == 0 || A.name == "Space") usr << "\The [src] Alarm cannot be placed in this area." @@ -44,23 +120,12 @@ if(gotwallitem(loc, ndir)) usr << "There's already an item on this wall!" return - - var/obj/machinery/M = new build_machine_type(loc, ndir, 1) + var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type) M.fingerprints = src.fingerprints M.fingerprintshidden = src.fingerprintshidden M.fingerprintslast = src.fingerprintslast qdel(src) -/obj/item/frame/fire_alarm - name = "fire alarm frame" - desc = "Used for building fire alarms." - build_machine_type = /obj/machinery/firealarm - -/obj/item/frame/air_alarm - name = "air alarm frame" - desc = "Used for building air alarms." - build_machine_type = /obj/machinery/alarm - /obj/item/frame/light name = "light fixture frame" desc = "Used for building lights." @@ -68,9 +133,48 @@ icon_state = "tube-construct-item" build_machine_type = /obj/machinery/light_construct reverse = 1 + frame_type = 1 /obj/item/frame/light/small name = "small light fixture frame" icon_state = "bulb-construct-item" refund_amt = 1 build_machine_type = /obj/machinery/light_construct/small + frame_type = 1 + +/obj/item/frame/extinguisher_cabinet + name = "extinguisher cabinet frame" + desc = "Used for building fire extinguisher cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "extinguisher_empty" + refund_amt = 4 + build_machine_type = /obj/structure/extinguisher_cabinet + frame_type = 1 + +/obj/item/frame/noticeboard + name = "noticeboard frame" + desc = "Used for building noticeboards." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nboard00" + refund_amt = 4 + refund_type = /obj/item/stack/material/wood + build_machine_type = /obj/structure/noticeboard + frame_type = 1 + +/obj/item/frame/mirror + name = "mirror frame" + desc = "Used for building mirrors." + icon = 'icons/obj/watercloset.dmi' + icon_state = "mirror_frame" + refund_amt = 1 + build_machine_type = /obj/structure/mirror + frame_type = 1 + +/obj/item/frame/fireaxe_cabinet + name = "fire axe cabinet frame" + desc = "Used for building fire axe cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "fireaxe0101" + refund_amt = 4 + build_machine_type = /obj/structure/closet/fireaxecabinet + frame_type = 1 \ No newline at end of file diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index a22482a4168..830a848bfe7 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -4,6 +4,7 @@ icon_state = "wm_10" density = 1 anchored = 1.0 + circuit = /obj/item/weapon/circuitboard/washing var/state = 1 //1 = empty, open door //2 = empty, closed door @@ -13,14 +14,19 @@ //6 = blood, open door //7 = blood, closed door //8 = blood, running - var/panel = 0 - //0 = closed - //1 = open var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default. //0 = not hacked //1 = hacked var/gibs_ready = 0 var/obj/crayon + var/list/washing = list() + +/obj/machinery/washing_machine/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + RefreshParts() /obj/machinery/washing_machine/verb/start() set name = "Start Washing" @@ -34,25 +40,25 @@ usr << "The washing machine cannot run in this state." return - if( locate(/mob,contents) ) + if( locate(/mob,washing) ) state = 8 else state = 5 update_icon() sleep(200) - for(var/atom/A in contents) + for(var/atom/A in washing) A.clean_blood() - for(var/obj/item/I in contents) + for(var/obj/item/I in washing) I.decontaminate() //Tanning! - for(var/obj/item/stack/material/hairlesshide/HH in contents) + for(var/obj/item/stack/material/hairlesshide/HH in washing) var/obj/item/stack/material/wetleather/WL = new(src) WL.amount = HH.amount qdel(HH) - if( locate(/mob,contents) ) + if( locate(/mob,washing) ) state = 7 gibs_ready = 1 else @@ -70,9 +76,14 @@ /obj/machinery/washing_machine/update_icon() - icon_state = "wm_[state][panel]" + icon_state = "wm_[state][panel_open]" /obj/machinery/washing_machine/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(state == 2 && washing.len < 1) + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return /*if(istype(W,/obj/item/weapon/screwdriver)) panel = !panel user << "You [panel ? "open" : "close"] the [src]'s maintenance panel"*/ @@ -142,10 +153,11 @@ user << "This item does not fit." return - if(contents.len < 5) + if(washing.len < 5) if ( state in list(1, 3) ) user.drop_item() W.loc = src + washing += W state = 3 else user << "You can't put the item in right now." @@ -161,15 +173,17 @@ state = 2 if(2) state = 1 - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc + washing.Cut() if(3) state = 4 if(4) state = 3 - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc crayon = null + washing.Cut() state = 1 if(5) user << "The [src] is busy." @@ -178,13 +192,13 @@ if(7) if(gibs_ready) gibs_ready = 0 - if(locate(/mob,contents)) - var/mob/M = locate(/mob,contents) + if(locate(/mob,washing)) + var/mob/M = locate(/mob,washing) M.gib() - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc crayon = null state = 1 + washing.Cut() - - update_icon() + update_icon() \ No newline at end of file diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index cf50e695259..23c30d3a3d9 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -5,6 +5,7 @@ icon_state = "recharge_floor" density = 0 layer = TURF_LAYER + 0.1 + circuit = /obj/item/weapon/circuitboard/mech_recharger var/obj/mecha/charging = null var/charge = 45 @@ -14,7 +15,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mech_recharger(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 0685e6efd20..425b959d31d 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -9,6 +9,7 @@ idle_power_usage = 20 active_power_usage = 5000 req_access = list(access_robotics) + circuit = /obj/item/weapon/circuitboard/mechfab var/speed = 1 var/mat_efficiency = 1 @@ -29,7 +30,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mechfab(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) @@ -89,7 +89,7 @@ return ui_interact(user) -/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] var/datum/design/current = queue.len ? queue[1] : null diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6961e957ffe..f66b6686641 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -76,13 +76,10 @@ /obj/item/equipped() ..() - var/mob/M = loc + var/mob/living/M = loc if(!istype(M)) return - if(M.l_hand) - M.l_hand.update_held_icon() - if(M.r_hand) - M.r_hand.update_held_icon() + M.update_held_icons() /obj/item/Destroy() if(ismob(loc)) @@ -98,8 +95,8 @@ //Checks if the item is being held by a mob, and if so, updates the held icons /obj/item/proc/update_held_icon() - if(ismob(src.loc)) - var/mob/M = src.loc + if(isliving(src.loc)) + var/mob/living/M = src.loc if(M.l_hand == src) M.update_inv_l_hand() else if(M.r_hand == src) @@ -160,7 +157,7 @@ size = "huge" return ..(user, distance, "", "It is a [size] item.") -/obj/item/attack_hand(mob/user as mob) +/obj/item/attack_hand(mob/living/user as mob) if (!user) return if (hasorgans(user)) var/mob/living/carbon/human/H = user @@ -399,17 +396,15 @@ var/list/global/slot_flags_enumeration = list( if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain usr << "You can't pick things up!" return + var/mob/living/carbon/C = usr if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained usr << "You can't pick things up!" return if(src.anchored) //Object isn't anchored usr << "You can't pick that up!" return - if(!usr.hand && usr.r_hand) //Right hand is not full - usr << "Your right hand is full." - return - if(usr.hand && usr.l_hand) //Left hand is not full - usr << "Your left hand is full." + if(C.get_active_hand()) //Hand is not full + usr << "Your hand is full." return if(!istype(src.loc, /turf)) //Object is on a turf usr << "You can't pick that up!" diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index e5e94fc93d3..5b769ed8034 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -12,7 +12,7 @@ var/code = 2 -/obj/item/device/radio/electropack/attack_hand(mob/user as mob) +/obj/item/device/radio/electropack/attack_hand(mob/living/user as mob) if(src == user.back) user << "You need help taking this off!" return diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index ed8cf4ce0bc..7aaf609eca6 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -6,8 +6,10 @@ w_class = 4.0 canhear_range = 2 flags = CONDUCT | NOBLOODY + var/circuit = /obj/item/weapon/circuitboard/intercom var/number = 0 var/last_tick //used to delay the powercheck + var/wiresexposed = 0 /obj/item/device/radio/intercom/custom name = "station intercom (Custom)" @@ -81,6 +83,41 @@ spawn (0) attack_self(user) +/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob) + src.add_fingerprint(user) + if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up. + wiresexposed = !wiresexposed + user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + if(wiresexposed) + if(!on) + icon_state = "intercom-p_open" + else + icon_state = "intercom_open" + else + icon_state = "intercom" + return + if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + new/obj/item/stack/cable_coil(get_turf(src), 5) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "intercom" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.set_dir(dir) + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "intercom_2" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + /obj/item/device/radio/intercom/receive_range(freq, level) if (!on) return -1 @@ -110,9 +147,15 @@ on = A.powered(EQUIP) // set "on" to the power status if(!on) - icon_state = "intercom-p" + if(wiresexposed) + icon_state = "intercom-p_open" + else + icon_state = "intercom-p" else - icon_state = initial(icon_state) + if(wiresexposed) + icon_state = "intercom_open" + else + icon_state = initial(icon_state) /obj/item/device/radio/intercom/locked var/locked_frequency diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index b8b79a5ca16..451b2c41af1 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -209,7 +209,7 @@ amount = 5 max_amount = 5 -/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/user as mob) +/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob) if(..()) return 1 diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index c17d8ba6505..d196bc4ea7a 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -160,20 +160,7 @@ P.icon_state = "paper_words" if(istype(usr,/mob/living/carbon)) - // place the item in the usr's hand if possible - if(!usr.r_hand) - P.loc = usr - usr.r_hand = P - P.layer = 20 - else if(!usr.l_hand) - P.loc = usr - usr.l_hand = P - P.layer = 20 - - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_l_hand() - M.update_inv_r_hand() + usr.put_in_hands(src) /obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) if(!istype(M)) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index b156d569ad6..4772063b4c7 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -445,39 +445,36 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/weapon/flame/lighter/attack_self(mob/living/user) if(!base_state) base_state = icon_state - if(user.r_hand == src || user.l_hand == src) - if(!lit) - lit = 1 - icon_state = "[base_state]on" - item_state = "[base_state]on" - if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) - user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") - else - if(prob(95)) - user.visible_message("After a few attempts, [user] manages to light the [src].") - else - user << "You burn yourself while lighting the lighter." - 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.") - - set_light(2) - processing_objects.Add(src) + if(!lit) + lit = 1 + icon_state = "[base_state]on" + item_state = "[base_state]on" + if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) + user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") else - lit = 0 - icon_state = "[base_state]" - item_state = "[base_state]" - if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + if(prob(95)) + user.visible_message("After a few attempts, [user] manages to light the [src].") else - user.visible_message("[user] quietly shuts off the [src].") + user << "You burn yourself while lighting the lighter." + if (user.get_left_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.") - set_light(0) - processing_objects.Remove(src) + set_light(2) + processing_objects.Add(src) else - return ..() + lit = 0 + icon_state = "[base_state]" + item_state = "[base_state]" + if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) + user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + else + user.visible_message("[user] quietly shuts off the [src].") + + set_light(0) + processing_objects.Remove(src) return diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm index 60f8bce2684..0016fc730ab 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm @@ -29,6 +29,16 @@ network = list("MINE") req_access = list() +/obj/item/weapon/circuitboard/security/telescreen/entertainment + name = T_BOARD("entertainment camera monitor") + build_path = /obj/machinery/computer/security/telescreen/entertainment + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/security/telescreen/entertainment/New() + ..() + network = NETWORK_THUNDER + /obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C) if (..(C)) C.network = network.Copy() diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm new file mode 100644 index 00000000000..30be1d52f7b --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/frame.dm @@ -0,0 +1,253 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +//Circuitboards for frames (mostly wall based frames). Most of these don't fit into other categories. + +//Display + +/obj/item/weapon/circuitboard/guestpass + name = T_BOARD("guestpass console") + build_path = /obj/machinery/computer/guestpass + board_type = "guestpass" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/status_display + name = T_BOARD("status display") + build_path = /obj/machinery/status_display + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/ai_status_display + name = T_BOARD("ai status display") + build_path = /obj/machinery/ai_status_display + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/newscaster + name = T_BOARD("newscaster") + build_path = /obj/machinery/newscaster + board_type = "newscaster" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/atm + name = T_BOARD("atm") + build_path = /obj/machinery/atm + board_type = "atm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Alarm + +/obj/item/weapon/circuitboard/firealarm + name = T_BOARD("fire alarm") + build_path = /obj/machinery/firealarm + board_type = "firealarm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/airalarm + name = T_BOARD("air alarm") + build_path = /obj/machinery/alarm + board_type = "airalarm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/intercom + name = T_BOARD("intercom") + build_path = /obj/item/device/radio/intercom + board_type = "intercom" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/keycard_auth + name = T_BOARD("keycard authenticator") + build_path = /obj/machinery/keycard_auth + board_type = "keycard" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Computer + +/obj/item/weapon/circuitboard/holopad + name = T_BOARD("holopad") + build_path = /obj/machinery/hologram/holopad + board_type = "holopad" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Machine + +/obj/item/weapon/circuitboard/photocopier + name = T_BOARD("photocopier") + build_path = /obj/machinery/photocopier + board_type = "photocopier" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/matter_bin" = 1) + +/obj/item/weapon/circuitboard/fax + name = T_BOARD("fax") + build_path = /obj/machinery/photocopier/faxmachine + board_type = "fax" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/matter_bin" = 1) + +/obj/item/weapon/circuitboard/conveyor + name = T_BOARD("conveyor") + build_path = /obj/machinery/conveyor + board_type = "conveyor" + req_components = list( + "/obj/item/weapon/stock_parts/gear" = 2, + "/obj/item/weapon/stock_parts/motor" = 2, + "/obj/item/stack/cable_coil" = 5) + +/obj/item/weapon/circuitboard/microwave + name = T_BOARD("microwave") + build_path = /obj/machinery/microwave + board_type = "microwave" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/capacitor" = 1) + +/obj/item/weapon/circuitboard/vending + name = T_BOARD("vending") + build_path = /obj/machinery/vending + board_type = "vending" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/motor" = 2, + "/obj/item/weapon/stock_parts/spring" = 2, + "/obj/item/stack/material/glass/reinforced" = 2) + +/obj/item/weapon/circuitboard/recharger + name = T_BOARD("recharger") + build_path = /obj/machinery/recharger + board_type = "recharger" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/capacitor" = 1, + "/obj/item/stack/cable_coil" = 5) + +/obj/item/weapon/circuitboard/recharger/wrecharger + name = T_BOARD("wall recharger") + build_path = /obj/machinery/recharger/wallcharger + board_type = "wrecharger" + +/obj/item/weapon/circuitboard/washing + name = T_BOARD("washing machine") + build_path = /obj/machinery/washing_machine + board_type = "washing" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/gear" = 2) + +/obj/item/weapon/circuitboard/grinder + name = T_BOARD("reagent grinder") + build_path = /obj/machinery/reagentgrinder + board_type = "grinder" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/gear" = 1, + "/obj/item/weapon/reagent_containers/glass/beaker/large" = 1) + +//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways. +/obj/item/weapon/storage/box/frame_parts + display_contents_with_number = 1 + New() + ..() + new /obj/item/weapon/circuitboard/guestpass( src ) + new /obj/item/weapon/circuitboard/status_display( src ) + new /obj/item/weapon/circuitboard/ai_status_display( src ) + new /obj/item/weapon/circuitboard/newscaster( src ) + new /obj/item/weapon/circuitboard/atm( src ) + new /obj/item/weapon/circuitboard/firealarm( src ) + new /obj/item/weapon/circuitboard/airalarm( src ) + new /obj/item/weapon/circuitboard/intercom( src ) + new /obj/item/weapon/circuitboard/keycard_auth( src ) + new /obj/item/weapon/circuitboard/holopad( src ) + new /obj/item/weapon/circuitboard/photocopier( src ) + new /obj/item/weapon/circuitboard/fax( src ) + new /obj/item/weapon/circuitboard/microwave( src ) + new /obj/item/weapon/circuitboard/vending( src ) + new /obj/item/weapon/circuitboard/washing( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/stack/cable_coil( src , 5 ) + new /obj/item/stack/material/glass/reinforced( src , 2 ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm index 6d016a96fa1..da70371e4ac 100644 --- a/code/game/objects/items/weapons/circuitboards/other.dm +++ b/code/game/objects/items/weapons/circuitboards/other.dm @@ -1,5 +1,5 @@ #ifndef T_BOARD -#error T_BOARD macro is not defined but we need it! +#error T_BOARD macro is not defined but we need it! #endif //Stuff that doesn't fit into any category goes here @@ -7,4 +7,4 @@ /obj/item/weapon/circuitboard/aicore name = T_BOARD("AI core") origin_tech = list(TECH_DATA = 4, TECH_BIO = 2) - board_type = "other" + board_type = "other" \ No newline at end of file diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 218d2fb21cf..d92ad00babb 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -77,7 +77,5 @@ icon_state = "purplecomb" item_state = "purplecomb" -/obj/item/weapon/haircomb/attack_self(mob/user) - if(user.r_hand == src || user.l_hand == src) - user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a [].", user, src, user.gender == FEMALE ? "lady" : "guy")) - return +/obj/item/weapon/haircomb/attack_self(mob/living/user) + user.visible_message(text("[] uses [] to comb their hair with incredible style and sophistication. What a [].", user, src, user.gender == FEMALE ? "lady" : "guy")) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index bbdd46cdb39..8cd4c373e90 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -39,8 +39,8 @@ return null var/turf/location = loc if(istype(location, /mob/)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) + var/mob/living/M = location + if(M.item_is_in_hands(src)) location = M.loc if(isturf(location)) //start a fire if possible location.hotspot_expose(700, 2) diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 43b58a17264..73c198c8ab6 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -125,12 +125,12 @@ icon_state = "wrap_paper" var/amount = 20.0 -/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/item/weapon/wrapping_paper/attackby(obj/item/weapon/W as obj, mob/living/user as mob) ..() if (!( locate(/obj/structure/table, src.loc) )) user << "You MUST put the paper on a table!" if (W.w_class < 4) - if ((istype(user.l_hand, /obj/item/weapon/wirecutters) || istype(user.r_hand, /obj/item/weapon/wirecutters))) + if (user.get_type_in_hands(/obj/item/weapon/wirecutters)) var/a_used = 2 ** (src.w_class - 1) if (src.amount < a_used) user << "You need more paper!" diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 476ed726cd9..a6feac29981 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -24,8 +24,8 @@ return - attack_hand(mob/user as mob) - if ((src.case && (user.l_hand == src || user.r_hand == src))) + attack_hand(mob/living/user as mob) + if ((src.case && user.item_is_in_hands(src))) user.put_in_active_hand(case) src.case.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 2c11456b708..b404b69f0b9 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -29,7 +29,7 @@ /obj/item/weapon/material/twohanded/update_held_icon() var/mob/living/M = loc - if(istype(M) && !issmall(M) && ((M.r_hand == src && !M.l_hand) || (M.l_hand == src && !M.r_hand))) + if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full()) wielded = 1 force = force_wielded name = "[base_name] (wielded)" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 6a236e1b8f7..ac8da3d835c 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -214,7 +214,7 @@ spawn(1) if(src) qdel(src) /obj/item/weapon/melee/energy/blade/process() - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm index 66ae01797e7..e50f82966bf 100644 --- a/code/game/objects/items/weapons/mop_deploy.dm +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -59,7 +59,7 @@ spawn(1) if(src) del(src) /obj/item/weapon/mop_deploy/process() - if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src)) + if(!creator || loc != creator || !creator.item_is_in_hands(src)) // Tidy up a bit. if(istype(loc,/mob/living)) var/mob/living/carbon/human/host = loc diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index 92dd28c61a5..ffb4867ca68 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -21,7 +21,7 @@ var/linked -/obj/item/weapon/storage/laundry_basket/attack_hand(mob/user as mob) +/obj/item/weapon/storage/laundry_basket/attack_hand(mob/living/user as mob) if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.get_organ("r_hand") diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 0a5b1ec6868..a79d6575e5e 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -173,7 +173,7 @@ user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ) -/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob) if(istype(W,/obj/item/weapon/screwdriver)) if(welding) user << "Stop welding first!" @@ -222,9 +222,9 @@ //I'm not sure what this does. I assume it has to do with starting fires... //...but it doesnt check to see if the welder is on or not. var/turf/location = src.loc - if(istype(location, /mob/)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) + if(istype(location, /mob/living)) + var/mob/living/M = location + if(M.item_is_in_hands(src)) location = get_turf(M) if (istype(location, /turf)) location.hotspot_expose(700, 5) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index fa4fa27f758..bc10bc43596 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -90,11 +90,12 @@ // check for TK users if (istype(usr, /mob/living/carbon/human)) - if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/)) - if(!(usr in nearby)) - if(usr.client && usr.machine==src) + var/mob/living/carbon/human/H = usr + if(H.get_type_in_hands(/obj/item/tk_grab)) + if(!(H in nearby)) + if(H.client && H.machine==src) is_in_use = 1 - src.attack_hand(usr) + src.attack_hand(H) in_use = is_in_use /obj/proc/updateDialog() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index fcbe9e90605..0a3ca351227 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -297,6 +297,7 @@ new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/projectile/colt/detective(src) new /obj/item/clothing/accessory/holster/armpit(src) + new /obj/item/device/flashlight/maglight(src) return /obj/structure/closet/secure_closet/detective/update_icon() diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index cc67d80ac3b..fd3427e21e6 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -35,6 +35,21 @@ icon_state = "open" layer = SHOWER_OPEN_LAYER +/obj/structure/curtain/attackby(obj/item/P, mob/user) + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You start to cut the shower curtains." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 10)) + user << "You cut the shower curtains." + var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) + A.amount = 3 + qdel(src) + return + else + src.attack_hand(user) + return + /obj/structure/curtain/black name = "black curtain" color = "#222222" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index c8ccd4b32bd..dcc0270abc4 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -8,9 +8,19 @@ var/obj/item/weapon/extinguisher/has_extinguisher var/opened = 0 -/obj/structure/extinguisher_cabinet/New() +/obj/structure/extinguisher_cabinet/New(var/loc, var/dir, var/building = 0) ..() - has_extinguisher = new/obj/item/weapon/extinguisher(src) + + if(building) + if(loc) + src.loc = loc + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27) + pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 + update_icon() + return + else + has_extinguisher = new/obj/item/weapon/extinguisher(src) /obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user) if(isrobot(user)) @@ -23,12 +33,21 @@ user << "You place [O] in [src]." else opened = !opened + if(istype(O, /obj/item/weapon/wrench)) + if(!has_extinguisher) + user << "You start to unwrench the extinguisher cabinet." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 15)) + user << "You unwrench the extinguisher cabinet." + new /obj/item/frame/extinguisher_cabinet( src.loc ) + qdel(src) + return else opened = !opened update_icon() -/obj/structure/extinguisher_cabinet/attack_hand(mob/user) +/obj/structure/extinguisher_cabinet/attack_hand(mob/living/user) if(isrobot(user)) return if (ishuman(user)) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 17957cc5894..b3ad998895a 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -107,7 +107,7 @@ if(!isliving(usr)) return var/mob/living/user = usr - + if(href_list["take"]) switch(href_list["take"]) if("garbage") @@ -213,10 +213,10 @@ ..() -/obj/structure/bed/chair/janicart/relaymove(mob/user, direction) +/obj/structure/bed/chair/janicart/relaymove(mob/living/user, direction) if(user.stat || user.stunned || user.weakened || user.paralysis) unbuckle_mob() - if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key)) + if(user.get_type_in_hands(/obj/item/key)) step(src, direction) update_mob() else diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 88e771f8edd..a8747e07ec1 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -8,9 +8,18 @@ anchored = 1 var/shattered = 0 var/list/ui_users = list() + var/glass = 1 + +/obj/structure/mirror/New(var/loc, var/dir, var/building = 0, mob/user as mob) + if(building) + glass = 0 + icon_state = "mirror_frame" + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + return /obj/structure/mirror/attack_hand(mob/user as mob) - + if(!glass) return if(shattered) return if(ishuman(user)) @@ -22,6 +31,7 @@ AC.ui_interact(user) /obj/structure/mirror/proc/shatter() + if(!glass) return if(shattered) return shattered = 1 icon_state = "mirror_broke" @@ -34,18 +44,57 @@ if(prob(Proj.get_structure_damage() * 2)) if(!shattered) shatter() - else + else if(glass) playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) ..() /obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob) - if(shattered) + if(istype(I, /obj/item/weapon/wrench)) + if(!glass) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the frame." + new /obj/item/frame/mirror( src.loc ) + qdel(src) + return + if(istype(I, /obj/item/weapon/crowbar)) + if(shattered && glass) + user << "The broken glass falls out." + icon_state = "mirror_frame" + glass = !glass + new /obj/item/weapon/material/shard( src.loc ) + return + if(!shattered && glass) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass." + glass = !glass + icon_state = "mirror_frame" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(istype(I, /obj/item/stack/material/glass)) + if(!glass) + var/obj/item/stack/material/glass/G = I + if (G.get_amount() < 2) + user << "You need two sheets of glass to add them to the frame." + return + user << "You start to add the glass to the frame." + if(do_after(user, 20)) + if (G.use(2)) + shattered = 0 + glass = 1 + icon_state = "mirror" + user << "You add the glass to the frame." + return + + if(shattered && glass) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return if(prob(I.force * 2)) visible_message("[user] smashes [src] with [I]!") - shatter() + if(glass) + shatter() else visible_message("[user] hits [src] with [I]!") playsound(src.loc, 'sound/effects/Glasshit.ogg', 70, 1) @@ -53,13 +102,14 @@ /obj/structure/mirror/attack_generic(var/mob/user, var/damage) user.do_attack_animation(src) - if(shattered) + if(shattered && glass) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return 0 if(damage) user.visible_message("[user] smashes [src]!") - shatter() + if(glass) + shatter() else user.visible_message("[user] hits [src] and bounces off!") return 1 diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 3647d565f7e..174634e3cb9 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -7,6 +7,18 @@ anchored = 1 var/notices = 0 +/obj/structure/noticeboard/New(var/loc, var/dir, var/building = 0) + ..() + + if(building) + if(loc) + src.loc = loc + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 + update_icon() + return + /obj/structure/noticeboard/initialize() for(var/obj/item/I in loc) if(notices > 4) break @@ -28,6 +40,14 @@ user << "You pin the paper to the noticeboard." else user << "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached." + if(istype(O, /obj/item/weapon/wrench)) + user << "You start to unwrench the noticeboard." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 15)) + user << "You unwrench the noticeboard." + new /obj/item/frame/noticeboard( src.loc ) + qdel(src) + return /obj/structure/noticeboard/attack_hand(var/mob/user) examine(user) @@ -64,15 +84,14 @@ return var/obj/item/P = locate(href_list["write"]) if((P && P.loc == src)) //ifthe paper's on the board - if(istype(usr.r_hand, /obj/item/weapon/pen)) //and you're holding a pen - add_fingerprint(usr) - P.attackby(usr.r_hand, usr) //then do ittttt - else - if(istype(usr.l_hand, /obj/item/weapon/pen)) //check other hand for pen - add_fingerprint(usr) - P.attackby(usr.l_hand, usr) + var/mob/living/M = usr + if(istype(M)) + var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen) + if(E) + add_fingerprint(M) + P.attackby(E, usr) else - usr << "You'll need something to write with!" + M << "You'll need something to write with!" if(href_list["read"]) var/obj/item/weapon/paper/P = locate(href_list["read"]) if((P && P.loc == src)) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index a3904f65a1b..7003f4d3a22 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -90,7 +90,7 @@ FLOOR SAFES var/mob/living/carbon/human/user = usr var/canhear = 0 - if(istype(user.l_hand, /obj/item/clothing/accessory/stethoscope) || istype(user.r_hand, /obj/item/clothing/accessory/stethoscope)) + if(user.get_type_in_hands(/obj/item/clothing/accessory/stethoscope)) canhear = 1 if(href_list["open"]) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 8df5be2629f..4ac596267dc 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -358,7 +358,7 @@ if (ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.organs_by_name["r_hand"] - if (user.hand) + if (H.hand) temp = H.organs_by_name["l_hand"] if(temp && !temp.is_usable()) user << "You try to move your [temp.name], but cannot!" diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index cc91ee49a20..47a3c5a63e9 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -55,6 +55,20 @@ var/list/mechtoys = list( /mob/living/silicon/robot/drone ) +/obj/structure/plasticflaps/attackby(obj/item/P, mob/user) + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You start to cut the plastic flaps." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 10)) + user << "You cut the plastic flaps." + var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) + A.amount = 4 + qdel(src) + return + else + return + /obj/structure/plasticflaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) return prob(60) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index c3c395f15a8..b731905e5fb 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -94,7 +94,7 @@ ..() - on_found(mob/finder as mob) + on_found(mob/living/finder as mob) if(armed) finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ "You accidentally trigger [src]!") diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index a8887c17f59..a15a6aeb555 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -76,7 +76,7 @@ var/turf/location = src.loc if(istype(location, /mob/)) var/mob/living/carbon/human/M = location - if(M.l_hand == src || M.r_hand == src || M.head == src) + if(M.item_is_in_hands(src) || M.head == src) location = M.loc if (istype(location, /turf)) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 214f63c2237..ad83edfbc42 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -22,7 +22,7 @@ say_verbs = list("mumbles", "says") // Clumsy folks can't take the mask off themselves. -/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob) +/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob) if(user.wear_mask == src && !user.IsAdvancedToolUser()) return 0 ..() diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index c9526f16261..cda9d51796a 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -1,6 +1,6 @@ -/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/living/user as mob) - if(!istype(user,/mob/living)) return 0 + if(!istype(user)) return 0 if(electrified != 0) if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 41b0209e4d0..f98f222b937 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,6 +1,6 @@ /obj/item/clothing/suit/armor - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL @@ -263,7 +263,7 @@ icon_state = "kvest" item_state = "kvest" armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) - allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3931b3ec675..8a3daf68ff0 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -96,7 +96,7 @@ item_state = "det_suit" blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/det_trench/grey @@ -109,7 +109,7 @@ desc = "A forensics technician jacket." item_state = "det_suit" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/forensics/red diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index 31c5b6a3588..6aa4bdf99fb 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -15,7 +15,7 @@ var/mob/living/carbon/human/user = usr - if (!(user.l_hand == src || user.r_hand == src)) + if(!user.item_is_in_hands(src)) return //bag must be in your hands to use if (isturf(I.loc)) @@ -31,10 +31,8 @@ var/obj/item/weapon/storage/U = I.loc user.client.screen -= I U.contents.Remove(I) - else if(user.l_hand == I) //in a hand - user.drop_l_hand() - else if(user.r_hand == I) //in a hand - user.drop_r_hand() + else if(user.item_is_in_hands(I)) + user.drop_from_inventory(I) else return diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index ce8c4e765d8..bc0388d40d9 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -22,6 +22,7 @@ log transactions anchored = 1 use_power = 1 idle_power_usage = 10 + circuit = /obj/item/weapon/circuitboard/atm var/datum/money_account/authenticated_account var/number_incorrect_tries = 0 var/previous_account_number = 0 @@ -79,6 +80,25 @@ log transactions return 1 /obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "atm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "atm_4" + M.deconstruct(src) + qdel(src) + return if(istype(I, /obj/item/weapon/card)) if(emagged > 0) //prevent inserting id into an emagged ATM diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index d10659e24e2..51732366275 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -61,9 +61,12 @@ /datum/event/prison_break/tick() if(activeFor == releaseWhen) if(areas && areas.len > 0) + var/obj/machinery/power/apc/theAPC = null for(var/area/A in areas) - for(var/obj/machinery/light/L in A) - L.flicker(10) + theAPC = A.get_apc() + if(theAPC.operating) //If the apc's off, it's a little hard to overload the lights. + for(var/obj/machinery/light/L in A) + L.flicker(10) /datum/event/prison_break/end() diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 1ea1a9a3563..1b353e34071 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -77,12 +77,8 @@ usr << "There are no cards in the deck." return - var/obj/item/weapon/hand/H - if(user.l_hand && istype(user.l_hand,/obj/item/weapon/hand)) - H = user.l_hand - else if(user.r_hand && istype(user.r_hand,/obj/item/weapon/hand)) - H = user.r_hand - else + var/obj/item/weapon/hand/H = user.get_type_in_hands(/obj/item/weapon/hand) + if(!H) H = new(get_turf(src)) user.put_in_hands(H) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 160dec82f4b..608398a039c 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -172,7 +172,7 @@ if(seed) seed.thrown_at(src,hit_atom) ..() -/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/user) +/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/living/user) if(seed) if(seed.get_trait(TRAIT_PRODUCES_POWER) && istype(W, /obj/item/stack/cable_coil)) @@ -181,7 +181,7 @@ //TODO: generalize this. user << "You add some cable to the [src.name] and slide it inside the battery casing." var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user)) - if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human)) + if(src.loc == user && istype(user,/mob/living/carbon/human)) user.put_in_hands(pocell) pocell.maxcharge = src.potency * 10 pocell.charge = pocell.maxcharge diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 0dc46f9e352..0974a705ced 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -150,7 +150,7 @@ var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS for(var/obj/item/clothing/clothes in target) - if(target.l_hand == clothes|| target.r_hand == clothes) + if(target.item_is_in_hands(clothes)) continue body_coverage &= ~(clothes.body_parts_covered) @@ -182,7 +182,7 @@ continue var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS for(var/obj/item/clothing/clothes in M) - if(M.l_hand == clothes || M.r_hand == clothes) + if(M.item_is_in_hands(clothes)) continue body_coverage &= ~(clothes.body_parts_covered) if(!body_coverage) diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index b1d31343444..015ab88ccbf 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -94,16 +94,10 @@ user << "You load [W] into [src]." return - if(istype(W,/obj/item/weapon/screwdriver)) - open = !open - user << "You [open ? "open" : "close"] the maintenance panel." + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) return - - if(open) - if(istype(W, /obj/item/weapon/crowbar)) - dismantle() - return - if(istype(W,/obj/item/weapon/disk/botany)) if(loaded_disk) user << "There is already a data disk loaded." diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 1a76ad22fd0..856af9b3e8b 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -34,7 +34,7 @@ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src)) P.name = "paper - [form_title]" P.info = "[last_data]" - if(istype(user,/mob/living/carbon/human) && !(user.l_hand && user.r_hand)) + if(istype(user,/mob/living/carbon/human)) user.put_in_hands(P) user.visible_message("\The [src] spits out a piece of paper.") return diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 13caccfba02..3dbb74d9335 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -45,7 +45,7 @@ user << "You begin dismantling \the [src]." if(do_after(user,25)) user << "You dismantle \the [src]." - new /obj/item/stack/material/wood(get_turf(src), amount = 3) + new /obj/item/stack/material/wood(get_turf(src), 3) for(var/obj/item/weapon/book/b in contents) b.loc = (get_turf(src)) qdel(src) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 18c96cf622c..cf83cef983a 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -47,9 +47,11 @@ recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0) recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20) recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60) - recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1) + recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1) + //recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1) recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1) - recipes += new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe_list("airlock assemblies", list( \ new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ @@ -70,13 +72,17 @@ new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 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), \ )) - + recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade) recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2) recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1) recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2) - recipes += new/datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2) - recipes += new/datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2) + recipes += new/datum/stack_recipe_list("filing cabinets", list( \ + new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + )) /material/plasteel/generate_recipes() ..() @@ -84,6 +90,7 @@ recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1) recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]") recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20) + recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1) /material/sandstone/generate_recipes() ..() @@ -99,6 +106,10 @@ recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20) recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20) + recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 1, one_per_turf = 1, on_floor = 1) /material/wood/generate_recipes() ..() @@ -110,6 +121,7 @@ recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4) recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1) recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1) /material/cardboard/generate_recipes() ..() diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 760303ac238..25edc577289 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -128,7 +128,7 @@ var/list/name_to_material S.add_fingerprint(user) S.add_to_stacks(user) -/material/proc/build_wired_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) +/material/proc/build_wired_product(var/mob/living/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) if(!wire_product) user << "You cannot make anything out of \the [target_stack]" return @@ -140,8 +140,7 @@ var/list/name_to_material target_stack.use(1) user << "You attach wire to the [name]." var/obj/item/product = new wire_product(get_turf(user)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(product) + user.put_in_hands(product) // Make sure we have a display name and shard icon even if they aren't explicitly set. /material/New() diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 381072871f0..baa3306c88d 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -9,6 +9,7 @@ name = "mining drill head" desc = "An enormous drill." icon_state = "mining_drill" + circuit = /obj/item/weapon/circuitboard/miningdrill var/braces_needed = 2 var/list/supports = list() var/supported = 0 @@ -43,7 +44,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/miningdrill(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 7a2783767be..8e9155d044e 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -172,10 +172,9 @@ var/list/mining_overlay_cache = list() if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) - else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.get_inactive_hand() + if(istype(P)) + src.attackby(P, H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 77eedec9005..d5fde7978df 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -1,43 +1,3 @@ -//This proc is called whenever someone clicks an inventory ui slot. -/mob/proc/attack_ui(slot) - var/obj/item/W = get_active_hand() - if(istype(W)) - equip_to_slot_if_possible(W, slot) - -/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1) - if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob)) - return 1 - else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob)) - return 1 - return 0 - -//This is a SAFE proc. Use this instead of equip_to_slot()! -//set del_on_fail to have it delete W if it fails to equip -//set disable_warning to disable the 'you are unable to equip that' warning. -//unset redraw_mob to prevent the mob from being redrawn at the end. -/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1) - if(!istype(W)) return 0 - - if(!W.mob_can_equip(src, slot)) - if(del_on_fail) - qdel(W) - else - if(!disable_warning) - src << "\red You are unable to equip that." //Only print if del_on_fail is false - return 0 - - equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. - return 1 - -//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. -//In most cases you will want to use equip_to_slot_if_possible() -/mob/proc/equip_to_slot(obj/item/W as obj, slot) - return - -//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such. -/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot) - return equip_to_slot_if_possible(W, slot, 1, 1, 0) - //The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot. var/list/slot_equipment_priority = list( \ slot_back,\ @@ -58,6 +18,49 @@ var/list/slot_equipment_priority = list( \ slot_r_store\ ) +/mob + var/obj/item/weapon/storage/s_active = null // Even ghosts can/should be able to peek into boxes on the ground + +//This proc is called whenever someone clicks an inventory ui slot. +/mob/proc/attack_ui(var/slot) + var/obj/item/W = get_active_hand() + if(istype(W)) + equip_to_slot_if_possible(W, slot) + +/* Inventory manipulation */ + +/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1) + if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob)) + return 1 + else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob)) + return 1 + return 0 + +//This is a SAFE proc. Use this instead of equip_to_slot()! +//set del_on_fail to have it delete W if it fails to equip +//set disable_warning to disable the 'you are unable to equip that' warning. +//unset redraw_mob to prevent the mob from being redrawn at the end. +/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1) + if(!W.mob_can_equip(src, slot)) + if(del_on_fail) + qdel(W) + else + if(!disable_warning) + src << "\red You are unable to equip that." //Only print if del_on_fail is false + return 0 + + equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. + return 1 + +//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. +//In most cases you will want to use equip_to_slot_if_possible() +/mob/proc/equip_to_slot(obj/item/W as obj, slot) + return + +//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such. +/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot) + return equip_to_slot_if_possible(W, slot, 1, 1, 0) + //Checks if a given slot can be accessed at this time, either to equip or unequip I /mob/proc/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null) return 1 @@ -65,8 +68,6 @@ var/list/slot_equipment_priority = list( \ //puts the item "W" into an appropriate slot in a human's inventory //returns 0 if it cannot, 1 if successful /mob/proc/equip_to_appropriate_slot(obj/item/W) - if(!istype(W)) return 0 - for(var/slot in slot_equipment_priority) if(equip_to_slot_if_possible(W, slot, del_on_fail=0, disable_warning=1, redraw_mob=1)) return 1 @@ -74,32 +75,15 @@ var/list/slot_equipment_priority = list( \ return 0 /mob/proc/equip_to_storage(obj/item/newitem) - // Try put it in their backpack - if(istype(src.back,/obj/item/weapon/storage)) - var/obj/item/weapon/storage/backpack = src.back - if(backpack.contents.len < backpack.storage_slots) - newitem.forceMove(src.back) - return 1 - - // Try to place it in any item that can store stuff, on the mob. - for(var/obj/item/weapon/storage/S in src.contents) - if (S.contents.len < S.storage_slots) - newitem.forceMove(S) - return 1 return 0 -//These procs handle putting s tuff in your hand. It's probably best to use these rather than setting l_hand = ...etc -//as they handle all relevant stuff like adding it to the player's screen and updating their overlays. +/* Hands */ //Returns the thing in our active hand /mob/proc/get_active_hand() - if(hand) return l_hand - else return r_hand //Returns the thing in our inactive hand /mob/proc/get_inactive_hand() - if(hand) return r_hand - else return l_hand //Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success. /mob/proc/put_in_l_hand(var/obj/item/W) @@ -150,16 +134,15 @@ var/list/slot_equipment_priority = list( \ //Drops the item in our left hand /mob/proc/drop_l_hand(var/atom/Target) - return drop_from_inventory(l_hand, Target) + return 0 //Drops the item in our right hand /mob/proc/drop_r_hand(var/atom/Target) - return drop_from_inventory(r_hand, Target) + return 0 //Drops the item in our active hand. TODO: rename this to drop_active_hand or something /mob/proc/drop_item(var/atom/Target) - if(hand) return drop_l_hand(Target) - else return drop_r_hand(Target) + return /* Removes the object from any slots the mob might have, calling the appropriate icon update proc. @@ -173,19 +156,6 @@ var/list/slot_equipment_priority = list( \ the search through all the slots, without having to duplicate the rest of the item dropping. */ /mob/proc/u_equip(obj/W as obj) - if (W == r_hand) - r_hand = null - update_inv_r_hand(0) - else if (W == l_hand) - l_hand = null - update_inv_l_hand(0) - else if (W == back) - back = null - update_inv_back(0) - else if (W == wear_mask) - wear_mask = null - update_inv_wear_mask(0) - return /mob/proc/isEquipped(obj/item/I) if(!I) @@ -229,11 +199,6 @@ var/list/slot_equipment_priority = list( \ //Returns the item equipped to the specified slot, if any. /mob/proc/get_equipped_item(var/slot) - switch(slot) - if(slot_l_hand) return l_hand - if(slot_r_hand) return r_hand - if(slot_back) return back - if(slot_wear_mask) return wear_mask return null //Outdated but still in use apparently. This should at least be a human proc. diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 30e137c21a5..783af91c659 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -288,7 +288,7 @@ /* Assembly */ -/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob) +/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/living/user as mob) if(!istype(T, /obj/item/stack/tile/floor)) ..() return diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm index b9338f361ff..9bf9e62dfb9 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm @@ -2,7 +2,7 @@ var/mob/living/carbon/human/H = over_object if(!istype(H) || !Adjacent(H)) return ..() - if(H.a_intent == "grab" && hat && !(H.l_hand && H.r_hand)) + if(H.a_intent == "grab" && hat && !H.hands_are_full()) hat.loc = get_turf(src) H.put_in_hands(hat) H.visible_message("\The [H] removes \the [src]'s [hat].") diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm index 5c4be494ee5..14c8efbbadd 100644 --- a/code/modules/mob/living/carbon/give.dm +++ b/code/modules/mob/living/carbon/give.dm @@ -3,40 +3,40 @@ set name = "Give" // TODO : Change to incapacitated() on merge. - if(usr.stat || usr.lying || usr.resting || usr.buckled) + if(src.stat || src.lying || src.resting || src.buckled) return if(!istype(target) || target.stat || target.lying || target.resting || target.buckled || target.client == null) return - var/obj/item/I = usr.get_active_hand() + var/obj/item/I = src.get_active_hand() if(!I) - I = usr.get_inactive_hand() + I = src.get_inactive_hand() if(!I) - usr << "You don't have anything in your hands to give to \the [target]." + src << "You don't have anything in your hands to give to \the [target]." return - if(alert(target,"[usr] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No") - target.visible_message("\The [usr] tried to hand \the [I] to \the [target], \ + if(alert(target,"[src] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No") + target.visible_message("\The [src] tried to hand \the [I] to \the [target], \ but \the [target] didn't want it.") return if(!I) return if(!Adjacent(target)) - usr << "You need to stay in reaching distance while giving an object." - target << "\The [usr] moved too far away." + src << "You need to stay in reaching distance while giving an object." + target << "\The [src] moved too far away." return - if(I.loc != usr || (usr.l_hand != I && usr.r_hand != I)) - usr << "You need to keep the item in your hands." - target << "\The [usr] seems to have given up on passing \the [I] to you." + if(I.loc != src || !src.item_is_in_hands(I)) + src << "You need to keep the item in your hands." + target << "\The [src] seems to have given up on passing \the [I] to you." return - if(target.r_hand != null && target.l_hand != null) + if(target.hands_are_full()) target << "Your hands are full." - usr << "Their hands are full." + src << "Their hands are full." return - if(usr.unEquip(I)) + if(src.unEquip(I)) target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea. - target.visible_message("\The [usr] handed \the [I] to \the [target].") + target.visible_message("\The [src] handed \the [I] to \the [target].") diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 885d3e0866b..87c05245717 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -538,9 +538,9 @@ if ("handshake") m_type = 1 if (!src.restrained() && !src.r_hand) - var/mob/M = null + var/mob/living/M = null if (param) - for (var/mob/A in view(1, null)) + for (var/mob/living/A in view(1, null)) if (param == A.name) M = A break diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 37034b29ca1..74d8b54a930 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1115,9 +1115,11 @@ spawn(0) regenerate_icons() if(vessel.total_volume < species.blood_volume) + vessel.maximum_volume = species.blood_volume vessel.add_reagent("blood", species.blood_volume - vessel.total_volume) else if(vessel.total_volume > species.blood_volume) vessel.remove_reagent("blood", vessel.total_volume - species.blood_volume) + vessel.maximum_volume = species.blood_volume fixblood() // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index a8222dc2801..797b9b1fe63 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -207,7 +207,7 @@ var/covered = 0 // Basic coverage can help. for(var/obj/item/clothing/clothes in H) - if(H.l_hand == clothes|| H.r_hand == clothes) + if(H.item_is_in_hands(clothes)) continue if((clothes.body_parts_covered & UPPER_TORSO) && (clothes.body_parts_covered & LOWER_TORSO)) covered = 1 diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm new file mode 100644 index 00000000000..1cd446eaec4 --- /dev/null +++ b/code/modules/mob/living/inventory.dm @@ -0,0 +1,172 @@ +/mob/living + var/hand = null + var/obj/item/l_hand = null + var/obj/item/r_hand = null + var/obj/item/weapon/back = null//Human/Monkey + var/obj/item/weapon/tank/internal = null//Human/Monkey + var/obj/item/clothing/mask/wear_mask = null//Carbon + +/mob/living/equip_to_storage(obj/item/newitem) + // Try put it in their backpack + if(istype(src.back,/obj/item/weapon/storage)) + var/obj/item/weapon/storage/backpack = src.back + if(backpack.contents.len < backpack.storage_slots) + newitem.forceMove(src.back) + return 1 + + // Try to place it in any item that can store stuff, on the mob. + for(var/obj/item/weapon/storage/S in src.contents) + if (S.contents.len < S.storage_slots) + newitem.forceMove(S) + return 1 + return 0 + +//Returns the thing in our active hand +/mob/living/get_active_hand() + if(hand) return l_hand + else return r_hand + +//Returns the thing in our inactive hand +/mob/living/get_inactive_hand() + if(hand) return r_hand + else return l_hand + +//Drops the item in our active hand. TODO: rename this to drop_active_hand or something +/mob/living/drop_item(var/atom/Target) + if(hand) return drop_l_hand(Target) + else return drop_r_hand(Target) + +//Drops the item in our left hand +/mob/living/drop_l_hand(var/atom/Target) + return drop_from_inventory(l_hand, Target) + +//Drops the item in our right hand +/mob/living/drop_r_hand(var/atom/Target) + return drop_from_inventory(r_hand, Target) + +/mob/living/proc/hands_are_full() + return (r_hand && l_hand) + +/mob/living/proc/item_is_in_hands(var/obj/item/I) + return (I == r_hand || I == l_hand) + +/mob/living/proc/update_held_icons() + if(l_hand) + l_hand.update_held_icon() + if(r_hand) + r_hand.update_held_icon() + +/mob/living/proc/get_type_in_hands(var/T) + if(istype(l_hand, T)) + return l_hand + if(istype(r_hand, T)) + return r_hand + return null + +/mob/living/proc/get_left_hand() + return l_hand + +/mob/living/proc/get_right_hand() + return r_hand + +/mob/living/u_equip(obj/W as obj) + if (W == r_hand) + r_hand = null + update_inv_r_hand(0) + else if (W == l_hand) + l_hand = null + update_inv_l_hand(0) + else if (W == back) + back = null + update_inv_back(0) + else if (W == wear_mask) + wear_mask = null + update_inv_wear_mask(0) + return + +/mob/living/get_equipped_item(var/slot) + switch(slot) + if(slot_l_hand) return l_hand + if(slot_r_hand) return r_hand + if(slot_back) return back + if(slot_wear_mask) return wear_mask + return null + +/mob/living/show_inv(mob/user as mob) + user.set_machine(src) + var/dat = {" +
[name]
+

+
Head(Mask): [(wear_mask ? wear_mask : "Nothing")] +
Left Hand: [(l_hand ? l_hand : "Nothing")] +
Right Hand: [(r_hand ? r_hand : "Nothing")] +
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] +
[(internal ? text("Remove Internal") : "")] +
Empty Pockets +
Refresh +
Close +
"} + user << browse(dat, text("window=mob[];size=325x500", name)) + onclose(user, "mob[name]") + return + +/mob/living/ret_grab(obj/effect/list_container/mobl/L as obj, flag) + if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) + if (!( L )) + return null + else + return L.container + else + if (!( L )) + L = new /obj/effect/list_container/mobl( null ) + L.container += src + L.master = src + if (istype(l_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = l_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + if (G.affecting) + G.affecting.ret_grab(L, 1) + if (istype(r_hand, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = r_hand + if (!( L.container.Find(G.affecting) )) + L.container += G.affecting + if (G.affecting) + G.affecting.ret_grab(L, 1) + if (!( flag )) + if (L.master == src) + var/list/temp = list( ) + temp += L.container + //L = null + qdel(L) + return temp + else + return L.container + return + +/mob/living/mode() + set name = "Activate Held Object" + set category = "Object" + set src = usr + + if(istype(loc,/obj/mecha)) return + + if(hand) + var/obj/item/W = l_hand + if (W) + W.attack_self(src) + update_inv_l_hand() + else + var/obj/item/W = r_hand + if (W) + W.attack_self(src) + update_inv_r_hand() + return + +/mob/living/abiotic(var/full_body = 0) + if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) + return 1 + + if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) + return 1 + return 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 374ade2f219..70a3f4c3a26 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -865,3 +865,63 @@ default behaviour is: sleep(350) lastpuke = 0 +/mob/living/update_canmove() + if(!resting && cannot_stand() && can_stand_overridden()) + lying = 0 + canmove = 1 + else + if(istype(buckled, /obj/vehicle)) + var/obj/vehicle/V = buckled + if(cannot_stand()) + lying = 0 + canmove = 1 + pixel_y = V.mob_offset_y - 5 + else + if(buckled.buckle_lying != -1) lying = buckled.buckle_lying + canmove = 1 + pixel_y = V.mob_offset_y + else if(buckled) + anchored = 1 + canmove = 0 + if(istype(buckled)) + if(buckled.buckle_lying != -1) + lying = buckled.buckle_lying + if(buckled.buckle_movable) + anchored = 0 + canmove = 1 + + else if(cannot_stand()) + lying = 1 + canmove = 0 + else if(stunned) + canmove = 0 + else if(captured) + anchored = 1 + canmove = 0 + lying = 0 + else + lying = 0 + canmove = 1 + + if(lying) + density = 0 + if(l_hand) unEquip(l_hand) + if(r_hand) unEquip(r_hand) + else + density = initial(density) + + for(var/obj/item/weapon/grab/G in grabbed_by) + if(G.state >= GRAB_AGGRESSIVE) + canmove = 0 + break + + //Temporarily moved here from the various life() procs + //I'm fixing stuff incrementally so this will likely find a better home. + //It just makes sense for now. ~Carn + if( update_icon ) //forces a full overlay update + update_icon = 0 + regenerate_icons() + else if( lying != lying_prev ) + update_icons() + return canmove + 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 88f989f15ef..977dfce221a 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -11,8 +11,6 @@ //Has a list of items that it can hold. var/list/can_hold = list( /obj/item/weapon/cell, - /obj/item/weapon/firealarm_electronics, - /obj/item/weapon/airalarm_electronics, /obj/item/weapon/airlock_electronics, /obj/item/weapon/tracker_electronics, /obj/item/weapon/module/power_control, diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 5340ee39fb3..8b9271a40c3 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -71,7 +71,7 @@ //Parrots will generally sit on their pertch unless something catches their eye. //These vars store their preffered perch and if they dont have one, what they can use as a perch var/obj/parrot_perch = null - var/obj/desired_perches = list(/obj/structure/computerframe, /obj/structure/displaycase, \ + var/obj/desired_perches = list(/obj/structure/frame, /obj/structure/displaycase, \ /obj/structure/filingcabinet, /obj/machinery/teleport, \ /obj/machinery/computer, /obj/machinery/clonepod, \ /obj/machinery/dna_scannernew, /obj/machinery/telecomms, \ diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index abcaf66ae61..fdbb295b94e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -195,21 +195,6 @@ /mob/proc/show_inv(mob/user as mob) - user.set_machine(src) - var/dat = {" -
[name]
-

-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")] -
Left Hand: [(l_hand ? l_hand : "Nothing")] -
Right Hand: [(r_hand ? r_hand : "Nothing")] -
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] -
[(internal ? text("Remove Internal") : "")] -
Empty Pockets -
Refresh -
Close -
"} - user << browse(dat, text("window=mob[];size=325x500", name)) - onclose(user, "mob[name]") return //mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() @@ -248,37 +233,6 @@ /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) - if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) - if (!( L )) - return null - else - return L.container - else - if (!( L )) - L = new /obj/effect/list_container/mobl( null ) - L.container += src - L.master = src - if (istype(l_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = l_hand - if (!( L.container.Find(G.affecting) )) - L.container += G.affecting - if (G.affecting) - G.affecting.ret_grab(L, 1) - if (istype(r_hand, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = r_hand - if (!( L.container.Find(G.affecting) )) - L.container += G.affecting - if (G.affecting) - G.affecting.ret_grab(L, 1) - if (!( flag )) - if (L.master == src) - var/list/temp = list( ) - temp += L.container - //L = null - qdel(L) - return temp - else - return L.container return /mob/verb/mode() @@ -286,18 +240,6 @@ set category = "Object" set src = usr - if(istype(loc,/obj/mecha)) return - - if(hand) - var/obj/item/W = l_hand - if (W) - W.attack_self(src) - update_inv_l_hand() - else - var/obj/item/W = r_hand - if (W) - W.attack_self(src) - update_inv_r_hand() return /* @@ -735,65 +677,6 @@ //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. /mob/proc/update_canmove() - - if(!resting && cannot_stand() && can_stand_overridden()) - lying = 0 - canmove = 1 - else - if(istype(buckled, /obj/vehicle)) - var/obj/vehicle/V = buckled - if(cannot_stand()) - lying = 0 - canmove = 1 - pixel_y = V.mob_offset_y - 5 - else - if(buckled.buckle_lying != -1) lying = buckled.buckle_lying - canmove = 1 - pixel_y = V.mob_offset_y - else if(buckled) - anchored = 1 - canmove = 0 - if(istype(buckled)) - if(buckled.buckle_lying != -1) - lying = buckled.buckle_lying - if(buckled.buckle_movable) - anchored = 0 - canmove = 1 - - else if(cannot_stand()) - lying = 1 - canmove = 0 - else if(stunned) - canmove = 0 - else if(captured) - anchored = 1 - canmove = 0 - lying = 0 - else - lying = 0 - canmove = 1 - - if(lying) - density = 0 - if(l_hand) unEquip(l_hand) - if(r_hand) unEquip(r_hand) - else - density = initial(density) - - for(var/obj/item/weapon/grab/G in grabbed_by) - if(G.state >= GRAB_AGGRESSIVE) - canmove = 0 - break - - //Temporarily moved here from the various life() procs - //I'm fixing stuff incrementally so this will likely find a better home. - //It just makes sense for now. ~Carn - if( update_icon ) //forces a full overlay update - update_icon = 0 - regenerate_icons() - else if( lying != lying_prev ) - update_icons() - return canmove @@ -1007,8 +890,7 @@ mob/proc/yank_out_object() R.adjustFireLoss(10) selection.forceMove(get_turf(src)) - if(!(U.l_hand && U.r_hand)) - U.put_in_hands(selection) + U.put_in_hands(selection) for(var/obj/item/weapon/O in pinned) if(O == selection) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index eaa88e62124..7eb32ea8db6 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -60,7 +60,6 @@ var/next_move = null var/transforming = null //Carbon var/other = 0.0 - var/hand = null var/eye_blind = null //Carbon var/eye_blurry = null //Carbon var/ear_deaf = null //Carbon @@ -119,12 +118,6 @@ var/m_intent = "run"//Living var/lastKnownIP = null var/obj/buckled = null//Living - var/obj/item/l_hand = null//Living - var/obj/item/r_hand = null//Living - var/obj/item/weapon/back = null//Human/Monkey - var/obj/item/weapon/tank/internal = null//Human/Monkey - var/obj/item/weapon/storage/s_active = null//Carbon - var/obj/item/clothing/mask/wear_mask = null//Carbon var/seer = 0 //for cult//Carbon, probably Human diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index c85b8d96a23..ec83ced425f 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -5,8 +5,10 @@ ///Called by client/Move() ///Checks to see if you are grabbing anything and if moving will affect your grab. /client/proc/Process_Grab() - for(var/obj/item/weapon/grab/G in list(mob.l_hand, mob.r_hand)) - G.reset_kill_state() //no wandering across the station/asteroid while choking someone + if(istype(mob, /mob/living)) + var/mob/living/L = mob + for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand)) + G.reset_kill_state() //no wandering across the station/asteroid while choking someone /obj/item/weapon/grab name = "grab" diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 871215a519b..316e0e2f306 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -288,12 +288,6 @@ It's fairly easy to fix if dealing with single letters but not so much with comp /mob/proc/abiotic(var/full_body = 0) - if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) - return 1 - - if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) - return 1 - return 0 //converts intent-strings into numbers and back diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index a6ae6dc4a09..ceca667c39c 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -19,6 +19,15 @@ /mob/proc/update_inv_back() return +/mob/proc/update_inv_active_hand() + return + +/mob/living/update_inv_active_hand(var/A) + if(hand) + update_inv_l_hand(A) + else + update_inv_r_hand(A) + /mob/proc/update_inv_l_hand() return diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index e3452512d1b..ac27e85841d 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -98,7 +98,7 @@ if (2) take_damage(4) -/obj/item/organ/external/attack_self(var/mob/user) +/obj/item/organ/external/attack_self(var/mob/living/user) if(!contents.len) return ..() var/list/removable_objects = list() @@ -113,8 +113,7 @@ var/obj/item/I = pick(removable_objects) I.loc = get_turf(user) //just in case something was embedded that is not an item if(istype(I)) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(I) + user.put_in_hands(I) user.visible_message("\The [user] rips \the [I] out of \the [src]!") return //no eating the limb until everything's been removed return ..() @@ -128,7 +127,7 @@ usr << "There is \a [I] sticking out of it." return -/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/living/user as mob) switch(stage) if(0) if(istype(W,/obj/item/weapon/scalpel)) @@ -145,8 +144,7 @@ if(contents.len) var/obj/item/removing = pick(contents) removing.loc = get_turf(user.loc) - if(!(user.l_hand && user.r_hand)) - user.put_in_hands(removing) + user.put_in_hands(removing) user.visible_message("[user] extracts [removing] from [src] with [W]!") else user.visible_message("[user] fishes around fruitlessly in [src] with [W].") diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index a7d489ba537..dc7ec847772 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -14,6 +14,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins use_power = 1 idle_power_usage = 30 active_power_usage = 200 + frame_type = "fax" var/obj/item/weapon/card/id/scan = null // identification var/authenticated = 0 diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 67eb5c9aeba..57691fed9ba 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -17,12 +17,10 @@ density = 1 anchored = 1 - /obj/structure/filingcabinet/chestdrawer name = "chest drawer" icon_state = "chestdrawer" - /obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unecessary map issues, but please don't name stuff like this in the future -Pete icon_state = "tallcabinet" @@ -46,6 +44,16 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + else if(istype(P, /obj/item/weapon/screwdriver)) + user << "You begin taking the [name] apart." + if(do_after(user, 10)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You take the [name] apart." + new /obj/item/stack/material/steel( src.loc, 4 ) + for(var/obj/item/I in contents) + I.forceMove(loc) + qdel(src) + return else user << "You can't put [P] in [src]!" @@ -151,7 +159,7 @@ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) P.info = "
Medical Record

" P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" - + P.info += "
\n
Medical Data

\nBlood Type: [M.fields["b_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\n
Comments/Log

" var/counter = 1 while(M.fields["com_[counter]"]) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index cc8feae5b21..bb4a9d1a23f 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -337,8 +337,9 @@ var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen. var/iscrayon = 0 if(!istype(i, /obj/item/weapon/pen)) - if(usr.back && istype(usr.back,/obj/item/weapon/rig)) - var/obj/item/weapon/rig/r = usr.back + var/mob/living/M = usr + if(istype(M) && M.back && istype(M.back,/obj/item/weapon/rig)) + var/obj/item/weapon/rig/r = M.back var/obj/item/rig_module/device/pen/m = locate(/obj/item/rig_module/device/pen) in r.installed_modules if(!r.offline && m) i = m.device diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 6d24a8f238d..f29883a54cd 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -9,11 +9,21 @@ idle_power_usage = 30 active_power_usage = 200 power_channel = EQUIP + circuit = /obj/item/weapon/circuitboard/photocopier + frame_type = "photocopier" var/obj/item/copyitem = null //what's in the copier! var/copies = 1 //how many copies to print! var/toner = 30 //how much toner is left! woooooo~ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! +/obj/machinery/photocopier/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + RefreshParts() + /obj/machinery/photocopier/attack_ai(mob/user as mob) return attack_hand(user) @@ -126,6 +136,12 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + + else if(default_deconstruction_screwdriver(user, O)) + return + else if(default_deconstruction_crowbar(user, O)) + return + return /obj/machinery/photocopier/ex_act(severity) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 90ed7ccf59e..5787ff2d029 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -91,7 +91,7 @@ var/global/photo_count = 0 /obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj) if((istype(usr, /mob/living/carbon/human))) - var/mob/M = usr + var/mob/living/carbon/human/M = usr if(!( istype(over_object, /obj/screen) )) return ..() playsound(loc, "rustle", 50, 1, -5) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index a6954e9e2f0..f37cdce7063 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -52,6 +52,10 @@ name = "centcomm rubber stamp" icon_state = "stamp-cent" +/obj/item/weapon/stamp/qm + name = "quartermaster's stamp" + icon_state = "stamp-qm" + // Syndicate stamp to forge documents. /obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob) diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index a70b19421ec..2d7f38e3b99 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -9,6 +9,7 @@ input_level_max = 0 output_level_max = 0 icon_state = "gsmes" + circuit = /obj/item/weapon/circuitboard/batteryrack var/cells_amount = 0 var/capacitors_amount = 0 var/global/list/br_cache = null @@ -22,7 +23,6 @@ //Maybe this should be moved up to obj/machinery /obj/machinery/power/smes/batteryrack/proc/add_parts() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/batteryrack component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high @@ -49,7 +49,7 @@ /obj/machinery/power/smes/batteryrack/update_icon() overlays.Cut() if(stat & BROKEN) return - + if(!br_cache) br_cache = list() br_cache.len = 7 @@ -60,7 +60,7 @@ br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2") br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3") br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4") - + if (output_attempt) overlays += br_cache[1] if(inputting) @@ -83,9 +83,10 @@ if (charge < (capacity / 100)) if (!output_attempt && !input_attempt) playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/M = new /obj/structure/frame(src.loc) + M.frame_type = "machine" M.state = 2 - M.icon_state = "box_1" + M.icon_state = "machine_1" for(var/obj/I in component_parts) I.loc = src.loc qdel(src) @@ -117,12 +118,12 @@ /obj/machinery/power/smes/batteryrack/makeshift name = "makeshift PSU" desc = "A rack of batteries connected by a mess of wires posing as a PSU." + circuit = /obj/item/weapon/circuitboard/ghettosmes var/overcharge_percent = 0 /obj/machinery/power/smes/batteryrack/makeshift/add_parts() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/ghettosmes component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 400e7281b6f..41e182b91bc 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -287,14 +287,15 @@ else user << "\blue You close the access panel." else if(istype(O, /obj/item/weapon/crowbar) && open) - var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/new_frame = new /obj/structure/frame(src.loc) for(var/obj/item/I in component_parts) I.loc = src.loc while ( sheets > 0 ) DropFuel() + new_frame.frame_type = "machine" new_frame.state = 2 - new_frame.icon_state = "box_1" + new_frame.icon_state = "machine_1" qdel(src) /obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 05dae4fdbfd..29714847151 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -12,6 +12,7 @@ density = 1 anchored = 1 use_power = 0 + circuit = /obj/item/weapon/circuitboard/smes var/capacity = 5e6 // maximum charge var/charge = 1e6 // actual charge diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 497e16a885e..f14c084882a 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -116,7 +116,6 @@ /obj/machinery/power/smes/buildable/New(var/install_coils = 1) component_parts = list() component_parts += new /obj/item/stack/cable_coil(src,30) - component_parts += new /obj/item/weapon/circuitboard/smes(src) src.wires = new /datum/wires/smes(src) // Allows for mapped-in SMESs with larger capacity/IO @@ -345,9 +344,10 @@ return usr << "\red You have disassembled the SMES cell!" - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/M = new /obj/structure/frame(src.loc) + M.frame_type = "machine" M.state = 2 - M.icon_state = "box_1" + M.icon_state = "machine_1" for(var/obj/I in component_parts) I.loc = src.loc component_parts -= I diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 232adb345b8..dd1c2a56b60 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -407,25 +407,27 @@ var/list/solars_list = list() if(do_after(user, 20)) if (src.stat & BROKEN) user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) new /obj/item/weapon/material/shard( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M + A.frame_type = "computer" A.state = 3 - A.icon_state = "3" + A.icon_state = "computer_3" A.anchored = 1 qdel(src) else user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M + A.frame_type = "computer" A.state = 4 - A.icon_state = "4" + A.icon_state = "computer_4" A.anchored = 1 qdel(src) else diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3e801be0d14..44b36db8ac7 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -93,7 +93,7 @@ if(requires_two_hands) var/mob/living/M = loc if(istype(M)) - if((M.l_hand == src && !M.r_hand) || (M.r_hand == src && !M.l_hand)) + if(M.item_is_in_hands(src) && !M.hands_are_full()) name = "[initial(name)] (wielded)" item_state = wielded_icon else @@ -179,7 +179,7 @@ var/held_acc_mod = 0 var/held_disp_mod = 0 if(requires_two_hands) - if((user.l_hand == src && user.r_hand) || (user.r_hand == src && user.l_hand)) + if(user.item_is_in_hands(src) && user.hands_are_full()) held_acc_mod = -3 held_disp_mod = 3 diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 4763b83bb66..c3a48cd3747 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/projectile/colt var/unique_reskin - name = "vintage .45 pistol" + name = ".45 pistol" desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds." magazine_type = /obj/item/ammo_magazine/c45m icon_state = "colt" @@ -171,10 +171,10 @@ name = "holdout signal pistol" magazine_type = /obj/item/ammo_magazine/mc9mm/flash -/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob) +/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob) if(user.get_inactive_hand() == src) if(silenced) - if(user.l_hand != src && user.r_hand != src) + if(!user.item_is_in_hands(src)) ..() return user << "You unscrew [silenced] from [src]." @@ -185,9 +185,9 @@ return ..() -/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/user as mob) +/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob) if(istype(I, /obj/item/weapon/silencer)) - if(user.l_hand != src && user.r_hand != src) //if we're not in his hands + if(!user.item_is_in_hands(src)) //if we're not in his hands user << "You'll need [src] in your hands to do that." return user.drop_item() diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 7a6fdcc0ca9..46b01a9d1bf 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -113,7 +113,8 @@ obj/aiming_overlay/proc/update_aiming_deferred() var/cancel_aim = 1 - if(!(aiming_with in owner) || (istype(owner, /mob/living/carbon/human) && (owner.l_hand != aiming_with && owner.r_hand != aiming_with))) + var/mob/living/carbon/human/H = owner + if(!(aiming_with in owner) || (istype(H) && !H.item_is_in_hands(aiming_with))) owner << "You must keep hold of your weapon!" else if(owner.eye_blind) owner << "You are blind and cannot see your target!" diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 0febaa68bce..d176ab205e1 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -310,6 +310,7 @@ use_power = 1 idle_power_usage = 5 active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/grinder var/inuse = 0 var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 @@ -326,6 +327,10 @@ /obj/machinery/reagentgrinder/New() ..() beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + RefreshParts() return /obj/machinery/reagentgrinder/update_icon() @@ -333,6 +338,11 @@ return /obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(beaker) + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 9ba46eb271e..a5903e744d8 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -40,7 +40,7 @@ /obj/machinery/sleeper, /obj/machinery/smartfridge/, /obj/machinery/biogenerator, - /obj/machinery/constructable_frame, + /obj/structure/frame, /obj/machinery/radiocarbon_spectrometer ) @@ -246,6 +246,17 @@ var/image/lid = image(icon, src, "lid_[initial(icon_state)]") overlays += lid +/obj/item/weapon/reagent_containers/glass/cooler_bottle + desc = "A bottle for a water-cooler." + name = "water-cooler bottle" + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler_bottle" + matter = list(DEFAULT_WALL_MATERIAL = 200) + w_class = 3.0 + amount_per_transfer_from_this = 20 + possible_transfer_amounts = list(10,20,30,60,120) + volume = 120 + /* /obj/item/weapon/reagent_containers/glass/blender_jug name = "Blender Jug" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index e31c0096770..7fc7707c28b 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -3,7 +3,7 @@ //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/pill name = "pill" - desc = "a pill." + desc = "A pill." icon = 'icons/obj/chemical.dmi' icon_state = null item_state = "pill" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index d68be94b9ba..7ae41565b75 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -202,10 +202,51 @@ icon_state = "water_cooler" possible_transfer_amounts = null anchored = 1 - New() - ..() - reagents.add_reagent("water",500) + var/bottle = 0 +/obj/structure/reagent_dispensers/water_cooler/New() + if(bottle == 1) + ..() + reagents.add_reagent("water",120) + else + icon_state = "water_cooler_0" + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/wrench)) + if(bottle) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the jug." + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + icon_state = "water_cooler_0" + return + + if(istype(I, /obj/item/weapon/screwdriver)) + if(!bottle) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You take the water-cooler apart." + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) + if(!bottle) + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I + user << "You start to screw the bottle onto the water-cooler." + if(do_after(user, 20)) + bottle = 1 + icon_state = "water_cooler" + user << "You screw the bottle onto the water-cooler but accidently spill some!" //you spill some because it for somereason transfers 5 units to the bottle after it gets attached but before it's deleted... + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + return /obj/structure/reagent_dispensers/beerkeg name = "beer keg" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 957c3b574dc..0e591e97b0b 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -8,6 +8,8 @@ desc = "A conveyor belt." layer = 2 // so they appear under stuff anchored = 1 + circuit = /obj/item/weapon/circuitboard/conveyor + frame_type = "conveyor" var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off var/operable = 1 // true if can operate (no broken segments in this belt run) var/forwards // this is the default (forward) direction, set by the map dir @@ -37,6 +39,14 @@ operating = 1 setmove() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/stack/cable_coil(src,5) + RefreshParts() + /obj/machinery/conveyor/proc/setmove() if(operating == 1) movedir = forwards @@ -81,6 +91,23 @@ if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts if(I.loc != user) return // This should stop mounted modules ending up outside the module. + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) + if(!input) + usr << "No input found please hang up and try your call again." + return + id = input + for(var/obj/machinery/conveyor_switch/C in world) + if(C.id == id) + C.conveyors += src + return + user.drop_item(get_turf(src)) return @@ -221,6 +248,36 @@ S.position = position S.update() +/obj/machinery/conveyor_switch/attackby(var/obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + + if(istype(I, /obj/item/weapon/weldingtool)) + if(panel_open) + var/obj/item/weapon/weldingtool/WT = I + if(!WT.remove_fuel(0, user)) + user << "The welding tool must be on to complete this task." + return + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(do_after(user, 20)) + if(!src || !WT.isOn()) return + user << "You deconstruct the frame." + new /obj/item/stack/material/steel( src.loc, 2 ) + qdel(src) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(input(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id)) + if(!input) + usr << "No input found please hang up and try your call again." + return + id = input + for(var/obj/machinery/conveyor/C in world) + if(C.id == id) + conveyors += C + return + /obj/machinery/conveyor_switch/oneway var/convdir = 1 //Set to 1 or -1 depending on which way you want the convayor to go. (In other words keep at 1 and set the proper dir on the belts.) desc = "A conveyor control switch. It appears to only go in one direction." diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 0e3858e662d..6831034edf1 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -8,6 +8,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). name = "Circuit Imprinter" icon_state = "circuit_imprinter" flags = OPENCONTAINER + circuit = /obj/item/weapon/circuitboard/circuit_imprinter var/list/datum/design/queue = list() var/progress = 0 @@ -24,7 +25,6 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). /obj/machinery/r_n_d/circuit_imprinter/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index ccf20c0ce7d..3fbb141f7e8 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -11,7 +11,7 @@ Note: Must be placed within 3 tiles of the R&D Console icon_state = "d_analyzer" var/obj/item/weapon/loaded_item = null var/decon_mod = 0 - + circuit = /obj/item/weapon/circuitboard/destructive_analyzer use_power = 1 idle_power_usage = 30 active_power_usage = 2500 @@ -19,7 +19,6 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/r_n_d/destructive_analyzer/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 8809ee29554..7d5bae00caa 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -2,7 +2,7 @@ name = "Protolathe" icon_state = "protolathe" flags = OPENCONTAINER - + circuit = /obj/item/weapon/circuitboard/protolathe use_power = 1 idle_power_usage = 30 active_power_usage = 5000 @@ -20,7 +20,6 @@ /obj/machinery/r_n_d/protolathe/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/protolathe(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index a5e5a00043d..fcaaa7a2128 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -13,11 +13,11 @@ idle_power_usage = 800 var/delay = 10 req_access = list(access_rd) //Only the R&D can change server settings. + circuit = /obj/item/weapon/circuitboard/rdserver /obj/machinery/r_n_d/server/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/rdserver(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/stack/cable_coil(src) component_parts += new /obj/item/stack/cable_coil(src) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index a3256d6f530..71819efc651 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -108,10 +108,9 @@ . = ..() if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) - attackby(H.l_hand,H) - else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand) - attackby(H.r_hand,H) + var/obj/item/weapon/pickaxe/P = H.get_inactive_hand() + if(istype(P)) + src.attackby(P, H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM diff --git a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm index b449237d775..ebab6fac765 100644 --- a/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm +++ b/code/modules/research/xenoarchaeology/machinery/artifact_analyser.dm @@ -181,7 +181,7 @@ out += " have been detected " //how the artifact does it's effect - switch(A.my_effect.effect_type) + switch(A.my_effect.effect) if(1) out += " emitting in an ambient energy field." if(2) @@ -224,7 +224,7 @@ out += "low level radiation" //how the artifact does it's effect - switch(A.secondary_effect.effect_type) + switch(A.secondary_effect.effect) if(1) out += " emitting in an ambient energy field." if(2) diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm index 332b1ce06ae..65f4b9f1fc0 100644 --- a/code/modules/research/xenoarchaeology/master_controller.dm +++ b/code/modules/research/xenoarchaeology/master_controller.dm @@ -9,9 +9,12 @@ #define ARTIFACTSPAWNNUM_LOWER 6 #define ARTIFACTSPAWNNUM_UPPER 12 -datum/controller/game_controller/proc/SetupXenoarch() +/datum/controller/game_controller/proc/SetupXenoarch() //create digsites for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) + if(!(M.density)) + continue + if(isnull(M.geologic_data)) M.geologic_data = new/datum/geosample(M) diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 87514a5473b..b4301cf557a 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -3,6 +3,7 @@ desc = "This device is used to trigger station functions, which require more than one ID card to authenticate." icon = 'icons/obj/monitors.dmi' icon_state = "auth_off" + circuit = /obj/item/weapon/circuitboard/keycard_auth var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made. var/event = "" var/screen = 1 @@ -40,6 +41,24 @@ event_triggered_by = usr broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices + if(istype(W, /obj/item/weapon/screwdriver)) + user << "You remove the faceplate from the [src]" + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "keycard" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 3 + A.icon_state = "keycard_3" + M.deconstruct(src) + qdel(src) + return + /obj/machinery/keycard_auth/power_change() ..() if(stat &NOPOWER) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 721f124e4ef..82c6ad543c8 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -27,7 +27,7 @@ internal_bleeding = 1 break - return affected.open >= 2 && internal_bleeding + return affected.open == (affected.encased ? 3 : 2) && internal_bleeding begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -206,4 +206,4 @@ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \ - "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") \ No newline at end of file + "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") diff --git a/html/changelogs/Datraen-PBAPCCheck.yml b/html/changelogs/Datraen-PBAPCCheck.yml new file mode 100644 index 00000000000..03e3702eba4 --- /dev/null +++ b/html/changelogs/Datraen-PBAPCCheck.yml @@ -0,0 +1,6 @@ +author: Datraen + +delete-after: True + +changes: + - bugfix: "Adds a check to prison breaks that makes sure the APC is on before continuing." diff --git a/html/changelogs/Datraen-SpawnTurf.yml b/html/changelogs/Datraen-SpawnTurf.yml new file mode 100644 index 00000000000..ab5d705c177 --- /dev/null +++ b/html/changelogs/Datraen-SpawnTurf.yml @@ -0,0 +1,6 @@ +author: Datraen + +delete-after: True + +changes: + - bugfix: "Artifacts will no longer spawn on floor turfs." diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 728255c8417..ff683bc069e 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index a47ee5d686b..4b45b5f0afe 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index a817a42648c..940051fea10 100644 Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index 75196e856d0..e5cd99b2071 100644 Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 920114b5500..58cf8bcff7e 100644 Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 3cf5a6eabcc..fa4ef129a6e 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 89d382c824d..0a5aeb5b446 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index a712597e8c6..c8948448073 100644 --- a/maps/polaris-1.dmm +++ b/maps/polaris-1.dmm @@ -1035,7 +1035,7 @@ "atU" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/vacant/vacant_site) "atV" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/wood,/area/vacant/vacant_site) "atW" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site) -"atX" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/frame/fire_alarm,/turf/simulated/floor/wood,/area/vacant/vacant_site) +"atX" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/frame,/turf/simulated/floor/wood,/area/vacant/vacant_site) "atY" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site) "atZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site) "aua" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled,/area/storage/primary) @@ -1646,6 +1646,9 @@ "aFH" = (/obj/item/weapon/stool/padded,/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aFI" = (/obj/structure/table/glass,/obj/item/inflatable{pixel_x = 6; pixel_y = 6},/obj/item/inflatable{pixel_x = 2; pixel_y = 2},/obj/item/inflatable{pixel_x = -2; pixel_y = -3},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aFJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) +"aFK" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) +"aFL" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled,/area/medical/surgeryobs) +"aFM" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) "aFN" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/armoury) "aFO" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/turf/simulated/floor/tiled,/area/security/armoury) "aFP" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) @@ -1697,7 +1700,7 @@ "aGJ" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aGK" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aGL" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aGM" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) +"aGM" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/reception) "aGN" = (/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) "aGO" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) "aGP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) @@ -1705,7 +1708,11 @@ "aGR" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aGS" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aGT" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aGU" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/tiled,/area/bridge_hallway) "aGV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aGW" = (/obj/item/frame,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/vacant/vacant_shop) +"aGX" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stamp/qm,/turf/simulated/floor/tiled,/area/quartermaster/qm) +"aGY" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "aGZ" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/armoury) "aHa" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/armoury) "aHb" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) @@ -1771,6 +1778,8 @@ "aIj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aIk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aIl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aIm" = (/obj/structure/frame,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aIn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/frame,/turf/simulated/floor/tiled,/area/engineering/workshop) "aIr" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/armoury) "aIs" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/button/remote/blast_door{id = "Armoury"; name = "Emergency Access"; pixel_x = 0; pixel_y = -28; req_access = list(3)},/turf/simulated/floor/tiled,/area/security/brig) "aIt" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/security/brig) @@ -2927,7 +2936,6 @@ "beY" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "beZ" = (/turf/simulated/wall,/area/medical/surgeryobs) "bfa" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/surgeryobs) -"bfb" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled,/area/medical/surgeryobs) "bfc" = (/obj/structure/table/standard,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/button/remote/blast_door{id = "surgeryobs2"; name = "Privacy Shutters"; pixel_x = -26; pixel_y = 0},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgery2) "bfd" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/surgery2) "bfe" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/pink{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/surgery2) @@ -3381,7 +3389,6 @@ "bnK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) "bnL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/virology) "bnM" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/lime{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) -"bnN" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) "bnO" = (/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/rnd/docking) "bnP" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/shuttle/research/station) "bnQ" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor,/area/shuttle/research/station) @@ -4571,7 +4578,6 @@ "bKJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/chemistry) "bKK" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/newscaster{pixel_y = -30},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) "bKL" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics Aft"; dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bKM" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/reception) "bKN" = (/turf/simulated/wall,/area/medical/medbay_emt_bay) "bKO" = (/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; req_access = list(5)},/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bKP" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) @@ -4716,7 +4722,6 @@ "bNy" = (/obj/effect/floor_decal/corner/blue,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "bNz" = (/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway) "bNA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/bridge_hallway) -"bNB" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/tiled,/area/bridge_hallway) "bNC" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bND" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bNE" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -6650,7 +6655,6 @@ "cyK" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access = list(41)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyL" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyM" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/quartermaster/qm) -"cyN" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyO" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyP" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyQ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor,/area/maintenance/apmaint) @@ -7503,7 +7507,6 @@ "cPf" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPg" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPh" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) -"cPi" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPj" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPl" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) @@ -8052,7 +8055,6 @@ "cZJ" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) "cZK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) "cZL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/window/westleft{name = "Engineering Reception Desk"; req_access = list(10); req_one_access = newlist()},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) -"cZM" = (/obj/item/frame/fire_alarm,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/vacant/vacant_shop) "cZN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) "cZO" = (/obj/machinery/door/airlock/glass_engineeringatmos{name = "Engineering Monitoring Room"; req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "cZP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) @@ -8106,7 +8108,6 @@ "daL" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "daM" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "daN" = (/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) -"daO" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "daP" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "daQ" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Waste"},/turf/simulated/floor/tiled,/area/engineering/atmos) "daR" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8368,7 +8369,6 @@ "dfN" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/clothing/suit/space/void/engineering,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northright{name = "Engineering Hardsuits"; req_access = list(11)},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dfO" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_6"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_6_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod6/station) "dfP" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_5"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_5_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station) -"dfQ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled,/area/engineering/workshop) "dfR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dfS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dfT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) @@ -9852,7 +9852,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaDddEiaDfaDgaDhaDiaDjaAeaDkaDlauNatNaahaahaahaahaahaahaahavCaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaahaahaahaahaahavCaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaahaahaFmaFmaFmaFmaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALdFYdFXdFZaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaahaFmaFmaGvaFRaGxaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaGMaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALdFYdFXdFZaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaahaFmaFmaGvaFRaGxaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaFKaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaFmaHOaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFaaKbaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaKoaKpaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9879,14 +9879,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibchbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbeubevbewbcRbdMbdNbdOaZmaahaZmaZmbexbeybdObdObdObezbeAaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfabfbbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfobfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfaaFLbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfobfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbfqbfrbfsbdPbftbfubfvbdTaahaahaahaahaahaYPaYPbfwbfxbfyaYPaYPahyahyahybfzbfAbcnbfBbeebfCbfDbfEbfFbefbefaahaahaahaahbdlbfGbeTbfHbfIbfJbeTbfKbdlaahaahaahaahaZdaZHaZdahyaZIbfLdCybbJbbGbeVbfNbfObbGdCzdCzdCzbbGbjlbfPbfQbbGbbGdCAbfSaZIahybbNaYGbetaUwaToaahaahbeZbfTbfUbfVbfWbfXbfYbfZbfZbgabgbbgcbgdbgebgfbggbghbcRbdMbgibfobfobfobfobgjbgkbgkbgkbgkbgkbgkbgkbglbfobfobfobfobfobfpaZmaZmaahaahaahaahaahaahbgmbgmbgmbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbgnbfrbgobdPbgpbgqbgrbdTaahaahaahaahahyahyahyahyahyahyahyahyahyahybbobbobgsbcnbgtbeebefbgubgvbgwbgxbefaahaahaahaahbdlbgybeTbeibgzbeibeTbgAbdlaahaahaahaZdaZdaZHaZdahyaZIbgBdCBbfRbbGbgCbbGbbGdCCbgDbgEbgFdCDbbGbbGbgCbbGbgGbgHdCEaZIaZfaTobgIbgJbgKaToaToaahbeZbgLbgMbgNbgObgPbgQbgRbgSbgTbgUbgVbgWbgXbgYbgYbgYbgYbgYbgYbgZbgZbgZbgZbgZbgkbhabhbbmzbhdbhebgkbhfbhfbhfbhfbhfbhfbglbfpaZmaahaahaahaahaahbgmbgmbhgbhhbhibhhbhjbgmbgmaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbhkbhlbhkbdPbhmbfubhnbhobhobhobhoaahaahaahahyahyahyahyahyahyahyahyaZybhpbajbhqbhrbhsbefbhtbgvbgwbhubefaahaahaahaahbdlbhvbeTbhwbhxbhwbeTbhybdlaahaahaahaZdaZGaZHaZdahybdqbaUdCFbbGbbGbbGbbGdCGbgDbhAbhAbhAbgFdCFbbGbbGbbGbhBbbGbhCbhDbhEbhFbhGbetaUwbhHaToaahbeZbhIbhJbgNbhKbhLbhLbhLbhLbhMbhNbgVbhObhPbgYbhQbhRbhSbhTbgYbhUbhVbhVbhWbgZbhXbhYbhYbhZbhZbhYbiabhfbibbicbidbiebhfbdOaZWaZmaahaahaahaahaahbgmbifbigbihbiibijbikbifbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahbilbilbilbilbilbilbilbilbilbimbinbiobipbeEbfubinbhobiqbirbhobhobhoaahaahahyahyahyahyahyahyahybambisaZzbitbiubdebivbiwbixbgwbhubefaahaahaahaahbdlbiybeTbizbiAbiBbeTbiCbdlaahaahaahaZdbiDaZHaZdahybejbdrdCFbbGbbGbbGbbGdCGbiFbhAbdtbhAbiHdCFbbGbbGbbGbiIbiJbiJbiKbiLbiMbiNbiObiPbiQaToaahbeZbfTbiRbiSbeZbiTbiUblObiWbiXbfhbgVbhObiYbgYbiZbjabjbbjcbgYbSjbjebjfbjgbgZbjhbjibjjbjkbpybjmbjnbhfbibbjobjpbjqbhfbjrbjsaZmaahaahaahaahaahbgmbjtbjubjvbjwbjvbjubjxbgmaahaahbgmbgmbgmbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahbilbjybjzbjAbjBbjCbjDbjEbilbjFbjGbjHbjIbjJbjKbjLbhobjMbjNbjObjPbhoaahaahaahahyahyahyahyahyahybaibjQbjRbjSbhrbecbjTbjUbjVbgwbhubefaahaahaahaahbjWbjWbjWbjWbjXbjWbjWbjWbjWaahaahaahaZdbjYaZHaZdahybcybaUdCFbbGbbGbbGbbGdCGbjZbhAbhAbhAbkadCFbbGbbGbbGbkbbbGbbGbkcaZibkdaYGbetaUwbkeaToaahbeZbkfbkgblRbeZbfhbfhbfhbfhbkibfhbkjbkkbklbgYbkmbknbkobkpbgYbkqbkrbksbktbgZbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkEbkFbhfbdObkGaZmaahaahbgmbgmbgmbgmbkHbkIbkHbkJbkHbkKbkHbgmbgmbgmbgmbkLbkMbkNbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkObkPbkRbkQbkSbkPbkPahyaahaahaahaahaahaahaahaahaahbilbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhbhoblibljblkblkbhobllbllbllbllahyahyahyahyahybbobboblmblnblobeebefblpbjVbgwblqbefaahaahaahaahbjWblrblsbltblublvblwblxbjWaahaahaahaZdaZdaZHaZdahyaZIblydCwbeqbbGblzbbGbbGdCrbjZblAbkabfMbbGbbGblzbbGblBdCHdCIaZIaZfaToaZjblDaZlaToaToaahbeZblEblFblGbeZblHblIblJblKblLblMblNbhOblWbgYbgYblPblQbpabgYblSblTblUblVbgZbrKbhZbhYblXbhYbhYblYbhfblZbmabhfbmbbhfbmcaZWaZmaahbgmbgmbifbmdbkHbmebmfbmgbmhbmibmfbmgbmjbkJbmkbmlbmibmmbmgbmnbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkPbmobmpbmqbmpbmobkRahyahyaahbkPbkPbkPbkPaahaahaahbilbmrbmsbjAbmtbmubmvbmwbilbmxbfubmybdTbrebdTbrebhoblibmAbmBbmCblkbmDbmEbmFbllbmGbmHbmIbllahyahyaZyaZzbcnbhrbeebmJbmKbmLbmMbefbefaahaahaahaahbjWbmNbmObmPbmQbmPbmRbmSbjWaahaahaahaahaZdaZHaZdahyaZIbmTdCJbbJbbGbfPbfQbmUbbGbdCbdCbdCbbGbmUbeVbfNbbGbbGdCKbmVaZIahyaZPaYGaYHaUwaToaahaahbeZbmWbmXbmYbmZbnabnbbncbncbndbnebnfbngbnhbnibgYbnjbnkbnlbgYbnmbnnbnobnpbgZbnqbnrbhYbnsbhYbntbnubhfbnvbnwbhfbnxbhfbnyaZWaZmaahbgmbnzbnAbnBbnCbnDbnEbnDbnFbnDbnGbihbnHbkJbnIbnJbnKbnLbihbnMbnNbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkPbmobmpbmqbmpbmobkRahyahyaahbkPbkPbkPbkPaahaahaahbilbmrbmsbjAbmtbmubmvbmwbilbmxbfubmybdTbrebdTbrebhoblibmAbmBbmCblkbmDbmEbmFbllbmGbmHbmIbllahyahyaZyaZzbcnbhrbeebmJbmKbmLbmMbefbefaahaahaahaahbjWbmNbmObmPbmQbmPbmRbmSbjWaahaahaahaahaZdaZHaZdahyaZIbmTdCJbbJbbGbfPbfQbmUbbGbdCbdCbdCbbGbmUbeVbfNbbGbbGdCKbmVaZIahyaZPaYGaYHaUwaToaahaahbeZbmWbmXbmYbmZbnabnbbncbncbndbnebnfbngbnhbnibgYbnjbnkbnlbgYbnmbnnbnobnpbgZbnqbnrbhYbnsbhYbntbnubhfbnvbnwbhfbnxbhfbnyaZWaZmaahbgmbnzbnAbnBbnCbnDbnEbnDbnFbnDbnGbihbnHbkJbnIbnJbnKbnLbihbnMaFMbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnObnPbnQbnRbnRbnPbnSbnTbkPbkPbkPbnUbnVbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbftbfubnWbdTbnXbnYbnZblkblkboabobbocblkbodboeboebofbogbohboibllahyahybamaZzbcnbojbeebmKbmKbokbolbefaahaahaahaahbjWbjWbombonboobopboqbonborbjWbjWaahaahaahaZdaZHaZdahybdqbiHdCBbfRbbGbbGbfPbfQbbGbbGbbGbbGbbGbembeWbbGbbGbbGdCxbdxbdqahybaNbbObotbouaToaahaahbeZbgLbovbgNbowboxboybozboAboBboCbgVbhOboDboEbgYboFboGboFbgYboHboIbTzboKbgZbgkboLboMbdAboLboMboOboOboOboOboOboOboOboOaZWaZmaahbgmboPboQboRbkHboSbmfboTboUboVboWbmmbmgbkHbmibmmboXboYboSboZbuPbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkQbmqbpbbpcbpcbmqbpdbpebpfbpgbphbpibpjbpkbplbpmbpnbpobppbpqbprbprbpsbprbptbpubpvbpwbpxbMKbpzbpzbpzbpAblkblkbpBblkblkbpCbpDbpEbpEbpEbpFbpGbllahyahybamaZzbcnbfBbeebefbefbefbefbefaahaahaahaahbjWbpHbpIbpJbpKbpLbpKbpMbpNbpObjWaahaahaahaZdaZHaZdahybejbiHdCDdCLbbGbelbbGbfPbenbbGbbGbbGbeobeWbbGbelbbGdCHdCMbdxbejahybbNaYGaYHaUwbpPahyaahbeZbpQbpRbgNbpSbpTbpUbpVbpVbpWbpXbpYbpZbqabqabqbbqcbqdbqcbqebqcbqfbqgbqhbqibqjbqkbqhbqlbqmbqnboObqoaCqbqqbqrbqsbqtboOaZWaZmaahbgmbqubqvbqwbkJbqxbqybqzbgmbqAbqBbqCbqCbqDbsnbqCbqEbqFbqGboZbqHbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqIaadahybkQbnPbqJbpcbpcbqKbqLbqMbqNbqObqPbqQbqRbqSbqTbqUbqVbqTbqWbqXbqTbqYbqZbrabrbbrcbrdbgqbinbMNbrfbrgbpzbrhbrebribrjbrkbrlbrmbrnbrobrpbrqbrrbrsbllahyahybambrtbrubrvaZyahyahyahyahyahyahyaahaahaahbjWbjWbrwbrxbpKbpKbpKbrybrzbjWbjWaahaahaahaZdaZHaZdahybcyaTsbrBdCDdCLbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGdCHdCCbrCbdBbcyahyaTobrEaYHbrFbrGahyahybeZbfTblFbrHbeZbrIbrJbvUbrLbrMblMbrNbrObrPbrQbrRbrSbrTbrSbrSbrSbrUbrVbrWbrXbrYbrZbrYbsabrYbrYbsbbscaCrbsebsfbsgbsgboOaZWaZmaahbgmboPbshboRbkHbmibsibsjbskbslbmmbmmbsmbkHbuYbmmbsobspbmiboZbsqbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9901,9 +9901,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxybGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibJWbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbHebHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbJraZmaahaahaahaahaahaahbgmbIdbIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibIsbItbIubIvbIubIwbIubLzbIybIzbIAbGYahyahybIBbecbRQbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFubIKbILbIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbRSaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbJTbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHbKMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbJTbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHaGMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkbOabMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAbNBbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobWTbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAaGUbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobWTbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaahaahaahbOLbOMbONbOObOPbOQbOLbORahyahyaahaahbtHbOSbIibOTbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbOUbOVbOWbOXbOYbOZbzHbPabPbbPcbPdbPebPfbPgbImbInbIobPhbPibLxbPjbGYbPkbPlbPmbNpbNpbSzcpCcpubRlcGibGYahyahybKdbecbcnbecbPobHcbFubPpbKhbPqbPrbPsbKhbPtbFubPubPvbPwbNCbPxbPybPzbPAbNCbPBbNCbNCaahaZdaZHbEgbPCbPDbPEbPEbPFbPEbPEbPGbFJbPHbEgbPIbPJbPKbPLbPMbPNbPIbPJbPKbEjbPObPPaToaZjblDbHCaToaToahybMkbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbQabQbbQcbQdbKSbQebQfbQgbQhbKWbQibQjbQkbMBbQlbQmbQnbQobQpbQqbQrbQsbQtbQpbQubQvbQwbMPbMQbQxbQybQzbMUbMVbWWbQBbOJbQCbQDbQEbOJcAfbLdaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaahaahaahbNgbQFbQGbQHbQHbQIbNgahyahyahyaahaahbtHbQJbQKbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbQYbQZbyfbJRbRabRbbRcbRdbRebGYbRfbRgbRhbNpbNpcGQbRgcIgbRlcNkbGYahyahybKdbecbcnbRmbRnbRobRpbRqbRrbRsbRtbRubRvbRwbFubRxbPvbRybNCbRzbRAbRBbRBbRCbRDbREbNCaahaZdaZHbEgbRFbRGbFJbRHbRIbFJbFJbFJbFJbRJbEgbupbTlbTkbRNbRObRPbRObRPbvEbRTbRUbRUbRVbRWbetaUvbvFaToahybMkbRYbRZbSabNWbSbbScbSdbSebSfbSgbShbSibMpbvIbKSbXibQfbSlbSmbKWbKWbKWbKWbKWbSnbSobSpbSpbSpbSpbSpbSqbSrbSqbSqbSqbSqbSqbSsbStbSubSvbSwbSwbSwbLdbLdbSxbSycNtbSxbLdbLdaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbOLbSAbQGbQHbQHbSBbOLbORahyahyaahaahbtHbSCbIibSDbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbSEbSEbSFbSGbSEbSHbSIbSJbSKbSLbSMbSNbSObSPbSLbSLbSLbSLbSLbSLbSQbSRbSQbSSbSSbSQbSTbSQbSUbSQbGYahyahybKdbecbcnbSVbbobbobFubFubFubFubFubFubSWbFubFubSXbSYbSZbNCbTabTbbTcbTdbNCbTebTfbNCaahaZdaZHbEgbFLbvJbEgbEgbThbTibTibTibTibEgbEgbTjbTkbTlbTmbTnbTkbTlbTkbTobTpaUvaUvaUvaUvbTqbTrbTsaToahybMkbGxbTubTvbTubTtbScbTxbTybVhbTAbTBbTCbTDbTEbKSbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbTQbTRbTSbTTbSpbTUbTVbTWbTXbTYbTZbSqbUabUbbSubUcbUdbUebSuaahaahbSxbUfbUgbSxaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9932,9 +9932,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcJacJacNfcEVcEVcEVcEVcEVcrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcPocJacPvcJacQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcuwcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacuIcuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWQcJacJacJacJacEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcZMcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZaGWcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZdcYdcEdcEdcEcJacDnddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMcyNcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMaGXcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcQzcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcQzcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacBQcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcQzcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9947,7 +9947,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaadbkQaahaahaahaahaahcuScuScuScuScCtcCtcCtcCtcCtcCtaahahycIccJccJccJccIcahyahyaahcJecKgcKhcKicJecKjcKjcKjcBIcBIcKkcKlcBIcKmcKncKocKpcKqcKrcKscKtcKqcKucGedeccKvcEwcKwcKwcKwcCKahyahycwhczRcwhaahaahaahaahaahcxzcKxczecHScKyczecKzczgcKAcHScKBcKBcxzaahaahaahaahaahaahaahczicAbcziaahcKCcKCcNYcKEcKFcKCcKCcKCcKGcKHcKIcKCcKCcKCcKCcKCcKCcKCcKCaahcBgcHqcBgaahaahcrQcrQcQAcQBcQCcrQcQDcQEdDydDxcsYcsYcQGdDzcQGdDAcQGaahaahaahcHycKOcKPcKQcKRcKQcMzcMycKUcDAcwIcKVcMBcMAcKYcKZcKYcLacLbcHEcLccLdcLecLfcLecMCcMDcLicwWcHNcLjcLkcLlcLmcLncLmcLocLpcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLudEXcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOcLPcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgahyaahaahcrQcrQcrQcrQcrQcrQcrQcrQcrQdDCdDBcQGcQGcQGcQGcQGaahaahaahcHycMidEYcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdEZdCedCddCgdFadCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHdFbcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcQncLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcOudDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhcPicPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcOudDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhaGYcPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQccxUdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjbLjaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahycSAcRgcRhcRicRjcRkcRlcRmcRncRocRpcRqcRrcRscRtcSLcRvcRwcRxcMTcRycPUcRzcRAcRBcRCcOlcRDcREcRFcRGcRHcRIcTadDQcRKcRLcRMcRNcROcRPcLGahyahycwhcRQcwhcziahyahyahyahyahyahyahycziczicziczicziczicziaahaahaahaahaahaahaahaahaahcziczicRRdCScKCcRTcRWcRVcLPcRWcRXcRJcRYcOOcOPcOQcRZcRJcRTcRWcLPcRVcRWcSacKCdCTcSccBgahyahyahyahyahyaahaahaahaahaahahydDRdbMdDScWuaahaahaahaahaahaahaahcPdcSdcSecSfcSgcShcSicSjcSjcSkcSlcSmcSlcSlcSlcSncSlcSlcSlcSocSpcSqcSqcSrcSqcSqcSqcSscStcSkcSucSucSvcSwcSxcSycSycSzcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccTdcTecTfcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahaahaahaahaahaahaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzcTIcPncPncPncPxcTJcTKcTLcTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9957,11 +9957,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccUEcUEcWzcWAcVucXucWCcWDcWEcWFcWGcWHcWIcWJcWJcWJcWFcWFcWFcWKcWLcPMcWMcWNcMTcMTcXycWPcwAcvvcXycWPcWScWTcWUcVYcNecWVcWWcWXcWicWYcWZcXacXbcXccVmdDXcXecXecXfczQcWhcXgcXhcXicXjcXkcXlcXhcXmcXhcXhcWhcWhcXHcXocXocXocXocXocXpcXqcXHcXpcXqcXqcXrcXscXtcKCcKCcNYcKEcKFcKCcKCcKCcYfcXvcXvcKIcYfcKCcKCcKCcNYcKEcKFcKCcKCcXtcXwdCXcXqcXqcZncXzcXzcXzcXAcWucWucWudDYcWucWwdDZcWucWucWucXBcXCcXCcWucWucWucWucZncXzcXzcXAcWucWucWucWucWucWucWucZncXzcXzcXAcWucXDcXEcXFcWucXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcZocXIcXJcVDcXKcXLcUMcUNcXMcXMcXNcUOcVEcXOcXPcWFcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcYacYbcYacYccYdcNecYecWacNcdaTcYgcYhcYicYjcYkcVmcRQczQcYlczQczQcYmcYncYocYpcYqcYncYrcYpcYscYtcYucYvcYwcYxcYycYxcYxcYzcYxcYAcYBcYxcYxcYCcYDcYEcYFcYGcYHcYCcYxcYIcYxcYycYJcYKcYxcYxcYxcYLcYxcYMcYNcYycYxcYxcYxcYCcYxcYGcYOcYPcYPcYQcYRcYScYRcYTcYRcYUcYVdCYcYRcYScYWcYRcYRcYXcYScYYcYRcYZdCYcYXcYRcZacYRcYRcZbcYRcYRcZccYUdCYcYRcYRcZdcYRcYRcYScYRcYXcZecZfcXFdCZcXGcZhcZicZjcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkcZlcZmdbDdbdcZpcZqcVMcZrcPMcUMcUNcZscZtcZucVGcVHcZvcZqcZwcZxcZycZqcZzcZAcZBcZCcZDcZEcZFcZGcZHcZGcZIcZJcZKcZLdmbcZNcZOcZPcZQcZRcZScZTcVmcRQcwhcwhcZUcwhcZVcZWcZXcWhcZVcZWcZYcWhcZVcZZdaadabdacdaddaddaddaedaddaddafdaddaddaddagdaedahdaidajdakdagdaddajdaddaddaddaedaddaddaddaddaddafdaddaddaddaddaddagdakdajdaldaddaedagdamdamdamdandamdamdaodamdamdamdapdamdamdaqdaodardasdatdaudaqdamdandamdamdaodamdamdamdamdamdamdamdavdamdamdaudamdaqdawdaxdaydazdaAdaBdaCdaDcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIcdaEdaFdaGcNZahycTZdaHdaIdaJdaKcTSdaLcUNdaMdaNdaOcUNcPMdaPcPMdaQcPMcPMdaRdaSdaSdbIdaUdaVdaWdbIdaUdaSdaXdaYdaZdbadbbdbcdbNdbedbfdbgdbNdbedbcdbccRQcwhdbhdbidbjcZVdbkdbldbmcWhdbndbldbocZVcWhdbpcXhdbqdbrdbrdbrdbsdbtdbrdbrdbudbrdbrdbvdbwdbxdbydbzdbAdbBdbCdcedbCdbCdbEdbFdbCdbCdbGdbCdbCdbCdbHdbCdbCdcfdbCdbBdbJdbzdbydbKdbLdbvdbMdbMdcrdbMdbMdbMdbOdbMdbMdbMdbPdbMdbMcWwdbQdbRdbScXEdbTcWwdbMdcrdbMdbMdbUdbMdbVdbMdbMdbMdbVdbMdbMdbMdbMdbWdbMcWwdbWdbXcXFdbYcXGdbZdcadcbcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIcdaEdaFdaGcNZahycTZdaHdaIdaJdaKcTSdaLcUNdaMdaNaImcUNcPMdaPcPMdaQcPMcPMdaRdaSdaSdbIdaUdaVdaWdbIdaUdaSdaXdaYdaZdbadbbdbcdbNdbedbfdbgdbNdbedbcdbccRQcwhdbhdbidbjcZVdbkdbldbmcWhdbndbldbocZVcWhdbpcXhdbqdbrdbrdbrdbsdbtdbrdbrdbudbrdbrdbvdbwdbxdbydbzdbAdbBdbCdcedbCdbCdbEdbFdbCdbCdbGdbCdbCdbCdbHdbCdbCdcfdbCdbBdbJdbzdbydbKdbLdbvdbMdbMdcrdbMdbMdbMdbOdbMdbMdbMdbPdbMdbMcWwdbQdbRdbScXEdbTcWwdbMdcrdbMdbMdbUdbMdbVdbMdbMdbMdbVdbMdbMdbMdbMdbWdbMcWwdbWdbXcXFdbYcXGdbZdcadcbcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkdccdcddcDdczdcgdchdcidaPcPMcUMdcjdckdcldcmdcndcodcpcTQdcpdcmdcodcqdcJdcsdctdcudcvdcwdcxdcydcxddbdcAdcBdcCddndmkdcFdcGdcHdcIddtdcKczfdbcdcMcwhdcNdbidcOcZVdcPdcQdcRcWhdcSdcTdcUcZVcWhcWhcWhcWhcXHcXocXocXocXocXocXpdcVcXHcXpdcWdcXdpPdqIdpQdcXdcWddDdcVcXHcXocXocXocXocXpdcVcXHcXocXocXocXocXpdcVddDddcddddskdtrdstddddddcZncXAddhcZncXzcXAddhcZncXzcXAddhcZncXAddiddjdBAdBCdBBddjddiddPddhcZncXzcXzcXzcXzcXAddhcZncXzcXzcXzcXzcXAddhddPddodBEdBDdBFddscXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdducXJddvddwcTSddxcPMcUOcVFcVEcPMcPMddyddzcWLddAddBddCdeedcsdcudcudcvdcwddEddEddFddGddHddIdcCddJddKddKddKddLddMddNddNdBGdbccRQcwhdekddQddRcZVddSddTddScWhddUddVddUcZVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqddXddYddZdeadebdeqaaaaaaaaaaaaaaadeddeddeddeddeddeddedaaaaaaaaaaaaaaadeWdefdegdehdeidejdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdeldemdendeodepdfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdetdeuddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahbkQcIcdevdevdewcZmdbDdbddexcZqdeydezcVNcUMcPMdcjdclcVHcSHcPMcWLcWLcVIcVJdeAdeBdeCdeDdcudeEdeFdeGdeHdeIdeJdeKdeLdeMdeNddJddKddKdeOdePdeQdeRddKdeSdbccRQcwhahyahyahycZVddSdeTddScWhddUdeUddUcZVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfhdeXdeYdeZdeadfadfmaaaaaaaaaaaadeddeddeddeddeddeddeddeddedaaaaaaaaaaaadfBdfddegdfedffdfgdfBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfIdfidfjdfkdeodfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdfndfoddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahahycIcdfpdfqdfrcNZahycTZdfscPMcUMcWLcVIdeydftcZqdfucZqdftcZqdfvcWLcPMcPMdfwdfxdfydfzdcudcudfAdfQdfCdfDdfEddbdfFdfGdfHddndfXdfJdfKdfYdfMdfYdfNdbcdbccRQcwhahyahyahyahyddSdfOddScZVddUdfPddUdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgwdfRdfSdfTdfUdfVdfWdhgdcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdhudfZdgadgbdgcddcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddidgddemdgedgfdggddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodghdgidgjdgkddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahahycIcdfpdfqdfrcNZahycTZdfscPMcUMcWLcVIdeydftcZqdfucZqdftcZqdfvcWLcPMcPMdfwdfxdfydfzdcudcudfAaIndfCdfDdfEddbdfFdfGdfHddndfXdfJdfKdfYdfMdfYdfNdbcdbccRQcwhahyahyahyahyddSdfOddScZVddUdfPddUdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgwdfRdfSdfTdfUdfVdfWdhgdcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdhudfZdgadgbdgcddcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddidgddemdgedgfdggddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodghdgidgjdgkddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahahycIcdevdevdgldcddcDdczdgmcTSdgncWLcPMdgocTTcTSdgpcTScTScTSdgpdgpdgqcPMdgrdgsdaSdgtdcudgudgvdhzdgxdfDdgydgzdgAddIdgBdgCdgCdgCdgCdgCdgCdgCdgCdbcdgDdgEcwhcwhahyahyahydgFdgGdgHaaadgIdgJdgKdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgLdgMdgNdgOdgPdgQdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdgTdeidfgdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdfidemdgUdgVdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdgWdgjdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdgYcXJcPMcWLcPMcPMdgZdhacWLcPMcPMdhacWLcWLdhbdhadhcdhddaSdhedcudcudEadhEdfCdhhdhidgzdhjdfGdhkdhldhmdhndhodhpdhqdhrdhsczQczQdhtczQcwhahyahyaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdhIdfRdhvdfTdhwdhxdgRdhydfhaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadhMdhAdhBdgadhCdhDdhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadifdhFdemdgedhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdhKdhLddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQdiLdhNdhOdhPcVIdhQdhRdhSdhTdhUdhVdhWdhXdhYdhZdiadibdicdiddaSdiedcudcudEadiYdfCdfDdigdgzdfFdihdgBdiidijdikdildimdindiodipcXecXediqdircwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfmdeXddYddZdgRdfadfmaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadfBdfddgSdehdeidfgdfBaaaaaaaaadisditdiudiudiudivdiwaaaaaaaaadfIdfidemdendhGdfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdixdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm index 9a3b1721e5e..46a82f0e156 100644 --- a/maps/polaris-2.dmm +++ b/maps/polaris-2.dmm @@ -861,7 +861,7 @@ "qC" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qD" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qE" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"qF" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"qF" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qG" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qH" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "qI" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) @@ -910,7 +910,7 @@ "rz" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/red/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "rA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "rB" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"rC" = (/obj/structure/computerframe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"rC" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "rD" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rE" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rF" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm index 850b38a5053..3207a9d9c94 100644 --- a/maps/polaris-3.dmm +++ b/maps/polaris-3.dmm @@ -20,7 +20,7 @@ "at" = (/obj/item/weapon/scalpel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "au" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/derelict/ship) "av" = (/turf/simulated/shuttle/plating,/area/derelict/ship) -"aw" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"aw" = (/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship) "ay" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship) "az" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship) @@ -80,8 +80,8 @@ "bB" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bC" = (/obj/item/weapon/material/shard,/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bD" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bE" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bF" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bE" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bF" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bG" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bH" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bI" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) @@ -197,6 +197,7 @@ "dO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/tcomsat) "dP" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar South"},/turf/simulated/floor/airless,/area/tcomsat) "dQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat) +"dR" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele) "dS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) "dT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat) "dU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/tcomsat) @@ -387,7 +388,6 @@ "hJ" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) "hM" = (/turf/space,/area/syndicate_station/commssat) "hN" = (/turf/simulated/wall/r_wall,/area/AIsattele) -"hO" = (/obj/structure/computerframe,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele) "hP" = (/obj/machinery/teleport/station,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele) "hQ" = (/turf/simulated/floor/airless,/area/AIsattele) "hR" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/AIsattele) @@ -453,7 +453,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaiacacaMafagagaBagagagaLaobraabsajacacacacacacacajbraaaaaTauasagagagagbcagagaLalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwagagagagbxauasagagagagagagagagaBagaLadajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaabsajacacacacacacacajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBbBbCbDagaLaoajacacadasagagagagauacaobraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagbEbFaLaoafbGbHbIaialbJbKaFbLaGavbMadakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagbFbEaLaoafbGbHbIaialbJbKaFbLaGavbMadakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsacadacaoafagagagagagaBagagaLadalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObPbQagagagagagagbRbSaLaobrbsbTavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsacalbUagagagagagauadaobraaaabsbTaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -599,7 +599,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhNhNhNhNaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaThNhNhOhPilhNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaThNhNdRhPilhNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaTaThNhNhRhQhShQhThNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhVhQhWhXhQhQhYhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhQhQhZhZhZhQhQhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-4.dmm b/maps/polaris-4.dmm index 5b7187b4393..c54e550a842 100644 --- a/maps/polaris-4.dmm +++ b/maps/polaris-4.dmm @@ -8,7 +8,7 @@ "ah" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "ai" = (/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/airless,/area/mine/explored) "aj" = (/obj/structure/girder,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) -"ak" = (/obj/structure/computerframe,/turf/simulated/floor/airless,/area/mine/explored) +"ak" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/floor/airless,/area/mine/explored) "al" = (/obj/machinery/teleport/station,/turf/simulated/floor/airless,/area/mine/explored) "am" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/mine/explored) "an" = (/turf/simulated/floor/tiled/white/airless,/area/mine/explored) diff --git a/maps/polaris-5.dmm b/maps/polaris-5.dmm index c8ca0f7c697..bb438d4f593 100644 --- a/maps/polaris-5.dmm +++ b/maps/polaris-5.dmm @@ -602,7 +602,7 @@ "lD" = (/obj/structure/sign/greencross,/turf/simulated/wall/r_wall,/area/outpost/research/medical) "lE" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/dock) "lF" = (/obj/effect/floor_decal/corner/purple,/turf/simulated/floor/tiled/white,/area/outpost/research/dock) -"lG" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/outpost/research/dorms) +"lG" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/wood,/area/outpost/research/dorms) "lH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/outpost/research/dorms) "lI" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/outpost/research/dorms) "lJ" = (/obj/structure/table/glass,/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/outpost/research/dorms) diff --git a/polaris.dme b/polaris.dme index bc37b4ccb3b..6af4c66aa1e 100644 --- a/polaris.dme +++ b/polaris.dme @@ -373,7 +373,6 @@ #include "code\game\machinery\CableLayer.dm" #include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cloning.dm" -#include "code\game\machinery\constructable_frame.dm" #include "code\game\machinery\cryo.dm" #include "code\game\machinery\cryopod.dm" #include "code\game\machinery\deployable.dm" @@ -384,6 +383,7 @@ #include "code\game\machinery\floodlight.dm" #include "code\game\machinery\floor_light.dm" #include "code\game\machinery\floorlayer.dm" +#include "code\game\machinery\frame.dm" #include "code\game\machinery\hologram.dm" #include "code\game\machinery\holosign.dm" #include "code\game\machinery\igniter.dm" @@ -434,7 +434,6 @@ #include "code\game\machinery\computer\arcade.dm" #include "code\game\machinery\computer\atmos_alert.dm" #include "code\game\machinery\computer\atmos_control.dm" -#include "code\game\machinery\computer\buildandrepair.dm" #include "code\game\machinery\computer\camera.dm" #include "code\game\machinery\computer\card.dm" #include "code\game\machinery\computer\cloning.dm" @@ -686,6 +685,7 @@ #include "code\game\objects\items\weapons\wires.dm" #include "code\game\objects\items\weapons\circuitboards\broken.dm" #include "code\game\objects\items\weapons\circuitboards\circuitboard.dm" +#include "code\game\objects\items\weapons\circuitboards\frame.dm" #include "code\game\objects\items\weapons\circuitboards\mecha.dm" #include "code\game\objects\items\weapons\circuitboards\other.dm" #include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm" @@ -1276,6 +1276,7 @@ #include "code\modules\mob\living\autohiss.dm" #include "code\modules\mob\living\damage_procs.dm" #include "code\modules\mob\living\default_language.dm" +#include "code\modules\mob\living\inventory.dm" #include "code\modules\mob\living\life.dm" #include "code\modules\mob\living\living.dm" #include "code\modules\mob\living\living_defense.dm"