From bfb23457266bf387cabe464467ac2b51248adcf5 Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 15:25:59 +0100 Subject: [PATCH 01/10] Moved combat shotguns to shotgun/automatic/combat - shotgun/automatic/ will pump itself automatically on firing - combat shotgun capacity nerfed to 6 rounds - replaced all instances of the old path with the new one --- code/datums/supplypacks.dm | 6 ++--- code/game/gamemodes/wizard/rightandwrong.dm | 2 +- code/game/machinery/vending.dm | 2 +- .../game/objects/effects/spawners/lootdrop.dm | 2 +- .../projectiles/ammunition/magazines.dm | 2 +- .../projectiles/guns/projectile/shotgun.dm | 24 +++++++++++-------- 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 21bf92f6b4d..ceb8a980ea3 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -286,9 +286,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/security/armory/ballistic name = "Combat Shotguns Crate" - contains = list(/obj/item/weapon/gun/projectile/shotgun/combat, - /obj/item/weapon/gun/projectile/shotgun/combat, - /obj/item/weapon/gun/projectile/shotgun/combat, + contains = list(/obj/item/weapon/gun/projectile/shotgun/automatic/combat, + /obj/item/weapon/gun/projectile/shotgun/automatic/combat, + /obj/item/weapon/gun/projectile/shotgun/automatic/combat, /obj/item/weapon/storage/belt/bandolier, /obj/item/weapon/storage/belt/bandolier, /obj/item/weapon/storage/belt/bandolier) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 603c2ff0d88..ee35760305a 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -54,7 +54,7 @@ if("shotgun") new /obj/item/weapon/gun/projectile/shotgun(get_turf(H)) if("combatshotgun") - new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H)) + new /obj/item/weapon/gun/projectile/shotgun/automatic/combat(get_turf(H)) if("arg") new /obj/item/weapon/gun/projectile/automatic/ar(get_turf(H)) if("mateba") diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a2d76e96a5a..ed6ab0a9baf 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -719,7 +719,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C vend_reply = "Remember the name: Liberation Station!" products = list(/obj/item/weapon/gun/projectile/automatic/pistol/deagle/gold = 2,/obj/item/weapon/gun/projectile/automatic/pistol/deagle/camo = 2, /obj/item/weapon/gun/projectile/automatic/pistol/m1911 = 2,/obj/item/weapon/gun/projectile/automatic/proto = 2, - /obj/item/weapon/gun/projectile/shotgun/combat = 2,/obj/item/weapon/gun/projectile/automatic/gyropistol = 1, + /obj/item/weapon/gun/projectile/shotgun/automatic/combat = 2,/obj/item/weapon/gun/projectile/automatic/gyropistol = 1, /obj/item/weapon/gun/projectile/shotgun = 2,/obj/item/weapon/gun/projectile/automatic/ar = 2) premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2,/obj/item/ammo_box/magazine/m50 = 4,/obj/item/ammo_box/magazine/m45 = 2,/obj/item/ammo_box/magazine/m75 = 2) contraband = list(/obj/item/clothing/under/patriotsuit = 1,/obj/item/weapon/bedsheet/patriot = 3) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 538e98cb003..578fe74bade 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -24,7 +24,7 @@ loot = list( /obj/item/weapon/gun/projectile/automatic/pistol = 8, - /obj/item/weapon/gun/projectile/shotgun/combat = 5, + /obj/item/weapon/gun/projectile/shotgun/automatic/combat = 5, /obj/item/weapon/gun/projectile/revolver/mateba, /obj/item/weapon/gun/projectile/automatic/pistol/deagle ) diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 342f7234c62..f11f17da927 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -53,7 +53,7 @@ desc = "Oh god, this shouldn't be here" ammo_type = /obj/item/ammo_casing/shotgun/buckshot caliber = "shotgun" - max_ammo = 8 + max_ammo = 6 multiload = 0 /obj/item/ammo_box/magazine/internal/cylinder/dualshot diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 2d0da86aed1..f9975e4bc90 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -62,16 +62,6 @@ if (chambered) user << "A [chambered.BB ? "live" : "spent"] one is in the chamber." -// COMBAT SHOTGUN // - -/obj/item/weapon/gun/projectile/shotgun/combat - name = "combat shotgun" - desc = "A traditional shotgun with tactical furniture and an eight-shell capacity underneath." - icon_state = "cshotgun" - origin_tech = "combat=5;materials=2" - mag_type = /obj/item/ammo_box/magazine/internal/shotcom - w_class = 5 - // RIOT SHOTGUN // /obj/item/weapon/gun/projectile/shotgun/riot //for spawn in the armory @@ -293,3 +283,17 @@ ..() empty_alarm() return + +/obj/item/weapon/gun/projectile/shotgun/automatic/shoot_live_shot(mob/living/user as mob|obj) + ..() + src.pump(user) + +// COMBAT SHOTGUN // + +/obj/item/weapon/gun/projectile/shotgun/automatic/combat + name = "combat shotgun" + desc = "A self pumping shotgun with tactical furniture and an six-shell capacity underneath." + icon_state = "cshotgun" + origin_tech = "combat=5;materials=2" + mag_type = /obj/item/ammo_box/magazine/internal/shotcom + w_class = 5 \ No newline at end of file From 275bde00ef42cac981ed693f44a53e89dc83e936 Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 15:49:56 +0100 Subject: [PATCH 02/10] Changed description slightly --- code/modules/projectiles/guns/projectile/shotgun.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index f9975e4bc90..f6dbecc8ef6 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -292,7 +292,7 @@ /obj/item/weapon/gun/projectile/shotgun/automatic/combat name = "combat shotgun" - desc = "A self pumping shotgun with tactical furniture and an six-shell capacity underneath." + desc = "A semi automatic shotgun with tactical furniture and an six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/shotcom From 36ef683f94c56aaa8f5ccdd8300fead2dd3de1bb Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 16:43:23 +0100 Subject: [PATCH 03/10] Fixed metastation --- _maps/map_files/MetaStation/MetaStation.v41A.II.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index f8ac6277f61..4673b889455 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -254,7 +254,7 @@ "aeT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/sign/pods{pixel_y = 30},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) "aeU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{aiControlDisabled = 1; id_tag = "prisonereducation"; name = "Prisoner Education Chamber"; req_access = null; req_access_txt = "3"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/prison/solitary{name = "Prisoner Education Chamber"}) "aeV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Insanity Ward"; req_access_txt = "2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prison) -"aeW" = (/obj/structure/closet/secure_closet{name = "contraband locker"; req_access_txt = "3"},/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/obj/effect/spawner/lootdrop/armory_contraband{loot = list(/obj/item/weapon/gun/projectile/automatic/pistol = 5, /obj/item/weapon/gun/projectile/shotgun/combat = 5, /obj/item/weapon/gun/projectile/revolver/mateba, /obj/item/weapon/gun/projectile/automatic/pistol/deagle, /obj/item/weapon/storage/box/throwing_stars = 3)},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) +"aeW" = (/obj/structure/closet/secure_closet{name = "contraband locker"; req_access_txt = "3"},/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/obj/effect/spawner/lootdrop/armory_contraband{loot = list(/obj/item/weapon/gun/projectile/automatic/pistol = 5, /obj/item/weapon/gun/projectile/shotgun/automatic/combat = 5, /obj/item/weapon/gun/projectile/revolver/mateba, /obj/item/weapon/gun/projectile/automatic/pistol/deagle, /obj/item/weapon/storage/box/throwing_stars = 3)},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) "aeX" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aeY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/secure/safe{name = "armory safe A"; pixel_x = 6; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) "aeZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden) From 45f039d12b642d456e2c5608f8f2ede571b3d61d Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 18:26:37 +0100 Subject: [PATCH 04/10] Added changelog --- html/changelogs/Thunder12345-PR-10019.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/Thunder12345-PR-10019.yml diff --git a/html/changelogs/Thunder12345-PR-10019.yml b/html/changelogs/Thunder12345-PR-10019.yml new file mode 100644 index 00000000000..ec56c8ae505 --- /dev/null +++ b/html/changelogs/Thunder12345-PR-10019.yml @@ -0,0 +1,6 @@ +author: Thunder12345 + +delete-after: True + + - rscadd: "Combat shotguns are now semi automatic, and will be pumped automatically after firing." + - tweak: "Combat shotgun capacity has been reduced to six shells." \ No newline at end of file From a72180a79d53aadad9e7c9906a154118ff7397e0 Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 18:54:04 +0100 Subject: [PATCH 05/10] Changed combat shotgun sprite for 50% more tacticool. --- icons/mob/back.dmi | Bin 75039 -> 75080 bytes icons/obj/guns/projectile.dmi | Bin 21255 -> 21242 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index c59228819bb3448045b013ff24927584ab3614fa..3c7ac729af2ffe00b0d467890a8be7ed834838cb 100644 GIT binary patch delta 52439 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 delta 52300 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

