diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 6324c5fb02d..f3d693f8385 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -358,7 +358,7 @@ "agT" = (/obj/machinery/door/airlock/glass_security{name = "Long-Term Cell 2"; req_access_txt = "2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "agU" = (/obj/machinery/door/airlock/glass_security{name = "Long-Term Cell 1"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "agV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Insanity Ward"; req_access_txt = "2"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prison) -"agW" = (/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) +"agW" = (/obj/vehicle/secway,/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) "agX" = (/obj/machinery/alarm{pixel_y = 28},/obj/structure/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/clothing/suit/armor/laserproof,/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) "agY" = (/obj/structure/closet/secure_closet{name = "contraband locker"; req_access_txt = "3"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) "agZ" = (/obj/structure/table/woodentable,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 32},/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/machinery/keycard_auth{pixel_x = -26; pixel_y = 23},/obj/machinery/door_control{id = "hosspace"; name = "Space Shutters Control"; pixel_x = -26; pixel_y = 34},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) @@ -558,7 +558,7 @@ "akL" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Armory APC"; pixel_x = 1; pixel_y = -24},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/light,/obj/machinery/camera/motion{c_tag = "Armory - Internal"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/warden) "akM" = (/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/warden) "akN" = (/turf/simulated/floor/plasteel{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/security/warden) -"akO" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/clothing/head/helmet/riot,/obj/item/clothing/head/helmet/riot,/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) +"akO" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/clothing/head/helmet/riot,/obj/item/clothing/head/helmet/riot,/obj/item/key/security,/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) "akP" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -24; pixel_y = -20},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching certain areas."; dir = 1; name = "Head of Security's Monitor"; network = list("Prison","MiniSat","tcomm"); pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/hos) "akQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/hos) "akR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/security/hos) @@ -1050,7 +1050,7 @@ "auj" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "auk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aul" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) -"aum" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) +"aum" = (/obj/machinery/door/airlock/maintenance{icon = 'icons/obj/doors/Doorint.dmi'; name = "Brig Emergency Storage"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/brig) "aun" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/security/podbay) "auo" = (/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) "aup" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) @@ -2101,7 +2101,7 @@ "aOu" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/storage) "aOv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/quartermaster/storage) "aOw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/quartermaster/storage) -"aOx" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #1"},/mob/living/simple_animal/bot/mulebot{home_destination = "QM #1"; suffix = "#1"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/northleft,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage) +"aOx" = (/obj/machinery/navbeacon{codes_txt = "delivery"; dir = 8; location = "QM #1"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/northleft,/obj/machinery/light{dir = 4},/mob/living/simple_animal/bot/mulebot{home_destination = "QM #1"; suffix = "#1"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage) "aOy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;63;48;50"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aOz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;63;48;50"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aOA" = (/turf/simulated/wall,/area/storage/primary) @@ -3353,7 +3353,7 @@ "bmy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/junction{dir = 2; icon_state = "pipe-j1"},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "bmz" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "browncorner"},/area/hallway/primary/port) "bmA" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/hallway/primary/port) -"bmB" = (/obj/machinery/power/apc{dir = 8; name = "Custodial Closet APC"; pixel_x = -24},/obj/structure/table,/obj/item/clothing/gloves/color/orange,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) +"bmB" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/reagent_dispensers/spacecleanertank{pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/janitor) "bmC" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/lizard{name = "Wags-His-Tail"; real_name = "Wags-His-Tail"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) "bmD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) "bmE" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) @@ -3368,7 +3368,7 @@ "bmN" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/engine/chiefs_office) "bmO" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) "bmP" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/clipboard,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/engine/chiefs_office) -"bmQ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/reagent_dispensers/spacecleanertank{pixel_y = 30},/turf/simulated/floor/plasteel,/area/janitor) +"bmQ" = (/obj/machinery/power/apc{dir = 8; name = "Custodial Closet APC"; pixel_x = -24},/obj/structure/table,/obj/item/clothing/gloves/color/orange,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/item/key/janitor,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) "bmR" = (/obj/structure/table/woodentable,/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 1},/obj/machinery/photocopier/faxmachine{department = "Captain's Office"},/turf/simulated/floor/carpet,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bmS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) "bmT" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor/preopen{id_tag = "bridge blast"; layer = 2.9; name = "bridge blast door"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/bridge) @@ -3452,7 +3452,7 @@ "bot" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Civilian"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/hallway/primary/port) "bou" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) "bov" = (/obj/structure/janitorialcart,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) -"bow" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/light/small,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plating,/area/janitor) +"bow" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/light/small,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -28},/obj/vehicle/janicart,/turf/simulated/floor/plating,/area/janitor) "box" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/janitor) "boy" = (/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) "boz" = (/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/maintcentral{name = "Central Maintenance"}) @@ -5049,7 +5049,7 @@ "bTe" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Exterior Aft-Starboard"; dir = 4; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "bTf" = (/obj/structure/table/reinforced,/obj/item/device/flashlight,/obj/item/device/radio,/obj/machinery/camera{c_tag = "Engineering Equipment East"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "bTg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) -"bTh" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bTh" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Doorint.dmi'; name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/starboard) "bTi" = (/obj/item/stack/sheet/cardboard,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/maintenance/starboard) "bTj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) "bTk" = (/obj/machinery/light_switch{name = "light switch "; dir = 2; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay) @@ -8106,7 +8106,7 @@ "cZT" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "cZU" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) "cZV" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"cZW" = (/mob/living/simple_animal/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/turf/simulated/shuttle/plating{icon_state = "bot"},/area/shuttle/escape) +"cZW" = (/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/mob/living/simple_animal/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/turf/simulated/shuttle/plating{icon_state = "bot"},/area/shuttle/escape) "cZX" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #1"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id_tag = "xenobio3"; name = "containment blast door"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cZY" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen #1"; req_access_txt = "55"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) "cZZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"}) @@ -8581,9 +8581,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqbccbccbdQbccaWDbccbdRbccbcdbcebdSbdTbccbdRbccbdUbdVbdWbdXapfapfapfapfakzakzakzapfapfapfaZtbdYbdZbdZbdZbdZbeaaRobebbecbedbeeaYnaYnaYnaYnbefapfapfbegapfapfbehbeibejbekbelbembenbekbelbeobepbembeqbekbekbekbelbekbekberbesbekbekbekbekbekbekbekbetbeubekbekbenbevbewbekbekbekbekbexbeybezbezbezbeAbezbezbezaoGbmMaoGaGWaoGaoGbeCbeCbeCbeCbeDbeEbeEbeFbeGbeHbambeIbeJbeKbmNbeMbeNbambeObePbeQbdEbeRbeSbeTbdEbeUaCgaCgaCgaCgaCgaCgaCgbeVaCgaCgaCgaCgaCgaLwaCgabqarBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabearBarBarBarBarBarBarBarBaWvaXIaXOaaaaXLbdIbdLbeWbeXbeYbeZbfabeXbfbbdLbdPaXLaaaaZhaXIaXObfcbfcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabccabqaaaabqaaabccbfdbccbfebfebffbfgbccbfdbccbccaWDbfhbfibfjavTavUbfkavUbflavUbfmbfnavVbfobfpbfqbfqbfrbfsbftbfubfvbfwbfxbfybfwbfzbfAbfwbfBbfCbfDbfEbfFbfGbfHbfIbfJbfKbfKbfLbfMbfNbfObfPbfQbfRbfSbfSbfSbfSbfSbfSbfSbfTbfUbfVbfVbfVbfVbfVbfVbfVbfVbfWbfXbfYbfZbfVbgabfWbfVbfVbgbbgcbgdbezbgebgfbggbghbgibezbgjbmOaoGbglaoGaaabeCbgmbgnbeCbgobgpbgqbgrbgsbgtbambgubgvbgwbgxbmPbgzbambgAbgBbgCbdEbgDbgEbgFbdEbgGaOdaOdbgHaOdbgIaOdaOdaOdbgJaOdbgKbgLbgKbgLaefaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaUVbgMaXIaXOaaaaXLbdIbgNbgObdIbgPbgQbgRbdIbgSbgTbdPaXLaaaaZhaXIbgUaaabfcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqaaabccbdRbccbccbccbccbccbccbdRbccaaaaWDbgVbgWbgXbgXbgXbgXbgXbgXbgXbgXbgYbgZbfwbfwbhabhbbhabfwbfwbfwbhcbfwbhdbhebhfbhgbhhbhibhjbhkbhlbhmbhnbfGbhobfIbhpblhbhqbhrbhqbhsbhqbhtbhubhtbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhvbhwbhwbhxbhwbhwbhwbhwbhwbrNbhybfIbhzbezbhAbhBbhCbhDbhEbezbhFbhGaoGaGWaoHaaabhHbhIbhJbhKbhLbhMbhNbhObhPbhQbambhRbhSbhTbhTbhUbhVbambhWbhXbhWbdEbhYbhZbiabdEbibaCgaCgaCgaCgaCgaCgaCgaCgaCgaHjaCgaCgbdFaCgabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqarBbicbidbiebifaXLaXLaXLbdIbigbihbiibdIbdIbdIbijbikbilbdPaXLaXLaXLbimaWBaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabinbiobipbiobiqbiobiobiqbiobipbirbisaWDbgVbitbiubivbiwbixbiybizbiAbgXbiBbiCbiDbiEbiFbiGbiFbiGbiHbiGbiIbfwbiJbiKbiLbiMbiNbiObiPbiQbiRbiSbiTbiUbiVbiWbiXbhqbiYbiZbjabmQbhqbjcbjdbjeabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqbhwbjfbjgbjhbjibjjbjkbjlbhwbjmbjnbjobezbjpbjqbjrbjsbjtbezaoGaoGaoGbjuaoGaaabeCbjvbjwbeCbjxbjybjzbjAbjBbjCbambjDbjEbjFbjGbjHbjIbamaFRbjJaFRbdEbjKbjLbjMbdEdeWavPdfadfcdfbdfdasXdfeanqanqaaaaaaaCgbgLaCgabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaUUaUUbjObjPaXIbjQbjRaaaaaaaXLbjSbjTbjUbdIbdIbjVbdIbdIbgSbjWbjXaXLaaaaaabjYaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabinbiobipbiobiqbiobiobiqbiobipbirbisaWDbgVbitbiubivbiwbixbiybizbiAbgXbiBbiCbiDbiEbiFbiGbiFbiGbiHbiGbiIbfwbiJbiKbiLbiMbiNbiObiPbiQbiRbiSbiTbiUbiVbiWbiXbhqbiYbiZbjabmBbhqbjcbjdbjeabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqbhwbjfbjgbjhbjibjjbjkbjlbhwbjmbjnbjobezbjpbjqbjrbjsbjtbezaoGaoGaoGbjuaoGaaabeCbjvbjwbeCbjxbjybjzbjAbjBbjCbambjDbjEbjFbjGbjHbjIbamaFRbjJaFRbdEbjKbjLbjMbdEdeWavPdfadfcdfbdfdasXdfeanqanqaaaaaaaCgbgLaCgabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaUUaUUbjObjPaXIbjQbjRaaaaaaaXLbjSbjTbjUbdIbdIbjVbdIbdIbgSbjWbjXaXLaaaaaabjYaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabinbiobiobjZbkabkbbkcbkdbkebkfbkgbkhbkbbkibkjbccbgVbgWbkkbklbkmbknbkobkpbkqbkrbksbktbkubkvbkvbkwbkxbkybfwbfwbfwbfwbkzbkAbkBbkCbkDbhabkEbhkbhlbkFbkGbkHbkIbfIbkJbhqbkKbkLbkMbkNbkObkPbkQbkRabqabqbkSbkTbkUbkVbkWbkXbkTbkVbkWbkXbkUbkUbkYabqabqbhwbmRblablbblcblbbldblebhwblfbfIblgbwlbezblibljblkbezbezbllblmaoGblnaoGblobeCbeCbeCbeCbbHbbHbbHblpblqbbHbambambambambamblrblsbambltblubltbdEblvblwblxbdEdffdfhdfgdfgdfjdfkdfkdfkdflabqaaaaaaaaaaefaaaabqaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaabqabqaefblDblEblFblEblGaXOaaaaaaaaaaXLblHbdLblIblJblKblLblMblJblNbdLbdPaXLaaaaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablOblPblQblRbkbblSblTblSblTblSblTblSbkbblUblVbccbgVblWbgXblXblYblZbmabmbbmcbgXbmdbmebmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbiVbfIbmSbhqbmBbmCbmDbmEbhqbmFbmGbjeabqabqbmHboBbopbpVboHbqfbqdbqhbqgbqkbqjbqlbmTabqabqbhwbmUbmVbmWbmXbmYbmZbnabhwbhybnbbncbndbnebnfbnebngbnhbnibnebnebnebnjbnebnkbnlbnmbnnbnebnebnobnkbngbnjbnpbnqbnobnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDdfpdfmdftdfqdfxdfudfydeZaoNdflabqaaaaaaaaaaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqaefblDblEbnKblEbnLaXOaaaaaaaaaaXLbnMbnNbdJbnObnPbnQbnRbnSbnTbdIbrQaXLaXLaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablOblPblQblRbkbblSblTblSblTblSblTblSbkbblUblVbccbgVblWbgXblXblYblZbmabmbbmcbgXbmdbmebmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbiVbfIbmSbhqbmQbmCbmDbmEbhqbmFbmGbjeabqabqbmHboBbopbpVboHbqfbqdbqhbqgbqkbqjbqlbmTabqabqbhwbmUbmVbmWbmXbmYbmZbnabhwbhybnbbncbndbnebnfbnebngbnhbnibnebnebnebnjbnebnkbnlbnmbnnbnebnebnobnkbngbnjbnpbnqbnobnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDdfpdfmdftdfqdfxdfudfydeZaoNdflabqaaaaaaaaaaefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqaefblDblEbnKblEbnLaXOaaaaaaaaaaXLbnMbnNbdJbnObnPbnQbnRbnSbnTbdIbrQaXLaXLaXLaXLbnUaWCarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiqbkbbkbbipbkbblSblTblSbnVblSblTblSbkbblUblVbccbnWbnXbnYbnZboabobbocbobbiubiubodboebhcbfwbofbogbohboibojbokbolbfwbombonbojbkCboobfwbrXboqborbosbotbiUbkIbfIbkJbhqboubovbowboxbhqboybozbjebkWboAbkWbsbboCboDboEboDboFboDboEboDboGbscbkWboAbkWbhwboIboIboIboJboKboLboMbhwboNboOboPboQboRboSboRboTboRboUboRboRboRboVboRboWboXboYboZboRboRbpabpbbpcboVbpdboVbpebpfbpgbntbphbpibpibpjbpkbpibpidfzdfBdfAdfGdfDdfIdfHdfKdfJdgddfLdgKazDabqaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbpraaaaaaaaaabqbjRbjRbjObpsaXIaXOaaaaaaaaaaXLaXLblHbdIbdIbdIbptbdIbdIbdIbdIbsebsdbsfaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablObpwbpxblRbkbblSblTblSblTblSblTblSbkbblUblVbccbpybpzbpAbpBbpCbpDbpDbpEbpFbpBbpGbpHbpIbfwbpJbpKbpLbpMbpNbpObpPbfwbpQbpRbpSbpTbpUbfwbsibpWbpXbpYbpZbfGbqabjnbqbbqcbqcbqcbqcbqcbhtbtPbqebhtbkWbtSbtRbtTboEboEboEboEbqiboEboEboEboEbtZbtYbubbkWbqmbqnbqobqpbqqbqrbqrbqsbhwbqtbqubqvbqwbqxbqybqxbqzbqxbqAbqxbqxbqBbqxbqxbqCbqDbqxbqEbqBbqFbqGbqCbqHbqxbqIbqJbqKbqLbqMbqNbqObqPbqQbqRbpnbqSbqSbqTdgMdgLdgOdgNdgPanqanqanqanqanqanqanqanqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaabqYbqZbrabrbbrcbrdbrebrfaXIaXLaXLaXLaXLaXLbrgbrhbrgbrgbribrjbribrkbrkbrlbrmbrnbudaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrobiobiobjZbrpbkbbrqbkbbrrbrsbkbbrtbkbbkibrubccbgVbrvbrwbrxbrybrzbrAbrBbrCbrxbrDbrEbrFbfwbrGbhabrHbrIbfwbfwbfwbfwbfwbhabrJbrKbfwbfwbiUbrLbrMbiUbiUbzObehbfIbrObqcbrPbumbrRbqcbrSbrTbrUbrVbrWburbrYbrZbsabsabvWbwfbwebvWbvWbsabsabsgbshbwgbkWbhwboIboIboIbsjboIboIboIbhwbskbfIbslbZibsnbsobsnbsmbspbspbspbspbspbspaoGaoGbsqaoGaoGaoGbsrbThaoGaoGaoGbstaoGbsubsvbswbsxbsybszbsAbsBbqSbsCbsCbsDbqUbsEbjNbntbsFbsGbsHbsIbsJbsJbsKbsLabqaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqaaabqYbsMbsNaaaabqbsObsPbsQbsRbsSbsTbrgbsUbsVbsWbsXbsYbsZbrgbtabtbbtcbtdbtebtfbtfbtgaXMaaaaZhaXIaXOarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 1ed7089ef1b..30c71a46a64 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -226,7 +226,7 @@ "aer" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/camera{c_tag = "Brig Prison Hallway"; dir = 4; network = list("Prison","SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig) "aes" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "Brig Secure Armory Exterior South"; dir = 8; network = list("SS13")},/turf/space,/area/security/permabrig) "aet" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/advtaser{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/energy/advtaser{pixel_x = 0; pixel_y = 0},/obj/item/weapon/gun/energy/advtaser{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) -"aeu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/warning_stripes/southeast,/obj/structure/stool/bed/chair/janicart/secway,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) +"aeu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/warning_stripes/southeast,/obj/vehicle/secway,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury) "aev" = (/obj/structure/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shield/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/shield/riot,/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury) "aew" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/security/hos) "aex" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos) @@ -5238,7 +5238,7 @@ "bWL" = (/obj/structure/closet/jcloset,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel,/area/janitor) "bWM" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel,/area/janitor) "bWN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/newscaster{pixel_y = 30},/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plasteel,/area/janitor) -"bWO" = (/obj/machinery/camera{c_tag = "Custodial Closet"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/stool/bed/chair/janicart,/turf/simulated/floor/plasteel,/area/janitor) +"bWO" = (/obj/vehicle/janicart,/turf/simulated/floor/plasteel,/area/janitor) "bWP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/janitor) "bWQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/reagent_dispensers/spacecleanertank{pixel_y = 30},/turf/simulated/floor/plasteel,/area/janitor) "bWR" = (/obj/machinery/door/window/westleft{name = "Janitoral Delivery"; req_access_txt = "26"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/janitor) @@ -5246,7 +5246,7 @@ "bWT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bWU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/medical/paramedic) "bWV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic) -"bWW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/vehicle/train/ambulance/engine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) +"bWW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/vehicle/ambulance,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) "bWX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door_control{id = "paramedic"; name = "Garage Door Control"; pixel_x = -1; pixel_y = 24; req_access_txt = "66"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic) "bWY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/effect/landmark/start{name = "Paramedic"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) "bWZ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) @@ -5333,7 +5333,7 @@ "bYC" = (/obj/item/weapon/mop,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel,/area/janitor) "bYD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bYE" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic) -"bYF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/vehicle/train/ambulance/trolley,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) +"bYF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool/bed/amb_trolley,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) "bYG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/paramedic) "bYH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) "bYI" = (/obj/structure/closet/secure_closet/paramedic,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/paramedic) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 59a34b56436..2bcdfdd6894 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -525,8 +525,8 @@ var/list/turret_icons for(var/obj/spacepod/SP in view(7,src)) assess_and_assign(SP.occupant, targets, secondarytargets) - for(var/obj/vehicle/train/T in view(7,src)) - assess_and_assign(T.load, targets, secondarytargets) + for(var/obj/vehicle/T in view(7,src)) + assess_and_assign(T.buckled_mob, targets, secondarytargets) for(var/mob/living/C in view(7,src)) //loops through all living lifeforms in view assess_and_assign(C, targets, secondarytargets) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 9f8c92b6255..e51ea6eb3ac 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -1,219 +1,3 @@ -//old style PIMP-CART -/obj/structure/stool/bed/chair/janicart - name = "janicart" - desc = "A brave janitor cyborg gave its life to produce such an amazing combination of speed and utility." - icon = 'icons/obj/vehicles.dmi' - icon_state = "pussywagon" - anchored = 0 - density = 1 - var/obj/item/weapon/storage/bag/trash/mybag = null - var/callme = "pimpin' ride" //how do people refer to it? - var/move_delay = 0 - var/floorbuffer = 0 - var/keytype = /obj/item/key/janitor - -/obj/structure/stool/bed/chair/janicart/New() - handle_rotation() - -/obj/structure/stool/bed/chair/janicart/Move(a, b, flag) - ..() - if(floorbuffer) - var/turf/tile = loc - if(isturf(tile)) - tile.clean_blood() - if (istype(tile, /turf/simulated/floor)) - var/turf/simulated/floor/F = tile - F.dirt = 0 - for(var/A in tile) - if(istype(A, /obj/effect)) - if(is_cleanable(A)) - qdel(A) - -/obj/structure/stool/bed/chair/janicart/examine(mob/user) - ..() - if(floorbuffer) - to_chat(user, "It has been upgraded with a floor buffer.") - - -/obj/structure/stool/bed/chair/janicart/attackby(obj/item/I, mob/user, params) - if(istype(I, keytype)) - to_chat(user, "Hold [I] in one of your hands while you drive this [callme].") - else if(istype(I, /obj/item/weapon/storage/bag/trash)) - if(keytype == /obj/item/key/janitor) - if(!user.drop_item()) - return - to_chat(user, "You hook the trashbag onto the [callme].") - I.loc = src - mybag = I - else if(istype(I, /obj/item/janiupgrade)) - if(keytype == /obj/item/key/janitor) - floorbuffer = 1 - qdel(I) - to_chat(user, "You upgrade the [callme] with the floor buffer.") - update_icon() - -/obj/structure/stool/bed/chair/janicart/update_icon() - overlays.Cut() - if(mybag) - overlays += "cart_garbage" - if(floorbuffer) - overlays += "cart_buffer" - -/obj/structure/stool/bed/chair/janicart/attack_hand(mob/user) - if(mybag) - mybag.loc = get_turf(user) - user.put_in_hands(mybag) - mybag = null - update_icon() - else - ..() - - -/obj/structure/stool/bed/chair/janicart/relaymove(mob/user, direction) - if(user.stat || user.stunned || user.weakened || user.paralysis) - unbuckle_mob() - if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype)) - if(!Process_Spacemove(direction) || !has_gravity(src.loc) || move_delay || !isturf(loc)) - return - step(src, direction) - update_mob() - handle_rotation() - if(istype(src.loc, /turf/simulated)) - var/turf/simulated/T = src.loc - if(T.wet == TURF_WET_LUBE) //Lube! Fall off! - playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) - buckled_mob.Stun(7) - buckled_mob.Weaken(7) - unbuckle_mob() - step(src, dir) - move_delay = 1 - spawn(2) - move_delay = 0 - else - to_chat(user, "You'll need the keys in one of your hands to drive this [callme].") - -/obj/structure/stool/bed/chair/janicart/Bump(atom/A) - if(buckled_mob && istype(A, /obj/machinery/door)) - A.Bumped(buckled_mob) - -/obj/structure/stool/bed/chair/janicart/user_buckle_mob(mob/living/M, mob/user) - if(user.incapacitated()) //user can't move the mob on the janicart's turf if incapacitated - return - for(var/atom/movable/A in get_turf(src)) //we check for obstacles on the turf. - if(A.density) - if(A != src && A != M) - return - M.loc = loc //we move the mob on the janicart's turf before checking if we can buckle. - ..() - update_mob() - -/obj/structure/stool/bed/chair/janicart/unbuckle_mob() - if(buckled_mob) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 0 - ..() - -/obj/structure/stool/bed/chair/janicart/handle_rotation() - if((dir == SOUTH) || (dir == WEST) || (dir == EAST)) - layer = FLY_LAYER - else - layer = OBJ_LAYER - - if(buckled_mob) - if(buckled_mob.loc != loc) - buckled_mob.buckled = null //Temporary, so Move() succeeds. - buckled_mob.buckled = src //Restoring - - update_mob() - - -/obj/structure/stool/bed/chair/janicart/proc/update_mob() - if(buckled_mob) - buckled_mob.dir = dir - switch(dir) - if(SOUTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 7 - if(WEST) - buckled_mob.pixel_x = 12 - buckled_mob.pixel_y = 7 - if(NORTH) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 4 - if(EAST) - buckled_mob.pixel_x = -12 - buckled_mob.pixel_y = 7 - -/obj/structure/stool/bed/chair/janicart/bullet_act(obj/item/projectile/Proj) - if(buckled_mob) - buckled_mob.bullet_act(Proj) - -/obj/item/key - name = "key" - desc = "A small grey key." - icon = 'icons/obj/vehicles.dmi' - icon_state = "key" - w_class = 1 - -/obj/item/key/janitor - desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." - icon_state = "keyjanitor" - -/obj/item/key/security - desc = "A keyring with a small steel key, and a rubber stun baton accessory." - icon_state = "keysec" - -/obj/item/key/ambulance - name = "ambulance key" - desc = "A keyring with a small steel key, and tag with a red cross on it." - icon_state = "keydoc" - -/obj/item/key/snowmobile - name = "snowmobile key" - desc = "A keyring with a small steel key, and tag with a red cross on it; clearly it's not implying you're going to the hospital for this..." - icon_state = "keydoc" //get a better icon, sometime. - -/obj/item/janiupgrade - name = "floor buffer upgrade" - desc = "An upgrade for mobile janicarts." - icon = 'icons/obj/vehicles.dmi' - icon_state = "upgrade" - -/obj/structure/stool/bed/chair/janicart/secway - name = "secway" - desc = "A brave security cyborg gave its life to help you look like a complete tool." - icon = 'icons/obj/vehicles.dmi' - icon_state = "secway" - callme = "secway" - keytype = /obj/item/key/security - -/obj/structure/stool/bed/chair/janicart/secway/update_mob() - if(buckled_mob) - buckled_mob.dir = dir - buckled_mob.pixel_y = 4 - - -/obj/structure/stool/bed/chair/janicart/ambulance - name = "ambulance" - desc = "For getting to patients in a hurry--or running them over." - icon = 'icons/obj/vehicles.dmi' - icon_state = "docwagon" - callme = "ambulance" - keytype = /obj/item/key/ambulance - -/obj/structure/stool/bed/chair/janicart/secway/snowmobile - name = "red snowmobile" - desc = "Wheeeeeeeeeeee." - icon = 'icons/obj/vehicles.dmi' - icon_state = "snowmobile" - callme = "snowmobile" - -/obj/structure/stool/bed/chair/janicart/secway/snowmobile/blue - name = "blue snowmobile" - icon_state = "bluesnowmobile" - -//////////////////////////////////////////////////////////////////////////////////////////////// - //TG style Janicart /obj/structure/janitorialcart diff --git a/code/modules/vehicle/ambulance.dm b/code/modules/vehicle/ambulance.dm new file mode 100644 index 00000000000..526b1e2c0a9 --- /dev/null +++ b/code/modules/vehicle/ambulance.dm @@ -0,0 +1,55 @@ +/obj/vehicle/ambulance + name = "ambulance" + desc = "what the paramedic uses to run over people to take to medbay." + icon_state = "docwagon2" + keytype = /obj/item/key/ambulance + var/obj/structure/stool/bed/amb_trolley/bed = null + + +/obj/item/key/ambulance + name = "ambulance key" + desc = "A keyring with a small steel key, and tag with a red cross on it." + icon_state = "keydoc" + + +/obj/vehicle/ambulance/handle_vehicle_offsets() + ..() + if(buckled_mob) + switch(buckled_mob.dir) + if(SOUTH) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 7 + if(WEST) + buckled_mob.pixel_x = 13 + buckled_mob.pixel_y = 7 + if(NORTH) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 4 + if(EAST) + buckled_mob.pixel_x = -13 + buckled_mob.pixel_y = 7 + +/obj/vehicle/ambulance/Move(newloc, Dir) + var/oldloc = loc + . = ..() + if(bed && get_dist(oldloc, loc) <= 2) + bed.Move(oldloc) + bed.dir = Dir + bed.buckled_mob.dir = Dir + +/obj/structure/stool/bed/amb_trolley + name = "ambulance train trolley" + icon = 'icons/vehicles/CargoTrain.dmi' + icon_state = "ambulance" + anchored = 0 + +/obj/structure/stool/bed/amb_trolley/MouseDrop(obj/over_object as obj) + ..() + if(istype(over_object, /obj/vehicle/ambulance)) + var/obj/vehicle/ambulance/amb = over_object + if(amb.bed) + amb.bed = null + to_chat(usr, "You unhook the bed to the ambulance.") + else + amb.bed = src + to_chat(usr, "You hook the bed to the ambulance.") \ No newline at end of file diff --git a/code/modules/vehicle/atv.dm b/code/modules/vehicle/atv.dm new file mode 100644 index 00000000000..d4a843b80bf --- /dev/null +++ b/code/modules/vehicle/atv.dm @@ -0,0 +1,80 @@ +/obj/vehicle/atv + name = "all-terrain vehicle" + desc = "An all-terrain vehicle built for traversing rough terrain with ease. One of the few old-earth technologies that are still relevant on most planet-bound outposts." + icon = 'icons/vehicles/4wheeler.dmi' + icon_state = "fourwheel" + keytype = /obj/item/key + generic_pixel_x = 0 + generic_pixel_y = 4 + vehicle_move_delay = 1 + var/static/image/atvcover = null + + +/obj/vehicle/atv/New() + ..() + if(!atvcover) + atvcover = image("icons/vehicles/4wheeler.dmi", "4wheeler_north") + atvcover.layer = MOB_LAYER + 0.1 + + +obj/vehicle/atv/post_buckle_mob(mob/living/M) + if(buckled_mob) + overlays += atvcover + else + overlays -= atvcover + + +/obj/vehicle/atv/handle_vehicle_layer() + if(dir == SOUTH) + layer = MOB_LAYER+0.1 + else + layer = OBJ_LAYER + + +//TURRETS! +/obj/vehicle/atv/turret + var/obj/machinery/gun_turret/vehicle_turret/turret = null + + +/obj/machinery/gun_turret/vehicle_turret + name = "mounted turret" + scan_range = 7 + density = 0 + + +/obj/vehicle/atv/turret/New() + ..() + turret = new(loc) + //turret.base = src + + +/obj/vehicle/atv/turret/handle_vehicle_layer() + if(dir == SOUTH) + layer = MOB_LAYER+0.1 + else + layer = OBJ_LAYER + + if(turret) + if(dir == NORTH) + turret.layer = MOB_LAYER+0.1 + else + turret.layer = OBJ_LAYER + + +/obj/vehicle/atv/turret/handle_vehicle_offsets() + ..() + if(turret) + turret.loc = loc + switch(dir) + if(NORTH) + turret.pixel_x = 0 + turret.pixel_y = 4 + if(EAST) + turret.pixel_x = -12 + turret.pixel_y = 4 + if(SOUTH) + turret.pixel_x = 0 + turret.pixel_y = 4 + if(WEST) + turret.pixel_x = 12 + turret.pixel_y = 4 \ No newline at end of file diff --git a/code/modules/vehicle/janicart.dm b/code/modules/vehicle/janicart.dm new file mode 100644 index 00000000000..dfdd0ffc03c --- /dev/null +++ b/code/modules/vehicle/janicart.dm @@ -0,0 +1,95 @@ +//PIMP-CART +/obj/vehicle/janicart + name = "janicart (pimpin' ride)" + desc = "A brave janitor cyborg gave its life to produce such an amazing combination of speed and utility." + icon_state = "pussywagon" + keytype = /obj/item/key/janitor + var/obj/item/weapon/storage/bag/trash/mybag = null + var/floorbuffer = 0 + + +/obj/vehicle/janicart/handle_vehicle_offsets() + ..() + if(buckled_mob) + switch(buckled_mob.dir) + if(NORTH) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 4 + if(EAST) + buckled_mob.pixel_x = -12 + buckled_mob.pixel_y = 7 + if(SOUTH) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 7 + if(WEST) + buckled_mob.pixel_x = 12 + buckled_mob.pixel_y = 7 + + +/obj/item/key/janitor + desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." + icon_state = "keyjanitor" + + +/obj/item/janiupgrade + name = "floor buffer upgrade" + desc = "An upgrade for mobile janicarts." + icon = 'icons/obj/vehicles.dmi' + icon_state = "upgrade" + + +/obj/vehicle/janicart/Move(atom/OldLoc, Dir) + ..() + if(floorbuffer) + var/turf/tile = loc + if(isturf(tile)) + tile.clean_blood() + if(istype(tile, /turf/simulated/floor)) + var/turf/simulated/floor/F = tile + F.dirt = 0 + for(var/A in tile) + if(is_cleanable(A)) + qdel(A) + + + +/obj/vehicle/janicart/examine(mob/user) + ..() + if(floorbuffer) + to_chat(user, "It has been upgraded with a floor buffer.") + + +/obj/vehicle/janicart/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/storage/bag/trash)) + if(keytype == /obj/item/key/janitor) + if(!user.drop_item()) + return + to_chat(user, "You hook the trashbag onto \the [name].") + I.loc = src + mybag = I + else if(istype(I, /obj/item/janiupgrade)) + if(keytype == /obj/item/key/janitor) + floorbuffer = 1 + qdel(I) + to_chat(user,"You upgrade \the [name] with the floor buffer.") + update_icon() + + ..() + + +/obj/vehicle/janicart/update_icon() + overlays.Cut() + if(mybag) + overlays += "cart_garbage" + if(floorbuffer) + overlays += "cart_buffer" + + +/obj/vehicle/janicart/attack_hand(mob/user) + if(..()) + return 1 + else if(mybag) + mybag.loc = get_turf(user) + user.put_in_hands(mybag) + mybag = null + update_icon() \ No newline at end of file diff --git a/code/modules/vehicle/motorcycle.dm b/code/modules/vehicle/motorcycle.dm new file mode 100644 index 00000000000..3bcf98f2164 --- /dev/null +++ b/code/modules/vehicle/motorcycle.dm @@ -0,0 +1,30 @@ +/obj/vehicle/motorcycle + name = "motorcycle" + desc = "A fast and highly maneuverable vehicle." + icon = 'icons/vehicles/motorcycle.dmi' + icon_state = "motorcycle_4dir" + generic_pixel_x = 0 + generic_pixel_y = 4 + vehicle_move_delay = 1 + var/static/image/bikecover = null + + +/obj/vehicle/motorcycle/New() + ..() + if(!bikecover) + bikecover = image("icons/vehicles/motorcycle.dmi", "motorcycle_overlay_4d") + bikecover.layer = MOB_LAYER + 0.1 + + +obj/vehicle/motorcycle/post_buckle_mob(mob/living/M) + if(buckled_mob) + overlays += bikecover + else + overlays -= bikecover + + +/obj/vehicle/motorcycle/handle_vehicle_layer() + if(dir == SOUTH) + layer = MOB_LAYER+0.1 + else + layer = OBJ_LAYER \ No newline at end of file diff --git a/code/modules/vehicle/secway.dm b/code/modules/vehicle/secway.dm new file mode 100644 index 00000000000..4f7c0bf9cb2 --- /dev/null +++ b/code/modules/vehicle/secway.dm @@ -0,0 +1,12 @@ +/obj/vehicle/secway + name = "secway" + desc = "A brave security cyborg gave its life to help you look like a complete tool." + icon_state = "secway" + keytype = /obj/item/key/security + generic_pixel_x = 0 + generic_pixel_y = 4 + + +/obj/item/key/security + desc = "A keyring with a small steel key, and a rubber stun baton accessory." + icon_state = "keysec" \ No newline at end of file diff --git a/code/modules/vehicle/snowmobile.dm b/code/modules/vehicle/snowmobile.dm new file mode 100644 index 00000000000..311eb48c699 --- /dev/null +++ b/code/modules/vehicle/snowmobile.dm @@ -0,0 +1,17 @@ +/obj/vehicle/snowmobile + name = "red snowmobile" + desc = "Wheeeeeeeeeeee." + icon = 'icons/obj/vehicles.dmi' + icon_state = "snowmobile" + keytype = /obj/item/key/snowmobile + generic_pixel_x = 0 + generic_pixel_y = 4 + +/obj/vehicle/snowmobile/blue + name = "blue snowmobile" + icon_state = "bluesnowmobile" + +/obj/item/key/snowmobile + name = "snowmobile key" + desc = "A keyring with a small steel key, and tag with a red cross on it; clearly it's not implying you're going to the hospital for this..." + icon_state = "keydoc" //get a better icon, sometime. diff --git a/code/modules/vehicle/speedbike.dm b/code/modules/vehicle/speedbike.dm new file mode 100644 index 00000000000..7d46114fb63 --- /dev/null +++ b/code/modules/vehicle/speedbike.dm @@ -0,0 +1,62 @@ +/obj/vehicle/space/speedbike + name = "Speedbike" + icon = 'icons/obj/bike.dmi' + icon_state = "speedbike_blue" + layer = MOB_LAYER - 0.1 + keytype = null + vehicle_move_delay = 0 + var/overlay_state = "cover_blue" + var/image/overlay = null + +/obj/vehicle/space/speedbike/New() + ..() + overlay = image("icons/obj/bike.dmi", overlay_state) + overlay.layer = MOB_LAYER + 0.1 + overlays += overlay + +/obj/effect/overlay/temp/speedbike_trail + name = "speedbike trails" + icon = 'icons/effects/effects.dmi' + icon_state = "ion_fade" + duration = 10 + randomdir = 0 + layer = MOB_LAYER - 0.2 + +/obj/effect/overlay/temp/speedbike_trail/New(loc,move_dir) + ..() + dir = move_dir + +/obj/vehicle/space/speedbike/Move(newloc,move_dir) + if(buckled_mob) + new /obj/effect/overlay/temp/speedbike_trail(loc) + . = ..() + +/obj/vehicle/space/speedbike/handle_vehicle_layer() + switch(dir) + if(NORTH,SOUTH) + pixel_x = -16 + pixel_y = -16 + if(EAST,WEST) + pixel_x = -18 + pixel_y = 0 + +/obj/vehicle/space/speedbike/handle_vehicle_offsets() + if(buckled_mob) + buckled_mob.dir = dir + switch(dir) + if(NORTH) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = -8 + if(SOUTH) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 4 + if(EAST) + buckled_mob.pixel_x = -10 + buckled_mob.pixel_y = 5 + if(WEST) + buckled_mob.pixel_x = 10 + buckled_mob.pixel_y = 5 + +/obj/vehicle/space/speedbike/red + icon_state = "speedbike_red" + overlay_state = "cover_red" \ No newline at end of file diff --git a/code/modules/vehicle/sportscar.dm b/code/modules/vehicle/sportscar.dm new file mode 100644 index 00000000000..04ba5bdd2f5 --- /dev/null +++ b/code/modules/vehicle/sportscar.dm @@ -0,0 +1,47 @@ +/obj/vehicle/car + name = "sports car" + desc = "A very luxurious vehicle." + icon = 'icons/vehicles/sportscar.dmi' + icon_state = "sportscar" + generic_pixel_x = 0 + generic_pixel_y = 4 + vehicle_move_delay = 1 + var/static/image/carcover = null + + +/obj/vehicle/car/New() + ..() + if(!carcover) + carcover = image("icons/vehicles/sportscar.dmi", "sportscar_cover") + carcover.layer = MOB_LAYER + 0.1 + + +/obj/vehicle/car/post_buckle_mob(mob/living/M) + if(buckled_mob) + overlays += carcover + else + overlays -= carcover + +/obj/vehicle/car/handle_vehicle_offsets() + ..() + if(buckled_mob) + switch(buckled_mob.dir) + if(NORTH) + buckled_mob.pixel_x = 2 + buckled_mob.pixel_y = 20 + if(EAST) + buckled_mob.pixel_x = 20 + buckled_mob.pixel_y = 23 + if(SOUTH) + buckled_mob.pixel_x = 20 + buckled_mob.pixel_y = 27 + if(WEST) + buckled_mob.pixel_x = 34 + buckled_mob.pixel_y = 10 + + +/obj/vehicle/car/handle_vehicle_layer() + if(dir == SOUTH) + layer = MOB_LAYER+0.1 + else + layer = OBJ_LAYER \ No newline at end of file diff --git a/code/modules/vehicle/train/train.dm b/code/modules/vehicle/train/train.dm deleted file mode 100644 index ea84d92c4ed..00000000000 --- a/code/modules/vehicle/train/train.dm +++ /dev/null @@ -1,240 +0,0 @@ -/obj/vehicle/train - name = "train" - dir = 4 - - move_delay = 2 - - health = 100 - maxhealth = 100 - fire_dam_coeff = 0.7 - brute_dam_coeff = 0.5 - - var/passenger_allowed = 1 - - var/active_engines = 0 - var/train_length = 0 - - var/obj/vehicle/train/lead - var/obj/vehicle/train/tow - - -//------------------------------------------- -// Standard procs -//------------------------------------------- -/obj/vehicle/train/initialize() - for(var/obj/vehicle/train/T in orange(1, src)) - latch(T) - -/obj/vehicle/train/Move() - var/old_loc = get_turf(src) - if(..()) - if(tow) - tow.Move(old_loc) - return 1 - else - if(lead) - unattach() - return 0 - -/obj/vehicle/train/can_move() - if(!is_train_head()) - return 1 //towed objects do not need power to Move() - - if(!..()) - return 0 - return 1 - - -/obj/vehicle/train/Bump(atom/Obstacle) - if(!istype(Obstacle, /atom/movable)) - return - var/atom/movable/A = Obstacle - - if(!A.anchored) - var/turf/T = get_step(A, dir) - if(isturf(T)) - A.Move(T) //bump things away when hit - - if(ismob(load) && istype(Obstacle, /obj/machinery/door)) - Obstacle.Bumped(load) - - if(emagged) - if(istype(A, /mob/living)) - var/mob/living/M = A - visible_message("\red [src] knocks over [M]!") - M.apply_effects(5, 5) //knock people down if you hit them - M.apply_damages(22 / move_delay) // and do damage according to how fast the train is going - if(istype(load, /mob/living/carbon/human)) - var/mob/living/D = load - to_chat(D, "\red You hit [M]!") - msg_admin_attack("[key_name_admin(D)] hit [key_name_admin(M)] with [src].") - - -//------------------------------------------- -// Vehicle procs -//------------------------------------------- -/obj/vehicle/train/explode() - if (tow) - tow.unattach() - unattach() - ..() - - -//------------------------------------------- -// Interaction procs -//------------------------------------------- -/obj/vehicle/train/relaymove(mob/user, direction) - var/turf/T = get_step_to(src, get_step(src, direction)) - if(!T) - to_chat(user, "You can't find a clear area to step onto.") - return 0 - - if(user != load) - if(user in src) //for handling players stuck in src - this shouldn't happen - but just in case it does - user.forceMove(T) - return 1 - return 0 - - unload(user, direction) - - to_chat(user, "\blue You climb down from [src].") - - return 1 - -/obj/vehicle/train/MouseDrop_T(var/atom/movable/C, mob/user as mob) - if(user.buckled || user.stat || user.restrained() || !Adjacent(user) || !user.Adjacent(C) || !istype(C) || (user == C && !user.canmove)) - return - if(istype(C,/obj/vehicle/train)) - latch(C, user) - else - if(!load(C)) - to_chat(user, "\red You were unable to load [C] on [src].") - -/obj/vehicle/train/attack_hand(mob/user as mob) - if(user.stat || user.restrained() || !Adjacent(user)) - return 0 - - if(user != load && (user in src)) - user.forceMove(loc) //for handling players stuck in src - else if(load) - unload(user) //unload if loaded - else if(!load && !user.buckled) - load(user) //else try climbing on board - else - return 0 - -/obj/vehicle/train/verb/unlatch_v() - set name = "Unlatch" - set desc = "Unhitches this train from the one in front of it." - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(!usr.canmove || usr.stat || usr.restrained() || !Adjacent(usr)) - return - - unattach(usr) - - -//------------------------------------------- -// Latching/unlatching procs -//------------------------------------------- - -//attempts to attach src as a follower of the train T -/obj/vehicle/train/proc/attach_to(obj/vehicle/train/T, mob/user) - if (get_dist(src, T) > 1) - to_chat(user, "\red [src] is too far away from [T] to hitch them together.") - return - - if (lead) - to_chat(user, "\red [src] is already hitched to something.") - return - - if (T.tow) - to_chat(user, "\red [T] is already towing something.") - return - - //check for cycles. - var/obj/vehicle/train/next_car = T - while (next_car) - if (next_car == src) - to_chat(user, "\red That seems very silly.") - return - next_car = next_car.lead - - //latch with src as the follower - lead = T - T.tow = src - dir = lead.dir - - if(user) - to_chat(user, "\blue You hitch [src] to [T].") - - update_stats() - - -//detaches the train from whatever is towing it -/obj/vehicle/train/proc/unattach(mob/user) - if (!lead) - to_chat(user, "\red [src] is not hitched to anything.") - return - - lead.tow = null - lead.update_stats() - - lead = null - - update_stats() - -/obj/vehicle/train/proc/latch(obj/vehicle/train/T, mob/user) - if(!istype(T) || !Adjacent(T)) - return 0 - - var/T_dir = get_dir(src, T) //figure out where T is wrt src - - if(dir == T_dir) //if car is ahead - src.attach_to(T, user) - else if(reverse_direction(dir) == T_dir) //else if car is behind - T.attach_to(src, user) - -//returns 1 if this is the lead car of the train -/obj/vehicle/train/proc/is_train_head() - if (lead) - return 0 - return 1 - -//------------------------------------------------------- -// Stat update procs -// -// Used for updating the stats for how long the train is. -// These are useful for calculating speed based on the -// size of the train, to limit super long trains. -//------------------------------------------------------- -/obj/vehicle/train/update_stats() - //first, seek to the end of the train - var/obj/vehicle/train/T = src - while(T.tow) - //check for cyclic train. - if (T.tow == src) - lead.tow = null - lead.update_stats() - - lead = null - update_stats() - return - T = T.tow - - //now walk back to the front. - var/active_engines = 0 - var/train_length = 0 - while(T) - train_length++ - if (powered && on) - active_engines++ - T.update_car(train_length, active_engines) - T = T.lead - -/obj/vehicle/train/proc/update_car(var/train_length, var/active_engines) - return diff --git a/code/modules/vehicle/train/trains/ambulance.dm b/code/modules/vehicle/train/trains/ambulance.dm deleted file mode 100644 index 6ef9e9822b2..00000000000 --- a/code/modules/vehicle/train/trains/ambulance.dm +++ /dev/null @@ -1,282 +0,0 @@ -/obj/vehicle/train/ambulance/engine - name = "ambulance train tug" - desc = "A ridable electric car designed for pulling ambulance trolleys." - icon = 'icons/obj/vehicles.dmi' - icon_state = "docwagon2" //mulebot icons until I get some proper icons - on = 0 - powered = 1 - locked = 0 - layer = MOB_LAYER + 0.1 - load_item_visible = 1 - load_offset_x = 0 - load_offset_y = 7 - - var/car_limit = 3 //how many cars an engine can pull before performance degrades - active_engines = 1 - var/obj/item/key/ambulance/key - -/obj/vehicle/train/ambulance/trolley - name = "ambulance train trolley" - icon = 'icons/vehicles/CargoTrain.dmi' - icon_state = "ambulance" - anchored = 0 - passenger_allowed = 1 - locked = 0 - - load_item_visible = 1 - load_offset_x = 1 - load_offset_y = 7 - -//------------------------------------------- -// Standard procs -//------------------------------------------- -/obj/vehicle/train/ambulance/engine/New() - ..() - cell = new /obj/item/weapon/stock_parts/cell/high - key = new() - -/obj/vehicle/train/ambulance/engine/Move() - . = ..() - handle_rotation() - update_mob() - -/obj/vehicle/train/ambulance/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(open && istype(W, /obj/item/weapon/wirecutters)) - passenger_allowed = !passenger_allowed - user.visible_message("[user] [passenger_allowed ? "cuts" : "mends"] a cable in [src].","You [passenger_allowed ? "cut" : "mend"] the load limiter cable.") - else - ..() - -/obj/vehicle/train/ambulance/engine/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/key/ambulance)) - if(!key) - user.drop_item() - key = W - W.loc = src - verbs += /obj/vehicle/train/ambulance/engine/verb/remove_key - return - ..() - -/obj/vehicle/train/ambulance/update_icon() - if(open) - //icon_state = "mulebot-hatch" - icon_state = initial(icon_state) - else - icon_state = initial(icon_state) - -/obj/vehicle/train/ambulance/engine/Emag(mob/user as mob) - ..() - flick("mulebot-emagged", src) - -/obj/vehicle/train/ambulance/trolley/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H) - return - -/obj/vehicle/train/ambulance/engine/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H) - ..() - update_stats() - -/obj/vehicle/train/ambulance/engine/remove_cell(var/mob/living/carbon/human/H) - ..() - update_stats() - -/obj/vehicle/train/ambulance/engine/Bump(atom/Obstacle) - var/obj/machinery/door/D = Obstacle - var/mob/living/carbon/human/H = load - if(istype(D) && istype(H)) - D.Bumped(H) //a little hacky, but hey, it works, and repects access rights - - ..() - -/obj/vehicle/train/ambulance/trolley/Bump(atom/Obstacle) - if(!lead) - return //so people can't knock others over by pushing a trolley around - ..() - -/obj/vehicle/train/ambulance/engine/handle_rotation() - if(dir == SOUTH) - layer = FLY_LAYER - else - layer = OBJ_LAYER - -/obj/vehicle/train/ambulance/engine/proc/update_mob() - if(load) - load.dir = dir - switch(dir) - if(SOUTH) - load.pixel_x = 0 - load.pixel_y = 7 - if(WEST) - load.pixel_x = 13 - load.pixel_y = 7 - if(NORTH) - load.pixel_x = 0 - load.pixel_y = 4 - if(EAST) - load.pixel_x = -13 - load.pixel_y = 7 - - -//------------------------------------------- -// Train procs -//------------------------------------------- -/obj/vehicle/train/ambulance/engine/turn_on() - if(!key) - return - else - ..() - update_stats() - -/obj/vehicle/train/ambulance/RunOver(var/mob/living/carbon/human/H) - var/list/parts = list("head", "chest", "l_leg", "r_leg", "l_arm", "r_arm") - - H.apply_effects(5, 5) - for(var/i = 0, i < rand(1,3), i++) - H.apply_damage(rand(1,5), BRUTE, pick(parts)) - -/obj/vehicle/train/ambulance/trolley/RunOver(var/mob/living/carbon/human/H) - ..() - attack_log += text("\[[time_stamp()]\] ran over [H.name] ([H.ckey])") - -/obj/vehicle/train/ambulance/engine/RunOver(var/mob/living/carbon/human/H) - ..() - - if(is_train_head() && istype(load, /mob/living/carbon/human)) - var/mob/living/carbon/human/D = load - to_chat(D, "\red \b You ran over [H]!") - visible_message("\red \The [src] ran over [H]!") - attack_log += text("\[[time_stamp()]\] ran over [key_name(H)], driven by [key_name(D)]") - msg_admin_attack("[key_name_admin(D)] ran over [key_name_admin(H)]") - else - attack_log += text("\[[time_stamp()]\] ran over [key_name(H)]") - - -//------------------------------------------- -// Interaction procs -//------------------------------------------- -/obj/vehicle/train/ambulance/engine/relaymove(mob/user, direction) - if(user != load) - return 0 - - if(is_train_head()) - if(direction == reverse_direction(dir) && tow) //can reverse with no tow - return 0 - if(Move(get_step(src, direction))) - return 1 - return 0 - else - return ..() - -/obj/vehicle/train/ambulance/engine/examine(mob/user) - if(..(user, 1)) - to_chat(user, "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition.") - -/obj/vehicle/train/ambulance/engine/verb/check_power() - set name = "Check power level" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(!cell) - to_chat(usr, "There is no power cell installed in [src].") - return - - to_chat(usr, "The power meter reads [round(cell.percent(), 0.01)]%") - -/obj/vehicle/train/ambulance/engine/verb/start_engine() - set name = "Start engine" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(on) - to_chat(usr, "The engine is already running.") - return - - turn_on() - if (on) - to_chat(usr, "You start [src]'s engine.") - else - if(cell.charge < charge_use) - to_chat(usr, "[src] is out of power.") - else - to_chat(usr, "[src]'s engine won't start.") - -/obj/vehicle/train/ambulance/engine/verb/stop_engine() - set name = "Stop engine" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(!on) - to_chat(usr, "The engine is already stopped.") - return - - turn_off() - if (!on) - to_chat(usr, "You stop [src]'s engine.") - -/obj/vehicle/train/ambulance/engine/verb/remove_key() - set name = "Remove key" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(!key || (load && load != usr)) - return - - if(on) - turn_off() - - key.loc = usr.loc - if(!usr.get_active_hand()) - usr.put_in_hands(key) - key = null - - verbs -= /obj/vehicle/train/ambulance/engine/verb/remove_key - -//------------------------------------------- -// Loading/unloading procs -//------------------------------------------- -/obj/vehicle/train/ambulance/trolley/load(var/atom/movable/C) - if(ismob(C) && !passenger_allowed) - return 0 - if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !ismob(C)) - return 0 - - return ..() - -/obj/vehicle/train/ambulance/engine/load(var/atom/movable/C) - if(!ismob(C)) - return 0 - - return ..() - - -//------------------------------------------------------- -// Stat update procs -// -// Update the trains stats for speed calculations. -// The longer the train, the slower it will go. car_limit -// sets the max number of cars one engine can pull at -// full speed. Adding more cars beyond this will slow the -// train proportionate to the length of the train. Adding -// more engines increases this limit by car_limit per -// engine. -//------------------------------------------------------- - -/obj/vehicle/train/ambulance/engine/proc/update_move_delay() - if(!is_train_head() || !on) - move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind - else - move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains - move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines) - move_delay += 1+config.run_speed //base reference speed - move_delay *= 1.05 diff --git a/code/modules/vehicle/train/trains/cargo/cargo_subtypes/fourwheeler.dm b/code/modules/vehicle/train/trains/cargo/cargo_subtypes/fourwheeler.dm deleted file mode 100644 index 9033a1f5014..00000000000 --- a/code/modules/vehicle/train/trains/cargo/cargo_subtypes/fourwheeler.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/vehicle/train/cargo/engine/fourwheeler //make this hold passengers - name = "fourwheeler" - desc = "A fast and highly maneuverable vehicle." - icon = 'icons/vehicles/4wheeler.dmi' - icon_state = "fourwheel" - emagged = 0 - mob_offset_y = 6 - load_offset_x = 0 - health = 200 - charge_use = 0 - -/obj/vehicle/train/cargo/engine/fourwheeler/proc/update_dir_fourwheel_overlays() - overlays = null - if(src.dir == NORTH||SOUTH) - if(src.dir == NORTH) - var/image/I = new(icon = 'icons/vehicles/4wheeler.dmi', icon_state = "4wheeler_north", layer = src.layer + 0.2) //over mobs - overlays += I - else if(src.dir == SOUTH) - var/image/I = new(icon = 'icons/vehicles/4wheeler.dmi', icon_state = "4wheeler_south", layer = src.layer + 0.2) //over mobs - overlays += I - -/obj/vehicle/train/cargo/engine/fourwheeler/New() - ..() - update_dir_fourwheel_overlays() - -/obj/vehicle/train/cargo/engine/fourwheeler/Move() - ..() - update_dir_fourwheel_overlays() - -/obj/vehicle/train/cargo/engine/fourwheeler/handle_rotation() - update_dir_fourwheel_overlays() - ..() \ No newline at end of file diff --git a/code/modules/vehicle/train/trains/cargo/cargo_subtypes/motorcycle.dm b/code/modules/vehicle/train/trains/cargo/cargo_subtypes/motorcycle.dm deleted file mode 100644 index 1986b195a17..00000000000 --- a/code/modules/vehicle/train/trains/cargo/cargo_subtypes/motorcycle.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/vehicle/train/cargo/engine/motorcycle - name = "motorcycle" - desc = "A fast and highly maneuverable vehicle." - icon = 'icons/vehicles/motorcycle.dmi' - icon_state = "motorcycle_4dir" - emagged = 0 - mob_offset_y = 6 - load_offset_x = 0 - health = 100 - charge_use = 0 - -/obj/vehicle/train/cargo/engine/motorcycle/proc/update_dir_motorcycle_overlays() - overlays = null - if(src.dir == NORTH||SOUTH) - if(src.dir == NORTH) - var/image/I = new(icon = 'icons/vehicles/motorcycle.dmi', icon_state = "motorcycle_overlay_n", layer = src.layer + 0.2) //over mobs - overlays += I - else if(src.dir == SOUTH) - var/image/I = new(icon = 'icons/vehicles/motorcycle.dmi', icon_state = "motorcycle_overlay_s", layer = src.layer + 0.2) //over mobs - overlays += I - else - var/image/I = new(icon = 'icons/vehicles/motorcycle.dmi', icon_state = "motorcycle_overlay_side", layer = src.layer + 0.2) //over mobs - overlays += I - -/obj/vehicle/train/cargo/engine/motorcycle/New() - ..() - update_dir_motorcycle_overlays() - -/obj/vehicle/train/cargo/engine/motorcycle/Move() - ..() - update_dir_motorcycle_overlays() - -/obj/vehicle/train/cargo/engine/motorcycle/handle_rotation() - update_dir_motorcycle_overlays() //this goes first, because vehicle/handle_rotation() just returns - ..() diff --git a/code/modules/vehicle/train/trains/cargo/cargo_subtypes/sportscar.dm b/code/modules/vehicle/train/trains/cargo/cargo_subtypes/sportscar.dm deleted file mode 100644 index 52505312945..00000000000 --- a/code/modules/vehicle/train/trains/cargo/cargo_subtypes/sportscar.dm +++ /dev/null @@ -1,52 +0,0 @@ -//rename to sportscar if you need -//mostly, my changes just update the C.pixel_ y and x on every iteration of the overlay update proc, since default vehicle code //only does that upon entering. Watch the weird formatting pastebin introduces. - -/obj/vehicle/train/cargo/engine/sportscar - name = "sports car" - desc = "A very luxurious vehicle." - icon = 'icons/vehicles/sportscar.dmi' - icon_state = "sportscar" - emagged = 0 - health = 100 - charge_use = 0 - bound_width = 64 - bound_height = 64 - movable = 0 - - -/obj/vehicle/train/cargo/engine/sportscar/proc/update_dir_sportscar_overlays() - var/atom/movable/C = src.load - src.overlays = null - if(src.dir == NORTH||SOUTH||WEST) - if(src.dir == NORTH) - var/image/I = new(icon = 'icons/vehicles/sportscar.dmi', icon_state = "sportscar_north", layer = src.layer + 0.2) //over mobs - src.overlays += I - src.mob_offset_x = 2 - src.mob_offset_y = 20 - else if(src.dir == SOUTH) - var/image/I = new(icon = 'icons/vehicles/sportscar.dmi', icon_state = "sportscar_south", layer = src.layer + 0.2) //over mobs - overlays += I - src.mob_offset_x = 20 - src.mob_offset_y = 27 - else if(src.dir == WEST) - src.mob_offset_x = 34 - src.mob_offset_y = 10 - var/image/I = new(icon = 'icons/vehicles/sportscar.dmi', icon_state = "sportscar_west", layer = src.layer + 0.2) //over mobs - src.overlays += I - else if(src.dir == EAST) - var/image/I = new(icon = 'icons/vehicles/sportscar.dmi', icon_state = "sportscar_east", layer = src.layer + 0.2) //over mobs - src.mob_offset_x = 20 - src.mob_offset_y = 23 - src.overlays += I - if(ismob(C)) - C.pixel_y = src.mob_offset_y - C.pixel_x = src.mob_offset_x - - -/obj/vehicle/train/cargo/engine/sportscar/New() - ..() - update_dir_sportscar_overlays() - -/obj/vehicle/train/cargo/engine/sportscar/Move() - ..() - update_dir_sportscar_overlays() \ No newline at end of file diff --git a/code/modules/vehicle/train/trains/cargo/cargo_train.dm b/code/modules/vehicle/train/trains/cargo/cargo_train.dm deleted file mode 100644 index 8df907b1420..00000000000 --- a/code/modules/vehicle/train/trains/cargo/cargo_train.dm +++ /dev/null @@ -1,282 +0,0 @@ -/obj/vehicle/train/cargo/engine - name = "cargo train tug" - desc = "A ridable electric car designed for pulling cargo trolleys." - icon = 'icons/obj/vehicles.dmi' - icon_state = "cargo_engine" - on = 0 - powered = 1 - locked = 0 - - load_item_visible = 1 - load_offset_x = 0 - mob_offset_y = 7 - - var/car_limit = 3 //how many cars an engine can pull before performance degrades - active_engines = 1 - var/obj/item/weapon/key/cargo_train/key - -/obj/item/weapon/key/cargo_train - name = "key" - desc = "A keyring with a small steel key, and a yellow fob reading \"Choo Choo!\"." - icon = 'icons/obj/vehicles.dmi' - icon_state = "train_keys" - w_class = 1 - -/obj/vehicle/train/cargo/trolley - name = "cargo train trolley" - icon = 'icons/obj/vehicles.dmi' - icon_state = "cargo_trailer" - anchored = 0 - passenger_allowed = 0 - locked = 0 - - load_item_visible = 1 - load_offset_x = 0 - load_offset_y = 4 - mob_offset_y = 8 - -//------------------------------------------- -// Standard procs -//------------------------------------------- -/obj/vehicle/train/cargo/engine/New() - ..() - cell = new /obj/item/weapon/stock_parts/cell/high - key = new() - var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs - overlays += I - turn_off() //so engine verbs are correctly set - -/obj/vehicle/train/cargo/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(open && istype(W, /obj/item/weapon/wirecutters)) - passenger_allowed = !passenger_allowed - user.visible_message("[user] [passenger_allowed ? "cuts" : "mends"] a cable in [src].","You [passenger_allowed ? "cut" : "mend"] the load limiter cable.") - else - ..() - -/obj/vehicle/train/cargo/engine/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/weapon/key/cargo_train)) - if(!key) - user.drop_item() - W.forceMove(src) - key = W - verbs += /obj/vehicle/train/cargo/engine/verb/remove_key - return - ..() - -/obj/vehicle/train/cargo/update_icon() - if(open) - icon_state = initial(icon_state) + "_open" - else - icon_state = initial(icon_state) - -/obj/vehicle/train/cargo/trolley/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H) - return - -/obj/vehicle/train/cargo/engine/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H) - ..() - update_stats() - -/obj/vehicle/train/cargo/engine/remove_cell(var/mob/living/carbon/human/H) - ..() - update_stats() - -/obj/vehicle/train/cargo/engine/Bump(atom/Obstacle) - var/obj/machinery/door/D = Obstacle - var/mob/living/carbon/human/H = load - if(istype(D) && istype(H)) - D.Bumped(H) //a little hacky, but hey, it works, and respects access rights - - ..() - -/obj/vehicle/train/cargo/trolley/Bump(atom/Obstacle) - if(!lead) - return //so people can't knock others over by pushing a trolley around - ..() - -//------------------------------------------- -// Train procs -//------------------------------------------- -/obj/vehicle/train/cargo/engine/turn_on() - if(!key) - return - else - ..() - update_stats() - - verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine - verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine - - if(on) - verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine - else - verbs += /obj/vehicle/train/cargo/engine/verb/start_engine - -/obj/vehicle/train/cargo/engine/turn_off() - ..() - - verbs -= /obj/vehicle/train/cargo/engine/verb/stop_engine - verbs -= /obj/vehicle/train/cargo/engine/verb/start_engine - - if(!on) - verbs += /obj/vehicle/train/cargo/engine/verb/start_engine - else - verbs += /obj/vehicle/train/cargo/engine/verb/stop_engine - -/obj/vehicle/train/cargo/RunOver(var/mob/living/carbon/human/H) - var/list/parts = list("head", "chest", "l_leg", "r_leg", "l_arm", "r_arm") - - H.apply_effects(5, 5) - for(var/i = 0, i < rand(1,3), i++) - H.apply_damage(rand(1,5), BRUTE, pick(parts)) - -/obj/vehicle/train/cargo/trolley/RunOver(var/mob/living/carbon/human/H) - ..() - attack_log += text("\[[time_stamp()]\] ran over [key_name(H)]") - -/obj/vehicle/train/cargo/engine/RunOver(var/mob/living/carbon/human/H) - ..() - - if(is_train_head() && istype(load, /mob/living/carbon/human)) - var/mob/living/carbon/human/D = load - to_chat(D, "\red \b You ran over [H]!") - visible_message("\red \The [src] ran over [H]!") - attack_log += text("\[[time_stamp()]\] ran over [key_name(H)], driven by [key_name(D)]") - msg_admin_attack("[key_name_admin(D)] ran over [key_name_admin(H)]") - else - attack_log += text("\[[time_stamp()]\] ran over [key_name(H)]") - - -//------------------------------------------- -// Interaction procs -//------------------------------------------- -/obj/vehicle/train/cargo/engine/relaymove(mob/user, direction) - if(user != load) - return 0 - - if(is_train_head()) - if(direction == reverse_direction(dir) && tow) - return 0 - if(Move(get_step(src, direction))) - return 1 - return 0 - else - return ..() - -/obj/vehicle/train/cargo/engine/examine(mob/user) - if(!..(user, 1)) - return - - to_chat(user, "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition.") - to_chat(user, "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%") - -/obj/vehicle/train/cargo/engine/verb/start_engine() - set name = "Start engine" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(on) - to_chat(usr, "The engine is already running.") - return - - turn_on() - if (on) - to_chat(usr, "You start [src]'s engine.") - else - if(cell.charge < charge_use) - to_chat(usr, "[src] is out of power.") - else - to_chat(usr, "[src]'s engine won't start.") - -/obj/vehicle/train/cargo/engine/verb/stop_engine() - set name = "Stop engine" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(!on) - to_chat(usr, "The engine is already stopped.") - return - - turn_off() - if (!on) - to_chat(usr, "You stop [src]'s engine.") - -/obj/vehicle/train/cargo/engine/verb/remove_key() - set name = "Remove key" - set category = "Object" - set src in view(1) - - if(!istype(usr, /mob/living/carbon/human)) - return - - if(!key || (load && load != usr)) - return - - if(on) - turn_off() - - key.loc = usr.loc - if(!usr.get_active_hand()) - usr.put_in_hands(key) - key = null - - verbs -= /obj/vehicle/train/cargo/engine/verb/remove_key - -//------------------------------------------- -// Loading/unloading procs -//------------------------------------------- -/obj/vehicle/train/cargo/trolley/load(var/atom/movable/C) - if(ismob(C) && !passenger_allowed) - return 0 - if(!istype(C,/obj/machinery) && !istype(C,/obj/structure/closet) && !istype(C,/obj/structure/largecrate) && !istype(C,/obj/structure/reagent_dispensers) && !istype(C,/obj/structure/ore_box) && !istype(C, /mob/living/carbon/human)) - return 0 - - ..() - - if(load) - return 1 - -/obj/vehicle/train/cargo/engine/load(var/atom/movable/C) - if(!istype(C, /mob/living/carbon/human)) - return 0 - - return ..() - - -//------------------------------------------------------- -// Stat update procs -// -// Update the trains stats for speed calculations. -// The longer the train, the slower it will go. car_limit -// sets the max number of cars one engine can pull at -// full speed. Adding more cars beyond this will slow the -// train proportionate to the length of the train. Adding -// more engines increases this limit by car_limit per -// engine. -//------------------------------------------------------- -/obj/vehicle/train/cargo/engine/update_car(var/train_length, var/active_engines) - src.train_length = train_length - src.active_engines = active_engines - - //Update move delay - if(!is_train_head() || !on) - move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind - else - move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains - move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines) - move_delay += config.run_speed //base reference speed - move_delay *= 1.1 //makes cargo trains 10% slower than running when not overweight - -/obj/vehicle/train/cargo/trolley/update_car(var/train_length, var/active_engines) - src.train_length = train_length - src.active_engines = active_engines - - if(!lead && !tow) - anchored = 0 - else - anchored = 1 \ No newline at end of file diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm index 105f02148b7..bb112440944 100644 --- a/code/modules/vehicle/vehicle.dm +++ b/code/modules/vehicle/vehicle.dm @@ -1,375 +1,159 @@ + /obj/vehicle name = "vehicle" + desc = "A basic vehicle, vroom" icon = 'icons/obj/vehicles.dmi' - layer = MOB_LAYER + 0.1 //so it sits above objects including mobs + icon_state = "fuckyou" density = 1 - anchored = 1 - animate_movement=1 - light_range = 3 - + anchored = 0 + can_buckle = 1 buckle_lying = 0 + var/keytype = null //item typepath, if non-null an item of this type is needed in your hands to drive this vehicle + var/next_vehicle_move = 0 //used for move delays + var/vehicle_move_delay = 2 //tick delay between movements, lower = faster, higher = slower + var/auto_door_open = TRUE + var/needs_gravity = 0//To allow non-space vehicles to move in no gravity or not, mostly for adminbus - var/attack_log = null - var/on = 0 - var/health = 0 //do not forget to set health for your vehicle! - var/maxhealth = 0 - var/fire_dam_coeff = 1.0 - var/brute_dam_coeff = 1.0 - var/open = 0 //Maint panel - var/locked = 1 - var/stat = 0 - var/emagged = 0 - var/powered = 0 //set if vehicle is powered and should use fuel when moving - var/move_delay = 1 //set this to limit the speed of the vehicle - var/movable = 1 - - var/obj/item/weapon/stock_parts/cell/cell - var/charge_use = 5 //set this to adjust the amount of power the vehicle uses per move - - var/atom/movable/load //all vehicles can take a load, since they should all be a least drivable - var/load_item_visible = 1 //set if the loaded item should be overlayed on the vehicle sprite - var/load_offset_x = 0 //pixel_x offset for item overlay - var/load_offset_y = 0 //pixel_y offset for item overlay - var/mob_offset_x = 0 //pixel_x offset for mob overlay - var/mob_offset_y = 0 //pixel_y offset for mob overlay + //Pixels + var/generic_pixel_x = 0 //All dirs show this pixel_x for the driver + var/generic_pixel_y = 0 //All dirs shwo this pixel_y for the driver -//------------------------------------------- -// Standard procs -//------------------------------------------- /obj/vehicle/New() ..() - //spawn the cell you want in each vehicle + handle_vehicle_layer() -/obj/vehicle/Move() - if(can_move()) - var/init_anc = anchored - anchored = 0 - if(!..()) - anchored = init_anc - return 0 - anchored = init_anc - - if(on && powered) - cell.use(charge_use) - - if(load) - load.forceMove(loc)// = loc - load.dir = dir - - return 1 +//APPEARANCE +/obj/vehicle/proc/handle_vehicle_layer() + if(dir != NORTH) + layer = MOB_LAYER+0.1 else - return 0 - -/obj/vehicle/proc/can_move() - if(world.time <= l_move_time + move_delay) - return 0 - - if(!on || !powered) - return 0 - - if(on && powered && cell.charge < charge_use) - turn_off() - return 0 - - if(istype(loc, /turf/space)) - return 0 - - return 1 + layer = OBJ_LAYER -/obj/vehicle/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/weapon/hand_labeler)) - return - if(istype(W, /obj/item/weapon/screwdriver)) - if(!locked) - open = !open - update_icon() - to_chat(user, "Maintenance panel is now [open ? "opened" : "closed"].") - else if(istype(W, /obj/item/weapon/crowbar) && cell && open) - remove_cell(user) +//Override this to set your vehicle's various pixel offsets +//if they differ between directions, otherwise use the +//generic variables +/obj/vehicle/proc/handle_vehicle_offsets() + if(buckled_mob) + buckled_mob.dir = dir + buckled_mob.pixel_x = generic_pixel_x + buckled_mob.pixel_y = generic_pixel_y - else if(istype(W, /obj/item/weapon/stock_parts/cell) && !cell && open) - insert_cell(W, user) - else if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/T = W - if(T.welding) - if(health < maxhealth) - if(open) - health = min(maxhealth, health+10) - user.visible_message("\red [user] repairs [src]!","\blue You repair [src]!") - else - to_chat(user, "Unable to repair with the maintenance panel closed.") - else - to_chat(user, "[src] does not need a repair.") - else - to_chat(user, "Unable to repair while [src] is off.") - else if(hasvar(W,"force") && hasvar(W,"damtype")) - switch(W.damtype) - if("fire") - health -= W.force * fire_dam_coeff - if("brute") - health -= W.force * brute_dam_coeff - ..() - healthcheck() - else - ..() -/obj/vehicle/emag_act(user as mob) - if(!emagged) - Emag(user) - -/obj/vehicle/attack_animal(var/mob/living/simple_animal/M as mob) - if(M.melee_damage_upper == 0) return - health -= M.melee_damage_upper - src.visible_message("\red [M] has [M.attacktext] [src]!") - M.attack_log += text("\[[time_stamp()]\] attacked [src.name]") - if(prob(10)) - new /obj/effect/decal/cleanable/blood/oil(src.loc) - healthcheck() - -/obj/vehicle/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - -/obj/vehicle/blob_act() - src.health -= rand(20,40)*fire_dam_coeff - healthcheck() +/obj/vehicle/update_icon() return -/obj/vehicle/ex_act(severity) - switch(severity) - if(1.0) - explode() - return - if(2.0) - health -= rand(5,10)*fire_dam_coeff - health -= rand(10,20)*brute_dam_coeff - healthcheck() - return - if(3.0) - if (prob(50)) - health -= rand(1,5)*fire_dam_coeff - health -= rand(1,5)*brute_dam_coeff - healthcheck() + + +//KEYS +/obj/vehicle/proc/keycheck(mob/user) + if(keytype) + if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype)) + return 1 + else + return 1 + return 0 + +/obj/item/key + name = "key" + desc = "A small grey key." + icon = 'icons/obj/vehicles.dmi' + icon_state = "key" + w_class = 1 + + +//BUCKLE HOOKS +/obj/vehicle/unbuckle_mob(force = 0) + if(buckled_mob) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 0 + . = ..() + + +/obj/vehicle/user_buckle_mob(mob/living/M, mob/user) + if(user.incapacitated()) + return + for(var/atom/movable/A in get_turf(src)) + if(A.density) + if(A != src && A != M) return - return + M.loc = get_turf(src) + ..() + handle_vehicle_offsets() -/obj/vehicle/emp_act(severity) - var/was_on = on - stat |= EMPED - var/obj/effect/overlay/pulse2 = new/obj/effect/overlay ( src.loc ) - pulse2.icon = 'icons/effects/effects.dmi' - pulse2.icon_state = "empdisable" - pulse2.name = "emp sparks" - pulse2.anchored = 1 - pulse2.dir = pick(cardinal) - spawn(10) - pulse2.delete() - if(on) - turn_off() - spawn(severity*300) - stat &= ~EMPED - if(was_on) - turn_on() +/obj/vehicle/bullet_act(obj/item/projectile/Proj) + if(buckled_mob) + buckled_mob.bullet_act(Proj) -/obj/vehicle/attack_ai(mob/user as mob) - return +//MOVEMENT +/obj/vehicle/relaymove(mob/user, direction) + if(user.incapacitated()) + unbuckle_mob() -/obj/vehicle/proc/handle_rotation() - return + if(keycheck(user)) + if(!Process_Spacemove(direction) || world.time < next_vehicle_move || !isturf(loc)) return + next_vehicle_move = world.time + vehicle_move_delay -//------------------------------------------- -// Vehicle procs -//------------------------------------------- -/obj/vehicle/proc/turn_on() - if(stat) - return 0 - if(powered && cell.charge < charge_use) - return 0 - on = 1 - set_light(initial(light_range)) - update_icon() - return 1 + step(src, direction) -/obj/vehicle/proc/turn_off() - on = 0 - set_light(0) - update_icon() + if(buckled_mob) + if(buckled_mob.loc != loc) + buckled_mob.buckled = null //Temporary, so Move() succeeds. + buckled_mob.buckled = src //Restoring -/obj/vehicle/proc/Emag(mob/user as mob) - emagged = 1 + if(istype(src.loc, /turf/simulated)) + var/turf/simulated/T = src.loc + if(T.wet == TURF_WET_LUBE) //Lube! Fall off! + playsound(src, 'sound/misc/slip.ogg', 50, 1, -3) + buckled_mob.Stun(7) + buckled_mob.Weaken(7) + unbuckle_mob() + step(src, dir) - if(locked) - locked = 0 - to_chat(user, "You bypass [src]'s controls.") + handle_vehicle_layer() + handle_vehicle_offsets() + else + to_chat(user, "You'll need the keys in one of your hands to drive \the [name].") -/obj/vehicle/proc/explode() - src.visible_message("\red [src] blows apart!", 1) - var/turf/Tsec = get_turf(src) - new /obj/item/stack/rods(Tsec) - new /obj/item/stack/rods(Tsec) - new /obj/item/stack/cable_coil/cut(Tsec) +/obj/vehicle/Move(NewLoc,Dir=0,step_x=0,step_y=0) + ..() + handle_vehicle_layer() + handle_vehicle_offsets() - if(cell) - cell.forceMove(Tsec) - cell.update_icon() - cell = null - //stuns people who are thrown off a train that has been blown up - if(istype(load, /mob/living)) - var/mob/living/M = load - M.apply_effects(5, 5) +/obj/vehicle/attackby(obj/item/I, mob/user, params) + if(keytype && istype(I, keytype)) + to_chat(user, "Hold [I] in one of your hands while you drive \the [name].") - unload() - new /obj/effect/gibspawner/robot(Tsec) - new /obj/effect/decal/cleanable/blood/oil(src.loc) - - qdel(src) - -/obj/vehicle/proc/healthcheck() - if(health <= 0) - explode() - -/obj/vehicle/proc/powercheck() - if(!cell && !powered) - return 0 - - if(!cell && powered) - turn_off() - return 0 - - if(cell.charge < charge_use) - turn_off() - return 0 - - if(cell && powered) - turn_on() - return 1 - -/obj/vehicle/proc/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H) - if(cell) - return - if(!istype(C)) - return - - H.unEquip(C) - C.forceMove(src) - cell = C - powercheck() - to_chat(usr, "You install [C] in [src].") - -/obj/vehicle/proc/remove_cell(var/mob/living/carbon/human/H) - if(!cell) - return - - to_chat(usr, "You remove [cell] from [src].") - cell.forceMove(get_turf(H)) - H.put_in_hands(cell) - cell = null - powercheck() +/obj/vehicle/Bump(atom/movable/M) + . = ..() + if(auto_door_open) + if(istype(M, /obj/machinery/door) && buckled_mob) + M.Bumped(buckled_mob) /obj/vehicle/proc/RunOver(var/mob/living/carbon/human/H) return //write specifics for different vehicles -//------------------------------------------- -// Loading/unloading procs -// -// Set specific item restriction checks in -// the vehicle load() definition before -// calling this parent proc. -//------------------------------------------- -/obj/vehicle/proc/load(var/atom/movable/C) - //define allowed items for loading in specific vehicle definitions - if(!isturf(C.loc)) //To prevent loading things from someone's inventory, which wouldn't get handled properly. - return 0 - if(load || C.anchored) - return 0 +/obj/vehicle/Process_Spacemove(direction) + if(has_gravity(src)) + return 1 - // if a create/closet, close before loading - var/obj/structure/closet/crate = C - if(istype(crate)) - crate.close() + if(pulledby) + return 1 - C.forceMove(loc) - C.dir = dir - C.anchored = 1 + if(needs_gravity) + return 1 - load = C + return 0 - if(load_item_visible) - if(ismob(C) && mob_offset_x != 0 && mob_offset_y != 0) //if the offset is not set, use load offset - C.pixel_x += mob_offset_x - C.pixel_y += mob_offset_y - else - C.pixel_x += load_offset_x - C.pixel_y += load_offset_y - C.layer = layer + 0.1 //so it sits above the vehicle +/obj/vehicle/space + pressure_resistance = INFINITY - if(ismob(C)) - var/mob/M = C - M.buckled = src - M.update_canmove() - - return 1 - - -/obj/vehicle/proc/unload(var/mob/user, var/direction) - if(!load) - return - - var/turf/dest = null - - //find a turf to unload to - if(direction) //if direction specified, unload in that direction - dest = get_step(src, direction) - else if(user) //if a user has unloaded the vehicle, unload at their feet - dest = get_turf(user) - - if(!dest) - dest = get_step_to(src, get_step(src, turn(dir, 90))) //try unloading to the side of the vehicle first if neither of the above are present - - //if these all result in the same turf as the vehicle or nullspace, pick a new turf with open space - if(!dest || dest == get_turf(src)) - var/list/options = new() - for(var/test_dir in alldirs) - var/new_dir = get_step_to(src, get_step(src, test_dir)) - if(new_dir && load.Adjacent(new_dir)) - options += new_dir - if(options.len) - dest = pick(options) - else - dest = get_turf(src) //otherwise just dump it on the same turf as the vehicle - - if(!isturf(dest)) //if there still is nowhere to unload, cancel out since the vehicle is probably in nullspace - return 0 - - load.forceMove(dest) - load.dir = get_dir(loc, dest) - load.anchored = initial(load.anchored) - load.pixel_x = initial(load.pixel_x) - load.pixel_y = initial(load.pixel_y) - load.layer = initial(load.layer) - - if(ismob(load)) - var/mob/M = load - M.buckled = null - M.anchored = initial(M.anchored) - M.update_canmove() - - load = null - - return 1 - - -//------------------------------------------------------- -// Stat update procs -//------------------------------------------------------- -/obj/vehicle/proc/update_stats() - return \ No newline at end of file +/obj/vehicle/space/Process_Spacemove(direction) + return 1 \ No newline at end of file diff --git a/icons/obj/bike.dmi b/icons/obj/bike.dmi new file mode 100644 index 00000000000..db4cb6d1aa0 Binary files /dev/null and b/icons/obj/bike.dmi differ diff --git a/paradise.dme b/paradise.dme index 9736e6d070c..ca1495b92b1 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1976,13 +1976,15 @@ #include "code\modules\tram\tram_floor.dm" #include "code\modules\tram\tram_rail.dm" #include "code\modules\tram\tram_wall.dm" +#include "code\modules\vehicle\ambulance.dm" +#include "code\modules\vehicle\atv.dm" +#include "code\modules\vehicle\janicart.dm" +#include "code\modules\vehicle\motorcycle.dm" +#include "code\modules\vehicle\secway.dm" +#include "code\modules\vehicle\snowmobile.dm" +#include "code\modules\vehicle\speedbike.dm" +#include "code\modules\vehicle\sportscar.dm" #include "code\modules\vehicle\vehicle.dm" -#include "code\modules\vehicle\train\train.dm" -#include "code\modules\vehicle\train\trains\ambulance.dm" -#include "code\modules\vehicle\train\trains\cargo\cargo_train.dm" -#include "code\modules\vehicle\train\trains\cargo\cargo_subtypes\fourwheeler.dm" -#include "code\modules\vehicle\train\trains\cargo\cargo_subtypes\motorcycle.dm" -#include "code\modules\vehicle\train\trains\cargo\cargo_subtypes\sportscar.dm" #include "interface\interface.dm" #include "interface\stylesheet.dm" #include "interface\skin.dmf"