diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm index 0a2280a5a53..d41cfaa3a68 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm @@ -1,34 +1,35 @@ "a" = (/turf/template_noop,/area/template_noop) -"b" = (/turf/closed/wall/shuttle/smooth/nodiagonal{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"c" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"d" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"e" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"f" = (/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"g" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"h" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered) -"i" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered) -"j" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"k" = (/obj/machinery/computer/arcade/battle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"l" = (/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"m" = (/obj/effect/mob_spawn/human/golem/adamantine,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"n" = (/obj/machinery/mineral/equipment_vendor/golem,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"o" = (/obj/item/weapon/resonator,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"p" = (/obj/machinery/mineral/ore_redemption,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"q" = (/obj/structure/statue/gold/rd,/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"r" = (/obj/machinery/computer/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"s" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"t" = (/obj/structure/table/wood,/obj/item/weapon/bedsheet/rd{desc = "Majestic."; layer = 3; name = "Royal Cape of the Liberator"; pixel_x = 5; pixel_y = 9},/obj/item/weapon/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"u" = (/obj/item/weapon/resonator/upgraded,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"v" = (/obj/machinery/autolathe,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"w" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"x" = (/obj/machinery/computer/arcade/orion_trail,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"y" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"z" = (/obj/structure/table/wood,/obj/item/weapon/surgical_drapes{pixel_x = 15},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"A" = (/obj/item/weapon/storage/firstaid/fire,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"B" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/areaeditor/blueprints{desc = "Use to build new structures in the wastes."; name = "land claim"},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"C" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/disk/design_disk/golem_shell,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"D" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) -"E" = (/obj/structure/ore_box,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) +"b" = (/turf/closed/wall/shuttle/smooth/nodiagonal{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"c" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"d" = (/obj/structure/closet/crate,/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/storage/bag/ore,/obj/item/device/mining_scanner,/obj/item/device/flashlight/lantern,/obj/item/weapon/card/id/mining,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"e" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"f" = (/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"g" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"h" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered/golem_ship) +"i" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/powered/golem_ship) +"j" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"k" = (/obj/machinery/computer/arcade/battle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"l" = (/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"m" = (/obj/effect/mob_spawn/human/golem/adamantine,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"n" = (/obj/machinery/mineral/equipment_vendor/golem,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"o" = (/obj/item/weapon/resonator,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"p" = (/obj/machinery/mineral/ore_redemption,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"q" = (/obj/structure/statue/gold/rd,/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"r" = (/obj/machinery/computer/shuttle,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"s" = (/obj/machinery/bluespace_beacon,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"t" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"u" = (/obj/structure/table/wood,/obj/item/weapon/bedsheet/rd{desc = "Majestic."; layer = 3; name = "Royal Cape of the Liberator"; pixel_x = 5; pixel_y = 9},/obj/item/weapon/book/manual/research_and_development{name = "Sacred Text of the Liberator"; pixel_x = -4; pixel_y = 3},/obj/structure/window/reinforced{dir = 4; name = "shrine of the liberator"; pixel_x = 0},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"v" = (/obj/item/weapon/resonator/upgraded,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"w" = (/obj/machinery/autolathe,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"x" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"y" = (/obj/machinery/computer/arcade/orion_trail,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"z" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"A" = (/obj/structure/table/wood,/obj/item/weapon/surgical_drapes{pixel_x = 15},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"B" = (/obj/item/weapon/storage/firstaid/fire,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"C" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/areaeditor/blueprints{desc = "Use to build new structures in the wastes."; name = "land claim"},/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"D" = (/obj/item/weapon/storage/firstaid/brute,/obj/structure/table/wood,/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/disk/design_disk/golem_shell,/turf/open/floor/plasteel/shuttle/purple{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"E" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) +"F" = (/obj/structure/ore_box,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered/golem_ship) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaa @@ -40,14 +41,14 @@ aabbbbjjbbbbjjbbbbbb aabkllllmmbllllllnhi aabllllloojlllllllhi bbbjjbbbbbblllllpbbb -bqrllllllljlllllljsj -btlllllllljlllllljlj -bbbjjbbbbbblllluvbbb -aabllllloojllllllwhi -aabxllllmmbyllzABChi +bqrllllllljlslllljtj +bulllllllljlllllljlj +bbbjjbbbbbbllllvwbbb +aabllllloojllllllxhi +aabyllllmmbzllABCDhi aabbbbjjbbbbjjbbbbbb -aaaaabfffffffffffDhi -aaaaabEEEEEEEefffDhi +aaaaabfffffffffffEhi +aaaaabFFFFFFFefffEhi aaaaabbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaa diff --git a/_maps/birdstation.dm b/_maps/birdstation.dm index e35fa7106cf..b1f4350ed1e 100644 --- a/_maps/birdstation.dm +++ b/_maps/birdstation.dm @@ -31,7 +31,6 @@ A small map intended for lowpop(40 players and less). #if !defined(MAP_OVERRIDE_FILES) #define MAP_OVERRIDE_FILES #include "map_files\BirdStation\telecomms.dm" - #include "map_files\BirdStation\misc.dm" #include "map_files\BirdStation\job\job_changes.dm" #include "map_files\BirdStation\job\removed_jobs.dm" #endif @@ -40,4 +39,4 @@ A small map intended for lowpop(40 players and less). #warn a map has already been included, ignoring birdstation. -#endif \ No newline at end of file +#endif diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index b08b7ff7e43..23fe48b8871 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -1469,7 +1469,7 @@ "aCm" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk,/turf/open/floor/plating,/area/maintenance/disposal) "aCn" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/light,/turf/open/floor/plating,/area/maintenance/disposal) "aCo" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/door/poddoor{id = "crusherdoor"; layer = 3.1; name = "crusher safety blast door"},/turf/open/floor/plating,/area/maintenance/disposal) -"aCp" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler/birdstation{emagged = 1; name = "dangerous old crusher"},/turf/open/floor/plating,/area/maintenance/disposal) +"aCp" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler/deathtrap,/turf/open/floor/plating,/area/maintenance/disposal) "aCq" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/turf/open/floor/plating,/area/maintenance/disposal) "aCr" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/open/floor/plating,/area/maintenance/disposal) "aCs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/maintenance/disposal) diff --git a/_maps/map_files/BirdStation/job/job_changes.dm b/_maps/map_files/BirdStation/job/job_changes.dm index 679c212c7ee..cca341cc117 100644 --- a/_maps/map_files/BirdStation/job/job_changes.dm +++ b/_maps/map_files/BirdStation/job/job_changes.dm @@ -6,7 +6,7 @@ supervisors = "the captain and the head of personnel" /datum/outfit/job/New() - box = /obj/item/weapon/storage/box/birdsurv + box = /obj/item/weapon/storage/box/survival/radio /datum/job/assistant // Here so assistant appears on the top of the select job list. @@ -29,7 +29,7 @@ ..() /datum/outfit/job/hos/New() - box = /obj/item/weapon/storage/box/birdsec + box = /obj/item/weapon/storage/box/security/radio /datum/job/officer/New() ..() @@ -39,7 +39,7 @@ minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) /datum/outfit/job/officer/New() - box = /obj/item/weapon/storage/box/birdsec + box = /obj/item/weapon/storage/box/security/radio /datum/job/detective/New() ..() @@ -47,7 +47,7 @@ minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) /datum/outfit/job/detective/New() - box = /obj/item/weapon/storage/box/birdsec + box = /obj/item/weapon/storage/box/security/radio //Medbay @@ -69,7 +69,7 @@ minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat) /datum/outfit/job/engineer/New() - box = /obj/item/weapon/storage/box/birdeng + box = /obj/item/weapon/storage/box/engineer/radio //Science @@ -93,7 +93,7 @@ minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) /datum/outfit/job/mining/New() - box = /obj/item/weapon/storage/box/birdeng + box = /obj/item/weapon/storage/box/engineer/radio //Service @@ -123,4 +123,4 @@ /datum/job/clown/New() ..() - supervisors = "nobody but yourself" //Honk \ No newline at end of file + supervisors = "nobody but yourself" //Honk diff --git a/_maps/map_files/BirdStation/misc.dm b/_maps/map_files/BirdStation/misc.dm deleted file mode 100644 index b86c9247888..00000000000 --- a/_maps/map_files/BirdStation/misc.dm +++ /dev/null @@ -1,63 +0,0 @@ - -// modified crusher -// only does 120 brute damage and won't eat the victims items - - -/obj/machinery/recycler/birdstation/eat(mob/living/L) - - L.loc = src.loc - - if(istype(L,/mob/living/silicon)) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - else - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - - var/gib = 1 - if(istype(L,/mob/living/carbon)) - gib = 0 - add_blood(L) - - if(!blood && !istype(L,/mob/living/silicon)) - blood = 1 - update_icon() - L.Paralyse(5) - if(gib || emagged == 2) - L.gib() - else if(emagged == 1) - L.adjustBruteLoss(120) - -// we don't want anyone to dismantle or disable the crusher easily - -/obj/machinery/recycler/birdstation/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/screwdriver)) - return - - -//special birdstation survival boxes - -/obj/item/weapon/storage/box/birdsurv/New() - ..() - contents = list() - new /obj/item/clothing/mask/breath(src) - new /obj/item/weapon/tank/internals/emergency_oxygen(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen(src) - new /obj/item/device/radio/off(src) - return - -/obj/item/weapon/storage/box/birdeng/New() - ..() - contents = list() - new /obj/item/clothing/mask/breath(src) - new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen(src) - new /obj/item/device/radio/off(src) - return - -/obj/item/weapon/storage/box/birdsec/New() - ..() - contents = list() - new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/weapon/tank/internals/emergency_oxygen(src) - new /obj/item/weapon/reagent_containers/hypospray/medipen(src) - new /obj/item/device/radio/off(src) - return diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index 9f1dde54049..801662b4f4d 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -33852,7 +33852,14 @@ /area/crew_quarters/theatre) "boC" = ( /obj/structure/table/wood, -/obj/item/weapon/lipstick/random, +/obj/item/weapon/lipstick/random{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/lipstick/random{ + pixel_x = -2; + pixel_y = -2 + }, /turf/open/floor/wood, /area/crew_quarters/theatre) "boD" = ( @@ -78083,6 +78090,10 @@ /area/hallway/primary/aft{ name = "Aft Port Hallway" }) +"cSm" = ( +/obj/structure/closet/secure_closet/freezer/cream_pie, +/turf/open/floor/wood, +/area/crew_quarters/theatre) (1,1,1) = {" aaa @@ -108287,7 +108298,7 @@ biH bjZ bkT bmM -boC +cSm bqO bte bmM diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index 8e7fc5e4d84..f030f88a39d 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -33996,8 +33996,8 @@ }, /area/crew_quarters/kitchen) "bjL" = ( -/obj/structure/closet, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/secure_closet/freezer/cream_pie, /turf/open/floor/plasteel{ icon_state = "redbluefull" }, @@ -34014,8 +34014,15 @@ }, /area/crew_quarters/theatre) "bjN" = ( -/obj/item/weapon/storage/crayons, /obj/structure/table/wood, +/obj/item/weapon/storage/crayons{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream{ + pixel_x = -3; + pixel_y = -3 + }, /turf/open/floor/plasteel{ icon_state = "redbluefull" }, @@ -61714,6 +61721,25 @@ }, /turf/closed/indestructible/opshuttle, /area/shuttle/syndicate) +"ckh" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/obj/item/weapon/storage/crayons{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel{ + icon_state = "redbluefull" + }, +/area/space) "cki" = ( /turf/open/space, /obj/machinery/porta_turret/syndicate{ @@ -61724,17 +61750,6 @@ icon_state = "diagonalWall3" }, /area/shuttle/syndicate) -"ckh" = ( -/turf/open/space, -/obj/machinery/porta_turret/syndicate{ - dir = 4 - }, -/turf/closed/wall/shuttle{ - tag = "icon-diagonalWall3 (WEST)"; - icon_state = "diagonalWall3"; - dir = 8 - }, -/area/shuttle/syndicate) (1,1,1) = {" aaa @@ -95288,7 +95303,7 @@ bkQ bfv bvd bfv -bfv +ckh bqH bsy btK diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.dmm similarity index 99% rename from _maps/map_files/MetaStation/MetaStation.v41I.dmm rename to _maps/map_files/MetaStation/MetaStation.dmm index a01e241996c..e165b51f680 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -3422,9 +3422,7 @@ name = "\improper Recreation Area" }) "afB" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, +/obj/structure/easel, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -3752,7 +3750,6 @@ }, /area/ai_monitored/security/armory) "agf" = ( -/obj/machinery/flasher/portable, /obj/item/device/radio/intercom{ freerange = 0; frequency = 1459; @@ -3760,6 +3757,20 @@ pixel_x = 0; pixel_y = 24 }, +/obj/structure/rack, +/obj/item/weapon/grenade/barrier{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/weapon/grenade/barrier, +/obj/item/weapon/grenade/barrier{ + pixel_x = 3; + pixel_y = -1 + }, +/obj/item/weapon/grenade/barrier{ + pixel_x = 6; + pixel_y = -2 + }, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 1 @@ -3767,9 +3778,13 @@ /area/ai_monitored/security/armory) "agg" = ( /mob/living/simple_animal/bot/secbot{ - health = 35; - name = "Securitron #359"; - on = 0 + arrest_type = 1; + health = 45; + icon_state = "secbot1"; + idcheck = 1; + name = "Sergeant-at-Armsky"; + on = 1; + weaponscheck = 1 }, /turf/open/floor/plasteel{ icon_state = "vault"; @@ -4263,13 +4278,14 @@ }, /area/ai_monitored/security/armory) "agX" = ( -/obj/machinery/flasher/portable, /obj/machinery/airalarm{ dir = 4; locked = 0; pixel_x = -23; pixel_y = 0 }, +/obj/structure/rack, +/obj/item/weapon/storage/fancy, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 1 @@ -4666,7 +4682,14 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/flasher/portable, +/obj/structure/rack, +/obj/item/weapon/storage/box/flashes{ + pixel_x = 3 + }, +/obj/item/weapon/storage/box/teargas{ + pixel_x = 1; + pixel_y = -2 + }, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 1 @@ -4728,7 +4751,6 @@ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/storage/box/teargas, /obj/machinery/button/door{ id = "armory"; name = "Armory Shutters"; @@ -5042,6 +5064,7 @@ /turf/open/floor/plating, /area/maintenance/disposal) "aio" = ( +/obj/structure/easel, /turf/open/floor/plating, /area/maintenance/disposal) "aip" = ( @@ -5594,7 +5617,7 @@ name = "HIGH VOLTAGE"; pixel_y = 0 }, -/turf/closed/wall/r_wall, +/turf/closed/wall, /area/maintenance/auxsolarport) "ajp" = ( /obj/structure/table, @@ -5736,6 +5759,10 @@ lootcount = 2; name = "2maintenance loot spawner" }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 28 + }, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 4 @@ -6455,7 +6482,6 @@ }, /area/security/warden) "akI" = ( -/obj/item/weapon/grenade/barrier, /obj/structure/extinguisher_cabinet{ pixel_x = -27; pixel_y = 0 @@ -6465,12 +6491,13 @@ dir = 4; network = list("SS13") }, +/obj/machinery/flasher/portable, /turf/open/floor/plasteel{ icon_state = "bot" }, /area/security/warden) "akJ" = ( -/obj/item/weapon/grenade/barrier, +/obj/machinery/flasher/portable, /turf/open/floor/plasteel{ icon_state = "bot" }, @@ -8159,10 +8186,6 @@ /obj/structure/filingcabinet/security{ pixel_x = 4 }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 28 - }, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 10 @@ -8178,6 +8201,11 @@ /obj/item/weapon/storage/lockbox/loyalty, /obj/item/weapon/reagent_containers/glass/bottle/morphine, /obj/machinery/light/small, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26; + pixel_y = 0 + }, /turf/open/floor/plasteel{ icon_state = "bot" }, @@ -9297,7 +9325,7 @@ }, /obj/item/weapon/storage/belt{ desc = "Can hold quite a lot of stuff."; - name = "mutli-belt" + name = "multi-belt" }, /obj/item/clothing/gloves/color/fyellow, /obj/effect/spawner/lootdrop/maintenance, @@ -9379,7 +9407,7 @@ /turf/open/floor/plating, /area/engine/gravity_generator) "apu" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall, /area/maintenance/auxsolarstarboard) "apv" = ( /obj/machinery/power/solar_control{ @@ -10349,11 +10377,11 @@ /turf/open/floor/plating, /area/maintenance/fore) "arf" = ( -/obj/effect/decal/cleanable/blood, /obj/structure/chair, /obj/item/weapon/restraints/handcuffs, /obj/effect/decal/remains/human, /obj/item/clothing/under/soviet, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/maintenance/fore) "arg" = ( @@ -11957,7 +11985,7 @@ name = "HIGH VOLTAGE"; pixel_y = 0 }, -/turf/closed/wall/r_wall, +/turf/closed/wall, /area/maintenance/auxsolarstarboard) "atw" = ( /turf/closed/wall/r_wall, @@ -12735,8 +12763,8 @@ icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; - pixel_x = 0; - pixel_y = 32 + pixel_x = 32; + pixel_y = 0 }, /turf/open/floor/plating, /area/maintenance/starboard) @@ -13987,8 +14015,8 @@ /obj/machinery/door/airlock/security{ name = "Interrogation"; req_access = null; - req_access_txt = "0"; - req_one_access_txt = "1;4" + req_access_txt = "63"; + req_one_access_txt = "0" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -14949,7 +14977,11 @@ /turf/closed/wall/r_wall, /area/engine/engineering) "ayp" = ( -/obj/structure/closet/emcloset, +/obj/structure/closet/emcloset{ + anchored = 1; + desc = "It's a storage unit for emergency breath masks and O2 tanks, and is securely bolted in place."; + name = "anchored emergency closet" + }, /turf/open/floor/plating, /area/engine/engineering) "ayq" = ( @@ -17411,6 +17443,7 @@ dir = 4; network = list("Singulo") }, +/obj/structure/lattice, /turf/open/space, /area/space) "aCi" = ( @@ -20832,13 +20865,13 @@ amount = 50 }, /obj/item/stack/sheet/glass{ - amount = 12 + amount = 50 }, /obj/item/stack/sheet/glass{ - amount = 12 + amount = 50 }, /obj/item/stack/sheet/glass{ - amount = 12 + amount = 50 }, /obj/item/weapon/crowbar, /obj/item/weapon/grenade/chem_grenade/metalfoam, @@ -24449,12 +24482,12 @@ /turf/open/floor/wood, /area/lawoffice) "aNP" = ( +/obj/structure/filingcabinet/chestdrawer, /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; pixel_x = 24 }, -/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "aNQ" = ( @@ -25058,10 +25091,7 @@ /area/quartermaster/qm) "aOT" = ( /obj/structure/table, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, +/obj/machinery/computer/stockexchange, /turf/open/floor/plasteel{ dir = 1; icon_state = "brown" @@ -26649,7 +26679,18 @@ pixel_y = 0; supply_display = 1 }, -/obj/machinery/computer/stockexchange, +/obj/item/weapon/cartridge/quartermaster{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/weapon/cartridge/quartermaster, +/obj/item/weapon/cartridge/quartermaster{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/device/gps{ + gpstag = "QM0" + }, /turf/open/floor/plasteel, /area/quartermaster/qm) "aRC" = ( @@ -27565,18 +27606,10 @@ /area/quartermaster/qm) "aSY" = ( /obj/structure/table, -/obj/item/weapon/cartridge/quartermaster{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/weapon/cartridge/quartermaster, -/obj/item/weapon/cartridge/quartermaster{ - pixel_x = -4; +/obj/item/weapon/paper_bin{ + pixel_x = -3; pixel_y = 7 }, -/obj/item/device/gps{ - gpstag = "QM0" - }, /turf/open/floor/plasteel{ dir = 2; icon_state = "brown" @@ -29711,11 +29744,7 @@ /turf/open/floor/plating/airless, /area/engine/engineering) "aWD" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Aft Arm - Far"; - dir = 8; - network = list("Singulo") - }, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/airless, /area/engine/engineering) "aWE" = ( @@ -30089,6 +30118,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ req_access_txt = 1 }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 0; + pixel_y = 0 + }, /turf/open/floor/plasteel{ icon_state = "delivery"; name = "floor" @@ -31654,18 +31687,21 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/computer/powermonitor{ - pixel_x = -2; - pixel_y = 2 +/obj/item/weapon/circuitboard/computer/pandemic{ + pixel_x = -3; + pixel_y = 3 }, -/obj/item/weapon/circuitboard/computer/stationalert{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/weapon/circuitboard/computer/atmos_alert{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, +/obj/item/weapon/circuitboard/computer/aifixer, +/obj/item/weapon/circuitboard/computer/teleporter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/mechfab, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -31675,14 +31711,12 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/computer/secure_data{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/weapon/circuitboard/computer/security{ - pixel_x = 1; - pixel_y = -1 +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ + pixel_x = 3; + pixel_y = -3 }, +/obj/item/weapon/circuitboard/computer/arcade/battle, /obj/machinery/ai_status_display{ pixel_x = 0; pixel_y = 31 @@ -31692,20 +31726,10 @@ }, /area/storage/tech) "aZI" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/weapon/circuitboard/computer/cloning{ - pixel_x = 0 - }, -/obj/item/weapon/circuitboard/computer/med_data{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/weapon/circuitboard/machine/clonescanner, -/obj/item/weapon/circuitboard/machine/clonepod, -/obj/item/weapon/circuitboard/computer/scan_consolenew, +/obj/structure/rack, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/machinery/computer/telecomms/server, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -31838,6 +31862,14 @@ /turf/closed/wall, /area/security/checkpoint/engineering) "aZS" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = 32; + pixel_y = 0 + }, /turf/open/floor/plating{ dir = 2; icon_state = "warnplate" @@ -32756,6 +32788,7 @@ /area/engine/engineering) "bbo" = ( /obj/machinery/space_heater, +/obj/effect/decal/cleanable/cobweb2, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -33263,6 +33296,7 @@ pixel_x = 0; pixel_y = 30 }, +/obj/item/weapon/pen/red, /turf/open/floor/plasteel{ dir = 9; icon_state = "brown" @@ -33271,11 +33305,6 @@ name = "\improper Cargo Office" }) "bbW" = ( -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/pen/red, /obj/structure/table/reinforced, /obj/machinery/computer/stockexchange, /turf/open/floor/plasteel{ @@ -33760,14 +33789,6 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/computer/borgupload{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/weapon/circuitboard/computer/aiupload{ - pixel_x = 2; - pixel_y = -2 - }, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 4 @@ -33804,50 +33825,18 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/computer/message_monitor{ - pixel_y = -5 - }, -/obj/item/weapon/circuitboard/computer/arcade/battle{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/weapon/circuitboard/computer/arcade/orion_trail{ - pixel_x = 4 - }, /turf/open/floor/plasteel{ icon_state = "dark" }, /area/storage/tech) "bcN" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/weapon/circuitboard/computer/mining, -/obj/item/weapon/circuitboard/machine/autolathe{ - pixel_x = 3; - pixel_y = -3 - }, -/turf/open/floor/plasteel{ - icon_state = "dark" - }, -/area/storage/tech) +/turf/closed/wall, +/area/maintenance/auxsolarport) "bcO" = ( /obj/structure/rack{ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/computer/pandemic{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/weapon/circuitboard/computer/rdconsole, -/obj/item/weapon/circuitboard/machine/rdserver{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/weapon/circuitboard/machine/destructive_analyzer, -/obj/item/weapon/circuitboard/machine/protolathe, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ icon_state = "dark" @@ -34078,8 +34067,8 @@ icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; - pixel_x = 0; - pixel_y = 32 + pixel_x = 32; + pixel_y = -32 }, /turf/open/floor/plating{ icon_state = "warnplate"; @@ -34227,10 +34216,16 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ req_access_txt = 1 }, -/obj/machinery/light_switch{ - pixel_x = -25; +/obj/machinery/power/apc{ + dir = 8; + name = "Cargo Office APC"; + pixel_x = -24; pixel_y = 0 }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, /turf/open/floor/plasteel{ dir = 9; icon_state = "brown" @@ -34245,6 +34240,12 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, /turf/open/floor/plasteel{ dir = 1; icon_state = "brown" @@ -34296,13 +34297,17 @@ }) "bdz" = ( /obj/structure/table/reinforced, -/obj/item/weapon/folder/yellow, /obj/machinery/door/firedoor, /obj/machinery/door/window/westleft{ dir = 8; name = "Cargo Desk"; req_access_txt = "50" }, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, /turf/open/floor/plasteel, /area/quartermaster/office{ name = "\improper Cargo Office" @@ -34518,18 +34523,6 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/computer/crew{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/weapon/circuitboard/computer/card{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/weapon/circuitboard/computer/communications{ - pixel_x = 5; - pixel_y = -5 - }, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 8 @@ -34757,11 +34750,11 @@ }, /area/security/checkpoint/engineering) "bes" = ( -/obj/structure/closet/emcloset, +/obj/structure/easel, /turf/open/floor/plating{ - icon_state = "platingdmg2" + icon_state = "platingdmg3" }, -/area/engine/engineering) +/area/maintenance/starboard) "bet" = ( /obj/machinery/light{ dir = 8 @@ -35451,14 +35444,6 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/computer/robotics{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/weapon/circuitboard/computer/mecha_control{ - pixel_x = 1; - pixel_y = -1 - }, /turf/open/floor/plasteel{ icon_state = "vault"; dir = 1 @@ -37123,18 +37108,41 @@ name = "Customs" }) "bin" = ( -/obj/item/weapon/grenade/barrier, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26; - pixel_y = 0 - }, /obj/machinery/light/small{ dir = 1 }, /obj/machinery/airalarm{ pixel_y = 28 }, +/obj/structure/closet/crate/secure/weapon{ + desc = "A secure clothing crate."; + name = "formal uniform crate"; + req_access_txt = "3" + }, +/obj/item/clothing/under/rank/security/navyblue, +/obj/item/clothing/under/rank/security/navyblue, +/obj/item/clothing/under/rank/security/navyblue, +/obj/item/clothing/under/rank/security/navyblue, +/obj/item/clothing/under/rank/security/navyblue, +/obj/item/clothing/under/rank/security/navyblue, +/obj/item/clothing/suit/security/officer, +/obj/item/clothing/suit/security/officer, +/obj/item/clothing/suit/security/officer, +/obj/item/clothing/suit/security/officer, +/obj/item/clothing/suit/security/officer, +/obj/item/clothing/suit/security/officer, +/obj/item/clothing/under/rank/warden/navyblue, +/obj/item/clothing/suit/security/warden, +/obj/item/clothing/under/rank/head_of_security/navyblue, +/obj/item/clothing/suit/security/hos, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navyofficer, +/obj/item/clothing/head/beret/sec/navywarden, +/obj/item/clothing/head/beret/sec/navyhos, /turf/open/floor/plasteel{ icon_state = "bot" }, @@ -37290,11 +37298,6 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 2 }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /turf/open/floor/plasteel{ dir = 8; icon_state = "brown" @@ -37311,11 +37314,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /turf/open/floor/plasteel, /area/quartermaster/office{ name = "\improper Cargo Office" @@ -38487,18 +38485,9 @@ /obj/structure/table, /obj/item/weapon/clipboard, /obj/item/weapon/folder/yellow, +/obj/item/weapon/folder/yellow, /obj/item/device/multitool, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26; - pixel_y = 0 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/computer/stockexchange, +/obj/item/weapon/pen/red, /turf/open/floor/plasteel{ dir = 8; icon_state = "brown" @@ -39532,23 +39521,12 @@ }) "bmb" = ( /obj/structure/table, -/obj/item/device/radio/intercom{ - freerange = 0; - frequency = 1459; - name = "Station Intercom (General)"; - pixel_x = -29 - }, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = 0; +/obj/machinery/computer/stockexchange, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26; pixel_y = 0 }, -/obj/machinery/power/apc{ - dir = 2; - name = "Cargo Office APC"; - pixel_x = 1; - pixel_y = -24 - }, -/obj/structure/cable/yellow, /turf/open/floor/plasteel{ dir = 10; icon_state = "brown" @@ -39589,6 +39567,13 @@ pixel_x = 28; pixel_y = 0 }, +/obj/item/device/radio/intercom{ + freerange = 0; + frequency = 1459; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -28 + }, /turf/open/floor/plasteel{ dir = 6; icon_state = "brown" @@ -40241,7 +40226,7 @@ /area/engine/break_room) "bng" = ( /obj/structure/sign/pods, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/engine/break_room) "bnh" = ( /obj/structure/grille, @@ -40857,10 +40842,6 @@ /area/crew_quarters/heads) "boh" = ( /obj/machinery/recharger, -/obj/machinery/keycard_auth{ - pixel_x = 0; - pixel_y = 24 - }, /obj/item/weapon/storage/secure/safe{ pixel_x = 34; pixel_y = 0 @@ -44053,8 +44034,6 @@ /area/hallway/primary/central) "btc" = ( /obj/structure/table, -/obj/item/weapon/storage/crayons, -/obj/item/weapon/storage/crayons, /obj/machinery/power/apc{ cell_type = 2500; dir = 8; @@ -44066,6 +44045,11 @@ d2 = 4; icon_state = "0-4" }, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, /turf/open/floor/plasteel, /area/storage/art) "btd" = ( @@ -45597,10 +45581,15 @@ /area/hallway/primary/central) "bvn" = ( /obj/structure/table, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, +/obj/item/weapon/canvas/twentythreeXtwentythree, +/obj/item/weapon/canvas/twentythreeXtwentythree, +/obj/item/weapon/canvas/twentythreeXnineteen, +/obj/item/weapon/canvas/twentythreeXnineteen, +/obj/item/weapon/canvas/nineteenXnineteen, +/obj/item/weapon/canvas/nineteenXnineteen, +/obj/item/weapon/storage/crayons, +/obj/item/weapon/storage/crayons, +/obj/item/weapon/storage/crayons, /turf/open/floor/plasteel, /area/storage/art) "bvo" = ( @@ -45643,7 +45632,14 @@ }, /obj/structure/closet/gmcloset, /obj/item/weapon/wrench, -/obj/item/stack/cable_coil/white, +/obj/item/stack/sheet/glass{ + amount = 30 + }, +/obj/item/stack/sheet/metal{ + amount = 30 + }, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, /turf/open/floor/wood, /area/crew_quarters/bar) "bvt" = ( @@ -49939,7 +49935,10 @@ /area/crew_quarters/bar) "bCu" = ( /obj/structure/table/wood/poker, -/obj/effect/spawner/lootdrop/gambling, +/obj/effect/spawner/lootdrop{ + loot = list(/obj/item/weapon/gun/projectile/revolver/russian = 5, /obj/item/weapon/storage/box/syndie_kit/throwing_weapons, /obj/item/toy/cards/deck/syndicate = 2); + name = "gambling valuables spawner" + }, /turf/open/floor/wood, /area/crew_quarters/bar) "bCv" = ( @@ -50677,7 +50676,7 @@ dir = 4 }, /turf/open/floor/goonplaque{ - desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of sentient postcards in a realm of darkness. The station model number is MSv41I:151101" + desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of sentient postcards in a realm of darkness. The station model number is MS-160511" }, /area/hallway/primary/port) "bDM" = ( @@ -54489,12 +54488,12 @@ icon_state = "shower"; dir = 4 }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/limb, /obj/machinery/light/small, /obj/effect/landmark{ name = "revenantspawn" }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -56442,7 +56441,9 @@ name = "Port Maintenance" }) "bNo" = ( -/obj/machinery/vending/autodrobe, +/obj/machinery/vending/autodrobe{ + req_access_txt = "0" + }, /turf/open/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -56963,13 +56964,7 @@ /area/bridge) "bOg" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/machine/telecomms/processor, -/obj/item/weapon/circuitboard/machine/telecomms/processor, -/obj/item/weapon/circuitboard/machine/telecomms/receiver, -/obj/item/weapon/circuitboard/machine/telecomms/server, -/obj/item/weapon/circuitboard/machine/telecomms/server, -/obj/item/weapon/circuitboard/machine/telecomms/bus, -/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/machinery/telecomms/bus, /obj/item/weapon/circuitboard/machine/telecomms/broadcaster, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; @@ -58852,10 +58847,19 @@ }, /area/crew_quarters/kitchen) "bRk" = ( -/turf/open/floor/plasteel{ - icon_state = "showroomfloor" +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = 32; + pixel_y = 0 }, -/area/crew_quarters/kitchen) +/turf/open/floor/plating{ + icon_state = "warnplate"; + dir = 1 + }, +/area/maintenance/starboard) "bRl" = ( /obj/machinery/chem_master/condimaster{ name = "CondiMaster Neo"; @@ -59349,7 +59353,6 @@ pixel_y = 0 }, /obj/item/clothing/under/suit_jacket/red, -/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel{ icon_state = "cult"; dir = 2 @@ -61602,11 +61605,12 @@ name = "HIGH VOLTAGE"; pixel_y = 0 }, -/turf/closed/wall/r_wall, +/turf/closed/wall, /area/maintenance/portsolar) "bVC" = ( -/turf/closed/wall/r_wall, -/area/maintenance/portsolar) +/obj/machinery/power/grounding_rod, +/turf/open/floor/plating/airless, +/area/engine/engineering) "bVD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/maintenance{ @@ -65361,6 +65365,10 @@ pixel_x = -2; pixel_y = 8 }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, /turf/open/floor/plasteel{ dir = 4; icon_state = "caution" @@ -69913,7 +69921,11 @@ }, /area/crew_quarters/kitchen) "ciS" = ( -/obj/structure/closet/emcloset, +/obj/structure/closet/emcloset{ + anchored = 1; + desc = "It's a storage unit for emergency breath masks and O2 tanks, and is securely bolted in place."; + name = "anchored emergency closet" + }, /turf/open/floor/plating{ icon_state = "warnplate"; dir = 1 @@ -72348,8 +72360,8 @@ name = "old sink"; pixel_y = 28 }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plating, /area/maintenance/starboard) "cmL" = ( @@ -73278,8 +73290,6 @@ name = "Aft Maintenance" }) "col" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/landmark{ name = "xeno_spawn"; pixel_x = -1 @@ -73287,6 +73297,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -73441,14 +73453,14 @@ name = "Sleepers" }) "coC" = ( -/obj/structure/grille, -/obj/structure/window/fulltile{ - layer = 2.9 +/obj/structure/lattice, +/obj/machinery/camera/emp_proof{ + c_tag = "Fore Arm - Far"; + dir = 8; + network = list("Singulo") }, -/turf/open/floor/plating, -/area/medical/sleeper{ - name = "Sleepers" - }) +/turf/open/space, +/area/space) "coD" = ( /obj/machinery/door/firedoor, /obj/structure/extinguisher_cabinet{ @@ -74760,7 +74772,7 @@ name = "Aft Maintenance" }) "cqG" = ( -/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -76559,9 +76571,9 @@ }, /area/toxins/explab) "ctj" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/limb, /obj/structure/bed/roller, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plating{ icon_state = "warnplate"; dir = 4 @@ -76602,8 +76614,8 @@ }) "ctn" = ( /obj/structure/bed, -/obj/effect/decal/cleanable/blood/gibs/limb, -/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Maintenance" @@ -79098,7 +79110,6 @@ pixel_x = -2; pixel_y = 4 }, -/obj/item/weapon/circuitboard/computer/teleporter, /turf/open/floor/plasteel{ icon_state = "cafeteria"; dir = 5 @@ -81487,7 +81498,7 @@ pixel_y = 25 }, /obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister, +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel{ dir = 2; icon_state = "warning" @@ -81771,6 +81782,7 @@ }, /obj/machinery/power/apc{ dir = 4; + locked = 0; name = "Cloning Lab APC"; pixel_x = 24; pixel_y = 0 @@ -83886,8 +83898,14 @@ }, /area/medical/morgue) "cEt" = ( -/turf/open/floor/plating, -/area/construction) +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'HIGH VOLTAGE'"; + icon_state = "shock"; + name = "HIGH VOLTAGE"; + pixel_y = 0 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "cEu" = ( /obj/machinery/firealarm{ dir = 2; @@ -95007,6 +95025,11 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/camera{ + c_tag = "Xenobiology Lab - Pen #1"; + dir = 4; + network = list("SS13","RD","Xeno") + }, /turf/open/floor/engine, /area/toxins/xenobiology) "cVE" = ( @@ -95104,6 +95127,11 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/camera{ + c_tag = "Xenobiology Lab - Pen #2"; + dir = 8; + network = list("SS13","RD","Xeno") + }, /turf/open/floor/engine, /area/toxins/xenobiology) "cVN" = ( @@ -97776,8 +97804,6 @@ }, /area/shuttle/abandoned) "daw" = ( -/obj/structure/frame/machine, -/obj/item/weapon/circuitboard/machine/cyborgrecharger, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -97945,7 +97971,6 @@ }, /area/shuttle/abandoned) "daO" = ( -/obj/structure/frame/computer, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -98033,43 +98058,21 @@ }, /area/shuttle/abandoned) "daW" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" +/obj/machinery/light/small{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/frame/machine{ - desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; - dir = 1; - icon = 'icons/obj/Cryogenic2.dmi'; - icon_state = "sleeper-o"; - name = "broken hypersleep chamber"; - pixel_y = 0 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/obj/structure/easel, +/turf/open/floor/plating, +/area/maintenance/starboard) "daX" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" +/obj/structure/lattice, +/obj/machinery/camera/emp_proof{ + c_tag = "Aft Arm - Far"; + dir = 8; + network = list("Singulo") }, -/obj/structure/frame/machine{ - desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; - dir = 1; - icon = 'icons/obj/Cryogenic2.dmi'; - icon_state = "sleeper-o"; - name = "broken hypersleep chamber"; - pixel_y = 0 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/turf/open/space, +/area/space) "daY" = ( /obj/structure/chair/office/light{ dir = 4 @@ -98345,43 +98348,17 @@ }, /area/shuttle/abandoned) "dbt" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" +/obj/machinery/camera/emp_proof{ + c_tag = "Aft Arm - Near"; + dir = 4; + network = list("Singulo") }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/frame/machine{ - desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; - dir = 2; - icon = 'icons/obj/Cryogenic2.dmi'; - icon_state = "sleeper-o"; - name = "broken hypersleep chamber"; - pixel_y = 3 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/obj/structure/lattice, +/turf/open/space, +/area/space) "dbu" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/structure/frame/machine{ - desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; - dir = 2; - icon = 'icons/obj/Cryogenic2.dmi'; - icon_state = "sleeper-o"; - name = "broken hypersleep chamber"; - pixel_y = 3 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/turf/closed/wall/r_wall, +/area/security/checkpoint/engineering) "dbv" = ( /obj/structure/chair/office/light, /obj/effect/decal/cleanable/dirt{ @@ -98466,15 +98443,9 @@ }, /area/shuttle/abandoned) "dbC" = ( -/obj/structure/frame/computer, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/engine/engineering) "dbD" = ( /obj/structure/table, /obj/item/device/radio/off{ @@ -98644,7 +98615,6 @@ }, /area/shuttle/abandoned) "dbS" = ( -/obj/structure/frame/machine, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -98655,16 +98625,13 @@ }, /area/shuttle/abandoned) "dbT" = ( -/obj/structure/frame/machine, -/obj/item/weapon/circuitboard/machine/autolathe, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" +/obj/structure/reagent_dispensers/watertank, +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/engine/engineering) "dbU" = ( /obj/machinery/sleeper{ dir = 4; @@ -98788,26 +98755,15 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/abandoned) "dcd" = ( -/obj/structure/frame/machine, -/obj/item/weapon/circuitboard/machine/chem_dispenser, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/obj/structure/closet/firecloset, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/engine/engineering) "dce" = ( -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, -/area/shuttle/abandoned) +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/engine/engineering) "dcf" = ( /obj/structure/chair/office/light, /obj/effect/decal/cleanable/dirt{ @@ -99275,12 +99231,11 @@ }, /area/shuttle/escape) "dcR" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Airlock"; - req_access_txt = "2" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/turf/open/floor/plasteel/shuttle, -/area/shuttle/escape) +/turf/open/floor/plating, +/area/engine/break_room) "dcS" = ( /obj/structure/closet/crate/medical{ name = "medical crate" @@ -99362,9 +99317,6 @@ }, /area/shuttle/escape) "dcY" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Cargo Bay Airlock" - }, /obj/docking_port/stationary{ dheight = 0; dir = 4; @@ -99381,6 +99333,9 @@ height = 14; width = 25 }, +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Airlock" + }, /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dcZ" = ( @@ -100407,13 +100362,12 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "dfi" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Aft Arm - Near"; - dir = 4; - network = list("Singulo") +/obj/machinery/keycard_auth{ + pixel_x = 26; + pixel_y = 0 }, -/turf/open/floor/plating/airless, -/area/space) +/turf/open/floor/carpet, +/area/crew_quarters/heads) "dfj" = ( /obj/structure/cable{ icon_state = "0-2"; @@ -100457,14 +100411,18 @@ /turf/open/floor/plating, /area/maintenance/starboard) "dfo" = ( -/turf/open/floor/wood, -/area/security/vacantoffice) +/obj/item/hand_labeler_refill, +/obj/structure/easel, +/turf/open/floor/plating, +/area/maintenance/fpmaint2{ + name = "Port Maintenance" + }) "dfp" = ( -/turf/open/floor/plasteel{ - icon_state = "cafeteria"; - dir = 5 - }, -/area/crew_quarters/kitchen) +/obj/structure/easel, +/turf/open/floor/plating, +/area/maintenance/aft{ + name = "Aft Maintenance" + }) "dfq" = ( /turf/open/floor/plasteel, /area/ai_monitored/storage/eva{ @@ -100476,16 +100434,27 @@ }, /area/crew_quarters/kitchen) "dfs" = ( -/obj/structure/chair/stool, -/turf/open/floor/wood, -/area/maintenance/aft{ - name = "Aft Maintenance" - }) +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology Lab - Pen #3"; + dir = 4; + network = list("SS13","RD","Xeno") + }, +/turf/open/floor/engine, +/area/toxins/xenobiology) "dft" = ( -/turf/open/floor/wood, -/area/maintenance/aft{ - name = "Aft Maintenance" - }) +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology Lab - Pen #4"; + dir = 8; + network = list("SS13","RD","Xeno") + }, +/turf/open/floor/engine, +/area/toxins/xenobiology) "dfu" = ( /turf/open/floor/wood{ icon_state = "wood-broken6" @@ -100504,23 +100473,27 @@ }, /area/medical/morgue) "dfw" = ( -/turf/open/floor/plasteel{ - icon_state = "dark" +/obj/machinery/light/small{ + dir = 8 }, -/area/medical/morgue) +/obj/machinery/camera{ + c_tag = "Xenobiology Lab - Pen #5"; + dir = 4; + network = list("SS13","RD","Xeno") + }, +/turf/open/floor/engine, +/area/toxins/xenobiology) "dfx" = ( -/obj/structure/window/reinforced{ +/obj/machinery/light/small{ dir = 4 }, -/obj/structure/table/wood, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/obj/item/clothing/under/burial, -/turf/open/floor/plating, -/area/chapel/main) +/obj/machinery/camera{ + c_tag = "Xenobiology Lab - Pen #6"; + dir = 8; + network = list("SS13","RD","Xeno") + }, +/turf/open/floor/engine, +/area/toxins/xenobiology) "dfy" = ( /turf/open/floor/engine/vacuum, /area/atmos) @@ -109770,9 +109743,9 @@ dai dav daE dai -daX +daU dbi -dbu +daU dai cZz cZK @@ -110027,13 +110000,13 @@ dah dau daD dai -daW +daV dbh -dbt +daV dbA daa dbS -dcd +daU dcr cZy aaa @@ -110546,8 +110519,8 @@ dbj cZS dai daE -dbT -dce +daU +daU dcs cZy aaa @@ -110798,9 +110771,9 @@ dal dau daG dai -daX +daU dbm -dbu +daU dai cZz cZK @@ -111055,9 +111028,9 @@ dak daw daa dai -daX +daU dbl -dbt +daV dai dbJ dbU @@ -111829,7 +111802,7 @@ daO daY dai dbv -dbC +daU cZy cLU dcj @@ -113878,10 +113851,10 @@ bRQ asj alQ bVz -bVC -bVC -bVC -bVC +bVz +bVz +bVz +bVz aaa aaf aaa @@ -114905,11 +114878,11 @@ aLU bRT aLU bUA -bVC -bVC -bVC -bVC -bVC +bVz +bVz +bVz +bVz +bVz aaa aaf aaa @@ -118505,7 +118478,7 @@ alQ bQr bQH alI -avZ +dfo bVE caW ccb @@ -118954,10 +118927,10 @@ aaf aaf aaf aek -agG -agG -agG -agG +bcN +bcN +bcN +bcN akr ahv ahv @@ -119214,7 +119187,7 @@ aek agH ahx air -agG +bcN aks alI amY @@ -119982,8 +119955,8 @@ aaf aaf aaf aek -agG -agG +bcN +bcN agG agG aiu @@ -120865,7 +120838,7 @@ cOU cRS cRS cSP -dfx +cRS cOU cUb cOU @@ -124983,7 +124956,7 @@ cOU dcy dcF dcF -dcR +dcB dcz dcY dcF @@ -124993,7 +124966,7 @@ dcz dcK dcB dcz -dcR +dcB dcF dcz dcF @@ -125682,7 +125655,7 @@ bdK bol bfm bsF -buS +dfi bww bys bmn @@ -129617,7 +129590,7 @@ cTC cTC cTC cVt -cVD +dfw cVB cTC cTC @@ -129870,7 +129843,7 @@ cVD cVN cVo cVt -cVD +dfs cVN cVo cVs @@ -132954,7 +132927,7 @@ cVM cVY cVo cVN -cVM +dft cVY cVo cVB @@ -133215,7 +133188,7 @@ cTC cTC cTC cVB -cVM +dfx cVY cTC cTC @@ -133960,7 +133933,7 @@ cIx cJs cKt chP -bZQ +dfp cgG ciY bVE @@ -138265,7 +138238,7 @@ avN aXR aZH baX -bcN +bcM bee bfH aXR @@ -138772,7 +138745,7 @@ aMR aOg apj aQW -asL +daW aTz alw avN @@ -141834,7 +141807,7 @@ aaf aaf acn alx -apn +bes apk apk apk @@ -143147,15 +143120,15 @@ aCf ayo azn aZR -aZR -aZR -aZR -aZR -aZR +dbu +dbu +dbu +dbu +dbu bjQ bly bng -bfV +bjF brj bjF bjF @@ -143403,12 +143376,12 @@ aDp aVe ayo aYd -aZS -bbn +ayp +ayo bdd -bes -bfV -bhH +bdf +dcR +bjR bjR bjR bjF @@ -143663,11 +143636,11 @@ azn ayo ayo aKe -ayo -bfV +dbT +bjF bhI bjR -bjR +bhH bjF bsD brm @@ -143901,8 +143874,8 @@ ayq azp aaf aCh +aaf aIK -aoa aDq aDq aDq @@ -143912,16 +143885,16 @@ aDq aDq aDq aDq -dfi aIK -aaa +aaf +dbt aaf aYe aZT ayo -aKe -ayo -bfV +dbC +dcd +bjF bhJ bjS blz @@ -144156,7 +144129,7 @@ avP atw ayr azq -aaf +aoa aaf aIM aLy @@ -144172,13 +144145,13 @@ aLy aLy dfk aaf -aaf +aoa azq ayr ayo bde -ayo -bnn +dce +brr bhK cXk bhK @@ -144434,8 +144407,8 @@ aYf aZU ayo aKe -ayo -bnn +aBZ +brr bhK cWO bhK @@ -144669,7 +144642,7 @@ apk avN atw ayr -azq +bVC aAO aaa aIN @@ -144687,11 +144660,11 @@ dfj dfl aaa aWC -azq +bVC ayr ayo bdf -ayo +aBZ aaf bhL bjV @@ -144947,8 +144920,8 @@ azq ayq azu ayo -aKe -ayo +dbC +aBZ aaf aaa cYF @@ -145205,7 +145178,7 @@ ayr ayo ayo aKe -ayo +aBZ aaf aaf aaf @@ -145436,7 +145409,7 @@ apu apu apu apu -atw +alw apk anU atw @@ -145462,7 +145435,7 @@ aYg ayo bbo aKe -ayo +aBZ aaf aaa aaa @@ -145692,7 +145665,7 @@ aaf aaa aaa aaa -atw +alw auL avD atw @@ -145719,7 +145692,7 @@ ayr ayo ayo bdg -ayo +aBZ aaf aaa aaa @@ -145975,7 +145948,7 @@ azq ayt aZT ayo -aKe +dbC aDq aaf aaa @@ -146206,12 +146179,12 @@ aaa aaa aaf aaa -atw +alw auN avS atw ayr -azq +bVC aAP aaa aIN @@ -146229,11 +146202,11 @@ dfj dfl aaa azq -azq +bVC ayr ayo bdh -ayo +aBZ aaf aaf aaa @@ -146463,8 +146436,8 @@ aaa aaa aaf aaa -atw -atw +alw +alw atx atw ayt @@ -146490,8 +146463,8 @@ aYf azu ayo bdi -ayo -ayo +aBZ +aBZ aaf aaa aaa @@ -146721,13 +146694,13 @@ aaa acn acn atx -anV -avT +bRk +avS atw ayu azq azq -aaa +aaf aIL aoa aoa @@ -146746,7 +146719,7 @@ azq azq ayu ayo -bdh +aKg aZS bdi acn @@ -146977,14 +146950,14 @@ aaf aaf aaf aaf -atw -atw +alw +alw atx -awY +atw ayu ayu -aAQ -aoa +azq +aaa aLw aSG aSG @@ -146998,14 +146971,14 @@ aTN aSG aSG dfm -aoa +aaf aWD ayu ayu -aHA +ayo bdi -ayo -ayo +aBZ +aBZ aaf aaa aaa @@ -147239,25 +147212,25 @@ aaf acn atw ayo -azv ayo -azq -aoa -aoa -aaf -aaf -aoa -apy -aoa -aaf -aaf -aaf -aaf -aaf -aaf -azq ayo -azv +aaa +coC +aIK +aaf +aaa +aaa +aaf +aIK +aaf +aaa +aaa +aaf +aIK +daX +aaa +ayo +ayo ayo ayo acn @@ -147496,7 +147469,7 @@ aaf acn aaf aaf -azw +aaf ayo ayo ayo @@ -147752,25 +147725,25 @@ aaa aaa aaa aaa +aaa aaf -aaf +ayo azw azw azw -azw -aGc +aHA azw azw azw +cEt azw azw azw -azw -aGc -azw +aHA azw azw azw +ayo aaf aaa aaf @@ -148271,17 +148244,17 @@ aaa aaa aaa aaa -aaa +aaf aaf aaa aaa aaf -aaa +aaf aaa aaa aaa aaf -aaa +aaf aaa aaa aaa @@ -148533,7 +148506,7 @@ aaf aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -149051,7 +149024,7 @@ aaa aaa aaa aaa -aaf +aaa aaa aaa aaa diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 355c2d64f14..ea06612a0c9 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -464,21 +464,41 @@ /obj/item/key/security, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "abn" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/vest{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/vest{ + pixel_y = 0 + }, +/obj/item/clothing/suit/armor/vest{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/head/helmet{ + layer = 3.00001; + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/head/helmet{ + layer = 3.00001 + }, +/obj/item/clothing/head/helmet{ + layer = 3.00001; + pixel_x = 3; + pixel_y = -3 + }, /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/structure/closet/secure_closet{ - anchored = 1; - name = "Contraband Locker"; - req_access_txt = "3" - }, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "abo" = ( @@ -639,14 +659,6 @@ }, /area/security/prison) "abH" = ( -/obj/machinery/camera/motion{ - c_tag = "Armory Motion Sensor"; - dir = 2; - name = "motion-sensitive security camera" - }, -/obj/machinery/airalarm{ - pixel_y = 23 - }, /obj/structure/table, /obj/item/weapon/storage/box/chemimp{ pixel_x = 6 @@ -657,74 +669,80 @@ /obj/item/weapon/storage/lockbox/loyalty, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "abI" = ( /obj/structure/rack, -/obj/structure/window/reinforced{ +/obj/item/clothing/suit/armor/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/armor/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/light{ dir = 1 }, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_x = 3; - pixel_y = -1 - }, -/obj/item/clothing/suit/armor/bulletproof{ - pixel_y = -1 - }, -/obj/item/clothing/suit/armor/bulletproof{ +/obj/item/clothing/head/helmet/riot{ pixel_x = -3; - pixel_y = -1 + pixel_y = 3 }, -/obj/item/clothing/head/helmet/alt{ - layer = 3.00001; - pixel_x = 3 +/obj/item/clothing/head/helmet/riot, +/obj/item/clothing/head/helmet/riot{ + pixel_x = 3; + pixel_y = -3 }, -/obj/item/clothing/head/helmet/alt{ - layer = 3.00001 +/obj/item/weapon/shield/riot{ + pixel_x = -3; + pixel_y = 3 }, -/obj/item/clothing/head/helmet/alt{ - layer = 3.00001; - pixel_x = -3 +/obj/item/weapon/shield/riot, +/obj/item/weapon/shield/riot{ + pixel_x = 3; + pixel_y = -3 }, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "abJ" = ( /obj/structure/rack, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/clothing/suit/armor/vest{ - pixel_x = 3; - pixel_y = -1 - }, -/obj/item/clothing/suit/armor/vest{ - pixel_y = -1 - }, -/obj/item/clothing/suit/armor/vest{ +/obj/item/clothing/suit/armor/bulletproof{ pixel_x = -3; - pixel_y = -1 + pixel_y = 3 }, -/obj/item/clothing/head/helmet{ +/obj/item/clothing/suit/armor/bulletproof{ + pixel_y = 0 + }, +/obj/item/clothing/suit/armor/bulletproof{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/head/helmet/alt{ layer = 3.00001; - pixel_x = 3 + pixel_x = -3; + pixel_y = 3 }, -/obj/item/clothing/head/helmet{ +/obj/item/clothing/head/helmet/alt{ layer = 3.00001 }, -/obj/item/clothing/head/helmet{ +/obj/item/clothing/head/helmet/alt{ layer = 3.00001; - pixel_x = -3 + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/camera/motion{ + c_tag = "Armory Motion Sensor"; + dir = 2; + name = "motion-sensitive security camera" }, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "abK" = ( @@ -782,17 +800,9 @@ }, /area/security/prison) "abN" = ( -/obj/structure/rack, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/clothing/suit/armor/laserproof, +/obj/structure/closet/secure_closet/lethalshots, /turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 1 + icon_state = "dark" }, /area/ai_monitored/security/armory) "abO" = ( @@ -808,27 +818,14 @@ /area/security/main) "abQ" = ( /obj/structure/rack, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/head/helmet/riot, -/obj/item/weapon/shield/riot{ - pixel_x = 4; - pixel_y = 0 - }, -/obj/item/weapon/shield/riot, -/obj/item/weapon/shield/riot{ - pixel_x = -4; - pixel_y = 0 - }, -/obj/structure/window/reinforced{ - dir = 1 +/obj/machinery/airalarm{ + pixel_y = 23 }, +/obj/item/weapon/gun/energy/ionrifle, +/obj/item/clothing/suit/armor/laserproof, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "abR" = ( @@ -998,16 +995,9 @@ }, /area/security/prison) "aci" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/closet/secure_closet/lethalshots, +/obj/vehicle/secway, /turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 1 + icon_state = "dark" }, /area/ai_monitored/security/armory) "acj" = ( @@ -1044,7 +1034,7 @@ d2 = 2 }, /turf/open/floor/plasteel{ - dir = 5; + dir = 1; icon_state = "warning" }, /area/ai_monitored/security/armory) @@ -1105,14 +1095,13 @@ /turf/open/floor/carpet, /area/security/hos) "acv" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 +/obj/structure/closet/secure_closet{ + anchored = 1; + name = "Contraband Locker"; + req_access_txt = "3" }, -/obj/machinery/suit_storage_unit/security, /turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 1 + icon_state = "dark" }, /area/ai_monitored/security/armory) "acw" = ( @@ -1292,18 +1281,24 @@ /area/security/prison) "acL" = ( /turf/open/floor/plasteel{ - dir = 8; + dir = 10; icon_state = "warning" }, /area/ai_monitored/security/armory) "acM" = ( /obj/structure/rack, -/obj/machinery/atmospherics/components/unary/vent_scrubber{ +/obj/item/weapon/gun/energy/gun{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/gun/energy/gun, +/obj/item/weapon/gun/energy/gun{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, -/obj/item/weapon/storage/box/teargas, -/obj/item/weapon/storage/box/handcuffs, -/obj/item/weapon/storage/box/flashbangs, /turf/open/floor/plasteel{ dir = 2; icon_state = "bot" @@ -1503,10 +1498,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "warning" - }, +/turf/open/floor/plasteel, /area/ai_monitored/security/armory) "adh" = ( /obj/machinery/disposal/bin, @@ -1514,15 +1506,23 @@ /turf/open/floor/carpet, /area/security/hos) "adi" = ( -/obj/machinery/suit_storage_unit/security, +/obj/machinery/flasher/portable, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "adj" = ( /obj/structure/rack, -/obj/item/weapon/gun/energy/ionrifle, +/obj/item/weapon/gun/energy/gun/advtaser{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/gun/energy/gun/advtaser, +/obj/item/weapon/gun/energy/gun/advtaser{ + pixel_x = 3; + pixel_y = -3 + }, /turf/open/floor/plasteel{ dir = 2; icon_state = "bot" @@ -1556,7 +1556,10 @@ pixel_y = -26; req_access_txt = "3" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel{ + icon_state = "delivery"; + name = "floor" + }, /area/ai_monitored/security/armory) "adm" = ( /obj/structure/grille, @@ -2203,34 +2206,30 @@ /area/security/prison) "aes" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, +/obj/machinery/suit_storage_unit/security, /turf/open/floor/plasteel{ - icon_state = "warningcorner"; - dir = 2 + icon_state = "red" }, /area/ai_monitored/security/armory) "aet" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - on = 1 - }, /turf/open/floor/plasteel{ icon_state = "warningcorner"; dir = 1 }, /area/ai_monitored/security/armory) "aeu" = ( -/obj/vehicle/secway, /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, +/obj/machinery/suit_storage_unit/security, /turf/open/floor/plasteel{ - dir = 6; - icon_state = "warning" + icon_state = "red" }, /area/ai_monitored/security/armory) "aev" = ( @@ -2560,23 +2559,11 @@ /obj/structure/rack, /obj/item/clothing/mask/gas/sechailer{ pixel_x = -3; - pixel_y = -3 + pixel_y = 3 }, /obj/item/clothing/mask/gas/sechailer, /obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; + pixel_x = 3; pixel_y = -3 }, /turf/open/floor/plasteel{ @@ -2584,67 +2571,49 @@ }, /area/security/warden) "aeX" = ( -/obj/structure/rack, -/obj/item/weapon/gun/energy/gun{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/weapon/gun/energy/gun, -/obj/item/weapon/gun/energy/gun{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/grille, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 }, +/obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 1 - }, +/turf/open/floor/plating, /area/ai_monitored/security/armory) "aeY" = ( -/obj/structure/rack, -/obj/item/weapon/gun/energy/gun/advtaser{ - pixel_x = -3; - pixel_y = 3 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 }, -/obj/item/weapon/gun/energy/gun/advtaser, -/obj/item/weapon/gun/energy/gun/advtaser{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/door/window/southleft{ + name = "Armory"; + req_access_txt = "3" }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 1 + dir = 10; + icon_state = "warning" }, /area/ai_monitored/security/armory) "aeZ" = ( -/obj/structure/rack, -/obj/item/weapon/gun/energy/laser{ - pixel_x = -3; - pixel_y = 3 +/obj/structure/grille, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" }, -/obj/item/weapon/gun/energy/laser, -/obj/item/weapon/gun/energy/laser{ - pixel_x = 3; - pixel_y = -3 +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 }, -/obj/structure/window/reinforced, +/obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 1 - }, +/turf/open/floor/plating, /area/ai_monitored/security/armory) "afa" = ( /obj/machinery/door/window/southleft{ @@ -2666,6 +2635,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, /turf/open/floor/plasteel{ dir = 6; icon_state = "warning" @@ -2817,6 +2792,15 @@ possible_destinations = "pod_asteroid3"; shuttleId = "pod3" }, +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/status_display{ + density = 0; + layer = 3; + pixel_x = 0; + pixel_y = 32 + }, /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_3) "afr" = ( @@ -2827,6 +2811,9 @@ pixel_x = 6; pixel_y = -32 }, +/obj/structure/chair{ + dir = 4 + }, /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_3) "afs" = ( @@ -3287,16 +3274,36 @@ }, /area/security/warden) "agq" = ( +/obj/machinery/door/firedoor, /obj/machinery/door/window/southleft{ + base_state = "right"; + icon_state = "right"; name = "Armory"; req_access_txt = "3" }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ - dir = 10; + dir = 2; icon_state = "warning" }, /area/ai_monitored/security/armory) @@ -3594,6 +3601,12 @@ /area/security/warden) "agV" = ( /obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/open/floor/plasteel{ icon_state = "showroomfloor" }, @@ -3610,11 +3623,6 @@ "agX" = ( /obj/structure/table, /obj/machinery/recharger, -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, /turf/open/floor/plasteel{ icon_state = "showroomfloor" }, @@ -4354,6 +4362,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/item/weapon/book/manual/wiki/security_space_law, /turf/open/floor/plasteel{ icon_state = "showroomfloor" }, @@ -4713,6 +4722,14 @@ name = "Reception Desk"; req_access_txt = "63" }, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen{ + pixel_x = 4; + pixel_y = 4 + }, /turf/open/floor/plasteel{ icon_state = "showroomfloor" }, @@ -5106,7 +5123,7 @@ /turf/open/floor/plasteel, /area/security/brig) "ajC" = ( -/obj/effect/landmark/event_spawn, +/obj/item/weapon/storage/toolbox/drone, /turf/open/floor/plasteel{ dir = 8; icon_state = "warning" @@ -6070,7 +6087,7 @@ /area/security/processing) "alt" = ( /obj/structure/reagent_dispensers/peppertank, -/turf/closed/wall, +/turf/closed/wall/r_wall, /area/ai_monitored/security/armory) "alu" = ( /obj/machinery/nuclearbomb/selfdestruct{ @@ -6656,8 +6673,11 @@ /turf/open/floor/plating, /area/maintenance/auxsolarport) "amB" = ( -/turf/open/floor/plating, -/area/security/prison) +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/shuttle, +/area/shuttle/escape) "amC" = ( /turf/open/floor/plating, /area/maintenance/fpmaint2) @@ -6765,7 +6785,6 @@ pixel_x = -3; pixel_y = -2 }, -/obj/item/weapon/storage/firstaid/regular, /turf/open/floor/plasteel{ icon_state = "showroomfloor" }, @@ -7059,8 +7078,10 @@ /obj/structure/chair{ dir = 4 }, -/turf/open/floor/plasteel/shuttle, -/area/shuttle/labor) +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor3" + }, +/area/shuttle/escape) "anr" = ( /obj/structure/chair{ dir = 8 @@ -8712,11 +8733,11 @@ /turf/open/floor/wood, /area/lawoffice) "arc" = ( -/obj/structure/chair{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1 }, -/turf/open/floor/wood, -/area/lawoffice) +/turf/open/floor/plasteel, +/area/ai_monitored/security/armory) "ard" = ( /obj/structure/grille, /obj/machinery/door/poddoor/preopen{ @@ -10698,14 +10719,18 @@ }, /area/crew_quarters/fitness) "avB" = ( -/obj/structure/chair{ - dir = 4 +/obj/structure/grille, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 }, -/turf/open/floor/plasteel{ - icon_state = "red"; - dir = 4 +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" }, -/area/crew_quarters/fitness) +/turf/open/floor/plating, +/area/ai_monitored/security/armory) "avC" = ( /obj/structure/chair{ dir = 8 @@ -11257,10 +11282,23 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "awN" = ( -/turf/open/floor/plasteel{ - icon_state = "floorgrime" +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/area/security/prison) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/security/warden) "awO" = ( /obj/structure/cable{ d1 = 4; @@ -14640,7 +14678,14 @@ /obj/structure/mirror{ pixel_x = -28 }, -/obj/item/weapon/lipstick/random, +/obj/item/weapon/lipstick/random{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/lipstick/random{ + pixel_x = -2; + pixel_y = -2 + }, /turf/open/floor/plasteel{ icon_state = "whitehall"; dir = 4 @@ -15937,10 +15982,10 @@ /turf/closed/wall, /area/crew_quarters/theatre) "aGw" = ( -/obj/structure/closet, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/closet/secure_closet/freezer/cream_pie, /turf/open/floor/plasteel{ icon_state = "redbluefull" }, @@ -16043,7 +16088,9 @@ /obj/structure/mirror{ pixel_x = -28 }, -/obj/item/weapon/lipstick/random, +/obj/item/device/flashlight/lamp/bananalamp{ + pixel_y = 3 + }, /turf/open/floor/plasteel{ icon_state = "redbluefull" }, @@ -16464,14 +16511,20 @@ }, /area/chapel/main) "aHp" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel{ - dir = 1; - icon_state = "chapel" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 }, -/area/chapel/main) +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/security/warden) "aHq" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -16645,7 +16698,7 @@ /turf/open/floor/plasteel, /area/gateway) "aHK" = ( -/obj/structure/closet, +/obj/structure/closet/secure_closet/freezer/cream_pie, /turf/open/floor/plasteel{ icon_state = "redbluefull" }, @@ -16797,7 +16850,14 @@ icon_state = "alarm0"; pixel_x = -22 }, -/obj/item/weapon/storage/crayons, +/obj/item/weapon/storage/crayons{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/reagent_containers/food/snacks/pie/cream{ + pixel_x = -3; + pixel_y = -3 + }, /turf/open/floor/plasteel{ icon_state = "redbluefull" }, @@ -17101,14 +17161,11 @@ }, /area/chapel/main) "aIF" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/plasteel{ - dir = 8; - icon_state = "chapel" - }, -/area/chapel/main) +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/structure/cable, +/turf/open/floor/plating, +/area/security/warden) "aIG" = ( /obj/structure/chair{ dir = 1 @@ -29607,8 +29664,9 @@ /turf/open/floor/plating, /area/maintenance/disposal) "bkA" = ( -/turf/open/floor/plating, -/area/maintenance/disposal) +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel, +/area/ai_monitored/security/armory) "bkB" = ( /obj/machinery/button/door{ id = "Disposal Exit"; @@ -30377,8 +30435,14 @@ }, /area/maintenance/disposal) "blT" = ( -/turf/open/floor/plating, -/area/maintenance/fsmaint2) +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/ai_monitored/security/armory) "blU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, @@ -56864,13 +56928,16 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "cml" = ( -/obj/structure/chair{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor4" +/turf/open/floor/plasteel{ + icon_state = "showroomfloor" }, -/area/shuttle/syndicate) +/area/security/warden) "cmm" = ( /obj/structure/chair{ dir = 8 @@ -58356,18 +58423,24 @@ }, /area/shuttle/syndicate) "coS" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_nw"; - name = "south maintenance airlock"; - turf_type = /turf/open/space; - width = 18 +/obj/structure/rack, +/obj/item/weapon/gun/energy/laser{ + pixel_x = -3; + pixel_y = 3 }, -/turf/open/space, -/area/space) +/obj/item/weapon/gun/energy/laser, +/obj/item/weapon/gun/energy/laser{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel{ + dir = 2; + icon_state = "bot" + }, +/area/ai_monitored/security/armory) "coT" = ( /obj/item/pipe{ dir = 4; @@ -58499,7 +58572,7 @@ /obj/structure/table, /turf/open/floor/plasteel{ icon_state = "vault"; - dir = 1 + dir = 8 }, /area/ai_monitored/security/armory) "cph" = ( @@ -58711,8 +58784,11 @@ d2 = 2; icon_state = "1-2" }, -/turf/open/floor/plating, -/area/maintenance/fsmaint2) +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ai_monitored/security/armory) "cpB" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -59260,11 +59336,31 @@ /turf/open/floor/plating, /area/engine/engineering) "cqG" = ( -/turf/open/floor/plating{ - icon_state = "warnplate"; - dir = 4 +/obj/structure/rack, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = -3; + pixel_y = 3 }, -/area/engine/engineering) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/rubbershot, +/obj/item/weapon/storage/box/rubbershot, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/weapon/storage/box/rubbershot{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/plasteel{ + icon_state = "vault"; + dir = 8 + }, +/area/ai_monitored/security/armory) "cqH" = ( /obj/item/weapon/screwdriver, /turf/open/floor/plating, @@ -62486,11 +62582,21 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "cwM" = ( -/obj/structure/chair{ - dir = 4 +/obj/structure/rack, +/obj/item/weapon/storage/box/teargas{ + pixel_x = -3; + pixel_y = 3 }, -/turf/open/floor/plasteel/shuttle, -/area/shuttle/escape) +/obj/item/weapon/storage/box/handcuffs, +/obj/item/weapon/storage/box/flashbangs{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/plasteel{ + icon_state = "vault"; + dir = 8 + }, +/area/ai_monitored/security/armory) "cwN" = ( /obj/machinery/computer/security, /turf/open/floor/plasteel/shuttle{ @@ -62653,13 +62759,21 @@ }, /area/shuttle/escape) "cxk" = ( -/obj/structure/chair{ - dir = 4 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, -/area/shuttle/escape) +/turf/open/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/security/warden) "cxl" = ( /turf/closed/wall/shuttle{ icon_state = "swall7"; @@ -62713,6 +62827,9 @@ }, /area/shuttle/escape) "cxr" = ( +/obj/structure/chair{ + dir = 4 + }, /obj/structure/window/reinforced{ dir = 8 }, @@ -62771,11 +62888,11 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/transport) "cxA" = ( -/obj/structure/chair{ - dir = 4 +/turf/open/floor/plasteel{ + dir = 8; + icon_state = "warning" }, -/turf/open/floor/plasteel/shuttle, -/area/shuttle/transport) +/area/ai_monitored/security/armory) "cxB" = ( /obj/structure/chair, /turf/open/floor/plasteel/shuttle, @@ -63609,6 +63726,15 @@ possible_destinations = "pod_asteroid4"; shuttleId = "pod4" }, +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/status_display{ + density = 0; + layer = 3; + pixel_x = 0; + pixel_y = 32 + }, /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_4) "czM" = ( @@ -63619,6 +63745,9 @@ pixel_x = 6; pixel_y = -32 }, +/obj/structure/chair{ + dir = 4 + }, /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_4) "czN" = ( @@ -93089,8 +93218,8 @@ abm cpg acv adi -adq -aez +adi +aaZ aeW agQ ahv @@ -93346,8 +93475,8 @@ abH acl ajC acL -adL -aez +adi +aaZ agp agT ahx @@ -93601,9 +93730,9 @@ aaa aaZ abn ack -acF -acF +adk adK +cqG aeX ago agS @@ -93859,8 +93988,8 @@ aaZ abJ ack acM -adj adQ +cwM aeZ agr agU @@ -94115,15 +94244,15 @@ aaa aaZ abI ack -acF -acF -adQ +coS +aet +cxA aeY -amN agt -agQ +agt +ahz aie -aiL +aiN ajc ajI akp @@ -94372,15 +94501,15 @@ aaa aaZ abQ ack -acN -adk -aet +adj +arc +blT agq -agt +cml agV -ahz -aih -aiN +cxk +aig +aiM ajc ajI akp @@ -94629,15 +94758,15 @@ aaa aaZ abN ack -acF +bkA acF aes -afa -ags -ags -ahD -aig -aiM +avB +amN +agt +awN +aHp +aIF ajc ajI akp @@ -94886,7 +95015,7 @@ aaf aaZ aci acm -adg +cpA adg aeu alt @@ -115747,11 +115876,11 @@ cxd cxe cwU cwL -cxa -cxa -cxa -cxa -cxa +anq +anq +anq +anq +anq cwL cwU cxQ @@ -117029,7 +117158,7 @@ cwL cwX cwL cwL -cxa +anq cxj cwL cxq @@ -117281,8 +117410,8 @@ aaa aaa crx cwG -cwL -cwL +amB +amB cwW cxa cwL diff --git a/_maps/metastation.dm b/_maps/metastation.dm index d574427fca1..a75489a671d 100644 --- a/_maps/metastation.dm +++ b/_maps/metastation.dm @@ -19,7 +19,7 @@ z7 = empty space #define MINETYPE "lavaland" - #include "map_files\MetaStation\MetaStation.v41I.dmm" + #include "map_files\MetaStation\MetaStation.dmm" #include "map_files\generic\z2.dmm" #include "map_files\generic\z3.dmm" #include "map_files\generic\z4.dmm" @@ -30,7 +30,7 @@ z7 = empty space #include "map_files\generic\z9.dmm" #define MAP_PATH "map_files/MetaStation" - #define MAP_FILE "MetaStation.v41I.dmm" + #define MAP_FILE "MetaStation.dmm" #define MAP_NAME "MetaStation" #define MAP_TRANSITION_CONFIG list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, ABANDONED_SATELLITE = CROSSLINKED, DERELICT = CROSSLINKED, MINING = SELFLOOPING, EMPTY_AREA_1 = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED, EMPTY_AREA_3 = CROSSLINKED, EMPTY_AREA_4 = CROSSLINKED) diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 3846904216b..387ebe9f888 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -34,7 +34,7 @@ "aH" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{name = "The Emergency Escape Bar"},/turf/open/floor/plasteel/bar,/area/shuttle/escape) "aI" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/open/floor/plasteel/bar,/area/shuttle/escape) "aJ" = (/obj/structure/chair,/turf/open/floor/plasteel/bar,/area/shuttle/escape) -"aK" = (/mob/living/simple_animal/drone/snowflake{desc = "A barkeeping drone, an indestructible robot built to tend bars."; dir = 8; health = 3000; languages = 127; laws = "1. Serve drinks. 2. Talk to patrons. 3. Don't get messed up in their affairs."; maxHealth = 3000; name = "Bardrone"; seeStatic = 0},/turf/open/floor/plasteel/bar,/area/shuttle/escape) +"aK" = (/mob/living/simple_animal/drone/snowflake/bardrone,/turf/open/floor/plasteel/bar,/area/shuttle/escape) "aL" = (/obj/machinery/vending/boozeomat,/turf/open/floor/plasteel/bar,/area/shuttle/escape) "aM" = (/obj/structure/table,/turf/open/floor/plasteel/bar,/area/shuttle/escape) "aN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 6; pixel_y = 4},/turf/open/floor/plasteel/bar,/area/shuttle/escape) diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm index c85ddedd921..d4cf6ff501d 100644 --- a/_maps/shuttles/emergency_narnar.dmm +++ b/_maps/shuttles/emergency_narnar.dmm @@ -15,20 +15,20 @@ "o" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/cult,/area/shuttle/escape) "p" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "q" = (/obj/item/stack/sheet/metal,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult,/area/shuttle/escape) -"r" = (/obj/machinery/door/airlock/cult/unruned/glass,/turf/open/floor/plasteel/cult,/area/shuttle/escape) +"r" = (/obj/machinery/door/airlock/cult/unruned/glass/friendly,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "s" = (/obj/machinery/status_display,/turf/closed/wall/cult,/area/shuttle/escape) "t" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "u" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "v" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "w" = (/mob/living/simple_animal/hostile/construct/builder,/turf/open/floor/plasteel/cult,/area/shuttle/escape) -"x" = (/obj/machinery/door/airlock/cult,/turf/open/floor/plating,/area/shuttle/escape) +"x" = (/obj/machinery/door/airlock/cult/friendly,/turf/open/floor/plating,/area/shuttle/escape) "y" = (/obj/effect/decal/cleanable/blood/gibs/up,/obj/item/candle/infinite,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "z" = (/obj/effect/rune/raise_dead,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "A" = (/obj/item/candle/infinite,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "B" = (/obj/effect/rune/true_sight,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/gibs/body,/obj/effect/decal/cleanable/blood/gibs/core,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "C" = (/mob/living/simple_animal/hostile/construct/armored,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "D" = (/obj/effect/rune/true_sight,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult,/area/shuttle/escape) -"E" = (/obj/machinery/door/airlock/cult,/obj/docking_port/mobile/emergency{name = "shuttle 667"},/turf/open/floor/plating,/area/shuttle/escape) +"E" = (/obj/machinery/door/airlock/cult/friendly,/obj/docking_port/mobile/emergency{name = "shuttle 667"},/turf/open/floor/plating,/area/shuttle/escape) "F" = (/obj/effect/decal/cleanable/blood/gibs/down,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "G" = (/obj/structure/extinguisher_cabinet{has_extinguisher = null; icon_state = "extinguisher_empty"; opened = 1; pixel_x = 27; pixel_y = 0},/obj/item/weapon/extinguisher{safety = 0},/turf/open/floor/plasteel/cult,/area/shuttle/escape) "H" = (/mob/living/simple_animal/hostile/construct/wraith,/turf/open/floor/plasteel/cult,/area/shuttle/escape) @@ -37,7 +37,7 @@ "K" = (/mob/living/simple_animal/hostile/carp/eyeball{faction = list("cult"); name = "right eyeball"},/turf/open/floor/plasteel/cult,/area/shuttle/escape) "L" = (/obj/effect/decal/cleanable/blood/drip,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "M" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/open/floor/plasteel/cult,/area/shuttle/escape) -"N" = (/obj/machinery/door/airlock/cult/glass,/turf/open/floor/plasteel/cult,/area/shuttle/escape) +"N" = (/obj/machinery/door/airlock/cult/glass/friendly,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "O" = (/obj/structure/dresser,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "P" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "Q" = (/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/item/stack/sheet/metal,/turf/open/floor/plasteel/cult,/area/shuttle/escape) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 0cbd606660e..04e5a8fbf0d 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -70,3 +70,13 @@ #define UNARMED_ATTACK 2 #define PROJECTILE_ATTACK 3 #define THROWN_PROJECTILE_ATTACK 4 + + +//Gun Stuff + #define SAWN_INTACT 0 + #define SAWN_OFF 1 + #define SAWN_SAWING -1 + + #define WEAPON_LIGHT 0 + #define WEAPON_MEDIUM 1 + #define WEAPON_HEAVY 2 \ No newline at end of file diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index f05b74117d9..7daf7eeaf3c 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -8,6 +8,14 @@ #define ishuman(A) (istype(A, /mob/living/carbon/human)) +// Human sub-species +#define isabductor(A) (is_species(A, /datum/species/abductor)) +#define isgolem(A) (is_species(A, /datum/species/golem)) +#define islizard(A) (is_species(A, /datum/species/lizard)) +#define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) +#define ispodperson(A) (is_species(A, /datum/species/podperson)) +#define isflyperson(A) (is_species(A, /datum/species/fly)) + #define ismonkey(A) (istype(A, /mob/living/carbon/monkey)) #define isbrain(A) (istype(A, /mob/living/carbon/brain)) @@ -32,6 +40,8 @@ #define ismouse(A) (istype(A, /mob/living/simple_animal/mouse)) +#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct)) + #define isbear(A) (istype(A, /mob/living/simple_animal/hostile/bear)) #define iscarp(A) (istype(A, /mob/living/simple_animal/hostile/carp)) @@ -78,4 +88,4 @@ #define issignaler(O) (istype(O, /obj/item/device/assembly/signaler)) -#define istimer(O) (istype(O, /obj/item/device/assembly/timer)) \ No newline at end of file +#define istimer(O) (istype(O, /obj/item/device/assembly/timer)) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 39c68439420..5fc6b1400d6 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -317,4 +317,11 @@ Proc for attack log creation, because really why not . = 0 break mainloop if(progbar) - qdel(progbar) \ No newline at end of file + qdel(progbar) + +/proc/is_species(A, species_datum) + . = FALSE + if(ishuman(A)) + var/mob/living/carbon/human/H = A + if(H.dna && istype(H.dna.species, species_datum)) + . = TRUE diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index a4648b5fac6..a5a299d068c 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -8,9 +8,21 @@ /obj/structure/cult/examine(mob/user) ..() + user << "\The [src] is [anchored ? "":"not "]secured to the floor." if(iscultist(user) && cooldowntime > world.time) user << "The magic in [src] is weak, it will be ready to use again in [getETA()]." +/obj/structure/cult/attackby(obj/I, mob/user, params) + if(istype(I, /obj/item/weapon/tome) && iscultist(user)) + anchored = !anchored + user << "You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor." + if(!anchored) + icon_state = "[initial(icon_state)]_off" + else + icon_state = initial(icon_state) + else + return ..() + /obj/structure/cult/proc/getETA() var/time = (cooldowntime - world.time)/600 var/eta = "[round(time, 1)] minutes" @@ -28,6 +40,9 @@ if(!iscultist(user)) user << "You're pretty sure you know exactly what this is used for and you can't seem to touch it." return + if(!anchored) + user << "You need to anchor [src] to the floor with a tome first." + return if(cooldowntime > world.time) user << "The magic in [src] is weak, it will be ready to use again in [getETA()]." return @@ -40,7 +55,7 @@ pickedtype = /obj/item/clothing/glasses/night/cultblind if("Flask of Unholy Water") pickedtype = /obj/item/weapon/reagent_containers/food/drinks/bottle/unholywater - if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time) + if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) cooldowntime = world.time + 2400 var/obj/item/N = new pickedtype(get_turf(src)) user << "You kneel before the altar and your faith is rewarded with an [N]!" @@ -56,6 +71,9 @@ if(!iscultist(user)) user << "The heat radiating from [src] pushes you back." return + if(!anchored) + user << "You need to anchor [src] to the floor with a tome first." + return if(cooldowntime > world.time) user << "The magic in [src] is weak, it will be ready to use again in [getETA()]." return @@ -68,7 +86,7 @@ pickedtype = /obj/item/clothing/suit/hooded/cultrobes/berserker if("Nar-Sien Hardsuit") pickedtype = /obj/item/clothing/suit/space/hardsuit/cult - if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time) + if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) cooldowntime = world.time + 2400 var/obj/item/N = new pickedtype(get_turf(src)) user << "You work the forge as dark knowledge guides your hands, creating [N]!" @@ -79,44 +97,49 @@ desc = "A floating crystal that slowly heals those faithful to Nar'Sie." icon_state = "pylon" luminosity = 5 - var/heal_delay = 50 - var/last_shot = 0 - var/list/corruption = list() + var/heal_delay = 25 + var/last_heal = 0 + var/corrupt_delay = 50 + var/last_corrupt = 0 /obj/structure/cult/pylon/New() - SSobj.processing |= src - corruption += get_turf(src) - for(var/i in 1 to 5) - for(var/t in corruption) - var/turf/T = t - corruption |= T.GetAtmosAdjacentTurfs() + SSfastprocess.processing |= src ..() /obj/structure/cult/pylon/Destroy() - SSobj.processing.Remove(src) + SSfastprocess.processing.Remove(src) return ..() /obj/structure/cult/pylon/process() - if((last_shot + heal_delay) <= world.time) - last_shot = world.time + if(!anchored) + return + if(last_heal <= world.time) + last_heal = world.time + heal_delay for(var/mob/living/L in range(5, src)) - if(iscultist(L)) - var/mob/living/carbon/human/H = L - if(istype(H)) - L.adjustBruteLoss(-1, 0) - L.adjustFireLoss(-1, 0) - L.updatehealth() - if(istype(L, /mob/living/simple_animal/hostile/construct)) - var/mob/living/simple_animal/M = L - if(M.health < M.maxHealth) - M.adjustHealth(-2) - if(corruption.len) - var/turf/T = pick_n_take(corruption) - corruption -= T - if(istype(T, /turf/open/floor/engine/cult) || istype(T, /turf/open/space) || istype(T, /turf/open/floor/plating/lava)) - return + if(iscultist(L) || istype(L, /mob/living/simple_animal/shade) || istype(L, /mob/living/simple_animal/hostile/construct)) + if(L.health != L.maxHealth) + PoolOrNew(/obj/effect/overlay/temp/heal, list(get_turf(src), "#960000")) + if(ishuman(L)) + L.adjustBruteLoss(-1, 0) + L.adjustFireLoss(-1, 0) + L.updatehealth() + if(istype(L, /mob/living/simple_animal/shade) || istype(L, /mob/living/simple_animal/hostile/construct)) + var/mob/living/simple_animal/M = L + if(M.health < M.maxHealth) + M.adjustHealth(-1) + CHECK_TICK + if(last_corrupt <= world.time) + var/list/validturfs = list() + for(var/T in circleviewturfs(src, 5)) + if(istype(T, /turf/closed) || istype(T, /turf/open/floor/engine/cult) || istype(T, /turf/open/space) || istype(T, /turf/open/floor/plating/lava)) + continue + validturfs |= T + var/turf/T = safepick(validturfs) + if(T) T.ChangeTurf(/turf/open/floor/engine/cult) - + last_corrupt = world.time + corrupt_delay + else + last_corrupt = world.time + corrupt_delay*2 /obj/structure/cult/tome name = "archives" @@ -128,6 +151,9 @@ if(!iscultist(user)) user << "All of these books seem to be gibberish." return + if(!anchored) + user << "You need to anchor [src] to the floor with a tome first." + return if(cooldowntime > world.time) user << "The magic in [src] is weak, it will be ready to use again in [getETA()]." return @@ -140,7 +166,7 @@ pickedtype = /obj/item/device/shuttle_curse if("Veil Shifter") pickedtype = /obj/item/device/cult_shift - if(pickedtype && Adjacent(user) && src && !qdeleted(src) && !user.incapacitated() && cooldowntime <= world.time) + if(src && !qdeleted(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) cooldowntime = world.time + 2400 var/obj/item/N = new pickedtype(get_turf(src)) user << "You summon [N] from the archives!" diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index ecd8c75aa6e..de7f5cb0a92 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -17,6 +17,7 @@ This file contains the arcane tome files. ..() if(iscultist(user) || user.stat == DEAD) user << "The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar-Sie." + user << "Striking a cult structure will unanchor or reanchor it." user << "Striking another cultist with it will purge holy water from them." user << "Striking a noncultist, however, will sear their flesh." @@ -154,7 +155,7 @@ This file contains the arcane tome files. text += "Juggernaut
The Juggernaut is a slow, but durable, melee attacker which can produce temporary forcewalls. It will also reflect most lethal energy weapons.

" - text += "Artificer
The Artificer is a weak and fragile construct, able to heal other constructs, produce more soulstones and construct shells, \ + text += "Artificer
The Artificer is a weak and fragile construct, able to heal other constructs, shades, or itself, produce more soulstones and construct shells, \ construct fortifying cult walls and flooring, and finally, it can release a few indiscriminate stunning missiles.

" text += "Harvester
If you see one, know that you have done all you can and your life is void.

" diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 44e546a9f76..530af072747 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -203,7 +203,7 @@ structure_check() searches for nearby cultist structures required for the invoca log_game("Talisman Creation rune failed - already in use") return var/obj/item/weapon/paper/paper_to_imbue = pick(papers_on_rune) - for(var/I in subtypesof(/obj/item/weapon/paper/talisman) - /obj/item/weapon/paper/talisman/malformed - /obj/item/weapon/paper/talisman/supply) + for(var/I in subtypesof(/obj/item/weapon/paper/talisman) - /obj/item/weapon/paper/talisman/malformed - /obj/item/weapon/paper/talisman/supply - /obj/item/weapon/paper/talisman/supply/weak) var/obj/item/weapon/paper/talisman/J = I var/talisman_cult_name = initial(J.cultist_name) if(talisman_cult_name) @@ -534,40 +534,29 @@ var/list/teleport_runes = list() var/mob/living/user = invokers[1] if(rune_in_use) return - for(var/mob/living/M in orange(1,src)) - if(M.stat == DEAD) - potential_sacrifice_mobs.Add(M) + for(var/mob/living/M in orange(1,T)) + if(M.stat == DEAD && !iscultist(M)) + potential_sacrifice_mobs |= M if(!potential_sacrifice_mobs.len) user << "There are no eligible sacrifices nearby!" - log_game("Raise Dead rune failed - no catalyst corpse") - return - mob_to_sacrifice = input(user, "Choose a corpse to sacrifice.", "Corpse to Sacrifice") as null|anything in potential_sacrifice_mobs - if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated() || !mob_to_revive || !mob_to_sacrifice || rune_in_use) + log_game("Raise Dead rune failed - no catalyst corpses") + fail_invoke() return for(var/mob/living/M in T.contents) if(M.stat == DEAD) - potential_revive_mobs.Add(M) + potential_revive_mobs |= M if(!potential_revive_mobs.len) user << "There is no eligible revival target on the rune!" - log_game("Raise Dead rune failed - no corpse to revived") + log_game("Raise Dead rune failed - no corpses to revive") + fail_invoke() + return + mob_to_sacrifice = input(user, "Choose a corpse to sacrifice.", "Corpse to Sacrifice") as null|anything in potential_sacrifice_mobs + if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, 1)) return mob_to_revive = input(user, "Choose a corpse to revive.", "Corpse to Revive") as null|anything in potential_revive_mobs - if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated() || rune_in_use) + if(!src || qdeleted(src) || rune_in_use || !validness_checks(mob_to_sacrifice, user, 1)) return - if(!in_range(mob_to_sacrifice,src)) - user << "The sacrificial target has been moved!" - fail_invoke() - log_game("Raise Dead rune failed - catalyst corpse moved") - return - if(!(mob_to_revive in T.contents)) - user << "The corpse to revive has been moved!" - fail_invoke() - log_game("Raise Dead rune failed - revival target moved") - return - if(mob_to_sacrifice.stat != DEAD) - user << "The sacrificial target must be dead!" - fail_invoke() - log_game("Raise Dead rune failed - catalyst corpse is not dead") + if(!validness_checks(mob_to_revive, user, 0)) return rune_in_use = 1 if(user.name == "Herbert West") @@ -579,19 +568,47 @@ var/list/teleport_runes = list() mob_to_revive.Beam(mob_to_sacrifice,icon_state="sendbeam",icon='icons/effects/effects.dmi',time=20) sleep(20) if(!mob_to_sacrifice || !in_range(mob_to_sacrifice, src)) - mob_to_sacrifice.visible_message("[mob_to_sacrifice] disintegrates into a pile of bones") + rune_in_use = 0 return - mob_to_sacrifice.dust() if(!mob_to_revive || mob_to_revive.stat != DEAD) visible_message("The glowing tendril snaps against the rune with a shocking crack.") rune_in_use = 0 + fail_invoke() return - mob_to_revive.revive() //This does remove disabilities and such, but the rune might actually see some use because of it! + mob_to_sacrifice.visible_message("[mob_to_sacrifice] disintegrates into a pile of bones.") + mob_to_sacrifice.dust() + mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it! mob_to_revive << "\"PASNAR SAVRAE YAM'TOTH. Arise.\"" mob_to_revive.visible_message("[mob_to_revive] draws in a huge breath, red light shining from their eyes.", \ "You awaken suddenly from the void. You're alive!") rune_in_use = 0 +/obj/effect/rune/raise_dead/proc/validness_checks(mob/living/target_mob, mob/living/user, saccing) + var/turf/T = get_turf(src) + if(!user) + return 0 + if(!Adjacent(user) || user.incapacitated()) + return 0 + if(!target_mob) + fail_invoke() + return 0 + if(saccing) + if(!in_range(target_mob, src)) + user << "The sacrificial target has been moved!" + fail_invoke() + log_game("Raise Dead rune failed - catalyst corpse moved") + return 0 + if(target_mob.stat != DEAD) + user << "The sacrificial target must be dead!" + fail_invoke() + log_game("Raise Dead rune failed - catalyst corpse is not dead") + return 0 + else if(!(target_mob in T.contents)) + user << "The corpse to revive has been moved!" + fail_invoke() + log_game("Raise Dead rune failed - revival target moved") + return 0 + return 1 /obj/effect/rune/raise_dead/fail_invoke() ..() @@ -783,8 +800,9 @@ var/list/teleport_runes = list() /obj/effect/rune/blood_boil/invoke(var/list/invokers) ..() + var/turf/T = get_turf(src) visible_message("[src] briefly bubbles before exploding!") - for(var/mob/living/carbon/C in viewers(src)) + for(var/mob/living/carbon/C in viewers(T)) if(!iscultist(C)) var/obj/item/weapon/nullrod/N = C.null_rod_check() if(N) @@ -797,8 +815,8 @@ var/list/teleport_runes = list() var/mob/living/L = M L.apply_damage(15, BRUTE, pick("l_arm", "r_arm")) L << "[src] saps your strength!" - explosion(get_turf(src), -1, 0, 1, 5) qdel(src) + explosion(T, -1, 0, 1, 5) //Rite of Spectral Manifestation: Summons a ghost on top of the rune as a cultist human with no items. User must stand on the rune at all times, and takes damage for each summoned ghost. diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index b43ee71186c..8628b91fb87 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -263,8 +263,10 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple" if(gangs.len) if(!winner) world << "The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]
" + feedback_set_details("round_end_result","win - gang domination complete") else world << "The [winner.name] Gang successfully performed a hostile takeover of the station!
" + feedback_set_details("round_end_result","loss - gangs failed takeover") for(var/datum/gang/G in gangs) var/text = "The [G.name] Gang was [winner==G ? "victorious" : "defeated"] with [round((G.territory.len/start_state.num_territories)*100, 1)]% control of the station!" diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 3e602b824e4..c5f3dfa2a70 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -236,8 +236,8 @@ console.vest = V V.flags |= NODROP agent.equip_to_slot_or_del(V, slot_wear_suit) - agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_belt) + agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_belt) + agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_in_backpack) agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack) agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 914dfa1c9d0..989c076a27f 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -112,19 +112,11 @@ if(combat_cooldown==initial(combat_cooldown)) SSobj.processing.Remove(src) -/obj/item/device/abductor/proc/IsAbductor(user) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna.species.id != "abductor") - return 0 - return 1 - return 0 - /obj/item/device/abductor/proc/AbductorCheck(user) - if(IsAbductor(user)) - return 1 + if(isabductor(user)) + return TRUE user << "You can't figure how this works!" - return 0 + return FALSE /obj/item/device/abductor/proc/ScientistCheck(user) var/mob/living/carbon/human/H = user @@ -194,7 +186,7 @@ user << "This specimen is already marked!" return if(istype(target,/mob/living/carbon/human)) - if(IsAbductor(target)) + if(isabductor(target)) marked = target user << "You mark [target] for future retrieval." else @@ -304,27 +296,26 @@ break return console - -/obj/item/device/firing_pin/alien +/obj/item/device/firing_pin/abductor name = "alien firing pin" - desc = "An odd device that resembles a firing pin." - fail_message = "UNAUTHORIZED -- UNAUTHORIZED" + icon_state = "firing_pin_ayy" + desc = "This firing pin is slimy and warm; you can swear you feel it \ + constantly trying to mentally probe you." + fail_message = "\ + Firing error, please contact Command." -/obj/item/device/firing_pin/alien/pin_auth(mob/living/user) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna.species.id != "abductor") - return 0 - return 1 +/obj/item/device/firing_pin/abductor/pin_auth(mob/living/user) + . = isabductor(user) /obj/item/weapon/gun/energy/alien name = "alien pistol" desc = "A complicated gun that fires bursts of high-intensity radiation." ammo_type = list(/obj/item/ammo_casing/energy/declone) - pin = /obj/item/device/firing_pin/alien + pin = /obj/item/device/firing_pin/abductor icon_state = "alienpistol" item_state = "alienpistol" origin_tech = "combat=5;materials=4;powerstorage=3;abductor=3" + trigger_guard = TRIGGER_GUARD_ALLOW_ALL /obj/item/weapon/paper/abductor name = "Dissection Guide" @@ -402,16 +393,8 @@ Congratulations! You are now trained for xenobiology research!"} icon_state = "wonderprodProbe" item_state = "wonderprodProbe" -/obj/item/weapon/abductor_baton/proc/IsAbductor(mob/living/user) - if(!ishuman(user)) - return 0 - var/mob/living/carbon/human/H = user - if(H.dna.species.id != "abductor") - return 0 - return 1 - /obj/item/weapon/abductor_baton/attack(mob/target, mob/living/user) - if(!IsAbductor(user)) + if(!isabductor(user)) return if(isrobot(target)) @@ -689,4 +672,4 @@ Congratulations! You are now trained for xenobiology research!"} else if(istype(W, /obj/item/stack/sheet)) return // no material modding else - ..() \ No newline at end of file + ..() diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index 2a69da0950a..9c06517bd95 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -45,15 +45,12 @@ set_droppoint_action.target = console set_droppoint_action.Grant(user) -/obj/machinery/computer/camera_advanced/abductor/proc/IsAbductor(mob/living/carbon/human/H) - return H.dna.species.id == "abductor" - /obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(mob/living/carbon/human/H) var/datum/species/abductor/S = H.dna.species return S.scientist /obj/machinery/computer/camera_advanced/abductor/attack_hand(mob/user) - if(!iscarbon(user) || !IsAbductor(user)) + if(!isabductor(user)) return return ..() @@ -154,4 +151,4 @@ var/mob/camera/aiEye/remote/remote_eye = C.remote_control var/obj/machinery/abductor/console/console = target - console.SetDroppoint(remote_eye.loc,owner) \ No newline at end of file + console.SetDroppoint(remote_eye.loc,owner) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index a2f029725a3..de3a3b468ea 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -3,9 +3,6 @@ /obj/machinery/abductor var/team = 0 -/obj/machinery/abductor/proc/IsAbductor(mob/living/carbon/human/H) - return H.dna.species.id == "abductor" - /obj/machinery/abductor/proc/IsAgent(mob/living/carbon/human/H) if(H.dna.species.id == "abductor") var/datum/species/abductor/S = H.dna.species @@ -37,7 +34,7 @@ /obj/machinery/abductor/console/attack_hand(mob/user) if(..()) return - if(!IsAbductor(user)) + if(!isabductor(user)) user << "You start mashing alien buttons at random!" if(do_after(user,100, target = src)) TeleporterSend() @@ -208,4 +205,4 @@ new item(src.loc) else say("Insufficent data!") - return \ No newline at end of file + return diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index dc1a5ec85f7..09f63616766 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -25,7 +25,7 @@ /obj/machinery/abductor/gland_dispenser/attack_hand(mob/user) if(..()) return - if(!IsAbductor(user)) + if(!isabductor(user)) return user.set_machine(src) var/box_css = {" @@ -82,4 +82,4 @@ if(amounts[count]>0) amounts[count]-- var/T = gland_types[count] - new T(get_turf(src)) \ No newline at end of file + new T(get_turf(src)) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 19fbe24f92d..7b32758a6dd 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -15,7 +15,7 @@ /obj/machinery/abductor/experiment/MouseDrop_T(mob/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target)) return - if(IsAbductor(target)) + if(isabductor(target)) return close_machine(target) @@ -30,8 +30,8 @@ ..() /obj/machinery/abductor/experiment/close_machine(mob/target) - for(var/mob/living/carbon/C in loc) - if(IsAbductor(C)) + for(var/A in loc) + if(isabductor(A)) return if(state_open && !panel_open) ..(target) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index b0509ca1b28..0e0f23a3d0f 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -90,6 +90,7 @@ faction = list("swarmer") AIStatus = AI_OFF pass_flags = PASSTABLE + mob_size = MOB_SIZE_TINY ventcrawler = 2 ranged = 1 projectiletype = /obj/item/projectile/beam/disabler @@ -551,4 +552,3 @@ M << rendered if(M in dead_mob_list) M << "(F) [rendered]" - diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 724311e6a54..6e2d45a1f1a 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -142,10 +142,12 @@ if(istype(W, /obj/item/weapon/wirecutters)) //enable/disable the camera toggle_cam(user, 1) health = initial(health) //this is a pretty simplistic way to heal the camera, but there's no reason for this to be complex. + return else if(istype(W, /obj/item/device/multitool)) //change focus setViewRange((view_range == initial(view_range)) ? short_range : initial(view_range)) user << "You [(view_range == initial(view_range)) ? "restore" : "mess up"] the camera's focus." + return else if(istype(W, /obj/item/weapon/weldingtool)) if(weld(W, user)) @@ -157,7 +159,7 @@ assembly.dir = src.dir assembly = null qdel(src) - return + return else if(istype(W, /obj/item/device/analyzer)) if(!isXRay()) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 836b1fc81d0..04fe6350d4c 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -321,11 +321,15 @@ hackProof = 1 aiControlDisabled = 1 var/openingoverlaytype = /obj/effect/overlay/temp/cult/door + var/friendly = FALSE /obj/machinery/door/airlock/cult/allowed(mob/M) if(!density) return 1 - if(iscultist(M) || istype(M, /mob/living/simple_animal/shade) || istype(M, /mob/living/simple_animal/hostile/construct)) + if(friendly || \ + iscultist(M) || \ + istype(M, /mob/living/simple_animal/shade) || \ + istype(M, /mob/living/simple_animal/hostile/construct)) PoolOrNew(openingoverlaytype, src.loc) return 1 else @@ -345,22 +349,34 @@ /obj/machinery/door/airlock/cult/narsie_act() return +/obj/machinery/door/airlock/cult/friendly + friendly = TRUE + /obj/machinery/door/airlock/cult/glass doortype = /obj/structure/door_assembly/door_assembly_cult/glass glass = 1 opacity = 0 +/obj/machinery/door/airlock/cult/glass/friendly + friendly = TRUE + /obj/machinery/door/airlock/cult/unruned icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' doortype = /obj/structure/door_assembly/door_assembly_cult/unruned openingoverlaytype = /obj/effect/overlay/temp/cult/door/unruned +/obj/machinery/door/airlock/cult/unruned/friendly + friendly = TRUE + /obj/machinery/door/airlock/cult/unruned/glass doortype = /obj/structure/door_assembly/door_assembly_cult/unruned/glass glass = 1 opacity = 0 +/obj/machinery/door/airlock/cult/unruned/glass/friendly + friendly = TRUE + ////////////////////////////////// /* Misc Airlocks diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index a37a0e4d14e..319ce51d949 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -8,13 +8,15 @@ var/const/SAFETY_COOLDOWN = 100 layer = MOB_LAYER+1 // Overhead anchored = 1 density = 1 - var/safety_mode = 0 // Temporality stops the machine if it detects a mob - var/grinding = 0 + var/safety_mode = FALSE // Temporarily stops machine if it detects a mob var/icon_name = "grinder-o" var/blood = 0 var/eat_dir = WEST var/amount_produced = 1 var/datum/material_container/materials + var/crush_damage = 1000 + var/eat_victim_items = TRUE + var/item_recycle_sound = 'sound/items/Welder.ogg' /obj/machinery/recycler/New() ..() @@ -72,9 +74,9 @@ var/const/SAFETY_COOLDOWN = 100 /obj/machinery/recycler/emag_act(mob/user) if(!emagged) - emagged = 1 + emagged = TRUE if(safety_mode) - safety_mode = 0 + safety_mode = FALSE update_icon() playsound(src.loc, "sparks", 75, 1, -1) user << "You use the cryptographic sequencer on the [src.name]." @@ -83,7 +85,7 @@ var/const/SAFETY_COOLDOWN = 100 ..() var/is_powered = !(stat & (BROKEN|NOPOWER)) if(safety_mode) - is_powered = 0 + is_powered = FALSE icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end // This is purely for admin possession !FUN!. @@ -104,24 +106,34 @@ var/const/SAFETY_COOLDOWN = 100 var/move_dir = get_dir(loc, AM.loc) if(move_dir == eat_dir) + eat(AM) + +/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE) + var/list/to_eat = list(AM0) + if(istype(AM0, /obj/item)) + to_eat += AM0.GetAllContents() + var/items_recycled = 0 + + for(var/i in to_eat) + var/atom/movable/AM = i if(isliving(AM)) if(emagged) - eat(AM) + crush_living(AM) else - stop(AM) + emergency_stop(AM) else if(istype(AM, /obj/item)) - recycle(AM) - else // Can't recycle + recycle_item(AM) + items_recycled++ + else playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) AM.loc = src.loc -/obj/machinery/recycler/proc/recycle(obj/item/I, sound = 1) - I.loc = src.loc - if(!istype(I)) - return + if(items_recycled && sound) + playsound(src.loc, item_recycle_sound, 50, 1) + +/obj/machinery/recycler/proc/recycle_item(obj/item/I) + I.loc = src.loc - if(sound) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) var/material_amount = materials.get_item_material_amount(I) if(!material_amount) qdel(I) @@ -131,18 +143,18 @@ var/const/SAFETY_COOLDOWN = 100 materials.retrieve_all() -/obj/machinery/recycler/proc/stop(mob/living/L) +/obj/machinery/recycler/proc/emergency_stop(mob/living/L) playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - safety_mode = 1 + safety_mode = TRUE update_icon() L.loc = src.loc spawn(SAFETY_COOLDOWN) playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - safety_mode = 0 + safety_mode = FALSE update_icon() -/obj/machinery/recycler/proc/eat(mob/living/L) +/obj/machinery/recycler/proc/crush_living(mob/living/L) L.loc = src.loc @@ -151,22 +163,23 @@ var/const/SAFETY_COOLDOWN = 100 else playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - var/gib = 1 + var/gib = TRUE // By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count) if(iscarbon(L)) - gib = 0 + gib = FALSE if(L.stat == CONSCIOUS) L.say("ARRRRRRRRRRRGH!!!") add_blood(L) if(!blood && !issilicon(L)) - blood = 1 + blood = TRUE update_icon() - // Remove and recycle the equipped items. - for(var/obj/item/I in L.get_equipped_items()) - if(L.unEquip(I)) - recycle(I, 0) + // Remove and recycle the equipped items + if(eat_victim_items) + for(var/obj/item/I in L.get_equipped_items()) + if(L.unEquip(I)) + eat(I, sound=FALSE) // Instantly lie down, also go unconscious from the pain, before you die. L.Paralyse(5) @@ -175,9 +188,13 @@ var/const/SAFETY_COOLDOWN = 100 if(gib || emagged == 2) L.gib() else if(emagged == 1) - L.adjustBruteLoss(1000) - + L.adjustBruteLoss(crush_damage) +/obj/machinery/recycler/deathtrap + name = "dangerous old crusher" + emagged = TRUE + crush_damage = 120 + flags = NODECONSTRUCT /obj/item/weapon/paper/recycler name = "paper - 'garbage duty instructions'" diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index ed76ccd8768..1ee601cc453 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -224,6 +224,7 @@ if(target == "input") target = input("New target temperature:", name, round(targetTemperature - T0C, 1)) as num|null if(!isnull(target) && !..()) + target += T0C . = TRUE else if(adjust) target = targetTemperature + adjust diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index f7335295aef..eb062334719 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -2,21 +2,15 @@ name = "washing machine" desc = "Gets rid of those pesky bloodstains, or your money back!" icon = 'icons/obj/machines/washing_machine.dmi' - icon_state = "wm_10" + icon_state = "wm_1_0" density = 1 anchored = 1 - var/state = 1 - //1 = empty, open door - //2 = empty, closed door - //3 = full, open door - //4 = full, closed door - //5 = running - //6 = blood, open door - //7 = blood, closed door - //8 = blood, running - var/gibs_ready = 0 - var/obj/crayon - var/obj/paper + state_open = 1 + var/busy = 0 + var/bloody_mess = 0 + var/has_corgi = 0 + var/obj/item/color_source + var/max_wash_capacity = 5 /obj/machinery/washing_machine/examine(mob/user) ..() @@ -26,286 +20,227 @@ if(!user.canUseTopic(src)) return - if( state != 4 ) - usr << "The washing machine cannot run in this state." + if(busy) return - if( locate(/mob,contents) ) - state = 8 - else - state = 5 + if(state_open) + user << "Close the door first" + return + + if(bloody_mess) + user << "[src] must be cleaned up first." + return + + if(has_corgi) + bloody_mess = 1 + + busy = 1 update_icon() sleep(200) - for(var/atom/A in contents) - A.clean_blood() + wash_cycle() - //Tanning! - for(var/obj/item/stack/sheet/hairlesshide/HH in contents) - var/obj/item/stack/sheet/wetleather/WL = new(src) - WL.amount = HH.amount - qdel(HH) - - //Corgi costume says goodbye - for(var/obj/item/clothing/suit/hooded/ian_costume/IC in contents) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src) - qdel(IC) - - for(var/obj/item/weapon/paper/P in contents) - if(crayon) - var/dye_color - if(istype(crayon,/obj/item/toy/crayon)) - var/obj/item/toy/crayon/CR = crayon - dye_color = CR.paint_color - if(dye_color) - P.color = dye_color - qdel(crayon) - crayon = null - - if(crayon) - var/wash_color - if(istype(crayon,/obj/item/toy/crayon)) - var/obj/item/toy/crayon/CR = crayon - wash_color = CR.paint_color - else if(istype(crayon,/obj/item/weapon/stamp)) - var/obj/item/weapon/stamp/ST = crayon - wash_color = ST.item_color - - - if(wash_color) - var/new_jumpsuit_icon_state = "" - var/new_jumpsuit_item_state = "" - var/new_jumpsuit_name = "" - var/new_can_adjust - var/new_glove_icon_state = "" - var/new_glove_item_state = "" - var/new_glove_name = "" - var/new_shoe_icon_state = "" - var/new_shoe_name = "" - var/new_sheet_icon_state = "" - var/new_sheet_name = "" - var/new_softcap_icon_state = "" - var/new_softcap_name = "" - var/new_desc = "The colors are a bit dodgy." - for(var/T in typesof(/obj/item/clothing/under/color)) - var/obj/item/clothing/under/color/J = new T - //world << "DEBUG: [wash_color] == [J.item_color]" - if(wash_color == J.item_color) - new_jumpsuit_icon_state = J.icon_state - new_jumpsuit_item_state = J.item_state - new_jumpsuit_name = J.name - new_can_adjust = J.can_adjust - qdel(J) - break - qdel(J) - for(var/T in typesof(/obj/item/clothing/gloves/color)) - var/obj/item/clothing/gloves/color/G = new T - if(wash_color == G.item_color) - new_glove_icon_state = G.icon_state - new_glove_item_state = G.item_state - new_glove_name = G.name - qdel(G) - break - qdel(G) - for(var/T in typesof(/obj/item/clothing/shoes/sneakers)) - var/obj/item/clothing/shoes/sneakers/S = new T - if(wash_color == S.item_color) - new_shoe_icon_state = S.icon_state - new_shoe_name = S.name - qdel(S) - break - qdel(S) - for(var/T in typesof(/obj/item/weapon/bedsheet)) - var/obj/item/weapon/bedsheet/B = new T - if(wash_color == B.item_color) - new_sheet_icon_state = B.icon_state - new_sheet_name = B.name - qdel(B) - break - qdel(B) - for(var/T in typesof(/obj/item/clothing/head/soft)) - var/obj/item/clothing/head/soft/H = new T - if(wash_color == H.item_color) - new_softcap_icon_state = H.icon_state - new_softcap_name = H.name - qdel(H) - break - qdel(H) - if(new_jumpsuit_icon_state && new_jumpsuit_item_state && new_jumpsuit_name) - for(var/obj/item/clothing/under/color/J in contents) - J.item_state = new_jumpsuit_item_state - J.icon_state = new_jumpsuit_icon_state - J.item_color = wash_color - J.name = new_jumpsuit_name - J.desc = new_desc - J.suit_color = wash_color - J.can_adjust = new_can_adjust - if(new_glove_icon_state && new_glove_item_state && new_glove_name) - for(var/obj/item/clothing/gloves/color/G in contents) - G.item_state = new_glove_item_state - G.icon_state = new_glove_icon_state - G.item_color = wash_color - G.name = new_glove_name - G.desc = new_desc - if(new_shoe_icon_state && new_shoe_name) - for(var/obj/item/clothing/shoes/sneakers/S in contents) - if (S.chained == 1) - S.chained = 0 - S.slowdown = SHOES_SLOWDOWN - new /obj/item/weapon/restraints/handcuffs( src ) - S.icon_state = new_shoe_icon_state - S.item_color = wash_color - S.name = new_shoe_name - S.desc = new_desc - if(new_sheet_icon_state && new_sheet_name) - for(var/obj/item/weapon/bedsheet/B in contents) - B.icon_state = new_sheet_icon_state - B.item_color = wash_color - B.name = new_sheet_name - B.desc = new_desc - if(new_softcap_icon_state && new_softcap_name) - for(var/obj/item/clothing/head/soft/H in contents) - H.icon_state = new_softcap_icon_state - H.item_color = wash_color - H.name = new_softcap_name - H.desc = new_desc - qdel(crayon) - crayon = null +/obj/machinery/washing_machine/clean_blood() + ..() + if(!busy) + bloody_mess = 0 + update_icon() - if( locate(/mob,contents) ) - state = 7 - gibs_ready = 1 - else - state = 4 +/obj/machinery/washing_machine/proc/wash_cycle() + for(var/X in contents) + var/atom/movable/AM = X + AM.clean_blood() + AM.machine_wash(src) + + busy = 0 + if(color_source) + qdel(color_source) + color_source = null update_icon() -/obj/machinery/washing_machine/verb/climb_out() - set name = "Climb out" - set category = "Object" - set src in usr.loc - sleep(20) - if(state in list(1,3,6) ) - usr.loc = src.loc +//what happens to this object when washed inside a washing machine +/atom/movable/proc/machine_wash(obj/machinery/washing_machine/WM) + return + +/obj/item/stack/sheet/hairlesshide/machine_wash(obj/machinery/washing_machine/WM) + var/obj/item/stack/sheet/wetleather/WL = new(loc) + WL.amount = amount + qdel(src) + +/obj/item/clothing/suit/hooded/ian_costume/machine_wash(obj/machinery/washing_machine/WM) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(loc) + qdel(src) + +/obj/item/weapon/paper/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + if(istype(WM.color_source,/obj/item/toy/crayon)) + var/obj/item/toy/crayon/CR = WM.color_source + color = CR.paint_color + +/mob/living/simple_animal/pet/dog/corgi/machine_wash(obj/machinery/washing_machine/WM) + gib() + +/obj/item/clothing/under/color/machine_wash(obj/machinery/washing_machine/WM) + jumpsuit_wash(WM) + +/obj/item/clothing/under/rank/machine_wash(obj/machinery/washing_machine/WM) + jumpsuit_wash(WM) + +/obj/item/clothing/under/proc/jumpsuit_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + var/obj/item/clothing/under/U + for(var/T in typesof(/obj/item/clothing/under/color)) + var/obj/item/clothing/under/color/J = T + if(wash_color == initial(J.item_color)) + U = J + break + if(!U) + for(var/T in typesof(/obj/item/clothing/under/rank)) + var/obj/item/clothing/under/rank/R = T + if(wash_color == initial(R.item_color)) + U = R + break + if(U) + item_state = initial(U.item_state) + icon_state = initial(U.icon_state) + item_color = wash_color + name = initial(U.name) + desc = "The colors are a bit dodgy." + can_adjust = initial(U.can_adjust) + if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable + toggle_jumpsuit_adjust() + +/obj/item/clothing/gloves/color/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/clothing/gloves/color)) + var/obj/item/clothing/gloves/color/G = T + if(wash_color == initial(G.item_color)) + item_state = initial(G.item_state) + icon_state = initial(G.icon_state) + item_color = wash_color + name = initial(G.name) + desc = "The colors are a bit dodgy." + break + +/obj/item/clothing/shoes/sneakers/machine_wash(obj/machinery/washing_machine/WM) + if(chained) + chained = 0 + slowdown = SHOES_SLOWDOWN + new /obj/item/weapon/restraints/handcuffs(loc) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/clothing/shoes/sneakers)) + var/obj/item/clothing/shoes/sneakers/S = T + if(wash_color == initial(S.item_color)) + icon_state = initial(S.icon_state) + item_color = wash_color + name = initial(S.name) + desc = "The colors are a bit dodgy." + break + +/obj/item/weapon/bedsheet/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/weapon/bedsheet)) + var/obj/item/weapon/bedsheet/B = T + if(wash_color == initial(B.item_color)) + icon_state = initial(B.icon_state) + item_color = wash_color + name = initial(B.name) + desc = "The colors are a bit dodgy." + break + +/obj/item/clothing/head/soft/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + var/wash_color = WM.color_source.item_color + for(var/T in typesof(/obj/item/clothing/head/soft)) + var/obj/item/clothing/head/soft/H = T + if(wash_color == initial(H.item_color)) + icon_state = initial(H.icon_state) + item_color = wash_color + name = initial(H.name) + desc = "The colors are a bit dodgy." + break + + +/obj/machinery/washing_machine/relaymove(mob/user) + container_resist(user) + +/obj/machinery/washing_machine/container_resist(mob/user) + if(!busy) + add_fingerprint(user) + open_machine() + /obj/machinery/washing_machine/update_icon() - icon_state = "wm_[state]0" + overlays.Cut() + if(busy) + icon_state = "wm_running_[bloody_mess]" + else if(bloody_mess) + icon_state = "wm_[state_open]_blood" + else + var/full = contents.len ? 1 : 0 + icon_state = "wm_[state_open]_[full]" + if(panel_open) + overlays += image(icon, icon_state = "wm_panel") /obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp)) - if( state in list( 1, 3, 6 ) ) - if(!crayon) - if(!user.drop_item()) - return - crayon = W - crayon.loc = src - else - ..() - else - ..() + if(default_deconstruction_screwdriver(user, null, null, W)) + update_icon() + return else if(istype(W,/obj/item/weapon/grab)) - if(state == 1) + if(state_open) var/obj/item/weapon/grab/G = W if(iscorgi(G.affecting)) + has_corgi = 1 G.affecting.loc = src qdel(G) - state = 3 - else - ..() + update_icon() - else if(istype(W,/obj/item/stack/sheet/hairlesshide) || \ - istype(W,/obj/item/clothing/under) || \ - istype(W,/obj/item/clothing/mask) || \ - istype(W,/obj/item/clothing/head) || \ - istype(W,/obj/item/clothing/gloves) || \ - istype(W,/obj/item/clothing/shoes) || \ - istype(W,/obj/item/clothing/suit) || \ - istype(W,/obj/item/weapon/bedsheet) || \ - istype(W,/obj/item/weapon/paper)) + else if(user.a_intent != "harm") - //YES, it's hardcoded... saves a var/can_be_washed for every single clothing item. - if ( istype(W,/obj/item/clothing/suit/space ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/syndicatefake ) ) - user << "This item does not fit." - return -// if ( istype(W,/obj/item/clothing/suit/powered ) ) -// user << "This item does not fit." -// return - if ( istype(W,/obj/item/clothing/suit/cyborg_suit ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/bomb_suit ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/armor ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/suit/armor ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/mask/gas ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/mask/cigarette ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/head/syndicatefake ) ) - user << "This item does not fit." - return - if ( istype(W,/obj/item/clothing/head/helmet ) ) - user << "This item does not fit." - return - if(W.flags & NODROP) //if "can't drop" item - user << "\The [W] is stuck to your hand, you cannot put it in the washing machine!" - return + if (!state_open) + user << "Open the door first!" + return 1 - if(contents.len < 5) - if ( state in list(1, 3) ) - if(!user.drop_item()) - return - W.loc = src - state = 3 - else - user << "You can't put the item in right now!" - else + if(bloody_mess) + user << "[src] must be cleaned up first." + return 1 + + if(contents.len >= max_wash_capacity) user << "The washing machine is full!" + return 1 + + if(!user.unEquip(W)) + user << "\The [W] is stuck to your hand, you cannot put it in the washing machine!" + return 1 + + if(istype(W,/obj/item/toy/crayon) || istype(W,/obj/item/weapon/stamp)) + color_source = W + W.loc = src + update_icon() + else - ..() - update_icon() + return ..() /obj/machinery/washing_machine/attack_hand(mob/user) - switch(state) - if(1) - state = 2 - if(2) - state = 1 - for(var/atom/movable/O in contents) - O.loc = src.loc - if(3) - state = 4 - if(4) - state = 3 - for(var/atom/movable/O in contents) - O.loc = src.loc - crayon = null - state = 1 - if(5) - user << "The [src] is busy." - if(6) - state = 7 - if(7) - if(gibs_ready) - gibs_ready = 0 - if(locate(/mob,contents)) - var/mob/M = locate(/mob,contents) - M.gib() - for(var/atom/movable/O in contents) - O.loc = src.loc - crayon = null - state = 1 + if(busy) + user << "[src] is busy." + return + + if(!state_open) + open_machine() + else + state_open = 0 //close the door + update_icon() - update_icon() +/obj/machinery/washing_machine/open_machine(drop = 1) + ..() + density = 1 //because machinery/open_machine() sets it to 0 + color_source = null + has_corgi = 0 diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index a43d273ac65..a5363b7795a 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -113,6 +113,7 @@ icon_state = "mecha_analyzer" origin_tech = "materials=3;engineering=2" selectable = 0 + equip_cooldown = 30 var/scanning = 0 /obj/item/mecha_parts/mecha_equipment/mining_scanner/New() diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index dfb1f8c5656..c929d74e5ca 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -43,10 +43,12 @@ icon_state = "heal" duration = 15 -/obj/effect/overlay/temp/heal/New() +/obj/effect/overlay/temp/heal/New(loc, colour) ..() pixel_x = rand(-12, 12) pixel_y = rand(-9, 0) + if(colour) + color = colour /obj/effect/overlay/temp/explosion name = "explosion" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 1536d5f1f85..2574c11415c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -578,4 +578,13 @@ obj/item/proc/item_action_slot_check(slot, mob/user) /obj/item/proc/can_dismember() if((sharpness || damtype == BURN) && w_class >= 3) return 1 - return 0 \ No newline at end of file + return 0 + +/obj/item/proc/open_flame() + var/turf/location = loc + if(ismob(location)) + var/mob/M = location + if(M.l_hand == src || M.r_hand == src) + location = get_turf(M) + if(isturf(location)) + location.hotspot_expose(700, 5) diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index 9a20f3b8e37..eced5d1af07 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -1,22 +1,23 @@ #define CANDLE_LUMINOSITY 2 /obj/item/candle name = "red candle" - desc = "a candle" + desc = "In Greek myth, Prometheus stole fire from the Gods and gave it to \ + humankind. The jewelry he kept for himself." icon = 'icons/obj/candle.dmi' icon_state = "candle1" item_state = "candle1" w_class = 1 var/wax = 200 - var/lit = 0 - var/infinite = 0 - var/start_lit = 0 + var/lit = FALSE + var/infinite = FALSE + var/start_lit = FALSE heat = 1000 /obj/item/candle/New() ..() if(start_lit) // No visible message - light(null) + light(show_message = FALSE) /obj/item/candle/update_icon() var/i @@ -56,12 +57,13 @@ light() //honk return -/obj/item/candle/proc/light(flavor_text = "[usr] lights the [name].") +/obj/item/candle/proc/light(show_message) if(!src.lit) - src.lit = 1 + src.lit = TRUE //src.damtype = "fire" - if(flavor_text) - usr.visible_message(flavor_text) + if(show_message) + usr.visible_message( + "[usr] lights the [name].") SetLuminosity(CANDLE_LUMINOSITY) SSobj.processing |= src update_icon() @@ -79,14 +81,13 @@ M.unEquip(src, 1) //src is being deleted anyway qdel(src) update_icon() - if(istype(loc, /turf)) //start a fire if possible - var/turf/T = loc - T.hotspot_expose(700, 5) - + open_flame() /obj/item/candle/attack_self(mob/user) if(lit) - lit = 0 + user.visible_message( + "[user] snuffs [src].") + lit = FALSE update_icon() SetLuminosity(0) user.AddLuminosity(-CANDLE_LUMINOSITY) @@ -110,7 +111,7 @@ /obj/item/candle/infinite - infinite = 1 - start_lit = 1 + infinite = TRUE + start_lit = TRUE #undef CANDLE_LUMINOSITY diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index c101d2fbb61..79848f024f5 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -1,43 +1,263 @@ + +/* + * Crayons + */ + +/obj/item/toy/crayon + name = "crayon" + desc = "A colourful crayon. Looks tasty. Mmmm..." + icon = 'icons/obj/crayons.dmi' + icon_state = "crayonred" + item_color = "red" + w_class = 1 + attack_verb = list("attacked", "coloured") + var/paint_color = "#FF0000" //RGB + var/drawtype = "rune" + var/text_buffer = "" + var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag") + var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") + var/list/numerals = list("0","1","2","3","4","5","6","7","8","9") + var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer + var/uses = 30 //-1 or less for unlimited uses + var/instant = 0 + var/dat + var/list/validSurfaces = list(/turf/open/floor) + var/gang = 0 //For marking territory + var/edible = 1 + +/obj/item/toy/crayon/suicide_act(mob/user) + user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.") + return (BRUTELOSS|OXYLOSS) + +/obj/item/toy/crayon/New() + ..() + name = "[item_color] crayon" //Makes crayons identifiable in things like grinders + drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]") + if(config) + if(config.mutant_races == 1) + graffiti |= "antilizard" + graffiti |= "prolizard" + +/obj/item/toy/crayon/initialize() + if(config.mutant_races == 1) + graffiti |= "antilizard" + graffiti |= "prolizard" + +/obj/item/toy/crayon/attack_self(mob/living/user) + update_window(user) + +/obj/item/toy/crayon/proc/update_window(mob/living/user) + dat += "

Currently selected: [drawtype]


" + dat += "Random letterPick letter/number" + dat += "Write" + dat += "
" + dat += "

Runes:


" + dat += "Random rune" + for(var/i = 1; i <= 6; i++) + dat += "Rune[i]" + if(!((i + 1) % 3)) //3 buttons in a row + dat += "
" + dat += "
" + graffiti.Find() + dat += "

Graffiti:


" + dat += "Random graffiti" + var/c = 1 + for(var/T in graffiti) + dat += "[T]" + if(!((c + 1) % 3)) //3 buttons in a row + dat += "
" + c++ + dat += "
" + var/datum/browser/popup = new(user, "crayon", name, 300, 500) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + dat = "" + +/obj/item/toy/crayon/proc/crayon_text_strip(text) + var/list/base = char_split(lowertext(text)) + var/list/out = list() + for(var/a in base) + if(a in (letters|numerals)) + out += a + return jointext(out,"") + +/obj/item/toy/crayon/Topic(href, href_list, hsrc) + var/temp = "a" + if(href_list["buffer"]) + text_buffer = crayon_text_strip(stripped_input(usr,"Choose what to write.", "Scribbles",default = text_buffer)) + if(href_list["type"]) + switch(href_list["type"]) + if("random_letter") + temp = pick(letters) + if("letter") + temp = input("Choose what to write.", "Scribbles") in (letters|numerals) + if("random_rune") + temp = "rune[rand(1,6)]" + if("random_graffiti") + temp = pick(graffiti) + else + temp = href_list["type"] + if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) + return + drawtype = temp + update_window(usr) + +/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity) + if(!proximity || !check_allowed_items(target)) return + if(!uses) + user << "There is no more of [src.name] left!" + if(!instant) + qdel(src) + return + if(istype(target, /obj/effect/decal/cleanable)) + target = target.loc + if(is_type_in_list(target,validSurfaces)) + + var/temp = "rune" + if(letters.Find(drawtype)) + temp = "letter" + else if(graffiti.Find(drawtype)) + temp = "graffiti" + else if(numerals.Find(drawtype)) + temp = "number" + + ////////////////////////// GANG FUNCTIONS + var/area/territory + var/gangID + if(gang) + //Determine gang affiliation + gangID = user.mind.gang_datum + + //Check area validity. Reject space, player-created areas, and non-station z-levels. + if(gangID) + territory = get_area(target) + if(territory && (territory.z == ZLEVEL_STATION) && territory.valid_territory) + //Check if this area is already tagged by a gang + if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag + if(territory_claimed(territory, user)) + return + if(locate(/obj/machinery/power/apc) in (user.loc.contents | target.contents)) + user << "You cannot tag here." + return + else + user << "[territory] is unsuitable for tagging." + return + ///////////////////////////////////////// + + var/graf_rot + if(oriented.Find(drawtype)) + switch(user.dir) + if(EAST) + graf_rot = 90 + if(SOUTH) + graf_rot = 180 + if(WEST) + graf_rot = 270 + else + graf_rot = 0 + + user << "You start [instant ? "spraying" : "drawing"] a [temp] on the [target.name]..." + if(instant) + playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) + if((instant>0) || do_after(user, 50, target = target)) + + if(length(text_buffer)) + drawtype = copytext(text_buffer,1,2) + text_buffer = copytext(text_buffer,2) + + //Gang functions + if(gangID) + //Delete any old markings on this tile, including other gang tags + if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag + if(territory_claimed(territory, user)) + return + for(var/obj/effect/decal/cleanable/crayon/old_marking in target) + qdel(old_marking) + new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",graf_rot) + user << "You tagged [territory] for your gang!" + + else + new /obj/effect/decal/cleanable/crayon(target,paint_color,drawtype,temp,graf_rot) + + user << "You finish [instant ? "spraying" : "drawing"] \the [temp]." + if(instant<0) + playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) + if(uses < 0) + return + uses = max(0,uses-1) + if(!uses) + user << "There is no more of [src.name] left!" + if(!instant) + qdel(src) + return + +/obj/item/toy/crayon/attack(mob/M, mob/user) + if(edible && (M == user)) + user << "You take a bite of the [src.name]. Delicious!" + user.nutrition += 5 + if(uses < 0) + return + uses = max(0,uses-5) + if(!uses) + user << "There is no more of [src.name] left!" + qdel(src) + else + ..() + +/obj/item/toy/crayon/proc/territory_claimed(area/territory,mob/user) + var/occupying_gang + for(var/datum/gang/G in ticker.mode.gangs) + if(territory.type in (G.territory|G.territory_new)) + occupying_gang = G.name + break + if(occupying_gang) + user << "[territory] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!" + return 1 + return 0 + + + /obj/item/toy/crayon/red icon_state = "crayonred" paint_color = "#DA0000" - colourName = "red" + item_color = "red" /obj/item/toy/crayon/orange icon_state = "crayonorange" paint_color = "#FF9300" - colourName = "orange" + item_color = "orange" /obj/item/toy/crayon/yellow icon_state = "crayonyellow" paint_color = "#FFF200" - colourName = "yellow" + item_color = "yellow" /obj/item/toy/crayon/green icon_state = "crayongreen" paint_color = "#A8E61D" - colourName = "green" + item_color = "green" /obj/item/toy/crayon/blue icon_state = "crayonblue" paint_color = "#00B7EF" - colourName = "blue" + item_color = "blue" /obj/item/toy/crayon/purple icon_state = "crayonpurple" paint_color = "#DA00FF" - colourName = "purple" + item_color = "purple" /obj/item/toy/crayon/white icon_state = "crayonwhite" paint_color = "#FFFFFF" - colourName = "white" + item_color = "white" /obj/item/toy/crayon/mime icon_state = "crayonmime" desc = "A very sad-looking crayon." paint_color = "#FFFFFF" - colourName = "mime" + item_color = "mime" uses = -1 /obj/item/toy/crayon/mime/attack_self(mob/living/user) @@ -62,7 +282,7 @@ /obj/item/toy/crayon/rainbow icon_state = "crayonrainbow" paint_color = "#FFF000" - colourName = "rainbow" + item_color = "rainbow" uses = -1 /obj/item/toy/crayon/rainbow/attack_self(mob/living/user) @@ -110,12 +330,12 @@ /obj/item/weapon/storage/crayons/update_icon() overlays.Cut() for(var/obj/item/toy/crayon/crayon in contents) - overlays += image('icons/obj/crayons.dmi',crayon.colourName) + overlays += image('icons/obj/crayons.dmi',crayon.item_color) /obj/item/weapon/storage/crayons/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/toy/crayon)) var/obj/item/toy/crayon/C = W - switch(C.colourName) + switch(C.item_color) if("mime") usr << "This crayon is too sad to be contained in this box." return diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index 3ee33acd12f..b3c9fa46254 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -9,7 +9,7 @@ /obj/item/device/pda/clown/Crossed(AM as mob|obj) if (istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - if(M.slip(8, 5, src, NO_SLIP_WHEN_WALKING)) + if(M.slip(0, 6, src, NO_SLIP_WHEN_WALKING)) if (ishuman(M) && (M.real_name != src.owner)) if (istype(src.cartridge, /obj/item/weapon/cartridge/clown)) var/obj/item/weapon/cartridge/clown/cart = src.cartridge @@ -197,4 +197,4 @@ /obj/item/device/pda/geneticist name = "geneticist PDA" default_cartridge = /obj/item/weapon/cartridge/medical - icon_state = "pda-genetics" \ No newline at end of file + icon_state = "pda-genetics" diff --git a/code/game/objects/items/devices/modificationkit.dm b/code/game/objects/items/devices/modificationkit.dm new file mode 100644 index 00000000000..aefc9aca26d --- /dev/null +++ b/code/game/objects/items/devices/modificationkit.dm @@ -0,0 +1,23 @@ +/obj/item/modkit + name = "modification kit" + desc = "A one-use kit, which enables kinetic accelerators to be fired with only one hand, as well as allowing less dextrous races to use the tool." + icon = 'icons/obj/objects.dmi' + icon_state = "modkit" + origin_tech = "programming=2;materials=2;magnets=4" + var/uses = 1 + +/obj/item/modkit/afterattack(obj/item/weapon/gun/energy/kinetic_accelerator/C, mob/user) + ..() + if(!uses) + qdel(src) + return + if(!istype(C)) + user << "This kit can only modify kinetic accelerators!" + return ..() + user <<"You modify the [C], making it less unwieldy." + C.name = "compact [C.name]" + C.weapon_weight = WEAPON_LIGHT + C.trigger_guard = TRIGGER_GUARD_ALLOW_ALL + uses -- + if(!uses) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm index b3335fd4898..043fcd80cb0 100644 --- a/code/game/objects/items/documents.dm +++ b/code/game/objects/items/documents.dm @@ -50,8 +50,8 @@ user << "You have already forged a seal on [src]!" else var/obj/item/toy/crayon/C = O - name = "[C.colourName] secret documents" - icon_state = "docs_[C.colourName]" - forgedseal = C.colourName - user << "You forge the official seal with a [C.colourName] crayon. No one will notice... right?" + name = "[C.item_color] secret documents" + icon_state = "docs_[C.item_color]" + forgedseal = C.item_color + user << "You forge the official seal with a [C.item_color] crayon. No one will notice... right?" update_icon() \ No newline at end of file diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index ce91a198c11..0b5fa01aff8 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -63,6 +63,7 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \ icon_state = "sandbags" singular_name = "sandbag" force = 5 + layer = 2.95 throwforce = 5 w_class = 3 throw_speed = 1 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 0e5d5e3d721..875c8d9de55 100755 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -323,223 +323,6 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced") hitsound = 'sound/weapons/bladeslice.ogg' -/* - * Crayons - */ - -/obj/item/toy/crayon - name = "crayon" - desc = "A colourful crayon. Looks tasty. Mmmm..." - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonred" - w_class = 1 - attack_verb = list("attacked", "coloured") - var/paint_color = "#FF0000" //RGB - var/drawtype = "rune" - var/text_buffer = "" - var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag") - var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") - var/list/numerals = list("0","1","2","3","4","5","6","7","8","9") - var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer - var/uses = 30 //-1 or less for unlimited uses - var/instant = 0 - var/colourName = "red" //for updateIcon purposes - var/dat - var/list/validSurfaces = list(/turf/open/floor) - var/gang = 0 //For marking territory - var/edible = 1 - -/obj/item/toy/crayon/suicide_act(mob/user) - user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.") - return (BRUTELOSS|OXYLOSS) - -/obj/item/toy/crayon/New() - ..() - name = "[colourName] crayon" //Makes crayons identifiable in things like grinders - drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]") - if(config) - if(config.mutant_races == 1) - graffiti |= "antilizard" - graffiti |= "prolizard" - -/obj/item/toy/crayon/initialize() - if(config.mutant_races == 1) - graffiti |= "antilizard" - graffiti |= "prolizard" - -/obj/item/toy/crayon/attack_self(mob/living/user) - update_window(user) - -/obj/item/toy/crayon/proc/update_window(mob/living/user) - dat += "

Currently selected: [drawtype]


" - dat += "Random letterPick letter/number" - dat += "Write" - dat += "
" - dat += "

Runes:


" - dat += "Random rune" - for(var/i = 1; i <= 6; i++) - dat += "Rune[i]" - if(!((i + 1) % 3)) //3 buttons in a row - dat += "
" - dat += "
" - graffiti.Find() - dat += "

Graffiti:


" - dat += "Random graffiti" - var/c = 1 - for(var/T in graffiti) - dat += "[T]" - if(!((c + 1) % 3)) //3 buttons in a row - dat += "
" - c++ - dat += "
" - var/datum/browser/popup = new(user, "crayon", name, 300, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - dat = "" - -/obj/item/toy/crayon/proc/crayon_text_strip(text) - var/list/base = char_split(lowertext(text)) - var/list/out = list() - for(var/a in base) - if(a in (letters|numerals)) - out += a - return jointext(out,"") - -/obj/item/toy/crayon/Topic(href, href_list, hsrc) - var/temp = "a" - if(href_list["buffer"]) - text_buffer = crayon_text_strip(stripped_input(usr,"Choose what to write.", "Scribbles",default = text_buffer)) - if(href_list["type"]) - switch(href_list["type"]) - if("random_letter") - temp = pick(letters) - if("letter") - temp = input("Choose what to write.", "Scribbles") in (letters|numerals) - if("random_rune") - temp = "rune[rand(1,6)]" - if("random_graffiti") - temp = pick(graffiti) - else - temp = href_list["type"] - if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) - return - drawtype = temp - update_window(usr) - -/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity) - if(!proximity || !check_allowed_items(target)) return - if(!uses) - user << "There is no more of [src.name] left!" - if(!instant) - qdel(src) - return - if(istype(target, /obj/effect/decal/cleanable)) - target = target.loc - if(is_type_in_list(target,validSurfaces)) - - var/temp = "rune" - if(letters.Find(drawtype)) - temp = "letter" - else if(graffiti.Find(drawtype)) - temp = "graffiti" - else if(numerals.Find(drawtype)) - temp = "number" - - ////////////////////////// GANG FUNCTIONS - var/area/territory - var/gangID - if(gang) - //Determine gang affiliation - gangID = user.mind.gang_datum - - //Check area validity. Reject space, player-created areas, and non-station z-levels. - if(gangID) - territory = get_area(target) - if(territory && (territory.z == ZLEVEL_STATION) && territory.valid_territory) - //Check if this area is already tagged by a gang - if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag - if(territory_claimed(territory, user)) - return - if(locate(/obj/machinery/power/apc) in (user.loc.contents | target.contents)) - user << "You cannot tag here." - return - else - user << "[territory] is unsuitable for tagging." - return - ///////////////////////////////////////// - - var/graf_rot - if(oriented.Find(drawtype)) - switch(user.dir) - if(EAST) - graf_rot = 90 - if(SOUTH) - graf_rot = 180 - if(WEST) - graf_rot = 270 - else - graf_rot = 0 - - user << "You start [instant ? "spraying" : "drawing"] a [temp] on the [target.name]..." - if(instant) - playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) - if((instant>0) || do_after(user, 50, target = target)) - - if(length(text_buffer)) - drawtype = copytext(text_buffer,1,2) - text_buffer = copytext(text_buffer,2) - - //Gang functions - if(gangID) - //Delete any old markings on this tile, including other gang tags - if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag - if(territory_claimed(territory, user)) - return - for(var/obj/effect/decal/cleanable/crayon/old_marking in target) - qdel(old_marking) - new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",graf_rot) - user << "You tagged [territory] for your gang!" - - else - new /obj/effect/decal/cleanable/crayon(target,paint_color,drawtype,temp,graf_rot) - - user << "You finish [instant ? "spraying" : "drawing"] \the [temp]." - if(instant<0) - playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) - if(uses < 0) - return - uses = max(0,uses-1) - if(!uses) - user << "There is no more of [src.name] left!" - if(!instant) - qdel(src) - return - -/obj/item/toy/crayon/attack(mob/M, mob/user) - if(edible && (M == user)) - user << "You take a bite of the [src.name]. Delicious!" - user.nutrition += 5 - if(uses < 0) - return - uses = max(0,uses-5) - if(!uses) - user << "There is no more of [src.name] left!" - qdel(src) - else - ..() - -/obj/item/toy/crayon/proc/territory_claimed(area/territory,mob/user) - var/occupying_gang - for(var/datum/gang/G in ticker.mode.gangs) - if(territory.type in (G.territory|G.territory_new)) - occupying_gang = G.name - break - if(occupying_gang) - user << "[territory] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!" - return 1 - return 0 - /* * Snap pops */ diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 205336bfb04..520d043a9ba 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -167,6 +167,7 @@ name = "high frequency blade" desc = "Bad references are the DNA of the soul." attack_verb = list("chopped", "sliced", "cut", "zandatsu'd") + hitsound = 'sound/weapons/bladeslice.ogg' /obj/item/weapon/nullrod/hammmer icon_state = "hammeron" diff --git a/code/game/objects/items/weapons/implants/implant_track.dm b/code/game/objects/items/weapons/implants/implant_track.dm index 7443a22ab3e..a0d58369614 100644 --- a/code/game/objects/items/weapons/implants/implant_track.dm +++ b/code/game/objects/items/weapons/implants/implant_track.dm @@ -13,6 +13,13 @@ ..() tracked_implants -= src +/obj/item/weapon/implanter/tracking/New() + imp = new /obj/item/weapon/implant/tracking( src ) + ..() +/obj/item/weapon/implanter/tracking/gps/New() + imp = new /obj/item/device/gps/mining/internal( src ) + ..() + /obj/item/weapon/implant/tracking/get_data() var/dat = {"Implant Specifications:
Name: Tracking Beacon
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 9d3ac9f9fbc..57caedd3424 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -111,6 +111,8 @@ /obj/item/weapon/kitchen/knife/combat/survival name = "survival knife" + icon_state = "survivalknife" + desc = "A hunting grade survival knife." force = 15 throwforce = 15 diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 3cab28cd5f8..d855441b3ec 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -351,6 +351,10 @@ icon_state = "duffle-clown" item_state = "duffle-clown" +/obj/item/weapon/storage/backpack/dufflebag/clown/cream_pie/New() + . = ..() + for(var/i in 1 to 10) + new /obj/item/weapon/reagent_containers/food/snacks/pie/cream(src) /obj/item/weapon/storage/backpack/dufflebag/syndie name = "suspicious looking dufflebag" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 6538bba7f06..03ccef5fd1d 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -57,37 +57,45 @@ return ..() -/obj/item/weapon/storage/box/survival - +// Ordinary survival box /obj/item/weapon/storage/box/survival/New() ..() new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/internals/emergency_oxygen(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) -/obj/item/weapon/storage/box/engineer +/obj/item/weapon/storage/box/survival/radio/New() + ..() + new /obj/item/device/radio/off(src) +// Engineer survival box /obj/item/weapon/storage/box/engineer/New() ..() new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) -/obj/item/weapon/storage/box/syndie +/obj/item/weapon/storage/box/engineer/radio/New() + ..() + new /obj/item/device/radio/off(src) +// Syndie survival box /obj/item/weapon/storage/box/syndie/New() ..() new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src) -/obj/item/weapon/storage/box/security - +// Security survival box /obj/item/weapon/storage/box/security/New() ..() new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/weapon/tank/internals/emergency_oxygen(src) new /obj/item/weapon/reagent_containers/hypospray/medipen(src) +/obj/item/weapon/storage/box/security/radio/New() + ..() + new /obj/item/device/radio/off(src) + /obj/item/weapon/storage/box/gloves name = "box of latex gloves" desc = "Contains sterile latex gloves." @@ -231,6 +239,19 @@ new /obj/item/weapon/implantpad(src) new /obj/item/weapon/locator(src) +/obj/item/weapon/storage/box/minertracker + name = "boxed tracking implant kit" + desc = "For finding those who have died on the accursed lavaworld." + icon_state = "implant" + +/obj/item/weapon/storage/box/minertracker/New() + ..() + for(var/i in 1 to 3) + new /obj/item/weapon/implantcase/tracking(src) + new /obj/item/weapon/implanter(src) + new /obj/item/weapon/implantpad(src) + new /obj/item/weapon/locator(src) + /obj/item/weapon/storage/box/chemimp name = "boxed chemical implant kit" desc = "Box of stuff used to implant chemicals." diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 248f0c7b116..e10c5776a88 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -27,6 +27,7 @@ if(locked) icon_state = icon_locked user << "You lock the [src.name]!" + close_all() return else icon_state = icon_closed diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 83842b332a8..9f7b37c2542 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -290,14 +290,9 @@ remove_fuel(1) update_icon() + //This is to start fires. process() is only called if the welder is on. - var/turf/location = loc - if(ismob(location)) - var/mob/M = location - if(M.l_hand == src || M.r_hand == src) - location = get_turf(M) - if(isturf(location)) - location.hotspot_expose(700, 5) + open_flame() /obj/item/weapon/weldingtool/afterattack(atom/O, mob/user, proximity) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 7298345b61b..7be9a8efa30 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -508,4 +508,7 @@ else owner.visible_message("[owner] parries [attack_text] with [src]!") return 1 - return 0 \ No newline at end of file + return 0 + +/obj/item/weapon/twohanded/vibro_weapon/update_icon() + icon_state = "hfrequency[wielded]" \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index df6f9ce90db..1265b21905c 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -395,7 +395,7 @@ add_fingerprint(user) locked = !locked user.visible_message("[user] [locked ? null : "un"]locks [src].", - "You [locked ? null : "un"]locks [src].") + "You [locked ? null : "un"]lock [src].") update_icon() else user << "Access Denied" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index f84d9889d59..88cb7d65b73 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -61,3 +61,12 @@ new /obj/item/stack/spacecash/c500(src) for(var/i = 0, i < 6, i++) new /obj/item/stack/spacecash/c200(src) + +/obj/structure/closet/secure_closet/freezer/cream_pie + name = "cream pie closet" + desc = "Contains pies filled with cream and/or custard, you sickos." + req_access = list(access_theatre) + +/obj/structure/closet/secure_closet/freezer/pie/New() + ..() + new /obj/item/weapon/reagent_containers/food/snacks/pie/cream(src) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index b699da49dd3..28cc59a701b 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -27,7 +27,9 @@ playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] unfastens [src].", \ "You unfasten [src].") - new /obj/item/sign_backing(get_turf(user)) + var/obj/item/sign_backing/SB = new (get_turf(user)) + SB.icon_state = icon_state + SB.sign_path = type qdel(src) else if(istype(O, /obj/item/weapon/pen)) var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \ @@ -82,11 +84,12 @@ /obj/item/sign_backing name = "sign backing" - desc = "A blank sign with adhesive backing." + desc = "A sign with adhesive backing." icon = 'icons/obj/decals.dmi' icon_state = "backing" w_class = 3 burn_state = FLAMMABLE + var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf /obj/item/sign_backing/afterattack(atom/target, mob/user, proximity) if(isturf(target) && proximity) @@ -94,7 +97,7 @@ user.visible_message("[user] fastens [src] to [T].", \ "You attach a blank sign to [T].") playsound(T, 'sound/items/Deconstruct.ogg', 50, 1) - new /obj/structure/sign/basic(T) + new sign_path(T) user.drop_item() qdel(src) else diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index ea8622dd70b..06b7a07c466 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -101,10 +101,13 @@ var/mob/living/carbon/M = AM switch(wet) if(TURF_WET_WATER) - if(!M.slip(3, 1, null, NO_SLIP_WHEN_WALKING)) + if(!M.slip(0, 3, null, NO_SLIP_WHEN_WALKING)) M.inertia_dir = 0 if(TURF_WET_LUBE) - M.slip(0, 7, null, (SLIDE|GALOSHES_DONT_HELP)) + M.slip(0, 4, null, (SLIDE|GALOSHES_DONT_HELP)) + M.confused += 8 + if(TURF_WET_ICE) + M.slip(0, 6, null, (SLIDE|GALOSHES_DONT_HELP)) if(TURF_WET_ICE || TURF_WET_PERMAFROST) M.slip(0, 4, null, (SLIDE|NO_SLIP_WHEN_WALKING)) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index ee509be5fc9..d7b3be526cd 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -534,7 +534,9 @@ for(var/obj/machinery/capture_the_flag/CTF in machines) ctf_enabled = !CTF.ctf_enabled CTF.ctf_enabled = !CTF.ctf_enabled + CTF.TellGhost() message_admins("[key_name_admin(usr)] has [ctf_enabled? "enabled" : "disabled"] CTF!") + notify_ghosts("CTF has been [ctf_enabled? "enabled" : "disabled"]!",'sound/effects/ghost2.ogg') if(E) E.processing = 0 diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 77dd2e39eee..9da33d33da2 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -26,8 +26,6 @@ var/sound/admin_sound for(var/mob/M in player_list) if(M.client.prefs.toggles & SOUND_MIDI) - var/vol = M.client.prefs.adminmusicvolume - 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! diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index ea4446dcd21..d5b92844f51 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -172,6 +172,16 @@ M.faction += team M.equipOutfit(ctf_gear) +/obj/machinery/capture_the_flag/proc/TellGhost() + if(ctf_enabled) + notify_ghosts("[name] has been activated!", enter_link="(Click to join the [team] team!) or click on the controller directly!", source = src, attack_not_jump = 0) + +/obj/machinery/capture_the_flag/Topic(href, href_list) + if(href_list["join"]) + var/mob/dead/observer/ghost = usr + if(istype(ghost)) + attack_ghost(ghost) + /obj/machinery/capture_the_flag/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/twohanded/required/ctf)) var/obj/item/weapon/twohanded/required/ctf/flag = I @@ -214,6 +224,12 @@ CTF.ctf_gear = CTF.instagib_gear CTF.respawn_cooldown = INSTAGIB_RESPAWN +/obj/machinery/capture_the_flag/proc/normal_mode() + for(var/obj/machinery/capture_the_flag/CTF in machines) + if(CTF.ctf_enabled == TRUE) + CTF.ctf_gear = initial(ctf_gear) + CTF.respawn_cooldown = DEFAULT_RESPAWN + /obj/item/weapon/gun/projectile/automatic/pistol/deagle/CTF desc = "This looks like it could really hurt in melee." force = 75 diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index b554a8a4547..6f5ba2a4d64 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -73,16 +73,16 @@ /obj/machinery/recycler/lumbermill name = "lumbermill saw" desc = "Faster then the cartoons!" - emagged = 2 //Always grinds people + emagged = 2 //Always gibs people + item_recycle_sound = 'sound/weapons/chainsawhit.ogg' -/obj/machinery/recycler/lumbermill/recycle(obj/item/weapon/grown/log/L, sound = 1) - L.loc = src.loc +/obj/machinery/recycler/lumbermill/recycle_item(obj/item/weapon/grown/log/L) if(!istype(L)) return - if(sound) - playsound(src.loc, 'sound/weapons/chainsawhit.ogg', 100, 1) - new L.plank_type(src.loc, 1 + round(L.seed.potency / 25)) - qdel(L) + else + var/potency = L.seed.potency + ..() + new L.plank_type(src.loc, 1 + round(potency / 25)) /mob/living/simple_animal/chicken/rabbit/normal icon_state = "b_rabbit" @@ -130,4 +130,4 @@ spawnableAtoms = list(/obj/structure/flora/rock/icy = 5, /obj/structure/flora/rock/pile/icy = 5) /obj/effect/landmark/mapGenerator/snowy - mapGeneratorType = /datum/mapGenerator/snowy \ No newline at end of file + mapGeneratorType = /datum/mapGenerator/snowy diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index c273fffd217..11e7e46ff87 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -829,6 +829,14 @@ /obj/item/pizzabox/vegetable) crate_name = "pizza crate" +/datum/supply_pack/organic/cream_piee + name = "High-yield Clown-grade Cream Pie Crate" + cost = 6000 + contains = list(/obj/item/weapon/storage/backpack/dufflebag/clown/cream_pie) + crate_name = "party equipment crate" + contraband = TRUE + access = access_theatre + /datum/supply_pack/organic/monkey name = "Monkey Crate" cost = 2000 @@ -1198,7 +1206,9 @@ /obj/item/weapon/folder/red, /obj/item/weapon/folder/yellow, /obj/item/weapon/clipboard, - /obj/item/weapon/clipboard) + /obj/item/weapon/clipboard, + /obj/item/weapon/stamp, + /obj/item/weapon/stamp/denied) crate_name = "bureaucracy crate" /datum/supply_pack/misc/toner diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 333b764203a..22a6805431c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -62,7 +62,6 @@ var/list/preferences_datums = list() var/list/features = list("mcolor" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None") var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") - var/adminmusicvolume = 50 //Mob preview var/icon/preview_icon = null diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b988dd25e1e..1ebfd9ecf5b 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -223,7 +223,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["preferred_map"] >> preferred_map S["ignoring"] >> ignoring S["ghost_hud"] >> ghost_hud - S["adminmusicvolume"] >> adminmusicvolume S["inquisitive_ghost"] >> inquisitive_ghost //try to fix any outdated data if necessary @@ -275,7 +274,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["preferred_map"] << preferred_map S["ignoring"] << ignoring S["ghost_hud"] << ghost_hud - S["adminmusicvolume"] << adminmusicvolume S["inquisitive_ghost"] << inquisitive_ghost return 1 diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 8e8e856b4ae..409a66922c3 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -332,13 +332,4 @@ var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= SOUND_ANNOUNCEMENTS src << "You will now [(prefs.toggles & SOUND_ANNOUNCEMENTS) ? "no longer hear announcements" : "hear announcement sounds"]." prefs.save_preferences() - feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/set_admin_volume() - set name = "Set Admin Music Volume" - set category = "Preferences" - set desc = "Set the volume you hear admin music at." - var/musinput = input("Range of 0 to 100.","Admin Music Volume", prefs.adminmusicvolume) as num - prefs.adminmusicvolume = max(0,min(musinput,100)) - prefs.save_preferences() + feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index bec0742032f..a3856b0ee1c 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -341,7 +341,6 @@ BLIND // can't see anything var/can_adjust = 1 var/adjusted = 0 var/alt_covers_chest = 0 // for adjusted/rolled-down jumpsuits, 0 = exposes chest and arms, 1 = exposes arms only - var/suit_color = null var/obj/item/clothing/tie/hastie = null /obj/item/clothing/under/worn_overlays(var/isinhands = FALSE) @@ -363,7 +362,6 @@ BLIND // can't see anything //make the sensor mode favor higher levels, except coords. sensor_mode = pick(0, 1, 1, 2, 2, 2, 3, 3) adjusted = 0 - suit_color = item_color ..() /obj/item/clothing/under/attackby(obj/item/I, mob/user, params) @@ -482,25 +480,25 @@ BLIND // can't see anything if(!can_adjust) usr << "You cannot wear this suit any differently!" return - if(src.adjusted == 1) - src.fitted = initial(fitted) - src.item_color = initial(item_color) - src.item_color = src.suit_color //colored jumpsuits are shit and break without this - src.body_parts_covered = CHEST|GROIN|LEGS|ARMS - usr << "You adjust the suit back to normal." - src.adjusted = 0 - else - if(src.fitted != FEMALE_UNIFORM_TOP) - src.fitted = NO_FEMALE_UNIFORM - src.item_color += "_d" - if (alt_covers_chest) // for the special snowflake suits that don't expose the chest when adjusted - src.body_parts_covered = CHEST|GROIN|LEGS - else - src.body_parts_covered = GROIN|LEGS + if(toggle_jumpsuit_adjust()) usr << "You adjust the suit to wear it more casually." - src.adjusted = 1 + else + usr << "You adjust the suit back to normal." usr.update_inv_w_uniform() - ..() + +/obj/item/clothing/under/proc/toggle_jumpsuit_adjust() + adjusted = !adjusted + if(adjusted) + if(fitted != FEMALE_UNIFORM_TOP) + fitted = NO_FEMALE_UNIFORM + if (alt_covers_chest) // for the special snowflake suits that don't expose the chest when adjusted + body_parts_covered = CHEST|GROIN|LEGS + else + body_parts_covered = GROIN|LEGS + else + fitted = initial(fitted) + body_parts_covered = CHEST|GROIN|LEGS|ARMS + return adjusted /obj/item/clothing/under/examine(mob/user) ..() diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 154cf6a5d71..dd1875aaead 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -48,6 +48,7 @@ icon_state = "hardhat0_cakehat" item_state = "hardhat0_cakehat" item_color = "cakehat" + hitsound = 'sound/weapons/tap.ogg' flags_inv = HIDEEARS|HIDEHAIR armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) brightness_on = 2 //luminosity when on @@ -69,6 +70,7 @@ force = 15 throwforce = 15 damtype = BURN + hitsound = 'sound/items/Welder.ogg' SSobj.processing |= src /obj/item/clothing/head/hardhat/cakehat/turn_off() @@ -76,6 +78,7 @@ force = 0 throwforce = 0 damtype = BRUTE + hitsound = 'sound/weapons/tap.ogg' SSobj.processing -= src /obj/item/clothing/head/hardhat/cakehat/is_hot() diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 1cce1cd3374..e4019814bce 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -11,8 +11,8 @@ heat_protection = FEET max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - redcoat - item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way. +/obj/item/clothing/shoes/sneakers/black/redcoat + item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way. /obj/item/clothing/shoes/sneakers/brown name = "brown shoes" @@ -20,18 +20,23 @@ icon_state = "brown" item_color = "brown" - captain - item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way. - hop - item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way. - ce - item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way. - rd - item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way. - cmo - item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way. - cmo - item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way. +/obj/item/clothing/shoes/sneakers/brown/captain + item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way. + +/obj/item/clothing/shoes/sneakers/brown/hop + item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way. + +/obj/item/clothing/shoes/sneakers/brown/ce + item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way. + +/obj/item/clothing/shoes/sneakers/brown/rd + item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way. + +/obj/item/clothing/shoes/sneakers/brown/cmo + item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way. + +/obj/item/clothing/shoes/sneakers/brown/qm + item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way. /obj/item/clothing/shoes/sneakers/blue name = "blue shoes" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index fb0339fa62d..9a39b5e07aa 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -115,6 +115,12 @@ put_on_delay = 40 can_hold_items = 1 +/obj/item/clothing/shoes/workboots/mining + name = "mining boots" + desc = "Steel-toed mining boots for mining in hazardous environments. Very good at keeping toes uncrushed." + icon_state = "explorer" + burn_state = FIRE_PROOF + /obj/item/clothing/shoes/cult name = "nar-sian invoker boots" desc = "A pair of boots worn by the followers of Nar-Sie." diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 799b78c276f..16d994bde9c 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -8,7 +8,6 @@ icon_state = initial(C.icon_state) item_state = initial(C.item_state) item_color = initial(C.item_color) - suit_color = initial(C.item_color) /obj/item/clothing/under/color/black name = "black jumpsuit" diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm index 473ad4ebde5..5f481bb2916 100644 --- a/code/modules/food&drinks/food/snacks_egg.dm +++ b/code/modules/food&drinks/food/snacks_egg.dm @@ -27,7 +27,7 @@ /obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W, mob/user, params) if(istype( W, /obj/item/toy/crayon )) var/obj/item/toy/crayon/C = W - var/clr = C.colourName + var/clr = C.item_color if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow"))) usr << "[src] refuses to take on this colour!" diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 40f012af0d3..4f120caf00e 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -188,15 +188,15 @@ var/obj/item/seeds/seed = G.seed var/mob/living/carbon/M = target - var/stun_len = seed.potency * rate + var/stun_len = seed.potency * rate * 0.8 if(istype(G) && ispath(G.trash, /obj/item/weapon/grown)) return if(!istype(G, /obj/item/weapon/grown/bananapeel) && (!G.reagents || !G.reagents.has_reagent("lube"))) stun_len /= 3 - var/stun = max(stun_len * 2, 1) - var/weaken = max(stun_len, 0.5) + var/stun = min(stun_len, 7) + var/weaken = min(stun_len, 7) if(M.slip(stun, weaken, G)) for(var/datum/plant_gene/trait/T in seed.genes) @@ -309,4 +309,4 @@ /datum/plant_gene/trait/maxchem/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc) ..() - G.reagents.maximum_volume *= rate \ No newline at end of file + G.reagents.maximum_volume *= rate diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm index ed87fcae838..3587f6ac6f7 100644 --- a/code/modules/jobs/job_types/cargo_service.dm +++ b/code/modules/jobs/job_types/cargo_service.dm @@ -78,7 +78,7 @@ Shaft Miner belt = /obj/item/device/pda/shaftminer ears = /obj/item/device/radio/headset/headset_cargo - shoes = /obj/item/clothing/shoes/jackboots + shoes = /obj/item/clothing/shoes/workboots/mining gloves = /obj/item/clothing/gloves/color/black uniform = /obj/item/clothing/under/rank/miner/lavaland l_pocket = /obj/item/weapon/reagent_containers/pill/patch/styptic diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 9503ed2808b..47b291d5152 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -296,14 +296,17 @@ 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("Explorer Belt", /obj/item/weapon/storage/belt/mining, 500), + new /datum/data/mining_equipment("Survival Medipen", /obj/item/weapon/reagent_containers/hypospray/medipen/survival, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), - new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 600), + new /datum/data/mining_equipment("Tracking Implant Kit",/obj/item/weapon/storage/box/minertracker, 600), + new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 750), new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750), new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000), new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1000), - new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/hardsuit_jetpack , 2000), + new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/hardsuit_jetpack, 2000), new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000), + new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000), new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000), new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 2500), new /datum/data/mining_equipment("Super Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator/super, 3000), @@ -512,15 +515,31 @@ return FALSE return TRUE +/obj/item/device/wormhole_jaunter/proc/get_destinations(mob/user) + var/list/destinations = list() + + if(isgolem(user)) + for(var/obj/item/device/radio/beacon/B in world) + var/turf/T = get_turf(B) + if(istype(T.loc, /area/ruin/powered/golem_ship)) + destinations += B + + // In the event golem beacon is destroyed, send to station instead + if(destinations.len) + return destinations + + for(var/obj/item/device/radio/beacon/B in world) + var/turf/T = get_turf(B) + if(T.z == ZLEVEL_STATION) + destinations += B + + return destinations + /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 + var/list/L = get_destinations(user) if(!L.len) user << "The [src.name] found no beacons in the world to anchor a wormhole to." return @@ -1124,44 +1143,32 @@ /obj/machinery/mineral/equipment_vendor/golem name = "golem ship equipment vendor" - desc = "A modified mining equipment vendor. It seems a few selections were replaced." - prize_list = list( - new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 50), - new /datum/data/mining_equipment("Stimpack Bundle", /obj/item/weapon/storage/box/medipens/utility, 200), - new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 100), - new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/premium,100), - new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200), - new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), - new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 300), - 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("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), - new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), - new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 800), - new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800), - new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000), - new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1000), - new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), - new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000), - new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 2500), - new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500), - new /datum/data/mining_equipment("Mining Drone", /mob/living/simple_animal/hostile/mining_drone, 800), - new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/device/mine_bot_ugprade, 400), - new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/device/mine_bot_ugprade/health, 400), - new /datum/data/mining_equipment("Drone Ranged Upgrade", /obj/item/device/mine_bot_ugprade/cooldown, 600), - new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000), - new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/weapon/storage/box/rndboards, 2000), - ) /obj/machinery/mineral/equipment_vendor/golem/New() ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem(null) - B.apply_default_parts(src) + desc += "\nIt seems a few selections have been added." + prize_list += list( + new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), + 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("Sulphuric Acid", /obj/item/weapon/reagent_containers/glass/beaker/sulphuric, 500), + new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), + new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), + new /datum/data/mining_equipment("Modification Kit", /obj/item/modkit, 1700), + new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/weapon/storage/box/rndboards, 2000), + + ) + + + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem(null) + 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/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + RefreshParts() /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem name = "circuit board (Golem Ship Equipment Vendor)" build_path = /obj/machinery/mineral/equipment_vendor/golem + diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index f90b1caa4e1..403e9248a2c 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -4,6 +4,7 @@ name = "rock" icon = 'icons/turf/mining.dmi' icon_state = "rock" + var/smooth_icon = 'icons/turf/smoothrocks.dmi' smooth = SMOOTH_MORE|SMOOTH_BORDER canSmoothWith = list (/turf/closed/mineral, /turf/closed/wall) baseturf = /turf/open/floor/plating/asteroid/airless @@ -14,7 +15,7 @@ layer = MOB_LAYER + 0.05 temperature = TCMB var/environment_type = "asteroid" - var/turf/open/floor/plating/asteroid/turf_type = /turf/open/floor/plating/asteroid/airless + var/turf/open/floor/plating/turf_type = /turf/open/floor/plating/asteroid/airless var/mineralType = null var/mineralAmt = 3 var/spread = 0 //will the seam spread? @@ -26,7 +27,7 @@ /turf/closed/mineral/New() pixel_y = -4 pixel_x = -4 - icon = 'icons/turf/smoothrocks.dmi' + icon = smooth_icon ..() if (mineralType && mineralAmt && spread && spreadChance) for(var/dir in cardinal) @@ -707,3 +708,56 @@ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = "o2=14;n2=23;TEMP=300" defer_change = 1 + + +//BECAUSE ONE PLANET WASNT ENOUGH + +/turf/closed/mineral/ash_rock //wall piece + pixel_y = -4 + pixel_x = -4 + name = "rock" + icon = 'icons/turf/mining.dmi' + smooth_icon = 'icons/turf/walls/rock_wall.dmi' + icon_state = "rock" + smooth = SMOOTH_MORE|SMOOTH_BORDER + canSmoothWith = list (/turf/closed/mineral, /turf/closed/wall) + baseturf = /turf/open/floor/plating/ash + initial_gas_mix = "o2=14;n2=23;TEMP=300" + environment_type = "waste" + turf_type = /turf/open/floor/plating/ash + defer_change = 1 + +/turf/open/floor/plating/ash + pixel_y = -4 + pixel_x = -4 + icon = 'icons/turf/mining.dmi' + name = "ash" + icon_state = "ash" + smooth = SMOOTH_MORE|SMOOTH_BORDER + canSmoothWith = list (/turf/open/floor/plating/ash, /turf/closed) + var/smooth_icon = 'icons/turf/floors/ash.dmi' + desc = "The ground is covered in volcanic ash." + baseturf = /turf/open/floor/plating/ash //I assume this will be a chasm eventually, once this becomes an actual surface + slowdown = 1 + initial_gas_mix = "o2=14;n2=23;TEMP=300" + +/turf/open/floor/plating/ash/New() + pixel_y = -4 + pixel_x = -4 + icon = smooth_icon + ..() + +/turf/open/floor/plating/ash/break_tile() + return + +/turf/open/floor/plating/ash/burn_tile() + return + +/turf/open/floor/plating/ash/rocky + name = "rocky ground" + icon_state = "rockyash" + icon = 'icons/turf/mining.dmi' + smooth_icon = 'icons/turf/floors/rocky_ash.dmi' + slowdown = 0 + smooth = SMOOTH_MORE|SMOOTH_BORDER + canSmoothWith = list (/turf/open/floor/plating/ash/rocky, /turf/closed) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 040046a08dd..a172564fb67 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -122,8 +122,6 @@ var/const/MAX_ACTIVE_TIME = 400 return 0 if(M.getorgan(/obj/item/organ/body_egg/alien_embryo)) return 0 - if(loc == M) - return 0 if(stat != CONSCIOUS) return 0 if(!sterile) M.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 761355fd6e6..e81fec5df86 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -119,11 +119,11 @@ if(health >= 0) if(lying) - M.visible_message("[M] shakes [src] trying to get \him up!", \ - "You shake [src] trying to get \him up!") + M.visible_message("[M] shakes [src] trying to get them up!", \ + "You shake [src] trying to get them up!") else - M.visible_message("[M] hugs [src] to make \him feel better!", \ - "You hug [src] to make \him feel better!") + M.visible_message("[M] hugs [src] to make them feel better!", \ + "You hug [src] to make them feel better!") AdjustSleeping(-5) AdjustParalysis(-3) AdjustStunned(-3) @@ -212,7 +212,8 @@ var/atom/movable/item = src.get_active_hand() - if(!item || (item.flags & NODROP)) return + if(!item || (item.flags & (NODROP|ABSTRACT))) + return if(istype(item, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = item diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b8c454bdc41..54b4c3b39ba 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -155,7 +155,7 @@ take_overall_damage(b_loss,f_loss) //attempt to dismember bodyparts - if(severity >= 2 || !bomb_armor) + if(severity <= 2 || !bomb_armor) var/max_limb_loss = round(4/severity) //so you don't lose four limbs at severity 3. for(var/X in bodyparts) var/obj/item/bodypart/BP = X diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 9b0f635152f..886e0abc115 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -443,7 +443,7 @@ darksight = 3 say_mod = "gibbers" sexes = 0 - specflags = list(NOBLOOD,NOBREATH,VIRUSIMMUNE) + specflags = list(NOBLOOD,NOBREATH,VIRUSIMMUNE,NOGUNS) mutant_organs = list(/obj/item/organ/tongue/abductor) var/scientist = 0 // vars to not pollute spieces list with castes var/agent = 0 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 6cb5cda6feb..e4dc7968ec3 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -175,16 +175,18 @@ Please contact me on #coderbus IRC. ~Carnie x var/obj/item/clothing/under/U = w_uniform if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) //if the inventory is open ... - w_uniform.screen_loc = ui_iclothing //...draw the item in the inventory screen + U.screen_loc = ui_iclothing //...draw the item in the inventory screen client.screen += w_uniform //Either way, add the item to the HUD if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) return - var/t_color = w_uniform.item_color + var/t_color = U.item_color if(!t_color) - t_color = w_uniform.icon_state + t_color = U.icon_state + if(U.adjusted) + t_color = "[t_color]_d" var/image/standing diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index a21e2bd2bf5..b94d3db30a2 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -371,18 +371,37 @@ The proc would return a human next to the bot to be set to the patient var. Pass the desired type path itself, declaring a temporary var beforehand is not required. */ /mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE) - var/final_result - for (var/scan in shuffle(view(scan_range, src))) //Search for something in range! - if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! - continue //If not, keep searching! - if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness - continue - var/scan_result = process_scan(scan) //Some bots may require additional processing when a result is selected. - if(scan_result) - final_result = scan_result - else - continue //The current element failed assessment, move on to the next. - return final_result + var/turf/T = get_turf(src) + if(!T) + return + var/list/adjacent = T.GetAtmosAdjacentTurfs(1) + for(var/scan in adjacent)//Let's see if there's something right next to us first! + var/final_result = checkscan(scan,scan_type,old_target) + if(final_result) + return final_result + + for (var/scan in shuffle(view(scan_range, src))-adjacent) //Search for something in range! + var/final_result = checkscan(scan,scan_type,old_target) + if(final_result) + return final_result + +/mob/living/simple_animal/bot/proc/checkscan(scan, scan_type, old_target) + if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! + return 0 //If not, keep searching! + if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness + return 0 + var/turf/T = get_turf(scan) + if(T) + for(var/C in T.contents) + if(istype(C,src.type) && (C != src)) //Is there another bot there already? If so, let's skip it so we dont all atack on top of eachother. + return 0 + var/scan_result = process_scan(scan) //Some bots may require additional processing when a result is selected. + if(scan_result) + return scan_result + else + return 0 //The current element failed assessment, move on to the next. + return + //When the scan finds a target, run bot specific processing to select it for the next step. Empty by default. /mob/living/simple_animal/bot/proc/process_scan(scan_target) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index c7ed281b154..f1d0ececa64 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -24,6 +24,8 @@ pressure_resistance = 200 unique_name = 1 AIStatus = AI_OFF //normal constructs don't have AI + loot = list(/obj/item/weapon/ectoplasm) + del_on_death = 1 var/list/construct_spells = list() var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." @@ -34,12 +36,8 @@ AddSpell(new spell(null)) /mob/living/simple_animal/hostile/construct/death() - ..(1) - new /obj/item/weapon/ectoplasm (src.loc) - visible_message("[src] collapses in a shattered heap.") - ghostize() - qdel(src) - return + deathmessage = "[src] collapses in a shattered heap." + ..() /mob/living/simple_animal/hostile/construct/examine(mob/user) var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" @@ -183,12 +181,12 @@ /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ - use magic missile, repair allied constructs (by clicking on them), \ + use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \ and, most important of all, create new constructs by producing soulstones to capture souls, \ and shells to place those soulstones into." /mob/living/simple_animal/hostile/construct/builder/Found(atom/A) //what have we found here? - if(istype(A, /mob/living/simple_animal/hostile/construct)) //is it a construct? + if(isconstruct(A)) //is it a construct? var/mob/living/simple_animal/hostile/construct/C = A if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is return 1 @@ -207,7 +205,7 @@ ..() if(isliving(target)) var/mob/living/L = target - if(istype(L, /mob/living/simple_animal/hostile/construct) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it + if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it LoseTarget() return 0 if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you @@ -216,7 +214,7 @@ /mob/living/simple_animal/hostile/construct/builder/Aggro() ..() - if(istype(target, /mob/living/simple_animal/hostile/construct)) //oh the target is a construct no need to flee + if(isconstruct(target)) //oh the target is a construct no need to flee retreat_distance = null minimum_distance = 1 @@ -229,11 +227,6 @@ AIStatus = AI_ON environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP - - - - - /////////////////////////////Non-cult Artificer///////////////////////// /mob/living/simple_animal/hostile/construct/builder/noncult construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 951868c61ca..08b8c31d199 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -43,6 +43,7 @@ damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) staticOverlays = list() hud_possible = list(DIAG_STAT_HUD, DIAG_HUD, ANTAG_HUD) + unique_name = TRUE var/staticChoice = "static" var/list/staticChoices = list("static", "blank", "letter", "animal") var/picked = FALSE //Have we picked our visual appearence (+ colour if applicable) @@ -64,10 +65,7 @@ var/datum/personal_crafting/handcrafting /mob/living/simple_animal/drone/New() - ..() - if(name != initial(name)) - name = name + " ([rand(100,999)])" - real_name = name + . = ..() access_card = new /obj/item/weapon/card/id(src) var/datum/job/captain/C = new /datum/job/captain diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index f37da30e127..c93310b4d22 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -54,6 +54,17 @@ ..() desc += " This drone appears to have a complex holoprojector built on its 'head'." +/mob/living/simple_animal/drone/snowflake/bardrone + name = "Bardrone" + desc = "A barkeeping drone, an indestructible robot built to tend bars." + seeStatic = FALSE + laws = "1. Serve drinks.\n\ + 2. Talk to patrons.\n\ + 3. Don't get messed up in their affairs." + languages = ALL + status_flags = GODMODE // Please don't punch the barkeeper + unique_name = FALSE // disables the (123) number suffix + /obj/item/drone_shell/syndrone name = "syndrone shell" desc = "A shell of a syndrone, a modified maintenance drone designed to infiltrate and annihilate." diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index cc9b4cb9f84..c6b108c951a 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -61,7 +61,7 @@ if(ishuman(user)) - if(stat == DEAD) + if(stat == DEAD || status_flags & GODMODE) ..() return if(user.get_active_hand()) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 0267d112d90..652bea72c7c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -12,6 +12,7 @@ icon = 'icons/mob/lavaland/dragon.dmi' faction = list("mining") speak_emote = list("roars") + luminosity = 3 armour_penetration = 40 melee_damage_lower = 40 melee_damage_upper = 40 @@ -28,6 +29,7 @@ var/anger_modifier = 0 var/obj/item/device/gps/internal var/swooping = 0 + var/swoop_cooldown = 0 deathmessage = "collapes into a pile of bones, it's flesh sloughing away." death_sound = 'sound/magic/demon_dies.ogg' damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) @@ -41,6 +43,13 @@ return else ..() + if(isliving(target)) + var/mob/living/L = target + if(L.stat == DEAD) + L.gib() + visible_message("[src] devours [L]!") + src << "You feast on [L], restoring your health!" + adjustBruteLoss(-L.maxHealth) /mob/living/simple_animal/hostile/megafauna/dragon/Process_Spacemove(movement_dir = 0) return 1 @@ -51,16 +60,27 @@ name = "fireball" desc = "Get out of the way!" layer = 6 - dir = SOUTH + randomdir = 0 + duration = 10 pixel_z = 500 - anchored = 1 /obj/effect/overlay/temp/target icon = 'icons/mob/actions.dmi' icon_state = "sniper_zoom" layer = MOB_LAYER - 0.1 - anchored = 1 luminosity = 2 + duration = 10 + +/obj/effect/overlay/temp/dragon_swoop + name = "certain death" + desc = "Don't just stand there, move!" + icon = 'icons/effects/96x96.dmi' + icon_state = "rune_large" + layer = MOB_LAYER - 0.1 + pixel_x = -32 + pixel_y = -32 + color = "#FF0000" + duration = 10 /obj/effect/overlay/temp/target/ex_act() return @@ -81,8 +101,8 @@ anger_modifier = Clamp(((maxHealth - health)/50),0,20) ranged_cooldown = world.time + ranged_cooldown_time - if(prob(15 + anger_modifier)) - if(health < maxHealth/2 && !client) + if(prob(15 + anger_modifier) && !client) + if(health < maxHealth/2) swoop_attack(1) else fire_rain() @@ -103,33 +123,36 @@ if(prob(10)) new /obj/effect/overlay/temp/target(turf) - /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_walls() var/list/attack_dirs = list(NORTH,EAST,SOUTH,WEST) if(prob(50)) attack_dirs = list(NORTH,WEST,SOUTH,EAST) playsound(get_turf(src),'sound/magic/Fireball.ogg', 200, 1) - spawn(0) - for(var/d in attack_dirs) + for(var/d in attack_dirs) + spawn(0) var/turf/E = get_edge_target_turf(src, d) var/range = 10 for(var/turf/open/J in getline(src,E)) if(!range) break range-- - PoolOrNew(/obj/effect/hotspot,J) J.hotspot_expose(700,50,1) for(var/mob/living/L in J) if(L != src) L.adjustFireLoss(20) L << "You're hit by the drake's fire breath!" + sleep(1) -/mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(fire_rain = 0) +/mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(fire_rain = 0, atom/movable/manual_target) if(stat) return - var/mob/living/swoop_target = target + var/swoop_target + if(manual_target) + swoop_target = manual_target + else + swoop_target = target stop_automated_movement = TRUE swooping = 1 icon_state = "swoop" @@ -150,9 +173,10 @@ else tturf = get_turf(src) src.loc = tturf + new/obj/effect/overlay/temp/dragon_swoop(tturf) animate(src, pixel_x = 0, pixel_z = 0, time = 10) sleep(10) - playsound(src, 'sound/effects/meteorimpact.ogg', 200, 1) + playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1) for(var/mob/living/L in range(1,tturf)) if(L == src) continue @@ -170,6 +194,19 @@ stop_automated_movement = FALSE swooping = 0 density = 1 + swoop_cooldown = world.time + 200 + + + + +/mob/living/simple_animal/hostile/megafauna/dragon/AltClickOn(atom/movable/A) + if(!istype(A)) + return + if(swoop_cooldown >= world.time) + src << "You need to wait 20 seconds between swoop attacks!" + return + swoop_attack(1, A) + /obj/item/device/gps/internal/dragon icon_state = null @@ -228,8 +265,8 @@ /mob/living/simple_animal/hostile/megafauna/dragon/lesser name = "lesser ash drake" - maxHealth = 500 - health = 500 + maxHealth = 750 + health = 750 melee_damage_upper = 30 melee_damage_lower = 30 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) @@ -248,21 +285,15 @@ return var/mob/living/carbon/human/H = user - var/random = rand(1,5) + var/random = rand(1,3) switch(random) if(1) - user << "The blood sears your insides! What the hell were you thinking?" - user.reagents.add_reagent("hellwater", 50) - if(2) user << "Other than tasting terrible, nothing really happens." - if(3) + if(2) user << "Your flesh begins to melt! Miraculously, you seem fine otherwise." H.set_species(/datum/species/skeleton) - if(4) - user << "The blood mixes with your own, filling your veins with a pulsing fire." - H.dna.species.coldmod = 0 - if(5) + if(3) user << "You don't feel so good..." H.ForceContractDisease(new /datum/disease/transformation/dragon(0)) playsound(user.loc,'sound/items/drink.ogg', rand(10,50), 1) @@ -318,15 +349,11 @@ /obj/structure/closet/crate/necropolis/dragon/New() ..() - var/loot = rand(1,4) + var/loot = rand(1,3) switch(loot) if(1) - for(var/i in 1 to 10) - new /obj/item/weapon/ore/diamond(src) - new /obj/item/weapon/ore/gold(src) - if(2) new /obj/item/weapon/melee/ghost_sword(src) - if(3) + if(2) new /obj/item/weapon/dragons_blood(src) - if(4) + if(3) new /obj/item/weapon/lava_staff(src) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 6a273d83b3e..8a846d02623 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -3,6 +3,7 @@ desc = "Attack the weak point for massive damage." health = 1000 maxHealth = 1000 + a_intent = "harm" sentience_type = SENTIENCE_BOSS environment_smash = 4 robust_searching = 1 diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 955ccacb23d..f2164eec7b9 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -26,16 +26,28 @@ faction = list("cult") status_flags = CANPUSH flying = 1 + loot = list(/obj/item/weapon/ectoplasm) + del_on_death = 1 /mob/living/simple_animal/shade/death() - ..(1) - new /obj/item/weapon/ectoplasm (src.loc) - visible_message("[src] lets out a contented sigh as their form unwinds.") - ghostize() - qdel(src) - return + deathmessage = "[src] lets out a contented sigh as their form unwinds." + ..() +/mob/living/simple_animal/shade/Process_Spacemove(movement_dir = 0) + return TRUE //this doesn't make much sense; you'd thing TRUE would mean it'd process spacemove but it means it doesn't + +/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M) + if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) + if(health < maxHealth) + adjustHealth(-25) + Beam(M,icon_state="sendbeam",icon='icons/effects/effects.dmi',time=4) + M.visible_message("[M] heals \the [src].", \ + "You heal [src], leaving [src] at [health]/[maxHealth] health.") + else + M << "You cannot heal [src], as it is unharmed!" + else if(src != M) + ..() /mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri if(istype(O, /obj/item/device/soulstone)) @@ -43,4 +55,3 @@ SS.transfer_soul("SHADE", src, user) else ..() - return diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 7f67ef9e3d3..43a8e5fce22 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -23,7 +23,7 @@ qdel(src) return -1 target = nOwner.mind - update_text(nOwner) + update_text() /obj/item/weapon/paper/contract/employment/update_text() diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 1280fdb3d8c..53096240c8f 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -67,7 +67,7 @@ var/copy_as_paper = 1 if(istype(copy, /obj/item/weapon/paper/contract/employment)) var/obj/item/weapon/paper/contract/employment/E = copy - var/obj/item/weapon/paper/contract/employment/C = new /obj/item/weapon/paper/contract/employment (loc, E.target) + var/obj/item/weapon/paper/contract/employment/C = new /obj/item/weapon/paper/contract/employment (loc, E.target.current) if(C) copy_as_paper = 0 if(copy_as_paper) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 36204ae1fc6..656bc0c7d8e 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -72,25 +72,35 @@ // Syndicate stamp to forge documents. +/obj/item/weapon/stamp/chameleon + actions_types = list(/datum/action/item_action/toggle) + /obj/item/weapon/stamp/chameleon/attack_self(mob/user) var/list/stamp_types = typesof(/obj/item/weapon/stamp) - src.type // Get all stamp types except our own - var/list/stamps = list() + var/list/stamp_names = list() // Generate them into a list - for(var/stamp_type in stamp_types) - var/obj/item/weapon/stamp/S = new stamp_type - stamps[capitalize(S.name)] = S + for(var/i in stamp_types) + var/obj/item/weapon/stamp/stamp_type = i + stamp_names += initial(stamp_type.name) - var/list/show_stamps = list("EXIT" = null) + sortList(stamps) // the list that will be shown to the user to pick from + stamp_names = sortList(stamp_names) + // the list that will be shown to the user to pick from + world << jointext(stamp_names, ",") - var/input_stamp = input(user, "Choose a stamp to disguise as.", "Choose a stamp.") in show_stamps + var/input_stamp = input(user, "Choose a stamp to disguise as.", + "Choose a stamp.") as null|anything in stamp_names + world << input_stamp - if(user && src in user.contents) + if(user && (src in user.contents) && input_stamp) + var/obj/item/weapon/stamp/stamp_type + for(var/i in stamp_types) + stamp_type = i + if(initial(stamp_type.name) == input_stamp) + break + world << stamp_type - var/obj/item/weapon/stamp/chosen_stamp = stamps[capitalize(input_stamp)] - - if(chosen_stamp) - name = chosen_stamp.name - icon_state = chosen_stamp.icon_state - item_color = chosen_stamp.item_color \ No newline at end of file + name = initial(stamp_type.name) + icon_state = initial(stamp_type.icon_state) + item_color = initial(stamp_type.item_color) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 6ee2f2308b2..9d1f29ce38b 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -289,24 +289,41 @@ if (modified) icon_state = "foamdart_empty" desc = "Its nerf or nothing! ... Although, this one doesn't look too safe." + if(BB) + BB.icon_state = "foamdart_empty" + else + icon_state = "foamdart" + desc = "Its nerf or nothing! Ages 8 and up." + if(BB) + BB.icon_state = "foamdart_empty" + /obj/item/ammo_casing/caseless/foam_dart/attackby(obj/item/A, mob/user, params) ..() + var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB if (istype(A, /obj/item/weapon/screwdriver) && !modified) modified = 1 - BB.damage_type = BRUTE - icon_state = "foamdart_empty" - desc = "Its nerf or nothing! ... Although, this one doesn't look too safe." - user << "You pop the safety cap off of [src]." - else if ((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) + FD.damage_type = BRUTE + update_icon() + else if ((istype(A, /obj/item/weapon/pen)) && modified && !FD.pen) if(!user.unEquip(A)) return - A.loc = BB - BB.damage = 5 - BB.nodamage = 0 + A.loc = FD + FD.pen = A + FD.damage = 5 + FD.nodamage = 0 user << "You insert [A] into [src]." return +/obj/item/ammo_casing/caseless/foam_dart/attack_self(mob/living/user) + var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB + if(FD.pen) + FD.damage = initial(FD.damage) + FD.nodamage = initial(FD.nodamage) + user.put_in_hands(FD.pen) + user << "You remove [FD.pen] from [src]." + FD.pen = null + /obj/item/ammo_casing/caseless/foam_dart/riot name = "riot foam dart" desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm index cf008e00ec1..7465de12b04 100644 --- a/code/modules/projectiles/firing.dm +++ b/code/modules/projectiles/firing.dm @@ -37,6 +37,7 @@ var/turf/curloc = user.loc if (!istype(targloc) || !istype(curloc) || !BB) return 0 + BB.ammo_casing = src if(targloc == curloc) if(target) //if the target is right on our location we go straight to bullet_act() target.bullet_act(BB, BB.def_zone) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 25a8fa2a00b..69d6b980422 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1,11 +1,3 @@ - #define SAWN_INTACT 0 - #define SAWN_OFF 1 - #define SAWN_SAWING -1 - - #define WEAPON_LIGHT 0 - #define WEAPON_MEDIUM 1 - #define WEAPON_HEAVY 2 - /obj/item/weapon/gun name = "gun" desc = "It's a gun. It's pretty terrible, though." diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 128b4eac077..e6bcc070ea9 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -87,6 +87,9 @@ /obj/item/weapon/gun/magic/wand/resurrection/zap_self(mob/living/user) user.revive(full_heal = 1) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.regenerate_limbs() user << "You feel great!" charges-- ..() @@ -162,4 +165,4 @@ /obj/item/weapon/gun/magic/wand/fireball/zap_self(mob/living/user) explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) charges-- - ..() \ No newline at end of file + ..() diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index 419e9fdcb25..612206fe4ae 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -103,6 +103,8 @@ return /obj/item/weapon/gun/medbeam/proc/on_beam_tick(var/mob/living/target) + if(target.health != target.maxHealth) + PoolOrNew(/obj/effect/overlay/temp/heal, list(get_turf(target), "#80F5FF")) target.adjustBruteLoss(-4) target.adjustFireLoss(-4) return diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index beb3c06dab7..9b8e75bb6ef 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -211,8 +211,7 @@ suit_requirement = /obj/item/clothing/suit/bluetag tagcolor = "blue" - /obj/item/device/firing_pin/Destroy() if(gun) gun.pin = null - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4f9408f1f06..fab3be9313b 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -10,6 +10,7 @@ pressure_resistance = INFINITY var/def_zone = "" //Aiming at var/mob/firer = null//Who shot it + var/obj/item/ammo_casing/ammo_casing = null var/suppressed = 0 //Attack message var/yo = null var/xo = null @@ -139,3 +140,8 @@ ..() if(isliving(AM) && AM.density && !checkpass(PASSMOB)) Bump(AM, 1) + +/obj/item/projectile/Destroy() + if(ammo_casing) + qdel(ammo_casing) + return ..() diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 345ddad0d85..cbe4524c9f9 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -57,6 +57,9 @@ if(target.hellbound) return if(ismob(target)) + if(iscarbon(target)) + var/mob/living/carbon/C = target + C.regenerate_limbs() if(target.revive(full_heal = 1)) if(!target.ckey) for(var/mob/dead/observer/ghost in player_list) diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm index 321ae1c6b42..216b24e570a 100644 --- a/code/modules/projectiles/projectile/reusable.dm +++ b/code/modules/projectiles/projectile/reusable.dm @@ -1,26 +1,22 @@ /obj/item/projectile/bullet/reusable name = "reusable bullet" desc = "How do you even reuse a bullet?" - var/obj/item/ammo_casing/caseless/ammo_type = /obj/item/ammo_casing/caseless/ + var/ammo_type = /obj/item/ammo_casing/caseless/ + var/dropped = 0 /obj/item/projectile/bullet/reusable/on_hit(atom/target, blocked = 0) . = ..() - if (src.contents.len) - var/obj/content - for(content in src.contents) - content.loc = src.loc - else - new ammo_type(src.loc) + handle_drop() /obj/item/projectile/bullet/reusable/on_range() - if (src.contents.len) - var/obj/content - for(content in src.contents) - content.loc = src.loc - else - new ammo_type(src.loc) + handle_drop() ..() +/obj/item/projectile/bullet/reusable/proc/handle_drop() + if(!dropped) + new ammo_type(src.loc) + dropped = 1 + /obj/item/projectile/bullet/reusable/magspear name = "magnetic spear" desc = "WHITE WHALE, HOLY GRAIL" @@ -38,9 +34,32 @@ icon_state = "foamdart" ammo_type = /obj/item/ammo_casing/caseless/foam_dart range = 10 + var/obj/item/weapon/pen/pen = null + +/obj/item/projectile/bullet/reusable/foam_dart/handle_drop() + if(dropped) + return + dropped = 1 + var/obj/item/ammo_casing/caseless/foam_dart/newdart = new ammo_type(src.loc) + var/obj/item/ammo_casing/caseless/foam_dart/old_dart = ammo_casing + newdart.modified = old_dart.modified + if(pen) + var/obj/item/projectile/bullet/reusable/foam_dart/newdart_FD = newdart.BB + newdart_FD.pen = pen + pen.loc = newdart_FD + pen = null + newdart.BB.damage = damage + newdart.BB.nodamage = nodamage + newdart.BB.damage_type = damage_type + newdart.update_icon() + +/obj/item/projectile/bullet/reusable/foam_dart/Destroy() + if(pen) + qdel(pen) + return ..() /obj/item/projectile/bullet/reusable/foam_dart/riot name = "riot foam dart" icon_state = "foamdart_riot" ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - stamina = 25 \ No newline at end of file + stamina = 25 diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 090942bf0e6..e8d1aebe14a 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -120,3 +120,11 @@ volume = 60 amount_per_transfer_from_this = 30 list_reagents = list("atropine" = 10, "epinephrine" = 10, "salbutamol" = 20, "spaceacillin" = 20) + +/obj/item/weapon/reagent_containers/hypospray/medipen/survival + name = "survival medipen" + desc = "A medipen for surviving in the harshest of environments, heals and protects from environmental hazards. " + icon_state = "stimpen" + volume = 80 + amount_per_transfer_from_this = 80 + list_reagents = list("salbutamol" = 10, "coffee" = 20, "leporazine" = 20, "tricordrazine" = 15, "epinephrine" = 10, "omnizine" = 5) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 02b9a48b25a..60869979e71 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -177,6 +177,16 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/pickaxe/drill/jackhammer category = list("Mining Designs") +/datum/design/modkit + name = "Modification Kit" + desc = "A device which allows kinetic accelerators to be wielded with one hand, and by any organism." + id = "modkit" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/modkit + category = list("Mining Designs") + /datum/design/superaccelerator name = "Super-Kinetic Accelerator" desc = "An upgraded version of the proto-kinetic accelerator, with superior damage, speed and range." diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 994b66d0b86..3a8d86d9794 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -111,6 +111,8 @@ S.loc = remote_eye.loc S.visible_message("[S] warps in!") X.stored_slimes -= S + else + owner << "Target is not near a camera. Cannot proceed." /datum/action/innate/slime_pick_up name = "Pick up Slime" @@ -133,6 +135,8 @@ S.visible_message("[S] vanishes in a flash of light!") S.loc = X X.stored_slimes += S + else + owner << "Target is not near a camera. Cannot proceed." /datum/action/innate/feed_slime @@ -152,6 +156,8 @@ food.LAssailant = C X.monkeys -- owner << "[X] now has [X.monkeys] monkeys left." + else + owner << "Target is not near a camera. Cannot proceed." /datum/action/innate/monkey_recycle @@ -171,3 +177,5 @@ M.visible_message("[M] vanishes as they are reclaimed for recycling!") X.monkeys = round(X.monkeys + 0.2,0.1) qdel(M) + else + owner << "Target is not near a camera. Cannot proceed." diff --git a/code/modules/ruins/ruin_areas.dm b/code/modules/ruins/ruin_areas.dm index ad9688b1625..c6953575bb2 100644 --- a/code/modules/ruins/ruin_areas.dm +++ b/code/modules/ruins/ruin_areas.dm @@ -17,16 +17,17 @@ + //Areas /area/ruin/unpowered/no_grav/way_home name = "\improper Salvation" icon_state = "away" - - /area/ruin/powered/snow_biodome +/area/ruin/powered/golem_ship + name = "Free Golem Ship" // Ruins of "onehalf" ship /area/ruin/onehalf/hallway diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index e1d602c42d0..266add1b1c5 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -284,7 +284,7 @@ /obj/item/bodypart/l_arm name = "left arm" icon_state = "l_arm" - max_damage = 60 + max_damage = 50 body_zone ="l_arm" body_part = ARM_LEFT px_x = -6 @@ -293,7 +293,7 @@ /obj/item/bodypart/r_arm name = "right arm" icon_state = "r_arm" - max_damage = 60 + max_damage = 50 body_zone = "r_arm" body_part = ARM_RIGHT px_x = 6 @@ -302,7 +302,7 @@ /obj/item/bodypart/l_leg name = "left leg" icon_state = "l_leg" - max_damage = 60 + max_damage = 50 body_zone = "l_leg" body_part = LEG_LEFT px_x = -2 @@ -311,7 +311,7 @@ /obj/item/bodypart/r_leg name = "right leg" icon_state = "r_leg" - max_damage = 60 + max_damage = 50 body_zone = "r_leg" body_part = LEG_RIGHT px_x = 2 diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 20fccbdc7f1..1b47c0172f6 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -314,7 +314,7 @@ /obj/item/organ/tongue/abductor/TongueSpeech(var/message) //Hacks var/mob/living/carbon/human/user = usr - var/rendered = "[user.name]: [message]" + var/rendered = "[user.name]: [message]" for(var/mob/living/carbon/human/H in living_mob_list) var/obj/item/organ/tongue/T = H.getorganslot("tongue") if(!T || T.type != type) diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index 139a8530357..a05819054e7 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -104,4 +104,9 @@ var/list/GPS_list = list() flags = ABSTRACT gpstag = "Eerie Signal" desc = "Report to a coder immediately." - invisibility = INVISIBILITY_MAXIMUM \ No newline at end of file + invisibility = INVISIBILITY_MAXIMUM + +/obj/item/device/gps/mining/internal + icon_state = "gps-m" + gpstag = "MINER" + desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." \ No newline at end of file diff --git a/code/orphaned procs/priority_announce.dm b/code/orphaned procs/priority_announce.dm index 2d490bea2af..6d2cb32e326 100644 --- a/code/orphaned procs/priority_announce.dm +++ b/code/orphaned procs/priority_announce.dm @@ -27,7 +27,7 @@ for(var/mob/M in player_list) if(!istype(M,/mob/new_player) && !M.ear_deaf) M << announcement - if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) + if(!(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)) continue M << sound(sound) @@ -53,4 +53,4 @@ if(alert) M << sound('sound/misc/notice1.ogg') else - M << sound('sound/misc/notice2.ogg') \ No newline at end of file + M << sound('sound/misc/notice2.ogg') diff --git a/html/changelog.html b/html/changelog.html index 0927b728d82..5fabdf64718 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,44 @@ -->
+

13 May 2016

+

Joan updated:

+
    +
  • Cultists can now unanchor and reanchor cult structures by hitting them with a tome. Unanchored cult structures don't do anything.
  • +
+

KorPhaeron updated:

+
    +
  • Drake attacks are now much easier to avoid.
  • +
  • Player controlled drakes can now consume bodies to heal, and alt+click targets to divebomb them.
  • +
+

TechnoAlchemisto updated:

+
    +
  • More items have been added to the mining vendor, check them out!
  • +
+ +

12 May 2016

+

Shadowlight and coiax updated:

+
    +
  • Due to numerous reports of teams using human weapons instead of stealth when carrying out their assignments, future teams have been genetically modified to only be able to use their assigned blaster and are unable to use human weapons.
  • +
+ +

11 May 2016

+

Joan updated:

+
    +
  • Shades can move in space.
  • +
  • Artificers can now heal shades.
  • +
+

coiax updated:

+
    +
  • Added action button to chameleon stamp
  • +
  • Added APPROVED and DENIED stamps to Bureaucracy Crate
  • +
  • Added the cream pie closet to various maps. Added contraband Cream Pie Crate to Cargo.
  • +
+

pudl updated:

+
    +
  • The armory has been redesigned.
  • +
+

09 May 2016

Joan updated:

    @@ -603,26 +641,6 @@
  • Added attack verbs for heart and tongue organs
  • Maximum output of air pumps has been raised.
- -

12 April 2016

-

Incoming5643 updated:

-
    -
  • Leading scientists have finally proven that humans (and xenos) in fact have tongues in their mouths.
  • -
  • Swapping out tongues allows the various races to change their speech impediments. Putting a xeno tongue in someone allows them to make the hissing sound like a xeno whenever they speak.
  • -
  • There are no erp mechanics tied to this feature.
  • -
  • Remember that tongues are stored in the MOUTH, selecting the head isn't good enough.
  • -
-

Kor updated:

-
    -
  • Ash walker starting gear has been rebalanced.
  • -
  • Ash walkers can no longer use guns.
  • -
-

TrustyGun updated:

-
    -
  • After carefully investing in the market, the Captain had enough money to replace his silver flask with a golden one!
  • -
  • The Detective is now bringing his personalized flask to work, due to the grim work he has to do.
  • -
  • The Booze-O-Mat now stocks 3 flasks.
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 1ce8f776f27..7fae8b9309d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4985,3 +4985,29 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. only things in your hands will be considered for crafting coiax: - tweak: Skeletons now have bone "tongues" +2016-05-11: + Joan: + - rscadd: Shades can move in space. + - rscadd: Artificers can now heal shades. + coiax: + - tweak: Added action button to chameleon stamp + - rscadd: Added APPROVED and DENIED stamps to Bureaucracy Crate + - rscadd: Added the cream pie closet to various maps. Added contraband Cream Pie + Crate to Cargo. + pudl: + - rscadd: The armory has been redesigned. +2016-05-12: + Shadowlight and coiax: + - rscdel: Due to numerous reports of teams using human weapons instead of stealth + when carrying out their assignments, future teams have been genetically modified + to only be able to use their assigned blaster and are unable to use human weapons. +2016-05-13: + Joan: + - rscadd: Cultists can now unanchor and reanchor cult structures by hitting them + with a tome. Unanchored cult structures don't do anything. + KorPhaeron: + - rscadd: Drake attacks are now much easier to avoid. + - rscadd: Player controlled drakes can now consume bodies to heal, and alt+click + targets to divebomb them. + TechnoAlchemisto: + - rscadd: More items have been added to the mining vendor, check them out! diff --git a/html/changelogs/AutoChangeLog-pr-17563.yml b/html/changelogs/AutoChangeLog-pr-17563.yml new file mode 100644 index 00000000000..34bf6ecd68b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17563.yml @@ -0,0 +1,7 @@ +author: Cruix +delete-after: True +changes: + - bugfix: "Fixed foam darts with the safety cap removed being reset when fired." + - rscadd: "Added the ability to remove pens from foam darts." + - bugfix: "Foam darts with pens inside them are no longer destroyed when fired." + - bugfix: "Foam darts no longer drop two darts when fired at a person on a janicart." diff --git a/html/changelogs/AutoChangeLog-pr-17574.yml b/html/changelogs/AutoChangeLog-pr-17574.yml new file mode 100644 index 00000000000..e5d86d1f70f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17574.yml @@ -0,0 +1,10 @@ +author: Metacide +delete-after: True +changes: + - rscadd: "A small update for MetaStation, changes include:" + - rscadd: "Added extra grounding rods to the engine area to stop camera destruction." + - rscadd: "Added canvases and extra crayons to art storage and some easels to maint." + - rscadd: "Added formal security uniform crate for parades to the warden's gear area." + - rscadd: "The armory securitron now starts active." + - rscadd: "The genetics APC now starts unlocked." + - rscadd: "Other minor changes and fixes as detailed on the wiki page." diff --git a/html/changelogs/AutoChangeLog-pr-17575.yml b/html/changelogs/AutoChangeLog-pr-17575.yml new file mode 100644 index 00000000000..ce694ffc66a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17575.yml @@ -0,0 +1,4 @@ +author: Joan +delete-after: True +changes: + - rscdel: "The Raise Dead rune no longer accepts dead cultists as a sacrifice to raise the dead." diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index a1ede7661c1..42a0cd47622 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 949f864eb7f..51b53ab2149 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index f029613ca91..5a1180d6cc2 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/cult.dmi b/icons/obj/cult.dmi index 4b28d871c3e..137773d15b6 100644 Binary files a/icons/obj/cult.dmi and b/icons/obj/cult.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index df670128881..64825e13edd 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 372ea30f755..6bc0d9685bd 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/machines/washing_machine.dmi b/icons/obj/machines/washing_machine.dmi index 0213078f3a5..b41571477e2 100644 Binary files a/icons/obj/machines/washing_machine.dmi and b/icons/obj/machines/washing_machine.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 9a3e8194f4b..76f5bfe7ebe 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/turf/floors/ash.dmi b/icons/turf/floors/ash.dmi new file mode 100644 index 00000000000..718cd120194 Binary files /dev/null and b/icons/turf/floors/ash.dmi differ diff --git a/icons/turf/floors/rocky_ash.dmi b/icons/turf/floors/rocky_ash.dmi new file mode 100644 index 00000000000..2a57edfc53a Binary files /dev/null and b/icons/turf/floors/rocky_ash.dmi differ diff --git a/icons/turf/mining.dmi b/icons/turf/mining.dmi index e7fff73a657..ff3a228f028 100644 Binary files a/icons/turf/mining.dmi and b/icons/turf/mining.dmi differ diff --git a/icons/turf/walls/rock_wall.dmi b/icons/turf/walls/rock_wall.dmi new file mode 100644 index 00000000000..c07657149ac Binary files /dev/null and b/icons/turf/walls/rock_wall.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index ddb480fddcf..b2cde1ea35b 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -104,5 +104,6 @@ BIG IMG.icon {width: 32px; height: 32px;} .memo {color: #638500; text-align: center;} .memoedit {text-align: center; font-size: 2;} +.abductor {color: #800080; font-style: italic;} "} diff --git a/tgstation.dme b/tgstation.dme index c7de91165ce..d2affc0e6c8 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -578,6 +578,7 @@ #include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\megaphone.dm" +#include "code\game\objects\items\devices\modificationkit.dm" #include "code\game\objects\items\devices\multitool.dm" #include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\pipe_painter.dm" diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php index d471f57f9e6..766f0310302 100644 --- a/tools/github_webhook_processor.php +++ b/tools/github_webhook_processor.php @@ -250,7 +250,7 @@ function checkchangelog($payload, $merge = false) { if (!count($changelogbody)) return; - $file = 'author: '.$username."\n"; + $file = 'author: '.trim(str_replace(array("\\", '"'), array("\\\\", "\\\""), $username))."\n"; $file .= "delete-after: True\n"; $file .= "changes: \n"; foreach ($changelogbody as $changelogitem) {