Merge branch 'master' of https://github.com/tgstation/-tg-station into AttackbyDestruction

Conflicts:
	code/game/objects/structures/crates_lockers/closets.dm
This commit is contained in:
phil235
2016-04-24 21:22:37 +02:00
132 changed files with 72880 additions and 1732 deletions
@@ -0,0 +1,132 @@
"aa" = (/turf/template_noop,/area/template_noop)
"ab" = (/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"ac" = (/turf/open/floor/grass{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/lavaland/surface/outdoors)
"ad" = (/obj/structure/flora/ausbushes/brflowers,/turf/open/floor/grass{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/lavaland/surface/outdoors)
"ae" = (/turf/closed/wall/shuttle/smooth{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"af" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ag" = (/turf/open/floor/plasteel/bar{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ah" = (/obj/structure/toilet,/turf/open/floor/plasteel/bar{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ai" = (/obj/machinery/vending/coffee,/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aj" = (/obj/structure/table/wood,/obj/item/weapon/storage/backpack/dufflebag/med,/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ak" = (/obj/structure/table/wood,/obj/item/device/taperecorder,/obj/item/weapon/pen/blue,/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"al" = (/obj/structure/table/wood,/obj/item/toy/carpplushie,/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"am" = (/obj/machinery/vending/snack,/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"an" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ao" = (/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ap" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aq" = (/obj/structure/table,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/surgicaldrill,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ar" = (/obj/structure/table,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"as" = (/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"at" = (/obj/structure/chair/office/dark{dir = 1},/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"au" = (/obj/structure/chair/office/dark{dir = 4},/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"av" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/clothing/suit/apron/surgical,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aw" = (/obj/structure/bed/roller,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ax" = (/obj/structure/closet/crate/trashcart,/obj/item/weapon/storage/bag/trash,/obj/item/trash/cheesie,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/bodybag,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/open/floor/grass{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/lavaland/surface/outdoors)
"ay" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/open/floor/plasteel/bar{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"az" = (/obj/structure/noticeboard{dir = 1; pixel_y = -27},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "Important Notice - Mrs. Henderson"},/turf/open/floor/plasteel/cmo{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aA" = (/obj/structure/closet/secure_closet/medical2,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aB" = (/obj/machinery/computer/operating,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aC" = (/obj/structure/table/optable,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aD" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aE" = (/turf/closed/wall/shuttle/smooth/nodiagonal{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aF" = (/obj/machinery/door/unpowered/shuttle,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aG" = (/obj/structure/extinguisher_cabinet,/turf/closed/wall/shuttle/smooth{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aH" = (/obj/structure/extinguisher_cabinet,/turf/closed/wall/shuttle/smooth/nodiagonal{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aI" = (/turf/closed/wall/shuttle/smooth,/area/ruin/powered)
"aJ" = (/turf/open/floor/plasteel/grimy{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/lavaland/surface/outdoors)
"aK" = (/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aL" = (/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 1; icon_state = "blue"},/area/ruin/powered)
"aM" = (/obj/effect/mob_spawn/human/doctor/alive{flavour_text = "You were putting in your hours as a vet in the local animal hospital when a massive bluespace translocation shunted you across the galaxy. Can you survive on this desolate wasteland..?"; id_job = "Veterinarian"},/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 1; icon_state = "blue"},/area/ruin/powered)
"aN" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 1; icon_state = "blue"},/area/ruin/powered)
"aO" = (/obj/machinery/iv_drip,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 1; icon_state = "blue"},/area/ruin/powered)
"aP" = (/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 0; icon_state = "blue"},/area/ruin/powered)
"aQ" = (/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 8; icon_state = "bluecorner"},/area/ruin/powered)
"aR" = (/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 4; icon_state = "blue"},/area/ruin/powered)
"aS" = (/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 8; icon_state = "blue"},/area/ruin/powered)
"aT" = (/obj/structure/closet,/obj/effect/decal/cleanable/cobweb,/obj/item/ammo_casing/shotgun/dart,/obj/item/ammo_casing/shotgun/dart,/obj/item/weapon/gun/projectile/revolver/doublebarrel{desc = "For putting critters out to pasture."},/obj/item/ammo_casing/shotgun/buckshot,/obj/item/weapon/storage/box/bodybags,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aU" = (/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aV" = (/obj/structure/closet/secure_closet/medical1,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aW" = (/obj/machinery/vending/wallmed{pixel_y = 28},/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aX" = (/obj/item/stack/cable_coil/random,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aY" = (/obj/structure/bodycontainer/morgue,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"aZ" = (/obj/effect/decal/cleanable/ash,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"ba" = (/obj/structure/table/glass,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bb" = (/obj/structure/table/reinforced,/obj/item/device/laser_pointer,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bc" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bd" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/gloves,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"be" = (/obj/effect/decal/cleanable/oil,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bf" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/item/weapon/storage/box/matches,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bg" = (/mob/living/simple_animal/cockroach,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bh" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/brute,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bi" = (/obj/item/toy/cattoy,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bj" = (/obj/structure/table/glass,/obj/item/weapon/lazarus_injector,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bk" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bl" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/cookie{name = "doggie biscuit"},/obj/item/weapon/reagent_containers/food/snacks/cookie{name = "doggie biscuit"},/obj/item/weapon/reagent_containers/food/snacks/cookie{name = "doggie biscuit"},/obj/item/weapon/reagent_containers/food/snacks/cookie{name = "doggie biscuit"},/obj/item/weapon/reagent_containers/food/snacks/cookie{name = "doggie biscuit"},/obj/item/weapon/reagent_containers/food/snacks/cookie{name = "doggie biscuit"},/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 1; icon_state = "blue"},/area/ruin/powered)
"bm" = (/obj/structure/chair/comfy/teal{dir = 8},/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 1; icon_state = "blue"},/area/ruin/powered)
"bn" = (/obj/structure/bed/dogbed,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bo" = (/obj/item/weapon/reagent_containers/glass/bowl,/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bp" = (/obj/structure/closet/crate/bin,/obj/item/trash/pistachios,/obj/item/weapon/lipstick/random,/obj/item/seeds/apple,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 8; icon_state = "blue"},/area/ruin/powered)
"bq" = (/obj/structure/filingcabinet/chestdrawer/wheeled,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"br" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bs" = (/obj/structure/table/reinforced,/obj/item/weapon/phone,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bt" = (/obj/structure/flora/kirbyplants,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bu" = (/obj/structure/chair/comfy/teal{dir = 8},/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 4; icon_state = "blue"},/area/ruin/powered)
"bv" = (/obj/effect/mob_spawn/mouse{dir = 4; flavour_text = "You're a mousey! You're getting pretty old as mice go, and you haven't been feeling well as of late. Your master loves you a lot so he took you to this place so you can get better! You can't wait to see him again!"; mob_name = "Stallman Jr."},/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bw" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bx" = (/obj/machinery/door/airlock/medical{name = "Patient Room"; req_access_txt = "5"},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"by" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 8; icon_state = "blue"},/area/ruin/powered)
"bz" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/regular,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bA" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/fourcolor,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bB" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/hug,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bC" = (/obj/structure/chair/office/light{dir = 1},/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bD" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/bottle/cyanide{desc = "A cocktail of chemotherpy drugs intended to treat bladder cancer."; name = "MVAC regimen"},/obj/item/weapon/reagent_containers/syringe,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bE" = (/obj/structure/closet/crate/critter,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 8; icon_state = "blue"},/area/ruin/powered)
"bF" = (/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 10; icon_state = "blue"},/area/ruin/powered)
"bG" = (/obj/structure/chair/comfy/teal{dir = 8},/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 6; icon_state = "blue"},/area/ruin/powered)
"bH" = (/obj/item/weapon/reagent_containers/glass/rag,/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 8; icon_state = "blue"},/area/ruin/powered)
"bI" = (/obj/structure/sign/bluecross_2{name = "animal hospital"},/turf/closed/wall/shuttle/smooth{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bJ" = (/obj/machinery/door/airlock/glass_large,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bK" = (/obj/item/weapon/reagent_containers/glass/bowl,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bL" = (/obj/vehicle/scooter/skateboard{dir = 4},/turf/open/floor/grass{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/lavaland/surface/outdoors)
"bM" = (/obj/structure/flora/ausbushes/sunnybush,/turf/open/floor/grass{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/lavaland/surface/outdoors)
"bN" = (/obj/effect/mob_spawn/cow{dir = 4; flavour_text = "You're a cow. You've lived a pampered life as a prized show heifer, a real blue-ribbon winner. After showing signs of a minor respiratory infection, your master took you to the hospital right away. He'd better come back soon, you're getting quite impatient."; mob_name = "Flossie"},/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bO" = (/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/lavaland/surface/outdoors)
"bP" = (/obj/structure/chair/office/light{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bQ" = (/obj/structure/table/glass,/obj/item/clothing/tie/petcollar,/obj/item/weapon/pen/blue,/turf/open/floor/plasteel/white{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface},/area/ruin/powered)
"bR" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/melee/baton/cattleprod,/obj/item/weapon/stock_parts/cell/high,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 10; icon_state = "blue"},/area/ruin/powered)
"bS" = (/obj/structure/closet,/obj/item/weapon/defibrillator/loaded,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/turf/open/floor/plasteel{baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 6; icon_state = "blue"},/area/ruin/powered)
"bT" = (/obj/item/weapon/pickaxe,/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"bU" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"bV" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"bW" = (/turf/open/floor/grass,/area/lavaland/surface/outdoors)
(1,1,1) = {"
aaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaa
aaaaaaaaaaaaababababacacabacababaaaaaaaaaa
aaaaaaaaaaaaababacabacacacababababaaaaaaaa
aaaaaaaaaaababacacacacadacacacababaaaaaaaa
aaaaaaaaaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaa
aaaaababaeagahaeaiajakalamaeanaoapaqaraeaa
aaaaababaeagagaeasatasauasaeavaoaoaoawaeaa
aaababaxaeayagaeasasazasasaeaAaoaBaCaDaeaa
abababacaEaeaFaGaFaeaeaeaFaHaeaFaIaIaIaeaa
ababaJaJaFaKaKaLaKaMaMaMaKaLaLaKaLaNaOaeaa
abababacaeaKaKaPaPaKaPaKaPaPaPaKaPaQaRaeaa
aaababaeaEaFaEaeaeaFaeaFaeaeaEaFaeaSaRaeaa
ababacaeaTaUaeaVaWaoaeaoaWaVaeaXaeaSaRaeaa
aaababaeaYaZaebaaobbaebcaobdaebeaeaSaRaeaa
aaaaaaaebfbgaebhbiaoaeaoaobjaebkaeaSaRaeaa
aaaaaaaeaEaFaEaGaeaFaeaFaeaeaeaeaEaSaRaeaa
aaaaaaaaaeaKaLaLaLaKblaKbmaebnboafaSaRaeaa
aaaaaaaaaebpbqbrbsaKbtaKbuaebvbwbxaKaRaeaa
aaaaaaaaaebybzbAbBaKaKaKbuaebCbDaebEaRaeaa
aaaaaaaaaebFaPaPaPaKaKaPbGaeaeaeaEbHaRaeaa
aaaaaaabaeaeafafbIbJaUaeaeaebnbKafaSaRaeaa
aaaaababacacadbLbMaJaJbMacaebNaobxaKaRaeaa
aaaaabababacacacacaJaJacbOaebPbQaebRbSaeaa
aaababbTababacacabaJabacacaeaeaeaeaeaeaeaa
aaabbUababababacababababababababaaaaaaaaaa
aaabbVabababababababbWababababaaaaaaaaaaaa
aaaaababababbWababababababaaaaaaaaaaaaaaaa
aaaaaaaaababababaaabababaaaaaaaaaaaaaaaaaa
"}
+61 -61
View File
@@ -4499,10 +4499,10 @@ af
af
af
af
dq
dq
dq
dq
al
al
al
al
af
af
af
@@ -5268,7 +5268,7 @@ al
al
al
al
dq
al
af
ab
ab
@@ -6297,7 +6297,7 @@ al
al
al
al
dq
al
af
af
af
@@ -6817,7 +6817,7 @@ af
af
af
af
dq
al
al
al
al
@@ -7327,7 +7327,7 @@ al
al
al
al
dq
al
af
af
af
@@ -7584,8 +7584,8 @@ al
al
al
al
dq
dq
al
al
af
af
af
@@ -7848,7 +7848,7 @@ al
af
af
af
dq
al
al
al
al
@@ -8616,7 +8616,7 @@ al
al
al
al
dq
al
af
af
af
@@ -8873,8 +8873,8 @@ al
al
al
al
dq
dq
al
al
af
af
af
@@ -9647,7 +9647,7 @@ al
al
al
al
dq
al
af
af
af
@@ -9904,11 +9904,11 @@ al
al
al
al
dq
dq
al
al
af
af
dq
al
ab
ab
af
@@ -10685,16 +10685,16 @@ al
al
af
af
dq
al
af
af
af
af
af
dq
al
af
af
dq
al
al
al
al
@@ -10950,8 +10950,8 @@ af
af
af
af
dq
dq
al
al
al
al
al
@@ -11206,9 +11206,9 @@ af
af
af
af
dq
dq
dq
al
al
al
al
al
al
@@ -11465,7 +11465,7 @@ af
af
af
af
dq
al
al
al
al
@@ -11722,7 +11722,7 @@ af
af
af
af
dq
al
al
al
al
@@ -11972,7 +11972,7 @@ al
al
al
al
dq
al
af
af
af
@@ -12229,9 +12229,9 @@ al
al
al
al
dq
dq
dq
al
al
al
af
af
af
@@ -12486,11 +12486,11 @@ al
al
al
al
dq
dq
dq
dq
dq
al
al
al
al
al
af
af
af
@@ -13009,9 +13009,9 @@ al
al
af
af
dq
dq
dq
al
al
al
af
af
af
@@ -13269,7 +13269,7 @@ al
al
al
al
dq
al
af
af
af
@@ -13783,7 +13783,7 @@ al
al
al
al
dq
al
af
af
af
@@ -14040,7 +14040,7 @@ al
al
al
al
dq
al
af
af
af
@@ -14297,7 +14297,7 @@ al
al
al
al
dq
al
ab
af
af
@@ -14312,7 +14312,7 @@ af
af
af
af
dq
al
al
al
al
@@ -14558,7 +14558,7 @@ ab
af
af
af
dq
al
af
af
af
@@ -14623,11 +14623,11 @@ af
af
af
af
dq
dq
dq
dq
dq
al
al
al
al
al
af
af
af
@@ -14819,8 +14819,8 @@ al
al
af
af
dq
dq
al
al
af
af
af
@@ -15086,8 +15086,8 @@ af
af
af
af
dq
dq
al
al
af
af
af
@@ -15402,8 +15402,8 @@ af
af
af
al
dq
dq
al
al
af
af
af
@@ -15659,7 +15659,7 @@ al
al
al
al
dq
al
ab
af
af
@@ -16944,7 +16944,7 @@ al
al
al
al
dq
al
af
ab
af
@@ -17201,7 +17201,7 @@ al
al
al
al
dq
al
ab
ab
af
@@ -17458,7 +17458,7 @@ al
al
al
al
dq
al
al
ab
af
+71407 -1177
View File
File diff suppressed because it is too large Load Diff
+24
View File
@@ -872,6 +872,30 @@ The _flatIcons list is a cache for generated icon files.
del(atom_icon)
return text_image
var/global/list/friendly_animal_types = list()
// Pick a random animal instead of the icon, and use that instead
/proc/getRandomAnimalImage(atom/A)
if(!friendly_animal_types.len)
for(var/T in typesof(/mob/living/simple_animal))
var/mob/living/simple_animal/SA = T
if(initial(SA.gold_core_spawnable) == 2)
friendly_animal_types += SA
var/mob/living/simple_animal/SA = pick(friendly_animal_types)
var/icon = initial(SA.icon)
var/icon_state = initial(SA.icon_state)
var/image/final_image = image(icon, icon_state=icon_state, loc = A)
if(ispath(SA, /mob/living/simple_animal/butterfly))
final_image.color = rgb(rand(0,255), rand(0,255), rand(0,255))
// For debugging
final_image.text = initial(SA.name)
return final_image
//Find's the average colour of the icon
//By vg's ComicIronic
+12 -2
View File
@@ -949,8 +949,7 @@ var/list/WALLITEMS_INVERSE = list(
else
return "white"
/proc/screen_loc2turf(scr_loc, turf/origin)
/proc/params2turf(scr_loc, turf/origin)
var/tX = splittext(scr_loc, ",")
var/tY = splittext(tX[2], ":")
var/tZ = origin.z
@@ -961,6 +960,17 @@ var/list/WALLITEMS_INVERSE = list(
tY = max(1, min(world.maxy, origin.y + (text2num(tY) - (world.view + 1))))
return locate(tX, tY, tZ)
/proc/screen_loc2turf(text, turf/origin)
var/tZ = splittext(text, ",")
var/tX = splittext(tZ[1], "-")
var/tY = text2num(tX[2])
tX = splittext(tZ[2], "-")
tX = text2num(tX[2])
tZ = origin.z
tX = max(1, min(origin.x + 7 - tX, world.maxx))
tY = max(1, min(origin.y + 7 - tY, world.maxy))
return locate(tX, tY, tZ)
/proc/IsValidSrc(A)
if(istype(A, /datum))
var/datum/B = A
+32
View File
@@ -0,0 +1,32 @@
/client
var/atom/selected_target
/client/MouseDown(object, location, control, params)
var/delay = mob.CanMobAutoclick(object, location, params)
if(delay)
selected_target = object
while(selected_target)
Click(selected_target, location, control, params)
sleep(delay)
/client/MouseUp(object, location, control, params)
selected_target = null
/client/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params)
if(selected_target)
selected_target = over_object
/mob/proc/CanMobAutoclick(object, location, params)
/mob/living/CanMobAutoclick(object, location, params)
var/obj/item/h = get_active_hand()
if(h)
. = h.CanItemAutoclick(object, location, params)
/obj/item/proc/CanItemAutoclick(object, location, params)
/obj/item/weapon/gun
var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds
/obj/item/weapon/gun/CanItemAutoclick(object, location, params)
. = automatic
+12 -4
View File
@@ -323,19 +323,27 @@
dir = WEST
/obj/screen/click_catcher
icon = 'icons/mob/screen_full.dmi'
icon_state = "passage0"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "click_catcher"
plane = CLICKCATCHER_PLANE
mouse_opacity = 2
screen_loc = "CENTER-7,CENTER-7"
/obj/screen/click_catcher/proc/MakeGreed()
. = list()
for(var/i = 0, i<15, i++)
for(var/j = 0, j<15, j++)
var/obj/screen/click_catcher/CC = new()
CC.screen_loc = "NORTH-[i],EAST-[j]"
. += CC
/obj/screen/click_catcher/Click(location, control, params)
var/list/modifiers = params2list(params)
if(modifiers["middle"] && istype(usr, /mob/living/carbon))
var/mob/living/carbon/C = usr
C.swap_hand()
else
var/turf/T = screen_loc2turf(modifiers["screen-loc"], get_turf(usr))
var/turf/T = screen_loc2turf(screen_loc, get_turf(usr))
if(T)
T.Click(location, control, params)
return 1
. = 1
@@ -10,7 +10,7 @@ Bonus
The body generates Sensory restorational chemicals.
inacusiate for ears
antihol for removal of alcohol
synaptizine to purge sensory hallucigens
synaphydramine to purge sensory hallucigens and histamine based impairment
mannitol to kickstart the mind
//////////////////////////////////////
@@ -21,7 +21,7 @@ Bonus
resistance = -4
stage_speed = -4
transmittable = -3
level = 6
level = 5
severity = 0
/datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A)
@@ -38,13 +38,12 @@ Bonus
M.reagents.add_reagent_list(list("antihol"=10, "inacusiate"=10))
M << "<span class='notice'>You feel sober.</span>"
if(4)
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10)
M.reagents.add_reagent_list(list("antihol"=10, "inacusiate"=10, "synaptizine"=5))
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10)
M.reagents.add_reagent_list(list("antihol"=10, "inacusiate"=10, "synaphydramine"=5))
M << "<span class='notice'>You feel focused.</span>"
if(5)
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10)
M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "inacusiate"=10, "synaptizine"=10))
M << "<span class='notice'>Your mind feels relaxed.</span>"
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10)
M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "inacusiate"=10, "synaphydramine"=10))
return
/*
@@ -80,24 +79,23 @@ Bonus
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1)
M << "<span class='warning'>You can't taste a thing.</span>"
if(2)
M << "<span class='warning'>You can't feel anything.</span>"
if(2)
M << "<span class='warning'>You feel absolutely hammered.</span>"
if(prob(10))
M.reagents.add_reagent("morphine",rand(5,7))
if(3)
M.reagents.add_reagent("ethanol",rand(5,7))
M << "<span class='warning'>You feel absolutely hammered.</span>"
M << "<span class='warning'>You try to focus on not dying.</span>"
if(prob(15))
M.reagents.add_reagent("morphine",rand(5,7))
if(4)
M.reagents.add_reagent_list(list("ethanol",rand(7,15),"mindbreaker",rand(5,10)))
M << "<span class='warning'>You try to focus on not dying.</span>"
M << "<span class='warning'>u can count 2 potato!</span>"
if(prob(20))
M.reagents.add_reagent("morphine",rand(5,7))
if(5)
M.reagents.add_reagent_list(list("impedrezene",rand(5,15),"ethanol",rand(7,20),"mindbreaker",rand(5,15)))
M << "<span class='warning'>u can count 2 potato!</span>"
if(prob(25))
M.reagents.add_reagent("morphine",rand(5,7))
return
+11 -8
View File
@@ -78,7 +78,7 @@
"<span class='userdanger'>[A] leg sweeps you!</span>")
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE)
D.Weaken(4)//originally was 6, lowered since you could kill somebody in one stun
D.Weaken(2)
return 1
/datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch
@@ -146,23 +146,26 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi
//Krav Maga Gloves
/obj/item/clothing/gloves/krav_maga
desc = "These gloves can teach you to perform Krav Maga using nanochips."
name = "black gloves"
icon_state = "black"
item_state = "bgloves"
/obj/item/clothing/gloves/color/black/krav_maga
can_be_cut = 0
var/datum/martial_art/krav_maga/style = new
/obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot)
/obj/item/clothing/gloves/color/black/krav_maga/equipped(mob/user, slot)
if(!ishuman(user))
return
if(slot == slot_gloves)
var/mob/living/carbon/human/H = user
style.teach(H,1)
/obj/item/clothing/gloves/krav_maga/dropped(mob/user)
/obj/item/clothing/gloves/color/black/krav_maga/dropped(mob/user)
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if(H.get_item_by_slot(slot_gloves) == src)
style.remove(H)
/obj/item/clothing/gloves/color/black/krav_maga/sec//more obviously named, given to sec
name = "krav maga gloves"
desc = "These gloves can teach you to perform Krav Maga using nanochips."
icon_state = "fightgloves"
item_state = "fightgloves"
+2
View File
@@ -18,6 +18,7 @@
/obj/effect/blob/core/New(loc, client/new_overmind = null, new_rate = 2, placed = 0)
blob_cores += src
SSobj.processing |= src
poi_list |= src
update_icon() //so it atleast appears
if(!placed && !overmind)
create_overmind(new_overmind)
@@ -42,6 +43,7 @@
overmind.blob_core = null
overmind = null
SSobj.processing.Remove(src)
poi_list -= src
return ..()
/obj/effect/blob/core/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -98,6 +98,7 @@
if(istype(src.loc, /mob/living/carbon/human))
if(combat_cooldown != initial(combat_cooldown))
src.loc << "<span class='warning'>Combat injection is still recharging.</span>"
return
var/mob/living/carbon/human/M = src.loc
M.adjustStaminaLoss(-75)
M.SetParalysis(0)
+8 -3
View File
@@ -332,7 +332,7 @@
origin_tech = "combat=4;materials=3"
icon_state = "chemcore"
var/list/beakers = list()
var/max_beakers = 4
var/max_beakers = 1
var/spread_range = 5
var/temp_boost = 50
var/time_release = 0
@@ -411,11 +411,15 @@
/obj/item/weapon/bombcore/chemical/CheckParts()
// Using different grenade casings, causes the payload to have different properties.
var/obj/item/weapon/stock_parts/matter_bin/MB = locate(/obj/item/weapon/stock_parts/matter_bin) in src
if(MB)
max_beakers += MB.rating // max beakers = 2-5.
qdel(MB)
for(var/obj/item/weapon/grenade/chem_grenade/G in src)
if(istype(G, /obj/item/weapon/grenade/chem_grenade/large))
var/obj/item/weapon/grenade/chem_grenade/large/LG = G
max_beakers += 1 // Adding two large grenades only allows for a maximum of 6 beakers.
max_beakers += 1 // Adding two large grenades only allows for a maximum of 7 beakers.
spread_range += 2 // Extra range, reduced density.
temp_boost += 50 // maximum of +150K blast using only large beakers. Not enough to self ignite.
for(var/obj/item/slime_extract/S in LG.beakers) // And slime cores.
@@ -433,7 +437,7 @@
temp_boost += 150 // maximum of +350K blast, which is enough to self ignite. Which means a self igniting bomb can't take advantage of other grenade casing properties. Sorry?
if(istype(G, /obj/item/weapon/grenade/chem_grenade/adv_release))
time_release += 25 // A typical bomb, using basic beakers, will explode over 2-4 seconds. Using two will make the reaction last for less time, but it will be more dangerous overall.
time_release += 50 // A typical bomb, using basic beakers, will explode over 2-4 seconds. Using two will make the reaction last for less time, but it will be more dangerous overall.
for(var/obj/item/weapon/reagent_containers/glass/B in G)
if(beakers.len < max_beakers)
@@ -446,6 +450,7 @@
///Syndicate Detonator (aka the big red button)///
/obj/item/device/syndicatedetonator
+1
View File
@@ -7,6 +7,7 @@
deflect_chance = 25
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
max_temperature = 60000
burn_state = LAVA_PROOF
infra_luminosity = 3
operation_req_access = list(access_cent_specops)
wreckage = /obj/structure/mecha_wreckage/marauder
@@ -342,6 +342,7 @@
R += num2text(A.volume) + "),"
mechsyringe.icon_state = initial(mechsyringe.icon_state)
mechsyringe.icon = initial(mechsyringe.icon)
mechsyringe.reagents.reaction(M, INJECT)
mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume)
M.take_organ_damage(2)
add_logs(originaloccupant, M, "shot", "syringegun")
@@ -86,8 +86,11 @@
var/obj/item/organ/limb/affecting = H.get_organ("chest")
affecting.take_damage(drill_damage)
H.update_damage_overlays(0)
else if(target.stat == DEAD && target.butcher_results)
target.harvest(chassis) // Butcher the mob with our drill.
else
target.take_organ_damage(drill_damage)
if(target)
target.Paralyse(10)
target.updatehealth()
+4 -1
View File
@@ -104,7 +104,10 @@
data += "<div class='statusDisplay'>No mech detected.</div>"
else
data += "<div class='statusDisplay'>Integrity: [recharge_port.recharging_mech.health]<BR>"
if(recharge_port.recharging_mech.cell.crit_fail)
if(!recharge_port.recharging_mech.cell)
data += "<span class='bad'>WARNING : the mech cell is missing!</span></div>"
else if(recharge_port.recharging_mech.cell.crit_fail)
data += "<span class='bad'>WARNING : the mech cell seems faulty!</span></div>"
else
data += "Power: [recharge_port.recharging_mech.cell.charge]/[recharge_port.recharging_mech.cell.maxcharge]</div>"
+29 -1
View File
@@ -92,6 +92,7 @@
var/datum/action/innate/mecha/mech_zoom/zoom_action = new
var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new
var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new
var/datum/action/innate/mecha/strafe/strafing = new
//Action vars
var/thrusters_active = FALSE
@@ -106,6 +107,7 @@
var/phasing = FALSE
var/phasing_energy_drain = 200
var/phase_state = "" //icon_state when phasing
var/strafe = FALSE //If we are strafing
var/static/list/armour_facings = list("[NORTH]" = list("[SOUTH]" = FRONT_ARMOUR, "[EAST]" = SIDE_ARMOUR, "[WEST]" = SIDE_ARMOUR, "[NORTH]" = BACK_ARMOUR),
"[EAST]" = list("[SOUTH]" = SIDE_ARMOUR, "[WEST]" = FRONT_ARMOUR, "[EAST]" = BACK_ARMOUR, "[NORTH]" = SIDE_ARMOUR),
@@ -502,7 +504,7 @@
var/move_result = 0
if(internal_damage & MECHA_INT_CONTROL_LOST)
move_result = mechsteprand()
else if(src.dir!=direction)
else if(src.dir!=direction && !strafe)
move_result = mechturn(direction)
else
move_result = mechstep(direction)
@@ -522,7 +524,10 @@
return 1
/obj/mecha/proc/mechstep(direction)
var/current_dir = src.dir
var/result = step(src,direction)
if(strafe)
src.dir = current_dir
if(result && stepsound)
playsound(src,stepsound,40,1)
return result
@@ -1033,6 +1038,9 @@ var/year_integer = text2num(year) // = 2013???
stats_action.chassis = src
stats_action.Grant(user)
strafing.chassis = src
strafing.Grant(user)
/obj/mecha/proc/RemoveActions(var/mob/living/user, var/human_occupant = 0)
if(human_occupant)
@@ -1041,6 +1049,7 @@ var/year_integer = text2num(year) // = 2013???
cycle_action.Remove(user)
lights_action.Remove(user)
stats_action.Remove(user)
strafing.Remove(user)
/datum/action/innate/mecha
@@ -1136,6 +1145,25 @@ var/year_integer = text2num(year) // = 2013???
chassis.occupant << browse(chassis.get_stats_html(), "window=exosuit")
/datum/action/innate/mecha/strafe
name = "Toggle Strafing"
button_icon_state = "strafe"
/datum/action/innate/mecha/strafe/Activate()
if(!owner || !chassis || chassis.occupant != owner)
return
chassis.toggle_strafe()
/obj/mecha/AltClick(mob/living/user)
if(user == occupant)
toggle_strafe()
/obj/mecha/proc/toggle_strafe()
strafe = !strafe
occupant_message("Toggled strafing mode [strafe?"on":"off"].")
log_message("Toggled strafing mode [strafe?"on":"off"].")
//////////////////////////////////////// Specific Ability Actions ///////////////////////////////////////////////
//Need to be granted by the mech type, Not default abilities.
+1
View File
@@ -61,6 +61,7 @@
icon_state = "firefighter"
max_temperature = 65000
health = 250
burn_state = LAVA_PROOF
lights_power = 7
damage_absorption = list("brute"=0.6,"fire"=0.5,"bullet"=0.7,"laser"=0.7,"energy"=1,"bomb"=0.4)
max_equip = 5 // More armor, less tools
+7 -3
View File
@@ -1,9 +1,13 @@
/obj/effect/decal/point
name = "arrow"
/obj/effect/overlay/temp/point
name = "pointer"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "arrow"
layer = 16
mouse_opacity = 0
duration = 25
/obj/effect/overlay/temp/point/New(loc, set_invis = 0)
..()
invisibility = set_invis
// Used for spray that you spray at walls, tables, hydrovats etc
/obj/effect/decal/spraystill
+1 -2
View File
@@ -82,8 +82,7 @@
alpha = initial(alpha)
if(mimiced_atom)
name = mimiced_atom.name
icon = mimiced_atom.icon
icon_state = mimiced_atom.icon_state
appearance = mimiced_atom.appearance
dir = mimiced_atom.dir
animate(src, alpha = 0, time = duration)
@@ -61,7 +61,7 @@
/obj/item/bodybag = 1,
/obj/item/clothing/glasses/meson = 2,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/clothing/gloves/color/yellow/fake = 1,
/obj/item/clothing/gloves/color/fyellow = 1,
/obj/item/clothing/head/hardhat = 1,
/obj/item/clothing/head/hardhat/red = 1,
/obj/item/clothing/head/that{throwforce = 1; throwing = 1} = 1,
@@ -121,10 +121,9 @@
/obj/item/weapon/relic = 3,
/obj/item/weaponcrafting/reciever = 1,
/obj/item/clothing/head/cone = 2,
/obj/item/weapon/skub = 1,
/obj/item/weapon/grenade/smokebomb = 2,
/obj/item/device/geiger_counter = 3,
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = 1, //only for the best
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = 1,
/obj/item/device/radio/headset = 1,
/obj/item/device/assembly/infra = 1,
/obj/item/device/assembly/igniter = 2,
@@ -139,8 +138,7 @@
/obj/item/clothing/gloves/color/grey = 1,
/obj/item/clothing/gloves/color/light_brown = 1,
/obj/item/clothing/gloves/color/brown = 1,
/obj/item/clothing/shoes/laceup = 4,
/obj/item/weapon/reagent_containers/food/condiment/saltshaker = 10, //added for impartiality
/obj/item/clothing/shoes/laceup = 1,
"" = 4
)
+2 -1
View File
@@ -14,7 +14,8 @@
if(heavy_range > light_range)
light_range = heavy_range
for(var/atom/T in range(light_range, epicenter))
for(var/A in spiral_range(light_range, epicenter))
var/atom/T = A
var/distance = get_dist(epicenter, T)
if(distance < 0)
distance = 0
+12 -20
View File
@@ -111,36 +111,28 @@
/obj/item/device/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag)
if(!proximity_flag)
if(holo_cooldown)
if(holo_cooldown > world.time)
user << "<span class='warning'>[src] is not ready yet!</span>"
return
var/T = get_turf(target)
if(locate(/mob/living) in T)
CreateHolo(T, user)
PoolOrNew(/obj/effect/medical_holosign, list(T,user)) //produce a holographic glow
holo_cooldown = world.time + 100
return
..()
/obj/item/device/flashlight/pen/proc/CreateHolo(tturf,creator)
var/obj/effect/medical_holosign/M = new /obj/effect/medical_holosign(tturf)
M.visible_message("<span class='danger'>[creator] created a medical hologram!</span>")
holo_cooldown = 1
spawn(100)
holo_cooldown = 0
return
/obj/effect/medical_holosign
/obj/effect/overlay/temp/medical_holosign
name = "medical holosign"
desc = "A small holographic barrier that indicates a medic is coming to treat a patient."
icon = 'icons/effects/effects.dmi'
desc = "A small holographic glow that indicates a medic is coming to treat a patient."
icon_state = "medi_holo"
layer = 4.1
mouse_opacity = 0
duration = 30
/obj/effect/medical_holosign/New(loc, creator)
..()
playsound(loc, 'sound/machines/ping.ogg', 50, 0) //make some noise!
if(creator)
visible_message("<span class='danger'>[creator] created a medical hologram!</span>")
/obj/effect/medical_holosign/New()
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
spawn(30)
qdel(src)
return
/obj/item/device/flashlight/seclite
name = "seclite"
+36 -18
View File
@@ -1,3 +1,7 @@
#define PROXIMITY_NONE ""
#define PROXIMITY_ON_SCREEN "_red"
#define PROXIMITY_NEAR "_yellow"
/**
* Multitool -- A multitool is used for hacking electronic devices.
* TO-DO -- Using it as a power measurement tool for cables etc. Nannek.
@@ -24,7 +28,12 @@
/obj/item/device/multitool/ai_detect
var/track_delay = 0
var/track_cooldown = 0
var/track_delay = 10 //How often it checks for proximity
var/detect_state = PROXIMITY_NONE
var/turf/our_turf
var/rangealert = 8 //Glows red when inside
var/rangewarning = 20 //Glows yellow when inside
/obj/item/device/multitool/ai_detect/New()
..()
@@ -35,36 +44,45 @@
return ..()
/obj/item/device/multitool/ai_detect/process()
if(track_delay > world.time)
if(track_cooldown > world.time)
return
detect_state = PROXIMITY_NONE
our_turf = get_turf(src)
multitool_detect()
icon_state = "[initial(icon_state)][detect_state]"
track_cooldown = world.time + track_delay // 1 second
var/found_eye = 0
var/turf/our_turf = get_turf(src)
/obj/item/device/multitool/ai_detect/proc/multitool_detect()
for(var/mob/living/silicon/ai/AI in ai_list)
if(AI.cameraFollow == src)
found_eye = 1
detect_state = PROXIMITY_ON_SCREEN
break
if(!found_eye && cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z))
if(!detect_state && cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z))
var/datum/camerachunk/chunk = cameranet.getCameraChunk(our_turf.x, our_turf.y, our_turf.z)
if(chunk)
if(chunk.seenby.len)
for(var/mob/camera/aiEye/A in chunk.seenby)
var/turf/eye_turf = get_turf(A)
if(get_dist(our_turf, eye_turf) < 8)
found_eye = 1
var/turf/detect_turf = get_turf(A)
if(get_dist(our_turf, detect_turf) < rangealert)
detect_state = PROXIMITY_ON_SCREEN
break
if(get_dist(our_turf, detect_turf) < rangewarning)
detect_state = PROXIMITY_NEAR
break
if(found_eye)
icon_state = "[initial(icon_state)]_red"
else
icon_state = initial(icon_state)
track_delay = world.time + 10 // 1 second
return
/obj/item/device/multitool/ai_detect/admin
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item?
track_delay = 5
/obj/item/device/multitool/ai_detect/admin/multitool_detect()
for(var/mob/J in range(rangewarning,src))
if(admin_datums[J.ckey])
detect_state = PROXIMITY_NEAR
var/turf/detect_turf = get_turf(J)
if(get_dist(our_turf, detect_turf) < rangealert)
detect_state = PROXIMITY_ON_SCREEN
break
/obj/item/device/multitool/cyborg
name = "multitool"
-4
View File
@@ -65,12 +65,8 @@
desc = "A screwdriver with an ultra thin tip."
icon = 'icons/obj/nuke_tools.dmi'
icon_state = "screwdriver_nuke"
item_state = "screwdriver_nuke"
toolspeed = 2
/obj/item/weapon/screwdriver/nuke/New()
//to skip screwdriver icon update
/obj/item/weapon/paper/nuke_instructions
info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:<br>\
<ul>\
@@ -127,6 +127,13 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \
icon_state = "sheet-leather"
origin_tech = "materials=2"
/obj/item/stack/sheet/sinew
name = "watcher sinew"
icon = 'icons/obj/mining.dmi'
desc = "Long stringy filaments which presumably came from a watcher's wings."
singular_name = "watcher sinew"
icon_state = "sinew"
origin_tech = "bio=4"
//Step one - dehairing.
@@ -14,6 +14,7 @@ Mineral Sheets
- Adamantine
- Mythril
- Enriched Uranium
- Bones
*/
/obj/item/stack/sheet/mineral
@@ -372,3 +373,6 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \
/obj/item/stack/sheet/mineral/abductor/New(var/loc, var/amount=null)
recipes = abductor_recipes
..()
@@ -249,4 +249,20 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
desc = "Rare kind of gems which are only gained by blood sacrifice to minor deities. They are needed in crafting powerful objects."
singular_name = "greater gem"
icon_state = "sheet-greatergem"
origin_tech = "materials=8"
origin_tech = "materials=8"
/*
* Bones
*/
/obj/item/stack/sheet/bone
name = "bones"
icon = 'icons/obj/mining.dmi'
icon_state = "bone"
singular_name = "bone"
desc = "Someone's been drinking their milk."
force = 7
throwforce = 5
w_class = 3
throw_speed = 1
throw_range = 3
origin_tech = "materials=2;bio=2"
@@ -12,6 +12,11 @@
var/turf_type = null
var/mineralType = null
/obj/tiem/stack/tile/New(loc, amount)
..()
pixel_x = rand(-3, 3)
pixel_y = rand(-3, 3) //randomize a little
/obj/item/stack/tile/attackby(obj/item/W, mob/user, params)
if (istype(W, /obj/item/weapon/weldingtool))
@@ -48,7 +48,7 @@
message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])")
sleep(10)
explode(get_turf(user))
user.gib()
user.gib(no_brain = 1)
/obj/item/weapon/c4/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
@@ -3,7 +3,7 @@
#define READY 3
/obj/item/weapon/grenade/chem_grenade
name = "grenade"
name = "chemical grenade"
desc = "A custom made grenade."
icon_state = "chemg"
item_state = "flashbang"
@@ -132,7 +132,7 @@
stage = N
if(stage == EMPTY)
name = "[initial(name)] casing"
desc = "A do it yourself [initial(name)] casing!"
desc = "A do it yourself [initial(name)]!"
icon_state = initial(icon_state)
else if(stage == WIRED)
name = "unsecured [initial(name)]"
@@ -243,20 +243,22 @@
/obj/item/weapon/grenade/chem_grenade/adv_release // Intended for weaker, but longer lasting effects. Could have some interesting uses.
name = "advanced release grenade"
desc = "A custom made advanced release grenade. It is able to be triggered more than once. Can be configured using a multitool."
desc = "A custom made advanced release grenade. It is able to be detonated more than once. Can be configured using a multitool."
icon_state = "timeg"
var/unit_spread = 10 // Amount of units per repeat. Can be altered with a multitool.
/obj/item/weapon/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/multitool))
if(unit_spread < 100)
unit_spread += 5
else
unit_spread = 5
switch(unit_spread)
if(0 to 24)
unit_spread += 5
if(25 to 99)
unit_spread += 25
else
unit_spread = 5
user << "<span class='notice'> You set the time release to [unit_spread] units per detonation.</span>"
return
else
return ..()
..()
/obj/item/weapon/grenade/chem_grenade/adv_release/prime()
if(stage != READY)
@@ -19,8 +19,10 @@
var/mob/living/carbon/human/H = imp_in
if(!ishuman(H))
return
style.teach(H)
qdel(src)
if(istype(H.martial_art, /datum/martial_art/krav_maga))
style.remove(H)
else
style.teach(H,1)
/obj/item/weapon/implanter/krav_maga
name = "implanter (krav maga)"
@@ -11,14 +11,6 @@
w_class = 2
attack_verb = list("warned", "cautioned", "smashed")
/obj/item/weapon/skub
desc = "A skub"
name = "skub"
icon = 'icons/obj/items.dmi'
icon_state = "skub"
w_class = 4
attack_verb = list("skubbed")
/obj/item/weapon/emptysandbag
name = "empty sandbag"
desc = "A bag to be filled with sand."
@@ -327,10 +327,14 @@
item_state = "duffle-eng"
burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/dufflebag/engineering/drone
name = "drone industrial dufflebag"
/obj/item/weapon/storage/backpack/dufflebag/drone
name = "drone dufflebag"
desc = "A large dufflebag for holding tools and hats."
icon_state = "duffle-drone"
item_state = "duffle-drone"
burn_state = FIRE_PROOF
/obj/item/weapon/storage/backpack/dufflebag/engineering/drone/New()
/obj/item/weapon/storage/backpack/dufflebag/drone/New()
..()
new /obj/item/weapon/screwdriver(src)
@@ -94,8 +94,7 @@
can_hold = list(
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/classic_baton,
/obj/item/weapon/grenade/flashbang,
/obj/item/weapon/grenade/chem_grenade/teargas,
/obj/item/weapon/grenade,
/obj/item/weapon/reagent_containers/spray/pepper,
/obj/item/weapon/restraints/handcuffs,
/obj/item/device/assembly/flash/handheld,
@@ -152,6 +151,13 @@
desc = "A syndicate belt designed to be used by boarding parties. Its style is modeled after the hardsuits they wear."
icon_state = "militarybelt"
item_state = "military"
max_w_class = 3
/obj/item/weapon/storage/belt/military/army
name = "army belt"
desc = "A belt used by military forces."
icon_state = "grenadebeltold"
item_state = "security"
/obj/item/weapon/storage/belt/military/assault
name = "assault belt"
@@ -163,9 +169,9 @@
/obj/item/weapon/storage/belt/grenade
name = "grenadier belt"
desc = "A belt for holding grenades."
icon_state = "grenadebelt"
icon_state = "grenadebeltnew"
item_state = "security"
max_w_class = 0
max_w_class = 4
storage_slots = 30
can_hold = list(
/obj/item/weapon/grenade,
@@ -173,6 +179,7 @@
/obj/item/weapon/lighter,
/obj/item/device/multitool,
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov,
/obj/item/weapon/c4,
)
/obj/item/weapon/storage/belt/grenade/full/New()
..()
@@ -236,7 +243,7 @@
storage_slots = 6
max_w_class = 4 // Set to this so the light replacer can fit.
can_hold = list(
/obj/item/weapon/grenade/chem_grenade/cleaner,
/obj/item/weapon/grenade/chem_grenade,
/obj/item/device/lightreplacer,
/obj/item/device/flashlight,
/obj/item/weapon/reagent_containers/spray,
@@ -251,7 +258,7 @@
desc = "A bandolier for holding shotgun ammunition."
icon_state = "bandolier"
item_state = "bandolier"
storage_slots = 8
storage_slots = 18
can_hold = list(
/obj/item/ammo_casing/shotgun
)
@@ -378,7 +378,7 @@
/obj/item/weapon/storage/box/firingpins/New()
..()
for(var/i in 1 to 7)
for(var/i in 1 to 5)
new /obj/item/device/firing_pin(src)
/obj/item/weapon/storage/box/handcuffs
+15 -43
View File
@@ -43,8 +43,7 @@
/obj/item/weapon/wrench/medical
name = "medical wrench"
desc = "A medical wrench with common(medical?) uses. Can be found in your hand."
icon_state = "medwrench"
item_state = "wrench"
icon_state = "wrench_medical"
force = 2 //MEDICAL
throwforce = 4
origin_tech = "materials=1;engineering=1;biotech=1"
@@ -86,7 +85,7 @@
name = "screwdriver"
desc = "You can be totally screwy with this."
icon = 'icons/obj/items.dmi'
icon_state = "screwdriver"
icon_state = null
flags = CONDUCT
slot_flags = SLOT_BELT
force = 5
@@ -105,31 +104,10 @@
return(BRUTELOSS)
/obj/item/weapon/screwdriver/New(loc, var/param_color = null)
if(!param_color)
param_color = pick("red","blue","purple","brown","green","cyan","yellow")
switch(param_color)
if ("red")
icon_state = "screwdriver2"
item_state = "screwdriver"
if ("blue")
icon_state = "screwdriver"
item_state = "screwdriver_blue"
if ("purple")
icon_state = "screwdriver3"
item_state = "screwdriver_purple"
if ("brown")
icon_state = "screwdriver4"
item_state = "screwdriver_brown"
if ("green")
icon_state = "screwdriver5"
item_state = "screwdriver_green"
if ("cyan")
icon_state = "screwdriver6"
item_state = "screwdriver_cyan"
if ("yellow")
icon_state = "screwdriver7"
item_state = "screwdriver_yellow"
if(!icon_state)
if(!param_color)
param_color = pick("red","blue","pink","brown","green","cyan","yellow")
icon_state = "screwdriver_[param_color]"
if (prob(75))
src.pixel_y = rand(0, 16)
@@ -148,13 +126,9 @@
name = "powered screwdriver"
desc = "An electrical screwdriver, designed to be both precise and quick."
icon = 'icons/obj/items_cyborg.dmi'
icon_state = "screwdriver"
item_state = "screwdriver_brown"
icon_state = "screwdriver_cyborg"
toolspeed = 2
/obj/item/weapon/screwdriver/cyborg/New(loc, var/param_color = null)
return ..(loc, "cyborg")
/*
* Wirecutters
*/
@@ -162,7 +136,7 @@
name = "wirecutters"
desc = "This cuts wires."
icon = 'icons/obj/items.dmi'
icon_state = "cutters"
icon_state = null
flags = CONDUCT
slot_flags = SLOT_BELT
force = 6
@@ -177,9 +151,10 @@
/obj/item/weapon/wirecutters/New(loc, var/param_color = null)
..()
if((!param_color && prob(50)) || param_color == "yellow")
icon_state = "cutters-y"
item_state = "cutters_yellow"
if(!icon_state)
if(!param_color)
param_color = pick("yellow","red")
icon_state = "cutters_[param_color]"
/obj/item/weapon/wirecutters/attack(mob/living/carbon/C, mob/user)
if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
@@ -203,11 +178,9 @@
name = "wirecutters"
desc = "This cuts wires."
icon = 'icons/obj/items_cyborg.dmi'
icon_state = "cutters_cyborg"
toolspeed = 2
/obj/item/weapon/wirecutters/cyborg/New(loc, var/param_color = null)
return ..(loc, "cyborg")
/*
* Welding Tool
*/
@@ -539,7 +512,6 @@
slot_flags = SLOT_BELT
force = 5
throwforce = 7
item_state = "crowbar"
w_class = 2
materials = list(MAT_METAL=50)
origin_tech = "engineering=1"
@@ -552,8 +524,7 @@
return (BRUTELOSS)
/obj/item/weapon/crowbar/red
icon_state = "red_crowbar"
item_state = "crowbar_red"
icon_state = "crowbar_red"
force = 8
/obj/item/weapon/crowbar/large
@@ -565,6 +536,7 @@
throw_range = 3
materials = list(MAT_METAL=70)
icon_state = "crowbar_large"
item_state = "crowbar"
toolspeed = 2
/obj/item/weapon/crowbar/cyborg
+1 -12
View File
@@ -118,17 +118,6 @@
/obj/item/weapon/twohanded/offhand/wield()
qdel(src)
/obj/item/weapon/twohanded/offhand/hit_reaction()//if the actual twohanded weapon is a shield, we count as a shield too!
var/mob/user = loc
if(!istype(user))
return 0
var/obj/item/I = user.get_active_hand()
if(I == src)
I = user.get_inactive_hand()
if(!I)
return 0
return I.hit_reaction()
///////////Two hand required objects///////////////
//This is for objects that require two hands to even pick up
/obj/item/weapon/twohanded/required/
@@ -213,7 +202,7 @@
origin_tech = "magnets=3;syndicate=4"
item_color = "green"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 50
block_chance = 75
var/hacked = 0
/obj/item/weapon/twohanded/dualsaber/New()
+9 -8
View File
@@ -2,6 +2,7 @@
icon = 'icons/obj/structures.dmi'
pressure_resistance = 8
var/climb_time = 20
var/climb_stun = 2
var/climbable = FALSE
var/mob/structureclimber
@@ -60,7 +61,7 @@
. = ..()
if(!climbable)
return
if(ismob(O) && user == O && ishuman(user))
if(ismob(O) && user == O && iscarbon(user))
if(user.canmove)
climb_structure(user)
return
@@ -78,22 +79,22 @@
src.add_fingerprint(user)
user.visible_message("<span class='warning'>[user] starts climbing onto [src].</span>", \
"<span class='notice'>You start climbing onto [src]...</span>")
var/climb_time = 20
var/adjusted_climb_time = climb_time
if(user.restrained()) //climbing takes twice as long when restrained.
climb_time *= 2
adjusted_climb_time *= 2
if(istype(user, /mob/living/carbon/alien))
adjusted_climb_time *= 0.25 //aliens are terrifyingly fast
structureclimber = user
if(do_mob(user, user, climb_time))
if(do_mob(user, user, adjusted_climb_time))
if(src.loc) //Checking if structure has been destroyed
density = 0
if(step(user,get_dir(user,src.loc)))
user.visible_message("<span class='warning'>[user] climbs onto [src].</span>", \
"<span class='notice'>You climb onto [src].</span>")
add_logs(user, src, "climbed onto")
user.Stun(2)
user.Stun(climb_stun)
. = 1
else
user << "<span class='warning'>You fail to climb onto [src].</span>"
density = 1
structureclimber = null
return 1
structureclimber = null
return ..()
@@ -20,6 +20,7 @@
var/horizontal = FALSE
var/allow_objects = FALSE
var/allow_dense = FALSE
var/dense_when_open = FALSE //if it's dense when open or not
var/max_mob_size = MOB_SIZE_HUMAN //Biggest mob_size accepted by the container
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
@@ -81,15 +82,27 @@
return 1
return !density
/obj/structure/closet/proc/can_open()
/obj/structure/closet/proc/can_open(mob/living/user)
if(welded || locked)
return 0
var/turf/T = get_turf(src)
for(var/mob/living/L in T)
if(L.anchored || horizontal && L.mob_size > MOB_SIZE_TINY && L.density)
if(user)
user << "<span class='danger'>There's something large on top of [src], preventing it from opening.</span>" //you... think? there's something standing on it ffs
return 0
return 1
/obj/structure/closet/proc/can_close()
for(var/obj/structure/closet/closet in get_turf(src))
/obj/structure/closet/proc/can_close(mob/living/user)
var/turf/T = get_turf(src)
for(var/obj/structure/closet/closet in T)
if(closet != src && !closet.wall_mounted)
return 0
for(var/mob/living/L in T)
if(L.anchored || horizontal && L.mob_size > MOB_SIZE_TINY && L.density)
if(user)
user << "<span class='danger'>There's something too large in [src], preventing it from closing.</span>"
return 0
return 1
/obj/structure/closet/proc/dump_contents()
@@ -107,12 +120,14 @@
if(insert(AM) == -1) // limit reached
break
/obj/structure/closet/proc/open()
if(opened || !can_open())
/obj/structure/closet/proc/open(mob/living/user)
if(opened || !can_open(user))
return
playsound(loc, open_sound, 15, 1, -3)
opened = 1
density = 0
if(!dense_when_open)
density = 0
climb_time *= 0.5 //it's faster to climb onto an open thing
dump_contents()
update_icon()
return 1
@@ -126,10 +141,10 @@
if(!isliving(AM)) //let's not put ghosts or camera mobs inside closets...
return
var/mob/living/L = AM
if(L.buckled || L.incorporeal_move || L.buckled_mobs.len)
if(L.anchored || L.buckled || L.incorporeal_move || L.buckled_mobs.len)
return
if(L.mob_size > MOB_SIZE_TINY) // Tiny mobs are treated as items.
if(horizontal && !L.lying)
if(horizontal && L.density)
return
if(L.mob_size > max_mob_size)
return
@@ -154,21 +169,22 @@
return 1
/obj/structure/closet/proc/close()
if(!opened || !can_close())
/obj/structure/closet/proc/close(mob/living/user)
if(!opened || !can_close(user))
return 0
take_contents()
playsound(loc, close_sound, 15, 1, -3)
climb_time = initial(climb_time)
opened = 0
density = 1
update_icon()
return 1
/obj/structure/closet/proc/toggle()
/obj/structure/closet/proc/toggle(mob/living/user)
if(opened)
return close()
return close(user)
else
return open()
return open(user)
/obj/structure/closet/ex_act(severity, target)
contents_explosion(severity, target)
@@ -217,7 +233,7 @@
qdel(src)
return 0
else if(user.drop_item())
W.Move(loc)
W.forceMove(loc)
return 1
else if(istype(W, /obj/item/weapon/weldingtool) && can_weld_shut)
var/obj/item/weapon/weldingtool/WT = W
@@ -247,26 +263,29 @@
return
if(!Adjacent(user) || !user.Adjacent(O))
return
if(user == O) //try to climb onto it
return ..()
if(!opened || istype(O, /obj/structure/closet))
return
if(user == O)
return
var/list/targets = list(O, src)
add_fingerprint(user)
user.visible_message("<span class='warning'>[user] tries to stuff [O] into [src].</span>", \
"<span class='warning'>You try to stuff [O] into [src].</span>", \
var/mob/living/L = O
var/actuallyismob = istype(L)
user.visible_message("<span class='warning'>[user] [actuallyismob ? "tries to ":""]stuff [O] into [src].</span>", \
"<span class='warning'>You [actuallyismob ? "try to ":""]stuff [O] into [src].</span>", \
"<span class='italics'>You hear clanging.</span>")
if(do_after_mob(user, targets, 40))
user.visible_message("<span class='notice'>[user] stuffs [O] into [src].</span>", \
"<span class='notice'>You stuff [O] into [src].</span>", \
"<span class='italics'>You hear a loud metal bang.</span>")
var/mob/living/L = O
if(istype(L) && !issilicon(L))
L.Weaken(2)
O.loc = src.loc
close()
if(actuallyismob)
if(do_after_mob(user, targets, 40))
user.visible_message("<span class='notice'>[user] stuffs [O] into [src].</span>", \
"<span class='notice'>You stuff [O] into [src].</span>", \
"<span class='italics'>You hear a loud metal bang.</span>")
if(!issilicon(L))
L.Weaken(2)
O.forceMove(get_turf(src))
close()
else
O.forceMove(get_turf(src))
return 1
/obj/structure/closet/relaymove(mob/user)
@@ -282,14 +301,18 @@
M.show_message("<FONT size=[max(0, 5 - get_dist(src, M))]>BANG, bang!</FONT>", 2)
/obj/structure/closet/attack_hand(mob/user)
add_fingerprint(user)
..()
if(user.lying && get_dist(src, user) > 0)
return
if(!toggle())
if(!toggle(user))
togglelock(user)
return
/obj/structure/closet/attack_alien(mob/living/user)
return attack_hand(user)
// tk grab then use on self
/obj/structure/closet/attack_self_tk(mob/user)
return attack_hand(user)
@@ -312,7 +335,8 @@
// should be independently resolved, but this is also an interesting twist.
/obj/structure/closet/Exit(atom/movable/AM)
open()
if(AM.loc == src) return 0
if(AM.loc == src)
return 0
return 1
/obj/structure/closet/container_resist(mob/living/user)
@@ -22,3 +22,4 @@
new /obj/item/device/assembly/flash/handheld(src)
new /obj/item/device/laser_pointer(src)
new /obj/item/weapon/door_remote/research_director(src)
new /obj/item/weapon/storage/box/firingpins(src)
@@ -8,12 +8,26 @@
horizontal = TRUE
allow_objects = TRUE
allow_dense = TRUE
dense_when_open = TRUE
climbable = TRUE
climb_time = 10 //real fast, because let's be honest stepping into or onto a crate is easy
climb_stun = 0 //climbing onto crates isn't hard, guys
var/obj/item/weapon/paper/manifest/manifest
/obj/structure/closet/crate/New()
..()
update_icon()
/obj/structure/closet/crate/CanPass(atom/movable/mover, turf/target, height=0)
if(!istype(mover, /obj/structure/closet))
var/obj/structure/closet/crate/locatedcrate = locate(/obj/structure/closet/crate) in get_turf(mover)
if(locatedcrate) //you can walk on it like tables, if you're not in an open crate trying to move to a closed crate
if(opened) //if we're open, allow entering regardless of located crate openness
return 1
if(!locatedcrate.opened) //otherwise, if the located crate is closed, allow entering
return 1
return !density
/obj/structure/closet/crate/update_icon()
icon_state = "[initial(icon_state)][opened ? "open" : ""]"
@@ -22,12 +36,10 @@
overlays += "manifest"
/obj/structure/closet/crate/attack_hand(mob/user)
add_fingerprint(user)
if(manifest)
tear_manifest(user)
return
if(!toggle())
togglelock(user)
..()
/obj/structure/closet/crate/proc/tear_manifest(mob/user)
user << "<span class='notice'>You tear the manifest off of the crate.</span>"
+1 -1
View File
@@ -68,7 +68,7 @@
return
/obj/structure/extinguisher_cabinet/AltClick(mob/living/user)
if(user.incapacitated() || !Adjacent(user))
if(user.incapacitated() || !Adjacent(user) || !istype(user))
return
opened = !opened
update_icon()
-5
View File
@@ -1,11 +1,6 @@
/turf/open
var/slowdown = 0 //negative for faster, positive for slower
var/oxygen = 0
var/carbon_dioxide = 0
var/nitrogen = 0
var/toxins = 0
var/wet = 0
var/image/wet_overlay = null
@@ -226,6 +226,16 @@
var/mob/living/L = thing
if("mining" in L.faction)
continue
if(L.buckled)
if(isobj(L.buckled))
var/obj/O = L.buckled
if(O.burn_state == LAVA_PROOF)
continue
if(isliving(L.buckled)) //Goliath riding
var/mob/living/liv = L.buckled
if("mining" in liv.faction)
continue
L.adjustFireLoss(20)
if(L) //mobs turning into object corpses could get deleted here.
L.adjust_fire_stacks(20)
+1 -1
View File
@@ -28,7 +28,7 @@
message_admins("[target.name] has been hit by Bluespace Artillery fired by [usr]")
if(target.health <= 1)
target.gib()
target.gib(no_brain = 1)
else
target.adjustBruteLoss(min(99,(target.health - 1)))
target.Stun(20)
+14 -14
View File
@@ -7,29 +7,29 @@ var/sound/admin_sound
if(!check_rights(R_SOUNDS))
return
log_admin("[key_name(src)] played sound [S]")
message_admins("[key_name_admin(src)] played sound [S]")
var/freq = 1
if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS])
freq = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5)
src << "You feel the Honkmother messing with your song..."
var/sound/admin_sound = new()
admin_sound.file = S
admin_sound.priority = 250
admin_sound.channel = SOUND_CHANNEL_ADMIN
admin_sound.frequency = freq
admin_sound.wait = 1
admin_sound.repeat = 0
admin_sound.status = SOUND_UPDATE|SOUND_STREAM
log_admin("[key_name(src)] played sound [S]")
message_admins("[key_name_admin(src)] played sound [S]")
if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS])
admin_sound.frequency = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5)
src << "You feel the Honkmother messing with your song..."
admin_sound.status = SOUND_STREAM
for(var/mob/M in player_list)
if(M.client.prefs.toggles & SOUND_MIDI)
var/vol = M.client.prefs.adminmusicvolume
M << sound(admin_sound,channel = SOUND_CHANNEL_ADMIN,volume=vol)
admin_sound.frequency = 1 //Remove this line when the AFD stuff above is gone
admin_sound.wait = 0
admin_sound.volume = vol
M << admin_sound
feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -72,4 +72,4 @@ var/sound/admin_sound
M << sound(null)
feedback_add_details("admin_verb","SS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
#undef SOUND_CHANNEL_ADMIN
#undef SOUND_CHANNEL_ADMIN
+10 -8
View File
@@ -583,8 +583,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
src << "Only administrators may use this command."
return
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm != "Yes")
var/confirm = alert(src, "Drop a brain?", "Confirm", "Yes", "No","Cancel")
if(confirm == "Cancel")
return
//Due to the delay here its easy for something to have happened to the mob
if(!M)
@@ -596,8 +596,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(istype(M, /mob/dead/observer))
gibs(M.loc, M.viruses)
return
M.gib()
if(confirm == "Yes")
M.gib()
else
M.gib(no_brain = 1)
feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_gib_self()
@@ -609,7 +611,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere
return
else
mob.gib()
mob.gib(no_brain = 1)
log_admin("[key_name(usr)] used gibself.")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] used gibself.</span>")
@@ -970,13 +972,13 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits
if(!holder) return
var/datum/atom_hud/A = huds[DATA_HUD_SECURITY_ADVANCED]
var/datum/atom_hud/A = huds[ANTAG_HUD_TRAITOR]
var/adding_hud = (usr in A.hudusers) ? 0 : 1
for(var/datum/atom_hud/H in huds)
if(istype(H, /datum/atom_hud/antag) || istype(H, /datum/atom_hud/data/human/security/advanced))
if(istype(H, /datum/atom_hud/antag))
(adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr)
for(var/datum/gang/G in ticker.mode.gangs)
var/datum/atom_hud/antag/H = G.ganghud
(adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr)
@@ -7,6 +7,7 @@
color = "#404040"
buckle_lying = 1
var/icon_temperature = T20C //stop small changes in temperature causing icon refresh
burn_state = LAVA_PROOF
/obj/machinery/atmospherics/pipe/heat_exchanging/New()
..()
@@ -30,7 +31,9 @@
var/turf/T = loc
if(istype(T))
if(T.blocks_air)
if(istype(T, /turf/open/floor/plating/lava))
environment_temperature = 5000
else if(T.blocks_air)
environment_temperature = T.temperature
else
var/datum/gas_mixture/environment = T.return_air()
+31
View File
@@ -216,6 +216,25 @@
qdel(src)
/obj/effect/mob_spawn/mouse
name = "sleeper"
mob_type = /mob/living/simple_animal/mouse
death = FALSE
roundstart = FALSE
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
/obj/effect/mob_spawn/cow
name = "sleeper"
mob_type = /mob/living/simple_animal/cow
death = FALSE
roundstart = FALSE
mob_gender = FEMALE
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
// I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example.
/obj/effect/mob_spawn/human/syndicatesoldier
@@ -274,6 +293,18 @@
id_job = "Medical Doctor"
id_access = "Medical Doctor"
/obj/effect/mob_spawn/human/doctor/alive
death = FALSE
roundstart = FALSE
random = TRUE
radio = null
back = null
name = "sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
flavour_text = "You are a space doctor!"
/obj/effect/mob_spawn/human/engineer
name = "Engineer"
radio = /obj/item/device/radio/headset/headset_eng
+1 -1
View File
@@ -114,7 +114,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
break
if(valid)
world.log << "Ruins marker placed at ([T.x], [T.y], [T.z])"
world.log << "Ruin \"[template.mappath]\" placed at ([T.x], [T.y], [T.z])"
var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T)
R.Load(potentialRuins,template)
potentialRuins -= template
+1
View File
@@ -193,6 +193,7 @@ var/next_external_rsc = 0
if(!void)
void = new()
void = void.MakeGreed()
screen += void
+2 -1
View File
@@ -36,6 +36,7 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
burn_state = FIRE_PROOF
var/can_be_cut = 1
/obj/item/clothing/gloves/color/black/hos
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
@@ -45,7 +46,7 @@
/obj/item/clothing/gloves/color/black/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/wirecutters))
if(icon_state == initial(icon_state)) //only if not dyed
if(can_be_cut && icon_state == initial(icon_state))//only if not dyed
user << "<span class='notice'>You snip the fingertips off of [src].</span>"
playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1)
new /obj/item/clothing/gloves/fingerless(user.loc)
+11
View File
@@ -89,6 +89,15 @@
strip_delay = 80
put_on_delay = 60
/obj/item/clothing/suit/armor/bone
name = "bone armor"
desc = "A tribal armor plate, crafted from animal bone."
icon_state = "bonearmor"
item_state = "bonearmor"
blood_overlay_type = "armor"
armor = list(melee = 35, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
body_parts_covered = CHEST
/obj/item/clothing/suit/armor/bulletproof
name = "bulletproof armor"
desc = "A bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent."
@@ -319,3 +328,5 @@
desc = "God wills it!"
icon_state = "knight_templar"
item_state = "knight_templar"
+15 -1
View File
@@ -305,4 +305,18 @@
icon = 'icons/obj/clothing/ties.dmi'
icon_state = "bling"
item_state = "" //no inhands
item_color = "bling"
item_color = "bling"
////////////////
//OONGA BOONGA//
////////////////
/obj/item/clothing/tie/talisman
name = "bone talisman"
desc = "A hunter's talisman, some say the old gods smile on those who wear it."
icon = 'icons/obj/clothing/ties.dmi'
icon_state = "talisman"
item_state = ""
item_color = "talisman"
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS|HEAD
armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 50, bio = 65, rad = 5) //Faith is the best armor. //This won't actually work because of accessories kill me with a fucking knife jesus christ I hate code
+20 -5
View File
@@ -329,25 +329,40 @@
category = CAT_MISC
/datum/table_recipe/chemical_payload
name = "Chemical Bomb Core (C4)"
name = "chemical payload (C4)"
result = /obj/item/weapon/bombcore/chemical
reqs = list(
/obj/item/weapon/stock_parts/matter_bin/super = 1,
/obj/item/weapon/c4 = 1,
/obj/item/weapon/grenade/chem_grenade = 2
)
parts = list(/obj/item/weapon/grenade/chem_grenade = 2)
parts = list(/obj/item/weapon/stock_parts/matter_bin = 1, /obj/item/weapon/grenade/chem_grenade = 2)
time = 30
category = CAT_WEAPON
/datum/table_recipe/chemical_payload2
name = "Chemical Bomb Core (gibtonite)"
name = "chemical payload (gibtonite)"
result = /obj/item/weapon/bombcore/chemical
reqs = list(
/obj/item/weapon/stock_parts/matter_bin/super = 1,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/twohanded/required/gibtonite = 1,
/obj/item/weapon/grenade/chem_grenade = 2
)
parts = list(/obj/item/weapon/grenade/chem_grenade = 2)
parts = list(/obj/item/weapon/stock_parts/matter_bin = 1, /obj/item/weapon/grenade/chem_grenade = 2)
time = 50
category = CAT_WEAPON
/datum/table_recipe/bonearmor
name = "Bone Armor"
result = /obj/item/clothing/suit/armor/bone
time = 30
reqs = list(/obj/item/stack/sheet/bone = 6)
category = CAT_MISC
/datum/table_recipe/bonetalisman
name = "Bone Talisman"
result = /obj/item/clothing/tie/talisman
time = 20
reqs = list(/obj/item/stack/sheet/bone = 2,
/obj/item/stack/sheet/sinew = 1)
category = CAT_MISC
@@ -31,6 +31,10 @@
/obj/machinery/processor/process()
..()
// The irony
// To be clear, if it's grinding, then it can't suck them up
if(processing)
return
var/mob/living/simple_animal/slime/picked_slime
for(var/mob/living/simple_animal/slime/slime in range(1,src))
if(slime.loc == src)
+7 -7
View File
@@ -38,9 +38,9 @@
name = "\improper rabbit"
desc = "The hippiest hop around."
icon = 'icons/mob/Easter.dmi'
icon_state = "rabbit"
icon_living = "rabbit"
icon_dead = "rabbit_dead"
icon_state = "rabbit_white"
icon_living = "rabbit_white"
icon_dead = "rabbit_white_dead"
speak = list("Hop into Easter!","Come get your eggs!","Prizes for everyone!")
speak_emote = list("sniffles","twitches")
emote_hear = list("hops.")
@@ -56,13 +56,13 @@
/mob/living/simple_animal/chicken/rabbit/space
icon_prefix = "s_rabbit"
icon_state = "s_rabbit"
icon_living = "s_rabbit"
icon_dead = "s_rabbit_dead"
icon_state = "s_rabbit_white"
icon_living = "s_rabbit_white"
icon_dead = "s_rabbit_white_dead"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
unsuitable_atmos_damage = 0 //This damage is taken when atmos doesn't fit all the requirements above
unsuitable_atmos_damage = 0
//Easter Baskets
/obj/item/weapon/storage/bag/easterbasket
+51 -52
View File
@@ -190,58 +190,57 @@
/obj/structure/beebox/attack_hand(mob/user)
if(ishuman(user))
if(!user.bee_friendly())
//Time to get stung!
var/bees = FALSE
for(var/b in bees) //everyone who's ever lived here now instantly hates you, suck it assistant!
var/mob/living/simple_animal/hostile/poison/bees/B = b
if(B.isqueen)
continue
if(B.loc == src)
B.loc = get_turf(src)
B.target = user
bees = TRUE
if(bees)
visible_message("<span class='danger'>[user] disturbs the bees!</span>")
else
var/option = alert(user, "What Action do you wish to perform?","Apiary","Remove a Honey Frame","Remove the Queen Bee")
if(!Adjacent(user))
return
switch(option)
if("Remove a Honey Frame")
if(!honey_frames.len)
user << "<span class='warning'>There are no honey frames to remove!</span>"
return
if(!user.bee_friendly())
//Time to get stung!
var/bees = FALSE
for(var/b in bees) //everyone who's ever lived here now instantly hates you, suck it assistant!
var/mob/living/simple_animal/hostile/poison/bees/B = b
if(B.isqueen)
continue
if(B.loc == src)
B.loc = get_turf(src)
B.target = user
bees = TRUE
if(bees)
visible_message("<span class='danger'>[user] disturbs the bees!</span>")
else
var/option = alert(user, "What Action do you wish to perform?","Apiary","Remove a Honey Frame","Remove the Queen Bee")
if(!Adjacent(user))
return
switch(option)
if("Remove a Honey Frame")
if(!honey_frames.len)
user << "<span class='warning'>There are no honey frames to remove!</span>"
return
var/obj/item/honey_frame/HF = pick_n_take(honey_frames)
if(HF)
if(!user.put_in_active_hand(HF))
HF.loc = get_turf(src)
visible_message("<span class='notice'>[user] removes a frame from the apiary.</span>")
var/obj/item/honey_frame/HF = pick_n_take(honey_frames)
if(HF)
if(!user.put_in_active_hand(HF))
HF.loc = get_turf(src)
visible_message("<span class='notice'>[user] removes a frame from the apiary.</span>")
var/amtH = HF.honeycomb_capacity
var/fallen = 0
while(honeycombs.len && amtH) //let's pretend you always grab the frame with the most honeycomb on it
var/obj/item/weapon/reagent_containers/honeycomb/HC = pick_n_take(honeycombs)
if(HC)
HC.loc = get_turf(user)
amtH--
fallen++
if(fallen)
var/multiple = fallen > 1
visible_message("<span class='notice'>[user] scrapes [multiple ? "[fallen]" : "a"] honeycomb[multiple ? "s" : ""] off of the frame.</span>")
var/amtH = HF.honeycomb_capacity
var/fallen = 0
while(honeycombs.len && amtH) //let's pretend you always grab the frame with the most honeycomb on it
var/obj/item/weapon/reagent_containers/honeycomb/HC = pick_n_take(honeycombs)
if(HC)
HC.loc = get_turf(user)
amtH--
fallen++
if(fallen)
var/multiple = fallen > 1
visible_message("<span class='notice'>[user] scrapes [multiple ? "[fallen]" : "a"] honeycomb[multiple ? "s" : ""] off of the frame.</span>")
if("Remove the Queen Bee")
if(!queen_bee || queen_bee.loc != src)
user << "<span class='warning'>There is no queen bee to remove!</span>"
return
var/obj/item/queen_bee/QB = new()
queen_bee.loc = QB
bees -= queen_bee
QB.queen = queen_bee
QB.name = queen_bee.name
if(!user.put_in_active_hand(QB))
QB.loc = get_turf(src)
visible_message("<span class='notice'>[user] removes the queen from the apiary.</span>")
queen_bee = null
if("Remove the Queen Bee")
if(!queen_bee || queen_bee.loc != src)
user << "<span class='warning'>There is no queen bee to remove!</span>"
return
var/obj/item/queen_bee/QB = new()
queen_bee.loc = QB
bees -= queen_bee
QB.queen = queen_bee
QB.name = queen_bee.name
if(!user.put_in_active_hand(QB))
QB.loc = get_turf(src)
visible_message("<span class='notice'>[user] removes the queen from the apiary.</span>")
queen_bee = null
+54 -22
View File
@@ -474,7 +474,7 @@
/obj/item/device/wormhole_jaunter
name = "wormhole jaunter"
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least."
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms."
icon = 'icons/obj/mining.dmi'
icon_state = "Jaunter"
item_state = "electronic"
@@ -483,28 +483,58 @@
throw_speed = 3
throw_range = 5
origin_tech = "bluespace=2"
slot_flags = SLOT_BELT
/obj/item/device/wormhole_jaunter/attack_self(mob/user)
user.visible_message("<span class='notice'>[user.name] activates the [src.name]!</span>")
activate(user)
/obj/item/device/wormhole_jaunter/proc/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
if(!device_turf||device_turf.z==2||device_turf.z>=7)
user << "<span class='notice'>You're having difficulties getting the [src.name] to work.</span>"
return FALSE
return TRUE
/obj/item/device/wormhole_jaunter/proc/activate(mob/user)
if(!turf_check(user))
return
var/list/L = list()
for(var/obj/item/device/radio/beacon/B in world)
var/turf/T = get_turf(B)
if(T.z == ZLEVEL_STATION)
L += B
if(!L.len)
user << "<span class='notice'>The [src.name] found no beacons in the world to anchor a wormhole to.</span>"
return
var/chosen_beacon = pick(L)
var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100)
J.target = chosen_beacon
try_move_adjacent(J)
playsound(src,'sound/effects/sparks4.ogg',50,1)
qdel(src)
/obj/item/device/wormhole_jaunter/emp_act(power)
var/triggered = FALSE
if(usr.get_item_by_slot(slot_belt) == src)
if(power == 1)
triggered = TRUE
else if(power == 2 && prob(50))
triggered = TRUE
if(triggered)
usr.visible_message("<span class='warning'>The [src] overloads and activates!</span>")
activate(usr)
/obj/item/device/wormhole_jaunter/proc/chasm_react(mob/user)
if(user.get_item_by_slot(slot_belt) == src)
user << "Your [src] activates, saving you from the chasm!</span>"
activate(user)
else
user.visible_message("<span class='notice'>[user.name] activates the [src.name]!</span>")
var/list/L = list()
for(var/obj/item/device/radio/beacon/B in world)
var/turf/T = get_turf(B)
if(T.z == ZLEVEL_STATION)
L += B
if(!L.len)
user << "<span class='notice'>The [src.name] failed to create a wormhole.</span>"
return
var/chosen_beacon = pick(L)
var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100)
J.target = chosen_beacon
try_move_adjacent(J)
playsound(src,'sound/effects/sparks4.ogg',50,1)
qdel(src)
user << "The [src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>"
/obj/effect/portal/wormhole/jaunt_tunnel
name = "jaunt tunnel"
@@ -517,6 +547,8 @@
return
if(istype(M, /atom/movable))
if(do_teleport(M, target, 6))
// KERPLUNK
playsound(M,'sound/weapons/resonator_blast.ogg',50,1)
if(iscarbon(M))
var/mob/living/carbon/L = M
L.Weaken(3)
@@ -1018,20 +1050,20 @@
/*********************Hivelord stabilizer****************/
/obj/item/weapon/hivelordstabilizer
name = "hivelord stabilizer"
name = "stabilizing serum"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle19"
desc = "Inject a hivelord core with this stabilizer to preserve its healing powers indefinitely."
desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely."
w_class = 1
origin_tech = "biotech=1"
/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/internal/M, mob/user)
var/obj/item/organ/internal/hivelord_core/C = M
if(!istype(C, /obj/item/organ/internal/hivelord_core))
user << "<span class='warning'>The stabilizer only works on hivelord cores.</span>"
user << "<span class='warning'>The stabilizer only works on certain types of monster organs, generally regenerative in nature.</span>"
return ..()
C.preserved = 1
user << "<span class='notice'>You inject the hivelord core with the stabilizer. It will no longer go inert.</span>"
user << "<span class='notice'>You inject the [M] with the stabilizer. It will no longer go inert.</span>"
qdel(src)
@@ -1080,7 +1112,7 @@
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
new /datum/data/mining_equipment("Monkey Cube", /obj/item/weapon/reagent_containers/food/snacks/monkeycube, 300),
new /datum/data/mining_equipment("Toolbelt", /obj/item/weapon/storage/belt/utility, 350),
new /datum/data/mining_equipment("Hivelord Stabilizer", /obj/item/weapon/hivelordstabilizer, 400),
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/weapon/hivelordstabilizer, 400),
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/weapon/survivalcapsule, 400),
new /datum/data/mining_equipment("GAR scanners", /obj/item/clothing/glasses/meson/gar, 500),
new /datum/data/mining_equipment("Sulphuric Acid", /obj/item/weapon/reagent_containers/glass/beaker/sulphuric, 500),
@@ -1109,4 +1141,4 @@
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
RefreshParts()
@@ -36,16 +36,13 @@
if(10)
new /obj/item/organ/internal/heart/cursed(src)
if(11)
new /obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src)
new /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus(src)
new /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src)
new /obj/item/weapon/lighter(src)
new /obj/vehicle/lavaboat/dragon(src)
if(12)
new /obj/item/upgradescroll(src)
if(13)
new /obj/item/weapon/sord(src)
if(14)
new /obj/item/weapon/nullrod/claymore/darkblade
new /obj/item/weapon/nullrod/claymore/darkblade(src)
if(15)
new /obj/item/weapon/nullrod/armblade(src)
if(16)
@@ -334,3 +331,59 @@
M.put_in_l_hand(src)
add_fingerprint(usr)
//Boat
/obj/vehicle/lavaboat
name = "lava boat"
desc = "A boat used for traversing lava."
icon_state = "goliath_boat"
icon = 'icons/obj/lavaland/dragonboat.dmi'
keytype = /obj/item/weapon/oar
burn_state = LAVA_PROOF
/obj/vehicle/lavaboat/relaymove(mob/user, direction)
var/turf/next = get_step(src, direction)
var/turf/current = get_turf(src)
if(istype(next, /turf/open/floor/plating/lava) || istype(current, /turf/open/floor/plating/lava)) //We can move from land to lava, or lava to land, but not from land to land
..()
else
user << "Boats don't go on land!"
return 0
/obj/item/weapon/oar
name = "oar"
icon = 'icons/obj/vehicles.dmi'
icon_state = "oar"
item_state = "rods"
desc = "Not to be confused with the kind Research hassles you for."
force = 12
w_class = 3
burn_state = LAVA_PROOF
/datum/table_recipe/oar
name = "goliath bone oar"
result = /obj/item/weapon/oar
reqs = list(/obj/item/stack/sheet/bone = 2)
time = 15
category = CAT_MISC
/datum/table_recipe/boat
name = "goliath hide boat"
result = /obj/vehicle/lavaboat
reqs = list(/obj/item/asteroid/goliath_hide = 3)
time = 50
category = CAT_MISC
//Dragon Boat
/obj/vehicle/lavaboat/dragon
name = "mysterious boat"
desc = "This boat moves where you will it, without the need for an oar."
keytype = null
icon_state = "dragon_boat"
generic_pixel_y = 2
generic_pixel_x = 1
vehicle_move_delay = 1
+24 -2
View File
@@ -198,7 +198,7 @@
clear = FALSE
break
for(var/obj/obj in turf)
if(obj.density)
if(obj.density && obj.anchored)
clear = FALSE
break
if(!clear)
@@ -293,13 +293,14 @@
var/turf/threshhold = locate(start_turf.x, start_turf.y-2, start_turf.z)
threshhold.ChangeTurf(/turf/open/floor/pod)
var/turf/open/floor/pod/doorturf = threshhold
doorturf.blocks_air = 1 //So the air doesn't leak out
doorturf.air.parse_gas_string("o2=21;n2=82;TEMP=293.15")
var/area/ZZ = get_area(threshhold)
if(!is_type_in_list(ZZ, blacklist))
L.contents += threshhold
threshhold.overlays.Cut()
new /obj/structure/fans/tiny(threshhold) //a tiny fan, to keep the air in.
var/list/turfs = room["floors"]
for(var/turf/open/floor/A in turfs)
A.air.parse_gas_string("o2=21;n2=82;TEMP=293.15")
@@ -327,8 +328,29 @@
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "fans"
name = "environmental regulation system"
desc = "A large machine releasing a constant gust of air."
anchored = 1
density = 1
var/arbitraryatmosblockingvar = TRUE
/obj/structure/fans/tiny
name = "tiny fan"
desc = "A tiny fan, releasing a thin gust of air."
layer = TURF_LAYER + 0.8
density = 0
icon_state = "fan_tiny"
/obj/structure/fans/New(loc)
..()
air_update_turf(1)
/obj/structure/fans/Destroy()
arbitraryatmosblockingvar = FALSE
air_update_turf(1)
return ..()
/obj/structure/fans/CanAtmosPass(turf/T)
return !arbitraryatmosblockingvar
//Sleeper
/obj/machinery/sleeper/survival_pod
+20
View File
@@ -563,6 +563,23 @@
/turf/open/chasm/Entered(atom/movable/AM)
if(istype(AM, /obj/singularity) || istype(AM, /obj/item/projectile))
return
if(istype(AM, /obj/effect/portal))
// Portals aren't affected by gravity. Probably.
return
// Flies right over the chasm
if(istype(AM, /mob/living/simple_animal))
// apparently only simple_animals can fly??
var/mob/living/simple_animal/SA = AM
if(SA.flying)
return
if(istype(AM, /mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if(istype(H.belt, /obj/item/device/wormhole_jaunter))
var/obj/item/device/wormhole_jaunter/J = H.belt
// To freak out any bystanders
visible_message("[H] falls into [src]!")
J.chasm_react(H)
return
drop(AM)
@@ -621,6 +638,9 @@
turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
initial_gas_mix = "o2=14;n2=23;TEMP=300"
mineralSpawnChanceList = list(
/turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/gold/volcanic = 45,
/turf/closed/mineral/silver/volcanic = 50, /turf/closed/mineral/plasma/volcanic = 50, /turf/closed/mineral/bscrystal/volcanic = 20)
/turf/open/floor/plating/lava/smooth/lava_land_surface
initial_gas_mix = "o2=14;n2=23;TEMP=300"
+20 -23
View File
@@ -31,7 +31,8 @@ var/list/image/ghost_images_simple = list() //this is a list of all ghost images
var/ghostvision = 1 //is the ghost able to see things humans can't?
var/seedarkness = 1
var/ghost_hud_enabled = 1 //did this ghost disable the on-screen HUD?
var/data_hud_seen = 0 //this should one of the defines in __DEFINES/hud.dm
var/data_huds_on = 0 //Are data HUDs currently enabled?
var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC) //list of data HUDs shown to ghosts.
var/ghost_orbit = GHOST_ORBIT_CIRCLE
//These variables store hair data if the ghost originates from a species with head and/or facial hair.
@@ -565,33 +566,29 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/mind_initialize()
return
/mob/dead/observer/proc/show_me_the_hud(hud_index)
var/datum/atom_hud/H = huds[hud_index]
H.add_hud_to(src)
data_hud_seen = hud_index
/mob/dead/observer/proc/show_data_huds()
for(var/hudtype in datahuds)
var/datum/atom_hud/H = huds[hudtype]
H.add_hud_to(src)
/mob/dead/observer/verb/toggle_ghost_med_sec_diag_hud()
/mob/dead/observer/proc/remove_data_huds()
for(var/hudtype in datahuds)
var/datum/atom_hud/H = huds[hudtype]
H.remove_hud_from(src)
/mob/dead/observer/verb/toggle_data_huds()
set name = "Toggle Sec/Med/Diag HUD"
set desc = "Toggles whether you see medical/security/diagnostic HUDs"
set category = "Ghost"
if(data_hud_seen) //remove old huds
var/datum/atom_hud/H = huds[data_hud_seen]
H.remove_hud_from(src)
switch(data_hud_seen) //give new huds
if(0)
show_me_the_hud(DATA_HUD_SECURITY_ADVANCED)
src << "<span class='notice'>Security HUD set.</span>"
if(DATA_HUD_SECURITY_ADVANCED)
show_me_the_hud(DATA_HUD_MEDICAL_ADVANCED)
src << "<span class='notice'>Medical HUD set.</span>"
if(DATA_HUD_MEDICAL_ADVANCED)
show_me_the_hud(DATA_HUD_DIAGNOSTIC)
src << "<span class='notice'>Diagnostic HUD set.</span>"
if(DATA_HUD_DIAGNOSTIC)
data_hud_seen = 0
src << "<span class='notice'>HUDs disabled.</span>"
if(data_huds_on) //remove old huds
remove_data_huds()
src << "<span class='notice'>Data HUDs disabled.</span>"
data_huds_on = 0
else
show_data_huds()
src << "<span class='notice'>Data HUDs enabled.</span>"
data_huds_on = 1
/mob/dead/observer/canUseTopic()
if(check_rights(R_ADMIN, 0))
@@ -22,6 +22,9 @@
randomize_human(src)
dna.initialize_dna()
if(dna.species)
set_species(dna.species.type)
//initialise organs
organs = newlist(/obj/item/organ/limb/chest, /obj/item/organ/limb/head, /obj/item/organ/limb/l_arm,
/obj/item/organ/limb/r_arm, /obj/item/organ/limb/r_leg, /obj/item/organ/limb/l_leg)
@@ -821,6 +824,10 @@
staticOverlay.override = 1
staticOverlays["letter"] = staticOverlay
staticOverlay = getRandomAnimalImage(src)
staticOverlay.override = 1
staticOverlays["animal"] = staticOverlay
/mob/living/carbon/human/cuff_resist(obj/item/I)
if(dna && dna.check_mutation(HULK))
say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
+5 -1
View File
@@ -41,7 +41,7 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/generateStaticOverlay()
staticOverlays.Add(list("static", "blank", "letter"))
staticOverlays.Add(list("static", "blank", "letter", "animal"))
var/image/staticOverlay = image(getStaticIcon(new/icon(icon,icon_state)), loc = src)
staticOverlay.override = 1
staticOverlays["static"] = staticOverlay
@@ -54,6 +54,10 @@ Sorry Giacom. Please don't be mad :(
staticOverlay.override = 1
staticOverlays["letter"] = staticOverlay
staticOverlay = getRandomAnimalImage(src)
staticOverlay.override = 1
staticOverlays["animal"] = staticOverlay
//Generic Bump(). Override MobBump() and ObjBump() instead of this.
/mob/living/Bump(atom/A, yes)
@@ -286,6 +286,7 @@
set category = "Robot Commands"
set name = "Show Alerts"
if(usr.stat == DEAD)
src << "<span class='userdanger'>Alert: You are dead.</span>"
return //won't work if dead
robot_alerts()
@@ -1291,4 +1292,4 @@
if(admin_revive)
locked = 1
notify_ai(1)
. = 1
. = 1
@@ -451,14 +451,7 @@ Auto Patrol[]"},
if(severity==2 && prob(70))
..(severity-1)
else
var/obj/effect/overlay/pulse2 = new/obj/effect/overlay ( loc )
pulse2.icon = 'icons/effects/effects.dmi'
pulse2.icon_state = "empdisable"
pulse2.name = "emp sparks"
pulse2.anchored = 1
pulse2.dir = pick(cardinal)
spawn(10)
qdel(pulse2)
PoolOrNew(/obj/effect/overlay/temp/emp, loc)
var/list/mob/living/carbon/targets = new
for(var/mob/living/carbon/C in view(12,src))
if(C.stat==2)
@@ -13,6 +13,7 @@
harm_intent_damage = 1
friendly = "nudges"
density = 0
flying = 1
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
mob_size = MOB_SIZE_TINY
@@ -20,4 +21,4 @@
/mob/living/simple_animal/butterfly/New()
..()
color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
@@ -235,7 +235,7 @@
/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard,
/obj/item/clothing/head/cardborg, /obj/item/weapon/bedsheet, /obj/item/clothing/head/helmet/space/santahat,
/obj/item/clothing/head/soft, /obj/item/clothing/head/hardhat/reindeer, /obj/item/clothing/head/sombrero,
/obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat)
/obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/head/wizard/red)
valid = 1
if(valid)
@@ -332,6 +332,10 @@
name = "Grandwizard [real_name]"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
if(/obj/item/clothing/head/wizard/red)
name = "Pyromancer [real_name]"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!")
if(/obj/item/clothing/head/cardborg)
name = "Borgi"
speak = list("Ping!","Beep!","Woof!")
@@ -43,7 +43,7 @@
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
staticOverlays = list()
var/staticChoice = "static"
var/list/staticChoices = list("static", "blank", "letter")
var/list/staticChoices = list("static", "blank", "letter", "animal")
var/picked = FALSE //Have we picked our visual appearence (+ colour if applicable)
var/list/drone_overlays[DRONE_TOTAL_LAYERS]
var/laws = \
@@ -55,7 +55,7 @@
var/alarms = list("Atmosphere" = list(), "Fire" = list(), "Power" = list())
var/obj/item/internal_storage //Drones can store one item, of any size/type in their body
var/obj/item/head
var/obj/item/default_storage = /obj/item/weapon/storage/backpack/dufflebag/engineering/drone //If this exists, it will spawn in internal storage
var/obj/item/default_storage = /obj/item/weapon/storage/backpack/dufflebag/drone //If this exists, it will spawn in internal storage
var/obj/item/default_hatmask //If this exists, it will spawn in the hat/mask slot if it can fit
var/seeStatic = 1 //Whether we see static instead of mobs
var/visualAppearence = MAINTDRONE //What we appear as
@@ -83,6 +83,9 @@
alert_drones(DRONE_NET_CONNECT)
var/datum/action/generic/drone/select_filter/SF = new(src)
SF.Grant(src)
/mob/living/simple_animal/drone/Destroy()
qdel(access_card) //Otherwise it ends up on the floor!
@@ -242,4 +245,6 @@
/mob/living/simple_animal/drone/fully_heal(admin_revive = 0)
adjustBruteLoss(-getBruteLoss()) //Heal all brute damage
/mob/living/simple_animal/drone/bee_friendly()
// Why would bees pay attention to drones?
return 1
@@ -51,6 +51,7 @@
default_hatmask = /obj/item/clothing/head/chameleon/drone
/mob/living/simple_animal/drone/snowflake/New()
..()
desc += " This drone appears to have a complex holoprojector built on its 'head'."
/obj/item/drone_shell/syndrone
@@ -179,3 +179,9 @@
icon_state = icon_dead
else
icon_state = icon_living
/datum/action/generic/drone/select_filter
name = "Select Vision Filter"
button_icon_state = "drone_vision"
procname = /mob/living/simple_animal/drone/verb/toggle_statics
@@ -189,9 +189,9 @@ var/global/chicken_count = 0
/mob/living/simple_animal/chicken
name = "\improper chicken"
desc = "Hopefully the eggs are good this season."
icon_state = "chicken"
icon_living = "chicken"
icon_dead = "chicken_dead"
icon_state = "chicken_brown"
icon_living = "chicken_brown"
icon_dead = "chicken_brown_dead"
speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.")
speak_emote = list("clucks","croons")
emote_hear = list("clucks.")
@@ -17,7 +17,7 @@ var/global/list/parasites = list() //all currently existing/living guardians
speed = 0
a_intent = "harm"
stop_automated_movement = 1
floating = 1
flying = 1 // Immunity to chasms and landmines, etc.
attack_sound = 'sound/weapons/punch1.ogg'
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -104,6 +104,7 @@ var/global/list/parasites = list() //all currently existing/living guardians
/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies
..()
update_health_hud() //we need to update our health display to match our summoner and we can't practically give the summoner a hook to do it
if(summoner)
if(summoner.stat == DEAD)
src << "<span class='danger'>Your summoner has died!</span>"
@@ -144,7 +144,7 @@
else
if(beegent && isliving(target))
var/mob/living/L = target
beegent.reaction_mob(L, TOUCH)
beegent.reaction_mob(L, INJECT)
L.reagents.add_reagent(beegent.id, rand(1,5))
target.attack_animal(src)
@@ -479,6 +479,7 @@
user << "<span class='warning'>You can't improve [D] any further!</span>"
return
/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage()
if(bodytemperature < minbodytemp)
adjustBruteLoss(2)
@@ -634,7 +635,7 @@
stat_attack = 1
robust_searching = 1
loot = list()
butcher_results = list(/obj/item/weapon/ore/diamond = 2)
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1)
//Goliath
@@ -648,11 +649,13 @@
icon_dead = "goliath_dead"
throw_message = "does nothing to the tough hide of the"
pre_attack_icon = "goliath2"
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1)
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = 1
robust_searching = 1
//Legion
/mob/living/simple_animal/hostile/asteroid/hivelord/legion
@@ -9,8 +9,8 @@
speak_emote = list("groans")
emote_see = list("groans")
a_intent = "harm"
maxHealth = 180
health = 180
maxHealth = 120
health = 120
speed = 2
harm_intent_damage = 8
melee_damage_lower = 20
@@ -59,7 +59,7 @@
playsound(src.loc, 'sound/hallucinations/growl3.ogg', 50, 1)
var/obj/machinery/door/airlock/A = target
removingairlock = 1
if(do_after(src, 250, 0, A, 1))
if(do_after(src, 200, 0, A, 1))
playsound(src.loc, 'sound/hallucinations/far_noise.ogg', 50, 1)
var/obj/structure/door_assembly/door = new A.doortype(get_turf(A))
door.density = 0
@@ -83,8 +83,12 @@
qdel(src)
return
src << "<span class='userdanger'>You're down, but not quite out. You'll be back on your feet within a minute or two.</span>"
spawn(rand(600,900))
spawn(rand(300,400))
if(src)
for(var/mob/dead/observer/ghost in player_list)
if(src.real_name == ghost.real_name)
ghost.reenter_corpse()
break
visible_message("<span class='danger'>[src] staggers to their feet!</span>")
revive(full_heal = 1)
+2 -6
View File
@@ -319,18 +319,14 @@ var/next_mob_id = 0
if(!src || !isturf(src.loc) || !(A in view(src.loc)))
return 0
if(istype(A, /obj/effect/decal/point))
if(istype(A, /obj/effect/overlay/temp/point))
return 0
var/tile = get_turf(A)
if (!tile)
return 0
var/obj/P = new /obj/effect/decal/point(tile)
P.invisibility = invisibility
spawn (20)
if(P)
qdel(P)
PoolOrNew(/obj/effect/overlay/temp/point, list(tile,invisibility))
return 1
@@ -64,6 +64,7 @@
/obj/machinery/power/supermatter_shard/New()
. = ..()
poi_list |= src
radio = new(src)
radio.listening = 0
investigate_log("has been created.", "supermatter")
@@ -72,6 +73,7 @@
/obj/machinery/power/supermatter_shard/Destroy()
investigate_log("has been destroyed.", "supermatter")
qdel(radio)
poi_list -= src
. = ..()
/obj/machinery/power/supermatter_shard/proc/explode()
+1
View File
@@ -14,6 +14,7 @@
var/pellets = 0 //Pellets for spreadshot
var/variance = 0 //Variance for inaccuracy fundamental to the casing
var/delay = 0 //Delay for energy weapons
var/click_cooldown_override = 0 //Override this to make your gun have a faster fire rate, in tenths of a second. 4 is the default gun cooldown.
/obj/item/ammo_casing/New()
..()
+5 -2
View File
@@ -4,13 +4,16 @@
var/curloc = user.loc
var/targloc = get_turf(target)
ready_proj(target, user, quiet, zone_override)
if(distro)
if(distro && targloc)
targloc = spread(targloc, curloc, distro)
if(!throw_proj(target, targloc, user, params))
return 0
if(i > 1)
newshot()
user.changeNext_move(CLICK_CD_RANGE)
if(click_cooldown_override)
user.changeNext_move(click_cooldown_override)
else
user.changeNext_move(CLICK_CD_RANGE)
user.newtonian_move(get_dir(target, user))
update_icon()
return 1
+5
View File
@@ -36,6 +36,7 @@
var/sawn_state = SAWN_INTACT
var/burst_size = 1 //how large a burst is
var/fire_delay = 0 //rate of fire for burst firing and semi auto
var/firing_burst = 0 //Prevent the weapon from firing again while already firing
var/semicd = 0 //cooldown handler
var/weapon_weight = WEAPON_LIGHT
@@ -135,6 +136,8 @@
/obj/item/weapon/gun/afterattack(atom/target, mob/living/user, flag, params)
if(firing_burst)
return
if(flag) //It's adjacent, is the user, or is on the user's person
if(target in user.contents) //can't shoot stuff inside us.
return
@@ -210,6 +213,7 @@ obj/item/weapon/gun/proc/newshot()
recoil = initial(recoil)
if(burst_size > 1)
firing_burst = 1
for(var/i = 1 to burst_size)
if(!user)
break
@@ -231,6 +235,7 @@ obj/item/weapon/gun/proc/newshot()
process_chamber()
update_icon()
sleep(fire_delay)
firing_burst = 0
else
if(chambered)
if(!chambered.fire(target, user, params, , suppressed, zone_override))
+30 -4
View File
@@ -6,16 +6,42 @@
ammo_type = list(/obj/item/ammo_casing/energy/electrode)
ammo_x_offset = 3
/obj/item/weapon/gun/energy/stunrevolver
name = "stun revolver"
desc = "A high-tech revolver that fires internal, reusable taser cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
/obj/item/weapon/gun/energy/shock_revolver
name = "tesla revolver"
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
icon_state = "stunrevolver"
item_state = "gun"
ammo_type = list(/obj/item/ammo_casing/energy/electrode/gun)
ammo_type = list(/obj/item/ammo_casing/energy/shock_revolver)
can_flashlight = 0
pin = null
ammo_x_offset = 1
/obj/item/ammo_casing/energy/shock_revolver
fire_sound = 'sound/weapons/gunshot.ogg'
e_cost = 200
select_name = "stun"
projectile_type = /obj/item/projectile/shock_revolver
/obj/item/projectile/shock_revolver
name = "shock bolt"
icon_state = "purple_laser"
var/chain
/obj/item/ammo_casing/energy/shock_revolver/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
..()
var/obj/item/projectile/hook/P = BB
spawn(1)
P.chain = P.Beam(user,icon_state="purple_lightning",icon = 'icons/effects/effects.dmi',time=1000, maxdistance = 30)
/obj/item/projectile/shock_revolver/on_hit(atom/target)
. = ..()
if(isliving(target))
tesla_zap(src, 3, 10000)
qdel(chain)
/obj/item/weapon/gun/energy/gun/advtaser
name = "hybrid taser"
desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams."
@@ -46,4 +46,149 @@
/obj/item/weapon/gun/projectile/automatic/laser/update_icon()
..()
icon_state = "oldrifle[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""]"
return
return
//Laser Gatling Gun
//The ammo/gun is stored in a back slot item
/obj/item/weapon/minigunpack
name = "backpack power source"
desc = "The massive external power source for the laser gatling gun"
icon = 'icons/obj/guns/minigun.dmi'
icon_state = "holstered"
item_state = "backpack"
slot_flags = SLOT_BACK
w_class = 5
var/obj/item/weapon/gun/projectile/minigun/gun = null
var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded.
/obj/item/weapon/minigunpack/New()
gun = new(src)
..()
/obj/item/weapon/minigunpack/attack_hand(var/mob/living/carbon/user)
if(src.loc == user)
if(!armed)
if(user.get_item_by_slot(slot_back) == src)
armed = 1
if(!user.put_in_hands(gun))
armed = 0
user << "<span class='warning'>You need a free hand to hold the gun!</span>"
return
update_icon()
gun.forceMove(user)
user.update_inv_back()
else
user << "<span class='warning'>You are already holding the gun!</span>"
else
..()
/obj/item/weapon/minigunpack/attackby(obj/item/weapon/W, mob/user, params)
if(W == gun) //Don't need armed check, because if you have the gun assume its armed.
user.unEquip(gun,1)
else
..()
/obj/item/weapon/minigunpack/dropped(mob/user)
if(armed)
attach_gun(user)
..()
/obj/item/weapon/minigunpack/MouseDrop(atom/over_object)
if(armed)
return
if(iscarbon(usr))
var/mob/M = usr
if(!over_object)
return
if(!M.restrained() && !M.stat)
if(istype(over_object, /obj/screen/inventory/hand))
var/obj/screen/inventory/hand/H = over_object
if(!M.unEquip(src))
return
switch(H.slot_id)
if(slot_r_hand)
M.put_in_r_hand(src)
if(slot_l_hand)
M.put_in_l_hand(src)
/obj/item/weapon/minigunpack/update_icon()
if(armed)
icon_state = "notholstered"
else
icon_state = "holstered"
/obj/item/weapon/minigunpack/proc/attach_gun(var/mob/user)
if(!gun)
gun = new(src)
gun.forceMove(src)
armed = 0
if(user)
user << "<span class='notice'>You attach the [gun.name] to the [name].</span>"
else
src.visible_message("<span class='warning'>The [gun.name] snaps back onto the [name]!</span>")
update_icon()
user.update_inv_back()
/obj/item/weapon/gun/projectile/minigun
name = "laser gatling gun"
desc = "An advanced laser cannon with an incredible rate of fire. Requires a bulky backpack power source to use."
icon = 'icons/obj/guns/minigun.dmi'
icon_state = "minigun_spin"
item_state = "minigun"
origin_tech = null
flags = NODROP | CONDUCT | HANDSLOW
slowdown = 1
slot_flags = null
w_class = 5
materials = list()
burst_size = 3
automatic = 1
fire_delay = 1
weapon_weight = WEAPON_HEAVY
fire_sound = 'sound/weapons/Laser.ogg'
mag_type = /obj/item/ammo_box/magazine/internal/minigun
var/obj/item/weapon/minigunpack/ammo_pack
/obj/item/weapon/gun/projectile/minigun/attack_self(mob/living/user)
return
/obj/item/weapon/gun/projectile/minigun/New()
if(!ammo_pack)
if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one.
ammo_pack = loc
else
qdel(src)//No pack, no gun
..()
/obj/item/weapon/gun/projectile/minigun/dropped(mob/living/user)
ammo_pack.attach_gun(user)
return
/obj/item/weapon/gun/projectile/minigun/process_chamber(eject_casing = 0, empty_chamber = 1)
..()
/obj/item/ammo_box/magazine/internal/minigun
name = "gatling gun fusion core"
ammo_type = /obj/item/ammo_casing/caseless/laser/gatling
caliber = "gatling"
max_ammo = 5000
/obj/item/ammo_casing/caseless/laser/gatling
projectile_type = /obj/item/projectile/beam/weak
variance = 0.8
click_cooldown_override = 1
/obj/item/projectile/beam/weak
damage = 7
armour_penetration = 50
@@ -178,6 +178,7 @@
if(blocked != 100) // not completely blocked
if(M.can_inject(null,0,hit_zone)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
..()
reagents.reaction(M, INJECT)
reagents.trans_to(M, reagents.total_volume)
return 1
else
@@ -86,8 +86,26 @@
M.hallucination = max(0, M.hallucination - 10)
if(prob(30))
M.adjustToxLoss(1, 0)
. = 1
..()
/datum/reagent/medicine/synaphydramine
name = "Diphen-Synaptizine"
id = "synaphydramine"
description = "Reduces drowsiness, hallucinations, and Histamine from body."
color = "#EC536D" // rgb: 236, 83, 109
/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M)
M.drowsyness = max(M.drowsyness-5, 0)
if(holder.has_reagent("mindbreaker"))
holder.remove_reagent("mindbreaker", 5)
if(holder.has_reagent("histamine"))
holder.remove_reagent("histamine", 5)
M.hallucination = max(0, M.hallucination - 10)
if(prob(30))
M.adjustToxLoss(1, 0)
. = 1
..()
. = 1
/datum/reagent/medicine/inacusiate
name = "Inacusiate"
@@ -239,6 +239,14 @@
build_path = /obj/item/weapon/kitchen/fork
category = list("initial","Dinnerware")
/datum/design/tray
name = "Tray"
id = "tray"
build_type = AUTOLATHE
materials = list(MAT_METAL = 3000)
build_path = /obj/item/weapon/storage/bag/tray
category = list("initial","Dinnerware")
/datum/design/bowl
name = "Bowl"
id = "bowl"
@@ -369,9 +369,9 @@
desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles."
id = "mech_plasma_cutter"
build_type = MECHFAB
req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3, "combat" = 1, "plasma" = 2)
req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3, "combat" = 1, "plasmatech" = 2)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_PLASMA = 200)
materials = list(MAT_METAL = 8000, MAT_GLASS = 1000, MAT_PLASMA = 2000)
construction_time = 100
category = list("Exosuit Equipment")
+16 -48
View File
@@ -23,13 +23,14 @@
category = list("Firing Pins")
/datum/design/stunrevolver
name = "Stun Revolver"
desc = "A high-tech revolver that fires internal, reusable taser cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
name = "Tesla Revolver"
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
id = "stunrevolver"
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2)
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
build_path = /obj/item/weapon/gun/energy/stunrevolver
materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 10000)
build_path = /obj/item/weapon/gun/energy/shock_revolver
category = list("Weapons")
/datum/design/nuclear_gun
@@ -163,16 +164,6 @@
build_path = /obj/item/weapon/grenade/chem_grenade/adv_release
category = list("Weapons")
/datum/design/smg
name = "NanoTrasen Saber SMG"
desc = "A prototype advancment over the WT-550 auto rifle made using lightweight materials on a traditional frame, designed to fire standard 9mm rounds."
id = "smg"
req_tech = list("combat" = 4, "materials" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 8000, MAT_SILVER = 2000, MAT_DIAMOND = 1000)
build_path = /obj/item/weapon/gun/projectile/automatic/proto
category = list("Weapons")
/datum/design/xray
name = "Xray Laser Gun"
desc = "Not quite as menacing as it sounds"
@@ -193,6 +184,16 @@
build_path = /obj/item/weapon/gun/energy/ionrifle/carbine
category = list("Weapons")
/datum/design/gatling
name = "Laser Gatling Gun"
desc = "A massive weapon with a backpack mounted power source."
id = "gatlinggun"
req_tech = list("combat" = 6, "materials" = 4, "magnets" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 30000, MAT_SILVER = 4000, MAT_DIAMOND = 6000, MAT_URANIUM = 10000)
build_path = /obj/item/weapon/minigunpack
category = list("Weapons")
/datum/design/wormhole_projector
name = "Bluespace Wormhole Projector"
desc = "A projector that emits high density quantum-coupled bluespace beams."
@@ -246,39 +247,6 @@
materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_URANIUM = 2000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wttx
//SABR Mags
/datum/design/mag_smg
name = "SABR SMG Magazine (9mm)"
desc = "A 30-round magazine for the prototype submachine gun."
id = "mag_smg"
req_tech = list("combat" = 4, "materials" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000)
build_path = /obj/item/ammo_box/magazine/smgm9mm
category = list("Ammo")
/datum/design/mag_smg/ap_mag
name = "SABR SMG Armour Piercing Magazine (9mmAP)"
desc = "A 30-round armour piercing magazine for the prototype submachine gun. Deals slightly less damage by bypasses most armour"
id = "mag_smg_ap"
materials = list(MAT_METAL = 3000, MAT_SILVER = 100)
build_path = /obj/item/ammo_box/magazine/smgm9mm/ap
/datum/design/mag_smg/incin_mag
name = "SABR SMG Incendiary Magazine (9mmIC)"
desc = "A 30-round incindiary round magazine for the prototype submachine gun. Deals significanlty less damage but sets the target on fire"
id = "mag_smg_ic"
materials = list(MAT_METAL = 3000, MAT_SILVER = 100, MAT_GLASS = 400)
build_path = /obj/item/ammo_box/magazine/smgm9mm/fire
/datum/design/mag_smg/incin_tox
name = "SABR SMG Urnaium Magazine (9mmTX)"
desc = "A 30-round urnaium tipped round magazine for the prototype submachine gun. Deals toxin damage, but less overall damage."
id = "mag_smg_tx"
materials = list(MAT_METAL = 3000, MAT_GLASS = 200, MAT_URANIUM = 1000)
build_path = /obj/item/ammo_box/magazine/smgm9mm/toxin
/datum/design/stunshell
name = "Stun Shell"
desc = "A stunning shell for a shotgun."
@@ -69,7 +69,7 @@
user.drop_item()
qdel(O)
return
..()
/datum/action/innate/camera_off/xenobio/Activate()
if(!target || !ishuman(target))
@@ -169,5 +169,5 @@
for(var/mob/living/carbon/monkey/M in remote_eye.loc)
if(M.stat)
M.visible_message("[M] vanishes as they are reclaimed for recycling!")
X.monkeys += 0.2
X.monkeys = round(X.monkeys + 0.2,0.1)
qdel(M)
+8 -2
View File
@@ -209,7 +209,7 @@
death = FALSE
anchored = 0
density = 0
flavour_text = {"<B>You are an Ash Walker. Your tribe worships <span class='danger'>the necropolis</span>. The wastes are sacred ground, it's monsters a blessed bounty. You have seen lights in the distance though, the arrival of outsiders seeking to destroy the land. Fresh sacrifices.</B>"}
flavour_text = {"<B>You are an Ash Walker. Your tribe worships <span class='danger'>the necropolis</span>. The wastes are sacred ground, its monsters a blessed bounty. You have seen lights in the distance though, the arrival of outsiders seeking to destroy the land. Fresh sacrifices.</B>"}
/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn)
new_spawn.real_name = random_unique_lizard_name(gender)
@@ -218,8 +218,14 @@
var/mob/living/carbon/human/H = new_spawn
H.dna.species.specflags |= NOBREATH
H.dna.species.specflags |= NOGUNS
H.underwear = "Nude"
H.update_body()
/obj/effect/mob_spawn/human/ash_walker/New()
..()
var/area/A = get_area(src)
if(A)
notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, attack_not_jump = 1)
//Wishgranter Exile
+1 -1
View File
@@ -1082,7 +1082,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
but you never know. Contents are sorted to always be worth 50 TC."
item = /obj/structure/closet/crate
cost = 20
player_minimum = 30
player_minimum = 25
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
/datum/uplink_item/badass/surplus/spawn_item(turf/loc, obj/item/device/uplink/U)
+5
View File
@@ -112,3 +112,8 @@ Lumipharon = Game Master
bgobandit = Game Master
coiax = Game Master
RandomMarine = Game Master
PKPenguin321 = Game Master
TechnoAlchemist = Game Master
+1
View File
@@ -28,4 +28,5 @@
#_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm
#_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm
#_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm
#_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm
#_maps/RandomRuins/LavaRuins/lavaland_gym.dmm
+106
View File
@@ -55,6 +55,112 @@
-->
<div class="commit sansserif">
<h2 class="date">23 April 2016</h2>
<h3 class="author">Joan updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Aliens can now open crates and lockers.</li>
<li class="bugfix">Aliens and monkeys can now climb climbable objects, such as crates and sandbags.</li>
<li class="rscadd">Aliens climb very, very fast.</li>
</ul>
<h3 class="author">Kor updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Running HE pipes over lava will now heat the gas inside.</li>
<li class="rscadd">Alt+clicking on your mecha (while inside it) will toggle strafing mode.</li>
</ul>
<h3 class="author">Mercenaryblue updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Allowed all corgis to wear red wizard hats.</li>
</ul>
<h3 class="author">TechnoAlchemisto updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Goliaths now drop bones, and Watchers drop sinews.</li>
<li class="rscadd">You can craft primitive gear from bone and sinew.</li>
</ul>
<h3 class="author">coiax updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Non-humans are now able to interact with bee boxes.</li>
</ul>
<h2 class="date">22 April 2016</h2>
<h3 class="author">Bawhoppen updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Security belts can now hold any type of grenade. This includes barrier grenades.</li>
<li class="rscadd">Janitorial belts are now able to store chem grenades.</li>
<li class="rscadd">Military belts have been given a size upgrade, so they can now hold larger items.</li>
<li class="rscadd">Bandoliers have been given a buff and now can hold a much larger amount of ammunition.</li>
</ul>
<h3 class="author">nullbear updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">xenobio console is deconstructable again.</li>
<li class="tweak">syndibomb recipe calls for any matter bin, scaling effectiveness with tier.</li>
</ul>
<h2 class="date">21 April 2016</h2>
<h3 class="author">Kor updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Mechas can now toggle strafing mode.</li>
</ul>
<h2 class="date">20 April 2016</h2>
<h3 class="author">Erwgd updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">The autolathe can now make trays.</li>
</ul>
<h3 class="author">Fox McCloud updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixes abductor vests having no cooldown between uses</li>
</ul>
<h3 class="author">Kor updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">You can now craft boats and oars out of goliath hides. These boats can move in lava.</li>
<li class="rscadd">Added a spooky, upgraded boat to necropolis chests.</li>
</ul>
<h3 class="author">coiax updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Slime grinders now cease suction of new slimes while grinding</li>
</ul>
<h3 class="author">coiax, Joan updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Drone dufflebags now have their own sprite.</li>
</ul>
<h3 class="author">kevinz000 updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Admin Detection Multitool: A multitool that shows when administrators are watching you! Now you can grief in safety!</li>
<li class="tweak">Syndicate R&D scientists have significantly increased the range of their "AI detection multitools", making them turn yellow when an AI's tracking is near, but not on you just yet!</li>
</ul>
<h2 class="date">18 April 2016</h2>
<h3 class="author">Joan updated:</h3>
<ul class="changes bgimages16">
<li class="rscdel">Crates are now dense even when open.</li>
<li class="rscadd">You can now climb onto crates in the same way as table and sandbags, though climbing onto crates is very fast and does not stun you.</li>
<li class="wip">You can walk on crates, provided both are closed/open or the crate you're on is closed.</li>
<li class="rscdel">You can't close or open a crate if there's a large mob on top of it.</li>
<li class="rscadd">Stuffing items into a closet or crate is now instant and does not close the closet or crate. Stuffing mobs into a closet or crate still takes time and closes the closet/crate in question.</li>
<li class="imageadd">Crowbars and wirecutters have new inhand sprites. Crowbars can now be distinguished from wrenches in-hand.</li>
</ul>
<h3 class="author">RandomMarine updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Cloth items removed from biogenerator. Instead, it can create stacking cloth that crafts those items.</li>
<li class="rscadd">In addition, cloth can be used to create grey jumpsuits, backpacks, dufflebags, bio bags, black shoes, bedsheets, and bandages.</li>
<li class="tweak">Bedsheets now tear into cloth instead of directly into bandages.</li>
</ul>
<h3 class="author">Shadowlight213 updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">AI will be notified when one of their cyborgs is detonated.</li>
</ul>
<h3 class="author">coiax updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixed slime grinders not sucking up more than one slime</li>
<li class="rscadd">Drones now start with a spacious dufflebag full of tools, so they will stop stealing the captain's</li>
<li class="bugfix">Fixed issues with drones wearing chameleon headgear.</li>
<li class="rscadd">Added admin-only "snowflake drone" (also known as drone camogear) headgear.</li>
</ul>
<h3 class="author">nullbear updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixes air canisters being silent when bashed.</li>
</ul>
<h2 class="date">16 April 2016</h2>
<h3 class="author">Bawhoppen updated:</h3>
<ul class="changes bgimages16">
+79
View File
@@ -4521,3 +4521,82 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
nullbear:
- rscadd: Added attack verbs for heart and tongue organs
- tweak: Maximum output of air pumps has been raised.
2016-04-18:
Joan:
- rscdel: Crates are now dense even when open.
- rscadd: You can now climb onto crates in the same way as table and sandbags, though
climbing onto crates is very fast and does not stun you.
- wip: You can walk on crates, provided both are closed/open or the crate you're
on is closed.
- rscdel: You can't close or open a crate if there's a large mob on top of it.
- rscadd: Stuffing items into a closet or crate is now instant and does not close
the closet or crate. Stuffing mobs into a closet or crate still takes time and
closes the closet/crate in question.
- imageadd: Crowbars and wirecutters have new inhand sprites. Crowbars can now be
distinguished from wrenches in-hand.
RandomMarine:
- tweak: Cloth items removed from biogenerator. Instead, it can create stacking
cloth that crafts those items.
- rscadd: In addition, cloth can be used to create grey jumpsuits, backpacks, dufflebags,
bio bags, black shoes, bedsheets, and bandages.
- tweak: Bedsheets now tear into cloth instead of directly into bandages.
Shadowlight213:
- tweak: AI will be notified when one of their cyborgs is detonated.
coiax:
- bugfix: Fixed slime grinders not sucking up more than one slime
- rscadd: Drones now start with a spacious dufflebag full of tools, so they will
stop stealing the captain's
- bugfix: Fixed issues with drones wearing chameleon headgear.
- rscadd: Added admin-only "snowflake drone" (also known as drone camogear) headgear.
nullbear:
- bugfix: Fixes air canisters being silent when bashed.
2016-04-20:
Erwgd:
- rscadd: The autolathe can now make trays.
Fox McCloud:
- bugfix: Fixes abductor vests having no cooldown between uses
Kor:
- rscadd: You can now craft boats and oars out of goliath hides. These boats can
move in lava.
- rscadd: Added a spooky, upgraded boat to necropolis chests.
coiax:
- tweak: Slime grinders now cease suction of new slimes while grinding
coiax, Joan:
- rscadd: Drone dufflebags now have their own sprite.
kevinz000:
- rscadd: 'Admin Detection Multitool: A multitool that shows when administrators
are watching you! Now you can grief in safety!'
- tweak: Syndicate R&D scientists have significantly increased the range of their
"AI detection multitools", making them turn yellow when an AI's tracking is
near, but not on you just yet!
2016-04-21:
Kor:
- rscadd: Mechas can now toggle strafing mode.
2016-04-22:
Bawhoppen:
- rscadd: Security belts can now hold any type of grenade. This includes barrier
grenades.
- rscadd: Janitorial belts are now able to store chem grenades.
- rscadd: Military belts have been given a size upgrade, so they can now hold larger
items.
- rscadd: Bandoliers have been given a buff and now can hold a much larger amount
of ammunition.
nullbear:
- bugfix: xenobio console is deconstructable again.
- tweak: syndibomb recipe calls for any matter bin, scaling effectiveness with tier.
2016-04-23:
Joan:
- bugfix: Aliens can now open crates and lockers.
- bugfix: Aliens and monkeys can now climb climbable objects, such as crates and
sandbags.
- rscadd: Aliens climb very, very fast.
Kor:
- rscadd: Running HE pipes over lava will now heat the gas inside.
- rscadd: Alt+clicking on your mecha (while inside it) will toggle strafing mode.
Mercenaryblue:
- rscadd: Allowed all corgis to wear red wizard hats.
TechnoAlchemisto:
- rscadd: Goliaths now drop bones, and Watchers drop sinews.
- rscadd: You can craft primitive gear from bone and sinew.
coiax:
- bugfix: Non-humans are now able to interact with bee boxes.
@@ -1,4 +0,0 @@
author: nullbear
delete-after: True
changes:
- bugfix: "Fixes air canisters being silent when bashed."
@@ -1,4 +0,0 @@
author: Shadowlight213
delete-after: True
changes:
- tweak: "AI will be notified when one of their cyborgs is detonated."
@@ -1,4 +0,0 @@
author: coiax
delete-after: True
changes:
- bugfix: "Fixed slime grinders not sucking up more than one slime"

Some files were not shown because too many files have changed in this diff Show More