u(0zCwyUbDl0JfPU5Q`=U{0&aXMLzi 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 Tv2n)&2L2w)s>tL@nY{ZSBc%r7 diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index c613bee4949ba84d0acae36ea483fa0a0f94a28d..dfaaccf320d79c29619e8f31e461f9fbd83295e0 100644 GIT binary patch literal 21242 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

Priority Announcement

" - src << "

The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

" - src << sound('sound/AI/shuttledock.ogg') - if(66 to 70) - //Flashes of danger - if(!halbody) - var/list/possible_points = list() - for(var/turf/simulated/floor/F in view(src,world.view)) - possible_points += F - if(possible_points.len) - var/turf/simulated/floor/target = pick(possible_points) - switch(rand(1,4)) - if(1) - halbody = image('icons/mob/human.dmi',target,"husk_l",TURF_LAYER) - if(2,3) - halbody = image('icons/mob/human.dmi',target,"husk_s",TURF_LAYER) - if(4) - halbody = image('icons/mob/alien.dmi',target,"alienother",TURF_LAYER) - - if(client) client.images += halbody - spawn(rand(50,80)) //Only seen for a brief moment. - if(client) client.images -= halbody - halbody = null - if(71 to 72) - //Fake death - src.sleeping = 20 - hal_crit = 1 - hal_screwyhud = 1 - spawn(rand(50,100)) - src.sleeping = 0 - hal_crit = 0 - hal_screwyhud = 0 - if(73 to 75) - fake_attack() + hallucinate(halpick) handling_hal = 0 +/obj/effect/hallucination + invisibility = INVISIBILITY_OBSERVER + var/mob/living/carbon/target = null -/mob/living/carbon/proc/fake_attack() -// var/list/possible_clones = new/list() +/obj/effect/hallucination/simple + var/image_icon = 'icons/mob/alien.dmi' + var/image_state = "alienh_pounce" + var/px = 0 + var/py = 0 + var/col_mod = null + var/image/current_image = null + var/image_layer = MOB_LAYER + var/active = 1 //qdelery + +/obj/effect/hallucination/simple/New(loc,var/mob/living/carbon/T) + target = T + current_image = GetImage() + if(target.client) target.client.images |= current_image + return + +/obj/effect/hallucination/simple/proc/GetImage() + var/image/I = image(image_icon,loc,image_state,image_layer,dir=src.dir) + I.pixel_x = px + I.pixel_y = py + if(col_mod) + I.color = col_mod + return I + +/obj/effect/hallucination/simple/proc/Show(var/update=1) + if(active) + if(target.client) target.client.images.Remove(current_image) + if(update) + current_image = GetImage() + if(target.client) target.client.images |= current_image + +/obj/effect/hallucination/simple/update_icon(var/new_state,var/new_icon,var/new_px=0,var/new_py=0) + image_state = new_state + if(new_icon) + image_icon = new_icon + else + image_icon = initial(image_icon) + px = new_px + py = new_py + Show() + +/obj/effect/hallucination/simple/Moved(atom/OldLoc, Dir) + Show() + return + +/obj/effect/hallucination/simple/Destroy() + if(target.client) target.client.images.Remove(current_image) + active = 0 + +#define FAKE_FLOOD_EXPAND_TIME 30 +#define FAKE_FLOOD_MAX_RADIUS 7 + +/obj/effect/hallucination/fake_flood + //Plasma/N2O starts flooding from the nearby vent + var/list/flood_images = list() + var/list/turf/flood_turfs = list() + var/image_icon = 'icons/effects/tile_effects.dmi' + var/image_state = "plasma" + var/radius = 0 + var/next_expand = 0 + +/obj/effect/hallucination/fake_flood/New(loc,var/mob/living/carbon/T) + ..() + target = T + for(var/obj/machinery/atmospherics/unary/vent_pump/U in orange(7,target)) + if(!U.welded) + src.loc = U.loc + break + image_state = pick("plasma","sleeping_agent") + flood_images += image(image_icon,src,image_state,MOB_LAYER) + flood_turfs += get_turf(src.loc) + if(target.client) target.client.images |= flood_images + next_expand = world.time + FAKE_FLOOD_EXPAND_TIME + SSobj.processing |= src + +/obj/effect/hallucination/fake_flood/process() + if(next_expand <= world.time) + radius++ + if(radius > FAKE_FLOOD_MAX_RADIUS) + qdel(src) + Expand() + next_expand = world.time + FAKE_FLOOD_EXPAND_TIME + return + +/obj/effect/hallucination/fake_flood/proc/Expand() + if(!flood_turfs) //for qdel + return + for(var/turf/T in circlerangeturfs(loc,radius)) + if((T in flood_turfs)|| T.blocks_air) + continue + flood_images += image(image_icon,T,image_state,MOB_LAYER) + flood_turfs += T + if(target.client) target.client.images |= flood_images + return + +/obj/effect/hallucination/fake_flood/Destroy() + SSobj.processing.Remove(src) + del(flood_turfs) + if(target.client) target.client.images.Remove(flood_images) + target = null + del(flood_images) + return + +/obj/effect/hallucination/simple/xeno + image_icon = 'icons/mob/alien.dmi' + image_state = "alienh_pounce" + +/obj/effect/hallucination/simple/xeno/New(loc,var/mob/living/carbon/T) + ..() + name = "alien hunter ([rand(1, 1000)])" + return + +/obj/effect/hallucination/simple/xeno/throw_at(atom/target, range, speed) // TODO : Make diagonal trhow into proc/property + if(!target || !src || (flags & NODROP)) return 0 + + src.throwing = 1 + + var/dist_x = abs(target.x - src.x) + var/dist_y = abs(target.y - src.y) + var/dist_travelled = 0 + var/dist_since_sleep = 0 + + var/tdist_x = dist_x; + var/tdist_y = dist_y; + + if(dist_x <= dist_y) + tdist_x = dist_y; + tdist_y = dist_x; + + var/error = tdist_x/2 - tdist_y + while(target && (((((dist_x > dist_y) && ((src.x < target.x) || (src.x > target.x))) || ((dist_x <= dist_y) && ((src.y < target.y) || (src.y > target.y))) || (src.x > target.x)) && dist_travelled < range) || !has_gravity(src))) + + if(!src.throwing) break + if(!istype(src.loc, /turf)) break + + var/atom/step = get_step(src, get_dir(src,target)) + if(!step) + break + src.Move(step, get_dir(src, step)) + hit_check() + error += (error < 0) ? tdist_x : -tdist_y; + dist_travelled++ + dist_since_sleep++ + if(dist_since_sleep >= speed) + dist_since_sleep = 0 + sleep(1) + + + src.throwing = 0 + src.throw_impact(get_turf(src)) + + return 1 + +/obj/effect/hallucination/simple/xeno/throw_impact(A) + update_icon("alienh_pounce") + if(A == target) + target.Weaken(5) + target.visible_message("[target] flails around wildly.","[name] pounces on you!") + +/obj/effect/hallucination/xeno_attack + //Xeno crawls from nearby vent,jumps at you, and goes back in + var/obj/machinery/atmospherics/unary/vent_pump/pump = null + var/obj/effect/hallucination/simple/xeno/xeno = null + +/obj/effect/hallucination/xeno_attack/New(loc,var/mob/living/carbon/T) + target = T + for(var/obj/machinery/atmospherics/unary/vent_pump/U in orange(7,target)) + if(!U.welded) + pump = U + break + xeno = new(pump.loc,target) + sleep(10) + xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) + xeno.throw_at(target,7,1) + sleep(10) + xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) + xeno.throw_at(pump,7,1) + sleep(10) + var/xeno_name = xeno.name + target << "[xeno_name] begins climbing into the ventilation system..." + sleep(10) + qdel(xeno) + target << "[xeno_name] scrambles into the ventilation ducts!" + qdel(src) + +/obj/effect/hallucination/singularity_scare + //Singularity moving towards you. + //todo Hide where it moved with fake space images + var/obj/effect/hallucination/simple/singularity/s = null + +/obj/effect/hallucination/singularity_scare/New(loc,var/mob/living/carbon/T) + target = T + var/turf/start = T.loc + var/screen_border = pick(SOUTH,EAST,WEST,NORTH) + for(var/i = 0,i<11,i++) + start = get_step(start,screen_border) + s = new(start,target) + for(var/i = 0,i<11,i++) + sleep(5) + s.loc = get_step(get_turf(s),get_dir(s,target)) + s.Show() + s.Eat() + qdel(s) + +/obj/effect/hallucination/simple/singularity + image_icon = 'icons/effects/224x224.dmi' + image_state = "singularity_s7" + image_layer = 6 + px = -96 + py = -96 + +/obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir) + var/target_dist = get_dist(src,target) + if(target_dist<=3) //"Eaten" + target.sleeping = 20 + target.hal_crit = 1 + target.hal_screwyhud = 1 + spawn(rand(50,100)) + target.sleeping = 0 + target.hal_crit = 0 + target.hal_screwyhud = 0 + +/obj/effect/hallucination/battle + +/obj/effect/hallucination/battle/New(loc,var/mob/living/carbon/T) + target = T + var/hits = rand(3,6) + switch(rand(1,5)) + if(1) //Laser fight + for(var/i=0,i[my_target] has attacked [src]!") src.health -= P.force - - return /obj/effect/fake_attacker/Crossed(var/mob/M, somenumber) @@ -266,20 +425,18 @@ Gunshots/explosions/opening doors/less rare audio (done) for(var/mob/O in oviewers(world.view , my_target)) O << "[my_target] stumbles around." -/obj/effect/fake_attacker/New() +/obj/effect/fake_attacker/New(loc,var/mob/living/carbon/T) ..() + my_target = T spawn(300) - if(my_target) - my_target.hallucinations -= src qdel(src) step_away(src,my_target,2) - spawn attack_loop() + spawn(0) + attack_loop() /obj/effect/fake_attacker/proc/updateimage() // del src.currentimage - - if(src.dir == NORTH) del src.currentimage src.currentimage = new /image(up,src) @@ -356,3 +513,251 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite /obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\ /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\ /obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank) + +/obj/effect/hallucination/bolts + var/list/doors = list() + +/obj/effect/hallucination/bolts/New(loc,var/mob/living/carbon/T,var/door_number=-1) //-1 for sever 1-2 for subtle + target = T + var/image/I = null + var/count = 0 + for(var/obj/machinery/door/airlock/A in range(target,7)) + if(count>door_number && door_number>0) + break + count++ + I = image(A.icon,A,"door_locked",layer=A.layer+0.1) + doors += I + if(target.client) + target.client.images |= I + sleep(2) + sleep(100) + for(var/image/B in doors) + if(target.client) + target.client.images.Remove(B) + qdel(src) + +/obj/effect/hallucination/whispers + +/obj/effect/hallucination/whispers/New(loc,var/mob/living/carbon/T) + target = T + var/speak_messages = list("I'm watching you...","[target.name]!","Go away!","Kchck-Chkck? Kchchck!","Did you hear that?","What did you do ?","Why?","Give me that!","Honk!","HELP!!") + var/radio_messages = list("Xenos!","Singularity loose!","They are arming the nuke!","They butchered Ian!","H-help!","[pick(teleportlocs)]!!","Where's [target.name]?","Call the shuttle!") + + var/list/mob/living/carbon/people = list() + var/list/mob/living/carbon/person = null + for(var/mob/living/carbon/H in view(target)) + if(H == target) + continue + if(!person) + person = H + else + if(get_dist(target,H)The light burns you!", \ + "You don't feel like yourself.", \ + "Unknown has punched [target]!", \ + "You hear something squeezing through the ducts...", \ + "You hear a distant scream.", \ + "You feel invincible, nothing can hurt you!", \ + "[target] sneezes.", \ + "You feel faint.", \ + "You hear a strange, alien voice in your head...[pick("Hiss","Ssss")]", \ + "You can see...everything!") + target << chosen + qdel(src) + +/mob/living/carbon/proc/hallucinate(var/hal_type) // Todo -> proc / defines + switch(hal_type) + if("xeno") + new /obj/effect/hallucination/xeno_attack(src.loc,src) + if("singulo") + new /obj/effect/hallucination/singularity_scare(src.loc,src) + if("battle") + new /obj/effect/hallucination/battle(src.loc,src) + if("flood") + new /obj/effect/hallucination/fake_flood(src.loc,src) + if("delusion") + new /obj/effect/hallucination/delusion(src.loc,src) + if("fake") + new /obj/effect/hallucination/fakeattacker(src.loc,src) + if("bolts") + new /obj/effect/hallucination/bolts(src.loc,src) + if("bolts_minor") + new /obj/effect/hallucination/bolts(src.loc,src,rand(1,2)) + if("whispers") + new /obj/effect/hallucination/whispers(src.loc,src) + if("message") + new /obj/effect/hallucination/message(src.loc,src) + if("sounds") + //Strange audio + //src << "Strange Audio" + switch(rand(1,18)) + if(1) src << 'sound/machines/airlock.ogg' + if(2) + if(prob(50))src << 'sound/effects/Explosion1.ogg' + else src << 'sound/effects/Explosion2.ogg' + if(3) src << 'sound/effects/explosionfar.ogg' + if(4) src << 'sound/effects/Glassbr1.ogg' + if(5) src << 'sound/effects/Glassbr2.ogg' + if(6) src << 'sound/effects/Glassbr3.ogg' + if(7) src << 'sound/machines/twobeep.ogg' + if(8) src << 'sound/machines/windowdoor.ogg' + if(9) + //To make it more realistic, I added two gunshots (enough to kill) + src << 'sound/weapons/Gunshot.ogg' + spawn(rand(10,30)) + src << 'sound/weapons/Gunshot.ogg' + if(10) src << 'sound/weapons/smash.ogg' + if(11) + //Same as above, but with tasers. + src << 'sound/weapons/Taser.ogg' + spawn(rand(10,30)) + src << 'sound/weapons/Taser.ogg' + //Rare audio + if(12) + //These sounds are (mostly) taken from Hidden: Source + var/list/creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/Heart Beat.ogg', 'sound/effects/screech.ogg',\ + 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ + 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ + 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ + 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') + src << pick(creepyasssounds) + if(13) + src << "You feel a tiny prick!" + if(14) + src << "

Priority Announcement

" + src << "

The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.

" + src << sound('sound/AI/shuttledock.ogg') + if(15) + src << 'sound/items/Welder.ogg' + if(16) + src << 'sound/items/Screwdriver.ogg' + if(17) + src << 'sound/weapons/saberon.ogg' + if(18) + src << 'sound/weapons/saberoff.ogg' + if("hudscrew") + //Screwy HUD + //src << "Screwy HUD" + hal_screwyhud = pick(1,2,3,3,4,4) + spawn(rand(100,250)) + hal_screwyhud = 0 + if("items") + //Strange items + //src << "Traitor Items" + if(!halitem) + halitem = new + var/list/slots_free = list(ui_lhand,ui_rhand) + if(l_hand) slots_free -= ui_lhand + if(r_hand) slots_free -= ui_rhand + if(istype(src,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + if(!H.belt) slots_free += ui_belt + if(!H.l_store) slots_free += ui_storage1 + if(!H.r_store) slots_free += ui_storage2 + if(slots_free.len) + halitem.screen_loc = pick(slots_free) + halitem.layer = 50 + switch(rand(1,6)) + if(1) //revolver + halitem.icon = 'icons/obj/guns/projectile.dmi' + halitem.icon_state = "revolver" + halitem.name = "Revolver" + if(2) //c4 + halitem.icon = 'icons/obj/assemblies.dmi' + halitem.icon_state = "plastic-explosive0" + halitem.name = "Mysterious Package" + if(prob(25)) + halitem.icon_state = "c4small_1" + if(3) //sword + halitem.icon = 'icons/obj/weapons.dmi' + halitem.icon_state = "sword1" + halitem.name = "Sword" + if(4) //stun baton + halitem.icon = 'icons/obj/weapons.dmi' + halitem.icon_state = "stunbaton" + halitem.name = "Stun Baton" + if(5) //emag + halitem.icon = 'icons/obj/card.dmi' + halitem.icon_state = "emag" + halitem.name = "Cryptographic Sequencer" + if(6) //flashbang + halitem.icon = 'icons/obj/grenade.dmi' + halitem.icon_state = "flashbang1" + halitem.name = "Flashbang" + if(client) client.screen += halitem + spawn(rand(100,250)) + qdel(halitem) + if("dangerflash") + //Flashes of danger + //src << "Danger Flash" + if(!halimage) + var/list/possible_points = list() + for(var/turf/simulated/floor/F in view(src,world.view)) + possible_points += F + if(possible_points.len) + var/turf/simulated/floor/target = pick(possible_points) + + switch(rand(1,3)) + if(1) + //src << "Space" + halimage = image('icons/turf/space.dmi',target,"[rand(1,25)]",TURF_LAYER) + if(2) + //src << "Fire" + halimage = image('icons/effects/fire.dmi',target,"1",TURF_LAYER) + if(3) + //src << "C4" + halimage = image('icons/obj/assemblies.dmi',target,"plastic-explosive2",OBJ_LAYER+0.01) + + + if(client) client.images += halimage + spawn(rand(10,50)) //Only seen for a brief moment. + if(client) client.images -= halimage + halimage = null + if("death") + //Fake death + src.sleeping = 20 + hal_crit = 1 + hal_screwyhud = 1 + spawn(rand(50,100)) + src.sleeping = 0 + hal_crit = 0 + hal_screwyhud = 0 + if("husks") + if(!halbody) + var/list/possible_points = list() + for(var/turf/simulated/floor/F in view(src,world.view)) + possible_points += F + if(possible_points.len) + var/turf/simulated/floor/target = pick(possible_points) + switch(rand(1,4)) + if(1) + var/image/body = image('icons/mob/human.dmi',target,"husk_s",TURF_LAYER) + var/matrix/M = matrix() + M.Turn(90) + body.transform = M + halbody = body + if(2,3) + halbody = image('icons/mob/human.dmi',target,"husk_s",TURF_LAYER) + if(4) + halbody = image('icons/mob/alien.dmi',target,"alienother",TURF_LAYER) + + if(client) client.images += halbody + spawn(rand(50,80)) //Only seen for a brief moment. + if(client) client.images -= halbody + halbody = null \ No newline at end of file diff --git a/code/modules/food&drinks/food/customizables.dm b/code/modules/food&drinks/food/customizables.dm index 7f9387b9865..c2aa2849c0a 100644 --- a/code/modules/food&drinks/food/customizables.dm +++ b/code/modules/food&drinks/food/customizables.dm @@ -44,7 +44,8 @@ else if((ingredients.len >= ingMax) || (reagents.total_volume >= volume)) user << "You can't add more ingredients to [src]!" else - user.drop_item() + if(!user.unEquip(I)) + return if(S.trash) new S.trash(get_turf(user)) S.trash = null //we remove the plate before adding the ingredient diff --git a/code/modules/food&drinks/kitchen machinery/food_cart.dm b/code/modules/food&drinks/kitchen machinery/food_cart.dm index fdae544a1b9..1cff6be4b82 100644 --- a/code/modules/food&drinks/kitchen machinery/food_cart.dm +++ b/code/modules/food&drinks/kitchen machinery/food_cart.dm @@ -63,7 +63,8 @@ if(istype(O, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/DG = O if(!DG.reagents.total_volume) //glass is empty - user.drop_item() + if(!user.drop_item()) + return qdel(DG) glasses++ user << "The [src] accepts the drinking glass, sterilizing it." @@ -72,7 +73,8 @@ user << "The [src] is at full capacity." else var/obj/item/weapon/reagent_containers/food/snacks/S = O - user.drop_item() + if(!user.drop_item()) + return S.loc = src if(stored_food[sanitize(S.name)]) stored_food[sanitize(S.name)]++ diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm index bb88e5ec867..fc6a899f5b0 100644 --- a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm +++ b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm @@ -60,7 +60,8 @@ if(target.stat == 0) user << "The monkey is struggling far too much to put it in the recycler." else - user.drop_item() + if(!user.drop_item()) + return qdel(target) user << "You stuff the monkey in the machine." playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 3722cdda67f..38c9be4e471 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -897,7 +897,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice() /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/attack_self(var/mob/user) squish(user) - user.drop_item() + user.unEquip(src) src.visible_message("[user] squashes the [src.name].","You hear a smack.") qdel(src) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index b22c6d40087..298ebdcf61c 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -63,7 +63,8 @@ if(2) if(is_type_in_list(I, allowed_books)) - user.drop_item() + if(!user.drop_item()) + return I.loc = src update_icon() else if(istype(I, /obj/item/weapon/storage/bag/books)) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index c9d885d8f29..f5dc638ee49 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -447,7 +447,8 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums /obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/book)) - user.drop_item() + if(!user.drop_item()) + return O.loc = src /obj/machinery/libraryscanner/attack_hand(var/mob/user as mob) @@ -505,7 +506,8 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(busy) user << "The book binder is busy. Please wait for completion of previous operation." return - user.drop_item() + if(!user.drop_item()) + return O.loc = src user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") src.visible_message("[src] begins to hum as it warms up its printing drums.") diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 1dd002229be..265238f483c 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -89,7 +89,8 @@ if(istype(W,/obj/item/weapon/card/id)) var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I) && !istype(inserted_id)) - usr.drop_item() + if(!user.drop_item()) + return I.loc = src inserted_id = I interact(user) @@ -184,7 +185,8 @@ else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "No valid ID." @@ -333,7 +335,8 @@ else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "No valid ID." @@ -356,7 +359,8 @@ if(istype(I,/obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = usr.get_active_hand() if(istype(C) && !istype(inserted_id)) - usr.drop_item() + if(!usr.drop_item()) + return C.loc = src inserted_id = C interact(user) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index e9dc6f7d14f..366ade4a6de 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -86,7 +86,8 @@ else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "Invalid ID." diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index 4f0e74aff4c..e9befa30d43 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -60,8 +60,9 @@ ..() if (istype(W, /obj/item/weapon/coin)) var/obj/item/weapon/coin/C = W + if(!user.drop_item()) + return user << "You add the [C.name] into the bag." - usr.drop_item() contents += C if (istype(W, /obj/item/weapon/moneybag)) var/obj/item/weapon/moneybag/C = W diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 211cadcdf97..edb420703b4 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -11,7 +11,8 @@ /obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if (istype(W, /obj/item/weapon/ore)) - user.drop_item() + if(!user.drop_item()) + return W.loc = src if (istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 95838e1b90d..ffb73ef359f 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -41,6 +41,8 @@ user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain!" return + if(!user.unEquip(src)) + return var/mob/living/carbon/brain/B = newbrain.brainmob if(!B.key) var/mob/dead/observer/ghost = B.get_ghost() @@ -58,7 +60,6 @@ dead_mob_list -= brainmob //Update dem lists living_mob_list += brainmob - user.drop_item() newbrain.loc = src //P-put your brain in it brain = newbrain diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 357bc610e14..c99b39e3995 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -79,7 +79,7 @@ if(2) say(pick("FUS RO DAH","fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom", "PACKETS!!!", "port ba[pick("y", "i", "e")] med!!!!", "REVIRT GON CHEM!!!!!!!!", "youed call her a toeugh bithc", "closd for merbegging", "pray can u [pick("spawn", "MAke me", "creat")] [pick("zenomorfs", "ayleins", "treaitors", "sheadow linkgs", "ubdoocters")]???")) if(3) - say(pick("GEY AWAY FROM ME U GREIFING PRICK!!!!", "ur a fuckeing autist!", ";HELP SHITECIRTY MURDERIN MEE!!!", "hwat dose tha [pick("g", "squid", "r")] mean?????", "CAL; TEH SHUTTLE!!!!!", "wearnig siNGUARLTY IS .... FIne xDDDDDDDDD", "AI laW 22 Open door", "this SI mY stATIon......", "who the HELL do u thenk u r?!!!!", "geT THE FUCK OUTTTT", "H U G B O X", ";;CRAGING THIS STTAYTION WITH NIO SURVIVROS", "[pick("bager", "syebl")] is down11!!!!!!!!!!!!!!!!!")) + say(pick("GEY AWAY FROM ME U GREIFING PRICK!!!!", "ur a fuckeing autist!", ";HELP SHITECIRTY MURDERIN MEE!!!", "hwat dose tha [pick("g", "squid", "r")] mean?????", "CAL; TEH SHUTTLE!!!!!", "wearnig siNGUARLTY IS .... FIne xDDDDDDDDD", "AI laW 22 Open door", "this SI mY stATIon......", "who the HELL do u thenk u r?!!!!", "geT THE FUCK OUTTTT", "H U G B O X", ";;CRAGING THIS STTAYTION WITH NIO SURVIVROS", "[pick("bager", "syebl")] is down11!!!!!!!!!!!!!!!!!", "PSHOOOM")) if(4) emote("drool") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index a59914466bf..9ac7837148a 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -375,10 +375,6 @@ else hallucination -= 2 - else - for(var/atom/a in hallucinations) - qdel(a) - //this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/carbon/handle_regular_hud_updates() if(!client) return 0 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 59436c1028b..6509db4ac67 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -17,8 +17,6 @@ var/hallucination = 0 //Directly affects how long a mob will hallucinate for - var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm - var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a35b0988bca..e37ac76c526 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -450,7 +450,8 @@ else if(cell) user << "There is a power cell already installed!" else - user.drop_item() + if(!user.drop_item()) + return W.loc = src cell = W user << "You insert the power cell." @@ -525,27 +526,29 @@ else if(istype(W, /obj/item/borg/upgrade/)) var/obj/item/borg/upgrade/U = W if(!opened) - usr << "You must access the borgs internals!" + user << "You must access the borgs internals!" else if(!src.module && U.require_module) - usr << "The borg must choose a module before it can be upgraded!" + user << "The borg must choose a module before it can be upgraded!" else if(U.locked) - usr << "The upgrade is locked and cannot be used yet!" + user << "The upgrade is locked and cannot be used yet!" else + if(!user.drop_item()) + return if(U.action(src)) - usr << "You apply the upgrade to [src]." - usr.drop_item() + user << "You apply the upgrade to [src]." U.loc = src else - usr << "Upgrade error." + user << "Upgrade error." else if(istype(W, /obj/item/device/toner)) if(toner >= tonermax) - usr << "The toner level of [src] is at it's highest level possible!" + user << "The toner level of [src] is at it's highest level possible!" else + if(!user.drop_item()) + return toner = 40 - usr.drop_item() qdel(W) - usr << "You fill the toner level of [src] to its max capacity." + user << "You fill the toner level of [src] to its max capacity." else if(W.force && W.damtype != STAMINA) //only sparks if real damage is dealt. diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index ac8e32ecf63..8ae11c8f83c 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -28,7 +28,8 @@ /obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/paper)) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src toppaper = W user << "You clip the paper onto \the [src]." @@ -76,7 +77,8 @@ if(!haspen) if(istype(usr.get_active_hand(), /obj/item/weapon/pen)) var/obj/item/weapon/pen/W = usr.get_active_hand() - usr.drop_item() + if(!usr.unEquip(W)) + return W.loc = src haspen = W usr << "You slot [W] into [src]." diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 351443ec5bb..4d071708fb3 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -43,8 +43,9 @@ /obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/documents)) + if(!user.drop_item()) + return user << "You put [P] in [src]." - user.drop_item() P.loc = src icon_state = "[initial(icon_state)]-open" sleep(5) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index b75140b9c43..6f725e04187 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -31,7 +31,8 @@ /obj/item/weapon/folder/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo) || istype(W, /obj/item/documents)) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src user << "You put [W] into [src]." update_icon() diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 96c8f83e2b0..bd947c4b7a3 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -55,8 +55,9 @@ /obj/item/weapon/hand_labeler/attackby(obj/item/I as obj, mob/user as mob, params) ..() if(istype(I, /obj/item/hand_labeler_refill)) + if(!user.unEquip(I)) + return user << "You insert [I] into [src]." - user.drop_item() qdel(I) labels_left = initial(labels_left) return diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index fbad5ce1f85..dd672a6d11c 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -71,7 +71,8 @@ if(!istype(i)) return ..() - user.drop_item() + if(!user.unEquip(i)) + return i.loc = src user << "You put [i] in [src]." papers.Add(i) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 0554c0ab656..d5efcbe8dd4 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -96,19 +96,25 @@ if(M.client) M.mind_initialize() //give them a mind datum if they don't have one. if(user.mind in ticker.mode.A_bosses) - if(ticker.mode.add_gangster(M.mind,"A")) - M.Paralyse(5) - cooldown(max(0,ticker.mode.B_gang.len - ticker.mode.A_gang.len)) - else - user << "This mind is resistant to recruitment!" + var/recruitable = ticker.mode.add_gangster(M.mind,"A") + switch(recruitable) + if(2) + M.Paralyse(5) + cooldown(max(0,ticker.mode.B_gang.len - ticker.mode.A_gang.len)) + if(1) + user << "This mind has already been recruited by another gang!" + else + user << "This mind is resistant to recruitment!" else if(user.mind in ticker.mode.B_bosses) - if(ticker.mode.add_gangster(M.mind,"B")) - M.Paralyse(5) - cooldown(max(0,ticker.mode.A_gang.len - ticker.mode.B_gang.len)) - else - user << "This mind is resistant to recruitment!" - else - user << "This mind is so vacant that it is not susceptible to influence!" + var/recruitable = ticker.mode.add_gangster(M.mind,"B") + switch(recruitable) + if(2) + M.Paralyse(5) + cooldown(max(0,ticker.mode.A_gang.len - ticker.mode.B_gang.len)) + if(1) + user << "This mind has already been recruited by another gang!" + else + user << "This mind is resistant to recruitment!" /obj/item/weapon/pen/gang/proc/cooldown(modifier) cooldown = 1 diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 92f82705db9..35e87edada7 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -223,7 +223,8 @@ /obj/machinery/photocopier/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/weapon/paper)) if(copier_empty()) - user.drop_item() + if(!user.drop_item()) + return copy = O O.loc = src user << "You insert [O] into [src]." @@ -234,7 +235,8 @@ else if(istype(O, /obj/item/weapon/photo)) if(copier_empty()) - user.drop_item() + if(!user.drop_item()) + return photocopy = O O.loc = src user << "You insert [O] into [src]." @@ -245,7 +247,8 @@ else if(istype(O, /obj/item/device/toner)) if(toner <= 0) - user.drop_item() + if(!user.drop_item()) + return qdel(O) toner = 40 user << "You insert [O] into [src]." diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 378ec945f85..0832ab226f3 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -140,8 +140,9 @@ if(pictures_left) user << "[src] still has some film in it!" return + if(!user.unEquip(I)) + return user << "You insert [I] into [src]." - user.drop_item() qdel(I) pictures_left = pictures_max return diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 7ddb67eefeb..c57cd9b9875 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -413,7 +413,8 @@ if (stat & MAINT) user << "There is no connector for your power cell!" return - user.drop_item() + if(!user.drop_item()) + return W.loc = src cell = W user.visible_message(\ diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 00eb9f8c827..3608dde2b80 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -347,6 +347,8 @@ src.add_fingerprint(user) var/obj/item/weapon/light/L = W if(istype(L, light_type)) + if(!user.drop_item()) + return status = L.status user << "You insert the [L.name]." switchcount = L.switchcount @@ -355,7 +357,6 @@ on = has_power() update() - user.drop_item() //drop the item to update overlays and such qdel(L) if(on && rigged) diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 3202414ffb7..82c2955ad09 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -64,7 +64,8 @@ var/global/list/rad_collectors = list() if(src.P) user << "There's already a plasma tank loaded!" return 1 - user.drop_item() + if(!user.drop_item()) + return 1 src.P = W W.loc = src update_icons() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 1c8838e4311..38bf1d6c869 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -253,8 +253,9 @@ if(!tracker) if(istype(W, /obj/item/weapon/tracker_electronics)) + if(!user.drop_item()) + return tracker = 1 - user.drop_item() qdel(W) user.visible_message("[user] inserts the electronics into the solar assembly.", "You insert the electronics into the solar assembly.") return 1 diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 3e363056825..d89eea7c8fa 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -232,7 +232,8 @@ desc = "Its nerf or nothing! ... Although, this one doesn't look too safe." user << "You pop the safety cap off of [src]." else if ((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) - user.drop_item() + if(!user.unEquip(A)) + return A.loc = BB BB.damage = 5 BB.nodamage = 0 diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index f11f17da927..8b82c84d7be 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -134,6 +134,17 @@ ..() icon_state = "45-[ammo_count() ? "8" : "0"]" +/obj/item/ammo_box/magazine/uzim9mm + name = "uzi magazine (9mm)" + icon_state = "uzi9mm-32" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" + max_ammo = 32 + +/obj/item/ammo_box/magazine/uzim9mm/update_icon() + ..() + icon_state = "uzi9mm-[round(ammo_count(),4)]" + /obj/item/ammo_box/magazine/smgm9mm name = "SMG magazine (9mm)" icon_state = "smg9mm-20" @@ -157,11 +168,11 @@ ..() icon_state = "c20r45-[round(ammo_count(),2)]" -obj/item/ammo_box/magazine/tommygunm9mm - name = "drum magazine (9mm)" +obj/item/ammo_box/magazine/tommygunm45 + name = "drum magazine (.45)" icon_state = "drum45" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = "9mm" + ammo_type = /obj/item/ammo_casing/c45 + caliber = ".45" max_ammo = 50 /obj/item/ammo_box/magazine/m50 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 9b1666fd2f0..dd9c381e2d6 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -98,8 +98,8 @@ if(heavy_weapon) if(user.get_inactive_hand()) if(prob(15)) - user.visible_message("[src] flies out of [user]'s hands!", "[src] kicks out of your grip!") - user.drop_item() + if(user.drop_item()) + user.visible_message("[src] flies out of [user]'s hands!", "[src] kicks out of your grip!") /obj/item/weapon/gun/emp_act(severity) for(var/obj/O in contents) @@ -235,7 +235,8 @@ if(user.l_hand != src && user.r_hand != src) user << "You'll need [src] in your hands to do that!" return - user.drop_item() + if(!user.unEquip(A)) + return user << "You click [S] into place on [src]." if(S.on) SetLuminosity(0) diff --git a/code/modules/projectiles/guns/grenade_launcher.dm b/code/modules/projectiles/guns/grenade_launcher.dm index 9ae8b1e8c6f..2075ebeaa60 100644 --- a/code/modules/projectiles/guns/grenade_launcher.dm +++ b/code/modules/projectiles/guns/grenade_launcher.dm @@ -20,7 +20,8 @@ if((istype(I, /obj/item/weapon/grenade))) if(grenades.len < max_grenades) - user.drop_item() + if(!user.unEquip(I)) + return I.loc = src grenades += I user << "You put the grenade in the grenade launcher." diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 66184119b45..7bea46b2f96 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -68,7 +68,8 @@ if(user.l_hand != src && user.r_hand != src) user << "You'll need [src] in your hands to do that." return - user.drop_item() + if(!user.unEquip(A)) + return user << "You screw [S] onto [src]." suppressed = A S.oldsound = fire_sound diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index badf178b878..19545232181 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -106,7 +106,13 @@ icon_state = "c20r[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" return - +/obj/item/weapon/gun/projectile/automatic/mini_uzi + name = "uzi" + desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds." + icon_state = "mini-uzi" + origin_tech = "combat=5;materials=2;syndicate=8" + mag_type = /obj/item/ammo_box/magazine/uzim9mm + burst_size = 2 /obj/item/weapon/gun/projectile/automatic/l6_saw name = "syndicate LMG" @@ -237,7 +243,7 @@ w_class = 5 slot_flags = 0 origin_tech = "combat=5;materials=1;syndicate=2" - mag_type = /obj/item/ammo_box/magazine/tommygunm9mm + mag_type = /obj/item/ammo_box/magazine/tommygunm45 fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 4 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 7178c36469f..9e1dc22e592 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -79,7 +79,7 @@ playsound(user, fire_sound, 50, 1) user << "[src] blows up in your face!" user.take_organ_damage(0,20) - user.drop_item() + user.unEquip(src) qdel(src) return 0 ..() diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index f0a17314848..6ed12b01b64 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -63,7 +63,8 @@ /obj/item/weapon/gun/syringe/attackby(var/obj/item/A as obj, mob/user as mob, params, var/show_msg = 1) if(istype(A, /obj/item/weapon/reagent_containers/syringe)) if(syringes.len < max_syringes) - user.drop_item() + if(!user.unEquip(A)) + return user << "You load [A] into \the [src]." syringes.Add(A) A.loc = src diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index acc5f311420..123e35a2fd8 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -30,7 +30,8 @@ user << "You remove [G]'s old pin." if(!G.pin) - user.drop_item() + if(!user.unEquip(src)) + return gun_insert(user, G) user << "You insert [src] into [G]." else diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 93579b5f0d8..8fc1a4622f9 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -108,7 +108,6 @@ loc = target_turf if(A) permutated.Add(A) - Range() return 0 else if(A && A.density && !ismob(A) && !(A.flags & ON_BORDER)) //if we hit a dense non-border obj or dense turf then we also hit one of the mobs on that tile. diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index e87808254e6..00cd2fc1a42 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -30,6 +30,7 @@ icon_state = "xray" damage = 15 irradiate = 30 + range = 15 forcedodge = 1 /obj/item/projectile/beam/disabler diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 75ba81b7dc1..efc20cedfd7 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -227,9 +227,10 @@ ready_dna(H) if(H.dna && prob(50)) var/list/all_species = list() - for(var/datum/species/S in typesof(/datum/species) - /datum/species) + for(var/speciestype in typesof(/datum/species) - /datum/species) + var/datum/species/S = new speciestype() if(!S.dangerous_existence) - all_species += S + all_species += speciestype hardset_dna(H, null, null, null, null, pick(all_species)) H.update_icons() else diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 3dab9a3442a..0fbb8ee12b3 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -155,9 +155,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return src.beaker = B - user.drop_item() B.loc = src user << "You add the beaker to the machine." SSnano.update_uis(src) // update all UIs attached to src @@ -290,8 +291,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return + src.beaker = B - user.drop_item() B.loc = src user << "You add the beaker to the machine." src.updateUsrDialog() @@ -301,8 +304,10 @@ if(src.loaded_pill_bottle) user << "A pill bottle is already loaded into the machine!" return + if(!user.drop_item()) + return + src.loaded_pill_bottle = B - user.drop_item() B.loc = src user << "You add the pill bottle into the dispenser slot." src.updateUsrDialog() @@ -619,8 +624,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return + src.beaker = B - user.drop_item() B.loc = src user << "You add the beaker to the machine." src.updateUsrDialog() @@ -630,8 +637,10 @@ if(src.loaded_pill_bottle) user << "A pill bottle is already loaded into the machine!" return + if(!user.drop_item()) + return + src.loaded_pill_bottle = B - user.drop_item() B.loc = src user << "You add the pill bottle into the dispenser slot." src.updateUsrDialog() @@ -919,9 +928,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return src.beaker = I - user.drop_item() I.loc = src user << "You add the beaker to the machine." src.updateUsrDialog() @@ -1053,8 +1063,9 @@ if (beaker) return 1 else + if(!user.drop_item()) + return 1 src.beaker = O - user.drop_item() O.loc = src update_icon() src.updateUsrDialog() @@ -1548,8 +1559,9 @@ if (beaker) return 1 else + if(!user.drop_item()) + return 1 src.beaker = O - user.drop_item() O.loc = src update_icon() src.updateUsrDialog() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 4ef5f0d72ed..553f6c9cfbc 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -157,7 +157,8 @@ /obj/structure/reagent_dispensers/water_cooler/attackby(var/obj/item/I, var/mob/user, params) if(istype(I, /obj/item/weapon/paper)) - user.drop_item() + if(!user.drop_item()) + return qdel(I) cups++ return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index d3fa4a658a6..74f51bf24e2 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -123,9 +123,9 @@ stuff_mob_in(G.affecting, user) return - if(!I || I.flags & NODROP) return + if(!user.drop_item()) + return - user.drop_item() I.loc = src user.visible_message("[user.name] places \the [I] into \the [src].", \ "You place \the [I] into \the [src].") diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index be722fe8fb0..9663bf9b2cd 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -152,9 +152,10 @@ if(O.reliability < 90 && O.crit_fail == 0) usr << "Item is neither reliable enough or broken enough to learn from." return + if(!user.drop_item()) + return busy = 1 loaded_item = O - user.drop_item() O.loc = src user << "You add the [O.name] to the machine." flick("h_lathe_load", src) diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 2df53886ab3..6c584bc1a15 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -17,8 +17,9 @@ var/global/list/obj/machinery/message_server/message_servers = list() var/recipient = "Unspecified" //name of the person var/sender = "Unspecified" //name of the sender var/message = "Blank" //transferred message + var/image/photo = null //Attached photo -/datum/data_pda_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "") +/datum/data_pda_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "",var/param_photo=null) if(param_rec) recipient = param_rec @@ -26,6 +27,19 @@ var/global/list/obj/machinery/message_server/message_servers = list() sender = param_sender if(param_message) message = param_message + if(param_photo) + photo = param_photo + +/datum/data_pda_msg/Topic(href,href_list) + ..() + if(href_list["photo"]) + var/mob/M = usr + M << browse_rsc(photo, "pda_photo.png") + M << browse("PDA Photo" \ + + "" \ + + "" \ + + "", "window=book;size=192x192") + onclose(M, "PDA Photo") /datum/data_rc_msg var/rec_dpt = "Unspecified" //name of the person @@ -105,8 +119,9 @@ var/global/list/obj/machinery/message_server/message_servers = list() /obj/machinery/message_server/proc/send_chat_message(var/sender = "", var/channel = "", var/message = "") chat_msgs += new/datum/data_chat_msg(sender,channel,message) -/obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") - pda_msgs += new/datum/data_pda_msg(recipient,sender,message) +/obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "",var/photo=null) + . = new/datum/data_pda_msg(recipient,sender,message,photo) + pda_msgs += . /obj/machinery/message_server/proc/send_rc_message(var/recipient = "",var/sender = "",var/message = "",var/stamp = "", var/id_auth = "", var/priority = 1) rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 3182c0156d0..a194ed5327f 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -157,7 +157,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, else user << "Machine cannot accept disks in that format." return - user.drop_item() + if(!user.drop_item()) + return D.loc = src user << "You add the disk to the machine!" else diff --git a/code/modules/surgery/cybernetic_implants.dm b/code/modules/surgery/cybernetic_implants.dm index 3f4dcb5210c..ced4776f535 100644 --- a/code/modules/surgery/cybernetic_implants.dm +++ b/code/modules/surgery/cybernetic_implants.dm @@ -70,9 +70,10 @@ if(full) user << "You can't seem to implant anything else into the [target]'s [target_zone]!" else + if(!user.drop_item()) + return user.visible_message("[user] inserts [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone]!", "You insert [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone].") implant.owner = target implant.function() - user.drop_item() target.internal_organs |= implant implant.loc = target \ No newline at end of file diff --git a/code/modules/surgery/limb augmentation.dm b/code/modules/surgery/limb augmentation.dm index 950c4a536b0..22d168044c0 100644 --- a/code/modules/surgery/limb augmentation.dm +++ b/code/modules/surgery/limb augmentation.dm @@ -71,6 +71,8 @@ user << "That is the wrong robotic limb for this body part." return 0 + if(!user.drop_item()) + return 0 var/mob/living/carbon/human/H = target user.visible_message("[user] successfully augments [target]'s [parse_zone(target_zone)]!", "You successfully augment [target]'s [parse_zone(target_zone)].") L.loc = get_turf(target) @@ -92,7 +94,6 @@ H.organs += new /obj/item/organ/limb/robot/chest(src) for(var/datum/disease/appendicitis/A in H.viruses) //If they already have Appendicitis, Remove it A.cure(1) - user.drop_item() qdel(tool) H.update_damage_overlays(0) H.update_augments() //Gives them the Cyber limb overlay diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index c006939d876..74b9807dade 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -21,7 +21,7 @@ PoolOrNew(/obj/effect/effect/sparks, loc) playsound(src.loc, "sparks", 50, 1) blink_mob(user) - user.drop_item() + user.unEquip(src) qdel(src) /obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index aa0343a1641..0450b8109c1 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -58,7 +58,8 @@ if(crystals.len >= max_crystals) user << "There are not enough crystal slots." return - user.drop_item() + if(!user.drop_item()) + return crystals += W W.loc = null user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.", "You insert [W] into \the [src]'s crystal slot.") diff --git a/config/tips.txt b/config/tips.txt index dd6b2f23f85..04ea4ab50d0 100644 --- a/config/tips.txt +++ b/config/tips.txt @@ -85,3 +85,6 @@ You can use . or # instead of : for radio channels. Building this habit reduces While pulling something, clicking on a tile with an empty hand will move it to that tile. No more getting stuck in maint while dragging something! Things that override clicks like decks of cards or paper bins can still be picked up by dragging them to your character. Equipped things that override click can be unequipped by dragging it to an empty hand. In the job selection menu, from the lobby, you can use right click on the "Low/Medium/High" priority button to make it cycle backwards. +If you stay out of camera range for 10 seconds, the AI's track on you will break. +You can shoot cameras with bullets to disable them remotely. +Disabling a camera with wirecutters will not cause a camera alarm, but bludgeoning it will. diff --git a/html/changelog.html b/html/changelog.html index 6845a7e00f6..457de93df40 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,31 @@ -->
+

18 June 2015

+

AnturK updated:

+
    +
  • Added new photo-over-pda function. Apply the photo to PDA to send it with your next message!
  • +
+

Ikarrus updated:

+
    +
  • Department Management consoles have been added to Head of Staff offices. These will enable heads to modify ID's access to their department, as well as preform demotions.
  • +
+

Miauw updated:

+
    +
  • Bullets can now damage cameras.
  • +
  • Camera alarms now trigger 90 seconds after the first EMP pulse, instead of when all EMP pulses run out.
  • +
  • Makes the force required to damage cameras greater than or equal to ten instead of greater than ten.
  • +
  • Camera alarms now trigger when cameras are disabled with brute force or bullets.
  • +
+

Xhuis updated:

+
    +
  • Nanotrasen scientists have determined that a delaminating supermatter shard combining with a gravitational singularity is an extremely bad idea. They advise keeping the two as far apart as possible.
  • +
+

phil235 updated:

+
    +
  • Nerfed the xray gun. Its range is now 15 tiles.
  • +
+

15 June 2015

Incoming5643 updated:

SeC#i&|^s8JubpB#>~Ix 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 literal 21255 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 From 608486a9198e986856f9a8309c94e9501e876288 Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 18:55:05 +0100 Subject: [PATCH 06/10] Typo fix --- code/modules/projectiles/guns/projectile/shotgun.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index f6dbecc8ef6..56a312e9c19 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -292,7 +292,7 @@ /obj/item/weapon/gun/projectile/shotgun/automatic/combat name = "combat shotgun" - desc = "A semi automatic shotgun with tactical furniture and an six-shell capacity underneath." + desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/shotcom From cb8dc379dcaf627f70eb28a5b7751391e0602733 Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 19:18:41 +0100 Subject: [PATCH 07/10] Fixes changelog --- html/changelogs/Thunder12345-PR-10019.yml | 1 + tgstation.dme | 47 +++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/html/changelogs/Thunder12345-PR-10019.yml b/html/changelogs/Thunder12345-PR-10019.yml index ec56c8ae505..3a8e974e08c 100644 --- a/html/changelogs/Thunder12345-PR-10019.yml +++ b/html/changelogs/Thunder12345-PR-10019.yml @@ -2,5 +2,6 @@ author: Thunder12345 delete-after: True +changes: - rscadd: "Combat shotguns are now semi automatic, and will be pumped automatically after firing." - tweak: "Combat shotgun capacity has been reduced to six shells." \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index d9cf55015de..d8ae410a166 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6,6 +6,53 @@ // BEGIN_FILE_DIR #define FILE_DIR . +#define FILE_DIR "html" +#define FILE_DIR "icons" +#define FILE_DIR "icons/ass" +#define FILE_DIR "icons/effects" +#define FILE_DIR "icons/mecha" +#define FILE_DIR "icons/misc" +#define FILE_DIR "icons/mob" +#define FILE_DIR "icons/mob/inhands" +#define FILE_DIR "icons/obj" +#define FILE_DIR "icons/obj/assemblies" +#define FILE_DIR "icons/obj/atmospherics" +#define FILE_DIR "icons/obj/clothing" +#define FILE_DIR "icons/obj/doors" +#define FILE_DIR "icons/obj/flora" +#define FILE_DIR "icons/obj/food" +#define FILE_DIR "icons/obj/guns" +#define FILE_DIR "icons/obj/hydroponics" +#define FILE_DIR "icons/obj/machines" +#define FILE_DIR "icons/obj/pipes" +#define FILE_DIR "icons/obj/power_cond" +#define FILE_DIR "icons/pda_icons" +#define FILE_DIR "icons/spideros_icons" +#define FILE_DIR "icons/stamp_icons" +#define FILE_DIR "icons/Testing" +#define FILE_DIR "icons/turf" +#define FILE_DIR "icons/vending_icons" +#define FILE_DIR "nano" +#define FILE_DIR "nano/images" +#define FILE_DIR "sound" +#define FILE_DIR "sound/AI" +#define FILE_DIR "sound/ambience" +#define FILE_DIR "sound/arcade" +#define FILE_DIR "sound/effects" +#define FILE_DIR "sound/guitar" +#define FILE_DIR "sound/hallucinations" +#define FILE_DIR "sound/items" +#define FILE_DIR "sound/machines" +#define FILE_DIR "sound/magic" +#define FILE_DIR "sound/mecha" +#define FILE_DIR "sound/misc" +#define FILE_DIR "sound/piano" +#define FILE_DIR "sound/spookoween" +#define FILE_DIR "sound/violin" +#define FILE_DIR "sound/voice" +#define FILE_DIR "sound/voice/complionator" +#define FILE_DIR "sound/vox_fem" +#define FILE_DIR "sound/weapons" // END_FILE_DIR // BEGIN_PREFERENCES From ef1895b605aae992b75cb2e0962253b90adf9c1c Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Wed, 17 Jun 2015 19:30:47 +0100 Subject: [PATCH 08/10] I managed to commit the DME. Clap clap clap. --- tgstation.dme | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/tgstation.dme b/tgstation.dme index d8ae410a166..d9cf55015de 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6,53 +6,6 @@ // BEGIN_FILE_DIR #define FILE_DIR . -#define FILE_DIR "html" -#define FILE_DIR "icons" -#define FILE_DIR "icons/ass" -#define FILE_DIR "icons/effects" -#define FILE_DIR "icons/mecha" -#define FILE_DIR "icons/misc" -#define FILE_DIR "icons/mob" -#define FILE_DIR "icons/mob/inhands" -#define FILE_DIR "icons/obj" -#define FILE_DIR "icons/obj/assemblies" -#define FILE_DIR "icons/obj/atmospherics" -#define FILE_DIR "icons/obj/clothing" -#define FILE_DIR "icons/obj/doors" -#define FILE_DIR "icons/obj/flora" -#define FILE_DIR "icons/obj/food" -#define FILE_DIR "icons/obj/guns" -#define FILE_DIR "icons/obj/hydroponics" -#define FILE_DIR "icons/obj/machines" -#define FILE_DIR "icons/obj/pipes" -#define FILE_DIR "icons/obj/power_cond" -#define FILE_DIR "icons/pda_icons" -#define FILE_DIR "icons/spideros_icons" -#define FILE_DIR "icons/stamp_icons" -#define FILE_DIR "icons/Testing" -#define FILE_DIR "icons/turf" -#define FILE_DIR "icons/vending_icons" -#define FILE_DIR "nano" -#define FILE_DIR "nano/images" -#define FILE_DIR "sound" -#define FILE_DIR "sound/AI" -#define FILE_DIR "sound/ambience" -#define FILE_DIR "sound/arcade" -#define FILE_DIR "sound/effects" -#define FILE_DIR "sound/guitar" -#define FILE_DIR "sound/hallucinations" -#define FILE_DIR "sound/items" -#define FILE_DIR "sound/machines" -#define FILE_DIR "sound/magic" -#define FILE_DIR "sound/mecha" -#define FILE_DIR "sound/misc" -#define FILE_DIR "sound/piano" -#define FILE_DIR "sound/spookoween" -#define FILE_DIR "sound/violin" -#define FILE_DIR "sound/voice" -#define FILE_DIR "sound/voice/complionator" -#define FILE_DIR "sound/vox_fem" -#define FILE_DIR "sound/weapons" // END_FILE_DIR // BEGIN_PREFERENCES From 1c83cc6d4590c542d06d3a351f6974edf41123d7 Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Thu, 18 Jun 2015 18:07:57 +0100 Subject: [PATCH 09/10] Pray pray pray --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 22 +- bot/NanoTrasenBot.py | 10 - code/datums/wires/wires.dm | 3 +- code/game/dna.dm | 3 +- code/game/gamemodes/abduction/abduction.dm | 4 +- .../gamemodes/abduction/abduction_gear.dm | 9 - .../abduction/machinery/dispenser.dm | 3 +- code/game/gamemodes/gang/dominator.dm | 3 +- code/game/gamemodes/gang/gang.dm | 4 +- code/game/gamemodes/gang/recaller.dm | 32 +- code/game/gamemodes/shadowling/shadowling.dm | 3 +- code/game/gamemodes/wizard/rightandwrong.dm | 4 +- code/game/machinery/PDApainter.dm | 3 +- code/game/machinery/alarm.dm | 10 +- .../atmoalter/portable_atmospherics.dm | 4 +- code/game/machinery/bots/cleanbot.dm | 3 +- code/game/machinery/bots/ed209bot.dm | 34 +- code/game/machinery/bots/medbot.dm | 9 +- code/game/machinery/bots/mulebot.dm | 6 +- code/game/machinery/bots/secbot.dm | 9 +- code/game/machinery/camera/camera.dm | 15 +- code/game/machinery/camera/camera_assembly.dm | 3 +- code/game/machinery/camera/tracking.dm | 11 +- code/game/machinery/cell_charger.dm | 3 +- .../game/machinery/computer/buildandrepair.dm | 14 +- code/game/machinery/computer/card.dm | 96 ++- code/game/machinery/computer/cloning.dm | 3 +- code/game/machinery/computer/medical.dm | 8 +- code/game/machinery/computer/message.dm | 2 +- code/game/machinery/computer/prisoner.dm | 3 +- code/game/machinery/computer/security.dm | 8 +- .../machinery/computer/telecrystalconsoles.dm | 3 +- code/game/machinery/constructable_frame.dm | 6 +- code/game/machinery/cryo.dm | 3 +- code/game/machinery/doors/airlock.dm | 1 + code/game/machinery/flasher.dm | 3 +- code/game/machinery/iv_drip.dm | 3 +- code/game/machinery/newscaster.dm | 3 +- code/game/machinery/pipe/pipe_dispenser.dm | 3 +- code/game/machinery/recharger.dm | 3 +- code/game/machinery/slotmachine.dm | 6 +- code/game/machinery/spaceheater.dm | 6 +- code/game/machinery/syndicatebomb.dm | 3 +- .../telecomms/computers/traffic_control.dm | 3 +- code/game/machinery/vending.dm | 6 +- code/game/machinery/washing_machine.dm | 6 +- code/game/mecha/mecha.dm | 6 +- code/game/objects/items.dm | 4 +- code/game/objects/items/devices/PDA/PDA.dm | 27 +- code/game/objects/items/devices/camera_bug.dm | 3 +- .../objects/items/devices/laserpointer.dm | 3 +- .../objects/items/devices/lightreplacer.dm | 3 +- .../objects/items/devices/radio/headset.dm | 6 +- .../game/objects/items/devices/radio/radio.dm | 3 +- .../objects/items/devices/taperecorder.dm | 3 +- .../objects/items/devices/transfer_valve.dm | 6 +- code/game/objects/items/robot/robot_parts.dm | 27 +- code/game/objects/items/weapons/RCD.dm | 5 +- .../objects/items/weapons/airlock_painter.dm | 3 +- code/game/objects/items/weapons/defib.dm | 3 +- code/game/objects/items/weapons/explosives.dm | 3 +- .../objects/items/weapons/flamethrower.dm | 6 +- .../items/weapons/grenades/chem_grenade.dm | 9 +- code/game/objects/items/weapons/handcuffs.dm | 3 +- .../objects/items/weapons/implants/implant.dm | 10 +- .../items/weapons/implants/implantpad.dm | 3 +- code/game/objects/items/weapons/paiwire.dm | 3 +- .../objects/items/weapons/pneumaticCannon.dm | 6 +- code/game/objects/items/weapons/stunbaton.dm | 3 +- code/game/objects/structures/ai_core.dm | 7 +- code/game/objects/structures/bedsheet_bin.dm | 3 +- .../objects/structures/crates_lockers/bins.dm | 3 +- .../crates_lockers/closets/fireaxe.dm | 3 +- .../structures/crates_lockers/crates.dm | 3 +- code/game/objects/structures/door_assembly.dm | 3 +- code/game/objects/structures/extinguisher.dm | 3 +- code/game/objects/structures/girders.dm | 3 +- code/game/objects/structures/guncase.dm | 3 +- code/game/objects/structures/janicart.dm | 6 +- code/game/objects/structures/mirror.dm | 10 +- code/game/objects/structures/noticeboard.dm | 3 +- .../structures/stool_bed_chair_nest/chairs.dm | 3 +- code/game/objects/structures/tables_racks.dm | 3 +- .../game/objects/structures/tank_dispenser.dm | 6 +- code/game/objects/structures/target_stake.dm | 3 +- .../objects/structures/windoor_assembly.dm | 3 +- .../game/turfs/simulated/floor/light_floor.dm | 3 +- code/modules/assembly/bomb.dm | 3 +- code/modules/clothing/clothing.dm | 3 +- code/modules/clothing/head/helmet.dm | 6 +- code/modules/events/wizard/race.dm | 5 +- code/modules/flufftext/Hallucination.dm | 745 ++++++++++++++---- .../modules/food&drinks/food/customizables.dm | 3 +- .../kitchen machinery/food_cart.dm | 6 +- .../kitchen machinery/monkeyrecycler.dm | 3 +- code/modules/hydroponics/grown.dm | 2 +- code/modules/library/lib_items.dm | 3 +- code/modules/library/lib_machines.dm | 6 +- code/modules/mining/equipment_locker.dm | 12 +- code/modules/mining/laborcamp/laborstacker.dm | 3 +- code/modules/mining/money_bag.dm | 3 +- code/modules/mining/satchel_ore_boxdm.dm | 3 +- code/modules/mob/living/carbon/brain/MMI.dm | 3 +- code/modules/mob/living/carbon/human/life.dm | 2 +- code/modules/mob/living/carbon/life.dm | 4 - code/modules/mob/living/living_defines.dm | 2 - .../modules/mob/living/silicon/robot/robot.dm | 23 +- code/modules/paperwork/clipboard.dm | 6 +- code/modules/paperwork/filingcabinet.dm | 3 +- code/modules/paperwork/folders.dm | 3 +- code/modules/paperwork/handlabeler.dm | 3 +- code/modules/paperwork/paperbin.dm | 3 +- code/modules/paperwork/pen.dm | 30 +- code/modules/paperwork/photocopier.dm | 9 +- code/modules/paperwork/photography.dm | 3 +- code/modules/power/apc.dm | 3 +- code/modules/power/lighting.dm | 3 +- code/modules/power/singularity/collector.dm | 3 +- code/modules/power/solar.dm | 3 +- .../projectiles/ammunition/ammo_casings.dm | 3 +- .../projectiles/ammunition/magazines.dm | 19 +- code/modules/projectiles/gun.dm | 7 +- .../projectiles/guns/grenade_launcher.dm | 3 +- code/modules/projectiles/guns/projectile.dm | 3 +- .../projectiles/guns/projectile/automatic.dm | 10 +- .../projectiles/guns/projectile/revolver.dm | 2 +- code/modules/projectiles/guns/syringe_gun.dm | 3 +- code/modules/projectiles/pins.dm | 3 +- code/modules/projectiles/projectile.dm | 1 - code/modules/projectiles/projectile/beams.dm | 1 + code/modules/projectiles/projectile/magic.dm | 5 +- code/modules/reagents/Chemistry-Machinery.dm | 28 +- code/modules/reagents/reagent_dispenser.dm | 3 +- code/modules/recycling/disposal.dm | 4 +- code/modules/research/experimentor.dm | 3 +- code/modules/research/message_server.dm | 21 +- code/modules/research/rdconsole.dm | 3 +- code/modules/surgery/cybernetic_implants.dm | 3 +- code/modules/surgery/limb augmentation.dm | 3 +- code/modules/telesci/bscrystal.dm | 2 +- code/modules/telesci/telesci_computer.dm | 3 +- config/tips.txt | 3 + html/changelog.html | 25 + html/changelogs/.all_changelog.yml | 22 + html/changelogs/Ikarrus-gangimplants.yml | 37 + html/changelogs/Xhuis-Superlarity.yml | 5 - icons/obj/ammo.dmi | Bin 16560 -> 17253 bytes icons/obj/computer.dmi | Bin 29561 -> 29507 bytes tgstation.dme | 47 ++ 149 files changed, 1305 insertions(+), 500 deletions(-) create mode 100644 html/changelogs/Ikarrus-gangimplants.yml delete mode 100644 html/changelogs/Xhuis-Superlarity.yml diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index c9070d72a64..2a6675536bd 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -104,7 +104,7 @@ "abZ" = (/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 0},/obj/machinery/camera{c_tag = "Head of Security's Office"; dir = 4; network = list("SS13")},/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/wood,/turf/simulated/floor/fancy/carpet,/area/security/hos) "aca" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/fancy/carpet,/area/security/hos) "acb" = (/turf/simulated/floor/fancy/carpet,/area/security/hos) -"acc" = (/obj/machinery/keycard_auth{pixel_x = 24; pixel_y = 10},/obj/machinery/hologram/holopad,/turf/simulated/floor/fancy/carpet,/area/security/hos) +"acc" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/fancy/carpet,/area/security/hos) "acd" = (/obj/structure/sign/securearea{pixel_y = -32},/obj/structure/lattice/catwalk,/turf/space,/area/space) "ace" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "acf" = (/obj/structure/lattice,/obj/item/stack/cable_coil/random,/turf/space,/area/space) @@ -403,6 +403,8 @@ "ahM" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/warden) "ahN" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/main) "ahO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) +"ahP" = (/obj/machinery/keycard_auth{pixel_x = 24; pixel_y = 10},/obj/machinery/computer/card/minor/hos,/turf/simulated/floor/fancy/carpet,/area/security/hos) +"ahQ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor) "ahR" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/main) "ahS" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main) "ahT" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-y"; dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/main) @@ -3901,7 +3903,7 @@ "bxc" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bxd" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bxe" = (/obj/structure/rack,/obj/item/device/aicard,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/crew_quarters/hor) -"bxf" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor) +"bxf" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/machinery/computer/card/minor/rd,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bxg" = (/obj/structure/lamarr,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/crew_quarters/hor) "bxh" = (/turf/simulated/wall/r_wall,/area/crew_quarters/hor) "bxi" = (/turf/simulated/wall,/area/toxins/explab) @@ -4094,7 +4096,7 @@ "bAN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bAO" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bAP" = (/obj/machinery/power/apc{dir = 8; name = "RD Office APC"; pixel_x = -25},/obj/structure/cable,/obj/machinery/light_switch{pixel_y = -23},/obj/structure/flora/kirbyplants/dead,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) -"bAQ" = (/obj/machinery/hologram/holopad,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) +"bAQ" = (/obj/machinery/computer/card/minor/cmo,/turf/simulated/floor/plasteel{icon_state = "barber"},/area/medical/cmo) "bAR" = (/obj/structure/table,/obj/item/weapon/cartridge/signal/toxins,/obj/item/weapon/cartridge/signal/toxins{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/toxins{pixel_x = 4; pixel_y = 6},/obj/machinery/camera{c_tag = "Research Director's Office"; dir = 1; network = list("SS13","RD")},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bAS" = (/obj/structure/closet/secure_closet/RD,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bAT" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) @@ -5651,7 +5653,7 @@ "ceK" = (/turf/simulated/wall/r_wall,/area/engine/engineering) "ceL" = (/obj/machinery/computer/atmos_alert,/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's Desk"; departmentType = 3; name = "Chief Engineer RC"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "ceM" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) -"ceN" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/lighter/zippo,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/weapon/stamp/ce,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) +"ceN" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/lighter/zippo,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/weapon/stamp/ce,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "ceO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "ceP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "ceQ" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/chiefs_office) @@ -5770,7 +5772,7 @@ "cgZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cha" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/camera{c_tag = "Engineering Power Storage"},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/engine/engineering) "chb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/plasteel,/area/engine/engineering) -"chc" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/camera{c_tag = "Chief Engineer's Office"; dir = 4; network = list("SS13")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) +"chc" = (/obj/machinery/camera{c_tag = "Chief Engineer's Office"; dir = 4; network = list("SS13")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/computer/card/minor/ce,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "chd" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "che" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/storage/fancy/cigarettes,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "chf" = (/turf/simulated/floor/engine,/area/toxins/explab) @@ -6426,7 +6428,7 @@ "ctF" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) "ctG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) "ctH" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering) -"ctI" = (/obj/structure/table/reinforced,/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) +"ctI" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/structure/filingcabinet/chestdrawer,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office) "ctJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; temperature = 273.15},/area/turret_protected/aisat_interior) "ctK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) "ctL" = (/obj/machinery/door/airlock/shuttle{name = "Mining Shuttle Airlock"; req_access_txt = "48"},/obj/docking_port/mobile{dir = 8; dwidth = 3; height = 5; id = "mining"; name = "mining shuttle"; travelDir = 90; width = 7},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "mining_home"; name = "mining shuttle bay"; width = 7},/turf/simulated/floor/plating,/area/shuttle/labor) @@ -6576,7 +6578,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaZaasaasaasaaKabaabbaasaasabcabdaaiaaiaaiaafaaaaaaaaaaaaaaaaafaaaaaVaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabeabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaOaaWaaNaaXabiaasabjaasaasaasaasaasaasaauaasabkablaaiaafaafaafaafaafaafaafaafabmabmabmabnabmabmaboaboabpabpabpaboaboaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaYabraaPabsabuaasaasabvabwabxaasabyabzabAaasabBabCaaiaafaaaaafaafaafaafaaaaafabnabDabEaeIabFabGaboabHabIabJabKabLaboaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafabMaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaabfabfabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabNabPabOabsabSabTabSabSabSabUabSabSabSabVabSabSabWaaiactactactactactactactactabmabXabEaeIabYabDaboabZacaacbacbaccaboaaaaafacdaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfaafaafaaaaceaaaacfaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaabfabfabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabNabPabOabsabSabTabSabSabSabUabSabSabSabVabSabSabWaaiactactactactactactactactabmabXabEaeIabYabDaboabZacaacbaccahPaboaaaaafacdaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfaafaafaaaaceaaaacfaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabQacgabRabsackaasaclabSacmacnacoabSacpacqacrabSacsaaiacMacNacOacOacPacQacRacSactacuabEaeIaecabDabpacwacxacyacbaczaboaaaaafacAacBacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaafaaaaafaaaaaaaceaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacCaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaciacDacjacEacHaasacIabSacJacnacIabSacKacqacIabSacLaaiacMadkadladladladladmadnactacTabEaeIaecabDabpacUacVacWacbacXaboaafaafacAacYacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadaaaaacZacZacZacZacZaafabfaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadbadbadbadbaafaafaaaadcaaaaafaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhaaHaaHaaHacFaddacGabsadfadgadhabSadfadiadhabSadfadjadhabSabSaaiafnaRFaNFadVaNFadWbhdbiGactadoabEaeIaecabDaboadpadqadradsadtaboabnabmadvacBacAacAachaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6645,15 +6647,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnwbkNbkNbsfbjxbjxbjxbiibjxbjxcuWbjxbjxbqAbsgaYpbshbsibjEbsjbskbslbeabaHbaHaZhbmzbsnbqHaHYbpibpjblibsobspbsqbsrbssbliaaaaaaaafbfCbstbsubstbgZaafaaaaaabqVbsvbswbsxbsybszbszbsAbsBbsCaHYaHYbmVbsDbfXbsEbsFbsGbsHbsGbsIbsJbsKbsLbsKbsKbsKbsMbsNbfXbhkbsObsPbsPbsQbsRbosbosbsSbsTbsUbpRboybncbeHbeIbsVbsVbsVbsVbsVbeKbnkbnkbnkbnkbsWbsXbsYbnkbsZbtabtbbtcbtcbtcbtcbtdbtebtfbrYbuAbuzbuCbuBbuBbuDbwabrVbsbbgxbsdbsebseabtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtobqxbqybqxbmlbtpbjxbjxbtqbjxbtpcuWbjxbjxbqAbtraYpbtsbttbnGbtubtvbecbpbbjEbtwbtxbmzbsnbqHaWUbpibtyblibtzbtAbtBbtCbmGbliaaaaaaaafbtDbtEbnUbtFbtGaafaaaaaabqVbtHbtIbtJbtKbtLbtMbtNbpubtOaHYaHYbmSbmSbtPbtQbpGbtRbtSbtTbtUbtVbtWbtXbtWbtXbtWbtXbtWbtXbtYbtZbsPbuabubbucbudbuebufbugbuhbuibujbncbukbulbumbnmbunbhJbhJbuobhJbhJbupbuqburbusbutbtcbuubuvbuwbuxbuxbuxbuybuybuybuybuybwcbwbbwebwdbwebwfbwebrVbsbbgxbwgbqvbwhbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuFbuGbuFbuHbuIbuHbuHbuHbuHbuHcuXbuKbjxbqAbuLaYpbuMbaHbuNbuObuPbuQbuRbuRbuRbuQbuQbuSbqHaJkbuTbpjblibuUbuVbuWbuXbuYbliaaaaaaaafbuZbvabqRbvbbvcaafaaaaaabqVbvdbvebvfbvgbtLbtMbtNbpubvhaHYaHYbvibvjbvkbvlbvmbvnbtXbvobvpbvqbvrbvsbDibvubvvbvubFzbtXbhkbjZbsPbvxbvybvzbvAbvBbvCbvDbvEbvEbvFbvGbvHbvIbvJbvKbvLbvMbvNbvMbvMbvObvMbvMbvPbvQbvRbvRbvSbvTbqibuxbvUbvVbvWbvXbvYbambuybxjbxibzCbyAbzDbxibAVbrVbsbbgxcjgbsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnwbkNbkNbkNaYpbkNbkNbkNbwibwicuYbwibwjbwkbwkbwibwibwlbwlbwmbwnbuQbwobwpbwqbwrbuQbsnbqHaHZaIcaIcbliblibwsbliblibwtbliaHUaHUaHUbwubwvbsubwwbwxaHUaHUaHUbpubpubpubpubpubpubpubpubpubvhaHYbwybtXbtXbtXbwzbtXbtXbtXbwAbvpbwBbwCbwDbwEbwFbwGbwHbwIbwDbhkbjZbsPbwJbwKbwLbwMbwNbwObrAbrAbrAbwPbwQbwRbwSbwTbwTbwTbwTbwUbwTbwTbwTbwVbwVbwWbwXbwYbwYbwZbxabqibuxbxbbxcbxdbxebxfbxgbxhbrVbrVbFBbFBbFBbrVcfYbrVbsbbgxbwgbqvcvhbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnwbkNbkNbkNaYpbkNbkNbkNbwibwicuYbwibwjbwkbwkbwibwibwlbwlbwmbwnbuQbwobwpbwqbwrbuQbsnbqHaHZaIcaIcbliblibwsbliblibwtbliaHUaHUaHUbwubwvbsubwwbwxaHUaHUaHUbpubpubpubpubpubpubpubpubpubvhaHYbwybtXbtXbtXbwzbtXbtXbtXbwAbvpbwBbwCbwDbwEbwFbwGbwHbwIbwDbhkbjZbsPbwJbwKbwLbwMbwNbwObrAbrAbrAbwPbwQbwRbwSbwTbwTbwTbwTbwUbwTbwTbwTbwVbwVbwWbwXbwYbwYbwZbxabqibuxbxbbxcbxdbxeahQbxgbxhbrVbrVbFBbFBbFBbrVcfYbrVbsbbgxbwgbqvcvhbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwicuZbxlbxmbxnbxobxpbwkbxqbxrbxsbxtbxubxvbxwbxxbxybuQbsnbqHaHYaHYaHYbxzaKQbxAaKAbxBbxCbxDaVLaVLaVLbxEbxFbxGbxHbxIaHYaHYaHYaHYaKQaHYaKAaHYaHYaHYbxzaHYbvhaHYbxJbtXbxKbxLbxMbxNbxObtXbxPbxQbxRbxSbwDbwEbwEbxTbxUbxVbwDbhkbxWbsPbrAbxXbxYbxZbwQbyabybbycbydbncbncbeHbyebwTbyfbygbyhbyibyjbykbwTbylbymbynbyobypbwYbyqbyrbysbytbyubyvbywbyxbyybyzbxhchfchfchfchfchfchfchfbrVbsbbgxbsdbsebseabtaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwkbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObxxbyPbuQbsnbyQaHYaHYaHYaHYaHYaHYaKAaHYbqHaHYaHYaHYaHYaHYbyRbySbyTaHYaHYaHYaHYaHYaHYaHYaKAbyUaHYaHYaHYaHYbvhbyVbyWbtSbyXbyYbyZbyYbzabtXbzbbvpbvqbzcbtXbzdbzebzfbzgbzhbtXbhkbjZbsPbsPbsPbsPbsPbncbncbncbncbncbncbzibgibzjbwTbzkbzlbzmbznbzobzpbwTbzqbzrbzsbztbzubwYbyqbzvbzwbzxbzybzzbzzbzzbzAbzBbxhchfchfctEctDchfchfchfbrVbsbbgxbsdbsebsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibzEbzFbzGbzHbzIcvbcvacvccvcbAZbzLbuRbzMbzNbzObzPbuQbzQbzRbzSbzSbzSbzTbzSbzSbzUbzSbzVaHYbzWbzXbzYbzYcuBbAabAbbAcbAdbAeaVLaVLbAfaVLbAgbAhaVLbAibAjbAkbAlaHYaHYbtXbAmbAnbAobtWbApbtXbtWbAqbArbtXbtXbtXbtXbtXbtXbtXbtXbhkbjZbfXbAsbAtbAubAvbAwbAxbAybAzbAAbAwbzibgibABbwTbACbADbAEbAFbAGbAHbwTbAIbAJbAKbALbAMbwYbyqbANbAObuybAPbAQbARbASbATbAUbxhchfchfchfbscchfchfchfbrVbsbbqtbAWbqvbqwbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibzEbzFbzGbzHbzIcvbcvacvccvcbAZbzLbuRbzMbzNbzObzPbuQbzQbzRbzSbzSbzSbzTbzSbzSbzUbzSbzVaHYbzWbzXbzYbzYcuBbAabAbbAcbAdbAeaVLaVLbAfaVLbAgbAhaVLbAibAjbAkbAlaHYaHYbtXbAmbAnbAobtWbApbtXbtWbAqbArbtXbtXbtXbtXbtXbtXbtXbtXbhkbjZbfXbAsbAtbAubAvbAwbAxbAybAzbAAbAwbzibgibABbwTbACbADbAEbAFbAGbAHbwTbAIbAJbAKbALbAMbwYbyqbANbAObuybAPbxfbARbASbATbAUbxhchfchfchfbscchfchfchfbrVbsbbqtbAWbqvbqwbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibwibwkbwkbwkbwkbwibwibAXbAYbAZbBabuQbuQbuQbuQbuQbuQbBbbBcaIcaIcaIcaIcbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbBebBfbBgbBhbBhbBhbBhbBhbBibBhbBhbBjbBhbyebBkbyeaIdaJlbBlbtXbBmbBnbBobBpbBqbtXbBrbxQbBsbBtbBubBvbBwbBxbBybBzbBAbBBbBCbBDbBDbBEbBFbBGbBHbBIbBJbBKbBLbAwbzibgibBMbBMbBMbBMbBMbBMbBMbBMbBMbBNbBNbBNbBNbBNbBNbBObBPbBQbuybuybuybuybuybuybuybxhbrVbrVbrVbrVbrVbrVbrVbrVbsbbgxbBRbBSbjobjoaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTaaaaaaaaaaafaaaaaabwlbBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfaaaaaaaafaaabBdbCgbChbCibCjbCkbClbCmbCnbCobCpbCqbCrbBhbCsbCtcuDbCubCwbCvbCvbCxbCybCzbCAbyebyebyebyebtXbCBbCCbCDbCCbCEbtXbCFbvpbCGbCHbCIbCJbCIbCIbCKbCLbCMbCNbCObCObCObCPbCQbvlbCRbCSbCTbCUbCVbAwbzibgibBMbCWbCWbCWbCXbCWbCWbCWbBMbCYbCYbCZbCYbCYbBNbDabDbbqibDcbDdbDebDfbDgbDhbJqbDjbDkbDlbDmbDnbDobsmbtnbtnbvwbDsbDdbDdbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelctjaekctjaejaaaaafaaabwlbwlbDtbxrbDubDvbDwbDxbDybDybDzbDAbDBbDCaafbDDbDEbDFbDGbDHbDIbDJbDIbDKbDIbDIbDIbBdbDLbDMbDNbBhbDObDPbDQbDRbDSbCvbDTbBjbBhbDUbDVbDWbDXbDYbDZbEabEbbCCbEcbCCbxQbEdbEebEfbEgbtXbEhbEibCCbCCbEjbEkbmSbmSbmSbmSbmSbElbEmbpGbEnbEobEpbBKbEqbAwbzibgibBMbCWbCWbCWbCWbCWbCWbCWbBMbErbEsbEtbEubEvbBNbEwbExbEybEzbEAbEBbECbEDbEDbEDbEDbEEbEFbEGbDnbjobvZbEIbEJbEJbEKbELbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNcuCctMcuCafNbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhbFkbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbFAbtXbFCbCCbCCbCCbCCbGNbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbDpbGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekajxctyajxaekbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGQbtXbGObGPbGSbtXbGRbDqbEHbDrbFDbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbBKbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybGabHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekajxctyajxaekbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGQbtXbGObGPbGSbtXbGRbDqbEHbDrbFDbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbAQbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybGabHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajxajxajxctLbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbMNbMNbMNbMNbMNbMNbOnbOCbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdbIAbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbGLbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekctyctyctyaekbERbIObIPbIQbIRbxrbxrbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobvZbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMctxctlbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajZctzctAafNbERbERbERbwlbwlbERbERbERbwlbwlbwlaaaaaaaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebsbbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/bot/NanoTrasenBot.py b/bot/NanoTrasenBot.py index 40ea8325772..2e0678bbd96 100644 --- a/bot/NanoTrasenBot.py +++ b/bot/NanoTrasenBot.py @@ -1300,17 +1300,7 @@ while True: print sender+" Has now joined" users.append(sender) ##### - if ".fi" in data[0] and sender.lower() == "skibiliano": - operators.append(sender) if sender.lower() not in peopleheknows[0]: - if data[0].split("!")[1] in peopleheknows[1]: - appendion = "...you do seem familiar however" - else: - appendion = "" - if data[1][1].lower() == channel or data[1][1].lower() == channel[1:]: - conn.privmsg(data[1][1],CORE_DATA.greeting.replace("USER",sender)+" "+appendion) - else: - conn.privmsg(data[1][1],"Hello! Haven't seen you here before! Happy to meet you! %s" %(appendion)) peopleheknows[0].append(sender.lower()) peopleheknows[1].append(data[0].split("!")[1]) with open("peopleheknows.cache","w") as peoplehecache: diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index e483513c40a..89b57e6a16e 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -134,7 +134,8 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", if(istype(I, /obj/item/device/assembly)) var/obj/item/device/assembly/A = I; if(A.attachable) - L.drop_item() + if(!L.drop_item()) + return Attach(colour, A) else L << "You need a attachable assembly!" diff --git a/code/game/dna.dm b/code/game/dna.dm index 60fa4a6ca9d..614e4698f55 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -519,7 +519,8 @@ /obj/machinery/computer/scan_consolenew/attackby(obj/item/I as obj, mob/user as mob, params) if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES if (!src.diskette) - user.drop_item() + if(!user.drop_item()) + return I.loc = src src.diskette = I user << "You insert [I]." diff --git a/code/game/gamemodes/abduction/abduction.dm b/code/game/gamemodes/abduction/abduction.dm index 502d4300932..5a3d85f957a 100644 --- a/code/game/gamemodes/abduction/abduction.dm +++ b/code/game/gamemodes/abduction/abduction.dm @@ -263,7 +263,7 @@ for(var/team_number=1,team_number<=teams,team_number++) var/obj/machinery/abductor/console/con = get_team_console(team_number) var/datum/objective/objective = team_objectives[team_number] - if (con.experiment.points > objective.target_amount) + if (con.experiment.points >= objective.target_amount) SSshuttle.emergency.request(null, 0.5) finished = 1 return ..() @@ -279,7 +279,7 @@ var/datum/mind/smind = scientists[team_number] var/mob/living/carbon/human/agent = amind.current var/mob/living/carbon/human/scientist = smind.current - if (console.experiment.points > objective.target_amount) + if (console.experiment.points >= objective.target_amount) world << "[team_name] team fullfilled its mission! " world << "Team Members : [agent.name]([agent.ckey]),[scientist.name]([scientist.ckey])" else diff --git a/code/game/gamemodes/abduction/abduction_gear.dm b/code/game/gamemodes/abduction/abduction_gear.dm index a13b347907c..dfb27d32870 100644 --- a/code/game/gamemodes/abduction/abduction_gear.dm +++ b/code/game/gamemodes/abduction/abduction_gear.dm @@ -22,15 +22,6 @@ var/stealth_armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15) var/combat_armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 50, rad = 50) - var/obj/machinery/camera/portable/vest_cam = null - - -/obj/item/clothing/suit/armor/abductor/vest/New() - ..() - vest_cam = new /obj/machinery/camera/portable(src) - vest_cam.c_tag = "Agent Vest Cam" - vest_cam.network = list("Abductor") - /obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode() switch(mode) if(VEST_STEALTH) diff --git a/code/game/gamemodes/abduction/machinery/dispenser.dm b/code/game/gamemodes/abduction/machinery/dispenser.dm index d346e0366a5..33b4944785b 100644 --- a/code/game/gamemodes/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/abduction/machinery/dispenser.dm @@ -60,7 +60,8 @@ /obj/machinery/abductor/gland_dispenser/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/gland)) - user.drop_item() + if(!user.drop_item()) + return W.loc = src for(var/i=1,i<=gland_colors.len,i++) if(gland_types[i] == W.type) diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 0bb8c7b21de..eb92b465a43 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -77,7 +77,7 @@ mode.A_timer = "OFFLINE" if(gang == "B") mode.B_timer = "OFFLINE" - if(!isnum(mode.A_timer) && !isnum(mode.B_timer)) + if(gang && !isnum(mode.A_timer) && !isnum(mode.B_timer)) SSshuttle.emergencyNoEscape = 0 if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) SSshuttle.emergency.mode = SHUTTLE_DOCKED @@ -85,7 +85,6 @@ priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") else priority_announce("All hostile activity within station systems have ceased.","Network Alert") - if(gang) ticker.mode.message_gangtools(((gang=="A") ? ticker.mode.A_tools : ticker.mode.B_tools),"Hostile takeover cancelled: Dominator is no longer operational.",1,1) SetLuminosity(0) icon_state = "dominator-broken" diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index 2b448e0b833..77bc23d5e46 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -258,7 +258,7 @@ if(check && isloyal(gangster_mind.current)) //Check to see if the potential gangster is implanted return 0 if(gangster_mind in (A_bosses | A_gang | B_bosses | B_gang)) - return 0 + return 1 if(gang == "A") A_gang += gangster_mind else @@ -275,7 +275,7 @@ gangster_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]!" gangster_mind.special_role = "[gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]" update_gang_icons_added(gangster_mind,gang) - return 1 + return 2 //////////////////////////////////////////////////////////////////// //Deals with players reverting to neutral (Not a gangster anymore)// //////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index b081a80686e..15ef02f0c58 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -78,18 +78,24 @@ dat += "(10 Influence) " if(points >= 10) - dat += "10mm Ammo
" + dat += "10mm Ammo
" else dat += "10mm Ammo
" - dat += "(50 Influence) " - if(points >= 50) - dat += "Thompson SMG
" + dat += "(40 Influence) " + if(points >= 40) + dat += "Mini Uzi
" else - dat += "Thompson SMG
" + dat += "Mini Uzi
" + + dat += "(25 Influence) " + if(points >= 25) + dat += "Uzi Ammo
" + else + dat += "Uzi Magazine
" dat += "
" - dat += "Purchase Utilities:
" + dat += "Purchase Equipment:
" dat += "(5 Influence) " if(points >= 5) @@ -163,14 +169,18 @@ if(points >= 20) item_type = /obj/item/weapon/gun/projectile/automatic/pistol points = 20 - if("ammo") + if("10mmammo") if(points >= 10) item_type = /obj/item/ammo_box/magazine/m10mm points = 10 - if("SMG") - if(points >= 50) - item_type = /obj/item/weapon/gun/projectile/automatic/tommygun - points = 50 + if("uzi") + if(points >= 40) + item_type = /obj/item/weapon/gun/projectile/automatic/mini_uzi + points = 40 + if("9mmammo") + if(points >= 25) + item_type = /obj/item/ammo_box/magazine/uzim9mm + points = 25 if("vest") if(points >= 10) item_type = /obj/item/clothing/suit/armor/bulletproof diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 7bd0a665f3f..b9f170b2a92 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -85,7 +85,8 @@ Made by Xhuis if(config.protect_assistant_from_antagonist) restricted_jobs += "Assistant" - var/shadowlings = 2 //How many shadowlings there are; hardcoded to 2 + var/shadowlings = max(2, round(num_players()/10)) + while(shadowlings) var/datum/mind/shadow = pick(antag_candidates) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index ee35760305a..2a38c519a77 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -1,7 +1,7 @@ //In this file: Summon Magic/Summon Guns/Summon Events /proc/rightandwrong(var/summon_type, var/mob/user, var/survivor_probability) //0 = Summon Guns, 1 = Summon Magic - var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun","arg") + var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun","arg","uzi") var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying","staffdoor", "special") var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos", "necromantic") @@ -63,6 +63,8 @@ new /obj/item/weapon/gun/projectile/shotgun/boltaction(get_turf(H)) if("speargun") new /obj/item/weapon/gun/projectile/automatic/speargun(get_turf(H)) + if("uzi") + new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H)) if("cannon") var/obj/item/weapon/gun/energy/lasercannon/gat = new(get_turf(H)) gat.pin = new /obj/item/device/firing_pin //no authentication pins for spawned guns. fun allowed. diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index c563482d147..ab226c94879 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -48,7 +48,8 @@ else var/obj/item/device/pda/P = usr.get_active_hand() if(istype(P)) - user.drop_item() + if(!user.drop_item()) + return storedpda = P P.loc = src P.add_fingerprint(usr) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 57819a2d177..7be7a95a65b 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -735,11 +735,11 @@ return if(0) if(istype(W, /obj/item/weapon/airalarm_electronics)) - user << "You insert the circuit." - buildstage = 1 - update_icon() - user.drop_item() - qdel(W) + if(user.unEquip(W)) + user << "You insert the circuit." + buildstage = 1 + update_icon() + qdel(W) return if(istype(W, /obj/item/weapon/wrench)) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 25a2aa88a2d..85b57fb7413 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -67,8 +67,10 @@ if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) if (src.holding) return + if(!user.drop_item()) + return + var/obj/item/weapon/tank/T = W - user.drop_item() T.loc = src src.holding = T update_icon() diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index f1dd0e405c3..f73276842c3 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -243,7 +243,8 @@ text("[on ? "On" : "Off"]")) /obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, mob/user as mob, params) ..() if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) var/turf/T = get_turf(loc) var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot(T) diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index b4ecddd72c7..ddfb3dcbcb2 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -554,7 +554,8 @@ Auto Patrol[]"}, switch(build_step) if(0,1) if(istype(W, /obj/item/robot_parts/l_leg) || istype(W, /obj/item/robot_parts/r_leg)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the robot leg to [src]." @@ -567,12 +568,15 @@ Auto Patrol[]"}, icon_state = "ed209_legs" if(2) + var/newcolor = "" if(istype(W, /obj/item/clothing/suit/redtag)) - lasercolor = "r" + newcolor = "r" else if(istype(W, /obj/item/clothing/suit/bluetag)) - lasercolor = "b" - if(lasercolor || istype(W, /obj/item/clothing/suit/armor/vest)) - user.drop_item() + newcolor = "b" + if(newcolor || istype(W, /obj/item/clothing/suit/armor/vest)) + if(!user.unEquip(W)) + return + lasercolor = newcolor qdel(W) build_step++ user << "You add the armor to [src]." @@ -601,7 +605,8 @@ Auto Patrol[]"}, if(!istype(W, /obj/item/clothing/head/helmet)) return - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the helmet to [src]." @@ -611,7 +616,8 @@ Auto Patrol[]"}, if(5) if(isprox(W)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the prox sensor to [src]." @@ -634,26 +640,29 @@ Auto Patrol[]"}, name = "wired ED-209 assembly" if(7) + var/newname = "" switch(lasercolor) if("b") if(!istype(W, /obj/item/weapon/gun/energy/laser/bluetag)) return - name = "bluetag ED-209 assembly" + newname = "bluetag ED-209 assembly" if("r") if(!istype(W, /obj/item/weapon/gun/energy/laser/redtag)) return - name = "redtag ED-209 assembly" + newname = "redtag ED-209 assembly" if("") if(!istype(W, /obj/item/weapon/gun/energy/gun/advtaser)) return - name = "taser ED-209 assembly" + newname = "taser ED-209 assembly" else return + if(!user.unEquip(W)) + return + name = newname build_step++ user << "You add [W] to [src]." item_state = "[lasercolor]ed209_taser" icon_state = "[lasercolor]ed209_taser" - user.drop_item() qdel(W) if(8) @@ -669,11 +678,12 @@ Auto Patrol[]"}, if(9) if(istype(W, /obj/item/weapon/stock_parts/cell)) + if(!user.unEquip(W)) + return build_step++ user << "You complete the ED-209." var/turf/T = get_turf(src) new /obj/machinery/bot/ed209(T,created_name,lasercolor) - user.drop_item() qdel(W) user.unEquip(src, 1) qdel(src) diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm index 3040c71c68f..e56043b2953 100644 --- a/code/game/machinery/bots/medbot.dm +++ b/code/game/machinery/bots/medbot.dm @@ -244,8 +244,9 @@ if(!isnull(reagent_glass)) user << "There is already a beaker loaded!" return + if(!user.drop_item()) + return - user.drop_item() W.loc = src reagent_glass = W user << "You insert [W]." @@ -585,7 +586,8 @@ switch(build_step) if(0) if(istype(W, /obj/item/device/healthanalyzer)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the health sensor to [src]." @@ -594,7 +596,8 @@ if(1) if(isprox(W)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You complete the Medibot. Beep boop!" diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 8bbce5dd7ec..f8845ab32b4 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -89,8 +89,9 @@ obj/machinery/bot/mulebot/bot_reset() user << "Controls [(locked ? "locked" : "unlocked")]." else if(istype(I,/obj/item/weapon/stock_parts/cell) && open && !cell) + if(!user.drop_item()) + return var/obj/item/weapon/stock_parts/cell/C = I - user.drop_item() C.loc = src cell = C updateDialog() @@ -288,7 +289,8 @@ obj/machinery/bot/mulebot/bot_reset() if(open && !cell) var/obj/item/weapon/stock_parts/cell/C = usr.get_active_hand() if(istype(C)) - usr.drop_item() + if(!usr.drop_item()) + return cell = C C.loc = src C.add_fingerprint(usr) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 5c19e12be61..cb6f0a8e2fa 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -429,7 +429,8 @@ Auto Patrol: []"}, user << "You weld the hole in [src] shut!" else if(isprox(I) && (build_step == 1)) - user.drop_item() + if(!user.unEquip(I)) + return build_step++ user << "You add the prox sensor to [src]!" overlays += "hs_eye" @@ -437,7 +438,8 @@ Auto Patrol: []"}, qdel(I) else if(((istype(I, /obj/item/robot_parts/l_arm)) || (istype(I, /obj/item/robot_parts/r_arm))) && (build_step == 2)) - user.drop_item() + if(!user.unEquip(I)) + return build_step++ user << "You add the robot arm to [src]!" name = "helmet/signaler/prox sensor/robot arm assembly" @@ -445,7 +447,8 @@ Auto Patrol: []"}, qdel(I) else if((istype(I, /obj/item/weapon/melee/baton)) && (build_step >= 3)) - user.drop_item() + if(!user.unEquip(I)) + return build_step++ user << "You complete the Securitron! Beep boop." var/obj/machinery/bot/secbot/S = new /obj/machinery/bot/secbot diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index ae2204f9da3..c6748849914 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -73,6 +73,7 @@ var/thisemp = emped //Take note of which EMP this proc is for spawn(900) if(loc) //qdel limbo + triggerCameraAlarm() //camera alarm triggers even if multiple EMPs are in effect. if(emped == thisemp) //Only fix it if the camera hasn't been EMP'd again network = previous_network icon_state = initial(icon_state) @@ -80,7 +81,6 @@ if(can_use()) cameranet.addCamera(src) emped = 0 //Resets the consecutive EMP count - triggerCameraAlarm() spawn(100) cancelCameraAlarm() for(var/mob/O in mob_list) @@ -226,11 +226,13 @@ L.laser_act(src, user) else - if(W.force > 10) //fairly simplistic, but will do for now. + if(W.force >= 10) //fairly simplistic, but will do for now. user.changeNext_move(CLICK_CD_MELEE) visible_message("[user] hits [src] with [W]!", "You hit [src] with [W]!") health = max(0, health - W.force) + user.do_attack_animation(src) if(!health && status) + triggerCameraAlarm() deactivate(user, 1) return @@ -244,7 +246,6 @@ else visible_message("\The [src] deactivates!") icon_state = "[initial(icon_state)]1" - else if(user) visible_message("[user] reactivates [src]!") @@ -256,6 +257,7 @@ spawn(100) cancelCameraAlarm() playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + cameranet.updateChunk(x, y, z) // now disconnect anyone using the camera //Apparently, this will disconnect anyone even if the camera was re-activated. @@ -271,7 +273,6 @@ for(var/mob/living/silicon/S in mob_list) S.triggerAlarm("Camera", get_area(src), list(src), src) - /obj/machinery/camera/proc/cancelCameraAlarm() alarm_on = 0 for(var/mob/living/silicon/S in mob_list) @@ -345,6 +346,12 @@ busy = 0 return 0 +/obj/machinery/camera/bullet_act(var/obj/item/projectile/proj) + if(proj.damage_type == BRUTE) + health = max(0, health - proj.damage) + if(!health && status) + triggerCameraAlarm() + deactivate(null, 1) /obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets. var/turf/prev_turf diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index e5544d1d410..3710f3877a5 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -121,9 +121,10 @@ // Upgrades! if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already. + if(!user.unEquip(W)) + return user << "You attach \the [W] into the assembly inner circuits." upgrades += W - user.drop_item() W.loc = src return diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 759082e598b..0dfc5d045d0 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -105,19 +105,22 @@ var/cameraticks = 0 spawn(0) - while (U.cameraFollow == target) - if (U.cameraFollow == null) + while(U.cameraFollow == target) + if(U.cameraFollow == null) return - if (!target.can_track(usr)) + if(!target.can_track(usr)) U.tracking = 1 - U << "Target is not near any active cameras." + if(!cameraticks) + U << "Target is not near any active cameras. Attempting to reacquire..." cameraticks++ if(cameraticks > 9) U.cameraFollow = null + U << "Unable to reacquire, cancelling track..." tracking = 0 return else + sleep(10) continue else diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index e1b05f5c6c8..13ed9276e25 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -47,8 +47,9 @@ if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! user << "The [name] blinks red as you try to insert the cell!" return + if(!user.drop_item()) + return - user.drop_item() W.loc = src charging = W user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index be509355564..76dca06f55e 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -83,6 +83,10 @@ /obj/item/weapon/circuitboard/card/centcom name = "circuit board (Centcom ID Console)" build_path = /obj/machinery/computer/card/centcom +/obj/item/weapon/circuitboard/card/minor + name = "circuit board (Department Management Console)" + build_path = /obj/machinery/computer/card/minor + var/target_dept = 1 //obj/item/weapon/circuitboard/shield // name = "Circuit board (Shield Control)" // build_path = /obj/machinery/computer/stationshield @@ -244,6 +248,13 @@ build_path = /obj/machinery/computer/libraryconsole origin_tech = "programming=1" +/obj/item/weapon/circuitboard/card/minor/attackby(obj/item/I as obj, mob/user as mob, params) + if(istype(I,/obj/item/device/multitool)) + var/list/dept_list = list("general","security","medical","science","engineering") + var/choice = input("Currently set to [dept_list[target_dept]] personnel database. Changing to:","Multitool-Circuitboard interface") as null|anything in dept_list + if(choice) + target_dept = dept_list.Find(choice) + return /obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I,/obj/item/device/multitool)) @@ -336,11 +347,12 @@ if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "computer") + if(!user.drop_item()) + return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user << "You place the circuit board inside the frame." icon_state = "1" circuit = P - user.drop_item() circuit.add_fingerprint(user) P.loc = null else diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 7c682ce9607..4fc88ee1d18 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -6,7 +6,7 @@ var/time_last_changed_position = 0 /obj/machinery/computer/card name = "identification console" - desc = "You can use this to change ID's." + desc = "You can use this to manage jobs and ID access." icon_screen = "id" icon_keyboard = "id_key" req_one_access = list(access_heads, access_change_ids) @@ -18,6 +18,7 @@ var/time_last_changed_position = 0 var/printing = null var/list/region_access = null var/list/head_subordinates = null + var/target_dept = 0 //Which department this computer has access to. 0=all departments //Cooldown for closing positions in seconds //if set to -1: No cooldown... probably a bad idea @@ -48,16 +49,19 @@ var/time_last_changed_position = 0 var/obj/item/weapon/card/id/idcard = O if(check_access(idcard)) if(!scan) - usr.drop_item() + if(!usr.drop_item()) + return idcard.loc = src scan = idcard else if(!modify) - usr.drop_item() + if(!usr.drop_item()) + return idcard.loc = src modify = idcard else if(!modify) - usr.drop_item() + if(!usr.drop_item()) + return idcard.loc = src modify = idcard else @@ -118,7 +122,7 @@ var/time_last_changed_position = 0 dat += "" dat += "" var/ID - if(scan && (access_change_ids in scan.access)) + if(scan && (access_change_ids in scan.access) && !target_dept) ID = 1 else ID = 0 @@ -280,14 +284,15 @@ var/time_last_changed_position = 0 else body = "{Log in}

" body += "Access Crew Manifest" - body += "

Job Management" + if(!target_dept) + body += "

Job Management" dat = "[header][body]

" //user << browse(dat, "window=id_com;size=900x520") //onclose(user, "id_com") - var/datum/browser/popup = new(user, "id_com", "Identification Card Modifier Console", 900, 620) + var/datum/browser/popup = new(user, "id_com", src.name, 900, 620) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() @@ -311,7 +316,8 @@ var/time_last_changed_position = 0 else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src modify = I authenticated = 0 @@ -324,34 +330,41 @@ var/time_last_changed_position = 0 else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src scan = I authenticated = 0 if ("auth") if ((!( authenticated ) && (scan || (istype(usr, /mob/living/silicon))) && (modify || mode))) if (check_access(scan)) + region_access = list() + head_subordinates = list() if(access_change_ids in scan.access) - authenticated = 2 + if(target_dept) + head_subordinates = get_all_jobs() + region_access |= target_dept + authenticated = 1 + else + authenticated = 2 + else - region_access = list() - head_subordinates = list() - if(access_hop in scan.access) - region_access += 1 - region_access += 6 + if((access_hop in scan.access) && ((target_dept==1) || !target_dept)) + region_access |= 1 + region_access |= 6 get_subordinates("Head of Personnel") - if(access_rd in scan.access) - region_access += 4 - get_subordinates("Research Director") - if(access_ce in scan.access) - region_access += 5 - get_subordinates("Chief Engineer") - if(access_cmo in scan.access) - region_access += 3 - get_subordinates("Chief Medical Officer") - if(access_hos in scan.access) - region_access += 2 + if((access_hos in scan.access) && ((target_dept==2) || !target_dept)) + region_access |= 2 get_subordinates("Head of Security") + if((access_cmo in scan.access) && ((target_dept==3) || !target_dept)) + region_access |= 3 + get_subordinates("Chief Medical Officer") + if((access_rd in scan.access) && ((target_dept==4) || !target_dept)) + region_access |= 4 + get_subordinates("Research Director") + if((access_ce in scan.access) && ((target_dept==5) || !target_dept)) + region_access |= 5 + get_subordinates("Chief Engineer") if(region_access) authenticated = 1 else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify)) @@ -419,7 +432,7 @@ var/time_last_changed_position = 0 if("make_job_available") // MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS - if(scan && (access_change_ids in scan.access)) + if(scan && (access_change_ids in scan.access) && !target_dept) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) @@ -433,7 +446,7 @@ var/time_last_changed_position = 0 if("make_job_unavailable") // MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS - if(scan && (access_change_ids in scan.access)) + if(scan && (access_change_ids in scan.access) && !target_dept) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) @@ -472,3 +485,30 @@ var/time_last_changed_position = 0 circuit = /obj/item/weapon/circuitboard/card/centcom req_access = list(access_cent_captain) +/obj/machinery/computer/card/minor + name = "department management console" + desc = "You can use this to change ID's for specific departments." + icon_screen = "idminor" + circuit = /obj/item/weapon/circuitboard/card/minor + +/obj/machinery/computer/card/minor/New() + ..() + var/obj/item/weapon/circuitboard/card/minor/typed_circuit = circuit + if(target_dept) + typed_circuit.target_dept = target_dept + else + target_dept = typed_circuit.target_dept + var/list/dept_list = list("general","security","medical","science","engineering") + name = "[dept_list[target_dept]] department console" + +/obj/machinery/computer/card/minor/hos + target_dept = 2 + +/obj/machinery/computer/card/minor/cmo + target_dept = 3 + +/obj/machinery/computer/card/minor/rd + target_dept = 4 + +/obj/machinery/computer/card/minor/ce + target_dept = 5 diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index ff893a987a0..e2078720d8c 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -76,7 +76,8 @@ /obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob, params) if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES if (!src.diskette) - user.drop_item() + if(!user.drop_item()) + return ..() W.loc = src src.diskette = W user << "You insert [W]." diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 1782bab8845..4c27c1b1552 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -20,9 +20,10 @@ var/sortBy = "name" var/order = 1 // -1 = Descending - 1 = Ascending -/obj/machinery/computer/med_data/attackby(obj/item/O as obj, user as mob, params) +/obj/machinery/computer/med_data/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/card/id) && !scan) - usr.drop_item() + if(!user.drop_item()) + return O.loc = src scan = O user << "You insert [O]." @@ -215,7 +216,8 @@ else var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src src.scan = I else if(href_list["logout"]) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 5a0cab959e6..7d31061f0ba 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -128,7 +128,7 @@ break // Del - Sender - Recepient - Message // X - Al Green - Your Mom - WHAT UP!? - dat += "" + dat += "" dat += "
JobSlotsOpen jobClose job
X
[pda.sender][pda.recipient][pda.message]
X
[pda.sender][pda.recipient][pda.message][pda.photo ? "(Photo)":""]
" //Hacking screen. if(2) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 48e12d07b80..faba05e021f 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -92,7 +92,8 @@ if(href_list["id"] =="insert" && !istype(inserted_id)) var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "No valid ID." diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8a0c5dab87a..4a0aad15867 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -24,9 +24,10 @@ var/order = 1 // -1 = Descending - 1 = Ascending -/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob, params) +/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/card/id) && !scan) - usr.drop_item() + if(!user.drop_item()) + return O.loc = src scan = O user << "You insert [O]." @@ -299,7 +300,8 @@ What a mess.*/ else var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src scan = I diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index d20776f350c..29b07601e4f 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -39,7 +39,8 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F if(O.hidden_uplink) var/obj/item/P = user.get_active_hand() - user.drop_item() + if(!user.drop_item()) + return uplinkholder = P P.loc = src P.add_fingerprint(user) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 5530c7cc5a1..51f432db631 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -108,10 +108,11 @@ return var/obj/item/weapon/circuitboard/B = P if(B.board_type == "machine") + if(!user.drop_item()) + return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user << "You add the circuit board to the frame." circuit = P - user.drop_item() P.loc = src icon_state = "box_2" state = 3 @@ -199,6 +200,8 @@ var/success for(var/I in req_components) if(istype(P, I) && (req_components[I] > 0)) + if(!user.drop_item()) + return success=1 if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CP = P @@ -211,7 +214,6 @@ req_components[I]-- update_req_desc() break - user.drop_item() P.loc = src components += P req_components[I]-- diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index f84c488f930..26eb0c3cce5 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -237,9 +237,10 @@ if(beaker) user << "A beaker is already loaded into [src]!" return + if(!user.drop_item()) + return beaker = I - user.drop_item() I.loc = src user.visible_message("[user] places [I] in [src].", \ "You place [I] in [src].") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3d69900b0e8..99b4bb8ad46 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -91,6 +91,7 @@ icon = 'icons/obj/doors/vault.dmi' opacity = 1 doortype = /obj/structure/door_assembly/door_assembly_vault + explosion_block = 2 /obj/machinery/door/airlock/glass_large name = "glass airlock" diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index fdea6d8469f..1b6be79b004 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -50,8 +50,9 @@ else if (istype(W, /obj/item/device/flash/handheld)) if (!bulb) + if(!user.drop_item()) + return user.visible_message("[user] installs [W] into [src].", "You install [W] into [src].") - user.drop_item() W.loc = src bulb = W power_change() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e5961c09fc9..0c600860d7c 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -77,8 +77,9 @@ if(!isnull(beaker)) user << "There is already a reagent container loaded!" return + if(!user.drop_item()) + return - user.drop_item() W.loc = src beaker = W user << "You attach \the [W] to \the [src]." diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index f5693f0a3fa..d8c602a62c2 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -788,7 +788,8 @@ var/list/obj/machinery/newscaster/allCasters = list() photo = null if(istype(user.get_active_hand(), /obj/item/weapon/photo)) photo = user.get_active_hand() - user.drop_item() + if(!user.drop_item()) + return photo.loc = src if(istype(user,/mob/living/silicon)) var/list/nametemp = list() diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 9d1be6f4519..96fb5716814 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -72,7 +72,8 @@ add_fingerprint(user) if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) usr << "You put [W] back into [src]." - user.drop_item() + if(!user.drop_item()) + return qdel(W) return else if (istype(W, /obj/item/weapon/wrench)) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 34c13a8bb88..aaef91bc811 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -27,8 +27,9 @@ if(!gun.can_charge) user << "Your gun has no external power connector." return + if(!user.drop_item()) + return - user.drop_item() G.loc = src charging = G use_power = 2 diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 5af17c44572..4d88f443d05 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -77,7 +77,8 @@ if(istype(I, /obj/item/weapon/coin)) var/obj/item/weapon/coin/C = I if(prob(2)) - user.drop_item() + if(!user.drop_item()) + return C.loc = loc C.throw_at(user, 3, 10) if(prob(10)) @@ -85,7 +86,8 @@ user << "[src] spits your coin back out!" else - user.drop_item() + if(!user.drop_item()) + return user << "You insert a [C.cmineral] coin into [src]'s slot!" balance += C.value qdel(C) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index da7f6a82c53..b1891f80539 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -54,7 +54,8 @@ // insert cell var/obj/item/weapon/stock_parts/cell/C = usr.get_active_hand() if(istype(C)) - user.drop_item() + if(!user.drop_item()) + return cell = C C.loc = src C.add_fingerprint(usr) @@ -134,7 +135,8 @@ if(open && !cell) var/obj/item/weapon/stock_parts/cell/C = usr.get_active_hand() if(istype(C)) - usr.drop_item() + if(!usr.drop_item()) + return cell = C C.loc = src C.add_fingerprint(usr) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 35a1b38e85c..059b36f6200 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -90,9 +90,10 @@ user << "The cover is screwed on, it won't pry off!" else if(istype(I, /obj/item/weapon/bombcore)) if(!payload) + if(!user.drop_item()) + return payload = I user << "You place [payload] into [src]." - user.drop_item() payload.loc = src else user << "[payload] is already loaded into [src]! You'll have to remove it first." diff --git a/code/game/machinery/telecomms/computers/traffic_control.dm b/code/game/machinery/telecomms/computers/traffic_control.dm index 7dc9517abfc..9d520a5a7d8 100644 --- a/code/game/machinery/telecomms/computers/traffic_control.dm +++ b/code/game/machinery/telecomms/computers/traffic_control.dm @@ -168,7 +168,8 @@ var/obj/item/weapon/card/id/I = C.get_active_hand() if(istype(I)) if(check_access(I)) - C.drop_item() + if(!C.drop_item()) + return I.loc = src auth = I create_log("has logged in.", usr) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ed6ab0a9baf..d19104b98ce 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -170,7 +170,8 @@ return if(junk_check(W)) if(!iscompartmentfull(user)) - user.drop_item() + if(!user.drop_item()) + return W.loc = src food_load(W) user << "You insert [W] into [src]'s chef compartment." @@ -250,7 +251,8 @@ attack_hand(user) return else if(istype(W, /obj/item/weapon/coin) && premium.len > 0) - user.drop_item() + if(!user.drop_item()) + return W.loc = src coin = W user << "You insert [W] into [src]." diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 76508f008ce..05c3b10c069 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -188,7 +188,8 @@ if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp)) if( state in list( 1, 3, 6 ) ) if(!crayon) - user.drop_item() + if(!user.drop_item()) + return crayon = W crayon.loc = src else @@ -256,7 +257,8 @@ if(contents.len < 5) if ( state in list(1, 3) ) - user.drop_item() + if(!user.drop_item()) + return W.loc = src state = 3 else diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ec69ca4c4a3..682f81e557f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -675,7 +675,8 @@ var/obj/item/mecha_parts/mecha_equipment/E = W spawn() if(E.can_attach(src)) - user.drop_item() + if(!user.drop_item()) + return E.attach(src) user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") else @@ -739,9 +740,10 @@ else if(istype(W, /obj/item/weapon/stock_parts/cell)) if(state==4) if(!src.cell) + if(!user.drop_item()) + return var/obj/item/weapon/stock_parts/cell/C = W user << "You install the powercell." - user.drop_item() C.forceMove(src) C.use(C.charge * 0.8) src.cell = C diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cdedfe0733f..f0f85603f5c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -379,8 +379,8 @@ M << "Your eyes start to bleed profusely!" if(prob(50)) if(M.stat != 2) - M << "You drop what you're holding and clutch at your eyes!" - M.drop_item() + if(M.drop_item()) + M << "You drop what you're holding and clutch at your eyes!" M.eye_blurry += 10 M.Paralyse(1) M.Weaken(2) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 16f19760d7d..6ef0a3fa4f8 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -50,6 +50,8 @@ var/global/list/obj/item/device/pda/PDAs = list() var/list/ntrclog = list() //NTRC message log var/new_ntrc_msg = 0 + var/image/photo = null //Scanned photo + var/noreturn = 0 //whether the PDA can use the Return button, used for the aiPDA chatroom /obj/item/device/pda/medical @@ -815,13 +817,15 @@ var/global/list/obj/item/device/pda/PDAs = list() if(useTC != 2) // Does our recipient have a broadcaster on their level? U << "ERROR: Cannot reach recipient." return - useMS.send_pda_message("[P.owner]","[owner]","[t]") - - tnote += "→ To [P.owner]:
[t]
" - P.tnote += "← From [owner] ([ownjob]):
[t]
" + var/msg_ref = useMS.send_pda_message("[P.owner]","[owner]","[t]",photo) + var/photo_ref = "" + if(photo) + photo_ref = "(Photo)" + tnote += "→ To [P.owner]:
[t][photo_ref]
" + P.tnote += "← From [owner] ([ownjob]):
[t][photo_ref]
" for(var/mob/M in player_list) if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) - M.show_message("PDA Message - [owner] -> [P.owner]: [t]") + M.show_message("PDA Message - [owner] -> [P.owner]: [t][photo_ref]") if (!P.silent) playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1) @@ -835,9 +839,10 @@ var/global/list/obj/item/device/pda/PDAs = list() L = get(P, /mob/living/silicon) if(L) - L << "\icon[P] Message from [src.owner] ([ownjob]), \"[t]\" (Reply)" + L << "\icon[P] Message from [src.owner] ([ownjob]), \"[t]\"[photo_ref] (Reply)" log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]") + photo = null P.overlays.Cut() P.overlays += image('icons/obj/pda.dmi', "pda-r") else @@ -967,6 +972,10 @@ var/global/list/obj/item/device/pda/PDAs = list() return C.loc = src user << "You slide \the [C] into \the [src]." + else if(istype(C, /obj/item/weapon/photo)) + var/obj/item/weapon/photo/P = C + photo = P.img + user << "You scan \the [C]." return /obj/item/device/pda/attack(mob/living/carbon/C, mob/living/user as mob) @@ -1104,6 +1113,12 @@ var/global/list/obj/item/device/pda/PDAs = list() return var/selected = plist[c] + + if(aicamera.aipictures.len>0) + var/add_photo = input(user,"Do you want to attach a photo?","Photo","No") as null|anything in list("Yes","No") + if(add_photo=="Yes") + var/datum/picture/Pic = aicamera.selectpicture(aicamera) + src.aiPDA.photo = Pic.fields["img"] src.aiPDA.create_message(src, selected) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index f4953c98812..b91db4b5e30 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -349,8 +349,9 @@ for(var/entry in expandables) if(istype(W,entry)) + if(!user.unEquip(W)) + return bugtype = expandables[entry] - user.drop_item() W.loc = src expansion = W user << "You add [W] to [src]." diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index c66a93aa4ad..ff6d78c41ef 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -47,7 +47,8 @@ /obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) if(!diode) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src diode = W user << "You install a [diode.name] in [src]." diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 4580e823eba..a440715d7a7 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -88,9 +88,10 @@ var/obj/item/weapon/light/L = W if(L.status == 0) // LIGHT OKAY if(uses < max_uses) + if(!user.unEquip(W)) + return AddUses(1) user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining." - user.drop_item() qdel(L) return else diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 92ad5697dc7..31f12619e03 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -253,12 +253,14 @@ return if(!keyslot) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src keyslot = W else - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src keyslot2 = W diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 8bed318c4ad..c9cf83c17e9 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -608,7 +608,8 @@ return if(!keyslot) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src keyslot = W diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index fd5cb821462..826853d049e 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -33,7 +33,8 @@ /obj/item/device/taperecorder/attackby(obj/item/I, mob/user, params) if(!mytape && istype(I, /obj/item/device/tape)) - user.drop_item() + if(!user.unEquip(I)) + return I.loc = src mytape = I user << "You insert [I] into [src]." diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 97ffc5e6307..18e69466fa5 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -20,15 +20,17 @@ return if(!tank_one) + if(!user.unEquip(item)) + return tank_one = item - user.drop_item() item.loc = src user << "You attach the tank to the transfer valve." if(item.w_class > w_class) w_class = item.w_class else if(!tank_two) + if(!user.unEquip(item)) + return tank_two = item - user.drop_item() item.loc = src user << "You attach the tank to the transfer valve." if(item.w_class > w_class) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 3b9868babac..ed337577622 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -102,28 +102,32 @@ return if(istype(W, /obj/item/robot_parts/l_leg)) if(src.l_leg) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.l_leg = W src.updateicon() if(istype(W, /obj/item/robot_parts/r_leg)) if(src.r_leg) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.r_leg = W src.updateicon() if(istype(W, /obj/item/robot_parts/l_arm)) if(src.l_arm) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.l_arm = W src.updateicon() if(istype(W, /obj/item/robot_parts/r_arm)) if(src.r_arm) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.r_arm = W src.updateicon() @@ -131,7 +135,8 @@ if(istype(W, /obj/item/robot_parts/chest)) if(src.chest) return if(W:wires && W:cell) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.chest = W src.updateicon() @@ -143,7 +148,8 @@ if(istype(W, /obj/item/robot_parts/head)) if(src.head) return if(W:flash2 && W:flash1) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.head = W src.updateicon() @@ -190,7 +196,8 @@ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc)) if(!O) return - user.drop_item() + if(!user.unEquip(W)) + return O.invisibility = 0 //Transfer debug settings to new mob @@ -297,7 +304,8 @@ user << "You have already inserted a cell!" return else - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.cell = W user << "You insert the cell." @@ -324,7 +332,8 @@ user << "You can't use a broken flash!" return else - user.drop_item() + if(!user.unEquip(W)) + return F.loc = src if(src.flash1) src.flash2 = F diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 07ea6047cde..5e2e050242a 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -112,7 +112,8 @@ RCD if((matter + R.ammoamt) > max_matter) user << "The RCD can't hold any more matter-units!" return - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) matter += R.ammoamt playsound(src.loc, 'sound/machines/click.ogg', 50, 1) @@ -210,7 +211,7 @@ RCD if(3) if(istype(A, /turf/simulated/wall)) - var/turf/simulated/wall/W + var/turf/simulated/wall/W = A if(istype(W, /turf/simulated/wall/r_wall) && !canRwall) return 0 if(checkResource(5, user)) diff --git a/code/game/objects/items/weapons/airlock_painter.dm b/code/game/objects/items/weapons/airlock_painter.dm index 2f595b5cba0..9ebce21ee0a 100644 --- a/code/game/objects/items/weapons/airlock_painter.dm +++ b/code/game/objects/items/weapons/airlock_painter.dm @@ -63,7 +63,8 @@ if(ink) user << "\the [name] already contains \a [ink]." return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src user << "You install \the [W] into \the [name]." ink = W diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index f3dcfbc4b6b..02114500111 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -112,7 +112,8 @@ if(C.maxcharge < paddles.revivecost) user << "[src] requires a higher capacity cell." return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src bcell = W user << "You install a cell in [src]." diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index f1d7d6c19c4..9d5f2f0c552 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -69,7 +69,8 @@ user << "You start planting the bomb..." if(do_after(user, 50) && in_range(user, target)) - user.drop_item() + if(!user.unEquip(target)) + return src.target = target loc = null diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 2f89a0d979e..9d1bf16dda2 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -94,7 +94,8 @@ var/obj/item/device/assembly/igniter/I = W if(I.secured) return if(igniter) return - user.drop_item() + if(!user.unEquip(W)) + return I.loc = src igniter = I update_icon() @@ -104,7 +105,8 @@ if(ptank) user << "There appears to already be a plasma tank loaded in [src]!" return - user.drop_item() + if(!user.unEquip(W)) + return ptank = W W.loc = src update_icon() diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index ff1812883aa..e902d388211 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -68,8 +68,9 @@ return else if(I.reagents.total_volume) + if(!user.unEquip(I)) + return user << "You add [I] to the [initial(name)] assembly." - user.drop_item() I.loc = src beakers += I else @@ -79,8 +80,9 @@ var/obj/item/device/assembly_holder/A = I if(isigniter(A.a_left) == isigniter(A.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it return + if(!user.unEquip(I)) + return - user.drop_item() nadeassembly = A A.master = src A.loc = src @@ -263,8 +265,9 @@ //make a special case you might as well do it explicitly. -Sayu /obj/item/weapon/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/slime_extract) && stage == WIRED) + if(!user.unEquip(I)) + return user << "You add [I] to the [initial(name)] assembly." - user.drop_item() I.loc = src beakers += I else diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index d43251a2e48..d5e3e66703b 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -49,7 +49,8 @@ /obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user) if(!target.handcuffed) - user.drop_item() + if(!user.drop_item()) + return //target.throw_alert("handcuffed", src) // Can't do this because escaping cuffs isn't standardized. Also zipties. if(trashtype) target.handcuffed = new trashtype(target) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 97b0a8304ad..b22b7439eae 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -174,15 +174,15 @@ /obj/item/weapon/implant/loyalty/implanted(mob/target) ..() - if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.A_bosses | ticker.mode.B_bosses)) || is_shadow_or_thrall(target)) + if((target.mind in ticker.mode.head_revolutionaries) || is_shadow_or_thrall(target)) target.visible_message("[target] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!") return 0 - if(target.mind in (ticker.mode.A_gang | ticker.mode.B_gang)) - ticker.mode.remove_gangster(target.mind, exclude_bosses=0) - return 0 if(target.mind in ticker.mode.revolutionaries) ticker.mode.remove_revolutionary(target.mind) - target << "You feel a surge of loyalty towards Nanotrasen." + if(target.mind in (ticker.mode.cult| ticker.mode.A_bosses | ticker.mode.B_bosses | ticker.mode.A_gang | ticker.mode.B_gang)) + target << "You feel the corporate tendrils of Nanotrasen try to invade your mind!" + else + target << "You feel a surge of loyalty towards Nanotrasen." return 1 diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 1720cb073e0..615d719fef3 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -36,7 +36,8 @@ ..() if(istype(C, /obj/item/weapon/implantcase)) if(!case) - user.drop_item() + if(!user.unEquip(C)) + return C.loc = src case = C else diff --git a/code/game/objects/items/weapons/paiwire.dm b/code/game/objects/items/weapons/paiwire.dm index 83933cbf4c3..33de9fcba06 100644 --- a/code/game/objects/items/weapons/paiwire.dm +++ b/code/game/objects/items/weapons/paiwire.dm @@ -8,8 +8,9 @@ /obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M as obj, mob/user as mob) if(istype(M, /obj/machinery/door) || istype(M, /obj/machinery/camera)) + if(!user.drop_item()) + return user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - user.drop_item() src.loc = M src.machine = M else diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 7ccd3432491..f4af87c3f10 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -61,8 +61,9 @@ if(IW.w_class > src.w_class) user << "\The [IW] is too large to fit into \the [src]!" return + if(!user.unEquip(W)) + return user << "You load \the [IW] into \the [src]." - user.drop_item() loadedItems.Add(IW) loadedWeightClass += IW.w_class IW.loc = src @@ -127,9 +128,10 @@ if(src.tank) user << "\The [src] already has a tank." return + if(!user.unEquip(thetank)) + return user << "You hook \the [thetank] up to \the [src]." src.tank = thetank - user.drop_item() thetank.loc = src src.update_icons() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 8fc6d771551..40b1ab14670 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -71,7 +71,8 @@ if(C.maxcharge < hitcost) user << "[src] requires a higher capacity cell." return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src bcell = W user << "You install a cell in [src]." diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 907b4db38e1..1d24b6485a6 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -41,11 +41,12 @@ anchored = 0 state = 0 if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit) + if(!user.drop_item()) + return playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) user << "You place the circuit board inside the frame." icon_state = "1" circuit = P - user.drop_item() P.loc = src if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) @@ -152,11 +153,13 @@ user << "This MMI is mindless!" return + if(!user.drop_item()) + return + ticker.mode.remove_cultist(M.brainmob.mind, 1) ticker.mode.remove_revolutionary(M.brainmob.mind, 1) ticker.mode.remove_gangster(M.brainmob.mind, 1) - user.drop_item() M.loc = src brain = M usr << "Added a brain." diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 37428c37333..073ae4e2e53 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -194,7 +194,8 @@ LINEN BINS /obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/weapon/bedsheet)) - user.drop_item() + if(!user.drop_item()) + return I.loc = src sheets.Add(I) amount++ diff --git a/code/game/objects/structures/crates_lockers/bins.dm b/code/game/objects/structures/crates_lockers/bins.dm index edabca55fb7..bbcec247b70 100644 --- a/code/game/objects/structures/crates_lockers/bins.dm +++ b/code/game/objects/structures/crates_lockers/bins.dm @@ -84,8 +84,7 @@ /obj/structure/closet/crate/bin/place(var/mob/user, var/obj/item/I) if(contents.len >= storage_capacity) return 1 - if(!opened) - user.drop_item() + if(!opened && user.drop_item()) insert(I, 0, 1) return 1 return 0 \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index bf94d93a874..81e2b46d4ca 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -58,8 +58,9 @@ if(O:wielded) user << "Unwield the axe first." return + if(!user.drop_item()) + return fireaxe = O - user.drop_item() src.contents += O user << "You place the fire axe back in the [src.name]." update_icon() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index abbf7e51461..14a4fe411bd 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -286,8 +286,9 @@ return else if(istype(W, /obj/item/device/electropack)) if(rigged) + if(!user.drop_item()) + return user << "You attach [W] to [src]." - user.drop_item() W.loc = src return else if(istype(W, /obj/item/weapon/wirecutters)) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index a0fa16da823..4b53bb0e629 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -532,8 +532,9 @@ if(do_after(user, 40)) if( src.state != 1 ) return + if(!user.drop_item()) + return - user.drop_item() W.loc = src user << "You install the airlock electronics." src.state = 2 diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 06c763ffca7..e56bcd0a4ee 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -29,7 +29,8 @@ return if(istype(O, /obj/item/weapon/extinguisher)) if(!has_extinguisher && opened) - user.drop_item() + if(!user.drop_item()) + return contents += O has_extinguisher = O user << "You place [O] in [src]." diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index fd324892490..23df00bef19 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -201,7 +201,8 @@ else if(istype(W, /obj/item/pipe)) var/obj/item/pipe/P = W if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. - user.drop_item() + if(!user.drop_item()) + return P.loc = src.loc user << "You fit the pipe into \the [src]." else diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 5793006ba6f..ae8c5b4e861 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -39,7 +39,8 @@ return if(istype(I, gun_category)) if(contents.len < capacity && open) - user.drop_item() + if(!user.drop_item()) + return contents += I user << "You place [I] in [src]." update_icon() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index b5a265e2c76..58aebf4ca25 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -29,7 +29,8 @@ playsound(loc, 'sound/effects/slosh.ogg', 25, 1) /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) - user.drop_item() + if(!user.drop_item()) + return I.loc = src updateUsrDialog() user << "You put [I] into [src]." @@ -199,8 +200,9 @@ user << "Hold [I] in one of your hands while you drive this [callme]." else if(istype(I, /obj/item/weapon/storage/bag/trash)) if(keytype == /obj/item/key/janitor) + if(!user.drop_item()) + return user << "You hook the trashbag onto the [callme]." - user.drop_item() I.loc = src mybag = I else if(istype(I, /obj/item/janiupgrade)) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index a5414196e9d..50597091b3b 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -111,14 +111,16 @@ /obj/structure/mirror/magic/New() if(!choosable_races.len) - for(var/datum/species/S in typesof(/datum/species) - /datum/species) + for(var/speciestype in typesof(/datum/species) - /datum/species) + var/datum/species/S = new speciestype() if(!(S.id in races_blacklist)) - choosable_races += S + choosable_races += S.id ..() /obj/structure/mirror/magic/badmin/New() - for(var/datum/species/S in typesof(/datum/species) - /datum/species) - choosable_races += S + for(var/speciestype in typesof(/datum/species) - /datum/species) + var/datum/species/S = new speciestype() + choosable_races += S.id ..() /obj/structure/mirror/magic/attack_hand(mob/user as mob) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index d5997adfda9..7d8591217f6 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -19,9 +19,10 @@ /obj/structure/noticeboard/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/paper)) if(notices < 5) + if(!user.drop_item()) + return O.add_fingerprint(user) add_fingerprint(user) - user.drop_item() O.loc = src notices++ icon_state = "nboard0[notices]" //update sprite diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 829d6a6dd44..915f56b9ac0 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -17,8 +17,9 @@ /obj/structure/stool/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob, params) ..() if(istype(W, /obj/item/assembly/shock_kit)) + if(!user.drop_item()) + return var/obj/item/assembly/shock_kit/SK = W - user.drop_item() var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) E.dir = dir diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index f776ab56d7e..b25fa12dd81 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -625,8 +625,9 @@ /obj/item/weapon/rack_parts/attack_self(mob/user as mob) user << "You start constructing rack..." if (do_after(user, 50)) + if(!user.drop_item()) + return var/obj/structure/rack/R = new /obj/structure/rack( user.loc ) R.add_fingerprint(user) - user.drop_item() qdel(src) return diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index da9c57601e3..3cc45f3ac5e 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -50,7 +50,8 @@ /obj/structure/dispenser/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/weapon/tank/internals/oxygen) || istype(I, /obj/item/weapon/tank/internals/air) || istype(I, /obj/item/weapon/tank/internals/anesthetic)) if(oxygentanks < 10) - user.drop_item() + if(!user.drop_item()) + return I.loc = src oxytanks.Add(I) oxygentanks++ @@ -59,7 +60,8 @@ user << "[src] is full." if(istype(I, /obj/item/weapon/tank/internals/plasma)) if(plasmatanks < 10) - user.drop_item() + if(!user.drop_item()) + return I.loc = src platanks.Add(I) plasmatanks++ diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 0048a1cdb28..5e23a7f994f 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -23,11 +23,10 @@ /obj/structure/target_stake/attackby(obj/item/target/T, mob/user) if(pinned_target) return - if(istype(T)) + if(istype(T) && user.drop_item()) pinned_target = T T.pinnedLoc = src T.density = 1 - user.drop_item() T.layer = OBJ_LAYER + 0.1 T.loc = loc user << "You slide the target into the stake." diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 8262201bf28..1f41f887adb 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -190,9 +190,10 @@ //Adding airlock electronics for access. Step 6 complete. else if(istype(W, /obj/item/weapon/airlock_electronics)) + if(!user.drop_item()) + return playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...") - user.drop_item() W.loc = src if(do_after(user, 40)) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 85755fc867d..abb5c5c4fab 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -63,8 +63,7 @@ if(..()) return if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles - if(state) - user.drop_item() + if(state && user.drop_item()) qdel(C) state = 0 //fixing it by bashing it with a light bulb, fun eh? update_icon() diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index b63a0feefe7..f92ef7dcf84 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -89,10 +89,11 @@ var/mob/M = user if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it return + if(!M.drop_item()) //Remove the assembly from your hands + return var/obj/item/device/onetankbomb/R = new /obj/item/device/onetankbomb(loc) - M.drop_item() //Remove the assembly from your hands M.remove_from_mob(src) //Remove the tank from your character,in case you were holding it M.put_in_hands(R) //Equips the bomb if possible, or puts it on the floor. diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ae08ac4b5ce..b509c744000 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -234,7 +234,8 @@ BLIND // can't see anything return 0 else if(user) - user.drop_item() + if(!user.drop_item()) + return hastie = I I.loc = src if(user && notifyAttach) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 39658cc78e5..ef549cf4acb 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -196,7 +196,8 @@ var/obj/item/device/flashlight/seclite/S = A if(can_flashlight) if(!F) - user.drop_item() + if(!user.unEquip(A)) + return user << "You click [S] into place on [src]." if(S.on) SetLuminosity(0) @@ -228,7 +229,8 @@ if(helmetCam) user << "[src] already has a mounted camera." return - user.drop_item() + if(!user.unEquip(A)) + return helmetCam = new /obj/machinery/camera/portable(src) helmetCam.assembly = A A.loc = helmetCam diff --git a/code/modules/events/wizard/race.dm b/code/modules/events/wizard/race.dm index 4eb0c5bf1a7..bed5d08b5f4 100644 --- a/code/modules/events/wizard/race.dm +++ b/code/modules/events/wizard/race.dm @@ -10,9 +10,10 @@ var/all_the_same = 0 var/all_species = list() - for(var/datum/species/S in typesof(/datum/species) - /datum/species) + for(var/speciestype in typesof(/datum/species) - /datum/species) + var/datum/species/S = new speciestype() if(!S.dangerous_existence) - all_species += S + all_species += speciestype var/new_species = pick(all_species) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index e3aa865a141..388da344db4 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -22,184 +22,346 @@ Gunshots/explosions/opening doors/less rare audio (done) /mob/living/carbon/proc/handle_hallucinations() if(handling_hal) return + + //Least obvious + var/list/minor = list("sounds"=20,"bolts_minor"=10,"whispers"=15,"message"=5) + //Something's wrong here + var/list/medium = list("hudscrew"=15,"items"=15,"dangerflash"=15,"bolts"=10,"flood"=10,"husks"=10,"battle"=10) + //AAAAH + var/list/major = list("fake"=10,"death"=5,"xeno"=10,"singulo"=10,"delusion"=10) + + var/grade = 0 + var/current = list() + var/trip_length = 0 + handling_hal = 1 while(hallucination > 20) sleep(rand(200,500)/(hallucination/25)) - var/halpick = rand(1,100) - switch(halpick) - if(0 to 15) - //Screwy HUD - //src << "Screwy HUD" - hal_screwyhud = pick(1,2,3,3,4,4) - spawn(rand(100,250)) - hal_screwyhud = 0 - if(16 to 25) - //Strange items - //src << "Traitor Items" - if(!halitem) - halitem = new - var/list/slots_free = list(ui_lhand,ui_rhand) - if(l_hand) slots_free -= ui_lhand - if(r_hand) slots_free -= ui_rhand - if(istype(src,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = src - if(!H.belt) slots_free += ui_belt - if(!H.l_store) slots_free += ui_storage1 - if(!H.r_store) slots_free += ui_storage2 - if(slots_free.len) - halitem.screen_loc = pick(slots_free) - halitem.layer = 50 - switch(rand(1,6)) - if(1) //revolver - halitem.icon = 'icons/obj/guns/projectile.dmi' - halitem.icon_state = "revolver" - halitem.name = "Revolver" - if(2) //c4 - halitem.icon = 'icons/obj/assemblies.dmi' - halitem.icon_state = "plastic-explosive0" - halitem.name = "Mysterious Package" - if(prob(25)) - halitem.icon_state = "c4small_1" - if(3) //sword - halitem.icon = 'icons/obj/weapons.dmi' - halitem.icon_state = "sword1" - halitem.name = "Sword" - if(4) //stun baton - halitem.icon = 'icons/obj/weapons.dmi' - halitem.icon_state = "stunbaton" - halitem.name = "Stun Baton" - if(5) //emag - halitem.icon = 'icons/obj/card.dmi' - halitem.icon_state = "emag" - halitem.name = "Cryptographic Sequencer" - if(6) //flashbang - halitem.icon = 'icons/obj/grenade.dmi' - halitem.icon_state = "flashbang1" - halitem.name = "Flashbang" - if(client) client.screen += halitem - spawn(rand(100,250)) - qdel(halitem) - if(26 to 40) - //Flashes of danger - //src << "Danger Flash" - if(!halimage) - var/list/possible_points = list() - for(var/turf/simulated/floor/F in view(src,world.view)) - possible_points += F - if(possible_points.len) - var/turf/simulated/floor/target = pick(possible_points) + trip_length += 1 + if(prob(min(20,trip_length*2))) + grade = min(3,grade+1) + if(prob(20)) + continue + current = list() + for(var/a in minor) + current[a] = minor[a] * (grade==0?2:1) + for(var/b in medium) + current[b] = medium[b] * (grade==1?2:1) + for(var/c in major) + current[c] = major[c] * (grade==2?2:1) - switch(rand(1,3)) - if(1) - //src << "Space" - halimage = image('icons/turf/space.dmi',target,"[rand(1,25)]",TURF_LAYER) - if(2) - //src << "Fire" - halimage = image('icons/effects/fire.dmi',target,"1",TURF_LAYER) - if(3) - //src << "C4" - halimage = image('icons/obj/assemblies.dmi',target,"plastic-explosive2",OBJ_LAYER+0.01) + var/halpick = pickweight(current) - - if(client) client.images += halimage - spawn(rand(10,50)) //Only seen for a brief moment. - if(client) client.images -= halimage - halimage = null - - - if(41 to 65) - //Strange audio - //src << "Strange Audio" - switch(rand(1,14)) - if(1) src << 'sound/machines/airlock.ogg' - if(2) - if(prob(50))src << 'sound/effects/Explosion1.ogg' - else src << 'sound/effects/Explosion2.ogg' - if(3) src << 'sound/effects/explosionfar.ogg' - if(4) src << 'sound/effects/Glassbr1.ogg' - if(5) src << 'sound/effects/Glassbr2.ogg' - if(6) src << 'sound/effects/Glassbr3.ogg' - if(7) src << 'sound/machines/twobeep.ogg' - if(8) src << 'sound/machines/windowdoor.ogg' - if(9) - //To make it more realistic, I added two gunshots (enough to kill) - src << 'sound/weapons/Gunshot.ogg' - spawn(rand(10,30)) - src << 'sound/weapons/Gunshot.ogg' - if(10) src << 'sound/weapons/smash.ogg' - if(11) - //Same as above, but with tasers. - src << 'sound/weapons/Taser.ogg' - spawn(rand(10,30)) - src << 'sound/weapons/Taser.ogg' - //Rare audio - if(12) -//These sounds are (mostly) taken from Hidden: Source - var/list/creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/Heart Beat.ogg', 'sound/effects/screech.ogg',\ - 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ - 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') - src << pick(creepyasssounds) - if(13) - src << "You feel a tiny prick!" - if(14) - src << "