mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
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:
@@ -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
|
||||
"}
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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"
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -193,6 +193,7 @@ var/next_external_rsc = 0
|
||||
|
||||
if(!void)
|
||||
void = new()
|
||||
void = void.MakeGreed()
|
||||
|
||||
screen += void
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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!" ))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -112,3 +112,8 @@ Lumipharon = Game Master
|
||||
bgobandit = Game Master
|
||||
coiax = Game Master
|
||||
RandomMarine = Game Master
|
||||
PKPenguin321 = Game Master
|
||||
TechnoAlchemist = Game Master
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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">
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user