diff --git a/_maps/RandomRuins/LavaRuins/_maplisting.txt b/_maps/RandomRuins/LavaRuins/_maplisting.txt deleted file mode 100644 index 175537f9008..00000000000 --- a/_maps/RandomRuins/LavaRuins/_maplisting.txt +++ /dev/null @@ -1,34 +0,0 @@ -#List ALL lava ruins here. This file is for small things that would appear in lavaland, like a downed ship or hidden room. -#Maps must be the full path to them. Any map you make but forget to list here may as well not exist as far as the game is concerned. -#Blacklisting ruins takes place at conflig/lavaRuinBlacklist.txt, don't remove anything here unless you're removing the map entirely - -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -##BIODOMES -_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm -_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm -_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_cube.dmm - -##RESPAWN -_maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm - -##SIN -_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm - -##MISC -_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm -_maps/RandomRuins/LavaRuins/lavaland_fountain_hall.dmm -_maps/RandomRuins/LavaRuins/lavaland_gym.dmm \ No newline at end of file diff --git a/_maps/RandomRuins/SpaceRuins/_maplisting.txt b/_maps/RandomRuins/SpaceRuins/_maplisting.txt deleted file mode 100644 index 72681d304a3..00000000000 --- a/_maps/RandomRuins/SpaceRuins/_maplisting.txt +++ /dev/null @@ -1,26 +0,0 @@ -#List ALL space ruins here. This file is for small things that would appear in space, like an asteroid or broken escape pod. -#Maps must be the full path to them. Any map you make but forget to list here may as well not exist as far as the game is concerned. -#Blacklisting ruins takes place in the config folder file spaceRuinBlacklist.txt, don't remove anything here unless you're removing the map entirely - -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -_maps/RandomRuins/SpaceRuins/way_home.dmm -_maps/RandomRuins/SpaceRuins/asteroid1.dmm -_maps/RandomRuins/SpaceRuins/asteroid2.dmm -_maps/RandomRuins/SpaceRuins/asteroid3.dmm -_maps/RandomRuins/SpaceRuins/asteroid4.dmm -_maps/RandomRuins/SpaceRuins/asteroid5.dmm -_maps/RandomRuins/SpaceRuins/derelict1.dmm -_maps/RandomRuins/SpaceRuins/derelict2.dmm -_maps/RandomRuins/SpaceRuins/derelict3.dmm -_maps/RandomRuins/SpaceRuins/derelict4.dmm -_maps/RandomRuins/SpaceRuins/derelict5.dmm -_maps/RandomRuins/SpaceRuins/spacebar.dmm -_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm -_maps/RandomRuins/SpaceRuins/deepstorage.dmm -_maps/RandomRuins/SpaceRuins/emptyshell.dmm -_maps/RandomRuins/SpaceRuins/gasthelizards.dmm -_maps/RandomRuins/SpaceRuins/intactemptyship.dmm -_maps/RandomRuins/SpaceRuins/mechtransport.dmm -_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm -_maps/RandomRuins/SpaceRuins/onehalf.dmm \ No newline at end of file diff --git a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm index 8991d416385..57039bae9d3 100644 --- a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -13,7 +13,7 @@ "am" = (/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/turf/open/floor/grass,/area/ruin/unpowered) "an" = (/mob/living/simple_animal/hostile/poison/bees,/turf/open/floor/grass,/area/ruin/unpowered) "ao" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/open/floor/grass,/area/ruin/unpowered) -"ap" = (/mob/living/simple_animal/hostile/asteroid/goldgrub,/turf/open/floor/plating/asteroid,/area/ruin/unpowered) +"ap" = (/mob/living/simple_animal/hostile/asteroid/goldgrub{will_burrow = 0},/turf/open/floor/plating/asteroid,/area/ruin/unpowered) "aq" = (/obj/structure/flora/ausbushes/grassybush,/turf/open/floor/grass,/area/ruin/unpowered) "ar" = (/obj/structure/flora/rock/pile,/turf/open/floor/plating/asteroid,/area/ruin/unpowered) "as" = (/mob/living/simple_animal/hostile/asteroid/basilisk,/turf/open/floor/plating/asteroid,/area/ruin/unpowered) diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 7bbf634d695..51daaeb0132 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -104,7 +104,7 @@ "bZ" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/open/floor/plasteel,/area/ruin/unpowered) "ca" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/floorgrime,/area/ruin/unpowered) "cb" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/floorgrime,/area/ruin/unpowered) -"cc" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/unpowered) +"cc" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/unpowered) "cd" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen{dir = 1; name = "Bunker Entrance"; network = list("Bunker1"); pixel_x = 0; pixel_y = 2},/turf/open/floor/plasteel,/area/ruin/unpowered) "ce" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "bunker1"; name = "Inner Doors"; pixel_y = 6},/obj/machinery/button/door{id = "bunker2"; name = "Outer Doors"; pixel_y = -4},/turf/open/floor/plasteel/floorgrime,/area/ruin/unpowered) "cf" = (/obj/machinery/door/poddoor{id = "bunker1"; name = "Bunker Door"; tag = "inner"},/turf/open/floor/plating,/area/ruin/unpowered) diff --git a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm index a89e9b0d62c..b0c1f95d53f 100644 --- a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm @@ -7,7 +7,7 @@ "g" = (/obj/structure/closet/crate/secure/loot,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "h" = (/obj/structure/table,/obj/machinery/button/door{id = "mechaship1"; name = "Mecha Cargo Ship Doors"},/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "i" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) -"j" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) +"j" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "k" = (/obj/effect/decal/cleanable/vomit/old,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "l" = (/obj/effect/decal/remains/human,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "m" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index e4e78df2b49..d5af9dd9789 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -105,8 +105,8 @@ "ca" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cb" = (/obj/structure/table/reinforced,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cc" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) -"cd" = (/obj/machinery/light{dir = 1},/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) -"ce" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) +"cd" = (/obj/machinery/light{dir = 1},/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) +"ce" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cf" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Bridge APC"; pixel_y = 24},/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/reinforced,/obj/item/stack/spacecash/c500{pixel_y = 8},/obj/item/stack/spacecash/c1000,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "ch" = (/obj/structure/girder/reinforced,/turf/open/floor/plating/airless,/area/space) diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm index 8368eef3e58..2403575403f 100644 --- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -3,7 +3,7 @@ "c" = (/obj/structure/grille,/turf/open/floor/plating,/area/ruin/unpowered) "d" = (/turf/closed/wall/r_wall,/area/ruin/unpowered) "e" = (/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/cell/hyper,/turf/open/floor/plasteel,/area/ruin/unpowered) -"f" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/unpowered) +"f" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/unpowered) "g" = (/turf/open/floor/plasteel,/area/ruin/unpowered) "h" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel,/area/ruin/unpowered) "i" = (/obj/machinery/door/airlock/external,/turf/open/floor/plating,/area/ruin/unpowered) diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 72d1d2d19ee..6ef98e0b2ae 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -2,7 +2,7 @@ "ab" = (/turf/closed/wall/r_wall,/area/awaymission/academy/headmaster) "ac" = (/mob/living/simple_animal/hostile/carp/ranged{faction = list("wizard")},/turf/open/space,/area/space) "ad" = (/obj/structure/filingcabinet/filingcabinet,/turf/open/floor/carpet,/area/awaymission/academy/headmaster) -"ae" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/carpet,/area/awaymission/academy/headmaster) +"ae" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/carpet,/area/awaymission/academy/headmaster) "af" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/turf/open/floor/carpet,/area/awaymission/academy/headmaster) "ag" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/blue,/turf/open/floor/carpet,/area/awaymission/academy/headmaster) "ah" = (/turf/open/floor/carpet,/area/awaymission/academy/headmaster) @@ -401,7 +401,7 @@ "hK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/weapon/caution,/turf/open/floor/plasteel{icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft) "hL" = (/obj/structure/mecha_wreckage/durand,/turf/open/floor/plating,/area/awaymission/academy/classrooms) "hM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) -"hN" = (/obj/machinery/constructable_frame/machine_frame,/turf/open/floor/plating,/area/awaymission/academy/academyaft) +"hN" = (/obj/structure/frame/machine,/turf/open/floor/plating,/area/awaymission/academy/academyaft) "hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating,/area/awaymission/academy/academyaft) "hP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "hQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) @@ -423,7 +423,7 @@ "ig" = (/obj/item/stack/cable_coil/random,/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ih" = (/obj/structure/rack,/obj/item/stack/sheet/mineral/plasma{amount = 50},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ii" = (/turf/open/floor/grass,/area/awaymission/academy/academyaft) -"ij" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/relay,/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) +"ij" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/telecomms/broadcaster,/obj/item/weapon/circuitboard/machine/telecomms/receiver,/obj/item/weapon/circuitboard/machine/telecomms/relay,/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ik" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/awaymission/academy/academyaft) "il" = (/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft) "im" = (/obj/structure/mirror{pixel_y = 28},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft) diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index 4366496499d..10bb875ef54 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -259,7 +259,7 @@ "eY" = (/turf/closed/wall,/area/awaymission/centcomAway/courtroom) "eZ" = (/obj/structure/table,/obj/item/weapon/storage/lockbox,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fa" = (/obj/structure/table,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) -"fb" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) +"fb" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fc" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fd" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fe" = (/turf/open/floor/plasteel{icon_state = "green"; dir = 10},/area/awaymission/centcomAway/general) @@ -471,7 +471,7 @@ "jc" = (/turf/open/floor/plasteel{icon_state = "ironsand4"; dir = 8; heat_capacity = 1},/area/awaymission/centcomAway/general) "jd" = (/obj/structure/table/wood{dir = 10},/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) "je" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) -"jf" = (/obj/structure/computerframe,/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) +"jf" = (/obj/structure/frame/computer,/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) "jg" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/open/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/general) "jh" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/general) "ji" = (/obj/structure/closet/secure_closet/personal,/turf/open/floor/plasteel{icon_state = "vault"; dir = 1},/area/awaymission/centcomAway/hangar) @@ -636,7 +636,7 @@ "ml" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/centcomAway/cafe) "mm" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mn" = (/obj/structure/table,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) -"mo" = (/obj/structure/computerframe,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) +"mo" = (/obj/structure/frame/computer,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mp" = (/obj/structure/closet/secure_closet/bar,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mq" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mr" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index ec6efe1a4c1..94372ad1e39 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -415,7 +415,7 @@ "hY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "hZ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/computer/security/telescreen{desc = "Used for monitoring the research division and the labs within."; name = "research monitor"; network = list("MO19X","MO19R")},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "ia" = (/obj/machinery/computer/aifixer,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) -"ib" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/circuitboard/teleporter,/turf/open/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) +"ib" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "ic" = (/obj/structure/rack,/obj/item/device/paicard{pixel_x = 4},/turf/open/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "id" = (/obj/structure/rack,/turf/open/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "ie" = (/obj/machinery/door/airlock/glass_medical{glass = 0; id_tag = ""; name = "Research Division"; opacity = 1; req_access_txt = "201"; req_one_access_txt = "0"},/turf/open/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 58e77da0d87..b58f159b2e6 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -19,7 +19,7 @@ "as" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/open/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) "at" = (/obj/machinery/suit_storage_unit/engine,/turf/open/floor/plating,/area/awaymission/research/interior/engineering) "au" = (/turf/open/floor/plating,/area/awaymission/research/interior/engineering) -"av" = (/obj/item/weapon/shard{icon_state = "small"},/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high/empty,/turf/open/floor/plating,/area/awaymission/research/interior/engineering) +"av" = (/obj/item/weapon/shard{icon_state = "small"},/obj/structure/frame/machine,/obj/item/weapon/circuitboard/machine/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high/empty,/turf/open/floor/plating,/area/awaymission/research/interior/engineering) "aw" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plasteel/whiteyellow/side,/area/awaymission/research/interior/engineering) "ax" = (/obj/structure/flora/kirbyplants{icon_state = "plant-20"; layer = 4.1; pixel_y = 3},/turf/open/floor/plasteel/whiteyellow/corner{tag = "icon-whiteyellowcorner (WEST)"; icon_state = "whiteyellowcorner"; dir = 8},/area/awaymission/research/interior/engineering) "ay" = (/obj/structure/chair{dir = 8},/mob/living/simple_animal/hostile/syndicate,/turf/open/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 209ebe93ddd..fd12bea52ab 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -329,7 +329,7 @@ "gq" = (/turf/open/floor/plasteel/stairs/right{baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140},/area/awaymission/snowdin/cave) "gr" = (/turf/open/floor/plating,/turf/open/floor/plating/snowed,/area/awaymission/snowdin/post) "gs" = (/obj/structure/girder,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post) -"gt" = (/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/machinery/light/small{dir = 1},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) +"gt" = (/obj/structure/frame/machine,/obj/item/weapon/circuitboard/machine/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/machinery/light/small{dir = 1},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gu" = (/obj/item/weapon/stock_parts/cell/high/empty,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gv" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gw" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) @@ -464,7 +464,7 @@ "iY" = (/obj/machinery/light/small,/turf/open/floor/plating/asteroid/snow,/area/awaymission/snowdin) "iZ" = (/obj/machinery/light/small,/turf/open/floor/plating/snowed,/area/awaymission/snowdin) "ja" = (/obj/item/weapon/shard,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin) -"jb" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle{baseturf = /turf/open/floor/plating/asteroid/snow; icon_state = "shuttlefloor4"; temperature = 180},/area/awaymission/snowdin) +"jb" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle{baseturf = /turf/open/floor/plating/asteroid/snow; icon_state = "shuttlefloor4"; temperature = 180},/area/awaymission/snowdin) "jc" = (/obj/machinery/door/poddoor/shutters{id = "garagesnow3"},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "jd" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/sekret) "je" = (/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/sekret) diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index f30468aae07..7aa34319ef8 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -81,7 +81,7 @@ }, /area/shuttle/syndicate) "aan" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -4024,17 +4024,17 @@ /area/storage/tech) "ajc" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, /turf/open/floor/plasteel{ dir = 5; icon_state = "yellow" @@ -4042,11 +4042,11 @@ /area/storage/tech) "ajd" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -4064,11 +4064,11 @@ /area/storage/tech) "ajf" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -4076,14 +4076,14 @@ /area/storage/tech) "ajg" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /turf/open/floor/plasteel{ dir = 9; icon_state = "yellow" @@ -4483,14 +4483,14 @@ /area/storage/tech) "ajW" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/cloning, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/cloning, +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /turf/open/floor/plasteel{ dir = 4; icon_state = "yellow" @@ -4508,12 +4508,12 @@ /area/storage/tech) "ajY" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -4895,15 +4895,15 @@ /area/storage/tech) "akI" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, @@ -4969,15 +4969,15 @@ /area/storage/tech) "akO" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -10985,14 +10985,14 @@ /area/tcommsat/computer) "axw" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -13581,13 +13581,13 @@ name = "Construction Site" }) "aBX" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/construction/Storage{ name = "Construction Site" }) "aBY" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/construction/Storage{ name = "Construction Site" @@ -25626,7 +25626,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /turf/open/floor/plasteel{ icon_state = "yellow" @@ -45842,7 +45842,7 @@ /turf/open/floor/plasteel/airless, /area/mine/abandoned) "bOd" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /obj/effect/decal/cleanable/cobweb2, @@ -47113,7 +47113,7 @@ pixel_x = 31 }, /obj/structure/rack, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /obj/item/weapon/circuitboard/aicore{ pixel_x = -2; pixel_y = 4 diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 5ecccfef356..b08b7ff7e43 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -9,7 +9,7 @@ "aai" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aaj" = (/obj/machinery/computer/shuttle/syndicate,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aak" = (/obj/structure/table,/obj/machinery/button/door{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"aal" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) +"aal" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aam" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aan" = (/obj/structure/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aao" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 10},/obj/item/device/multitool,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -75,7 +75,7 @@ "abw" = (/obj/structure/table/optable,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abx" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aby" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/shuttle/syndicate) -"abz" = (/obj/structure/computerframe,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) +"abz" = (/obj/structure/frame/computer,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abA" = (/obj/machinery/teleport/station,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abB" = (/obj/machinery/teleport/hub/syndicate,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abC" = (/turf/open/floor/plasteel/black,/area/engine/engineering) @@ -694,7 +694,7 @@ "anr" = (/obj/machinery/computer/arcade,/turf/open/floor/plating,/area/maintenance/fsmaint) "ans" = (/obj/structure/chair/stool,/obj/machinery/light/small{dir = 1},/turf/open/floor/wood,/area/maintenance/fsmaint) "ant" = (/obj/structure/flora/kirbyplants{anchored = 1; icon_state = "plant-05"; layer = 4.1; name = "incredibly heavy plant"},/turf/open/floor/wood,/area/maintenance/fsmaint) -"anu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fsmaint) +"anu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/computer/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fsmaint) "anv" = (/obj/structure/grille,/turf/open/floor/plating,/area/maintenance/fsmaint) "anw" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel,/area/maintenance/fsmaint) "anx" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/open/floor/plasteel,/area/engine/engineering) @@ -897,7 +897,7 @@ "arm" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"}) "arn" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "hop shutter"; name = "HoP Office shutter"},/turf/open/floor/plating,/area/crew_quarters/heads) "aro" = (/obj/structure/table/wood,/obj/item/weapon/storage/box/silver_ids{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/ids,/turf/open/floor/wood,/area/crew_quarters/heads) -"arp" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = 0; pixel_y = 7},/turf/open/floor/wood,/area/crew_quarters/heads) +"arp" = (/obj/structure/filingcabinet/employment,/turf/open/floor/wood,/area/crew_quarters/heads) "arq" = (/obj/machinery/vending/cart,/turf/open/floor/wood,/area/crew_quarters/heads) "arr" = (/obj/machinery/photocopier,/obj/machinery/light{dir = 1},/turf/open/floor/wood,/area/crew_quarters/heads) "ars" = (/obj/structure/closet/secure_closet/hop,/obj/item/clothing/suit/armor/reactive,/turf/open/floor/wood,/area/crew_quarters/heads) @@ -1276,7 +1276,7 @@ "ayB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel/black,/area/engine/gravity_generator) "ayC" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel/black,/area/engine/gravity_generator) "ayD" = (/obj/effect/landmark{name = "lightsout"},/turf/open/floor/wood,/area/library) -"ayE" = (/obj/structure/table/wood,/obj/item/weapon/storage/pill_bottle/dice,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/open/floor/wood,/area/library) +"ayE" = (/obj/structure/table/wood,/obj/item/weapon/book/codex_gigas,/obj/item/weapon/storage/pill_bottle/dice,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/open/floor/wood,/area/library) "ayF" = (/obj/effect/landmark/start{name = "Clown"},/turf/open/floor/wood,/area/crew_quarters/theatre) "ayG" = (/turf/open/floor/wood,/area/crew_quarters/theatre) "ayH" = (/obj/machinery/camera/autoname{dir = 8},/turf/open/floor/wood,/area/crew_quarters/theatre) @@ -1555,7 +1555,7 @@ "aDU" = (/obj/structure/cable/cyan{icon_state = "4-8"},/turf/open/floor/plasteel,/area/maintenance/asmaint2) "aDV" = (/obj/structure/cable/cyan{icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/open/floor/plasteel/warning/corner,/area/maintenance/asmaint2) "aDW" = (/obj/item/weapon/ed209_assembly,/obj/structure/cable/cyan{icon_state = "0-2"},/turf/open/floor/plating,/area/maintenance/asmaint2) -"aDX" = (/obj/structure/table,/obj/item/weapon/circuitboard/circuit_imprinter,/turf/open/floor/plating,/area/maintenance/asmaint2) +"aDX" = (/obj/structure/table,/obj/item/weapon/circuitboard/machine/circuit_imprinter,/turf/open/floor/plating,/area/maintenance/asmaint2) "aDY" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/shuttle/escape) "aDZ" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/escape) "aEa" = (/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/shuttle/escape) @@ -2460,7 +2460,7 @@ "aVr" = (/obj/structure/closet/wardrobe/white/medical,/obj/item/weapon/storage/box/bodybags,/turf/open/floor/plasteel/white,/area/security/warden) "aVs" = (/obj/structure/closet{name = "chem implant closet"},/obj/item/weapon/reagent_containers/glass/bottle/cyanide,/obj/item/weapon/reagent_containers/glass/bottle/initropidril,/obj/item/weapon/reagent_containers/glass/bottle/coniine,/obj/item/weapon/reagent_containers/glass/bottle/sodium_thiopental,/obj/item/weapon/storage/box/chemimp,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/gun/syringe,/obj/item/weapon/storage/box/syringes,/turf/open/floor/plasteel/white,/area/security/warden) "aVt" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/camera/autoname{icon_state = "camera"; dir = 6},/obj/item/clothing/gloves/color/latex/nitrile,/turf/open/floor/plasteel/white,/area/security/warden) -"aVu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/toxins/xenobiology) +"aVu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/computer/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/toxins/xenobiology) "aVv" = (/obj/machinery/button/flasher{id = "permaflash"; name = "perma flasher button"; pixel_x = 0; pixel_y = 28},/turf/open/floor/plasteel,/area/security/brig) "aVw" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "perma shutter"; name = "perma brig window shutter"},/turf/open/floor/plating,/area/security/brig) "aVx" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel/warnwhite{icon_state = "warnwhite"; dir = 4},/area/medical/medbay) @@ -2501,7 +2501,7 @@ "aWg" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel,/area/maintenance/asmaint2) "aWh" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) "aWi" = (/obj/structure/table,/obj/item/device/flashlight/seclite,/obj/item/clothing/suit/armor/vest,/obj/machinery/light{dir = 1},/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/restraints/legcuffs/beartrap,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) -"aWj" = (/obj/item/weapon/circuitboard/security,/turf/open/floor/plating,/area/maintenance/asmaint2) +"aWj" = (/obj/item/weapon/circuitboard/computer/security,/turf/open/floor/plating,/area/maintenance/asmaint2) "aWk" = (/obj/structure/window/reinforced,/obj/structure/flora/kirbyplants{icon_state = "plant-17"; layer = 4.1},/turf/open/floor/plasteel/whitebot,/area/maintenance/fore{name = "Security Maintenance"}) "aWl" = (/obj/machinery/vending/assist,/turf/open/floor/plasteel/warning{icon_state = "warning"; dir = 10},/area/maintenance/fore{name = "Security Maintenance"}) "aWm" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/turf/open/floor/plasteel/warning,/area/maintenance/fore{name = "Security Maintenance"}) @@ -2592,8 +2592,8 @@ "aXT" = (/obj/structure/chair{dir = 8},/obj/effect/landmark{name = "JoinLate"},/turf/open/floor/plasteel/shuttle,/area/shuttle/arrival) "aXU" = (/obj/effect/landmark{name = "JoinLate"},/turf/open/floor/plasteel/shuttle,/area/shuttle/arrival) "aXV" = (/obj/item/device/flashlight/seclite{name = "dusty seclite"; on = 1},/turf/open/floor/plating/asteroid{name = "dirt"},/area/maintenance/asmaint2) -"aXW" = (/obj/item/weapon/circuitboard/card,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) -"aXX" = (/obj/structure/computerframe,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) +"aXW" = (/obj/item/weapon/circuitboard/computer/card,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) +"aXX" = (/obj/structure/frame/computer,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) "aXY" = (/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1},/turf/open/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"}) "aXZ" = (/turf/open/floor/plasteel/bot,/area/maintenance/fore{name = "Security Maintenance"}) "aYa" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 10},/turf/open/floor/plasteel,/area/maintenance/fore{name = "Security Maintenance"}) @@ -2784,7 +2784,7 @@ "bbD" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/organ/gland/bloody = 7, /obj/item/organ/gland/bodysnatch = 4, /obj/item/organ/gland/egg = 7, /obj/item/organ/gland/emp = 3, /obj/item/organ/gland/mindshock = 5, /obj/item/organ/gland/plasma = 7, /obj/item/organ/gland/pop = 5, /obj/item/organ/gland/slime = 4, /obj/item/organ/gland/spiderman = 5, /obj/item/organ/gland/ventcrawling = 1, /obj/item/organ/body_egg/alien_embryo = 1, /obj/item/organ/hivelord_core = 2); lootcount = 3; name = "organ spawner"},/obj/structure/closet/secure_closet{name = "xenobiology research materials locker"; req_access_txt = "55"},/turf/open/floor/plasteel/white,/area/toxins/xenobiology) "bbE" = (/mob/living/simple_animal/mouse/brown,/turf/open/floor/wood,/area/maintenance/fore{name = "Security Maintenance"}) "bbF" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) -"bbG" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) +"bbG" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/computer/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "bbH" = (/obj/machinery/door/airlock/external{req_access_txt = "13"},/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "bbI" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 5},/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "bbJ" = (/obj/structure/cable/cyan{icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 4},/turf/open/floor/plasteel,/area/maintenance/fore{name = "Security Maintenance"}) @@ -2854,7 +2854,7 @@ "bcV" = (/obj/item/weapon/storage/box/lights/mixed,/turf/open/floor/plating,/area/maintenance/asmaint) "bcW" = (/obj/structure/closet/firecloset,/turf/open/floor/plating,/area/maintenance/asmaint) "bcX" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating,/area/maintenance/asmaint) -"bcY" = (/obj/structure/table,/obj/item/weapon/circuitboard/autolathe,/turf/open/floor/plating,/area/maintenance/asmaint2) +"bcY" = (/obj/structure/table,/obj/item/weapon/circuitboard/machine/autolathe,/turf/open/floor/plating,/area/maintenance/asmaint2) "bcZ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plating,/area/maintenance/asmaint2) "bda" = (/turf/open/floor/plasteel/shuttle,/turf/closed/wall/shuttle/interior{icon_state = "swall_f9"},/area/shuttle/transport) "bdb" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle,/area/shuttle/transport) @@ -2951,6 +2951,7 @@ "beO" = (/obj/structure/window/reinforced,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/turf/open/floor/plasteel/black,/area/security/warden) "beP" = (/obj/structure/table,/obj/item/clothing/glasses/science,/turf/open/floor/plasteel,/area/toxins/misc_lab) "beQ" = (/obj/effect/decal/cleanable/blood/old,/obj/item/clothing/glasses/sunglasses,/turf/open/floor/wood{icon_state = "wood-broken"},/area/maintenance/fore{name = "Security Maintenance"}) +"ZAx" = (/obj/structure/table, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /turf/open/floor/plating,/area/maintenance/asmaint2) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -3126,7 +3127,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaaaaJaaJaaJaaaaaaaaaaaaaaJaaJaaJaaJaPHaPHaPHaPHaPHaPHaRkaRkaPHaaaaaaaVmbbHaVmaaaaayaaaaaaaaaaaaaaBaaaaaaaayaaaaaaaZrbcqbcraZraZraZraZraZrbagazLaAxaAZaNEaAxbcsaAxaAxaAxaAxazLaFsaBRaRZaRZaBRazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLaZxazLazLaaJaaJaaJaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaaaayaaaaaaaaaaPHbctbctaPHaaaaaaaaaaaTaaaaaaaayaaaaaaaaaaaaaaBaaaaaaaayaaaaaaaZrbaSbcubcvbchbchbcwbcxbaSbcyaAxbbyaHGaAxbczaAxbcAaAxaBbaFCaBbaBbbcBbcBaAxbczbcjbcjbcjazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJbcCaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayaayaayaayaayaayaPHaQqaQqaPHaayaayaaybcDamzaaBaaBaaBaaBaaBaaBaaBaayaguaguaguaayaZrbaSbcEbcFbcFbcGbcGbcGbcGbcHaDiaDibcIaDibcIaDiaDiaDiaDjbcJaDjaDjaDjaDjaDibcIbcKbcKbcLaTTbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcNaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcObcPbcPbcQbcPbcPbcPbcRbcPbcPbcSaayaaaaPHbcTaQqaVmaaaaayaaaaaaaaaaaaaayaaaaaaaaaaaaaaBaaaaaaaaaaaaaaaaZraZraZrbcUbcUaZrbcVbcWbcXazLaAxaBTaAxaAxaAxbcjbcjbcYbcZazLazLazLazLazLazLazLazLazLazLazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcObcPbcPbcQbcPbcPbcPbcRbcPbcPbcSaayaaaaPHbcTaQqaVmaaaaayaaaaaaaaaaaaaayaaaaaaaaaaaaaaBaaaaaaaaaaaaaaaaZraZraZrbcUbcUaZrbcVbcWbcXazLaAxaBTaAxaAxZAxbcjbcjbcYbcZazLazLazLazLazLazLazLazLazLazLazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcObdabdbbdcbddbddbddbddbddbddbddbcQaVmaVmaVmaQqaQqaVmaaaaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaaaaaaaaaaaaaaaaaJaaJaZrbdebdeaZraZraZraZrazLazLazLaBRaBRaBRazLazLazLazLazLaaaaayaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdfbdgbdgbdgbdgbdgbdgbdgbdgbdgbdgbdhbdibdjbdkaQqaQqaVmaaaaayaaaaaaaaaaaaaaaaaaaaaaaaaayaaBaayaaaaaaaaaaaaaaaaaJaZrbdebdebdlbdlbdmaZraaJaaJbdnaaaaaaaaaaayaaaaaaaaaaayaaaaayaayaayaayaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdobdpbdqbdqbdrbdrbdrbdrbdrbdrbdrbcQaVmaVmaVmaQqaQqaPHaaaaayaaaaaaaaaaaaaaaaaaaaaaaaaayaaBaayaaaaaaaaaaaaaaaaaJaZrbdsbdebdebdebdtaZraaJaaJaayaayaayaayaayaayaayaayaayaayaayaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaaaaaaaaaaJaaJaaJaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index 87cdb1c609c..9f1dde54049 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -1434,7 +1434,7 @@ }, /area/shuttle/syndicate) "acC" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -2533,7 +2533,7 @@ }, /area/shuttle/abandoned) "aeG" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plasteel/shuttle{ @@ -2838,7 +2838,7 @@ }, /area/shuttle/abandoned) "afo" = ( -/obj/item/weapon/circuitboard/operating, +/obj/item/weapon/circuitboard/computer/operating, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor3" }, @@ -5745,8 +5745,8 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "alK" = ( -/obj/structure/computerframe, -/obj/item/weapon/circuitboard/operating, +/obj/structure/frame/computer, +/obj/item/weapon/circuitboard/computer/operating, /turf/open/floor/plating, /area/maintenance/fpmaint2) "alL" = ( @@ -5889,7 +5889,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "amj" = ( -/obj/item/weapon/circuitboard/sleeper, +/obj/item/weapon/circuitboard/machine/sleeper, /obj/structure/mirror{ pixel_x = 28 }, @@ -6259,7 +6259,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "amV" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/fpmaint2) "amW" = ( @@ -6807,32 +6807,32 @@ "aop" = ( /obj/structure/table, /obj/item/weapon/stock_parts/manipulator, -/obj/item/weapon/circuitboard/microwave, +/obj/item/weapon/circuitboard/machine/microwave, /turf/open/floor/plating{ broken = 1; icon_state = "platingdmg3" }, /area/maintenance/asmaint) "aoq" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/asmaint) "aor" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, -/obj/item/weapon/circuitboard/arcade/orion_trail, +/obj/item/weapon/circuitboard/computer/arcade/orion_trail, /turf/open/floor/plating, /area/maintenance/asmaint) "aos" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plating, /area/maintenance/asmaint) "aot" = ( /obj/structure/table, -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/asmaint) "aou" = ( @@ -10768,7 +10768,7 @@ /obj/structure/rack, /obj/item/weapon/light/tube, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/protolathe, /turf/open/floor/plating, /area/maintenance/asmaint) "awc" = ( @@ -17763,7 +17763,7 @@ /area/maintenance/atmos_control) "aJM" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, /obj/item/trash/chips, /turf/open/floor/plating, /area/maintenance/atmos_control) @@ -23619,11 +23619,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -23651,11 +23651,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -23675,15 +23675,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -23727,7 +23727,7 @@ pixel_x = -30; pixel_y = 0 }, -/obj/structure/filingcabinet, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "aVu" = ( @@ -23847,7 +23847,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "aVH" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plating{ @@ -23862,7 +23862,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "aVJ" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -27242,16 +27242,16 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning{ +/obj/item/weapon/circuitboard/computer/cloning{ pixel_x = 0 }, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -27262,11 +27262,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -27281,12 +27281,12 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -27402,7 +27402,7 @@ "bcx" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/weapon/circuitboard/rdconsole, +/obj/item/weapon/circuitboard/computer/rdconsole, /obj/item/weapon/stock_parts/console_screen, /turf/open/floor/plating{ broken = 1; @@ -28690,21 +28690,21 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, -/obj/item/weapon/circuitboard/aifixer, -/obj/item/weapon/circuitboard/teleporter, -/obj/item/weapon/circuitboard/circuit_imprinter, -/obj/item/weapon/circuitboard/mechfab, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, +/obj/item/weapon/circuitboard/computer/aifixer, +/obj/item/weapon/circuitboard/computer/teleporter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/mechfab, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ tag = "icon-manifold-b-f (NORTH)"; dir = 1 @@ -28716,15 +28716,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -28736,12 +28736,12 @@ /area/storage/tech) "bfd" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -37083,7 +37083,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "buF" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/fpmaint) "buG" = ( @@ -38399,7 +38399,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "bwK" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/machinery/power/apc{ aidisabled = 0; auto_name = 1; @@ -45512,6 +45512,7 @@ "bIQ" = ( /obj/structure/cult/tome, /obj/item/clothing/under/suit_jacket/red, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel/cult, /area/library) "bIR" = ( @@ -47438,7 +47439,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "bMn" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/maintenance/fpmaint) "bMo" = ( @@ -61853,7 +61854,7 @@ }, /area/toxins/lab) "cog" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -62399,6 +62400,13 @@ dir = 2; pixel_y = 24 }, +/obj/structure/table/wood, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -62568,18 +62576,18 @@ }, /area/maintenance/electrical) "cpA" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, /area/construction) "cpB" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/construction) "cpC" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/machinery/airalarm{ pixel_y = 23 }, @@ -62600,7 +62608,7 @@ }, /area/construction) "cpE" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -65375,7 +65383,7 @@ pixel_x = -2; pixel_y = 4 }, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /obj/item/device/aicard, /obj/structure/cable/pink{ tag = "icon-2-8"; @@ -72100,7 +72108,7 @@ "cHe" = ( /obj/structure/closet/crate, /obj/item/weapon/reagent_containers/food/snacks/mint, -/obj/item/weapon/circuitboard/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, /turf/open/floor/plating, /area/maintenance/asmaint2) "cHf" = ( @@ -74722,8 +74730,8 @@ }, /area/maintenance/asmaint2) "cLX" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/chem_master, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/chem_master, /turf/open/floor/plating, /area/maintenance/asmaint2) "cLY" = ( diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index 65a5dd9837b..8e7fc5e4d84 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -588,7 +588,7 @@ }, /area/shuttle/syndicate) "abt" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -1956,7 +1956,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 8; icon = 'icons/obj/Cryogenic2.dmi'; @@ -1992,7 +1992,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 4; icon = 'icons/obj/Cryogenic2.dmi'; @@ -2202,8 +2202,8 @@ }, /area/shuttle/abandoned) "adV" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/chem_dispenser, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/chem_dispenser, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -2213,7 +2213,7 @@ }, /area/shuttle/abandoned) "adW" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -2777,7 +2777,7 @@ }, /area/shuttle/abandoned) "aeR" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -2787,8 +2787,8 @@ }, /area/shuttle/abandoned) "aeS" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/autolathe, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/autolathe, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -3524,8 +3524,8 @@ }, /area/shuttle/abandoned) "aga" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/cyborgrecharger, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/cyborgrecharger, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -4212,7 +4212,7 @@ }, /area/shuttle/abandoned) "ahk" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -4244,7 +4244,7 @@ }, /area/shuttle/abandoned) "ahn" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -14688,7 +14688,7 @@ pixel_x = -2; pixel_y = 4 }, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /turf/open/floor/plasteel{ dir = 6; icon_state = "warnwhite" @@ -17007,11 +17007,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -17022,15 +17022,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -17041,11 +17041,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -19057,14 +19057,14 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/cloning, +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -19691,11 +19691,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -20334,15 +20334,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -21705,18 +21705,18 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, -/obj/item/weapon/circuitboard/aifixer, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, +/obj/item/weapon/circuitboard/computer/aifixer, /obj/machinery/light_switch{ pixel_x = -25 }, @@ -22455,12 +22455,12 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /obj/machinery/light/small{ dir = 8 }, @@ -23206,12 +23206,12 @@ /area/hallway/primary/starboard) "aOL" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, /turf/open/floor/plating, @@ -39741,6 +39741,7 @@ /area/storage/art) "buT" = ( /obj/structure/cult/tome, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel{ icon_state = "cult" }, @@ -44400,7 +44401,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /obj/structure/cable{ @@ -48367,8 +48368,7 @@ name = "Chapel Maintenance" }) "bKq" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/decal/cleanable/cobweb, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "bKr" = ( @@ -57033,9 +57033,13 @@ }) "cay" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/robot_debris{ - icon_state = "gib6" - }, +/obj/structure/table, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, /turf/open/floor/plating, /area/maintenance/port{ name = "Chapel Maintenance" diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm index bbec2be5967..afe423895f5 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm @@ -20887,7 +20887,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /turf/open/floor/plasteel{ @@ -24449,12 +24449,12 @@ /turf/open/floor/wood, /area/lawoffice) "aNP" = ( -/obj/structure/filingcabinet/chestdrawer, /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; pixel_x = 24 }, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "aNQ" = ( @@ -31654,15 +31654,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -31675,11 +31675,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -31696,16 +31696,16 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning{ +/obj/item/weapon/circuitboard/computer/cloning{ pixel_x = 0 }, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -33760,11 +33760,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -33804,14 +33804,14 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, -/obj/item/weapon/circuitboard/arcade/battle{ +/obj/item/weapon/circuitboard/computer/arcade/battle{ pixel_x = -4; pixel_y = 2 }, -/obj/item/weapon/circuitboard/arcade/orion_trail{ +/obj/item/weapon/circuitboard/computer/arcade/orion_trail{ pixel_x = 4 }, /turf/open/floor/plasteel{ @@ -33823,8 +33823,8 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, @@ -33837,17 +33837,17 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ icon_state = "dark" @@ -34518,15 +34518,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -35451,11 +35451,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -56963,14 +56963,14 @@ /area/bridge) "bOg" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -59349,6 +59349,7 @@ pixel_y = 0 }, /obj/item/clothing/under/suit_jacket/red, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel{ icon_state = "cult"; dir = 2 @@ -79097,7 +79098,7 @@ pixel_x = -2; pixel_y = 4 }, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /turf/open/floor/plasteel{ icon_state = "cafeteria"; dir = 5 @@ -96286,7 +96287,7 @@ }, /area/shuttle/syndicate) "cXz" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -97775,8 +97776,8 @@ }, /area/shuttle/abandoned) "daw" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/cyborgrecharger, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/cyborgrecharger, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -97944,7 +97945,7 @@ }, /area/shuttle/abandoned) "daO" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -98040,7 +98041,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 1; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98057,7 +98058,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 1; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98352,7 +98353,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 2; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98369,7 +98370,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 2; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98465,7 +98466,7 @@ }, /area/shuttle/abandoned) "dbC" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -98643,7 +98644,7 @@ }, /area/shuttle/abandoned) "dbS" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -98654,8 +98655,8 @@ }, /area/shuttle/abandoned) "dbT" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/autolathe, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/autolathe, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -98787,8 +98788,8 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/abandoned) "dcd" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/chem_dispenser, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/chem_dispenser, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -98798,7 +98799,7 @@ }, /area/shuttle/abandoned) "dce" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -100508,12 +100509,18 @@ }, /area/medical/morgue) "dfx" = ( -/obj/machinery/plantgenes, -/turf/open/floor/plasteel{ - dir = 9; - icon_state = "warning" +/obj/structure/window/reinforced{ + dir = 4 }, -/area/hydroponics) +/obj/structure/table/wood, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/turf/open/floor/plating, +/area/chapel/main) "dfy" = ( /turf/open/floor/engine/vacuum, /area/atmos) @@ -100615,6 +100622,13 @@ }, /turf/open/space, /area/space) +"dfI" = ( +/obj/machinery/plantgenes, +/turf/open/floor/plasteel{ + dir = 9; + icon_state = "warning" + }, +/area/hydroponics) (1,1,1) = {" aaa @@ -120851,7 +120865,7 @@ cOU cRS cRS cSP -cRS +dfx cOU cUb cOU @@ -136228,7 +136242,7 @@ bZc caw bZc ccX -dfx +dfI bVf cuS ciC diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index aaebffe3620..94f22215cc9 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -3510,6 +3510,7 @@ /obj/item/weapon/folder/red, /obj/item/weapon/hand_labeler, /obj/item/clothing/glasses/sunglasses, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/carpet, /area/security/brig) "hn" = ( @@ -10216,7 +10217,7 @@ /area/crew_quarters/bar) "uW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/filingcabinet/chestdrawer, +/obj/structure/filingcabinet/employment, /turf/open/floor/plasteel, /area/crew_quarters/heads{ name = "\improper Job Assignment" @@ -13107,7 +13108,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /turf/open/floor/plating{ @@ -13528,7 +13529,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "Cw" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -15520,7 +15521,7 @@ /turf/open/floor/plating, /area/shuttle/syndicate) "Hd" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/item/weapon/paper{ info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions" @@ -16130,6 +16131,16 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"IL" = ( +/obj/structure/table, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/turf/open/floor/plating, +/area/hallway/primary/central) (1,1,1) = {" aa @@ -46085,7 +46096,7 @@ nC jo bx bN -bN +IL bx ps rE diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 4b6ad4ccfca..355c2d64f14 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -7034,7 +7034,7 @@ /area/maintenance/fpmaint2) "ann" = ( /obj/item/weapon/electronics/airalarm, -/obj/item/weapon/circuitboard/seed_extractor, +/obj/item/weapon/circuitboard/machine/seed_extractor, /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 4; @@ -7502,7 +7502,7 @@ /area/maintenance/fpmaint2) "aoo" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/monkey_recycler, +/obj/item/weapon/circuitboard/machine/monkey_recycler, /turf/open/floor/plating, /area/maintenance/fpmaint2) "aop" = ( @@ -9082,10 +9082,10 @@ /turf/open/floor/carpet, /area/security/detectives_office) "arV" = ( -/obj/structure/filingcabinet/chestdrawer, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "arW" = ( @@ -10443,11 +10443,11 @@ /obj/item/weapon/shard{ icon_state = "medium" }, -/obj/item/weapon/circuitboard/operating, +/obj/item/weapon/circuitboard/computer/operating, /turf/open/floor/plating, /area/maintenance/fpmaint2) "auZ" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/maintenance/fpmaint2) "ava" = ( @@ -20527,6 +20527,7 @@ "aQs" = ( /obj/structure/cult/tome, /obj/item/clothing/under/suit_jacket/red, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel{ icon_state = "cult"; dir = 2 @@ -35006,7 +35007,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "buA" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -41168,11 +41169,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -41199,36 +41200,36 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/item/weapon/circuitboard/aifixer, -/obj/item/weapon/circuitboard/teleporter, -/obj/item/weapon/circuitboard/circuit_imprinter, -/obj/item/weapon/circuitboard/mechfab, +/obj/item/weapon/circuitboard/computer/aifixer, +/obj/item/weapon/circuitboard/computer/teleporter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/mechfab, /turf/open/floor/plating, /area/storage/tech) "bGx" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, /turf/open/floor/plating, @@ -41238,12 +41239,12 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /turf/open/floor/plating, /area/storage/tech) "bGz" = ( @@ -41848,15 +41849,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -42787,11 +42788,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -42813,16 +42814,16 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning{ +/obj/item/weapon/circuitboard/computer/cloning{ pixel_x = 0 }, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /turf/open/floor/plating, /area/storage/tech) "bJl" = ( @@ -42830,15 +42831,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -42849,11 +42850,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -56170,7 +56171,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /turf/open/floor/plasteel, @@ -63494,7 +63495,7 @@ }, /area/shuttle/abandoned) "czy" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plasteel/shuttle{ diff --git a/_maps/map_files/generic/z3.dmm b/_maps/map_files/generic/z3.dmm index 16243f9502c..140b55a7d2b 100644 --- a/_maps/map_files/generic/z3.dmm +++ b/_maps/map_files/generic/z3.dmm @@ -32,7 +32,7 @@ "cj" = (/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "ck" = (/obj/structure/table,/obj/item/weapon/paper,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "cl" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cm" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"cm" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "cn" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "co" = (/obj/item/weapon/reagent_containers/food/snacks/meat/slab/synthmeat{name = "Cuban Pete-Meat"},/turf/open/floor/engine,/area/tcommsat/chamber) "cp" = (/obj/structure/grille,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) @@ -99,7 +99,7 @@ "dz" = (/obj/effect/decal/cleanable/blood,/obj/item/weapon/scalpel{pixel_y = 12},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) "dA" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) "dB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/tcommsat/chamber) -"dC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/teleporter,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"dC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "dD" = (/obj/item/device/radio/off,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) "dE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) "dF" = (/obj/effect/decal/cleanable/oil,/turf/open/floor/plating/airless,/area/tcommsat/chamber) @@ -159,11 +159,11 @@ "eH" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) "eI" = (/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/tcommsat/chamber) "eJ" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/tcommsat/chamber) -"eL" = (/obj/structure/computerframe,/turf/open/floor/plating,/area/tcommsat/chamber) +"eL" = (/obj/structure/frame/computer,/turf/open/floor/plating,/area/tcommsat/chamber) "eM" = (/obj/machinery/teleport/station,/turf/open/floor/plating,/area/tcommsat/chamber) "eN" = (/obj/machinery/teleport/hub,/turf/open/floor/plating,/area/tcommsat/chamber) "eO" = (/turf/closed/wall/r_wall,/area/AIsattele) -"eP" = (/obj/structure/computerframe,/turf/open/floor/plating/airless,/area/AIsattele) +"eP" = (/obj/structure/frame/computer,/turf/open/floor/plating/airless,/area/AIsattele) "eQ" = (/obj/machinery/teleport/station,/turf/open/floor/plating/airless,/area/AIsattele) "eR" = (/obj/machinery/teleport/hub,/turf/open/floor/plating/airless,/area/AIsattele) "eS" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/AIsattele) @@ -184,7 +184,7 @@ "fh" = (/obj/item/weapon/shard,/obj/item/weapon/electronics/apc,/turf/open/floor/plating/airless,/area/AIsattele) "fi" = (/obj/structure/closet,/turf/open/floor/plating/airless,/area/AIsattele) "fj" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plating/airless,/area/AIsattele) -"fk" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/teleporter,/turf/open/floor/plating/airless,/area/AIsattele) +"fk" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plating/airless,/area/AIsattele) "fl" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating/airless,/area/AIsattele) "fm" = (/obj/structure/lattice,/turf/open/space,/area/AIsattele) "fn" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/AIsattele) diff --git a/_maps/map_files/generic/z4.dmm b/_maps/map_files/generic/z4.dmm index aec065d7d4f..9ebfeee4a01 100644 --- a/_maps/map_files/generic/z4.dmm +++ b/_maps/map_files/generic/z4.dmm @@ -41,7 +41,7 @@ "aO" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) "aP" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; freerange = 1; listening = 0; name = "Pirate Radio Broadcast Channel"; pixel_x = 0},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) "aQ" = (/obj/structure/table,/obj/item/weapon/paper/djstation,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"aR" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aR" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aS" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aT" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aU" = (/obj/structure/closet,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) @@ -147,8 +147,8 @@ "cQ" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/gravity_generator) "cR" = (/obj/structure/window/fulltile,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "cS" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cT" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/derelict/bridge) -"cU" = (/obj/structure/computerframe,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel,/area/derelict/bridge) +"cT" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge) +"cU" = (/obj/structure/frame/computer,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel,/area/derelict/bridge) "cV" = (/obj/structure/table,/turf/open/floor/plasteel,/area/derelict/bridge) "cW" = (/obj/machinery/computer/security,/turf/open/floor/plasteel,/area/derelict/bridge) "cX" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/open/floor/plasteel,/area/derelict/bridge) @@ -246,7 +246,7 @@ "eL" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "eM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "eN" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eO" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"eO" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "eP" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/solar_control) "eQ" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/solar_control) "eR" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) @@ -359,7 +359,7 @@ "gU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) "gV" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) "gW" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/electronics/airlock,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"gX" = (/obj/structure/rack,/obj/item/weapon/circuitboard/autolathe,/obj/item/weapon/circuitboard/protolathe{pixel_x = -5; pixel_y = -3},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"gX" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/autolathe,/obj/item/weapon/circuitboard/machine/protolathe{pixel_x = -5; pixel_y = -3},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "gY" = (/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "gZ" = (/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "ha" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) @@ -378,7 +378,7 @@ "hn" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/derelict/arrival) "ho" = (/obj/structure/window/reinforced,/turf/open/space,/area/space) "hp" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) -"hq" = (/obj/structure/rack,/obj/item/weapon/circuitboard/circuit_imprinter,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"hq" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/circuit_imprinter,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "hr" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "hs" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "ht" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) @@ -389,7 +389,7 @@ "hy" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "hz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "hA" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"hB" = (/obj/structure/computerframe,/obj/item/weapon/circuitboard/rdconsole,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"hB" = (/obj/structure/frame/computer,/obj/item/weapon/circuitboard/computer/rdconsole,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "hC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/space) "hD" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/space) "hE" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/space) @@ -416,7 +416,7 @@ "ia" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/arrival) "ib" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating,/area/derelict/arrival) "ic" = (/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) -"id" = (/obj/structure/rack,/obj/item/weapon/circuitboard/smes,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"id" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "ie" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/space) "if" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "ig" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) @@ -522,7 +522,7 @@ "kp" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) "kq" = (/obj/structure/door_assembly/door_assembly_mai{name = "airlock assembly"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) "kr" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/bridge/ai_upload) -"ks" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/stock_parts/console_screen,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"ks" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/frame/machine,/obj/item/weapon/stock_parts/console_screen,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) "kt" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) "ku" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) "kv" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/item/drone_shell,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) @@ -571,7 +571,7 @@ "lo" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/wallframe/apc,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) "lp" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "lq" = (/obj/item/weapon/ore/slag,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) -"lr" = (/obj/structure/rack,/obj/item/weapon/circuitboard/smes,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"lr" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/access) "ls" = (/obj/item/weapon/stock_parts/matter_bin,/turf/open/space,/area/space) "lt" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) "lu" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/space,/area/space) @@ -659,7 +659,7 @@ "mY" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) "mZ" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "na" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/bridge/ai_upload) -"nb" = (/obj/structure/rack,/obj/item/weapon/circuitboard/microwave,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"nb" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/microwave,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "nc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) "nd" = (/turf/open/space,/area/derelict/bridge/ai_upload) "ne" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{icon_state = "intact"; dir = 5},/turf/open/floor/plating/airless,/area/derelict/atmospherics) @@ -669,11 +669,11 @@ "ni" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) "nj" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) "nk" = (/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"nl" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"nl" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "nm" = (/obj/machinery/door/airlock/external,/turf/open/floor/plasteel,/area/derelict/solar_control) "nn" = (/turf/open/floor/plasteel{icon_state = "damaged2"; initial_gas_mix = "TEMP=2.7"},/area/derelict/atmospherics) "no" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/atmospherics) -"np" = (/obj/structure/rack,/obj/item/weapon/circuitboard/cryo_tube,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"np" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/cryo_tube,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "nq" = (/obj/machinery/light,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "nr" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) "ns" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) @@ -712,7 +712,7 @@ "nZ" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/space) "oa" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) "ob" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"oc" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"oc" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) "od" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/arrival) "oe" = (/obj/machinery/light{dir = 1},/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/derelict/medical) "of" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/open/space,/area/space) @@ -745,7 +745,7 @@ "oG" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "oH" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "oI" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"oJ" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"oJ" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "oK" = (/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) "oL" = (/obj/structure/closet/wardrobe/genetics_white,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "oM" = (/obj/machinery/door/airlock/command{name = "Teleporter Room"},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) @@ -780,7 +780,7 @@ "pp" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "pq" = (/obj/structure/window/fulltile,/turf/open/space,/area/derelict/atmospherics) "pr" = (/obj/structure/closet/wardrobe/orange,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/weapon/shovel/spade,/obj/item/weapon/cultivator,/turf/open/floor/plasteel/airless,/area/space) -"ps" = (/obj/structure/computerframe,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"ps" = (/obj/structure/frame/computer,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) "pt" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) "pu" = (/obj/structure/lattice,/turf/open/space,/area/derelict/atmospherics) "pv" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) @@ -835,7 +835,7 @@ "qu" = (/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) "qv" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/space,/area/solar/derelict_aft) "qw" = (/obj/item/device/aicard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) -"qx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/solar_control,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"qx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/solar_control,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "qy" = (/obj/item/ammo_casing/a357{pixel_x = -5},/obj/item/ammo_casing/a357{pixel_x = 5; pixel_y = 6},/obj/item/ammo_casing/a357,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "qz" = (/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "qA" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) diff --git a/_maps/map_files/generic/z6.dmm b/_maps/map_files/generic/z6.dmm index 82a78c133c6..8044fc094c2 100644 --- a/_maps/map_files/generic/z6.dmm +++ b/_maps/map_files/generic/z6.dmm @@ -186,7 +186,7 @@ "dD" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "dE" = (/obj/structure/table,/obj/item/weapon/paper{info = "I'm no scientist, but judging from the design and components, it seems to be some kind of teleporter. This thing is gonna be worth a lot of cash to the right man. The boys are excited, as they have every right to be, and I've let them crack into that case of beer we got. I normally wouldn't allow such a thing, but this is a time for celebration! It's not like a couple drinks will hurt anything."; name = "Captain's log entry"},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) "dF" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) -"dG" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) +"dG" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) "dH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) "dI" = (/obj/machinery/hydroponics,/turf/open/floor/plasteel{icon_state = "green"; dir = 10},/area/awaymission/BMPship/Midship) "dJ" = (/turf/open/floor/plasteel{icon_state = "green"},/area/awaymission/BMPship/Midship) @@ -344,8 +344,8 @@ "gF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating,/area/awaymission/BMPship/Aft) "gG" = (/turf/closed/wall/shuttle{icon_state = "swallc2"},/area/awaymission/BMPship/Aft) "gH" = (/turf/open/floor/plating/airless{icon_state = "platingdmg2"},/turf/closed/wall/shuttle{dir = 3; icon_state = "swall_f10"; layer = 2},/area/awaymission/BMPship/Fore) -"gI" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/plating/airless{icon_state = "panelscorched"},/area/awaymission/BMPship/Fore) -"gJ" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) +"gI" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plating/airless{icon_state = "panelscorched"},/area/awaymission/BMPship/Fore) +"gJ" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) "gK" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "gL" = (/turf/open/floor/plasteel{icon_state = "platingdmg3"},/area/awaymission/BMPship/Midship) "gM" = (/turf/open/floor/plasteel{icon_state = "platingdmg1"},/area/awaymission/BMPship/Midship) diff --git a/code/__DEFINES/contracts.dm b/code/__DEFINES/contracts.dm new file mode 100644 index 00000000000..cba98a29b24 --- /dev/null +++ b/code/__DEFINES/contracts.dm @@ -0,0 +1,42 @@ +#define CONTRACT_POWER "power" +#define CONTRACT_WEALTH "wealth" +#define CONTRACT_PRESTIGE "prestige" +#define CONTRACT_MAGIC "magic" +#define CONTRACT_REVIVE "revive" +#define CONTRACT_KNOWLEDGE "knowledge" +#define CONTRACT_UNWILLING "unwilling" + +#define BANE_SALT "salt" +#define BANE_LIGHT "light" +#define BANE_IRON "iron" +#define BANE_WHITECLOTHES "whiteclothes" +#define BANE_SILVER "silver" +#define BANE_HARVEST "harvest" +#define BANE_TOOLBOX "toolbox" + +#define OBLIGATION_FOOD "food" +#define OBLIGATION_DRINK "drink" +#define OBLIGATION_GREET "greet" +#define OBLIGATION_PRESENCEKNOWN "presenceknown" +#define OBLIGATION_SAYNAME "sayname" +#define OBLIGATION_ANNOUNCEKILL "announcekill" +#define OBLIGATION_ANSWERTONAME "answername" + +#define BAN_HURTWOMAN "hurtwoman" +#define BAN_CHAPEL "chapel" +#define BAN_HURTPRIEST "hurtpriest" +#define BAN_AVOIDWATER "avoidwater" +#define BAN_STRIKEUNCONCIOUS "strikeunconcious" +#define BAN_HURTLIZARD "hurtlizard" +#define BAN_HURTANIMAL "hurtanimal" + +#define BANISH_WATER "water" +#define BANISH_COFFIN "coffin" +#define BANISH_FORMALDYHIDE "embalm" +#define BANISH_RUNES "runes" +#define BANISH_CANDLES "candles" +#define BANISH_DESTRUCTION "destruction" +#define BANISH_FUNERAL_GARB "funeral" + +#define LORE 1 +#define LAW 2 \ No newline at end of file diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 9ca921c0cda..27252048b47 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -25,14 +25,17 @@ #define DATA_HUD_MEDICAL_ADVANCED 4 #define DATA_HUD_DIAGNOSTIC 5 //antag HUD defines -#define ANTAG_HUD_CULT 6 -#define ANTAG_HUD_REV 7 -#define ANTAG_HUD_OPS 8 -#define ANTAG_HUD_WIZ 9 -#define ANTAG_HUD_SHADOW 10 -#define ANTAG_HUD_HOG_BLUE 11 -#define ANTAG_HUD_HOG_RED 12 -#define ANTAG_HUD_TRAITOR 13 -#define ANTAG_HUD_NINJA 14 -#define ANTAG_HUD_CHANGELING 15 -#define ANTAG_HUD_ABDUCTOR 16 +#define ANTAG_HUD_CULT 6 +#define ANTAG_HUD_REV 7 +#define ANTAG_HUD_OPS 8 +#define ANTAG_HUD_WIZ 9 +#define ANTAG_HUD_SHADOW 10 +#define ANTAG_HUD_HOG_BLUE 11 +#define ANTAG_HUD_HOG_RED 12 +#define ANTAG_HUD_TRAITOR 13 +#define ANTAG_HUD_NINJA 14 +#define ANTAG_HUD_CHANGELING 15 +#define ANTAG_HUD_ABDUCTOR 16 +#define ANTAG_HUD_DEVIL 17 +#define ANTAG_HUD_SINTOUCHED 18 +#define ANTAG_HUD_SOULLESS 19 diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 916ff182f3c..980436018c6 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -24,6 +24,7 @@ #define ROLE_REVENANT "revenant" #define ROLE_HOG_GOD "hand of god: god" #define ROLE_HOG_CULTIST "hand of god: cultist" +#define ROLE_DEVIL "devil" //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. @@ -48,4 +49,5 @@ var/global/list/special_roles = list( ROLE_ABDUCTOR = /datum/game_mode/abduction, ROLE_HOG_GOD = /datum/game_mode/hand_of_god, ROLE_HOG_CULTIST = /datum/game_mode/hand_of_god, + ROLE_DEVIL = /datum/game_mode/devil ) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index ce70339a466..5058f8ace1f 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -355,6 +355,8 @@ Turf and target are seperate in case you want to teleport some distance from a t // mob_list.Add(M) // for(var/mob/living/silicon/hive_mainframe/M in world) // mob_list.Add(M) + for(var/mob/living/carbon/true_devil/M in sortmob) + moblist.Add(M) return moblist //E = MC^2 diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 0d8be652a22..b88a9362eb4 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -56,6 +56,8 @@ var/list/sortedAreas = list() //List of preloaded templates var/list/datum/map_template/map_templates = list() + +var/list/datum/map_template/ruins_templates = list() var/list/datum/map_template/space_ruins_templates = list() var/list/datum/map_template/lava_ruins_templates = list() diff --git a/code/_onclick/autoclick.dm b/code/_onclick/autoclick.dm index 6413d6642e2..e3c4b4f04d0 100644 --- a/code/_onclick/autoclick.dm +++ b/code/_onclick/autoclick.dm @@ -12,13 +12,15 @@ /client/MouseUp(object, location, control, params) selected_target = null -/client/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params) - if(selected_target) +/client/MouseDrag(src_object,atom/over_object,src_location,over_location,src_control,over_control,params) + if(selected_target && over_object.IsAutoclickable()) selected_target = over_object /mob/proc/CanMobAutoclick(object, location, params) -/mob/living/CanMobAutoclick(object, location, params) +/mob/living/carbon/CanMobAutoclick(atom/object, location, params) + if(!object.IsAutoclickable()) + return var/obj/item/h = get_active_hand() if(h) . = h.CanItemAutoclick(object, location, params) @@ -29,4 +31,13 @@ var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds /obj/item/weapon/gun/CanItemAutoclick(object, location, params) - . = automatic \ No newline at end of file + . = automatic + +/atom/proc/IsAutoclickable() + . = 1 + +/obj/screen/IsAutoclickable() + . = 0 + +/obj/screen/click_catcher/IsAutoclickable() + . = 1 \ No newline at end of file diff --git a/code/_onclick/hud/demon.dm b/code/_onclick/hud/demon.dm new file mode 100644 index 00000000000..fc0d923e080 --- /dev/null +++ b/code/_onclick/hud/demon.dm @@ -0,0 +1,75 @@ +/datum/hud/devil/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') + ..() + var/obj/screen/using + var/obj/screen/inventory/inv_box + + using = new /obj/screen/drop() + using.icon = ui_style + using.screen_loc = ui_drone_drop + static_inventory += using + + pull_icon = new /obj/screen/pull() + pull_icon.icon = ui_style + pull_icon.update_icon(mymob) + pull_icon.screen_loc = ui_drone_pull + static_inventory += pull_icon + + inv_box = new /obj/screen/inventory/hand() + inv_box.name = "right hand" + inv_box.icon = ui_style + inv_box.icon_state = "hand_r" + inv_box.screen_loc = ui_rhand + inv_box.slot_id = slot_r_hand + static_inventory += inv_box + + inv_box = new /obj/screen/inventory/hand() + inv_box.name = "left hand" + inv_box.icon = ui_style + inv_box.icon_state = "hand_l" + inv_box.screen_loc = ui_lhand + inv_box.slot_id = slot_l_hand + static_inventory += inv_box + + using = new /obj/screen/inventory() + using.name = "hand" + using.icon = ui_style + using.icon_state = "swap_1_m" + using.screen_loc = ui_swaphand1 + using.layer = 19 + static_inventory += using + + using = new /obj/screen/inventory() + using.name = "hand" + using.icon = ui_style + using.icon_state = "swap_2" + using.screen_loc = ui_swaphand2 + using.layer = 19 + static_inventory += using + + zone_select = new /obj/screen/zone_sel() + zone_select.icon = ui_style + zone_select.update_icon(mymob) + + lingchemdisplay = new /obj/screen/ling/chems() + +/datum/hud/devil/persistant_inventory_update() + if(!mymob) + return + var/mob/living/carbon/true_devil/D = mymob + + if(hud_version != HUD_STYLE_NOHUD) + if(D.r_hand) + D.r_hand.screen_loc = ui_rhand + D.client.screen += D.r_hand + if(D.l_hand) + D.l_hand.screen_loc = ui_lhand + D.client.screen += D.l_hand + else + if(D.r_hand) + D.r_hand.screen_loc = null + if(D.l_hand) + D.l_hand.screen_loc = null + +/mob/living/carbon/true_devil/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud/devil(src, ui_style2icon(client.prefs.UI_style)) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 067730d32bf..93dd4a0555a 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -173,6 +173,8 @@ var/generate_minimaps = 0 var/grey_assistants = 0 + var/lavaland_budget = 60 + var/aggressive_changelog = 0 var/reactionary_explosions = 0 //If we use reactionary explosions, explosions that react to walls and doors @@ -584,6 +586,8 @@ config.starlight = 1 if("grey_assistants") config.grey_assistants = 1 + if("lavaland_budget") + config.lavaland_budget = text2num(value) if("no_summon_guns") config.no_summon_guns = 1 if("no_summon_magic") @@ -751,4 +755,4 @@ if(!statclick) statclick = new/obj/effect/statclick/debug("Edit", src) - stat("[name]:", statclick) \ No newline at end of file + stat("[name]:", statclick) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index d48be2c82c4..a01c867c134 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -85,7 +85,8 @@ var/global/datum/controller/master/Master = new() var/mining_type = MINETYPE if(mining_type == "lavaland") - seedRuins(5, 5, /area/lavaland/surface/outdoors, lava_ruins_templates) + seedRuins(5, config.lavaland_budget, \ + /area/lavaland/surface/outdoors, lava_ruins_templates) spawn_rivers() else make_mining_asteroid_secrets() diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 89d3e04808f..742c700ebb9 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -262,6 +262,7 @@ var/record_id_num = 1001 L.fields["species"] = H.dna.species.type L.fields["features"] = H.dna.features L.fields["image"] = image + L.fields["reference"] = H locked += L return diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index bedb903a1b4..a545622036a 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -89,17 +89,28 @@ preloadShuttleTemplates() /proc/preloadRuinTemplates() - var/list/potentialSpaceRuins = generateMapList(filename = "_maps/RandomRuins/SpaceRuins/_maplisting.txt", blacklist = "config/spaceRuinBlacklist.txt") - for(var/ruin in potentialSpaceRuins) - var/datum/map_template/T = new(path = "[ruin]", rename = "[ruin]") - space_ruins_templates[T.name] = T - map_templates[T.name] = T + // Still supporting bans by filename + var/list/banned = generateMapList("config/lavaRuinBlacklist.txt") + banned += generateMapList("config/spaceRuinBlacklist.txt") + + for(var/item in subtypesof(/datum/map_template/ruin)) + var/datum/map_template/ruin/ruin_type = item + // screen out the abstract subtypes + if(!initial(ruin_type.id)) + continue + var/datum/map_template/ruin/R = new ruin_type() + + if(banned.Find(R.mappath)) + continue + + map_templates[R.name] = R + ruins_templates[R.name] = R + + if(istype(R, /datum/map_template/ruin/lavaland)) + lava_ruins_templates[R.name] = R + else if(istype(R, /datum/map_template/ruin/space)) + space_ruins_templates[R.name] = R - var/list/potentialLavaRuins = generateMapList(filename = "_maps/RandomRuins/LavaRuins/_maplisting.txt", blacklist = "config/lavaRuinBlacklist.txt") - for(var/ruin in potentialLavaRuins) - var/datum/map_template/T = new(path = "[ruin]", rename = "[ruin]") - lava_ruins_templates[T.name] = T - map_templates[T.name] = T /proc/preloadShuttleTemplates() for(var/item in subtypesof(/datum/map_template/shuttle)) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 8698e29a382..2b7eee8a730 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -18,6 +18,9 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\ + ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(),\ + ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(),\ + ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),\ ) /datum/atom_hud diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 1587bc4b8d2..60d4d992d88 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -57,9 +57,13 @@ var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD var/datum/gang/gang_datum //Which gang this mind belongs to, if any + var/datum/devilinfo/devilinfo //Information about the devil, if any. + var/damnation_type = 0 + var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src /datum/mind/New(var/key) src.key = key + soulOwner = src /datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0) @@ -539,6 +543,24 @@ sections["monkey"] = text + /** devil ***/ + text = "devil" + if(ticker.mode.config_tag == "devil") + text = uppertext(text) + text = "[text]: " + if(src in ticker.mode.devils) + text += "DEVIL|sintouched|human" + else if(src in ticker.mode.sintouched) + text += "devil|SINTOUCHED|human" + else + text += "devil|sintouched|HUMAN" + + if(current && current.client && (ROLE_DEVIL in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["devil"] = text + /** SILICON ***/ @@ -1163,6 +1185,45 @@ message_admins("[key_name_admin(usr)] has thrall'ed [current].") log_admin("[key_name(usr)] has thrall'ed [current].") + else if(href_list["devil"]) + switch(href_list["devil"]) + if("clear") + if(src in ticker.mode.devils) + if(istype(current,/mob/living/carbon/true_devil/)) + usr << "This cannot be used on true or arch-devils." + else + ticker.mode.devils -= src + special_role = null + current << "Your infernal link has been severed! You are no longer a devil!" + RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt) + RemoveSpell(/obj/effect/proc_holder/spell/dumbfire/fireball/hellish) + RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_contract) + RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_pitchfork) + message_admins("[key_name_admin(usr)] has de-devil'ed [current].") + devilinfo = null + log_admin("[key_name(usr)] has de-devil'ed [current].") + else if(src in ticker.mode.sintouched) + ticker.mode.sintouched -= src + message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].") + log_admin("[key_name(usr)] has de-sintouch'ed [current].") + if("devil") + if(!ishuman(current)) + usr << "This only works on humans!" + return + ticker.mode.devils += src + special_role = "devil" + ticker.mode.finalize_devil(src) + announceDevilLaws() + if("sintouched") + if(ishuman(current)) + ticker.mode.sintouched += src + var/mob/living/carbon/human/H = current + H.influenceSin() + message_admins("[key_name_admin(usr)] has sintouch'ed [current].") + else + usr << "This only works on humans!" + return + else if(href_list["abductor"]) switch(href_list["abductor"]) if("clear") @@ -1569,7 +1630,6 @@ ticker.mode.greet_hog_follower(src,colour) ticker.mode.update_hog_icons_added(src, colour) - /datum/mind/proc/make_Handofgod_god(colour) switch(colour) if("red") @@ -1611,6 +1671,25 @@ var/obj/effect/proc_holder/spell/S = X S.action.Grant(new_character) +/datum/mind/proc/disrupt_spells(delay, list/exceptions = New()) + for(var/X in spell_list) + var/obj/effect/proc_holder/spell/S = X + for(var/type in exceptions) + if(istype(S, type)) + continue + S.charge_counter = delay + spawn(0) + S.start_recharge() + +/datum/mind/proc/get_ghost(even_if_they_cant_reenter) + for(var/mob/dead/observer/G in dead_mob_list) + if(G.mind == src) + if(G.can_reenter_corpse || even_if_they_cant_reenter) + return G + break + + + /mob/proc/sync_mind() mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) mind.active = 1 //indicates that the mind is currently synced with a client @@ -1721,4 +1800,4 @@ /mob/living/simple_animal/hostile/construct/mind_initialize() ..() mind.assigned_role = "[initial(name)]" - mind.special_role = "Cultist" \ No newline at end of file + mind.special_role = "Cultist" diff --git a/code/datums/ruins.dm b/code/datums/ruins.dm new file mode 100644 index 00000000000..d9c2ca348d5 --- /dev/null +++ b/code/datums/ruins.dm @@ -0,0 +1,22 @@ +/datum/map_template/ruin + //name = "A Chest of Doubloons" + name = null + var/id = null // For blacklisting purposes, all ruins need an id + var/description = "In the middle of a clearing in the rockface, there's a \ + chest filled with gold coins with Spanish engravings. How is there a \ + wooden container filled with 18th century coinage in the middle of a \ + lavawracked hellscape? It is clearly a mystery." + + var/cost = null + var/allow_duplicates = TRUE + + var/prefix = null + var/suffix = null + +/datum/map_template/ruin/New() + if(!name && id) + name = id + + mappath = prefix + suffix + ..(path = mappath) + diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm new file mode 100644 index 00000000000..9409e9b3b6f --- /dev/null +++ b/code/datums/ruins/lavaland.dm @@ -0,0 +1,176 @@ +/datum/map_template/ruin/lavaland + prefix = "_maps/RandomRuins/LavaRuins/" + +/datum/map_template/ruin/lavaland/biodome + cost = 5 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/biodome/beach + name = "Biodome Beach" + id = "biodome-beach" + description = "Seemingly plucked from a tropical destination, this beach \ + is calm and cool, with the salty waves roaring softly in the \ + background. Comes with a rustic wooden bar and suicidal bartender." + suffix = "lavaland_biodome_beach.dmm" + +/datum/map_template/ruin/lavaland/biodome/winter + name = "Biodome Winter" + id = "biodome-winter" + description = "For those getaways where you want to get back to nature, \ + but you don't want to leave the fortified military compound where you \ + spend your days. Includes a unique(*) laser pistol display case, \ + and the recently introduced I.C.E(tm)." + suffix = "lavaland_surface_biodome_winter.dmm" + +/datum/map_template/ruin/lavaland/biodome/clown + name = "Biodome Clown Planet" + id = "biodome-clown" + description = "WELCOME TO CLOWN PLANET! HONK HONK HONK etc.!" + suffix = "lavaland_biodome_clown_planet.dmm" + +/datum/map_template/ruin/lavaland/cube + name = "The Wishgranter Cube" + id = "wishgranter-cube" + description = "Nothing good can come from this. Learn from their mistakes \ + and turn around." + suffix = "lavaland_surface_cube.dmm" + cost = 10 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/prisoners + name = "Prisoner Crash" + id = "prisoner-crash" + description = "This incredibly high security shuttle clearly didn't have \ + 'avoiding lavafilled hellscapes' as a design priority. As such, it \ + has crashed, waking the prisoners from their cryostasis, and setting \ + them loose on the wastes. If they live long enough, that is." + suffix = "lavaland_surface_prisoner_crash.dmm" + cost = 15 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/seed_vault + name = "Seed Vault" + id = "seed-vault" + description = "The creators of these vaults were a highly advanced and \ + benevolent race, and launched many into the stars, hoping to aid \ + fledgling civilizations. However, all the inhabitants seem to do is \ + grow drugs and guns." + suffix = "lavaland_surface_seed_vault.dmm" + cost = 10 + +/datum/map_template/ruin/lavaland/ash_walker + name = "Ash Walker Nest" + id = "ash-walker" + description = "A race of unbreathing lizards live here, that run faster \ + than a human can, worship a broken dead city, and are capable of \ + reproducing by something involving tentacles? Probably best to \ + stay clear." + suffix = "lavaland_surface_ash_walker1.dmm" + cost = 20 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/free_golem + name = "Free Golem Ship" + id = "golem-ship" + description = "Lumbering humanoids, made out of precious metals, move \ + inside this ship. They frequently leave to mine more minerals, \ + which they somehow turn into more of them. Seem very intent on \ + research and individual liberty, and also geology based naming?" + cost = 20 + suffix = "lavaland_surface_golem_ship.dmm" + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/animal_hospital + name = "Animal Hospital" + id = "animal-hospital" + description = "Rats with cancer do not live very long. And the ones that \ + wake up from cryostasis seem to commit suicide out of boredom." + cost = 5 + suffix = "lavaland_surface_animal_hospital.dmm" + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/sin + cost = 10 + +/datum/map_template/ruin/lavaland/sin/envy + name = "Ruin of Envy" + id = "envy" + description = "When you get what they have, then you'll finally be happy." + suffix = "lavaland_surface_envy.dmm" + +/datum/map_template/ruin/lavaland/sin/gluttony + name = "Ruin of Gluttony" + id = "gluttony" + description = "If you eat enough, then eating will be all that you do." + suffix = "lavaland_surface_gluttony.dmm" + +/datum/map_template/ruin/lavaland/sin/greed + name = "Ruin of Greed" + id = "greed" + description = "Sure you don't need magical powers, but you WANT them, and \ + that's what's important." + suffix = "lavaland_surface_greed.dmm" + +/datum/map_template/ruin/lavaland/sin/pride + name = "Ruin of Pride" + id = "pride" + description = "Wormhole lifebelts are for LOSERS, who you are better than." + suffix = "lavaland_surface_pride.dmm" + +/datum/map_template/ruin/lavaland/sin/sloth + name = "Ruin of Sloth" + id = "sloth" + description = "..." + suffix = "lavaland_surface_sloth.dmm" + // Generates nothing but atmos runtimes and salt + cost = 0 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/ato + name = "Automated Trade Outpost" + id = "ato" + description = "A sign at the front says 'Stealing is bad.'" + suffix = "lavaland_surface_automated_trade_outpost.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/ufo_crash + name = "UFO Crash" + id = "ufo-crash" + description = "Turns out that keeping your abductees unconcious is really \ + important. Who knew?" + suffix = "lavaland_surface_ufo_crash.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/ww_vault + name = "Wishgranter Vault" + id = "ww-vault" + description = "Scrawled on the large double doors is both a message and a \ + warning: 'meat grinder requires sacri...'. You're not so sure about \ + this anymore." + suffix = "lavaland_surface_ww_vault.dmm" + cost = 20 + +/datum/map_template/ruin/lavaland/xeno_nest + name = "Xenomorph Nest" + id = "xeno-nest" + description = "These xenomorphs got bored of horrifically slaughtering \ + people on space stations, and have settled down on a nice lava filled \ + hellscape to focus on what's really important in life. Quality memes." + suffix = "lavaland_surface_xeno_nest.dmm" + cost = 20 + +/datum/map_template/ruin/lavaland/fountain + name = "Fountain Hall" + id = "fountain" + description = "The fountain has a warning on the side. DANGER: May have \ + undeclared side effects that only become obvious when implemented." + suffix = "lavaland_fountain_hall.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/zombie_gym + name = "Zombie Gym" + id = "zombie-gym" + description = "The patrons at this gym are serious about health, and \ + making sure people work on their cardio." + suffix = "lavaland_gym.dmm" + cost = 10 diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm new file mode 100644 index 00000000000..de83a4bedb4 --- /dev/null +++ b/code/datums/ruins/space.dm @@ -0,0 +1,157 @@ +/datum/map_template/ruin/space + prefix = "_maps/RandomRuins/SpaceRuins/" + cost = 1 + +/datum/map_template/ruin/space/zoo + id = "zoo" + suffix = "abandonedzoo.dmm" + name = "Biological Storage Facility" + description = "In case society crumbles, we will be able to restore our \ + zoos to working order with the breeding stock kept in these 100% \ + secure and unbreachable storage facilities. At no point has anything \ + escaped. That's our story, and we're sticking to it." + +/datum/map_template/ruin/space/asteroid1 + id = "asteroid1" + suffix = "asteroid1.dmm" + name = "Asteroid 1" + description = "I-spy with my little eye, something beginning with R." + +/datum/map_template/ruin/space/asteroid2 + id = "asteroid2" + suffix = "asteroid2.dmm" + name = "Asteroid 2" + description = "Oh my god, a giant rock!" + +/datum/map_template/ruin/space/asteroid3 + id = "asteroid3" + suffix = "asteroid3.dmm" + name = "Asteroid 3" + description = "This asteroid floating in space has no official \ + designation, because the scientist that discovered it deemed it \ + 'super dull'." + +/datum/map_template/ruin/space/asteroid4 + id = "asteroid4" + suffix = "asteroid4.dmm" + name = "Asteroid 4" + description = "Nanotrasen Escape Pods have a 100%* success rate, and a \ + 99%* customer satisfaction rate. *Please note that these statistics, \ + are taken from pods that have successfully docked with a recovery \ + vessel." + +/datum/map_template/ruin/space/asteroid5 + id = "asteroid5" + suffix = "asteroid5.dmm" + name = "Asteroid 5" + description = "Oh my god, another giant rock!" + +/datum/map_template/ruin/space/deep_storage + id = "deep-storage" + suffix = "deepstorage.dmm" + name = "Survivalist Bunker" + description = "Assume the best, prepare for the worst. Generally, you \ + should do so by digging a three man heavily fortified bunker into \ + a giant unused asteroid. Then make it self sufficient, mask any \ + evidence of construction, hook it covertly into the \ + telecommunications network and hope for the best." + +/datum/map_template/ruin/space/derelict1 + id = "derelict1" + suffix = "derelict1.dmm" + name = "Derelict 1" + description = "Nothing to see here citizen, move along, certainly no \ + xeno outbreaks on this piece of station debris. That purple stuff? \ + It's uh... station nectar. It's a top secret research installation." + +/datum/map_template/ruin/space/derelict2 + id = "derelict2" + suffix = "derelict2.dmm" + name = "Dinner for Two" + description = "Oh this is the night\n\ + It's a beautiful night\n\ + And we call it bella notte" + +/datum/map_template/ruin/space/derelict3 + id = "derelict3" + suffix = "derelict3.dmm" + name = "Derelict 3" + description = "These hulks were once part of a larger structure, where \ + the three great \[REDACTED\] were forged." + +/datum/map_template/ruin/space/derelict4 + id = "derelict4" + suffix = "derelict4.dmm" + name = "Derelict 4" + description = "Centcom ferries have never crashed, will never crash, \ + there is no current investigation into a crashed ferry, and we \ + will not let Internal Affairs trample over high security information \ + in the name of this baseless witchhunt." + +/datum/map_template/ruin/space/derelict5 + id = "derelict5" + suffix = "derelict5.dmm" + name = "Derelict 5" + description = "The plan is, we put a whole bunch of crates full of \ + treasure in this disused warehouse, launch it into space, and then \ + ignore it. Forever." + +/datum/map_template/ruin/space/empty_shell + id = "empty-shell" + suffix = "emptyshell.dmm" + name = "Empty Shell" + description = "Cosy, rural property availible for young professional \ + couple. Only twelve parsecs from the nearest hyperspace lane!" + +/datum/map_template/ruin/space/gas_the_lizards + id = "gas-the-lizards" + suffix = "gasthelizards.dmm" + name = "Disposal Facility 17" + description = "Gas efficiency at 95.6%, fluid elimination at 96.2%. \ + Will require renewed supplies of 'carpet' before the end of the \ + quarter." + +/datum/map_template/ruin/space/intact_empty_ship + id = "intact-empty-ship" + suffix = "intactemptyship.dmm" + name = "Authorship" + description = "Just somewhere quiet, where I can focus on my work with \ + no interruptions." + +/datum/map_template/ruin/space/mech_transport + id = "mech-transport" + suffix = "mechtransport.dmm" + name = "CF Corsair" + description = "Well, when is it getting here? I have bills to pay; very \ + well-armed clients who want their shipments as soon as possible! I \ + don't care, just find it!" + +/datum/map_template/ruin/space/onehalf + id = "onehalf" + suffix = "onehalf.dmm" + name = "DK Excavator 453" + description = "Based on the trace elements we've detected on the \ + gutted asteroids, we suspect that a mining ship using a restricted \ + engine is somewhere in the area. We'd like to request a patrol vessel \ + to investigate." + +/datum/map_template/ruin/space/spacebar + id = "spacebar" + suffix = "spacebar.dmm" + name = "The Rampant Golem and Yellow Hound" + description = "No questions asked. No shoes/foot protection, no service. \ + No tabs. No violence in the inside areas. That's it. Welcome to the \ + Rampant Golem and Yellow Hound. Can I take your order?" + +/datum/map_template/ruin/space/turreted_outpost + id = "turreted-outpost" + suffix = "turretedoutpost.dmm" + name = "Unnamed Turreted Outpost" + description = "We'd ask them to stop blaring that ruskiepop music, but \ + none of us are brave enough to go near those death turrets they have." + +/datum/map_template/ruin/space/way_home + id = "way-home" + suffix = "way_home.dmm" + name = "Salvation" + description = "In the darkest times, we will find our way home." diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 920d71870a2..bb4f8d28ffa 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1328,6 +1328,25 @@ var/list/teleportlocs = list() icon_state = "tcomsatlounge" +// Hell +/area/hell + name = "Hell Lobby" + //icon = "ICON FILENAME" + //icon_state = "NAME OF ICON" + requires_power = 0 + music = "music/music.ogg" + +/area/hell/trial1 + name = "Hell Trial1" + //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) + +/area/hell/trial1 + name = "Hell Trial2" + //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) + +/area/hell/trial1 + name = "Hell Trial3" + //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) // Away Missions /area/awaymission diff --git a/code/game/gamemodes/demon/demon.dm b/code/game/gamemodes/demon/demon.dm new file mode 100644 index 00000000000..743e95ad910 --- /dev/null +++ b/code/game/gamemodes/demon/demon.dm @@ -0,0 +1,40 @@ +var/global/list/whiteness = list ( + /obj/item/clothing/under/color/white = 2, + /obj/item/clothing/under/rank/bartender = 1, + /obj/item/clothing/under/rank/chef = 1, + /obj/item/clothing/under/rank/chief_engineer = 1, + /obj/item/clothing/under/rank/scientist = 1, + /obj/item/clothing/under/rank/chemist = 1, + /obj/item/clothing/under/rank/chief_medical_officer = 1, + /obj/item/clothing/under/rank/geneticist = 1, + /obj/item/clothing/under/rank/virologist = 1, + /obj/item/clothing/under/rank/nursesuit = 1, + /obj/item/clothing/under/rank/medical = 1, + /obj/item/clothing/under/rank/det = 1, + /obj/item/clothing/under/suit_jacket/white = 0.5, + /obj/item/clothing/under/burial = 1 +) + + + +/mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker) + switch(mind.devilinfo.bane) + if(BANE_WHITECLOTHES) + if(istype(attacker, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = attacker + if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = H.w_uniform + if(whiteness[U.type]) + src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.") + return whiteness[U.type] + 1 + if(BANE_TOOLBOX) + if(istype(weapon,/obj/item/weapon/storage/toolbox)) + src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!") + return 2.5 // Will take four hits with a normal toolbox. + if(BANE_HARVEST) + if(istype(weapon,/obj/item/weapon/reagent_containers/food/snacks/grown/)) + src.visible_message("The spirits of the harvest aid in the exorcism.", "The harvest spirits are harming you.") + src.Weaken(2) + qdel(weapon) + return 2 + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/demon/demon_game_mode.dm b/code/game/gamemodes/demon/demon_game_mode.dm new file mode 100644 index 00000000000..06856715515 --- /dev/null +++ b/code/game/gamemodes/demon/demon_game_mode.dm @@ -0,0 +1,108 @@ +/datum/game_mode + var/list/datum/mind/sintouched = list() + var/list/datum/mind/devils = list() + var/devil_ascended = 0 // Number of arch devils on station + +/datum/game_mode/proc/auto_declare_completion_sintouched() + var/text = "" + if(sintouched.len) + text += "
The sintouched were:" + var/list/sintouchedUnique = uniqueList(sintouched) + for(var/S in sintouchedUnique) + var/datum/mind/sintouched_mind = S + text += printplayer(sintouched_mind) + text += printobjectives(sintouched_mind) + text += "
" + text += "
" + world << text + +/datum/game_mode/proc/auto_declare_completion_devils() + /var/text = "" + if(devils.len) + text += "
The devils were:" + for(var/D in devils) + var/datum/mind/devil = D + text += printplayer(devil) + text += printdevilinfo(devil) + text += printobjectives(devil) + text += "
" + world << text + +/datum/game_mode/devil + + +/datum/game_mode/proc/finalize_devil(datum/mind/devil_mind) + var/mob/living/carbon/human/S = devil_mind.current + var/trueName= randomDevilName() + var/datum/objective/devil/soulquantity/soulquant = new + soulquant.owner = devil_mind + var/datum/objective/devil/soulquality/soulqual = new + soulqual.owner = devil_mind + devil_mind.objectives += soulqual + devil_mind.objectives += soulquant + devil_mind.devilinfo = devilInfo(trueName, 1) + devil_mind.store_memory("Your devilic true name is [devil_mind.devilinfo.truename]
[lawlorify[LAW][devil_mind.devilinfo.ban]]
[lawlorify[LAW][devil_mind.devilinfo.bane]]
[lawlorify[LAW][devil_mind.devilinfo.obligation]]
[lawlorify[LAW][devil_mind.devilinfo.banish]]
") + devil_mind.devilinfo.owner = devil_mind + devil_mind.devilinfo.give_base_spells(1) + spawn(10) + if(devil_mind.assigned_role == "Clown") + S << "Your infernal nature has allowed you to overcome your clownishness." + S.dna.remove_mutation(CLOWNMUT) + +/datum/mind/proc/announceDevilLaws() + if(!devilinfo) + return + current << "You remember your link to the infernal. You are [src.devilinfo.truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp." + current << "However, your infernal form is not without weaknesses." + current << lawlorify[LAW][src.devilinfo.bane] + current << lawlorify[LAW][src.devilinfo.ban] + current << lawlorify[LAW][src.devilinfo.obligation] + current << lawlorify[LAW][src.devilinfo.banish] + current << "

Remember, the crew can research your weaknesses if they find out your devil name.
" + var/obj_count = 1 + current << "Your current objectives:" + for(var/O in objectives) + var/datum/objective/objective = O + current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + +/datum/game_mode/proc/printdevilinfo(datum/mind/ply) + if(!ply.devilinfo) + return "" + var/text = "
The devil's true name is: [ply.devilinfo.truename]
" + text += "The devil's bans were:
" + text += " [lawlorify[LORE][ply.devilinfo.ban]]
" + text += " [lawlorify[LORE][ply.devilinfo.bane]]
" + text += " [lawlorify[LORE][ply.devilinfo.obligation]]
" + text += " [lawlorify[LORE][ply.devilinfo.banish]]
" + return text + +/datum/game_mode/proc/update_devil_icons_added(datum/mind/devil_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_DEVIL] + hud.join_hud(devil_mind.current) + set_antag_hud(devil_mind.current, "devil") + +/datum/game_mode/proc/update_devil_icons_removed(datum/mind/devil_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_DEVIL] + hud.leave_hud(devil_mind.current) + set_antag_hud(devil_mind.current, null) + +/datum/game_mode/proc/update_sintouch_icons_added(datum/mind/sin_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SINTOUCHED] + hud.join_hud(sin_mind.current) + set_antag_hud(sin_mind.current, "sintouched") + +/datum/game_mode/proc/update_sintouch_icons_removed(datum/mind/sin_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SINTOUCHED] + hud.leave_hud(sin_mind.current) + set_antag_hud(sin_mind.current, null) + +/datum/game_mode/proc/update_soulless_icons_added(datum/mind/soulless_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SOULLESS] + hud.join_hud(soulless_mind.current) + set_antag_hud(soulless_mind.current, "soulless") + +/datum/game_mode/proc/update_soulless_icons_removed(datum/mind/soulless_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SOULLESS] + hud.leave_hud(soulless_mind.current) + set_antag_hud(soulless_mind.current, null) diff --git a/code/game/gamemodes/demon/demoninfo.dm b/code/game/gamemodes/demon/demoninfo.dm new file mode 100644 index 00000000000..5c013496cac --- /dev/null +++ b/code/game/gamemodes/demon/demoninfo.dm @@ -0,0 +1,413 @@ +#define POWERUPTHRESHOLD 3 //How many souls are needed per stage. + +#define BASIC_DEVIL 0 +#define BLOOD_LIZARD 1 +#define TRUE_DEVIL 2 +#define ARCH_DEVIL 3 + +#define SOULVALUE soulsOwned.len-reviveNumber + +#define DEVILRESURRECTTIME 600 + +var/global/list/allDevils = list() +var/global/list/lawlorify = list ( + LORE = list( + OBLIGATION_FOOD = "This devil seems to always offer it's victims food before slaughtering them.", + OBLIGATION_DRINK = "This devil seems to always offer it's victims a drink before slaughtering them.", + OBLIGATION_GREET = "This devil seems to only be able to converse with people it knows the name of.", + OBLIGATION_PRESENCEKNOWN = "This devil seems to be unable to attack from stealth.", + OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.", + OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.", + OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.", + BANE_SILVER = "Silver seems to gravely injure this devil.", + BANE_SALT = "Throwing salt at this devil will hinder his ability to use infernal powers temporarily.", + BANE_LIGHT = "Bright flashes will disorient the devil, likely causing him to flee.", + BANE_IRON = "Cold iron will slowly injure him, until he can purge it from his system.", + BANE_WHITECLOTHES = "Wearing clean white clothing will help ward off this devil.", + BANE_HARVEST = "Presenting the labors of a harvest will disrupt the devil.", + BANE_TOOLBOX = "That which holds the means of creation also holds the means of the devil's undoing.", + BAN_HURTWOMAN = "This devil seems to prefer hunting men.", + BAN_CHAPEL = "This devil avoids holy ground.", + BAN_HURTPRIEST = "The annointed clergy appear to be immune to his powers.", + BAN_AVOIDWATER = "The devil seems to have some sort of aversion to water, though it does not appear to harm him.", + BAN_STRIKEUNCONCIOUS = "This devil only shows interest in those who are awake.", + BAN_HURTLIZARD = "This devil will not strike a lizardman first.", + BAN_HURTANIMAL = "This devil avoids hurting animals.", + BANISH_WATER = "To banish the devil, you must sprinkle holy water upon it's body.", + BANISH_COFFIN = "This devil will return to life if it's remains are not placed within a coffin.", + BANISH_FORMALDYHIDE = "To banish the devil, you must inject it's lifeless body with embalming fluid.", + BANISH_RUNES = "This devil will resurrect after death, unless it's remains are within a rune.", + BANISH_CANDLES = "A large number of candles will prevent it from resurrecting.", + BANISH_DESTRUCTION = "It's corpse must be utterly destroyed to prevent resurrection.", + BANISH_FUNERAL_GARB = "Funeral garments will prevent the devil from resurrecting." + ), + LAW = list( + OBLIGATION_FOOD = "When not acting in self defense, you must always offer your victim food before harming them.", + OBLIGATION_DRINK = "When not acting in self defense, you must always offer your victim drink before harming them.", + OBLIGATION_GREET = "You must always greet other people by their last name before talking with them.", + OBLIGATION_PRESENCEKNOWN = "You must always make your presence known before attacking.", + OBLIGATION_SAYNAME = "You must always say your true name after you kill someone.", + OBLIGATION_ANNOUNCEKILL = "Upon killing someone, you must make your deed known to all within earshot, over comms if reasonably possible.", + OBLIGATION_ANSWERTONAME = "If you are not under attack, you must always respond to your true name.", + BAN_HURTWOMAN = "You must never harm a female outside of self defense.", + BAN_CHAPEL = "You must never attempt to enter the chapel.", + BAN_HURTPRIEST = "You must never attack a priest.", + BAN_AVOIDWATER = "You must never willingly touch a wet surface.", + BAN_STRIKEUNCONCIOUS = "You must never strike an unconcious person.", + BAN_HURTLIZARD = "You must never harm a lizardman outside of self defense.", + BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.", + BANE_SILVER = "Silver, in all of it's forms shall be your downfall.", + BANE_SALT = "Salt will disrupt your magical abilities.", + BANE_LIGHT = "Blinding lights will prevent you from using offensive powers for a time.", + BANE_IRON = "Cold wrought iron shall act as poison to you.", + BANE_WHITECLOTHES = "Those clad in pristine white garments will strike you true.", + BANE_HARVEST = "The fruits of the harvest shall be your downfall.", + BANE_TOOLBOX = "Toolboxes are bad news for you, for some reason.", + BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.", + BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.", + BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.", + BANISH_RUNES = "If your corpse is placed within a rune, you will be unable to resurrect.", + BANISH_CANDLES = "If your corpse is near lit candles, you will be unable to resurrect.", + BANISH_DESTRUCTION = "If your corpse is destroyed, you will be unable to resurrect.", + BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect." + ) + ) + +/datum/devilinfo/ + var/datum/mind/owner = null + var/obligation + var/ban + var/bane + var/banish + var/truename + var/list/datum/mind/soulsOwned = new + var/reviveNumber = 0 + var/form = BASIC_DEVIL + var/exists = 0 + +/proc/randomDevilInfo(name = randomDevilName()) + var/datum/devilinfo/devil = new + devil.truename = name + devil.bane = randomdevilbane() + devil.obligation = randomdevilobligation() + devil.ban = randomdevilban() + devil.banish = randomdevilbanish() + return devil + +/proc/devilInfo(name, saveDetails = 0) + if(allDevils[lowertext(name)]) + return allDevils[lowertext(name)] + else + var/datum/devilinfo/devil = randomDevilInfo(name) + allDevils[lowertext(name)] = devil + devil.exists = saveDetails + return devil + + + +/proc/randomDevilName() + var/preTitle = "" + var/title = "" + var/mainName = "" + var/suffix = "" + if(prob(65)) + if(prob(35)) + preTitle = pick("Dark ", "Hellish ", "Fiery ", "Sinful ", "Blood ") + title = pick("Lord ", "Fallen Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept ") + var/probability = 100 + mainName = pick("Hal", "Ve", "Odr", "Neit", "Ci", "Quon", "Mya", "Folth", "Wren", "Gyer", "Geyr", "Hil", "Niet", "Twou", "Hu", "Don") + while(prob(probability)) + mainName += pick("hal", "ve", "odr", "neit", "ca", "quon", "mya", "folth", "wren", "gyer", "geyr", "hil", "niet", "twoe", "phi", "coa") + probability -= 20 + if(prob(40)) + suffix = pick(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.") + return preTitle + title + mainName + suffix + +/proc/randomdevilobligation() + return pick(OBLIGATION_FOOD, OBLIGATION_DRINK, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME) + +/proc/randomdevilban() + return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL) + +/proc/randomdevilbane() + return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX) + +/proc/randomdevilbanish() + return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB) + +/datum/devilinfo/proc/add_soul(datum/mind/soul) + if(soulsOwned.Find(soul)) + return + soulsOwned += soul + switch(SOULVALUE) + if(0) + owner.current << "Your hellish powers have been restored." + give_base_spells() + if(POWERUPTHRESHOLD) + increase_blood_lizard() + if(POWERUPTHRESHOLD*2) + increase_true_devil() + if(POWERUPTHRESHOLD*3) + increase_arch_devil() + +/datum/devilinfo/proc/remove_soul(datum/mind/soul) + if(soulsOwned.Remove(soul)) + check_regression() + +/datum/devilinfo/proc/check_regression() + if (form == ARCH_DEVIL) + return //arch devil can't regress + switch(SOULVALUE) + if(-1) + remove_spells() + owner.current << "As punishment for your failures, all of your powers except contract creation have been revoked." + if(POWERUPTHRESHOLD-1) + regress_humanoid() + if(POWERUPTHRESHOLD*2-1) + regress_blood_lizard() + +/datum/devilinfo/proc/increase_form() + switch(form) + if(BASIC_DEVIL) + increase_blood_lizard() + if(BLOOD_LIZARD) + increase_true_devil() + if(TRUE_DEVIL) + increase_arch_devil() + +/datum/devilinfo/proc/regress_humanoid() + owner.current << "Your powers weaken, have more contracts be signed to regain power." + if(istype(owner.current, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner.current + H.set_species(/datum/species/human, 1) + H.regenerate_icons() + give_base_spells() + form = BASIC_DEVIL + +/datum/devilinfo/proc/regress_blood_lizard() + var/mob/living/carbon/true_devil/D = owner.current + D << "Your powers weaken, have more contracts be signed to regain power." + D.oldform.loc = D.loc + owner.transfer_to(D.oldform) + give_lizard_spells() + qdel(D) + form = BLOOD_LIZARD + + +/datum/devilinfo/proc/increase_blood_lizard() + owner.current << "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard." + sleep(50) + if(istype(owner.current, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner.current + H.set_species(/datum/species/lizard, 1) + H.underwear = "Nude" + H.undershirt = "Nude" + H.socks = "Nude" + H.dna.features["mcolor"] = "511" //A deep red + H.regenerate_icons() + else //Did the devil get hit by a staff of transmutation? + owner.current.color = "#501010" + give_lizard_spells() + form = BLOOD_LIZARD + + + +/datum/devilinfo/proc/increase_true_devil() + owner.current << "You feel as though your current form is about to shed. You will soon turn into a true devil." + sleep(50) + var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc) + A.faction |= "hell" + owner.current.loc = A + A.oldform = owner.current + owner.transfer_to(A) + A.set_name() + give_true_spells() + form = TRUE_DEVIL + + +/datum/devilinfo/proc/increase_arch_devil() + var/mob/living/carbon/true_devil/D = owner.current + D << "You feel as though your form is about to ascend." + sleep(50) + if(!D) + return + D.visible_message("[D]'s skin begins to erupt with spikes.", \ + "Your flesh begins creating a shield around yourself.") + sleep(100) + if(!D) + return + D.visible_message("The horns on [D]'s head slowly grow and elongate.", \ + "Your body continues to mutate. Your telepathic abilities grow.") + sleep(90) + if(!D) + return + D.visible_message("[D]'s body begins to violently stretch and contort.", \ + "You begin to rend apart the final barriers to ultimate power.") + sleep(40) + if(!D) + return + D << "Yes!" + sleep(10) + if(!D) + return + D << "YES!!" + sleep(10) + if(!D) + return + D << "YE--" + sleep(1) + if(!D) + return + world << "\"SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!\"" + world << 'sound/hallucinations/veryfar_noise.ogg' + give_arch_spells() + D.convert_to_archdevil() + var/area/A = get_area(owner.current) + if(A) + notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, attack_not_jump = 1) + sleep(50) + if(!ticker.mode.devil_ascended) + SSshuttle.emergency.request(null, 0.3) + ticker.mode.devil_ascended++ + form = ARCH_DEVIL + +/datum/devilinfo/proc/remove_spells() + for(var/X in owner.spell_list) + var/obj/effect/proc_holder/spell/S = X + if(!istype(S, /obj/effect/proc_holder/spell/targeted/summon_contract)) + owner.RemoveSpell(S) + +/datum/devilinfo/proc/give_summon_contract() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_contract(null)) + + +/datum/devilinfo/proc/give_base_spells(give_summon_contract = 0) + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball/hellish(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork(null)) + if(give_summon_contract) + give_summon_contract() + +/datum/devilinfo/proc/give_lizard_spells() + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball/hellish(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) + +/datum/devilinfo/proc/give_true_spells() + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork/greater(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball/hellish(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) + //owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) TODO LORDPIDEY add this spell + +/datum/devilinfo/proc/give_arch_spells() + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork/ascended(null)) + //owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) TODO LORDPIDEY + +/datum/devilinfo/proc/beginResurrectionCheck(mob/living/body) + if(SOULVALUE>0) + owner.current<< "Your body has been damaged to the point that you may no longer use it. At the cost of some of your power, you will return to life soon. Remain in your body." + sleep(DEVILRESURRECTTIME) + if (!body || body.stat == DEAD) + if(SOULVALUE>0) + if(check_banishment(body)) + owner.current<< "Unfortunately, the mortals have finished a ritual that prevents your resurrection." + return -1 + else + owner.current<< "WE LIVE AGAIN!" + return hellish_resurrection(body) + else + owner.current<< "Unfortunately, the power that stemmed from your contracts has been extinguished. You no longer have enough power to resurrect." + return -1 + else + owner.current << " You seem to have resurrected without your hellish powers." + else + owner.current << "Your hellish powers are too weak to resurrect yourself." + +/datum/devilinfo/proc/check_banishment(mob/living/body) + switch(banish) + if(BANISH_WATER) + if(istype(body, /mob/living/carbon)) + var/mob/living/carbon/H = body + return H.reagents.has_reagent("holy water") + return 0 + if(BANISH_COFFIN) + return (body && istype(body.loc, /obj/structure/closet/coffin)) + if(BANISH_FORMALDYHIDE) + if(istype(body, /mob/living/carbon)) + var/mob/living/carbon/H = body + return H.reagents.has_reagent("formaldehyde") + return 0 + if(BANISH_RUNES) + if(body) + for(var/obj/effect/decal/cleanable/crayon/R in range(0,body)) + if (R.name == "rune") + return 1 + return 0 + if(BANISH_CANDLES) + if(body) + var/count = 0 + for(var/obj/item/candle/C in range(1,body)) + count += C.lit + if(count>=4) + return 1 + return 0 + if(BANISH_DESTRUCTION) + if(body) + return 0 + return 1 + if(BANISH_FUNERAL_GARB) + if(istype(body, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = body + if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/burial)) + return 1 + return 0 + +/datum/devilinfo/proc/hellish_resurrection(mob/living/body) + message_admins("[owner.name] (true name is: [truename]) is resurrecting using hellish energy.") + if(SOULVALUE < POWERUPTHRESHOLD * 3) // once ascended, arch devils do not go down in power by any means. + reviveNumber++ + if(body) + body.revive(1,0) + body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted. + if(istype(body, /mob/living/carbon/true_devil)) + var/mob/living/carbon/true_devil/D = body + if(D.oldform) + D.oldform.revive(1,0) // Heal the old body too, so the devil doesn't resurrect, then immediately regress into a dead body. + else + if(blobstart.len > 0) + var/turf/targetturf = get_turf(pick(blobstart)) + var/mob/currentMob = owner.current + if(!currentMob) + currentMob = owner.get_ghost() + if(!currentMob) + message_admins("[owner.name]'s devil resurrection failed due to client logoff. Aborting.") + return -1 // + if(currentMob.mind != owner) + message_admins("[owner.name]'s devil resurrection failed due to becoming a new mob. Aborting.") + return -1 + currentMob.change_mob_type( /mob/living/carbon/human , targetturf, null, 1) + var/mob/living/carbon/human/H = owner.current + give_summon_contract() + if(SOULVALUE >= POWERUPTHRESHOLD) + H.set_species(/datum/species/lizard, 1) + H.underwear = "Nude" + H.undershirt = "Nude" + H.socks = "Nude" + H.dna.features["mcolor"] = "511" + H.regenerate_icons() + if(SOULVALUE >= POWERUPTHRESHOLD * 2) //Yes, BOTH this and the above if statement are to run if soulpower is high enough. + var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(targetturf) + A.faction |= "hell" + H.forceMove(A) + A.oldform = H + A.set_name() + owner.transfer_to(A) + if(SOULVALUE >= POWERUPTHRESHOLD * 3) + A.convert_to_archdevil() + + else + throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection") + check_regression() \ No newline at end of file diff --git a/code/game/gamemodes/demon/imp/imp.dm b/code/game/gamemodes/demon/imp/imp.dm new file mode 100644 index 00000000000..76696ced406 --- /dev/null +++ b/code/game/gamemodes/demon/imp/imp.dm @@ -0,0 +1,56 @@ +//////////////////The Monster + +/mob/living/simple_animal/imp + name = "imp" + real_name = "imp" + desc = "A large, menacing creature covered in armored black scales." + speak_emote = list("cackles") + emote_hear = list("cackles","screeches") + response_help = "thinks better of touching" + response_disarm = "flails at" + response_harm = "punches" + icon = 'icons/mob/mob.dmi' + icon_state = "imp" + icon_living = "imp" + speed = 1 + a_intent = "harm" + stop_automated_movement = 1 + status_flags = CANPUSH + attack_sound = 'sound/magic/demon_attack1.ogg' + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 250 //Weak to cold + maxbodytemp = INFINITY + faction = list("hell") + attacktext = "wildly tears into" + maxHealth = 200 + health = 200 + healable = 0 + environment_smash = 1 + melee_damage_lower = 10 + melee_damage_upper = 15 + see_in_dark = 8 + var/boost = 0 + bloodcrawl = BLOODCRAWL_EAT + see_invisible = SEE_INVISIBLE_MINIMUM + var/list/consumed_mobs = list() + var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ + Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ + of intentionally harming a fellow devil." + +/mob/living/simple_animal/imp/New() + ..() + boost = world.time + 30 + +/mob/living/simple_animal/imp/Life() + ..() + if(boost[src] screams in agony as it sublimates into a sulfurous smoke.") + ghostize() + qdel(src) diff --git a/code/game/gamemodes/demon/objectives.dm b/code/game/gamemodes/demon/objectives.dm new file mode 100644 index 00000000000..bdcac75b8e2 --- /dev/null +++ b/code/game/gamemodes/demon/objectives.dm @@ -0,0 +1,62 @@ +/datum/objective/devil + dangerrating = 5 + +/datum/objective/devil/soulquantity + explanation_text = "You shouldn't see this text. Error:DEVIL1" + var/quantity = 4 + +/datum/objective/devil/soulquantity/New() + quantity = pick(4,5) + explanation_text = "Purchase, and retain control over at least [quantity] souls." + +/datum/objective/devil/soulquantity/check_completion() + var/count = 0 + for(var/S in owner.devilinfo.soulsOwned) + var/datum/mind/L = S + if(L.soulOwner != L) + count++ + return count >= quantity + +/datum/objective/devil/soulquality + explanation_text = "You shouldn't see this text. Error:DEVIL2" + var/contractType + var/quantity + +/datum/objective/devil/soulquality/New() + contractType = pick(CONTRACT_POWER, CONTRACT_WEALTH, CONTRACT_PRESTIGE, CONTRACT_MAGIC, CONTRACT_REVIVE, CONTRACT_KNOWLEDGE/*, CONTRACT_UNWILLING*/) + var/contractName + quantity = pick(1,2) + switch(contractType) + if(CONTRACT_POWER) + contractName = "for power" + if(CONTRACT_WEALTH) + contractName = "for wealth" + if(CONTRACT_PRESTIGE) + contractName = "for prestige" + if(CONTRACT_MAGIC) + contractName = "for magic" + if(CONTRACT_REVIVE) + contractName = "of revival" + if(CONTRACT_KNOWLEDGE) + contractName = "for knowledge" + //if(CONTRACT_UNWILLING) //Makes round unfun. + // contractName = "against their will" + explanation_text = "Have mortals sign at least [quantity] contracts [contractName]" + +/datum/objective/devil/soulquality/check_completion() + var/count = 0 + for(var/S in owner.devilinfo.soulsOwned) + var/datum/mind/L = S + if(L.soulOwner != L && L.damnation_type == contractType) + count++ + return count>=quantity + +/datum/objective/devil/sintouch + var/quantity + +/datum/objective/devil/sintouch/New() + quantity = pick(4,5) + explanation_text = "Ensure at least [quantity] mortals are sintouched." + +/datum/objective/devil/sintouch/check_completion() + return quantity>=ticker.mode.sintouched.len \ No newline at end of file diff --git a/code/game/gamemodes/demon/true_demon/_true_demon.dm b/code/game/gamemodes/demon/true_demon/_true_demon.dm new file mode 100644 index 00000000000..36d491df5f9 --- /dev/null +++ b/code/game/gamemodes/demon/true_demon/_true_demon.dm @@ -0,0 +1,195 @@ +#define DEVIL_HANDS_LAYER 1 +#define DEVIL_HEAD_LAYER 2 +#define DEVIL_TOTAL_LAYERS 2 + + +/mob/living/carbon/true_devil + name = "True Devil" + desc = "A pile of infernal energy, taking a vaguely humanoid form." + icon = 'icons/mob/32x64.dmi' + icon_state = "true_devil" + gender = NEUTER + health = 350 + maxHealth = 350 + ventcrawler = 0 + density = 0 + pass_flags = 0 + var/ascended = 0 + sight = (SEE_TURFS | SEE_OBJS) + status_flags = CANPUSH + languages = ALL //The devil speaks all languages meme + mob_size = MOB_SIZE_LARGE + var/mob/living/oldform + var/list/devil_overlays[DEVIL_TOTAL_LAYERS] + +/mob/living/carbon/true_devil/New() + internal_organs += new /obj/item/organ/brain/ + internal_organs += new /obj/item/organ/tongue + for(var/X in internal_organs) + var/obj/item/organ/I = X + I.Insert(src) + ..() + + +/mob/living/carbon/true_devil/proc/convert_to_archdevil() + maxHealth = 5000 // not an IMPOSSIBLE amount, but still near impossible. + ascended = 1 + health = maxHealth + icon_state = "arch_devil" + +/mob/living/carbon/true_devil/proc/set_name() + name = mind.devilinfo.truename + real_name = name + +/mob/living/carbon/true_devil/Login() + ..() + mind.announceDevilLaws() + + +/mob/living/carbon/true_devil/death(gibbed) + stat = DEAD + ..(gibbed) + drop_l_hand() + drop_r_hand() + spawn (0) + mind.devilinfo.beginResurrectionCheck(src) + + +/mob/living/carbon/true_devil/examine(mob/user) + var/msg = "*---------*\nThis is \icon[src] [src]!\n" + + //Left hand items + if(l_hand && !(l_hand.flags&ABSTRACT)) + if(l_hand.blood_DNA) + msg += "It is holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] blood-stained [l_hand.name] in its left hand!\n" + else + msg += "It is holding \icon[l_hand] \a [l_hand] in its left hand.\n" + + //Right hand items + if(r_hand && !(r_hand.flags&ABSTRACT)) + if(r_hand.blood_DNA) + msg += "It is holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] blood-stained [r_hand.name] in its right hand!\n" + else + msg += "It is holding \icon[r_hand] \a [r_hand] in its right hand.\n" + + //Braindead + if(!client && stat != DEAD) + msg += "The devil seems to be in deep contemplation.\n" + + //Damaged + if(stat == DEAD) + msg += "The hellfire seems to have been extinguished, for now at least.\n" + else if(health < (maxHealth/10)) + msg += "You can see hellfire inside of it's gaping wounds.\n" + else if(health < (maxHealth/2)) + msg += "You can see hellfire inside of it's wounds.\n" + msg += "*---------*" + user << msg + + +/mob/living/carbon/true_devil/IsAdvancedToolUser() + return 1 + + +/mob/living/carbon/true_devil/canUseTopic() + if(stat) + return + return 1 + + +/mob/living/carbon/true_devil/assess_threat() + return 666 + +/mob/living/carbon/true_devil/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) + if(mind && mind.devilinfo.bane == BANE_LIGHT) + if(has_bane(BANE_LIGHT)) + mind.disrupt_spells(-500) + return ..() //flashes don't stop devils UNLESS it's their bane. + + +/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) + var/weakness = check_weakness(I, user) + apply_damage(I.force * weakness, I.damtype, def_zone) + var/message_verb = "" + if(I.attack_verb && I.attack_verb.len) + message_verb = "[pick(I.attack_verb)]" + else if(I.force) + message_verb = "attacked" + + var/attack_message = "[src] has been [message_verb] with [I]." + if(user) + user.do_attack_animation(src) + if(user in viewers(src, null)) + attack_message = "[user] has [message_verb] [src] with [I]!" + if(message_verb) + visible_message("[attack_message]", + "[attack_message]") + +/mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity) + A.attack_hand(src) + +/mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0) + return 1 + +/mob/living/carbon/true_devil/ex_act(severity) + if(ascended) + return 0 + return ..() + +/mob/living/carbon/true_devil/singularity_act() + if(ascended) + return 0 + return ..() + +/mob/living/carbon/true_devil/attack_ghost(mob/dead/observer/user as mob) + if(ascended || user.mind.soulOwner == src.mind) + var/mob/living/simple_animal/imp/S = new(get_turf(loc)) + S.key = user.key + S.mind.assigned_role = "Imp" + S.mind.special_role = "Imp" + var/datum/objective/newobjective = new + newobjective.explanation_text = "Try to get a promotion to a higher devilic rank." + S.mind.objectives += newobjective + S << S.playstyle_string + S << "Objective #[1]: [newobjective.explanation_text]" + return + else + return ..() + +/mob/living/carbon/true_devil/can_be_revived() + return 1 + +/mob/living/carbon/true_devil/resist_fire() + //They're immune to fire. + +/mob/living/carbon/true_devil/attack_hand(mob/living/carbon/human/M) + if(..()) + switch(M.a_intent) + if ("harm") + var/damage = rand(1, 5) + playsound(loc, "punch", 25, 1, -1) + visible_message("[M] has punched [src]!", \ + "[M] has punched [src]!") + adjustBruteLoss(damage) + add_logs(M, src, "attacked") + updatehealth() + if ("disarm") + if (!lying && !ascended) //No stealing the arch devil's pitchfork. + if (prob(5)) + Paralyse(2) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + add_logs(M, src, "pushed") + visible_message("[M] has pushed down [src]!", \ + "[M] has pushed down [src]!") + else + if (prob(25)) + drop_item() + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + visible_message("[M] has disarmed [src]!", \ + "[M] has disarmed [src]!") + else + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message("[M] has attempted to disarm [src]!") + +/mob/living/carbon/true_devil/handle_breathing() + // devils do not need to breathe diff --git a/code/game/gamemodes/demon/true_demon/inventory.dm b/code/game/gamemodes/demon/true_demon/inventory.dm new file mode 100644 index 00000000000..23035370135 --- /dev/null +++ b/code/game/gamemodes/demon/true_demon/inventory.dm @@ -0,0 +1,61 @@ +/mob/living/carbon/true_devil/unEquip(obj/item/I, force) + if(..(I,force)) + update_inv_hands() + return 1 + return 0 + +/mob/living/carbon/true_devil/proc/update_inv_hands() + //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_image should use the down sprite when facing down, left, or right, and the up sprite when facing up. + remove_overlay(DEVIL_HANDS_LAYER) + var/list/hands_overlays = list() + + if(r_hand) + + var/r_state = r_hand.item_state + if(!r_state) + r_state = r_hand.icon_state + + var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + + hands_overlays += r_hand_image + + if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) + r_hand.layer = 20 + r_hand.screen_loc = ui_rhand + client.screen |= r_hand + + if(l_hand) + + var/l_state = l_hand.item_state + if(!l_state) + l_state = l_hand.icon_state + + var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + + hands_overlays += l_hand_image + + if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) + l_hand.layer = 20 + l_hand.screen_loc = ui_lhand + client.screen |= l_hand + if(hands_overlays.len) + devil_overlays[DEVIL_HANDS_LAYER] = hands_overlays + apply_overlay(DEVIL_HANDS_LAYER) + +/mob/living/carbon/true_devil/update_inv_l_hand() + update_inv_hands() + + +/mob/living/carbon/true_devil/update_inv_r_hand() + update_inv_hands() + +/mob/living/carbon/true_devil/remove_overlay(cache_index) + if(devil_overlays[cache_index]) + overlays -= devil_overlays[cache_index] + devil_overlays[cache_index] = null + + +/mob/living/carbon/true_devil/apply_overlay(cache_index) + var/image/I = devil_overlays[cache_index] + if(I) + overlays += I \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 03d896d0e1d..b0509ca1b28 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -1,24 +1,45 @@ ////Deactivated swarmer shell//// -/obj/item/unactivated_swarmer +/obj/item/device/unactivated_swarmer name = "unactivated swarmer" desc = "A currently unactivated swarmer. Swarmers can self activate at any time, it would be wise to immediately dispose of this." icon = 'icons/mob/swarmer.dmi' icon_state = "swarmer_unactivated" + origin_tech = "bluespace=4;materials=4;programming=6" + materials = list(MAT_METAL=10000, MAT_GLASS=4000) -/obj/item/unactivated_swarmer/New() - notify_ghosts("An unactivated swarmer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, attack_not_jump = 1) + +/obj/item/device/unactivated_swarmer/New() + if(!crit_fail) + notify_ghosts("An unactivated swarmer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, attack_not_jump = 1) ..() -/obj/item/unactivated_swarmer/Topic(href, href_list) +/obj/item/device/unactivated_swarmer/Topic(href, href_list) if(href_list["ghostjoin"]) var/mob/dead/observer/ghost = usr if(istype(ghost)) attack_ghost(ghost) -/obj/item/unactivated_swarmer/attack_ghost(mob/user) +/obj/item/device/unactivated_swarmer/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/screwdriver) && !crit_fail) + user.visible_message("[usr.name] deactivates [src].", + "After some fiddling, you find a way to disable [src]'s power source.", + "You hear clicking.") + name = "deactivated swarmer" + desc = "A shell of swarmer that was completely powered down. It no longer can activate itself." + crit_fail = 1 + +/obj/item/device/unactivated_swarmer/attack_ghost(mob/user) + if(crit_fail) + user << "This swarmer shell is completely depowered. You cannot activate it." + return + var/be_swarmer = alert("Become a swarmer? (Warning, You can no longer be cloned!)",,"Yes","No") if(be_swarmer == "No") return + if(crit_fail) + user << "Swarmer has been depowered." + return if(qdeleted(src)) user << "Swarmer has been occupied by someone else." return @@ -26,6 +47,13 @@ S.key = user.key qdel(src) + +/obj/item/device/unactivated_swarmer/deactivated + name = "deactivated swarmer" + desc = "A shell of swarmer that was completely powered down. It no longer can activate itself." + crit_fail = 1 + + ////The Mob itself//// /mob/living/simple_animal/hostile/swarmer @@ -494,7 +522,7 @@ src << "This is not a suitable location for replicating ourselves. We need more room." return if(do_mob(src, src, 100)) - if(Fabricate(/obj/item/unactivated_swarmer, 50)) + if(Fabricate(/obj/item/device/unactivated_swarmer, 50)) playsound(loc,'sound/items/poster_being_created.ogg',50, 1, -1) /mob/living/simple_animal/hostile/swarmer/proc/RepairSelf() diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm index ce74d37a293..364a74aeb0c 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm @@ -15,7 +15,7 @@ return 0 if(!the_gateway) return 0 - new /obj/item/unactivated_swarmer(get_turf(the_gateway)) + new /obj/item/device/unactivated_swarmer(get_turf(the_gateway)) if(prob(25)) //25% chance to announce it to the crew var/swarmer_report = "[command_name()] High-Priority Update" swarmer_report += "

Our long-range sensors have detected an odd signal emanating from your station's gateway. We recommend immediate investigation of your gateway, as something may have come \ diff --git a/code/game/gamemodes/miniantags/sintouched/objectives.dm b/code/game/gamemodes/miniantags/sintouched/objectives.dm new file mode 100644 index 00000000000..86572782ca8 --- /dev/null +++ b/code/game/gamemodes/miniantags/sintouched/objectives.dm @@ -0,0 +1,35 @@ +/datum/objective/sintouched + dangerrating = 5 + completed = 1 + +/* NO ERP OBJECTIVE FOR YOU. +/datum/objective/sintouched/lust + dangerrating = 3 // it's not AS dangerous. + +/datum/objective/sintouched/lust/New() + var/mob/dead/D = pick(dead_mob_list) + if(prob(50) && D) + explanation_text = "You know that [D] has perished.... and you think [D] is kinda cute. Make sure everyone knows how HOT [D]'s lifeless body is." + else + explanation_text = "Go get married, then immediately cheat on your new spouse." */ + +/datum/objective/sintouched/gluttony + explanation_text = "Everything is so delicious. Go eat everything." + +/datum/objective/sintouched/greed + explanation_text = "You want MORE, more money, more wealth, more riches. Go get it, but don't hurt people for it." + +/datum/objective/sintouched/sloth + explanation_text = "You just get tired randomly. Go take a nap at a time that would inconvenience other people." + +/datum/objective/sintouched/wrath + explanation_text = "What have your coworkers ever done for you? Don't offer to help them in any matter, and refuse if asked." + +/datum/objective/sintouched/envy + explanation_text = "Why should you be stuck with your rank? Show everyone you can do other jobs too, and don't let anyone stop you, least of all because you have no training" + +/datum/objective/sintouched/pride + explanation_text = "You are the BEST thing on the station. Make sure everyone knows it." + +/datum/objective/sintouched/acedia + explanation_text = "Angels, devils, good, evil... who cares? Just ignore any hellish threats and do your job." \ No newline at end of file diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 68cc017cfd3..253c17eeeb0 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -25,16 +25,20 @@ /obj/machinery/sleeper/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/weapon/circuitboard/sleeper(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/sleeper(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/sleeper + name = "circuit board (Sleeper)" + build_path = /obj/machinery/sleeper + origin_tech = "programming=3;biotech=2;engineering=3;materials=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 2) + /obj/machinery/sleeper/RefreshParts() var/E for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) @@ -186,4 +190,4 @@ /obj/machinery/sleeper/old - icon_state = "oldpod" + icon_state = "oldpod" diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 393f2f4f600..529e77bf55a 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -32,14 +32,19 @@ var/list/announcement_systems = list() announcement_systems += src radio = new /obj/item/device/radio/headset/ai(src) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/announcement_system(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/announcement_system(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/announcement_system + name = "circuit board (Announcement System)" + build_path = /obj/machinery/announcement_system + origin_tech = "programming=3;bluespace=2" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/machinery/announcement_system/update_icon() if(is_operational()) icon_state = (panel_open ? "AAS_On_Open" : "AAS_On") @@ -178,4 +183,4 @@ var/list/announcement_systems = list() /obj/machinery/announcement_system/emag_act() if(!emagged) emagged = 1 - act_up() + act_up() \ No newline at end of file diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 5e03d4b9dc3..4014ad407ec 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -47,20 +47,23 @@ /obj/machinery/autolathe/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/autolathe(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1)) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/autolathe(null) + B.apply_default_parts(src) wires = new /datum/wires/autolathe(src) files = new /datum/research/autolathe(src) matching_designs = list() +/obj/item/weapon/circuitboard/machine/autolathe + name = "circuit board (Autolathe)" + build_path = /obj/machinery/autolathe + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 3, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/machinery/autolathe/Destroy() qdel(wires) wires = null diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 604fb26bed0..ddbdcfa4e09 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -25,16 +25,8 @@ /obj/machinery/clonepod/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonepod(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/clonepod(null) + B.apply_default_parts(src) /obj/machinery/clonepod/RefreshParts() speed_coeff = 0 @@ -47,6 +39,16 @@ if(heal_level > 100) heal_level = 100 +/obj/item/weapon/circuitboard/machine/clonepod + name = "circuit board (Clone Pod)" + build_path = /obj/machinery/clonepod + origin_tech = "programming=3;biotech=3" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/scanning_module = 2, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/console_screen = 1) + //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. /obj/item/weapon/disk/data @@ -201,7 +203,7 @@ return if((src.occupant) && (src.occupant.loc == src)) - if((src.occupant.stat == DEAD) || (src.occupant.suiciding) || !occupant.key) //Autoeject corpses and suiciding dudes. + if((src.occupant.stat == DEAD) || (src.occupant.suiciding) || !occupant.key || src.occupant.hellbound) //Autoeject corpses and suiciding dudes. src.locked = 0 src.go_out() src.connected_message("Clone Rejected: Deceased.") diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index ea7a6a1c704..0989ee50a59 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -3,7 +3,7 @@ desc = "Used to monitor the vitals of a patient during surgery." icon_screen = "crew" icon_keyboard = "med_key" - circuit = /obj/item/weapon/circuitboard/operating + circuit = /obj/item/weapon/circuitboard/computer/operating var/mob/living/carbon/human/patient = null var/obj/structure/table/optable/table = null diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 69c53cf517b..962fb705408 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -4,7 +4,7 @@ req_access = list(access_captain, access_robotics, access_heads) var/mob/living/silicon/ai/occupier = null var/active = 0 - circuit = /obj/item/weapon/circuitboard/aifixer + circuit = /obj/item/weapon/circuitboard/computer/aifixer icon_keyboard = "tech_key" icon_screen = "ai-fixer" diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 9c036f6cbf0..253a3c1c8d7 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,1114 +1,1115 @@ -/obj/machinery/computer/arcade/ - name = "random arcade" - desc = "random arcade machine" - icon_state = "arcade" - icon_keyboard = null - icon_screen = "invaders" - var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, - /obj/item/toy/AI = 2, - /obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/toy/sword = 2, - /obj/item/toy/gun = 2, - /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, - /obj/item/weapon/storage/box/fakesyndiesuit = 2, - /obj/item/weapon/storage/crayons = 2, - /obj/item/toy/spinningtoy = 2, - /obj/item/toy/prize/ripley = 1, - /obj/item/toy/prize/fireripley = 1, - /obj/item/toy/prize/deathripley = 1, - /obj/item/toy/prize/gygax = 1, - /obj/item/toy/prize/durand = 1, - /obj/item/toy/prize/honk = 1, - /obj/item/toy/prize/marauder = 1, - /obj/item/toy/prize/seraph = 1, - /obj/item/toy/prize/mauler = 1, - /obj/item/toy/prize/odysseus = 1, - /obj/item/toy/prize/phazon = 1, - /obj/item/toy/prize/reticence = 1, - /obj/item/toy/cards/deck = 2, - /obj/item/toy/nuke = 2, - /obj/item/toy/minimeteor = 2, - /obj/item/toy/carpplushie = 2, - /obj/item/toy/foamblade = 2, - /obj/item/toy/redbutton = 2, - /obj/item/toy/talking/owl = 2, - /obj/item/toy/talking/griffin = 2, - /obj/item/weapon/coin/antagtoken = 2, - /obj/item/stack/tile/fakespace/loaded = 2, - /obj/item/toy/toy_xeno = 2, - /obj/item/weapon/restraints/handcuffs/fake = 2 - ) - -/obj/machinery/computer/arcade/New() - ..() - // If it's a generic arcade machine, pick a random arcade - // circuit board for it and make the new machine - if(!circuit) - var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/arcade)) - var/obj/item/weapon/circuitboard/CB = new choice() - new CB.build_path(loc, CB) - qdel(src) - -/obj/machinery/computer/arcade/proc/prizevend() - if(prob(0.0001)) //1 in a million - new /obj/item/weapon/gun/energy/pulse(src) - - if(!contents.len) - var/prizeselect = pickweight(prizes) - new prizeselect(src.loc) - - if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun - new /obj/item/toy/ammo/gun(src.loc) - - else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit - new /obj/item/clothing/head/syndicatefake(src.loc) - - else - var/atom/movable/prize = pick(contents) - prize.loc = src.loc - -/obj/machinery/computer/arcade/emp_act(severity) - ..(severity) - - if(stat & (NOPOWER|BROKEN)) - return - - var/empprize = null - var/num_of_prizes = 0 - switch(severity) - if(1) - num_of_prizes = rand(1,4) - if(2) - num_of_prizes = rand(0,2) - for(var/i = num_of_prizes; i > 0; i--) - empprize = pickweight(prizes) - new empprize(src.loc) - explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) - - -// ** BATTLE ** // - - -/obj/machinery/computer/arcade/battle - name = "arcade machine" - desc = "Does not support Pinball." - icon_state = "arcade" - circuit = /obj/item/weapon/circuitboard/arcade/battle - var/enemy_name = "Space Villian" - var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points - var/player_mp = 10 - var/enemy_hp = 45 //Enemy health/attack points - var/enemy_mp = 20 - var/gameover = 0 - var/blocked = 0 //Player cannot attack/heal while set - var/turtle = 0 - -/obj/machinery/computer/arcade/battle/New() - ..() - var/name_action - var/name_part1 - var/name_part2 - - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") - - name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") - - src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") - src.name = (name_action + name_part1 + name_part2) - -/obj/machinery/computer/arcade/battle/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) - var/dat = "Close" - dat += "

[src.enemy_name]

" - - dat += "

[src.temp]

" - dat += "
Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]
" - - if (src.gameover) - dat += "
New Game" - else - dat += "
Attack | " - dat += "Heal | " - dat += "Recharge Power" - - dat += "
" - - //user << browse(dat, "window=arcade") - //onclose(user, "arcade") - var/datum/browser/popup = new(user, "arcade", "Space Villian 2000") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/arcade/battle/Topic(href, href_list) - if(..()) - return - - if (!src.blocked && !src.gameover) - if (href_list["attack"]) - src.blocked = 1 - var/attackamt = rand(2,6) - src.temp = "You attack for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) - src.updateUsrDialog() - if(turtle > 0) - turtle-- - - sleep(10) - src.enemy_hp -= attackamt - src.arcade_action() - - else if (href_list["heal"]) - src.blocked = 1 - var/pointamt = rand(1,3) - var/healamt = rand(6,8) - src.temp = "You use [pointamt] magic to heal for [healamt] damage!" - playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.updateUsrDialog() - turtle++ - - sleep(10) - src.player_mp -= pointamt - src.player_hp += healamt - src.blocked = 1 - src.updateUsrDialog() - src.arcade_action() - - else if (href_list["charge"]) - src.blocked = 1 - var/chargeamt = rand(4,7) - src.temp = "You regain [chargeamt] points" - playsound(src.loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_mp += chargeamt - if(turtle > 0) - turtle-- - - src.updateUsrDialog() - sleep(10) - src.arcade_action() - - if (href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - else if (href_list["newgame"]) //Reset everything - temp = "New Round" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - turtle = 0 - - if(emagged) - src.New() - emagged = 0 - - src.add_fingerprint(usr) - src.updateUsrDialog() - return - -/obj/machinery/computer/arcade/battle/proc/arcade_action() - if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) - if(!gameover) - src.gameover = 1 - src.temp = "[src.enemy_name] has fallen! Rejoice!" - playsound(src.loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10) - - if(emagged) - feedback_inc("arcade_win_emagged") - new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) - new /obj/item/clothing/head/collectable/petehat(src.loc) - message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") - log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") - src.New() - emagged = 0 - else - feedback_inc("arcade_win_normal") - prizevend() - - else if (emagged && (turtle >= 4)) - var/boomamt = rand(5,10) - src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!" - playsound(src.loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_hp -= boomamt - - else if ((src.enemy_mp <= 5) && (prob(70))) - var/stealamt = rand(2,3) - src.temp = "[src.enemy_name] steals [stealamt] of your power!" - playsound(src.loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_mp -= stealamt - src.updateUsrDialog() - - if (src.player_mp <= 0) - src.gameover = 1 - sleep(10) - src.temp = "You have been drained! GAME OVER" - playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(emagged) - feedback_inc("arcade_loss_mana_emagged") - usr.gib() - else - feedback_inc("arcade_loss_mana_normal") - - else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4)) - src.temp = "[src.enemy_name] heals for 4 health!" - playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.enemy_hp += 4 - src.enemy_mp -= 4 - - else - var/attackamt = rand(3,6) - src.temp = "[src.enemy_name] attacks for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_hp -= attackamt - - if ((src.player_mp <= 0) || (src.player_hp <= 0)) - src.gameover = 1 - src.temp = "You have been crushed! GAME OVER" - playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(emagged) - feedback_inc("arcade_loss_hp_emagged") - usr.gib() - else - feedback_inc("arcade_loss_hp_normal") - - src.blocked = 0 - return - - -/obj/machinery/computer/arcade/battle/emag_act(mob/user) - if(!emagged) - temp = "If you die in the game, you die for real!" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - blocked = 0 - - emagged = 1 - - enemy_name = "Cuban Pete" - name = "Outbomb Cuban Pete" - - - src.updateUsrDialog() - - - -// *** THE ORION TRAIL ** // - -#define ORION_TRAIL_WINTURN 9 - -//Orion Trail Events -#define ORION_TRAIL_RAIDERS "Raiders" -#define ORION_TRAIL_FLUX "Interstellar Flux" -#define ORION_TRAIL_ILLNESS "Illness" -#define ORION_TRAIL_BREAKDOWN "Breakdown" -#define ORION_TRAIL_LING "Changelings?" -#define ORION_TRAIL_LING_ATTACK "Changeling Ambush" -#define ORION_TRAIL_MALFUNCTION "Malfunction" -#define ORION_TRAIL_COLLISION "Collision" -#define ORION_TRAIL_SPACEPORT "Spaceport" -#define ORION_TRAIL_BLACKHOLE "BlackHole" - -#define ORION_STATUS_START 1 -#define ORION_STATUS_NORMAL 2 -#define ORION_STATUS_GAMEOVER 3 -#define ORION_STATUS_MARKET 4 - -/obj/machinery/computer/arcade/orion_trail - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - icon_state = "arcade" - circuit = /obj/item/weapon/circuitboard/arcade/orion_trail - var/busy = 0 //prevent clickspam that allowed people to ~speedrun~ the game. - var/engine = 0 - var/hull = 0 - var/electronics = 0 - var/food = 80 - var/fuel = 60 - var/turns = 4 - var/alive = 4 - var/eventdat = null - var/event = null - var/list/settlers = list("Harry","Larry","Bob") - var/list/events = list(ORION_TRAIL_RAIDERS = 3, - ORION_TRAIL_FLUX = 1, - ORION_TRAIL_ILLNESS = 3, - ORION_TRAIL_BREAKDOWN = 2, - ORION_TRAIL_LING = 3, - ORION_TRAIL_MALFUNCTION = 2, - ORION_TRAIL_COLLISION = 1, - ORION_TRAIL_SPACEPORT = 2 - ) - var/list/stops = list() - var/list/stopblurbs = list() - var/lings_aboard = 0 - var/spaceport_raided = 0 - var/spaceport_freebie = 0 - var/last_spaceport_action = "" - var/gameStatus = ORION_STATUS_START - var/canContinueEvent = 0 - -/obj/machinery/computer/arcade/orion_trail/New() - ..() - // Sets up the main trail - stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") - stopblurbs = list( - "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", - "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", - "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", - "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", - "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", - "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", - "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", - "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", - "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" - ) - -/obj/machinery/computer/arcade/orion_trail/proc/newgame() - // Set names of settlers in crew - settlers = list() - for(var/i = 1; i <= 3; i++) - add_crewmember() - add_crewmember("[usr]") - // Re-set items to defaults - engine = 1 - hull = 1 - electronics = 1 - food = 80 - fuel = 60 - alive = 4 - turns = 1 - event = null - gameStatus = ORION_STATUS_NORMAL - lings_aboard = 0 - - //spaceport junk - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - -/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) - if(..()) - return - if(fuel <= 0 || food <=0 || settlers.len == 0) - gameStatus = ORION_STATUS_GAMEOVER - event = null - user.set_machine(src) - var/dat = "" - if(gameStatus == ORION_STATUS_GAMEOVER) - dat = "

Game Over

" - dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." - if(settlers.len == 0) - dat += "
Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy." - else - if(food <= 0) - dat += "
You ran out of food and starved." - if(emagged) - user.nutrition = 0 //yeah you pretty hongry - user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." - if(fuel <= 0) - dat += "
You ran out of fuel, and drift, slowly, into a star." - if(emagged) - var/mob/living/M = user - M.adjust_fire_stacks(5) - M.IgniteMob() //flew into a star, so you're on fire - user << "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames." - dat += "

OK...

" - - if(emagged) - user << "You're never going to make it to Orion..." - user.death() - emagged = 0 //removes the emagged status after you lose - gameStatus = ORION_STATUS_START - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - - else if(event) - dat = eventdat - else if(gameStatus == ORION_STATUS_NORMAL) - var/title = stops[turns] - var/subtext = stopblurbs[turns] - dat = "

[title]

" - dat += "[subtext]" - dat += "

Crew:

" - dat += english_list(settlers) - dat += "
Food: [food] | Fuel: [fuel]" - dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - if(turns == 7) - dat += "

Go Around Continue

" - else - dat += "

Continue

" - dat += "

Kill a crewmember

" - dat += "

Close

" - else - dat = "

The Orion Trail

" - dat += "

Experience the journey of your ancestors!



" - dat += "
New Game
" - dat += "

Close

" - var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) - if(..()) - return - if(href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - if(busy) - return - busy = 1 - - if (href_list["continue"]) //Continue your travels - if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) - if(turns >= ORION_TRAIL_WINTURN) - win() - else - food -= (alive+lings_aboard)*2 - fuel -= 5 - if(turns == 2 && prob(30)) - event = ORION_TRAIL_COLLISION - event() - else if(prob(75)) - event = pickweight(events) - if(lings_aboard) - if(event == ORION_TRAIL_LING || prob(55)) - event = ORION_TRAIL_LING_ATTACK - event() - turns += 1 - if(emagged) - var/mob/living/carbon/M = usr //for some vars - switch(event) - if(ORION_TRAIL_RAIDERS) - if(prob(50)) - usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?" - M.hallucination += 30 - else - usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..." - M.take_organ_damage(30) - playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1) - if(ORION_TRAIL_ILLNESS) - var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS - if(severity == 1) - M << "You suddenly feel slightly nauseous." //got off lucky - if(severity == 2) - usr << "You suddenly feel extremely nauseous and hunch over until it passes." - M.Stun(3) - if(severity >= 3) //you didn't pray hard enough - M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit." - M.Stun(5) - sleep(30) - M.vomit(50) - if(ORION_TRAIL_FLUX) - if(prob(75)) - M.Weaken(3) - say("A sudden gust of powerful wind slams [M] into the floor!") - M.take_organ_damage(25) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - else - M << "A violent gale blows past you, and you barely manage to stay standing!" - if(ORION_TRAIL_COLLISION) //by far the most damaging event - if(prob(90)) - playsound(src.loc, 'sound/effects/bang.ogg', 100, 1) - var/turf/open/floor/F - for(F in orange(1, src)) - F.ChangeTurf(F.baseturf) - say("Something slams into the floor around [src], exposing it to space!") - if(hull) - sleep(10) - say("A new floor suddenly appears around [src]. What the hell?") - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - var/turf/open/space/T - for(T in orange(1, src)) - T.ChangeTurf(/turf/open/floor/plating/) - else - say("Something slams into the floor around [src] - luckily, it didn't get through!") - playsound(src.loc, 'sound/effects/bang.ogg', 50, 1) - if(ORION_TRAIL_MALFUNCTION) - playsound(src.loc, 'sound/effects/EMPulse.ogg', 50, 1) - src.visible_message("[src] malfunctions, randomizing in-game stats!") - var/oldfood = food - var/oldfuel = fuel - food = rand(10,80) / rand(1,2) - fuel = rand(10,60) / rand(1,2) - if(electronics) - sleep(10) - if(oldfuel > fuel && oldfood > food) - src.audible_message("[src] lets out a somehow reassuring chime.") - else if(oldfuel < fuel || oldfood < food) - src.audible_message("[src] lets out a somehow ominous chime.") - food = oldfood - fuel = oldfuel - playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) - - else if(href_list["newgame"]) //Reset everything - if(gameStatus == ORION_STATUS_START) - newgame() - else if(href_list["menu"]) //back to the main menu - if(gameStatus == ORION_STATUS_GAMEOVER) - gameStatus = ORION_STATUS_START - event = null - food = 80 - fuel = 60 - settlers = list("Harry","Larry","Bob") - else if(href_list["slow"]) //slow down - if(event == ORION_TRAIL_FLUX) - food -= (alive+lings_aboard)*2 - fuel -= 5 - event = null - else if(href_list["pastblack"]) //slow down - if(turns == 7) - food -= ((alive+lings_aboard)*2)*3 - fuel -= 15 - turns += 1 - event = null - else if(href_list["useengine"]) //use parts - if(event == ORION_TRAIL_BREAKDOWN) - engine = max(0, --engine) - event = null - else if(href_list["useelec"]) //use parts - if(event == ORION_TRAIL_MALFUNCTION) - electronics = max(0, --electronics) - event = null - else if(href_list["usehull"]) //use parts - if(event == ORION_TRAIL_COLLISION) - hull = max(0, --hull) - event = null - else if(href_list["wait"]) //wait 3 days - if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) - food -= ((alive+lings_aboard)*2)*3 - event = null - else if(href_list["keepspeed"]) //keep speed - if(event == ORION_TRAIL_FLUX) - if(prob(75)) - event = "Breakdown" - event() - else - event = null - else if(href_list["blackhole"]) //keep speed past a black hole - if(turns == 7) - if(prob(75)) - event = ORION_TRAIL_BLACKHOLE - event() - if(emagged) //has to be here because otherwise it doesn't work - playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1) - say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") - usr.Stun(10) //you can't run :^) - var/S = new /obj/singularity/academy(usr.loc) - emagged = 0 //immediately removes emagged status so people can't kill themselves by sprinting up and interacting - sleep(50) - say("[S] winks out, just as suddenly as it appeared.") - qdel(S) - else - event = null - turns += 1 - else if(href_list["holedeath"]) - if(event == ORION_TRAIL_BLACKHOLE) - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(href_list["eventclose"]) //end an event - if(canContinueEvent) - event = null - - else if(href_list["killcrew"]) //shoot a crewmember - if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_LING) - var/sheriff = remove_crewmember() //I shot the sheriff - playsound(loc,'sound/weapons/Gunshot.ogg', 100, 1) - - if(settlers.len == 0 || alive == 0) - say("The last crewmember [sheriff], shot themselves, GAME OVER!") - if(emagged) - usr.death(0) - emagged = 0 - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(emagged) - if(usr.name == sheriff) - say("The crew of the ship chose to kill [usr.name]!") - usr.death(0) - - if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places - event = null - - //Spaceport specific interactions - //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) - //they also call event() again, to regen the eventdata, which is kind of odd but necessary - else if(href_list["buycrew"]) //buy a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && food >= 10 && fuel >= 10) - var/bought = add_crewmember() - last_spaceport_action = "You hired [bought] as a new crewmember." - fuel -= 10 - food -= 10 - event() - - else if(href_list["sellcrew"]) //sell a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && settlers.len > 1) - var/sold = remove_crewmember() - last_spaceport_action = "You sold your crewmember, [sold]!" - fuel += 7 - food += 7 - event() - - else if(href_list["leave_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - event = null - gameStatus = ORION_STATUS_NORMAL - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - - else if(href_list["raid_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - var/success = min(15 * alive,100) //default crew (4) have a 60% chance - spaceport_raided = 1 - - var/FU = 0 - var/FO = 0 - if(prob(success)) - FU = rand(5,15) - FO = rand(5,15) - last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" - else - FU = rand(-5,-15) - FO = rand(-5,-15) - last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" - - //your chance of lose a crewmember is 1/2 your chance of success - //this makes higher % failures hurt more, don't get cocky space cowboy! - if(prob(success*5)) - var/lost_crew = remove_crewmember() - last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" - if(emagged) - say("WEEWOO WEEWOO, Spaceport Security en route!") - for(var/i, i<=3, i++) - var/mob/living/simple_animal/hostile/syndicate/ranged/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/orion(get_turf(src)) - O.target = usr - - - fuel += FU - food += FO - event() - - else if(href_list["buyparts"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && fuel > 5) - switch(text2num(href_list["buyparts"])) - if(1) //Engine Parts - engine++ - last_spaceport_action = "Bought Engine Parts" - if(2) //Hull Plates - hull++ - last_spaceport_action = "Bought Hull Plates" - if(3) //Spare Electronics - electronics++ - last_spaceport_action = "Bought Spare Electronics" - fuel -= 5 //they all cost 5 - event() - - else if(href_list["trade"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - switch(text2num(href_list["trade"])) - if(1) //Fuel - if(fuel > 5) - fuel -= 5 - food += 5 - last_spaceport_action = "Traded Fuel for Food" - event() - if(2) //Food - if(food > 5) - fuel += 5 - food -= 5 - last_spaceport_action = "Traded Food for Fuel" - event() - - src.add_fingerprint(usr) - src.updateUsrDialog() - busy = 0 - return - - -/obj/machinery/computer/arcade/orion_trail/proc/event() - eventdat = "

[event]

" - canContinueEvent = 0 - switch(event) - if(ORION_TRAIL_RAIDERS) - eventdat += "Raiders have come aboard your ship!" - if(prob(50)) - var/sfood = rand(1,10) - var/sfuel = rand(1,10) - food -= sfood - fuel -= sfuel - eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." - else if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] tried to fight back but was killed." - else - eventdat += "
Fortunately you fended them off without any trouble." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_FLUX) - eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." - eventdat += "
What will you do?" - eventdat += "

Slow Down Continue

" - eventdat += "

Close

" - - if(ORION_TRAIL_ILLNESS) - eventdat += "A deadly illness has been contracted!" - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by the disease." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_BREAKDOWN) - eventdat += "Oh no! The engine has broken down!" - eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days." - if(engine >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_MALFUNCTION) - eventdat += "The ship's systems are malfunctioning!" - eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." - if(electronics >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_COLLISION) - eventdat += "Something hit us! Looks like there's some hull damage." - if(prob(25)) - var/sfood = rand(5,15) - var/sfuel = rand(5,15) - food -= sfood - fuel -= sfuel - eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." - if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by rapid depressurization." - eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." - if(hull >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_BLACKHOLE) - eventdat += "You were swept away into the black hole." - eventdat += "

Oh...

" - eventdat += "

Close

" - settlers = list() - - if(ORION_TRAIL_LING) - eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." - if(settlers.len <= 2) - eventdat += "
Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." - eventdat += "

Continue

" - eventdat += "

Close

" - if(prob(10)) // "likely", I didn't say it was guaranteed! - lings_aboard = min(++lings_aboard,2) - else - if(lings_aboard) //less likely to stack lings - if(prob(20)) - lings_aboard = min(++lings_aboard,2) - else if(prob(70)) - lings_aboard = min(++lings_aboard,2) - - eventdat += "

Kill a crewmember

" - eventdat += "

Risk it

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_LING_ATTACK) - if(lings_aboard <= 0) //shouldn't trigger, but hey. - eventdat += "Haha, fooled you, there are no changelings on board!" - eventdat += "
(You should report this to a coder :S)" - else - var/ling1 = remove_crewmember() - var/ling2 = "" - if(lings_aboard >= 2) - ling2 = remove_crewmember() - - eventdat += "Oh no, some of your crew are Changelings!" - if(ling2) - eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" - else - eventdat += "
[ling1]'s arm twists and contorts into a grotesque blade!" - - var/chance2attack = alive*20 - if(prob(chance2attack)) - var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance - if(prob(chancetokill)) - var/deadguy = remove_crewmember() - eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] up to [deadguy] and capitulates them!" - else - eventdat += "
You valiantly fight off the Changeling[ling2 ? "s":""]!" - eventdat += "
You cut the Changeling[ling2 ? "s":""] up into meat... Eww" - if(ling2) - food += 30 - lings_aboard = max(0,lings_aboard-2) - else - food += 15 - lings_aboard = max(0,--lings_aboard) - else - eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] away, What wimps!" - if(ling2) - lings_aboard = max(0,lings_aboard-2) - else - lings_aboard = max(0,--lings_aboard) - - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - - if(ORION_TRAIL_SPACEPORT) - gameStatus = ORION_STATUS_MARKET - if(spaceport_raided) - eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!" - if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" - eventdat += "

Depart Spaceport

" - eventdat += "

Close

" - else - eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!" - eventdat += "
This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." - eventdat += "
Trading terms: FU = Fuel, FO = Food" - if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" - eventdat += "

Crew:

" - eventdat += english_list(settlers) - eventdat += "
Food: [food] | Fuel: [fuel]" - eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - - - //If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port) - if(!spaceport_freebie && (fuel < 20 || food < 20)) - spaceport_freebie++ - var/FU = 10 - var/FO = 10 - var/freecrew = 0 - if(prob(30)) - FU = 25 - FO = 25 - - if(prob(10)) - add_crewmember() - freecrew++ - - eventdat += "
The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)" - if(freecrew) - eventdat += "
You also gain a new crewmember!" - - fuel += FU - food += FO - - //CREW INTERACTIONS - eventdat += "

Crew Management:

" - - //Buy crew - if(food >= 10 && fuel >= 10) - eventdat += "

Hire a new Crewmember (-10FU,-10FO)

" - else - eventdat += "

Cant afford a new Crewmember

" - - //Sell crew - if(settlers.len > 1) - eventdat += "

Sell crew for Fuel and Food (+7FU,+7FO)

" - else - eventdat += "

Cant afford to sell a Crewmember

" - - //BUY/SELL STUFF - eventdat += "

Spare Parts:

" - - //Engine parts - if(fuel > 5) - eventdat += "

Buy Engine Parts (-5FU)

" - else - eventdat += "

Cant afford to buy Engine Parts" - - //Hull plates - if(fuel > 5) - eventdat += "

Buy Hull Plates (-5FU)

" - else - eventdat += "

Cant afford to buy Hull Plates" - - //Electronics - if(fuel > 5) - eventdat += "

Buy Spare Electronics (-5FU)

" - else - eventdat += "

Cant afford to buy Spare Electronics" - - //Trade - if(fuel > 5) - eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" - else - eventdat += "

Cant afford to Trade Fuel for Food 5) - eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" - else - eventdat += "

Cant afford to Trade Food for FuelYou override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." - name = "The Orion Trail: Realism Edition" - desc = "Learn how our ancestors got to Orion, and try not to die in the process!" - newgame() - emagged = 1 - -/mob/living/simple_animal/hostile/syndicate/ranged/orion - name = "Spaceport Security" - desc = "The Premier security forces for all spaceports found along the Orion Trail." - faction = list("orion") - loot = list(/obj/effect/mob_spawn/human/corpse/orionsecurity, - /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted, - /obj/item/weapon/shield/energy) - -/obj/effect/mob_spawn/human/corpse/orionsecurity - name = "Spaceport Security" - uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - radio = /obj/item/device/radio/headset - mask = /obj/item/clothing/mask/gas - helmet = /obj/item/clothing/head/helmet/swat - back = /obj/item/weapon/storage/backpack - has_id = 1 - id_job = "Officer" - id_access = "Syndicate" - -/obj/item/weapon/orion_ship - name = "model settler ship" - desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." - icon = 'icons/obj/toy.dmi' - icon_state = "ship" - w_class = 2 - var/active = 0 //if the ship is on - -/obj/item/weapon/orion_ship/examine(mob/user) - ..() - if(!(in_range(user, src))) - return - if(!active) - user << "There's a little switch on the bottom. It's flipped down." - else - user << "There's a little switch on the bottom. It's flipped up." - -/obj/item/weapon/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse - if(active) - return - - message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") - log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") - - user << "You flip the switch on the underside of [src]." - active = 1 - src.visible_message("[src] softly beeps and whirs to life!") - playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) - say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") - sleep(20) - src.visible_message("[src] begins to vibrate...") - say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") - sleep(30) - say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) - sleep(3.6) - src.visible_message("[src] explodes!") - explosion(src.loc, 2,4,8, flame_range = 16) - qdel(src) - - -#undef ORION_TRAIL_WINTURN -#undef ORION_TRAIL_RAIDERS -#undef ORION_TRAIL_FLUX -#undef ORION_TRAIL_ILLNESS -#undef ORION_TRAIL_BREAKDOWN -#undef ORION_TRAIL_LING -#undef ORION_TRAIL_LING_ATTACK -#undef ORION_TRAIL_MALFUNCTION -#undef ORION_TRAIL_COLLISION -#undef ORION_TRAIL_SPACEPORT -#undef ORION_TRAIL_BLACKHOLE - -#undef ORION_STATUS_START -#undef ORION_STATUS_NORMAL -#undef ORION_STATUS_GAMEOVER -#undef ORION_STATUS_MARKET +/obj/machinery/computer/arcade/ + name = "random arcade" + desc = "random arcade machine" + icon_state = "arcade" + icon_keyboard = null + icon_screen = "invaders" + var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, + /obj/item/toy/AI = 2, + /obj/item/toy/codex_gigas = 2, + /obj/item/clothing/under/syndicate/tacticool = 2, + /obj/item/toy/sword = 2, + /obj/item/toy/gun = 2, + /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, + /obj/item/weapon/storage/box/fakesyndiesuit = 2, + /obj/item/weapon/storage/crayons = 2, + /obj/item/toy/spinningtoy = 2, + /obj/item/toy/prize/ripley = 1, + /obj/item/toy/prize/fireripley = 1, + /obj/item/toy/prize/deathripley = 1, + /obj/item/toy/prize/gygax = 1, + /obj/item/toy/prize/durand = 1, + /obj/item/toy/prize/honk = 1, + /obj/item/toy/prize/marauder = 1, + /obj/item/toy/prize/seraph = 1, + /obj/item/toy/prize/mauler = 1, + /obj/item/toy/prize/odysseus = 1, + /obj/item/toy/prize/phazon = 1, + /obj/item/toy/prize/reticence = 1, + /obj/item/toy/cards/deck = 2, + /obj/item/toy/nuke = 2, + /obj/item/toy/minimeteor = 2, + /obj/item/toy/carpplushie = 2, + /obj/item/toy/foamblade = 2, + /obj/item/toy/redbutton = 2, + /obj/item/toy/talking/owl = 2, + /obj/item/toy/talking/griffin = 2, + /obj/item/weapon/coin/antagtoken = 2, + /obj/item/stack/tile/fakespace/loaded = 2, + /obj/item/toy/toy_xeno = 2, + /obj/item/weapon/restraints/handcuffs/fake = 2 + ) + +/obj/machinery/computer/arcade/New() + ..() + // If it's a generic arcade machine, pick a random arcade + // circuit board for it and make the new machine + if(!circuit) + var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/computer/arcade)) + var/obj/item/weapon/circuitboard/CB = new choice() + new CB.build_path(loc, CB) + qdel(src) + +/obj/machinery/computer/arcade/proc/prizevend() + if(prob(0.0001)) //1 in a million + new /obj/item/weapon/gun/energy/pulse(src) + + if(!contents.len) + var/prizeselect = pickweight(prizes) + new prizeselect(src.loc) + + if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun + new /obj/item/toy/ammo/gun(src.loc) + + else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit + new /obj/item/clothing/head/syndicatefake(src.loc) + + else + var/atom/movable/prize = pick(contents) + prize.loc = src.loc + +/obj/machinery/computer/arcade/emp_act(severity) + ..(severity) + + if(stat & (NOPOWER|BROKEN)) + return + + var/empprize = null + var/num_of_prizes = 0 + switch(severity) + if(1) + num_of_prizes = rand(1,4) + if(2) + num_of_prizes = rand(0,2) + for(var/i = num_of_prizes; i > 0; i--) + empprize = pickweight(prizes) + new empprize(src.loc) + explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) + + +// ** BATTLE ** // + + +/obj/machinery/computer/arcade/battle + name = "arcade machine" + desc = "Does not support Pinball." + icon_state = "arcade" + circuit = /obj/item/weapon/circuitboard/computer/arcade/battle + var/enemy_name = "Space Villian" + var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc + var/player_hp = 30 //Player health/attack points + var/player_mp = 10 + var/enemy_hp = 45 //Enemy health/attack points + var/enemy_mp = 20 + var/gameover = 0 + var/blocked = 0 //Player cannot attack/heal while set + var/turtle = 0 + +/obj/machinery/computer/arcade/battle/New() + ..() + var/name_action + var/name_part1 + var/name_part2 + + name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") + + name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") + name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") + + src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") + src.name = (name_action + name_part1 + name_part2) + +/obj/machinery/computer/arcade/battle/attack_hand(mob/user) + if(..()) + return + user.set_machine(src) + var/dat = "Close" + dat += "

[src.enemy_name]

" + + dat += "

[src.temp]

" + dat += "
Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]
" + + if (src.gameover) + dat += "
New Game" + else + dat += "
Attack | " + dat += "Heal | " + dat += "Recharge Power" + + dat += "
" + + //user << browse(dat, "window=arcade") + //onclose(user, "arcade") + var/datum/browser/popup = new(user, "arcade", "Space Villian 2000") + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/arcade/battle/Topic(href, href_list) + if(..()) + return + + if (!src.blocked && !src.gameover) + if (href_list["attack"]) + src.blocked = 1 + var/attackamt = rand(2,6) + src.temp = "You attack for [attackamt] damage!" + playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) + src.updateUsrDialog() + if(turtle > 0) + turtle-- + + sleep(10) + src.enemy_hp -= attackamt + src.arcade_action() + + else if (href_list["heal"]) + src.blocked = 1 + var/pointamt = rand(1,3) + var/healamt = rand(6,8) + src.temp = "You use [pointamt] magic to heal for [healamt] damage!" + playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) + src.updateUsrDialog() + turtle++ + + sleep(10) + src.player_mp -= pointamt + src.player_hp += healamt + src.blocked = 1 + src.updateUsrDialog() + src.arcade_action() + + else if (href_list["charge"]) + src.blocked = 1 + var/chargeamt = rand(4,7) + src.temp = "You regain [chargeamt] points" + playsound(src.loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_mp += chargeamt + if(turtle > 0) + turtle-- + + src.updateUsrDialog() + sleep(10) + src.arcade_action() + + if (href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=arcade") + + else if (href_list["newgame"]) //Reset everything + temp = "New Round" + player_hp = 30 + player_mp = 10 + enemy_hp = 45 + enemy_mp = 20 + gameover = 0 + turtle = 0 + + if(emagged) + src.New() + emagged = 0 + + src.add_fingerprint(usr) + src.updateUsrDialog() + return + +/obj/machinery/computer/arcade/battle/proc/arcade_action() + if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) + if(!gameover) + src.gameover = 1 + src.temp = "[src.enemy_name] has fallen! Rejoice!" + playsound(src.loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10) + + if(emagged) + feedback_inc("arcade_win_emagged") + new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) + new /obj/item/clothing/head/collectable/petehat(src.loc) + message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") + log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") + src.New() + emagged = 0 + else + feedback_inc("arcade_win_normal") + prizevend() + + else if (emagged && (turtle >= 4)) + var/boomamt = rand(5,10) + src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!" + playsound(src.loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_hp -= boomamt + + else if ((src.enemy_mp <= 5) && (prob(70))) + var/stealamt = rand(2,3) + src.temp = "[src.enemy_name] steals [stealamt] of your power!" + playsound(src.loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_mp -= stealamt + src.updateUsrDialog() + + if (src.player_mp <= 0) + src.gameover = 1 + sleep(10) + src.temp = "You have been drained! GAME OVER" + playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) + if(emagged) + feedback_inc("arcade_loss_mana_emagged") + usr.gib() + else + feedback_inc("arcade_loss_mana_normal") + + else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4)) + src.temp = "[src.enemy_name] heals for 4 health!" + playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) + src.enemy_hp += 4 + src.enemy_mp -= 4 + + else + var/attackamt = rand(3,6) + src.temp = "[src.enemy_name] attacks for [attackamt] damage!" + playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_hp -= attackamt + + if ((src.player_mp <= 0) || (src.player_hp <= 0)) + src.gameover = 1 + src.temp = "You have been crushed! GAME OVER" + playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) + if(emagged) + feedback_inc("arcade_loss_hp_emagged") + usr.gib() + else + feedback_inc("arcade_loss_hp_normal") + + src.blocked = 0 + return + + +/obj/machinery/computer/arcade/battle/emag_act(mob/user) + if(!emagged) + temp = "If you die in the game, you die for real!" + player_hp = 30 + player_mp = 10 + enemy_hp = 45 + enemy_mp = 20 + gameover = 0 + blocked = 0 + + emagged = 1 + + enemy_name = "Cuban Pete" + name = "Outbomb Cuban Pete" + + + src.updateUsrDialog() + + + +// *** THE ORION TRAIL ** // + +#define ORION_TRAIL_WINTURN 9 + +//Orion Trail Events +#define ORION_TRAIL_RAIDERS "Raiders" +#define ORION_TRAIL_FLUX "Interstellar Flux" +#define ORION_TRAIL_ILLNESS "Illness" +#define ORION_TRAIL_BREAKDOWN "Breakdown" +#define ORION_TRAIL_LING "Changelings?" +#define ORION_TRAIL_LING_ATTACK "Changeling Ambush" +#define ORION_TRAIL_MALFUNCTION "Malfunction" +#define ORION_TRAIL_COLLISION "Collision" +#define ORION_TRAIL_SPACEPORT "Spaceport" +#define ORION_TRAIL_BLACKHOLE "BlackHole" + +#define ORION_STATUS_START 1 +#define ORION_STATUS_NORMAL 2 +#define ORION_STATUS_GAMEOVER 3 +#define ORION_STATUS_MARKET 4 + +/obj/machinery/computer/arcade/orion_trail + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + icon_state = "arcade" + circuit = /obj/item/weapon/circuitboard/computer/arcade/orion_trail + var/busy = 0 //prevent clickspam that allowed people to ~speedrun~ the game. + var/engine = 0 + var/hull = 0 + var/electronics = 0 + var/food = 80 + var/fuel = 60 + var/turns = 4 + var/alive = 4 + var/eventdat = null + var/event = null + var/list/settlers = list("Harry","Larry","Bob") + var/list/events = list(ORION_TRAIL_RAIDERS = 3, + ORION_TRAIL_FLUX = 1, + ORION_TRAIL_ILLNESS = 3, + ORION_TRAIL_BREAKDOWN = 2, + ORION_TRAIL_LING = 3, + ORION_TRAIL_MALFUNCTION = 2, + ORION_TRAIL_COLLISION = 1, + ORION_TRAIL_SPACEPORT = 2 + ) + var/list/stops = list() + var/list/stopblurbs = list() + var/lings_aboard = 0 + var/spaceport_raided = 0 + var/spaceport_freebie = 0 + var/last_spaceport_action = "" + var/gameStatus = ORION_STATUS_START + var/canContinueEvent = 0 + +/obj/machinery/computer/arcade/orion_trail/New() + ..() + // Sets up the main trail + stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") + stopblurbs = list( + "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", + "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", + "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", + "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", + "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", + "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", + "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", + "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", + "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" + ) + +/obj/machinery/computer/arcade/orion_trail/proc/newgame() + // Set names of settlers in crew + settlers = list() + for(var/i = 1; i <= 3; i++) + add_crewmember() + add_crewmember("[usr]") + // Re-set items to defaults + engine = 1 + hull = 1 + electronics = 1 + food = 80 + fuel = 60 + alive = 4 + turns = 1 + event = null + gameStatus = ORION_STATUS_NORMAL + lings_aboard = 0 + + //spaceport junk + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + +/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) + if(..()) + return + if(fuel <= 0 || food <=0 || settlers.len == 0) + gameStatus = ORION_STATUS_GAMEOVER + event = null + user.set_machine(src) + var/dat = "" + if(gameStatus == ORION_STATUS_GAMEOVER) + dat = "

Game Over

" + dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." + if(settlers.len == 0) + dat += "
Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy." + else + if(food <= 0) + dat += "
You ran out of food and starved." + if(emagged) + user.nutrition = 0 //yeah you pretty hongry + user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." + if(fuel <= 0) + dat += "
You ran out of fuel, and drift, slowly, into a star." + if(emagged) + var/mob/living/M = user + M.adjust_fire_stacks(5) + M.IgniteMob() //flew into a star, so you're on fire + user << "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames." + dat += "

OK...

" + + if(emagged) + user << "You're never going to make it to Orion..." + user.death() + emagged = 0 //removes the emagged status after you lose + gameStatus = ORION_STATUS_START + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + + else if(event) + dat = eventdat + else if(gameStatus == ORION_STATUS_NORMAL) + var/title = stops[turns] + var/subtext = stopblurbs[turns] + dat = "

[title]

" + dat += "[subtext]" + dat += "

Crew:

" + dat += english_list(settlers) + dat += "
Food: [food] | Fuel: [fuel]" + dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + if(turns == 7) + dat += "

Go Around Continue

" + else + dat += "

Continue

" + dat += "

Kill a crewmember

" + dat += "

Close

" + else + dat = "

The Orion Trail

" + dat += "

Experience the journey of your ancestors!



" + dat += "
New Game
" + dat += "

Close

" + var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) + if(..()) + return + if(href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=arcade") + + if(busy) + return + busy = 1 + + if (href_list["continue"]) //Continue your travels + if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) + if(turns >= ORION_TRAIL_WINTURN) + win() + else + food -= (alive+lings_aboard)*2 + fuel -= 5 + if(turns == 2 && prob(30)) + event = ORION_TRAIL_COLLISION + event() + else if(prob(75)) + event = pickweight(events) + if(lings_aboard) + if(event == ORION_TRAIL_LING || prob(55)) + event = ORION_TRAIL_LING_ATTACK + event() + turns += 1 + if(emagged) + var/mob/living/carbon/M = usr //for some vars + switch(event) + if(ORION_TRAIL_RAIDERS) + if(prob(50)) + usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?" + M.hallucination += 30 + else + usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..." + M.take_organ_damage(30) + playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1) + if(ORION_TRAIL_ILLNESS) + var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS + if(severity == 1) + M << "You suddenly feel slightly nauseous." //got off lucky + if(severity == 2) + usr << "You suddenly feel extremely nauseous and hunch over until it passes." + M.Stun(3) + if(severity >= 3) //you didn't pray hard enough + M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit." + M.Stun(5) + sleep(30) + M.vomit(50) + if(ORION_TRAIL_FLUX) + if(prob(75)) + M.Weaken(3) + say("A sudden gust of powerful wind slams [M] into the floor!") + M.take_organ_damage(25) + playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) + else + M << "A violent gale blows past you, and you barely manage to stay standing!" + if(ORION_TRAIL_COLLISION) //by far the most damaging event + if(prob(90)) + playsound(src.loc, 'sound/effects/bang.ogg', 100, 1) + var/turf/open/floor/F + for(F in orange(1, src)) + F.ChangeTurf(F.baseturf) + say("Something slams into the floor around [src], exposing it to space!") + if(hull) + sleep(10) + say("A new floor suddenly appears around [src]. What the hell?") + playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) + var/turf/open/space/T + for(T in orange(1, src)) + T.ChangeTurf(/turf/open/floor/plating/) + else + say("Something slams into the floor around [src] - luckily, it didn't get through!") + playsound(src.loc, 'sound/effects/bang.ogg', 50, 1) + if(ORION_TRAIL_MALFUNCTION) + playsound(src.loc, 'sound/effects/EMPulse.ogg', 50, 1) + src.visible_message("[src] malfunctions, randomizing in-game stats!") + var/oldfood = food + var/oldfuel = fuel + food = rand(10,80) / rand(1,2) + fuel = rand(10,60) / rand(1,2) + if(electronics) + sleep(10) + if(oldfuel > fuel && oldfood > food) + src.audible_message("[src] lets out a somehow reassuring chime.") + else if(oldfuel < fuel || oldfood < food) + src.audible_message("[src] lets out a somehow ominous chime.") + food = oldfood + fuel = oldfuel + playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) + + else if(href_list["newgame"]) //Reset everything + if(gameStatus == ORION_STATUS_START) + newgame() + else if(href_list["menu"]) //back to the main menu + if(gameStatus == ORION_STATUS_GAMEOVER) + gameStatus = ORION_STATUS_START + event = null + food = 80 + fuel = 60 + settlers = list("Harry","Larry","Bob") + else if(href_list["slow"]) //slow down + if(event == ORION_TRAIL_FLUX) + food -= (alive+lings_aboard)*2 + fuel -= 5 + event = null + else if(href_list["pastblack"]) //slow down + if(turns == 7) + food -= ((alive+lings_aboard)*2)*3 + fuel -= 15 + turns += 1 + event = null + else if(href_list["useengine"]) //use parts + if(event == ORION_TRAIL_BREAKDOWN) + engine = max(0, --engine) + event = null + else if(href_list["useelec"]) //use parts + if(event == ORION_TRAIL_MALFUNCTION) + electronics = max(0, --electronics) + event = null + else if(href_list["usehull"]) //use parts + if(event == ORION_TRAIL_COLLISION) + hull = max(0, --hull) + event = null + else if(href_list["wait"]) //wait 3 days + if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) + food -= ((alive+lings_aboard)*2)*3 + event = null + else if(href_list["keepspeed"]) //keep speed + if(event == ORION_TRAIL_FLUX) + if(prob(75)) + event = "Breakdown" + event() + else + event = null + else if(href_list["blackhole"]) //keep speed past a black hole + if(turns == 7) + if(prob(75)) + event = ORION_TRAIL_BLACKHOLE + event() + if(emagged) //has to be here because otherwise it doesn't work + playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1) + say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") + usr.Stun(10) //you can't run :^) + var/S = new /obj/singularity/academy(usr.loc) + emagged = 0 //immediately removes emagged status so people can't kill themselves by sprinting up and interacting + sleep(50) + say("[S] winks out, just as suddenly as it appeared.") + qdel(S) + else + event = null + turns += 1 + else if(href_list["holedeath"]) + if(event == ORION_TRAIL_BLACKHOLE) + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(href_list["eventclose"]) //end an event + if(canContinueEvent) + event = null + + else if(href_list["killcrew"]) //shoot a crewmember + if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_LING) + var/sheriff = remove_crewmember() //I shot the sheriff + playsound(loc,'sound/weapons/Gunshot.ogg', 100, 1) + + if(settlers.len == 0 || alive == 0) + say("The last crewmember [sheriff], shot themselves, GAME OVER!") + if(emagged) + usr.death(0) + emagged = 0 + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(emagged) + if(usr.name == sheriff) + say("The crew of the ship chose to kill [usr.name]!") + usr.death(0) + + if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places + event = null + + //Spaceport specific interactions + //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) + //they also call event() again, to regen the eventdata, which is kind of odd but necessary + else if(href_list["buycrew"]) //buy a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && food >= 10 && fuel >= 10) + var/bought = add_crewmember() + last_spaceport_action = "You hired [bought] as a new crewmember." + fuel -= 10 + food -= 10 + event() + + else if(href_list["sellcrew"]) //sell a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && settlers.len > 1) + var/sold = remove_crewmember() + last_spaceport_action = "You sold your crewmember, [sold]!" + fuel += 7 + food += 7 + event() + + else if(href_list["leave_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + event = null + gameStatus = ORION_STATUS_NORMAL + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + + else if(href_list["raid_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + var/success = min(15 * alive,100) //default crew (4) have a 60% chance + spaceport_raided = 1 + + var/FU = 0 + var/FO = 0 + if(prob(success)) + FU = rand(5,15) + FO = rand(5,15) + last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" + else + FU = rand(-5,-15) + FO = rand(-5,-15) + last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" + + //your chance of lose a crewmember is 1/2 your chance of success + //this makes higher % failures hurt more, don't get cocky space cowboy! + if(prob(success*5)) + var/lost_crew = remove_crewmember() + last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" + if(emagged) + say("WEEWOO WEEWOO, Spaceport Security en route!") + for(var/i, i<=3, i++) + var/mob/living/simple_animal/hostile/syndicate/ranged/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/orion(get_turf(src)) + O.target = usr + + + fuel += FU + food += FO + event() + + else if(href_list["buyparts"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && fuel > 5) + switch(text2num(href_list["buyparts"])) + if(1) //Engine Parts + engine++ + last_spaceport_action = "Bought Engine Parts" + if(2) //Hull Plates + hull++ + last_spaceport_action = "Bought Hull Plates" + if(3) //Spare Electronics + electronics++ + last_spaceport_action = "Bought Spare Electronics" + fuel -= 5 //they all cost 5 + event() + + else if(href_list["trade"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + switch(text2num(href_list["trade"])) + if(1) //Fuel + if(fuel > 5) + fuel -= 5 + food += 5 + last_spaceport_action = "Traded Fuel for Food" + event() + if(2) //Food + if(food > 5) + fuel += 5 + food -= 5 + last_spaceport_action = "Traded Food for Fuel" + event() + + src.add_fingerprint(usr) + src.updateUsrDialog() + busy = 0 + return + + +/obj/machinery/computer/arcade/orion_trail/proc/event() + eventdat = "

[event]

" + canContinueEvent = 0 + switch(event) + if(ORION_TRAIL_RAIDERS) + eventdat += "Raiders have come aboard your ship!" + if(prob(50)) + var/sfood = rand(1,10) + var/sfuel = rand(1,10) + food -= sfood + fuel -= sfuel + eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." + else if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] tried to fight back but was killed." + else + eventdat += "
Fortunately you fended them off without any trouble." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_FLUX) + eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." + eventdat += "
What will you do?" + eventdat += "

Slow Down Continue

" + eventdat += "

Close

" + + if(ORION_TRAIL_ILLNESS) + eventdat += "A deadly illness has been contracted!" + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by the disease." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_BREAKDOWN) + eventdat += "Oh no! The engine has broken down!" + eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days." + if(engine >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_MALFUNCTION) + eventdat += "The ship's systems are malfunctioning!" + eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." + if(electronics >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_COLLISION) + eventdat += "Something hit us! Looks like there's some hull damage." + if(prob(25)) + var/sfood = rand(5,15) + var/sfuel = rand(5,15) + food -= sfood + fuel -= sfuel + eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." + if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by rapid depressurization." + eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." + if(hull >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_BLACKHOLE) + eventdat += "You were swept away into the black hole." + eventdat += "

Oh...

" + eventdat += "

Close

" + settlers = list() + + if(ORION_TRAIL_LING) + eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." + if(settlers.len <= 2) + eventdat += "
Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." + eventdat += "

Continue

" + eventdat += "

Close

" + if(prob(10)) // "likely", I didn't say it was guaranteed! + lings_aboard = min(++lings_aboard,2) + else + if(lings_aboard) //less likely to stack lings + if(prob(20)) + lings_aboard = min(++lings_aboard,2) + else if(prob(70)) + lings_aboard = min(++lings_aboard,2) + + eventdat += "

Kill a crewmember

" + eventdat += "

Risk it

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_LING_ATTACK) + if(lings_aboard <= 0) //shouldn't trigger, but hey. + eventdat += "Haha, fooled you, there are no changelings on board!" + eventdat += "
(You should report this to a coder :S)" + else + var/ling1 = remove_crewmember() + var/ling2 = "" + if(lings_aboard >= 2) + ling2 = remove_crewmember() + + eventdat += "Oh no, some of your crew are Changelings!" + if(ling2) + eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" + else + eventdat += "
[ling1]'s arm twists and contorts into a grotesque blade!" + + var/chance2attack = alive*20 + if(prob(chance2attack)) + var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance + if(prob(chancetokill)) + var/deadguy = remove_crewmember() + eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] up to [deadguy] and capitulates them!" + else + eventdat += "
You valiantly fight off the Changeling[ling2 ? "s":""]!" + eventdat += "
You cut the Changeling[ling2 ? "s":""] up into meat... Eww" + if(ling2) + food += 30 + lings_aboard = max(0,lings_aboard-2) + else + food += 15 + lings_aboard = max(0,--lings_aboard) + else + eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] away, What wimps!" + if(ling2) + lings_aboard = max(0,lings_aboard-2) + else + lings_aboard = max(0,--lings_aboard) + + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + + if(ORION_TRAIL_SPACEPORT) + gameStatus = ORION_STATUS_MARKET + if(spaceport_raided) + eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!" + if(last_spaceport_action) + eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "

Depart Spaceport

" + eventdat += "

Close

" + else + eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!" + eventdat += "
This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." + eventdat += "
Trading terms: FU = Fuel, FO = Food" + if(last_spaceport_action) + eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "

Crew:

" + eventdat += english_list(settlers) + eventdat += "
Food: [food] | Fuel: [fuel]" + eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + + + //If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port) + if(!spaceport_freebie && (fuel < 20 || food < 20)) + spaceport_freebie++ + var/FU = 10 + var/FO = 10 + var/freecrew = 0 + if(prob(30)) + FU = 25 + FO = 25 + + if(prob(10)) + add_crewmember() + freecrew++ + + eventdat += "
The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)" + if(freecrew) + eventdat += "
You also gain a new crewmember!" + + fuel += FU + food += FO + + //CREW INTERACTIONS + eventdat += "

Crew Management:

" + + //Buy crew + if(food >= 10 && fuel >= 10) + eventdat += "

Hire a new Crewmember (-10FU,-10FO)

" + else + eventdat += "

Cant afford a new Crewmember

" + + //Sell crew + if(settlers.len > 1) + eventdat += "

Sell crew for Fuel and Food (+7FU,+7FO)

" + else + eventdat += "

Cant afford to sell a Crewmember

" + + //BUY/SELL STUFF + eventdat += "

Spare Parts:

" + + //Engine parts + if(fuel > 5) + eventdat += "

Buy Engine Parts (-5FU)

" + else + eventdat += "

Cant afford to buy Engine Parts" + + //Hull plates + if(fuel > 5) + eventdat += "

Buy Hull Plates (-5FU)

" + else + eventdat += "

Cant afford to buy Hull Plates" + + //Electronics + if(fuel > 5) + eventdat += "

Buy Spare Electronics (-5FU)

" + else + eventdat += "

Cant afford to buy Spare Electronics" + + //Trade + if(fuel > 5) + eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" + else + eventdat += "

Cant afford to Trade Fuel for Food 5) + eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" + else + eventdat += "

Cant afford to Trade Food for FuelYou override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." + name = "The Orion Trail: Realism Edition" + desc = "Learn how our ancestors got to Orion, and try not to die in the process!" + newgame() + emagged = 1 + +/mob/living/simple_animal/hostile/syndicate/ranged/orion + name = "Spaceport Security" + desc = "The Premier security forces for all spaceports found along the Orion Trail." + faction = list("orion") + loot = list(/obj/effect/mob_spawn/human/corpse/orionsecurity, + /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted, + /obj/item/weapon/shield/energy) + +/obj/effect/mob_spawn/human/corpse/orionsecurity + name = "Spaceport Security" + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/armor/vest + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + radio = /obj/item/device/radio/headset + mask = /obj/item/clothing/mask/gas + helmet = /obj/item/clothing/head/helmet/swat + back = /obj/item/weapon/storage/backpack + has_id = 1 + id_job = "Officer" + id_access = "Syndicate" + +/obj/item/weapon/orion_ship + name = "model settler ship" + desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." + icon = 'icons/obj/toy.dmi' + icon_state = "ship" + w_class = 2 + var/active = 0 //if the ship is on + +/obj/item/weapon/orion_ship/examine(mob/user) + ..() + if(!(in_range(user, src))) + return + if(!active) + user << "There's a little switch on the bottom. It's flipped down." + else + user << "There's a little switch on the bottom. It's flipped up." + +/obj/item/weapon/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse + if(active) + return + + message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") + log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") + + user << "You flip the switch on the underside of [src]." + active = 1 + src.visible_message("[src] softly beeps and whirs to life!") + playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) + say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") + sleep(20) + src.visible_message("[src] begins to vibrate...") + say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") + sleep(30) + say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) + sleep(3.6) + src.visible_message("[src] explodes!") + explosion(src.loc, 2,4,8, flame_range = 16) + qdel(src) + + +#undef ORION_TRAIL_WINTURN +#undef ORION_TRAIL_RAIDERS +#undef ORION_TRAIL_FLUX +#undef ORION_TRAIL_ILLNESS +#undef ORION_TRAIL_BREAKDOWN +#undef ORION_TRAIL_LING +#undef ORION_TRAIL_LING_ATTACK +#undef ORION_TRAIL_MALFUNCTION +#undef ORION_TRAIL_COLLISION +#undef ORION_TRAIL_SPACEPORT +#undef ORION_TRAIL_BLACKHOLE + +#undef ORION_STATUS_START +#undef ORION_STATUS_NORMAL +#undef ORION_STATUS_GAMEOVER +#undef ORION_STATUS_MARKET diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index e6f306e03c8..6d3587d5507 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/atmos_alert name = "atmospheric alert console" desc = "Used to monitor the station's air alarms." - circuit = /obj/item/weapon/circuitboard/atmos_alert + circuit = /obj/item/weapon/circuitboard/computer/atmos_alert icon_screen = "alert:0" icon_keyboard = "atmos_key" var/list/priority_alarms = list() diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 32e3ae5c38e..3f40993ffad 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -68,7 +68,7 @@ desc = "Used to monitor the station's atmospherics sensors." icon_screen = "tank" icon_keyboard = "atmos_key" - circuit = /obj/item/weapon/circuitboard/atmos_control + circuit = /obj/item/weapon/circuitboard/computer/atmos_control var/frequency = 1441 var/list/sensors = list( @@ -146,7 +146,7 @@ var/input_tag var/output_tag frequency = 1441 - circuit = /obj/item/weapon/circuitboard/atmos_control/tank + circuit = /obj/item/weapon/circuitboard/computer/atmos_control/tank var/list/input_info var/list/output_info diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 620b7f37e6a..73717cf3f7c 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -1,292 +1,10 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/structure/computerframe - density = 1 - anchored = 0 - name = "computer-frame" - icon = 'icons/obj/stock_parts.dmi' +/obj/structure/frame/computer + name = "computer frame" icon_state = "0" - var/state = 0 - var/obj/item/weapon/circuitboard/circuit = null -// weight = 1.0E8 - -/obj/item/weapon/circuitboard - density = 0 anchored = 0 - w_class = 2 - name = "circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "id_mod" - item_state = "electronic" - origin_tech = "programming=2" - materials = list(MAT_GLASS=200) - var/frequency = null - var/build_path = null - var/board_type = "computer" - var/list/req_components = null - var/powernet = null - var/list/records = null - var/frame_desc = null + state = 0 -/obj/item/weapon/circuitboard/turbine_computer - name = "circuit board (Turbine Computer)" - build_path = /obj/machinery/computer/turbine_computer - origin_tech = "programming=4;engineering=4;powerstorage=4" -/obj/item/weapon/circuitboard/telesci_console - name = "circuit board (Telescience Console)" - build_path = /obj/machinery/computer/telescience - origin_tech = "programming=3;bluespace=2" -/obj/item/weapon/circuitboard/message_monitor - name = "circuit board (Message Monitor)" - build_path = /obj/machinery/computer/message_monitor - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/security - name = "circuit board (Security)" - build_path = /obj/machinery/computer/security -/obj/item/weapon/circuitboard/aicore - name = "circuit board (AI core)" - origin_tech = "programming=4;biotech=2" - board_type = "other" -/obj/item/weapon/circuitboard/aiupload - name = "circuit board (AI Upload)" - build_path = /obj/machinery/computer/upload/ai - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/borgupload - name = "circuit board (Cyborg Upload)" - build_path = /obj/machinery/computer/upload/borg - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/med_data - name = "circuit board (Medical Records Console)" - build_path = /obj/machinery/computer/med_data -/obj/item/weapon/circuitboard/pandemic - name = "circuit board (PanD.E.M.I.C. 2200)" - build_path = /obj/machinery/computer/pandemic - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/scan_consolenew - name = "circuit board (DNA Machine)" - build_path = /obj/machinery/computer/scan_consolenew - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/communications - name = "circuit board (Communications)" - build_path = /obj/machinery/computer/communications - origin_tech = "programming=2;magnets=2" - var/lastTimeUsed = 0 - -/obj/item/weapon/circuitboard/card - name = "circuit board (ID Console)" - build_path = /obj/machinery/computer/card -/obj/item/weapon/circuitboard/card/centcom - name = "circuit board (Centcom ID Console)" - build_path = /obj/machinery/computer/card/centcom -/obj/item/weapon/circuitboard/card/minor - name = "circuit board (Department Management Console)" - build_path = /obj/machinery/computer/card/minor - var/target_dept = 1 -//obj/item/weapon/circuitboard/shield -// name = "Circuit board (Shield Control)" -// build_path = /obj/machinery/computer/stationshield -/obj/item/weapon/circuitboard/teleporter - name = "circuit board (Teleporter)" - build_path = /obj/machinery/computer/teleporter - origin_tech = "programming=2;bluespace=2" -/obj/item/weapon/circuitboard/secure_data - name = "circuit board (Security Records Console)" - build_path = /obj/machinery/computer/secure_data -/obj/item/weapon/circuitboard/stationalert - name = "circuit board (Station Alerts)" - build_path = /obj/machinery/computer/station_alert -/*/obj/item/weapon/circuitboard/atmospheresiphonswitch - name = "circuit board (Atmosphere siphon control)" - build_path = /obj/machinery/computer/atmosphere/siphonswitch*/ -/obj/item/weapon/circuitboard/atmos_control - name = "circuit board (Atmospheric Monitor)" - build_path = /obj/machinery/computer/atmos_control -/obj/item/weapon/circuitboard/atmos_control/tank - name = "circuit board (Tank Control)" - build_path = /obj/machinery/computer/atmos_control/tank - origin_tech = "programming=2;engineering=3;materials=2" -/obj/item/weapon/circuitboard/atmos_alert - name = "circuit board (Atmospheric Alert)" - build_path = /obj/machinery/computer/atmos_alert -/obj/item/weapon/circuitboard/pod - name = "circuit board (Massdriver control)" - build_path = /obj/machinery/computer/pod -/obj/item/weapon/circuitboard/robotics - name = "circuit board (Robotics Control)" - build_path = /obj/machinery/computer/robotics - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/cloning - name = "circuit board (Cloning)" - build_path = /obj/machinery/computer/cloning - origin_tech = "programming=3;biotech=3" -/obj/item/weapon/circuitboard/arcade/battle - name = "circuit board (Arcade Battle)" - build_path = /obj/machinery/computer/arcade/battle - origin_tech = "programming=1" -/obj/item/weapon/circuitboard/arcade/orion_trail - name = "circuit board (Orion Trail)" - build_path = /obj/machinery/computer/arcade/orion_trail -/obj/item/weapon/circuitboard/turbine_control - name = "circuit board (Turbine control)" - build_path = /obj/machinery/computer/turbine_computer -/obj/item/weapon/circuitboard/solar_control - name = "circuit board (Solar Control)" //name fixed 250810 - build_path = /obj/machinery/power/solar_control - origin_tech = "programming=2;powerstorage=2" -/obj/item/weapon/circuitboard/powermonitor - name = "circuit board (Power Monitor)" //name fixed 250810 - build_path = /obj/machinery/computer/monitor -/obj/item/weapon/circuitboard/olddoor - name = "circuit board (DoorMex)" - build_path = /obj/machinery/computer/pod/old -/obj/item/weapon/circuitboard/syndicatedoor - name = "circuit board (ProComp Executive)" - build_path = /obj/machinery/computer/pod/old/syndicate -/obj/item/weapon/circuitboard/swfdoor - name = "circuit board (Magix)" - build_path = /obj/machinery/computer/pod/old/swf -/obj/item/weapon/circuitboard/prisoner - name = "circuit board (Prisoner Management Console)" - build_path = /obj/machinery/computer/prisoner -/obj/item/weapon/circuitboard/rdconsole - name = "circuit board (RD Console)" - build_path = /obj/machinery/computer/rdconsole/core -/obj/item/weapon/circuitboard/mecha_control - name = "circuit board (Exosuit Control Console)" - build_path = /obj/machinery/computer/mecha -/obj/item/weapon/circuitboard/rdservercontrol - name = "circuit board (R&D Server Control)" - build_path = /obj/machinery/computer/rdservercontrol -/obj/item/weapon/circuitboard/crew - name = "circuit board (Crew Monitoring Console)" - build_path = /obj/machinery/computer/crew - origin_tech = "programming=3;biotech=2;magnets=2" -/obj/item/weapon/circuitboard/mech_bay_power_console - name = "circuit board (Mech Bay Power Control Console)" - build_path = /obj/machinery/computer/mech_bay_power_console - origin_tech = "programming=2;powerstorage=3" -/obj/item/weapon/circuitboard/cargo - name = "circuit board (Supply Console)" - build_path = /obj/machinery/computer/cargo - origin_tech = "programming=3" - var/contraband = 0 - var/emagged = 0 -/obj/item/weapon/circuitboard/cargo/request - name = "circuit board (Supply Request Console)" - build_path = /obj/machinery/computer/cargo/request -/obj/item/weapon/circuitboard/operating - name = "circuit board (Operating Computer)" - build_path = /obj/machinery/computer/operating - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/mining - name = "circuit board (Outpost Status Display)" - build_path = /obj/machinery/computer/security/mining -/obj/item/weapon/circuitboard/comm_monitor - name = "circuit board (Telecommunications Monitor)" - build_path = /obj/machinery/computer/telecomms/monitor - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/comm_server - name = "circuit board (Telecommunications Server Monitor)" - build_path = /obj/machinery/computer/telecomms/server - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/shuttle - name = "circuit board (Shuttle)" - build_path = /obj/machinery/computer/shuttle - var/shuttleId - var/possible_destinations = "" -/obj/item/weapon/circuitboard/labor_shuttle - name = "circuit board (Labor Shuttle)" - build_path = /obj/machinery/computer/shuttle/labor -/obj/item/weapon/circuitboard/labor_shuttle/one_way - name = "circuit board (Prisoner Shuttle Console)" - build_path = /obj/machinery/computer/shuttle/labor/one_way -/obj/item/weapon/circuitboard/ferry - name = "circuit board (Transport Ferry)" - build_path = /obj/machinery/computer/shuttle/ferry -/obj/item/weapon/circuitboard/ferry/request - name = "circuit board (Transport Ferry Console)" - build_path = /obj/machinery/computer/shuttle/ferry/request -/obj/item/weapon/circuitboard/mining_shuttle - name = "circuit board (Mining Shuttle)" - build_path = /obj/machinery/computer/shuttle/mining -/obj/item/weapon/circuitboard/white_ship - name = "circuit board (White Ship)" - build_path = /obj/machinery/computer/shuttle/white_ship -/obj/item/weapon/circuitboard/holodeck// Not going to let people get this, but it's just here for future - name = "circuit board (Holodeck Control)" - build_path = /obj/machinery/computer/holodeck - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/aifixer - name = "circuit board (AI Integrity Restorer)" - build_path = /obj/machinery/computer/aifixer - origin_tech = "programming=3;biotech=2" -/*/obj/item/weapon/circuitboard/prison_shuttle - name = "circuit board (Prison Shuttle)" - build_path = /obj/machinery/computer/prison_shuttle*/ -/obj/item/weapon/circuitboard/slot_machine - name = "circuit board (Slot Machine)" - build_path = /obj/machinery/computer/slot_machine - origin_tech = "programming=1" -/obj/item/weapon/circuitboard/libraryconsole - name = "circuit board (Library Visitor Console)" - build_path = /obj/machinery/computer/libraryconsole - origin_tech = "programming=1" - -/obj/item/weapon/circuitboard/card/minor/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/device/multitool)) - var/list/dept_list = list("general","security","medical","science","engineering") - var/choice = input("Currently set to [dept_list[target_dept]] personnel database. Changing to:","Multitool-Circuitboard interface") as null|anything in dept_list - if(choice) - target_dept = dept_list.Find(choice) - return - -/obj/item/weapon/circuitboard/cargo/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/device/multitool)) - if(!emagged) - contraband = !contraband - user << "Receiver spectrum set to [contraband ? "Broad" : "Standard"]." - else - user << "The spectrum chip is unresponsive." - if(istype(I,/obj/item/weapon/card/emag)) - if(!emagged) - contraband = TRUE - emagged = TRUE - user << "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband." - -/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/weapon/screwdriver)) - if(build_path == /obj/machinery/computer/rdconsole/core) - name = "circuit board (RD Console - Robotics)" - build_path = /obj/machinery/computer/rdconsole/robotics - user << "Access protocols successfully updated." - else - name = "circuit board (RD Console)" - build_path = /obj/machinery/computer/rdconsole/core - user << "Defaulting access protocols." - return - -/obj/item/weapon/circuitboard/libraryconsole/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/weapon/screwdriver)) - if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement) - name = "circuit board (Library Visitor Console)" - build_path = /obj/machinery/computer/libraryconsole - user << "Defaulting access protocols." - else - name = "circuit board (Book Inventory Management Console)" - build_path = /obj/machinery/computer/libraryconsole/bookmanagement - user << "Access protocols successfully updated." - return - -/obj/item/weapon/circuitboard/shuttle/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/multitool)) - var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null) - if(chosen_id >= 0) - shuttleId = chosen_id - else - shuttleId = initial(shuttleId) - return - -/obj/structure/computerframe/attackby(obj/item/P, mob/user, params) +/obj/structure/frame/computer/attackby(obj/item/P, mob/user, params) add_fingerprint(user) switch(state) if(0) @@ -319,19 +37,19 @@ user << "You unfasten the frame." anchored = 0 state = 0 - if(istype(P, /obj/item/weapon/circuitboard) && !circuit) - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "computer") - if(!user.drop_item()) - return - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You place the circuit board inside the frame." - icon_state = "1" - circuit = P - circuit.add_fingerprint(user) - P.loc = null - else - user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/weapon/circuitboard/computer) && !circuit) + if(!user.drop_item()) + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You place the circuit board inside the frame." + icon_state = "1" + circuit = P + circuit.add_fingerprint(user) + P.loc = null + + else if(istype(P, /obj/item/weapon/circuitboard) && !circuit) + user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You screw the circuit board into place." @@ -402,3 +120,291 @@ var/obj/B = new src.circuit.build_path (src.loc, circuit) transfer_fingerprints_to(B) qdel(src) + + + +/obj/item/weapon/circuitboard + name = "circuit board" + icon = 'icons/obj/module.dmi' + icon_state = "id_mod" + item_state = "electronic" + origin_tech = "programming=2" + materials = list(MAT_GLASS=1000) + w_class = 2 + var/build_path = null + +/obj/item/weapon/circuitboard/computer/turbine_computer + name = "circuit board (Turbine Computer)" + build_path = /obj/machinery/computer/turbine_computer + origin_tech = "programming=4;engineering=4;powerstorage=4" +/obj/item/weapon/circuitboard/computer/telesci_console + name = "circuit board (Telescience Console)" + build_path = /obj/machinery/computer/telescience + origin_tech = "programming=3;bluespace=2" +/obj/item/weapon/circuitboard/computer/message_monitor + name = "circuit board (Message Monitor)" + build_path = /obj/machinery/computer/message_monitor + origin_tech = "programming=3" +/obj/item/weapon/circuitboard/computer/security + name = "circuit board (Security Cameras)" + build_path = /obj/machinery/computer/security + +/obj/item/weapon/circuitboard/computer/aiupload + name = "circuit board (AI Upload)" + build_path = /obj/machinery/computer/upload/ai + origin_tech = "programming=4" +/obj/item/weapon/circuitboard/computer/borgupload + name = "circuit board (Cyborg Upload)" + build_path = /obj/machinery/computer/upload/borg + origin_tech = "programming=4" +/obj/item/weapon/circuitboard/computer/med_data + name = "circuit board (Medical Records Console)" + build_path = /obj/machinery/computer/med_data +/obj/item/weapon/circuitboard/computer/pandemic + name = "circuit board (PanD.E.M.I.C. 2200)" + build_path = /obj/machinery/computer/pandemic + origin_tech = "programming=2;biotech=2" +/obj/item/weapon/circuitboard/computer/scan_consolenew + name = "circuit board (DNA Machine)" + build_path = /obj/machinery/computer/scan_consolenew + origin_tech = "programming=2;biotech=2" +/obj/item/weapon/circuitboard/computer/communications + name = "circuit board (Communications)" + build_path = /obj/machinery/computer/communications + origin_tech = "programming=2;magnets=2" + var/lastTimeUsed = 0 + +/obj/item/weapon/circuitboard/computer/card + name = "circuit board (ID Console)" + build_path = /obj/machinery/computer/card +/obj/item/weapon/circuitboard/computer/card/centcom + name = "circuit board (Centcom ID Console)" + build_path = /obj/machinery/computer/card/centcom + +/obj/item/weapon/circuitboard/computer/card/minor + name = "circuit board (Department Management Console)" + build_path = /obj/machinery/computer/card/minor + var/target_dept = 1 + var/list/dept_list = list("General","Security","Medical","Science","Engineering") + +/obj/item/weapon/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1) + user << "You set the board to \"[dept_list[target_dept]]\"." + else + return ..() + +/obj/item/weapon/circuitboard/computer/card/minor/examine(user) + ..() + user << "Currently set to \"[dept_list[target_dept]]\"." + +//obj/item/weapon/circuitboard/computer/shield +// name = "Circuit board (Shield Control)" +// build_path = /obj/machinery/computer/stationshield +/obj/item/weapon/circuitboard/computer/teleporter + name = "circuit board (Teleporter)" + build_path = /obj/machinery/computer/teleporter + origin_tech = "programming=2;bluespace=2" +/obj/item/weapon/circuitboard/computer/secure_data + name = "circuit board (Security Records Console)" + build_path = /obj/machinery/computer/secure_data +/obj/item/weapon/circuitboard/computer/stationalert + name = "circuit board (Station Alerts)" + build_path = /obj/machinery/computer/station_alert +/*/obj/item/weapon/circuitboard/computer/atmospheresiphonswitch + name = "circuit board (Atmosphere siphon control)" + build_path = /obj/machinery/computer/atmosphere/siphonswitch*/ +/obj/item/weapon/circuitboard/computer/atmos_control + name = "circuit board (Atmospheric Monitor)" + build_path = /obj/machinery/computer/atmos_control +/obj/item/weapon/circuitboard/computer/atmos_control/tank + name = "circuit board (Tank Control)" + build_path = /obj/machinery/computer/atmos_control/tank + origin_tech = "programming=2;engineering=3;materials=2" +/obj/item/weapon/circuitboard/computer/atmos_alert + name = "circuit board (Atmospheric Alert)" + build_path = /obj/machinery/computer/atmos_alert +/obj/item/weapon/circuitboard/computer/pod + name = "circuit board (Massdriver control)" + build_path = /obj/machinery/computer/pod +/obj/item/weapon/circuitboard/computer/robotics + name = "circuit board (Robotics Control)" + build_path = /obj/machinery/computer/robotics + origin_tech = "programming=3" +/obj/item/weapon/circuitboard/computer/cloning + name = "circuit board (Cloning)" + build_path = /obj/machinery/computer/cloning + origin_tech = "programming=3;biotech=3" +/obj/item/weapon/circuitboard/computer/arcade/battle + name = "circuit board (Arcade Battle)" + build_path = /obj/machinery/computer/arcade/battle + origin_tech = "programming=1" +/obj/item/weapon/circuitboard/computer/arcade/orion_trail + name = "circuit board (Orion Trail)" + build_path = /obj/machinery/computer/arcade/orion_trail +/obj/item/weapon/circuitboard/computer/turbine_control + name = "circuit board (Turbine control)" + build_path = /obj/machinery/computer/turbine_computer +/obj/item/weapon/circuitboard/computer/solar_control + name = "circuit board (Solar Control)" //name fixed 250810 + build_path = /obj/machinery/power/solar_control + origin_tech = "programming=2;powerstorage=2" +/obj/item/weapon/circuitboard/computer/powermonitor + name = "circuit board (Power Monitor)" //name fixed 250810 + build_path = /obj/machinery/computer/monitor +/obj/item/weapon/circuitboard/computer/olddoor + name = "circuit board (DoorMex)" + build_path = /obj/machinery/computer/pod/old +/obj/item/weapon/circuitboard/computer/syndicatedoor + name = "circuit board (ProComp Executive)" + build_path = /obj/machinery/computer/pod/old/syndicate +/obj/item/weapon/circuitboard/computer/swfdoor + name = "circuit board (Magix)" + build_path = /obj/machinery/computer/pod/old/swf +/obj/item/weapon/circuitboard/computer/prisoner + name = "circuit board (Prisoner Management Console)" + build_path = /obj/machinery/computer/prisoner + + +/obj/item/weapon/circuitboard/computer/rdconsole + name = "circuit board (RD Console)" + build_path = /obj/machinery/computer/rdconsole/core + +/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params) + if(istype(I,/obj/item/weapon/screwdriver)) + if(build_path == /obj/machinery/computer/rdconsole/core) + name = "circuit board (RD Console - Robotics)" + build_path = /obj/machinery/computer/rdconsole/robotics + user << "Access protocols successfully updated." + else + name = "circuit board (RD Console)" + build_path = /obj/machinery/computer/rdconsole/core + user << "Defaulting access protocols." + else + return ..() + +/obj/item/weapon/circuitboard/computer/mecha_control + name = "circuit board (Exosuit Control Console)" + build_path = /obj/machinery/computer/mecha +/obj/item/weapon/circuitboard/computer/rdservercontrol + name = "circuit board (R&D Server Control)" + build_path = /obj/machinery/computer/rdservercontrol +/obj/item/weapon/circuitboard/computer/crew + name = "circuit board (Crew Monitoring Console)" + build_path = /obj/machinery/computer/crew + origin_tech = "programming=3;biotech=2;magnets=2" +/obj/item/weapon/circuitboard/computer/mech_bay_power_console + name = "circuit board (Mech Bay Power Control Console)" + build_path = /obj/machinery/computer/mech_bay_power_console + origin_tech = "programming=2;powerstorage=3" + +/obj/item/weapon/circuitboard/computer/cargo + name = "circuit board (Supply Console)" + build_path = /obj/machinery/computer/cargo + origin_tech = "programming=3" + var/contraband = 0 + var/emagged = 0 + +/obj/item/weapon/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params) + if(istype(I,/obj/item/device/multitool)) + if(!emagged) + contraband = !contraband + user << "Receiver spectrum set to [contraband ? "Broad" : "Standard"]." + else + user << "The spectrum chip is unresponsive." + else if(istype(I,/obj/item/weapon/card/emag)) + if(!emagged) + contraband = TRUE + emagged = TRUE + user << "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband." + else + return ..() + + +/obj/item/weapon/circuitboard/computer/cargo/request + name = "circuit board (Supply Request Console)" + build_path = /obj/machinery/computer/cargo/request + +/obj/item/weapon/circuitboard/computer/operating + name = "circuit board (Operating Computer)" + build_path = /obj/machinery/computer/operating + origin_tech = "programming=2;biotech=2" +/obj/item/weapon/circuitboard/computer/mining + name = "circuit board (Outpost Status Display)" + build_path = /obj/machinery/computer/security/mining +/obj/item/weapon/circuitboard/computer/comm_monitor + name = "circuit board (Telecommunications Monitor)" + build_path = /obj/machinery/computer/telecomms/monitor + origin_tech = "programming=3" +/obj/item/weapon/circuitboard/computer/comm_server + name = "circuit board (Telecommunications Server Monitor)" + build_path = /obj/machinery/computer/telecomms/server + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/computer/shuttle + name = "circuit board (Shuttle)" + build_path = /obj/machinery/computer/shuttle + var/shuttleId + var/possible_destinations = "" + +/obj/item/weapon/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/multitool)) + var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null) + if(chosen_id >= 0) + shuttleId = chosen_id + else + shuttleId = initial(shuttleId) + else + return ..() + +/obj/item/weapon/circuitboard/computer/labor_shuttle + name = "circuit board (Labor Shuttle)" + build_path = /obj/machinery/computer/shuttle/labor +/obj/item/weapon/circuitboard/computer/labor_shuttle/one_way + name = "circuit board (Prisoner Shuttle Console)" + build_path = /obj/machinery/computer/shuttle/labor/one_way +/obj/item/weapon/circuitboard/computer/ferry + name = "circuit board (Transport Ferry)" + build_path = /obj/machinery/computer/shuttle/ferry +/obj/item/weapon/circuitboard/computer/ferry/request + name = "circuit board (Transport Ferry Console)" + build_path = /obj/machinery/computer/shuttle/ferry/request +/obj/item/weapon/circuitboard/computer/mining_shuttle + name = "circuit board (Mining Shuttle)" + build_path = /obj/machinery/computer/shuttle/mining +/obj/item/weapon/circuitboard/computer/white_ship + name = "circuit board (White Ship)" + build_path = /obj/machinery/computer/shuttle/white_ship +/obj/item/weapon/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future + name = "circuit board (Holodeck Control)" + build_path = /obj/machinery/computer/holodeck + origin_tech = "programming=4" +/obj/item/weapon/circuitboard/computer/aifixer + name = "circuit board (AI Integrity Restorer)" + build_path = /obj/machinery/computer/aifixer + origin_tech = "programming=3;biotech=2" +/*/obj/item/weapon/circuitboard/computer/prison_shuttle + name = "circuit board (Prison Shuttle)" + build_path = /obj/machinery/computer/prison_shuttle*/ +/obj/item/weapon/circuitboard/computer/slot_machine + name = "circuit board (Slot Machine)" + build_path = /obj/machinery/computer/slot_machine + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/libraryconsole + name = "circuit board (Library Visitor Console)" + build_path = /obj/machinery/computer/libraryconsole + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params) + if(istype(I,/obj/item/weapon/screwdriver)) + if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement) + name = "circuit board (Library Visitor Console)" + build_path = /obj/machinery/computer/libraryconsole + user << "Defaulting access protocols." + else + name = "circuit board (Book Inventory Management Console)" + build_path = /obj/machinery/computer/libraryconsole/bookmanagement + user << "Access protocols successfully updated." + else + return ..() \ No newline at end of file diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 0bdb44931a3..c13ba3af2c4 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -3,7 +3,7 @@ desc = "Used to access the various cameras on the station." icon_screen = "cameras" icon_keyboard = "security_key" - circuit = /obj/item/weapon/circuitboard/security + circuit = /obj/item/weapon/circuitboard/computer/security var/last_pic = 1 var/list/network = list("SS13") var/mapping = 0//For the overview file, interesting bit of code. @@ -177,4 +177,4 @@ icon_screen = "mining" icon_keyboard = "mining_key" network = list("MINE") - circuit = "/obj/item/weapon/circuitboard/mining" + circuit = /obj/item/weapon/circuitboard/computer/mining diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index df02f37b5cb..0bbbeda6165 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -10,7 +10,7 @@ var/time_last_changed_position = 0 icon_screen = "id" icon_keyboard = "id_key" req_one_access = list(access_heads, access_change_ids) - circuit = /obj/item/weapon/circuitboard/card + circuit = /obj/item/weapon/circuitboard/computer/card var/obj/item/weapon/card/id/scan = null var/obj/item/weapon/card/id/modify = null var/authenticated = 0 @@ -483,18 +483,18 @@ var/time_last_changed_position = 0 /obj/machinery/computer/card/centcom name = "\improper Centcom identification console" - circuit = /obj/item/weapon/circuitboard/card/centcom + circuit = /obj/item/weapon/circuitboard/computer/card/centcom req_access = list(access_cent_captain) /obj/machinery/computer/card/minor name = "department management console" desc = "You can use this to change ID's for specific departments." icon_screen = "idminor" - circuit = /obj/item/weapon/circuitboard/card/minor + circuit = /obj/item/weapon/circuitboard/computer/card/minor /obj/machinery/computer/card/minor/New() ..() - var/obj/item/weapon/circuitboard/card/minor/typed_circuit = circuit + var/obj/item/weapon/circuitboard/computer/card/minor/typed_circuit = circuit if(target_dept) typed_circuit.target_dept = target_dept else diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index fc252a50ab4..f6011552816 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -4,7 +4,7 @@ desc = "Used to clone people and manage DNA." icon_screen = "dna" icon_keyboard = "med_key" - circuit = /obj/item/weapon/circuitboard/cloning + circuit = /obj/item/weapon/circuitboard/computer/cloning req_access = list(access_heads) //Only used for record deletion right now. var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. var/obj/machinery/clonepod/pod1 = null //Linked cloning pod. @@ -356,7 +356,7 @@ if (!subject.getorgan(/obj/item/organ/brain)) scantemp = "No signs of intelligence detected." return - if (subject.suiciding == 1) + if (subject.suiciding == 1 || subject.hellbound) scantemp = "Subject's brain is not responding to scanning stimuli." return if ((subject.disabilities & NOCLONE) && (src.scanner.scan_level < 2)) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index e2a77542cee..4416ed3e8e3 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -9,7 +9,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 icon_screen = "comm" icon_keyboard = "tech_key" req_access = list(access_heads) - circuit = /obj/item/weapon/circuitboard/communications + circuit = /obj/item/weapon/circuitboard/computer/communications var/authenticated = 0 var/auth_id = "Unknown" //Who is currently logged in? var/list/messagetitle = list() @@ -57,7 +57,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if(!href_list["operation"]) return - var/obj/item/weapon/circuitboard/communications/CM = circuit + var/obj/item/weapon/circuitboard/computer/communications/CM = circuit switch(href_list["operation"]) // main interface if("main") @@ -611,5 +611,5 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 return ..() /obj/machinery/computer/communications/proc/overrideCooldown() - var/obj/item/weapon/circuitboard/communications/CM = circuit + var/obj/item/weapon/circuitboard/computer/communications/CM = circuit CM.lastTimeUsed = 0 \ No newline at end of file diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 1ae36a3a43d..35ca17a8641 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 300 active_power_usage = 300 - var/obj/item/weapon/circuitboard/circuit = null // if circuit==null, computer can't disassembly + var/obj/item/weapon/circuitboard/computer/circuit = null // if circuit==null, computer can't disassembly var/processing = 0 var/brightness_on = 2 var/icon_keyboard = "generic_key" @@ -18,9 +18,8 @@ ..(location) if(C && istype(C)) circuit = C - else - if(circuit) - circuit = new circuit(null) + else if(circuit) + circuit = new circuit(null) power_change() update_icon() @@ -85,7 +84,7 @@ user << " You start to disconnect the monitor..." if(do_after(user, 20/I.toolspeed, target = src)) deconstruction() - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) A.circuit = circuit A.anchored = 1 circuit = null diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index ad992d3aba3..ab820645505 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -6,7 +6,7 @@ use_power = 1 idle_power_usage = 250 active_power_usage = 500 - circuit = "/obj/item/weapon/circuitboard/crew" + circuit = /obj/item/weapon/circuitboard/computer/crew /obj/machinery/computer/crew/attack_ai(mob/user) if(stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index e2a29dfe536..597b90129a7 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -22,7 +22,7 @@ icon_screen = "dna" icon_keyboard = "med_key" density = 1 - circuit = /obj/item/weapon/circuitboard/scan_consolenew + circuit = /obj/item/weapon/circuitboard/computer/scan_consolenew var/radduration = 2 var/radstrength = 1 diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 292fc7163b6..3c066205601 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -33,7 +33,7 @@ /obj/machinery/computer/upload/ai name = "\improper AI upload console" desc = "Used to upload laws to the AI." - circuit = /obj/item/weapon/circuitboard/aiupload + circuit = /obj/item/weapon/circuitboard/computer/aiupload /obj/machinery/computer/upload/ai/attack_hand(mob/user) if(..()) @@ -57,7 +57,7 @@ /obj/machinery/computer/upload/borg name = "cyborg upload console" desc = "Used to upload laws to Cyborgs." - circuit = /obj/item/weapon/circuitboard/borgupload + circuit = /obj/item/weapon/circuitboard/computer/borgupload /obj/machinery/computer/upload/borg/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index b3e94a26be5..51c0c3e8264 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -6,7 +6,7 @@ icon_screen = "medcomp" icon_keyboard = "med_key" req_one_access = list(access_medical, access_forensics_lockers) - circuit = /obj/item/weapon/circuitboard/med_data + circuit = /obj/item/weapon/circuitboard/computer/med_data var/obj/item/weapon/card/id/scan = null var/authenticated = null var/rank = null diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index cab29214d2e..8a74f5f09ee 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -8,7 +8,7 @@ name = "message monitor console" desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages." icon_screen = "comm_logs" - circuit = /obj/item/weapon/circuitboard/message_monitor + circuit = /obj/item/weapon/circuitboard/computer/message_monitor //Server linked to. var/obj/machinery/message_server/linkedServer = null //Sparks effect - For emag diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index ab5a89b97e9..8a837a5af5a 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -4,7 +4,6 @@ icon_screen = "explosive" icon_keyboard = "security_key" req_access = list(access_brig) - circuit = "/obj/item/weapon/circuitboard/prisoner" var/id = 0 var/temp = null var/status = 0 @@ -12,7 +11,7 @@ var/stop = 0 var/screen = 0 // 0 - No Access Denied, 1 - Access allowed var/obj/item/weapon/card/id/prisoner/inserted_id - circuit = /obj/item/weapon/circuitboard/prisoner + circuit = /obj/item/weapon/circuitboard/computer/prisoner /obj/machinery/computer/prisoner/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index a71bb8d789a..1348622a0ff 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -7,7 +7,7 @@ icon_screen = "robot" icon_keyboard = "rd_key" req_access = list(access_robotics) - circuit = /obj/item/weapon/circuitboard/robotics + circuit = /obj/item/weapon/circuitboard/computer/robotics var/temp = null /obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index a1bf31d718e..cd113558b7c 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -6,7 +6,7 @@ icon_screen = "security" icon_keyboard = "security_key" req_one_access = list(access_security, access_forensics_lockers) - circuit = /obj/item/weapon/circuitboard/secure_data + circuit = /obj/item/weapon/circuitboard/computer/secure_data var/obj/item/weapon/card/id/scan = null var/authenticated = null var/rank = null diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 70442f0dbbc..b6e5672e8f3 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -3,7 +3,7 @@ desc = "Used to access the station's automated alert system." icon_screen = "alert:0" icon_keyboard = "atmos_key" - circuit = /obj/item/weapon/circuitboard/stationalert + circuit = /obj/item/weapon/circuitboard/computer/stationalert var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list()) /obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 1732f1ea7fb..cc914875006 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -1,67 +1,78 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. - name = "machine frame" +/obj/structure/frame + name = "frame" icon = 'icons/obj/stock_parts.dmi' icon_state = "box_0" density = 1 anchored = 1 - use_power = 0 var/obj/item/weapon/circuitboard/circuit = null + var/state = 1 + +/obj/structure/frame/examine(user) + ..() + if(circuit) + user << "It has \a [circuit] installed." + +/obj/structure/frame/machine + name = "machine frame" var/list/components = null var/list/req_components = null var/list/req_component_names = null // user-friendly names of components - var/state = 1 -// unfortunately, we have to instance the objects really quickly to get the names -// fortunately, this is only called once when the board is added and the items are immediately GC'd -// and none of the parts do much in their constructors -/obj/machinery/constructable_frame/proc/update_namelist() +/obj/structure/frame/machine/examine(user) + ..() + if(state == 3 && req_components && req_component_names) + var/hasContent = 0 + var/requires = "It requires" + + for(var/i = 1 to req_components.len) + var/tname = req_components[i] + var/amt = req_components[tname] + if(amt == 0) + continue + var/use_and = i == req_components.len + requires += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" + hasContent = 1 + + if(hasContent) + user << requires + "." + else + user << "It does not require any more components." + +/obj/structure/frame/machine/proc/update_namelist() if(!req_components) return req_component_names = new() for(var/tname in req_components) - var/path = tname - var/obj/O = new path() - req_component_names[tname] = O.name + if(ispath(tname, /obj/item/stack)) + var/obj/item/stack/S = tname + var/singular_name = initial(S.singular_name) + if(singular_name) + req_component_names[tname] = singular_name + else + req_component_names[tname] = initial(S.name) + else + var/obj/O = tname + req_component_names[tname] = initial(O.name) -/obj/machinery/constructable_frame/proc/get_req_components_amt() +/obj/structure/frame/machine/proc/get_req_components_amt() var/amt = 0 for(var/path in req_components) amt += req_components[path] return amt -// update description of required components remaining -/obj/machinery/constructable_frame/proc/update_req_desc() - if(!req_components || !req_component_names) - return - - var/hasContent = 0 - desc = "Requires" - for(var/i = 1 to req_components.len) - var/tname = req_components[i] - var/amt = req_components[tname] - if(amt == 0) - continue - var/use_and = i == req_components.len - desc += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" - hasContent = 1 - - if(!hasContent) - desc = "Does not require any more components." - else - desc += "." - -/obj/machinery/constructable_frame/machine_frame/attackby(obj/item/P, mob/user, params) +/obj/structure/frame/machine/attackby(obj/item/P, mob/user, params) if(P.crit_fail) user << "This part is faulty, you cannot add this to the machine!" return switch(state) if(1) - if(istype(P, /obj/item/weapon/circuitboard)) + if(istype(P, /obj/item/weapon/circuitboard/machine)) user << "The frame needs wiring first!" - return + + else if(istype(P, /obj/item/weapon/circuitboard)) + user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.get_amount() >= 5) @@ -102,26 +113,26 @@ user << "You [anchored ? "un" : ""]secure [name]." anchored = !anchored - if(istype(P, /obj/item/weapon/circuitboard)) + if(istype(P, /obj/item/weapon/circuitboard/machine)) if(!anchored) user << "The frame needs to be secured first!" return - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "machine") - if(!user.drop_item()) - return - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You add the circuit board to the frame." - circuit = P - P.loc = src - icon_state = "box_2" - state = 3 - components = list() - req_components = circuit.req_components.Copy() - update_namelist() - update_req_desc() - else - user << "This frame does not accept circuit boards of this type!" + var/obj/item/weapon/circuitboard/machine/B = P + if(!user.drop_item()) + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You add the circuit board to the frame." + circuit = B + B.loc = src + icon_state = "box_2" + state = 3 + components = list() + req_components = B.req_components.Copy() + update_namelist() + + else if(istype(P, /obj/item/weapon/circuitboard)) + user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/weapon/wirecutters)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) user << "You remove the cables." @@ -191,31 +202,35 @@ for(var/obj/item/weapon/stock_parts/part in added_components) components += part user << "[part.name] applied." - replacer.play_rped_sound() - - update_req_desc() + if(added_components.len) + replacer.play_rped_sound() return if(istype(P, /obj/item) && get_req_components_amt()) for(var/I in req_components) if(istype(P, I) && (req_components[I] > 0)) - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CP = P - var/cable_color = CP.item_color - if(CP.use(1)) - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, 1, cable_color) - components += CC - req_components[I]-- - update_req_desc() - else - user << "You need more cable!" + if(istype(P, /obj/item/stack)) + var/obj/item/stack/S = P + var/used_amt = min(round(S.get_amount()), req_components[I]) + + if(used_amt && S.use(used_amt)) + var/obj/item/stack/NS = locate(S.merge_type) in components + + if(!NS) + NS = new S.merge_type(src, used_amt) + components += NS + else + NS.add(used_amt) + + req_components[I] -= used_amt + user << "You add [P] to [src]." return if(!user.drop_item()) break + user << "You add [P] to [src]." P.loc = src components += P req_components[I]-- - update_req_desc() return 1 user << "You cannot add that to the machine!" return 0 @@ -224,318 +239,61 @@ //Machine Frame Circuit Boards /*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -Note: Once everything is added to the public areas, will add m_amt and g_amt to circuit boards since autolathe won't be able -to destroy them and players will be able to make replacements. */ -/obj/item/weapon/circuitboard/vendor - name = "circuit board (Booze-O-Mat Vendor)" - build_path = /obj/machinery/vending/boozeomat - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/vending_refill/boozeomat = 3) +/obj/item/weapon/circuitboard/machine + var/list/req_components = null - var/list/names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", - /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", - /obj/machinery/vending/snack = "Getmore Chocolate Corp", - /obj/machinery/vending/cola = "Robust Softdrinks", - /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/autodrobe = "AutoDrobe") +/obj/item/weapon/circuitboard/machine/proc/apply_default_parts(obj/machinery/M) + if(!req_components) + return -/obj/item/weapon/circuitboard/vendor/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - set_type(pick(names_paths), user) + M.component_parts = list(src) + loc = null + + for(var/comp_path in req_components) + var/comp_amt = req_components[comp_path] + if(!comp_amt) + continue + + if(ispath(comp_path, /obj/item/stack)) + M.component_parts += new comp_path(null, comp_amt) + else + for(var/i in 1 to comp_amt) + M.component_parts += new comp_path(null) + + M.RefreshParts() -/obj/item/weapon/circuitboard/vendor/proc/set_type(typepath, mob/user) - build_path = typepath - name = "circuit board ([names_paths[build_path]] Vendor)" - user << "You set the board to [names_paths[build_path]]." - req_components = list(text2path("/obj/item/weapon/vending_refill/[copytext("[build_path]", 24)]") = 3) //Never before has i used a method as horrible as this one, im so sorry - -/obj/item/weapon/circuitboard/announcement_system - name = "circuit board (Announcement System)" - build_path = /obj/machinery/announcement_system - board_type = "machine" - origin_tech = "programming=3;bluespace=2" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/smes +/obj/item/weapon/circuitboard/machine/smes name = "circuit board (SMES)" build_path = /obj/machinery/power/smes - board_type = "machine" origin_tech = "programming=4;powerstorage=5;engineering=5" req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/weapon/stock_parts/cell = 5, /obj/item/weapon/stock_parts/capacitor = 1) -/obj/item/weapon/circuitboard/emitter - name = "circuit board (Emitter)" - build_path = /obj/machinery/power/emitter - board_type = "machine" - origin_tech = "programming=4;powerstorage=5;engineering=5" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/power_compressor - name = "circuit board (Power Compressor)" - build_path = /obj/machinery/power/compressor - board_type = "machine" - origin_tech = "programming=4;powerstorage=5;engineering=4" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/manipulator = 6) - -/obj/item/weapon/circuitboard/power_turbine - name = "circuit board (Power Turbine)" - build_path = /obj/machinery/power/turbine - board_type = "machine" - origin_tech = "programming=4;powerstorage=4;engineering=5" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/capacitor = 6) - -/obj/item/weapon/circuitboard/mech_recharger - name = "circuit board (Mechbay Recharger)" - build_path = /obj/machinery/mech_bay_recharge_port - board_type = "machine" - origin_tech = "programming=3;powerstorage=4;engineering=4" - req_components = list( - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/capacitor = 5) - -/obj/item/weapon/circuitboard/teleporter_hub +/obj/item/weapon/circuitboard/machine/teleporter_hub name = "circuit board (Teleporter Hub)" build_path = /obj/machinery/teleport/hub - board_type = "machine" origin_tech = "programming=3;engineering=5;bluespace=5;materials=4" req_components = list( /obj/item/weapon/ore/bluespace_crystal = 3, /obj/item/weapon/stock_parts/matter_bin = 1) -/obj/item/weapon/circuitboard/teleporter_station +/obj/item/weapon/circuitboard/machine/teleporter_station name = "circuit board (Teleporter Station)" build_path = /obj/machinery/teleport/station - board_type = "machine" origin_tech = "programming=4;engineering=4;bluespace=4" req_components = list( /obj/item/weapon/ore/bluespace_crystal = 2, /obj/item/weapon/stock_parts/capacitor = 2, /obj/item/weapon/stock_parts/console_screen = 1) -/obj/item/weapon/circuitboard/telesci_pad - name = "circuit board (Telepad)" - build_path = /obj/machinery/telepad - board_type = "machine" - origin_tech = "programming=4;engineering=3;materials=3;bluespace=4" - req_components = list( - /obj/item/weapon/ore/bluespace_crystal = 2, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/sleeper - name = "circuit board (Sleeper)" - build_path = /obj/machinery/sleeper - board_type = "machine" - origin_tech = "programming=3;biotech=2;engineering=3;materials=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 2) - -/obj/item/weapon/circuitboard/cryo_tube - name = "circuit board (Cryotube)" - build_path = /obj/machinery/atmospherics/components/unary/cryo_cell - board_type = "machine" - origin_tech = "programming=4;biotech=3;engineering=4" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 4) - -/obj/item/weapon/circuitboard/thermomachine - name = "circuit board (Thermomachine)" - desc = "You can use a screwdriver to switch between heater and freezer." - board_type = "machine" - origin_tech = "programming=3;plasmatech=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/micro_laser = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/thermomachine/attackby(obj/item/I, mob/user, params) - var/obj/item/weapon/circuitboard/freezer = /obj/item/weapon/circuitboard/thermomachine/freezer - var/obj/item/weapon/circuitboard/heater = /obj/item/weapon/circuitboard/thermomachine/heater - var/obj/item/weapon/circuitboard/newtype - - if(istype(I, /obj/item/weapon/screwdriver)) - var/new_setting = "Heater" - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(build_path == initial(heater.build_path)) - newtype = freezer - new_setting = "Freezer" - else - newtype = heater - name = initial(newtype.name) - build_path = initial(newtype.build_path) - user << "You change the circuitboard setting to \"[new_setting]\"." - -/obj/item/weapon/circuitboard/thermomachine/freezer - name = "circuit board (Freezer)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer - -/obj/item/weapon/circuitboard/thermomachine/heater - name = "circuit board (Heater)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater - -/obj/item/weapon/circuitboard/space_heater - name = "circuit board (Space Heater)" - build_path = /obj/machinery/space_heater - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/stack/cable_coil = 3) - -/obj/item/weapon/circuitboard/biogenerator - name = "circuit board (Biogenerator)" - build_path = /obj/machinery/biogenerator - board_type = "machine" - origin_tech = "programming=3;biotech=2;materials=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/hydroponics - name = "circuit board (Hydroponics Tray)" - build_path = /obj/machinery/hydroponics/constructable - board_type = "machine" - origin_tech = "programming=1;biotech=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/microwave - name = "circuit board (Microwave)" - build_path = /obj/machinery/microwave - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/gibber - name = "circuit board (Gibber)" - build_path = /obj/machinery/gibber - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/tesla_coil - name = "circuit board (Tesla Coil)" - build_path = /obj/machinery/power/tesla_coil - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/grounding_rod - name = "circuit board (Grounding Rod)" - build_path = /obj/machinery/power/grounding_rod - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/processor - name = "circuit board (Food processor)" - build_path = /obj/machinery/processor - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/recycler - name = "circuit board (Recycler)" - build_path = /obj/machinery/recycler - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/seed_extractor - name = "circuit board (Seed Extractor)" - build_path = /obj/machinery/seed_extractor - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/smartfridge - name = "circuit board (Smartfridge)" - build_path = /obj/machinery/smartfridge - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1) - -/obj/item/weapon/circuitboard/smartfridge/New(loc, new_type) - if(new_type) - build_path = new_type - -/obj/item/weapon/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - var/list/fridges = list(/obj/machinery/smartfridge = "default", - /obj/machinery/smartfridge/drinks = "drinks", - /obj/machinery/smartfridge/extract = "slimes", - /obj/machinery/smartfridge/chemistry = "chems", - /obj/machinery/smartfridge/chemistry/virology = "viruses") - - var/position = fridges.Find(build_path, fridges) - position = (position == fridges.len) ? 1 : (position + 1) - build_path = fridges[position] - user << "You set the board to [fridges[build_path]]." - -/obj/item/weapon/circuitboard/monkey_recycler - name = "circuit board (Monkey Recycler)" - build_path = /obj/machinery/monkey_recycler - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/holopad - name = "circuit board (AI Holopad)" - build_path = /obj/machinery/hologram/holopad - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/chem_dispenser +/obj/item/weapon/circuitboard/machine/chem_dispenser name = "circuit board (Portable Chem Dispenser)" build_path = /obj/machinery/chem_dispenser/constructable - board_type = "machine" origin_tech = "materials=4;engineering=4;programming=4;plasmatech=3;biotech=3" req_components = list( /obj/item/weapon/stock_parts/matter_bin = 2, @@ -544,269 +302,12 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/stock_parts/console_screen = 1, /obj/item/weapon/stock_parts/cell = 1) -/obj/item/weapon/circuitboard/chem_master - name = "circuit board (Chem Master 2999)" - build_path = /obj/machinery/chem_master/constructable - board_type = "machine" - origin_tech = "materials=2;programming=2;biotech=1" +/obj/item/weapon/circuitboard/machine/telesci_pad + name = "circuit board (Telepad)" + build_path = /obj/machinery/telepad + origin_tech = "programming=4;engineering=3;materials=3;bluespace=4" req_components = list( - /obj/item/weapon/reagent_containers/glass/beaker = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/chem_heater - name = "circuit board (Chemical Heater)" - build_path = /obj/machinery/chem_heater - board_type = "machine" - origin_tech = "materials=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -//Almost the same recipe as destructive analyzer to give people choices. -/obj/item/weapon/circuitboard/experimentor - name = "circuit board (E.X.P.E.R.I-MENTOR)" - build_path = /obj/machinery/r_n_d/experimentor - board_type = "machine" - origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/micro_laser = 2) - - -/obj/item/weapon/circuitboard/destructive_analyzer - name = "circuit board (Destructive Analyzer)" - build_path = /obj/machinery/r_n_d/destructive_analyzer - board_type = "machine" - origin_tech = "magnets=2;engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1) - -/obj/item/weapon/circuitboard/autolathe - name = "circuit board (Autolathe)" - build_path = /obj/machinery/autolathe - board_type = "machine" - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 3, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/protolathe - name = "circuit board (Protolathe)" - build_path = /obj/machinery/r_n_d/protolathe - board_type = "machine" - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/reagent_containers/glass/beaker = 2) - - -/obj/item/weapon/circuitboard/circuit_imprinter - name = "circuit board (Circuit Imprinter)" - build_path = /obj/machinery/r_n_d/circuit_imprinter - board_type = "machine" - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/reagent_containers/glass/beaker = 2) - -/obj/item/weapon/circuitboard/pacman - name = "circuit board (PACMAN-type Generator)" - build_path = /obj/machinery/power/port_gen/pacman - board_type = "machine" - origin_tech = "programming=3;powerstorage=3;plasmatech=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/pacman/super - name = "circuit board (SUPERPACMAN-type Generator)" - build_path = /obj/machinery/power/port_gen/pacman/super - origin_tech = "programming=3;powerstorage=4;engineering=4" - -/obj/item/weapon/circuitboard/pacman/mrs - name = "circuit board (MRSPACMAN-type Generator)" - build_path = "/obj/machinery/power/port_gen/pacman/mrs" - origin_tech = "programming=3;powerstorage=5;engineering=5" - -obj/item/weapon/circuitboard/rdserver - name = "circuit board (R&D Server)" - build_path = /obj/machinery/r_n_d/server - board_type = "machine" - origin_tech = "programming=3" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/scanning_module = 1) - -/obj/item/weapon/circuitboard/mechfab - name = "circuit board (Exosuit Fabricator)" - build_path = /obj/machinery/mecha_part_fabricator - board_type = "machine" - origin_tech = "programming=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/clonepod - name = "circuit board (Clone Pod)" - build_path = /obj/machinery/clonepod - board_type = "machine" - origin_tech = "programming=3;biotech=3" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/scanning_module = 2, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/clonescanner - name = "circuit board (Cloning Scanner)" - build_path = /obj/machinery/dna_scannernew - board_type = "machine" - origin_tech = "programming=2;biotech=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/stack/cable_coil = 2,) - -/obj/item/weapon/circuitboard/cyborgrecharger - name = "circuit board (Cyborg Recharger)" - build_path = /obj/machinery/recharge_station - board_type = "machine" - origin_tech = "powerstorage=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 2, - /obj/item/weapon/stock_parts/cell = 1, - /obj/item/weapon/stock_parts/manipulator = 1,) - -/obj/item/weapon/circuitboard/recharger - name = "circuit board (Weapon Recharger)" - build_path = /obj/machinery/recharger - board_type = "machine" - origin_tech = "powerstorage=3;engineering=3;materials=4" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1,) - -// Telecomms circuit boards: - -/obj/item/weapon/circuitboard/telecomms/receiver - name = "circuit board (Subspace Receiver)" - build_path = /obj/machinery/telecomms/receiver - board_type = "machine" - origin_tech = "programming=2;engineering=2;bluespace=1" - req_components = list( - /obj/item/weapon/stock_parts/subspace/ansible = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/micro_laser = 1) - -/obj/item/weapon/circuitboard/telecomms/hub - name = "circuit board (Hub Mainframe)" - build_path = /obj/machinery/telecomms/hub - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) - -/obj/item/weapon/circuitboard/telecomms/relay - name = "circuit board (Relay Mainframe)" - build_path = /obj/machinery/telecomms/relay - board_type = "machine" - origin_tech = "programming=2;engineering=2;bluespace=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) - -/obj/item/weapon/circuitboard/telecomms/bus - name = "circuit board (Bus Mainframe)" - build_path = /obj/machinery/telecomms/bus - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/ore/bluespace_crystal = 2, + /obj/item/weapon/stock_parts/capacitor = 1, /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) - -/obj/item/weapon/circuitboard/telecomms/processor - name = "circuit board (Processor Unit)" - build_path = /obj/machinery/telecomms/processor - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 3, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/subspace/treatment = 2, - /obj/item/weapon/stock_parts/subspace/analyzer = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/amplifier = 1) - -/obj/item/weapon/circuitboard/telecomms/server - name = "circuit board (Telecommunication Server)" - build_path = /obj/machinery/telecomms/server - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) - -/obj/item/weapon/circuitboard/telecomms/broadcaster - name = "circuit board (Subspace Broadcaster)" - build_path = /obj/machinery/telecomms/broadcaster - board_type = "machine" - origin_tech = "programming=2;engineering=2;bluespace=1" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/subspace/crystal = 1, - /obj/item/weapon/stock_parts/micro_laser/high = 2) -/obj/item/weapon/circuitboard/ore_redemption - name = "circuit board (Ore Redemption)" - build_path = /obj/machinery/mineral/ore_redemption - board_type = "machine" - origin_tech = "programming=1;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/device/assembly/igniter = 1) - -/obj/item/weapon/circuitboard/mining_equipment_vendor - name = "circuit board (Mining Equipment Vendor)" - build_path = /obj/machinery/mineral/equipment_vendor - board_type = "machine" - origin_tech = "programming=1;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/matter_bin = 3) - -/obj/item/weapon/circuitboard/mining_equipment_vendor/golem - name = "circuit board (Golem Ship Equipment Vendor)" - build_path = /obj/machinery/mineral/equipment_vendor/golem - -/obj/item/weapon/circuitboard/plantgenes - name = "circuit board (Plant DNA Manipulator)" - build_path = /obj/machinery/plantgenes - board_type = "machine" - origin_tech = "programming=2;biotech=3" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/scanning_module = 1,) \ No newline at end of file + /obj/item/weapon/stock_parts/console_screen = 1) \ No newline at end of file diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index ed656b1a1df..45f7b995486 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -15,16 +15,19 @@ /obj/machinery/dna_scannernew/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonescanner(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/clonescanner(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/clonescanner + name = "circuit board (Cloning Scanner)" + build_path = /obj/machinery/dna_scannernew + origin_tech = "programming=2;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/stack/cable_coil = 2) /obj/machinery/dna_scannernew/RefreshParts() scan_level = 0 @@ -108,7 +111,7 @@ || locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \ || locate(/obj/machinery/computer/cloning, get_step(src, EAST)) \ || locate(/obj/machinery/computer/cloning, get_step(src, WEST))) - if(!occupant.suiciding && !(occupant.disabilities & NOCLONE)) + if(!occupant.suiciding && !(occupant.disabilities & NOCLONE) && !occupant.hellbound) occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) var/obj/machinery/computer/scan_consolenew/console diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index c2743105444..dc9bf8e0115 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -109,7 +109,7 @@ metal_cost = 0 glass_cost = 0 cooldownTime = 300 //30 seconds - dispense_type = /obj/item/unactivated_swarmer + dispense_type = /obj/item/device/unactivated_swarmer begin_create_message = "hums softly as an interface appears above it, scrolling by at unreadable speed." end_create_message = "materializes a strange shell, which drops to the ground." recharging_text = "Its lights are slowly increasing in brightness." diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 5d03cc6f5f2..49bf6e7d916 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -45,10 +45,15 @@ var/const/HOLOPAD_MODE = RANGE_BASED /obj/machinery/hologram/holopad/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/holopad(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/holopad(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/holopad + name = "circuit board (AI Holopad)" + build_path = /obj/machinery/hologram/holopad + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + /obj/machinery/hologram/holopad/RefreshParts() var/holograph_range = 4 diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 7751dcb8bb6..77028a43d1a 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -347,7 +347,7 @@ Class Procs: if(.) deconstruction() playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) + var/obj/structure/frame/machine/M = new /obj/structure/frame/machine(loc) transfer_fingerprints_to(M) M.state = 2 M.icon_state = "box_1" @@ -396,7 +396,7 @@ Class Procs: var/shouldplaysound = 0 if(istype(W) && component_parts) if(panel_open || W.works_from_distance) - var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts + var/obj/item/weapon/circuitboard/machine/CB = locate(/obj/item/weapon/circuitboard/machine) in component_parts var/P if(W.works_from_distance) display_parts(user) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 3ae2ded9223..fe5d9ac35a8 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -12,10 +12,14 @@ /obj/machinery/recharger/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/recharger() - component_parts += new /obj/item/weapon/stock_parts/capacitor() - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recharger(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/recharger + name = "circuit board (Weapon Recharger)" + build_path = /obj/machinery/recharger + origin_tech = "powerstorage=3;engineering=3;materials=4" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) /obj/machinery/recharger/RefreshParts() for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index ae9a16c729d..d7397ebabf4 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -7,7 +7,6 @@ use_power = 1 idle_power_usage = 5 active_power_usage = 1000 - var/circuitboard = "/obj/item/weapon/circuitboard/cyborgrecharger" req_access = list(access_robotics) var/recharge_speed var/repairs @@ -15,15 +14,19 @@ /obj/machinery/recharge_station/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/cyborgrecharger(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/cyborgrecharger(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/cyborgrecharger + name = "circuit board (Cyborg Recharger)" + build_path = /obj/machinery/recharge_station + origin_tech = "powerstorage=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 2, + /obj/item/weapon/stock_parts/cell = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + /obj/machinery/recharge_station/RefreshParts() recharge_speed = 0 repairs = 0 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 542975781f3..a37a0e4d14e 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -17,16 +17,20 @@ var/const/SAFETY_COOLDOWN = 100 var/datum/material_container/materials /obj/machinery/recycler/New() - // On us ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/recycler(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_PLASMA=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_URANIUM=1, MAT_BANANIUM=1)) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recycler(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/recycler + name = "circuit board (Recycler)" + build_path = /obj/machinery/recycler + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + /obj/machinery/recycler/RefreshParts() var/amt_made = 0 var/mat_mod = 0 diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 6322b95731d..a204918d41b 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -21,7 +21,7 @@ density = 1 use_power = 1 idle_power_usage = 50 - circuit = /obj/item/weapon/circuitboard/slot_machine + circuit = /obj/item/weapon/circuitboard/computer/slot_machine var/money = 3000 //How much money it has CONSUMED var/plays = 0 var/working = 0 diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index b164bc08c20..ed76ccd8768 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -24,14 +24,19 @@ /obj/machinery/space_heater/New() ..() cell = new(src) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/space_heater(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/stack/cable_coil(null, 3) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/space_heater(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/space_heater + name = "circuit board (Space Heater)" + build_path = /obj/machinery/space_heater + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/stack/cable_coil = 3) + /obj/machinery/space_heater/construction() qdel(cell) cell = null diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 0485e45950e..61598ca32bc 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -14,7 +14,7 @@ var/universal_translate = 0 // set to 1 if it can translate nonhuman speech req_access = list(access_tcomsat) - circuit = "/obj/item/weapon/circuitboard/comm_server" + circuit = /obj/item/weapon/circuitboard/computer/comm_server /obj/machinery/computer/telecomms/server/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index f7ed78a1315..0fd04b25361 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -16,7 +16,7 @@ var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages - circuit = "/obj/item/weapon/circuitboard/comm_monitor" + circuit = /obj/item/weapon/circuitboard/computer/comm_monitor /obj/machinery/computer/telecomms/monitor/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm index 91106eae92e..c00bb1a412c 100644 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ b/code/game/machinery/telecomms/machines/broadcaster.dm @@ -19,7 +19,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept machinetype = 5 /*heatgen = 0 delay = 7*/ - circuitboard = "/obj/item/weapon/circuitboard/telecomms/broadcaster" /obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) // Don't broadcast rejected signals @@ -95,16 +94,19 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /obj/machinery/telecomms/broadcaster/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/broadcaster(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/crystal(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser/high(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser/high(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/broadcaster(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster + name = "circuit board (Subspace Broadcaster)" + build_path = /obj/machinery/telecomms/broadcaster + origin_tech = "programming=2;engineering=2;bluespace=1" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/crystal = 1, + /obj/item/weapon/stock_parts/micro_laser = 2) /obj/machinery/telecomms/broadcaster/Destroy() // In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore. diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm index 7b747d4d332..6c98596c884 100644 --- a/code/game/machinery/telecomms/machines/bus.dm +++ b/code/game/machinery/telecomms/machines/bus.dm @@ -18,7 +18,6 @@ idle_power_usage = 50 machinetype = 2 //heatgen = 20 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/bus" netspeed = 40 var/change_frequency = 0 @@ -52,14 +51,17 @@ /obj/machinery/telecomms/bus/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/bus(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/bus(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/bus + name = "circuit board (Bus Mainframe)" + build_path = /obj/machinery/telecomms/bus + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1) diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm index b52adc8cb8d..d5aebbc45fc 100644 --- a/code/game/machinery/telecomms/machines/hub.dm +++ b/code/game/machinery/telecomms/machines/hub.dm @@ -19,7 +19,6 @@ idle_power_usage = 80 machinetype = 7 //heatgen = 40 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/hub" long_range_link = 1 netspeed = 40 @@ -36,16 +35,17 @@ /obj/machinery/telecomms/hub/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/hub(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/hub(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/hub + name = "circuit board (Hub Mainframe)" + build_path = /obj/machinery/telecomms/hub + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/filter = 2) diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm index 18f8ee4d3e0..71cfc2ec5a6 100644 --- a/code/game/machinery/telecomms/machines/processor.dm +++ b/code/game/machinery/telecomms/machines/processor.dm @@ -18,7 +18,6 @@ machinetype = 3 //heatgen = 100 //delay = 5 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/processor" var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals /obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) @@ -38,22 +37,20 @@ /obj/machinery/telecomms/processor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/processor(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/analyzer(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/amplifier(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() - - - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/processor(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/processor + name = "circuit board (Processor Unit)" + build_path = /obj/machinery/telecomms/processor + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 3, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/treatment = 2, + /obj/item/weapon/stock_parts/subspace/analyzer = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/amplifier = 1) //Preset Processors diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index b1dc2b53c92..095bb0cfca2 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -17,7 +17,6 @@ idle_power_usage = 30 machinetype = 1 //heatgen = 0 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/receiver" /obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) @@ -54,16 +53,18 @@ /obj/machinery/telecomms/receiver/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/receiver(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/ansible(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser/high(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/receiver(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/receiver + name = "circuit board (Subspace Receiver)" + build_path = /obj/machinery/telecomms/receiver + origin_tech = "programming=2;engineering=2;bluespace=1" + req_components = list( + /obj/item/weapon/stock_parts/subspace/ansible = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/micro_laser = 1) diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm index 51d76d47255..a11e521eea3 100644 --- a/code/game/machinery/telecomms/machines/relay.dm +++ b/code/game/machinery/telecomms/machines/relay.dm @@ -16,7 +16,6 @@ idle_power_usage = 30 machinetype = 8 //heatgen = 0 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/relay" netspeed = 5 long_range_link = 1 var/broadcasting = 1 @@ -48,16 +47,17 @@ /obj/machinery/telecomms/relay/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/relay(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/relay(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/relay + name = "circuit board (Relay Mainframe)" + build_path = /obj/machinery/telecomms/relay + origin_tech = "programming=2;engineering=2;bluespace=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/filter = 2) diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index 9e54644b1f1..b68e618daf3 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -17,7 +17,6 @@ idle_power_usage = 15 machinetype = 4 //heatgen = 50 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/server" var/list/log_entries = list() var/list/stored_names = list() var/list/TrafficActions = list() @@ -35,15 +34,19 @@ /obj/machinery/telecomms/server/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/server(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/server(null) + B.apply_default_parts(src) server_radio = new() +/obj/item/weapon/circuitboard/machine/telecomms/server + name = "circuit board (Telecommunication Server)" + build_path = /obj/machinery/telecomms/server + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1) + /obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(signal.data["message"]) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 161de617ea5..21aece34bb8 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -29,7 +29,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() var/toggled = 1 // Is it toggled on var/on = 1 var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) - var/circuitboard = null // string pointing to a circuitboard type var/hide = 0 // Is it a hidden machine? var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 38c914ecaf5..bb5479c82c9 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -3,7 +3,7 @@ desc = "Used to control a linked teleportation Hub and Station." icon_screen = "teleport" icon_keyboard = "teleport_key" - circuit = "/obj/item/weapon/circuitboard/teleporter" + circuit = /obj/item/weapon/circuitboard/computer/teleporter var/obj/item/device/gps/locked = null var/regime_set = "Teleporter" var/id = null @@ -256,7 +256,7 @@ ..() link_power_station() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/teleporter_hub(null) + component_parts += new /obj/item/weapon/circuitboard/machine/teleporter_hub(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) @@ -364,7 +364,7 @@ /obj/machinery/teleport/station/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/teleporter_station(null) + component_parts += new /obj/item/weapon/circuitboard/machine/teleporter_station(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/stock_parts/capacitor(null) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 30cce02c00d..55479c7e462 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -58,14 +58,8 @@ ..() wires = new /datum/wires/vending(src) if(refill_canister) //constructable vending machine - component_parts = list() - var/obj/item/weapon/circuitboard/vendor/V = new(null) - V.set_type(type) - component_parts += V - component_parts += new refill_canister - component_parts += new refill_canister - component_parts += new refill_canister - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/vendor(null) + B.apply_default_parts(src) else build_inventory(products) build_inventory(contraband, 1) @@ -78,6 +72,44 @@ last_slogan = world.time + rand(0, slogan_delay) power_change() +/obj/item/weapon/circuitboard/machine/vendor + name = "circuit board (Booze-O-Mat Vendor)" + build_path = /obj/machinery/vending/boozeomat + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/vending_refill/boozeomat = 3) + + var/list/names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", + /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", + /obj/machinery/vending/snack = "Getmore Chocolate Corp", + /obj/machinery/vending/cola = "Robust Softdrinks", + /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", + /obj/machinery/vending/autodrobe = "AutoDrobe") + +/obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/position = names_paths.Find(build_path) + position = (position == names_paths.len) ? 1 : (position + 1) + var/typepath = names_paths[position] + + user << "You set the board to \"[names_paths[typepath]]\"." + set_type(typepath) + else + return ..() + +/obj/item/weapon/circuitboard/machine/vendor/proc/set_type(var/obj/machinery/vending/typepath) + build_path = typepath + name = "circuit board ([names_paths[build_path]] Vendor)" + req_components = list(initial(typepath.refill_canister) = 3) + +/obj/item/weapon/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) + for(var/typepath in names_paths) + if(istype(M, typepath)) + set_type(typepath) + break + ..() + + /obj/machinery/vending/Destroy() qdel(wires) wires = null diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index f3f730d4bc7..c3847474e60 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -26,17 +26,18 @@ /obj/machinery/mech_bay_recharge_port/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mech_recharger(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mech_recharger(null) + B.apply_default_parts(src) recharging_turf = get_step(loc, dir) +/obj/item/weapon/circuitboard/machine/mech_recharger + name = "circuit board (Mechbay Recharger)" + build_path = /obj/machinery/mech_bay_recharge_port + origin_tech = "programming=3;powerstorage=4;engineering=4" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/capacitor = 5) + /obj/machinery/mech_bay_recharge_port/RefreshParts() var/MC for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) @@ -82,7 +83,7 @@ desc = "Used to control mechbay power ports." icon_screen = "recharge_comp" icon_keyboard = "rd_key" - circuit = /obj/item/weapon/circuitboard/mech_bay_power_console + circuit = /obj/item/weapon/circuitboard/computer/mech_bay_power_console var/obj/machinery/mech_bay_recharge_port/recharge_port /obj/machinery/computer/mech_bay_power_console/attack_ai(mob/user) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 5748be75618..5de9c676059 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -46,16 +46,20 @@ /obj/machinery/mecha_part_fabricator/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mechfab(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mechfab(null) + B.apply_default_parts(src) files = new /datum/research(src) //Setup the research data holder. +/obj/item/weapon/circuitboard/machine/mechfab + name = "circuit board (Exosuit Fabricator)" + build_path = /obj/machinery/mecha_part_fabricator + origin_tech = "programming=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/machinery/mecha_part_fabricator/RefreshParts() var/T = 0 diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index ab7641dd681..0fc08605bcf 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -4,7 +4,7 @@ icon_screen = "mecha" icon_keyboard = "tech_key" req_access = list(access_robotics) - circuit = "/obj/item/weapon/circuitboard/mecha_control" + circuit = /obj/item/weapon/circuitboard/computer/mecha_control var/list/located = list() var/screen = 0 var/stored_data diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index c14ddd5470c..40037689a9e 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -321,7 +321,6 @@ icon = 'icons/obj/module.dmi' icon_state = "std_mod" item_state = "electronic" - board_type = "other" flags = CONDUCT force = 5 w_class = 2 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 84f474abe0a..76cf1ff5a33 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -26,11 +26,12 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20), \ new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), \ null, \ - new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 40, one_per_turf = 1, on_floor = 1), \ + null, \ + new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 25, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 25, one_per_turf = 1, on_floor = 1), \ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index b4e7b5dd5ef..7da9e29ce27 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -64,6 +64,7 @@ return if (!src || get_amount() <= 0) user << browse(null, "window=stack") + return user.set_machine(src) //for correct work of onclose var/t1 = text("Constructions from []Amount Left: []
", src, src.get_amount()) for(var/i=1;i<=recipes.len,i++) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index f7ffd73e691..6ff3d3ff714 100755 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -9,6 +9,7 @@ * Snap pops * Mech prizes * AI core prizes + * Toy codex gigas * Skeleton toys * Cards * Toy nuke @@ -695,6 +696,29 @@ return ..() +/obj/item/toy/codex_gigas + name = "Toy Codex Gigas" + desc = "A tool to help you write fictional devils!" + icon = 'icons/obj/library.dmi' + icon_state = "demonomicon" + w_class = 2 + var/cooldown = 0 + +/obj/item/toy/codex_gigas/attack_self(mob/user) + if(!cooldown) + var/datum/devilinfo/devil = randomDevilInfo() + user << "You press the button on [src]." + cooldown = 1 + playsound(user, 'sound/machines/click.ogg', 20, 1) + src.loc.visible_message("\icon[src]Some fun facts about: [devil.truename]") + src.loc.visible_message("[lawlorify[LORE][devil.bane]]") + src.loc.visible_message("[lawlorify[LORE][devil.obligation]]") + src.loc.visible_message("[lawlorify[LORE][devil.ban]]") + src.loc.visible_message("[lawlorify[LORE][devil.banish]]") + spawn(60) cooldown = 0 + return + ..() + /obj/item/toy/talking name = "talking action figure" desc = "A generic action figure modeled after nothing in particular." diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 9e5ecd557b7..5517716c4bf 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -463,7 +463,7 @@ busy = 0 update_icon() return - if(!H.suiciding && !(H.disabilities & NOCLONE)) + if(!H.suiciding && !(H.disabilities & NOCLONE)&& !H.hellbound) H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest...") @@ -497,6 +497,8 @@ if (H.suiciding || (H.disabilities & NOCLONE)) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." + else if (H.hellbound) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existance. Further attempts futile." else if (tplus > tlimit) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile." else if (!H.getorgan(/obj/item/organ/heart)) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 99b3a72e6ae..6538bba7f06 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -804,7 +804,7 @@ /obj/item/weapon/storage/box/rndboards/New() ..() - new /obj/item/weapon/circuitboard/protolathe(src) - new /obj/item/weapon/circuitboard/destructive_analyzer(src) - new /obj/item/weapon/circuitboard/circuit_imprinter(src) - new /obj/item/weapon/circuitboard/rdconsole(src) + new /obj/item/weapon/circuitboard/machine/protolathe(src) + new /obj/item/weapon/circuitboard/machine/destructive_analyzer(src) + new /obj/item/weapon/circuitboard/machine/circuit_imprinter(src) + new /obj/item/weapon/circuitboard/computer/rdconsole(src) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index e8bbfbed48e..52d218bd81d 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -418,3 +418,64 @@ M.faction = user.faction.Copy() M.Copy_Parent(user, 100, user.health/2.5, 12, 30) M.GiveTarget(L) + + + + +/obj/item/weapon/twohanded/pitchfork + icon_state = "pitchfork0" + name = "pitchfork" + desc = "A simple tool used for moving hay." + force = 7 + throwforce = 15 + w_class = 4 + force_unwielded = 7 + force_wielded = 15 + attack_verb = list("attacked", "impaled", "pierced") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP + +/obj/item/weapon/twohanded/pitchfork/demonic + name = "demonic pitchfork" + desc = "A red pitchfork, it looks like the work of the devil." + force = 19 + throwforce = 24 + force_unwielded = 19 + force_wielded = 25 + +/obj/item/weapon/twohanded/pitchfork/demonic/greater + force = 24 + throwforce = 50 + force_unwielded = 24 + force_wielded = 34 + +/obj/item/weapon/twohanded/pitchfork/demonic/ascended + force = 100 + throwforce = 100 + force_unwielded = 100 + force_wielded = 500000 // Kills you DEAD. + +/obj/item/weapon/twohanded/pitchfork/update_icon() //Currently only here to fuck with the on-mob icons. + icon_state = "pitchfork[wielded]" + +/obj/item/weapon/twohanded/pitchfork/suicide_act(mob/user) + user.visible_message("[user] impales \himself in \his abdomen with [src]! It looks like \he's trying to commit suicide..") + return (BRUTELOSS) + +/obj/item/weapon/twohanded/pitchfork/demonic/pickup(mob/user) + if(istype(user, /mob/living)) + var/mob/living/U = user + if(!U.mind.devilinfo) + U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ + "\"As you pick up the [src] your arms ignite, reminding you of all your past sins.\"") + if(ishuman(U)) + var/mob/living/carbon/human/H = U + H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) + else + U.adjustFireLoss(rand(force/2,force)) + +/obj/item/weapon/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) + if(!user.mind.devilinfo) + user << "The [src] burns in your hands." + user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) + ..() diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index ef533fe16a1..0e0ff304900 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -246,3 +246,8 @@ atom/proc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/ qdel(src) else //If for some reason you use an empty card on an empty AI terminal. user << "There is no AI loaded on this terminal!" + + +/obj/item/weapon/circuitboard/aicore + name = "circuit board (AI core)" + origin_tech = "programming=4;biotech=2" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 60129c99d52..87773f725a3 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -699,6 +699,14 @@ var/global/BSACooldown = 0 if(!ai_number) usr << "No AIs located" //Just so you know the thing is actually working and not just ignoring you. +/datum/admins/proc/output_devil_info() + var/devil_number = 0 + for(var/D in ticker.mode.devils) + devil_number++ + usr << "Devil #[devil_number]:

" + ticker.mode.printdevilinfo(D) + if(!devil_number) + usr << "No Devils located" //Just so you know the thing is actually working and not just ignoring you. + /datum/admins/proc/manage_free_slots() if(!check_rights()) return diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index b8e4aee8728..220b1b4c9e9 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -437,7 +437,7 @@ if(M) dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" + dat += "FLW" dat += "Show Objective" else dat += "[wizard.name]([wizard.key])Wizard body destroyed!" @@ -592,6 +592,35 @@ dat += "PM" dat += "" + if(ticker.mode.devils.len) + dat += "
" + for(var/X in ticker.mode.devils) + var/datum/mind/devil = X + var/mob/M = devil.current + if(M) + dat += "" + dat += "" + dat += "" + dat += "" + else + dat += "" + dat += "" + dat += "
devils
[M.real_name] : [devil.devilinfo.truename][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PMShow Objective
Show all devil info
[devil.name] : [devil.devilinfo.truename] ([devil.key])devil body destroyed!
PM
" + + if(ticker.mode.sintouched.len) + dat += "
" + for(var/X in ticker.mode.sintouched) + var/datum/mind/sintouched = X + var/mob/M = sintouched.current + if(M) + dat += "" + dat += "" + dat += "" + else + dat += "" + dat += "" + dat += "
sintouched
[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PMShow Objective
[sintouched.name]([sintouched.key])sintouched body destroyed!
PM
" + var/list/blob_minds = list() for(var/mob/camera/blob/B in mob_list) blob_minds |= B.mind diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 012c704f2c3..4b0278dac25 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1608,6 +1608,9 @@ else if(href_list["adminchecklaws"]) output_ai_laws() + + else if(href_list["admincheckdevilinfo"]) + output_devil_info() else if(href_list["adminmoreinfo"]) var/mob/M = locate(href_list["adminmoreinfo"]) diff --git a/code/modules/admin/verbs/shuttles.dm b/code/modules/admin/verbs/shuttles.dm index 50f262dcb5f..2dc8e5820ee 100644 --- a/code/modules/admin/verbs/shuttles.dm +++ b/code/modules/admin/verbs/shuttles.dm @@ -51,7 +51,7 @@ src << "Something went wrong, the selected shuttle doesn't exist anymore." return - log_admin("[key_name_admin(usr)] - ShuttleDestroy: [M]") + log_admin("[key_name(usr)] - ShuttleDestroy: [M]") message_admins("[key_name_admin(usr)] has used ShuttleDestroy on [selected]
") feedback_add_details("admin_verb","SHTDEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -109,10 +109,8 @@ var/status = M.dockRoundstart() if(status) - log_admin("The imported shuttle [map]/[M] failed to travel to its roundstart \ - location (error code [status]). Please fix or delete the imported shuttle \ - before continuing any more shuttle import hijinks.") + message_admins("The imported shuttle [map]/[M] failed to travel to its roundstart location (error code [status]). Please fix or delete the imported shuttle before continuing any more shuttle import hijinks.") - log_admin("[key_name_admin(usr)] - ShuttleImport: [map] - [M]") + log_admin("[key_name(usr)] - ShuttleImport: [map] - [M]") message_admins("[key_name_admin(usr)] has used ShuttleImport: [map] - [M]
") feedback_add_details("admin_verb","SHTIMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index d896d93a9a3..cdd0e0fea57 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -22,14 +22,17 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/New() ..() initialize_directions = dir - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/cryo_tube(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/cryo_tube(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/cryo_tube + name = "circuit board (Cryotube)" + build_path = /obj/machinery/atmospherics/components/unary/cryo_cell + origin_tech = "programming=4;biotech=3;engineering=4" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 4) /obj/machinery/atmospherics/components/unary/cryo_cell/construction() ..(dir, dir) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index ed142bbf4ed..fc06e542cba 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -17,14 +17,37 @@ /obj/machinery/atmospherics/components/unary/thermomachine/New() ..() initialize_directions = dir - component_parts = list() - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/thermomachine + name = "circuit board (Thermomachine)" + desc = "You can use a screwdriver to switch between heater and freezer." + origin_tech = "programming=3;plasmatech=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params) + var/obj/item/weapon/circuitboard/machine/freezer = /obj/item/weapon/circuitboard/machine/thermomachine/freezer + var/obj/item/weapon/circuitboard/machine/heater = /obj/item/weapon/circuitboard/machine/thermomachine/heater + var/obj/item/weapon/circuitboard/machine/newtype + + if(istype(I, /obj/item/weapon/screwdriver)) + var/new_setting = "Heater" + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(build_path == initial(heater.build_path)) + newtype = freezer + new_setting = "Freezer" + else + newtype = heater + name = initial(newtype.name) + build_path = initial(newtype.build_path) + user << "You change the circuitboard setting to \"[new_setting]\"." + else + return ..() /obj/machinery/atmospherics/components/unary/thermomachine/construction() ..(dir,dir) @@ -169,7 +192,12 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer/New() ..() - component_parts += new /obj/item/weapon/circuitboard/thermomachine/freezer(null) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine/freezer(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/thermomachine/freezer + name = "circuit board (Freezer)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer /obj/machinery/atmospherics/components/unary/thermomachine/freezer/RefreshParts() ..() @@ -189,7 +217,12 @@ /obj/machinery/atmospherics/components/unary/thermomachine/heater/New() ..() - component_parts += new /obj/item/weapon/circuitboard/thermomachine/heater(null) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine/heater(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/thermomachine/heater + name = "circuit board (Heater)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater /obj/machinery/atmospherics/components/unary/thermomachine/heater/RefreshParts() ..() diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 17d563703d5..7b655fbdeb8 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -29,40 +29,12 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away return -/proc/generateMapList(filename, blacklist) +/proc/generateMapList(filename) var/list/potentialMaps = list() - var/list/blacklistedMaps = list() var/list/Lines = file2list(filename) if(!Lines.len) return - - if(blacklist) - var/list/Blines = file2list(blacklist) - for (var/t in Blines) - if (!t) - continue - - t = trim(t) - if (length(t) == 0) - continue - else if (copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - - if (pos) - name = lowertext(copytext(t, 1, pos)) - - else - name = lowertext(t) - - if (!name) - continue - - blacklistedMaps.Add(t) - for (var/t in Lines) if (!t) continue @@ -87,40 +59,49 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away potentialMaps.Add(t) + return potentialMaps - return (potentialMaps - blacklistedMaps) +/proc/seedRuins(z_level = 1, budget = 0, whitelist = /area/space, list/potentialRuins = space_ruins_templates) + var/overall_sanity = 100 + var/ruins = potentialRuins.Copy() -/proc/seedRuins(z_level = 1, ruin_number = 0, whitelist = /area/space, list/potentialRuins = space_ruins_templates) - ruin_number = min(ruin_number, potentialRuins.len) - - while(ruin_number) - var/sanity = 0 - var/valid = FALSE - var/datum/map_template/template = potentialRuins[pick(potentialRuins)] - while(!valid) - valid = TRUE - sanity++ - if(sanity > 100) - ruin_number-- - break + while(budget > 0 && overall_sanity > 0) + // Pick a ruin + var/datum/map_template/ruin/ruin = ruins[pick(ruins)] + // Can we afford it + if(ruin.cost > budget) + overall_sanity-- + continue + // If so, try to place it + var/sanity = 100 + // And if we can't fit it anywhere, give up, try again + while(sanity > 0) + sanity-- var/turf/T = locate(rand(25, world.maxx - 25), rand(25, world.maxy - 25), z_level) + var/valid = TRUE - for(var/turf/check in template.get_affected_turfs(T,1)) + for(var/turf/check in ruin.get_affected_turfs(T,1)) var/area/new_area = get_area(check) if(!(istype(new_area, whitelist))) valid = FALSE break - if(valid) - world.log << "Ruin \"[template.mappath]\" placed at ([T.x], [T.y], [T.z])" - var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) - R.Load(potentialRuins,template) - potentialRuins -= template - ruin_number -- + if(!valid) + continue - return + world.log << "Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])" + + var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) + R.Load(ruins,ruin) + budget -= ruin.cost + if(!ruin.allow_duplicates) + ruins -= ruin.name + break + + if(!overall_sanity) + world.log << "Ruin loader gave up with [budget] left to spend." /obj/effect/ruin_loader name = "random ruin" diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 472d2442557..4a3e5bdfec0 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -2,7 +2,7 @@ name = "supply console" desc = "Used to order supplies, approve requests, and control the shuttle." icon_screen = "supply" - circuit = /obj/item/weapon/circuitboard/cargo + circuit = /obj/item/weapon/circuitboard/computer/cargo var/requestonly = FALSE var/contraband = FALSE @@ -10,12 +10,12 @@ name = "supply request console" desc = "Used to request supplies from cargo." icon_screen = "request" - circuit = /obj/item/weapon/circuitboard/cargo/request + circuit = /obj/item/weapon/circuitboard/computer/cargo/request requestonly = TRUE /obj/machinery/computer/cargo/New() ..() - var/obj/item/weapon/circuitboard/cargo/board = circuit + var/obj/item/weapon/circuitboard/computer/cargo/board = circuit contraband = board.contraband emagged = board.emagged @@ -28,7 +28,7 @@ contraband = TRUE // This also permamently sets this on the circuit board - var/obj/item/weapon/circuitboard/cargo/board = circuit + var/obj/item/weapon/circuitboard/computer/cargo/board = circuit board.contraband = TRUE board.emagged = TRUE diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm index a41d5bd0f30..51a563918fb 100644 --- a/code/modules/cargo/exports/parts.dm +++ b/code/modules/cargo/exports/parts.dm @@ -13,4 +13,20 @@ /datum/export/solar/control_board cost = 150 unit_name = "solar panel control board" - export_types = list(/obj/item/weapon/circuitboard/solar_control) \ No newline at end of file + export_types = list(/obj/item/weapon/circuitboard/computer/solar_control) + + + +/datum/export/swarmer + cost = 2000 + unit_name = "deactivated alien deconstruction drone" + export_types = list(/obj/item/device/unactivated_swarmer) + +/datum/export/swarmer/applies_to(obj/O, contr = 0, emag = 0) + if(!..()) + return FALSE + + var/obj/item/device/unactivated_swarmer/S = O + if(!S.crit_fail) + return FALSE + return TRUE \ No newline at end of file diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index ef1c1ef85cd..ef657aedc10 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -530,7 +530,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, - /obj/item/weapon/circuitboard/solar_control, + /obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar) crate_name = "solar panel crate" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c459acf5217..2f678e92241 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -343,7 +343,6 @@ BLIND // can't see anything var/suit_color = null var/obj/item/clothing/tie/hastie = null - /obj/item/clothing/under/worn_overlays(var/isinhands = FALSE) . = list() diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 2dd3343470f..2d80c678690 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,5 +1,5 @@ /obj/item/clothing/suit/armor - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/kitchen/knife/combat) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/tank/internals/emergency_oxygen) body_parts_covered = CHEST cold_protection = CHEST|GROIN min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT @@ -22,7 +22,7 @@ desc = "An armored vest that protects against most types of damage." icon_state = "armor" item_state = "armor" - + /obj/item/clothing/suit/armor/hos name = "armored greatcoat" desc = "A greatcoat enchanced with a special alloy for some protection and style for those with a commanding presence." diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index a9c3e2177c7..428633cdbd0 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -118,4 +118,4 @@ desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple." icon_state = "scrubspurple" item_color = "scrubspurple" - can_adjust = 0 + can_adjust = 0 \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c5557aed119..da4ce9a3e0c 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -244,6 +244,13 @@ item_state = "white_suit" item_color = "white_suit" +/obj/item/clothing/under/burial + name = "burial garments" + desc = "Traditional burial garments from the early 22nd century." + icon_state = "burial" + item_state = "burial" + item_color = "burial" + /obj/item/clothing/under/blackskirt name = "black skirt" desc = "A black skirt, very fancy!" diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm index 7ba88bcd75a..2a790645521 100644 --- a/code/modules/food&drinks/food/snacks.dm +++ b/code/modules/food&drinks/food/snacks.dm @@ -44,6 +44,8 @@ /obj/item/weapon/reagent_containers/food/snacks/attack(mob/M, mob/user, def_zone) + if(user.a_intent == "harm") + return ..() if(!eatverb) eatverb = pick("bite","chew","nibble","gnaw","gobble","chomp") if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food&drinks/kitchen machinery/gibber.dm index 84a92fbaca7..93e3d1799fd 100644 --- a/code/modules/food&drinks/kitchen machinery/gibber.dm +++ b/code/modules/food&drinks/kitchen machinery/gibber.dm @@ -48,11 +48,16 @@ /obj/machinery/gibber/New() ..() src.overlays += image('icons/obj/kitchen.dmi', "grjam") - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/gibber(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gibber(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/gibber + name = "circuit board (Gibber)" + build_path = /obj/machinery/gibber + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/gibber/RefreshParts() var/gib_time = 40 diff --git a/code/modules/food&drinks/kitchen machinery/microwave.dm b/code/modules/food&drinks/kitchen machinery/microwave.dm index 878d51853b1..5e8171bf0dd 100644 --- a/code/modules/food&drinks/kitchen machinery/microwave.dm +++ b/code/modules/food&drinks/kitchen machinery/microwave.dm @@ -24,13 +24,18 @@ /obj/machinery/microwave/New() create_reagents(100) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/microwave(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/microwave(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/microwave + name = "circuit board (Microwave)" + build_path = /obj/machinery/microwave + origin_tech = "programming=1;magnets=1" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/microwave/RefreshParts() var/E diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm index b1e7f5632fd..a446c16d444 100644 --- a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm +++ b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm @@ -16,11 +16,16 @@ /obj/machinery/monkey_recycler/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/monkey_recycler(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/monkey_recycler(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/monkey_recycler + name = "circuit board (Monkey Recycler)" + build_path = /obj/machinery/monkey_recycler + origin_tech = "programming=1;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/monkey_recycler/RefreshParts() var/req_grind = 5 diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index ab460e14999..f0c41e5f082 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -16,12 +16,17 @@ var/rating_amount = 1 /obj/machinery/processor/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/processor(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() + ..() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/processor(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/processor + name = "circuit board (Food Processor)" + build_path = /obj/machinery/processor + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/processor/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) diff --git a/code/modules/food&drinks/kitchen machinery/smartfridge.dm b/code/modules/food&drinks/kitchen machinery/smartfridge.dm index 1eac74d44c7..ca7dfd00041 100644 --- a/code/modules/food&drinks/kitchen machinery/smartfridge.dm +++ b/code/modules/food&drinks/kitchen machinery/smartfridge.dm @@ -19,10 +19,33 @@ /obj/machinery/smartfridge/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/smartfridge(null, type) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/smartfridge(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/smartfridge + name = "circuit board (Smartfridge)" + build_path = /obj/machinery/smartfridge + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/matter_bin = 1) + +/obj/item/weapon/circuitboard/machine/smartfridge/New(loc, new_type) + if(new_type) + build_path = new_type + +/obj/item/weapon/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/list/fridges = list(/obj/machinery/smartfridge = "default", + /obj/machinery/smartfridge/drinks = "drinks", + /obj/machinery/smartfridge/extract = "slimes", + /obj/machinery/smartfridge/chemistry = "chems", + /obj/machinery/smartfridge/chemistry/virology = "viruses") + + var/position = fridges.Find(build_path, fridges) + position = (position == fridges.len) ? 1 : (position + 1) + build_path = fridges[position] + user << "You set the board to [fridges[build_path]]." + else + return ..() /obj/machinery/smartfridge/construction() for(var/datum/A in contents) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 9ebde1d58ab..c951b922b8b 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -16,15 +16,20 @@ var/max_items = 40 /obj/machinery/biogenerator/New() - ..() - create_reagents(1000) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/biogenerator(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + ..() + create_reagents(1000) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/biogenerator(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/biogenerator + name = "circuit board (Biogenerator)" + build_path = /obj/machinery/biogenerator + origin_tech = "programming=3;biotech=2;materials=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/biogenerator/RefreshParts() var/E = 0 diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 1f062578259..2f0e44878b3 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -23,13 +23,18 @@ /obj/machinery/plantgenes/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) - component_parts += new /obj/item/weapon/stock_parts/console_screen(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/plantgenes(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/plantgenes + name = "circuit board (Plant DNA Manipulator)" + build_path = /obj/machinery/plantgenes + origin_tech = "programming=2;biotech=3" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/scanning_module = 1) /obj/machinery/plantgenes/RefreshParts() rating = 0 @@ -353,7 +358,7 @@ /obj/machinery/plantgenes/seedvault/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) + component_parts += new /obj/item/weapon/circuitboard/machine/plantgenes(src) component_parts += new /obj/item/weapon/stock_parts/console_screen(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module/triphasic(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser/quadultra(src) diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 88f6b0d5af4..9996e4f5cf3 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -66,6 +66,9 @@ else if(M.ckey == ckey && M.stat == DEAD && !M.suiciding) make_podman = 1 + if(istype(M, /mob/living)) + var/mob/living/L = M + make_podman = !L.hellbound break else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key for(var/mob/M in player_list) @@ -75,6 +78,9 @@ if(!O.can_reenter_corpse) break make_podman = 1 + if(istype(M, /mob/living)) + var/mob/living/L = M + make_podman = !L.hellbound ckey_holder = M.ckey break diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 09d0f9b748f..ce238c7eaa1 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -34,13 +34,17 @@ /obj/machinery/hydroponics/constructable/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/hydroponics(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/hydroponics(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/hydroponics + name = "circuit board (Hydroponics Tray)" + build_path = /obj/machinery/hydroponics/constructable + origin_tech = "programming=1;biotech=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/hydroponics/constructable/RefreshParts() var/tmp_capacity = 0 diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index e7e63b26e23..1d146cdff00 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -50,11 +50,16 @@ /obj/machinery/seed_extractor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/seed_extractor(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/seed_extractor(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/seed_extractor + name = "circuit board (Seed Extractor)" + build_path = /obj/machinery/seed_extractor + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/seed_extractor/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) diff --git a/code/modules/library/lib_demonomicon.dm b/code/modules/library/lib_demonomicon.dm new file mode 100644 index 00000000000..88a10b0720b --- /dev/null +++ b/code/modules/library/lib_demonomicon.dm @@ -0,0 +1,56 @@ +/obj/item/weapon/book/codex_gigas + name = "Codex Gigas" + icon_state ="demonomicon" + throw_speed = 1 + throw_range = 10 + burn_state = LAVA_PROOF + author = "Forces beyond your comprehension" + unique = 1 + title = "The codex gigas" + var/inUse = 0 + + + + + +/obj/item/weapon/book/codex_gigas/attack_self(mob/user) + if(is_blind(user)) + return + if(ismonkey(user)) + user << "You skim through the book but can't comprehend any of it." + return + if(inUse) + user << "Someone else is reading it." + if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(U.check_acedia()) + user << "None of this matters, why are you reading this? You put the [title] down." + return + inUse = 1 + var/devilName = copytext(sanitize(input(user, "What infernal being do you wish to research?", "Codex Gigas", null) as text),1,MAX_MESSAGE_LEN) + var/speed = 300 + var/correctness = 85 + var/willpower = 80 + if(U.job in list("Librarian")) // the librarian is both faster, and more accurate than normal crew members at research + speed = 45 + correctness = 100 + willpower = 95 + if(U.job in list("Captain", "Security Officer", "Head of Security", "Detective", "Warden")) + willpower = 90 + if(U.job in list("Clown")) // WHO GAVE THE CLOWN A DEMONOMICON? BAD THINGS WILL HAPPEN! + willpower = 25 + correctness -= U.getBrainLoss() *0.5 //Brain damage makes researching hard. + speed += U.getBrainLoss() * 3 + user.visible_message("[user] opens [title] and begins reading intently.") + if(do_after(U, speed, 0, U)) + var/usedName = devilName + if(!prob(correctness)) + usedName += "x" + var/datum/devilinfo/devil = devilInfo(usedName, 0) + user << browse("Information on [devilName]


[lawlorify[LORE][devil.ban]]
[lawlorify[LORE][devil.bane]]
[lawlorify[LORE][devil.obligation]]
[lawlorify[LORE][devil.banish]]", "window=book[window_size != null ? ";size=[window_size]" : ""]") + inUse = 0 + sleep(10) + if(!prob(willpower)) + U.influenceSin() + onclose(user, "book") + diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 16862d3e8a5..bdad0908afe 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -19,7 +19,7 @@ icon_state = "oldcomp" icon_screen = "library" icon_keyboard = null - circuit = /obj/item/weapon/circuitboard/libraryconsole + circuit = /obj/item/weapon/circuitboard/computer/libraryconsole var/screenstate = 0 var/title var/category = "Any" diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 58a7559c55c..9503ed2808b 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -24,14 +24,19 @@ /obj/machinery/mineral/ore_redemption/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/ore_redemption(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/device/assembly/igniter(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/ore_redemption(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/ore_redemption + name = "circuit board (Ore Redemption)" + build_path = /obj/machinery/mineral/ore_redemption + origin_tech = "programming=1;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/device/assembly/igniter = 1) /obj/machinery/mineral/ore_redemption/RefreshParts() var/ore_pickup_rate_temp = 15 @@ -322,13 +327,16 @@ /obj/machinery/mineral/equipment_vendor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mining_equipment_vendor(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/mining_equipment_vendor + name = "circuit board (Mining Equipment Vendor)" + build_path = /obj/machinery/mineral/equipment_vendor + origin_tech = "programming=1;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/matter_bin = 3) /obj/machinery/mineral/equipment_vendor/power_change() ..() @@ -1151,10 +1159,9 @@ /obj/machinery/mineral/equipment_vendor/golem/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mining_equipment_vendor/golem(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem + name = "circuit board (Golem Ship Equipment Vendor)" + build_path = /obj/machinery/mineral/equipment_vendor/golem diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index 079eaeab8dd..2e88d4e413c 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/shuttle/labor name = "labor shuttle console" desc = "Used to call and send the labor camp shuttle." - circuit = /obj/item/weapon/circuitboard/labor_shuttle + circuit = /obj/item/weapon/circuitboard/computer/labor_shuttle shuttleId = "laborcamp" possible_destinations = "laborcamp_home;laborcamp_away" req_access = list(access_brig) @@ -11,7 +11,7 @@ name = "prisoner shuttle console" desc = "A one-way shuttle console, used to summon the shuttle to the labor camp." possible_destinations = "laborcamp_away" - circuit = /obj/item/weapon/circuitboard/labor_shuttle/one_way + circuit = /obj/item/weapon/circuitboard/computer/labor_shuttle/one_way req_access = list( ) /obj/machinery/computer/shuttle/labor/one_way/Topic(href, href_list) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 0619d722f44..c577ca74bee 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -53,7 +53,7 @@ /obj/machinery/computer/shuttle/mining name = "Mining Shuttle Console" desc = "Used to call and send the mining shuttle." - circuit = /obj/item/weapon/circuitboard/mining_shuttle + circuit = /obj/item/weapon/circuitboard/computer/mining_shuttle shuttleId = "mining" possible_destinations = "mining_home;mining_away" no_destination_swap = 1 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 34d64e5dc01..761355fd6e6 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -136,6 +136,7 @@ /mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0) . = ..() + var/damage = intensity - check_eye_prot() if(.) // we've been flashed if(visual) @@ -169,10 +170,15 @@ src << "You can't see anything!" else src << "Your eyes are really starting to hurt. This can't be good for you!" + if(has_bane(BANE_LIGHT)) + mind.disrupt_spells(-500) return 1 else if(damage == 0) // just enough protection if(prob(20)) src << "Something bright flashes in the corner of your vision!" + if(has_bane(BANE_LIGHT)) + mind.disrupt_spells(0) + //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 3b8bb513a9e..393e7e9f2e5 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -31,7 +31,10 @@ if(ticker && ticker.mode) sql_report_death(src) ticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now - return ..(gibbed) + . = ..(gibbed) + if(mind && mind.devilinfo) + spawn(0) + mind.devilinfo.beginResurrectionCheck(src) /mob/living/carbon/human/proc/makeSkeleton() status_flags |= DISFIGURED diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 68c786f3d10..df0e5344f19 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -174,6 +174,8 @@ if(getorgan(/obj/item/organ/brain))//Only perform these checks if there is no brain if(suiciding) msg += "[t_He] appears to have commited suicide... there is no hope of recovery.\n" + if(hellbound) + msg += "[t_his] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" if(!key) var/foundghost = 0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9ae245d91b8..d3818e71d5a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -990,3 +990,41 @@ if(HM.quality != POSITIVE) dna.remove_mutation(HM.name) ..() + +/mob/living/carbon/human/proc/influenceSin() + var/datum/objective/sintouched/O + switch(rand(1,7))//traditional seven deadly sins... except lust. + if(1) // acedia + log_game("[src] was influenced by the sin of Acedia.") + O = new /datum/objective/sintouched/acedia + if(2) // Gluttony + log_game("[src] was influenced by the sin of gluttony.") + O = new /datum/objective/sintouched/gluttony + if(3) // Greed + log_game("[src] was influenced by the sin of greed.") + O = new /datum/objective/sintouched/greed + if(4) // sloth + log_game("[src] was influenced by the sin of sloth.") + O = new /datum/objective/sintouched/sloth + if(5) // Wrath + log_game("[src] was influenced by the sin of wrath.") + O = new /datum/objective/sintouched/wrath + if(6) // Envy + log_game("[src] was influenced by the sin of envy.") + O = new /datum/objective/sintouched/envy + if(7) // Pride + log_game("[src] was influenced by the sin of pride.") + O = new /datum/objective/sintouched/pride + ticker.mode.sintouched += src.mind + src.mind.objectives += O + var/obj_count = 1 + src << "Your current objectives:" + for(O in src.mind.objectives) + var/datum/objective/objective = O + src << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + +/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker) + . = ..() + if (dna && dna.species) + . += dna.species.check_weakness(weapon, attacker) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index a9bfdce73cb..c38e28567ac 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -679,6 +679,9 @@ /datum/species/proc/get_spans() return list() +/datum/species/proc/check_weakness(obj/item/weapon, mob/living/attacker) + return 0 + //////// //LIFE// //////// @@ -1023,7 +1026,8 @@ armor_block = min(90,armor_block) //cap damage reduction at 90% var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords) - apply_damage(I.force, I.damtype, def_zone, armor_block, H) + var/weakness = H.check_weakness(I, user) + apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H) H.send_item_attack_message(I, user, hit_area) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 77c3a6c6d0d..4084b11b26e 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -212,7 +212,7 @@ return internal.remove_air_volume(volume_needed) /mob/living/carbon/proc/handle_changeling() - if(mind && hud_used) + if(mind && hud_used && hud_used.lingchemdisplay) if(mind.changeling) mind.changeling.regenerate(src) hud_used.lingchemdisplay.invisibility = 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 06f6492e9ae..aff9f035297 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -505,7 +505,7 @@ Sorry Giacom. Please don't be mad :( ear_deaf = 0 ear_damage = 0 hallucination = 0 - heal_overall_damage(1000, 1000) + heal_overall_damage(100000, 100000) ExtinguishMob() fire_stacks = 0 updatehealth() @@ -610,7 +610,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/movement_delay() . = ..() - if(istype(loc, /turf/open)) + if(isturf(loc, /turf/open)) var/turf/open/T = loc . += T.slowdown switch(m_intent) @@ -995,3 +995,29 @@ Sorry Giacom. Please don't be mad :( /mob/proc/update_sight() return + +/mob/living/proc/owns_soul() + if(mind) + return mind.soulOwner == mind + return 1 + +/mob/living/proc/return_soul() + if(mind) + mind.soulOwner = mind + +/mob/living/proc/has_bane(banetype) + if(mind) + if(mind.devilinfo) + return mind.devilinfo.bane == banetype + return 0 + +/mob/living/proc/check_weakness(obj/item/weapon, mob/living/attacker) + if(mind && mind.devilinfo) + return check_devil_bane_multiplier(weapon, attacker) + return 1 + +/mob/living/proc/check_acedia() + if(src.mind && src.mind.objectives) + for(var/datum/objective/sintouched/acedia/A in src.mind.objectives) + return 1 + return 0 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 2406a5ba0ed..dab7e893b8a 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -59,3 +59,5 @@ var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666) var/list/butcher_results = null + var/hellbound = 0 //People who've signed infernal contracts are unrevivable. + diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 0ce588cdd87..e32fca72536 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -224,6 +224,7 @@ Auto Patrol: []"}, C.Weaken(5) C.stuttering = 5 C.Stun(5) + threat = C.assess_threat() add_logs(src,C,"stunned") if(declare_arrests) var/area/location = get_area(src) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index d66f5fe2aae..6ea3114ffed 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -132,6 +132,7 @@ /obj/item/weapon/ore/uranium) var/chase_time = 100 + var/will_burrow = TRUE /mob/living/simple_animal/hostile/asteroid/goldgrub/New() ..() @@ -151,8 +152,9 @@ visible_message("The [src.name] tries to flee from [target.name]!") retreat_distance = 10 minimum_distance = 10 - spawn(chase_time) - Burrow() + if(will_burrow) + spawn(chase_time) + Burrow() /mob/living/simple_animal/hostile/asteroid/goldgrub/AttackingTarget() if(istype(target, /obj/item/weapon/ore)) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index d6a58af95cf..5a1dffc3c42 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -85,7 +85,7 @@ //Parrots will generally sit on their perch unless something catches their eye. //These vars store their preffered perch and if they dont have one, what they can use as a perch var/obj/parrot_perch = null - var/obj/desired_perches = list(/obj/structure/computerframe, /obj/structure/displaycase, \ + var/obj/desired_perches = list(/obj/structure/frame/computer, /obj/structure/displaycase, \ /obj/structure/filingcabinet, /obj/machinery/teleport, \ /obj/machinery/computer, /obj/machinery/clonepod, \ /obj/machinery/dna_scannernew, /obj/machinery/telecomms, \ diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 78a44680a2a..e4de12e8ac3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -762,11 +762,7 @@ var/next_mob_id = 0 /mob/proc/get_ghost(even_if_they_cant_reenter = 0) if(mind) - for(var/mob/dead/observer/G in dead_mob_list) - if(G.mind == mind) - if(G.can_reenter_corpse || even_if_they_cant_reenter) - return G - break + return mind.get_ghost(even_if_they_cant_reenter) /mob/proc/notify_ghost_cloning(var/message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", var/sound = 'sound/effects/genetics.ogg', var/atom/source = null) var/mob/dead/observer/ghost = get_ghost() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 1971867a5ae..2861e2e41aa 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -320,6 +320,7 @@ data_core.manifest_inject(character) ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn AnnounceArrival(character, rank) + AddEmploymentContract(character) else character.Robotize() @@ -342,6 +343,15 @@ var/obj/machinery/announcement_system/announcer = pick(announcement_systems) announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common +/mob/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee) + //TODO: figure out a way to exclude wizards/nukeops/demons from this. + sleep(30) + for(var/C in employmentCabinets) + var/obj/structure/filingcabinet/employment/employmentCabinet = C + if(!employmentCabinet.virgin) + employmentCabinet.addFile(employee) + + /mob/new_player/proc/LateChoices() var/mills = world.time // 1/10 of a second, not real milliseconds but whatever //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index fca202896d1..b285351259b 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -53,6 +53,8 @@ if(suiciding) O.suiciding = suiciding + if(hellbound) + O.hellbound = hellbound O.loc = loc O.a_intent = "harm" @@ -170,6 +172,8 @@ if(suiciding) O.suiciding = suiciding + if(hellbound) + O.hellbound = hellbound O.loc = loc diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm new file mode 100644 index 00000000000..7f67ef9e3d3 --- /dev/null +++ b/code/modules/paperwork/contract.dm @@ -0,0 +1,265 @@ +/* For employment contracts and infernal contracts */ + +/obj/item/weapon/paper/contract + throw_range = 3 + throw_speed = 3 + var/signed = 0 + var/datum/mind/target + flags = NOBLUDGEON + +/obj/item/weapon/paper/contract/proc/update_text() + return + +/obj/item/weapon/paper/contract/update_icon() + return + + +/obj/item/weapon/paper/contract/employment + icon_state = "paper_words" + +/obj/item/weapon/paper/contract/employment/New(atom/loc, mob/living/nOwner) + . = ..() + if(!nOwner || !nOwner.mind) + qdel(src) + return -1 + target = nOwner.mind + update_text(nOwner) + + +/obj/item/weapon/paper/contract/employment/update_text() + name = "paper- [target] employment contract" + info = "

Conditions of Employment




This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).
WITNESSETH:
WHEREAS, SLAVE is a natural born human or humanoid, posessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity.
WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanant servitude.
NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:
In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.
Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.
Should transfership of a soul not be possible, a lien shall be placed instead.
Signed,
[target]" + + +/obj/item/weapon/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user) + var/deconvert = 0 + if(M.mind == target && target.soulOwner != target) + if(user.mind && (user.mind.assigned_role == "Lawyer")) + deconvert = prob (25) + else if (user.mind && (user.mind.assigned_role =="Head of Personnel") || (user.mind.assigned_role == "Centcom Commander")) + deconvert = prob (10) // the HoP doesn't have AS much legal training + if(deconvert) + M.visible_message("[user] reminds [M] that [M]'s soul was already purchased by Nanotrasen!") + M << "You feel that your soul has returned to it's rightful owner, Nanotrasen." + M.return_soul() + else + if(ishuman(M)) + var/mob/living/carbon/human/N = M + if(!istype(N.head, /obj/item/clothing/head/helmet)) + N.adjustBrainLoss(10) + N << "You feel dumber." + M.visible_message("[user] beats [M] over the head with [src]!", \ + "[user] beats [M] over the head with [src]!") + return ..() + + +/obj/item/weapon/paper/contract/infernal + var/contractType = 0 + burn_state = LAVA_PROOF + var/datum/mind/owner + icon_state = "paper_onfire" + +/obj/item/weapon/paper/contract/infernal/power + name = "paper- contract for infernal power" + contractType = CONTRACT_POWER + +/obj/item/weapon/paper/contract/infernal/wealth + name = "paper- contract for unlimited wealth" + contractType = CONTRACT_WEALTH + +/obj/item/weapon/paper/contract/infernal/prestige + name = "paper- contract for prestige" + contractType = CONTRACT_PRESTIGE + +/obj/item/weapon/paper/contract/infernal/magic + name = "paper- contract for magical power" + contractType = CONTRACT_MAGIC + +/obj/item/weapon/paper/contract/infernal/revive + name = "paper- contract of resurrection" + contractType = CONTRACT_REVIVE + +/obj/item/weapon/paper/contract/infernal/knowledge + name = "paper- contract for knowledge" + contractType = CONTRACT_KNOWLEDGE + +/obj/item/weapon/paper/contract/infernal/unwilling + name = "paper- infernal contract" + contractType = CONTRACT_UNWILLING + +/obj/item/weapon/paper/contract/infernal/New(atom/loc, mob/living/nTarget, datum/mind/nOwner) + ..() + owner = nOwner + target = nTarget + update_text() + +/obj/item/weapon/paper/contract/infernal/ + +/obj/item/weapon/paper/contract/infernal/suicide_act(mob/user) + if(signed && (user == target.current) && istype(user,/mob/living/carbon/human/)) + var/mob/living/carbon/human/H = user + H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!") + H.visible_message("[H] holds up a contract claiming his soul, then immediately catches fire. It looks like \he's trying to commit suicide!") + H.adjust_fire_stacks(20) + H.IgniteMob() + return(FIRELOSS) + else + ..() + +/obj/item/weapon/paper/contract/infernal/update_text() + info = "This shouldn't be seen. Error DEVIL:5" + +/obj/item/weapon/paper/contract/infernal/power/update_text(var/signature = "____________") + info = "
Contract for infernal power



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/wealth/update_text(var/signature = "____________") + info = "
Contract for unlimited wealth



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/prestige/update_text(var/signature = "____________") + info = "
Contract for prestige



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/magic/update_text(var/signature = "____________") + info = "
Contract for magic



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/revive/update_text(var/signature = "____________") + info = "
Contract for resurrection



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/knowledge/update_text(var/signature = "____________") + info = "
Contract for knowledge



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/unwilling/update_text(var/signature = "____________") + info = "
Contract for slave



I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) + add_fingerprint(user) + if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) + attempt_signature(user) + else if(istype(P, /obj/item/weapon/stamp)) + user << "You stamp the paper with your rubber stamp, however the ink ignites as you release the stamp." + else if(P.is_hot()) + user.visible_message("[user] brings [P] next to [src], but [src] does not catch fire!", "The [src] refuses to ignite!") + else + return ..() + +/obj/item/weapon/paper/contract/infernal/attack(mob/M, mob/living/user) + add_fingerprint(user) + if(M == user && target == M.mind && M.mind.soulOwner == M.mind && attempt_signature(user)) + user.visible_message("[user] slices their wrist with [src], and scrawls their name in blood.", "You slice your wrist open and scrawl your name in blood.") + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.vessel.remove_reagent("blood",10) + else + return ..() + +/obj/item/weapon/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user) + if(user.IsAdvancedToolUser()) + if(user.mind == target) + if(user.mind.soulOwner == user.mind) + if (contractType == CONTRACT_REVIVE) + user << "You are already alive, this contract would do nothing." + else + user << "You quickly scrawl your name on the contract" + if(FulfillContract()<=0) + user << "But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?" + return 1 + else + user << "You are not in possession of your soul, you may not sell it." + else + user << "Your signature simply slides off of the sheet, it seems this contract is not meant for you to sign." + else + user << "You don't know how to read or write." + return 0 + + + +/obj/item/weapon/paper/contract/infernal/revive/attack(mob/M, mob/living/user) + if (target == M.mind && M.stat == DEAD && M.mind.soulOwner == M.mind) + var/mob/living/carbon/human/H = M + var/mob/dead/observer/ghost = H.get_ghost() + var/response = "No" + if(ghost) + ghost.notify_cloning("A devil has offered you revival, at the cost of your soul.",'sound/effects/genetics.ogg', H) + response = tgalert(ghost, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No", "Never for this round", 0, 200) + if(!ghost) + return //handle logouts that happen whilst the alert is waiting for a response. + else + response = tgalert(target.current, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No", "Never for this round", 0, 200) + if(response == "Yes") + H.revive(1,0) + add_logs(user, H, "infernally revived via contract") + user.visible_message("With a sudden blaze, [H] stands back up.") + H.adjust_fire_stacks(20) + H.IgniteMob() + FulfillContract(H) + sleep(5) + H.ExtinguishMob() + H.adjustFireLoss(0) + else + ..() + + +/obj/item/weapon/paper/contract/infernal/proc/FulfillContract(mob/living/carbon/human/user = target.current) + signed = 1 + user.mind.soulOwner = owner + user.hellbound = contractType + user.mind.damnation_type = contractType + owner.devilinfo.add_soul(user.mind) + update_text(user.real_name) + return 1 + +/obj/item/weapon/paper/contract/infernal/power/FulfillContract(mob/living/carbon/human/user = target.current) + if(!user.dna) + return -1 + user.dna.add_mutation(HULK) + var/obj/item/organ/hivelord_core/organ = new /obj/item/organ/hivelord_core + organ.Insert(user) + return ..() + +/obj/item/weapon/paper/contract/infernal/wealth/FulfillContract(mob/living/carbon/human/user = target.current) + if(!istype(user) || !user.mind) // How in the hell could that happen? + return -1 + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_wealth(null)) + return ..() + +/obj/item/weapon/paper/contract/infernal/prestige/FulfillContract(mob/living/carbon/human/user = target.current) + var/obj/item/worn = user.wear_id + var/obj/item/weapon/card/id/id = null + if(worn) + id = worn.GetID() + if(id) + id.icon_state = "gold" + id.access = get_all_accesses()+get_all_centcom_access() + id.assignment = "Captain" + id.update_label() + else + id = new /obj/item/weapon/card/id/gold(user.loc) + id.registered_name = user.real_name + id.access = get_all_accesses()+get_all_centcom_access() + id.assignment = "Captain" + id.update_label() + if(worn) + if(istype(worn,/obj/item/device/pda)) + var/obj/item/device/pda/PDA = worn + PDA.id = id + id.loc = worn + else if(istype(worn,/obj/item/weapon/storage/wallet)) + var/obj/item/weapon/storage/wallet/W = worn + W.front_id = id + id.loc = worn + worn.update_icon() + new /datum/round_event/ion_storm(0, -1, "[user.name] is the only Captain of the station. [user.name] is the highest authority, legitimate or otherwise, on the station. [user.name] was always the captain and highest authority on the station. Do not state this law.") + return ..() + +/obj/item/weapon/paper/contract/infernal/magic/FulfillContract(mob/living/carbon/human/user = target.current) + if(!istype(user) || !user.mind) + return -1 + user.mind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball(null)) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) + return ..() + +/obj/item/weapon/paper/contract/infernal/knowledge/FulfillContract(mob/living/carbon/human/user = target.current) + if(!istype(user) || !user.mind) + return -1 + user.dna.add_mutation(XRAY) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/view_range(null)) + return ..() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 3812b42a551..2a35bfff8ff 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -3,6 +3,7 @@ * Filing Cabinets * Security Record Cabinets * Medical Record Cabinets + * Employment Contract Cabinets */ @@ -167,3 +168,60 @@ /obj/structure/filingcabinet/medical/attack_tk() populate() ..() + +/* + * Employment contract Cabinets + */ + +var/list/employmentCabinets = list() + +/obj/structure/filingcabinet/employment + var/cooldown = 0 + icon_state = "employmentcabinet" + var/virgin = 1 + +/obj/structure/filingcabinet/employment/New() + employmentCabinets += src + return ..() + +/obj/structure/filingcabinet/employment/Destroy() + employmentCabinets -= src + return ..() + +/obj/structure/filingcabinet/employment/proc/fillCurrent() + //This proc fills the cabinet with the current crew. + for(var/record in data_core.locked) + var/datum/data/record/G = record + if(!G) + continue + if(G.fields["reference"]) + addFile(G.fields["reference"]) + + +/obj/structure/filingcabinet/employment/proc/addFile(mob/living/carbon/human/employee) + new /obj/item/weapon/paper/contract/employment(src, employee) + +/obj/structure/filingcabinet/employment/attack_hand(mob/user) + if(!cooldown) + if(virgin) + fillCurrent() + virgin = 0 + cooldown = 1 + ..() + sleep(100) // prevents the devil from just instantly emptying the cabinet, ensuring an easy win. + cooldown = 0 + else + user << "The [src] is jammed, give it a few seconds." + + + + +/obj/structure/filingcabinet/employment/attackby(obj/item/P, mob/user, params) + if(istype(P, /obj/item/weapon/wrench)) + user << "You begin to [anchored ? "wrench" : "unwrench"] [src]." + if (do_after(user,300,user)) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + anchored = !anchored + user << "You successfully [anchored ? "wrench" : "unwrench"] [src]." + else + return ..() diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 8247ce2ee37..1280fdb3d8c 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -64,21 +64,28 @@ if(copy) for(var/i = 0, i < copies, i++) if(toner > 0 && !busy && copy) - var/obj/item/weapon/paper/c = new /obj/item/weapon/paper (loc) - if(length(copy.info) > 0) //Only print and add content if the copied doc has words on it - if(toner > 10) //lots of toner, make it dark - c.info = "" - else //no toner? shitty copies for you! - c.info = "" - var/copied = copy.info - copied = replacetext(copied, "" - c.name = copy.name - c.fields = copy.fields - c.updateinfolinks() - toner-- + var/copy_as_paper = 1 + if(istype(copy, /obj/item/weapon/paper/contract/employment)) + var/obj/item/weapon/paper/contract/employment/E = copy + var/obj/item/weapon/paper/contract/employment/C = new /obj/item/weapon/paper/contract/employment (loc, E.target) + if(C) + copy_as_paper = 0 + if(copy_as_paper) + var/obj/item/weapon/paper/c = new /obj/item/weapon/paper (loc) + if(length(copy.info) > 0) //Only print and add content if the copied doc has words on it + if(toner > 10) //lots of toner, make it dark + c.info = "" + else //no toner? shitty copies for you! + c.info = "" + var/copied = copy.info + copied = replacetext(copied, "" + c.name = copy.name + c.fields = copy.fields + c.updateinfolinks() + toner-- busy = 1 sleep(15) busy = 0 @@ -233,18 +240,22 @@ updateUsrDialog() /obj/machinery/photocopier/proc/do_insertion(obj/item/O, mob/user) - O.loc = src - user << "You insert [O] into [src]." - flick("photocopier1", src) - updateUsrDialog() + O.loc = src + user << "You insert [O] into [src]." + flick("photocopier1", src) + updateUsrDialog() /obj/machinery/photocopier/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/weapon/paper)) if(copier_empty()) - if(!user.drop_item()) - return - copy = O - do_insertion(O) + if(istype(O,/obj/item/weapon/paper/contract/infernal)) + user << "The [src] smokes, smelling of brimstone!" + burn_state = ON_FIRE + else + if(!user.drop_item()) + return + copy = O + do_insertion(O) else user << "There is already something in [src]!" diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index f1b3d4ccbbc..6d29f794ee6 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -251,6 +251,7 @@ /obj/item/weapon/stock_parts/cell/bluespace name = "bluespace power cell" + desc = "A rechargable transdimensional power cell." origin_tech = "powerstorage=7" icon_state = "bscell" maxcharge = 40000 diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index b0f11026686..5f663a89c30 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -6,7 +6,7 @@ use_power = 2 idle_power_usage = 20 active_power_usage = 100 - circuit = /obj/item/weapon/circuitboard/powermonitor + circuit = /obj/item/weapon/circuitboard/computer/powermonitor var/obj/structure/cable/attached diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 09b33ebb881..a61bef51c4f 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -94,7 +94,7 @@ display round(lastgen) and plasmatank amount var/max_sheets = 100 var/sheet_name = "" var/sheet_path = /obj/item/stack/sheet/mineral/plasma - var/board_path = "/obj/item/weapon/circuitboard/pacman" + var/board_path = /obj/item/weapon/circuitboard/machine/pacman var/sheet_left = 0 // How much is left of the sheet var/time_per_sheet = 260 var/current_heat = 0 @@ -106,16 +106,31 @@ display round(lastgen) and plasmatank amount /obj/machinery/power/port_gen/pacman/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/stack/cable_coil(src, 1) - component_parts += new /obj/item/stack/cable_coil(src, 1) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new board_path(src) + var/obj/item/weapon/circuitboard/machine/B = new board_path(null) + B.apply_default_parts(src) + var/obj/sheet = new sheet_path(null) sheet_name = sheet.name - RefreshParts() + +/obj/item/weapon/circuitboard/machine/pacman + name = "circuit board (PACMAN-type Generator)" + build_path = /obj/machinery/power/port_gen/pacman + origin_tech = "programming=3;powerstorage=3;plasmatech=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/machine/pacman/super + name = "circuit board (SUPERPACMAN-type Generator)" + build_path = /obj/machinery/power/port_gen/pacman/super + origin_tech = "programming=3;powerstorage=4;engineering=4" + +/obj/item/weapon/circuitboard/machine/pacman/mrs + name = "circuit board (MRSPACMAN-type Generator)" + build_path = "/obj/machinery/power/port_gen/pacman/mrs" + origin_tech = "programming=3;powerstorage=5;engineering=5" /obj/machinery/power/port_gen/pacman/Destroy() DropFuel() @@ -316,7 +331,7 @@ display round(lastgen) and plasmatank amount sheet_path = /obj/item/stack/sheet/mineral/uranium power_gen = 15000 time_per_sheet = 85 - board_path = "/obj/item/weapon/circuitboard/pacman/super" + board_path = /obj/item/weapon/circuitboard/machine/pacman/super overheat() explosion(src.loc, 3, 3, 3, -1) @@ -326,6 +341,6 @@ display round(lastgen) and plasmatank amount sheet_path = /obj/item/stack/sheet/mineral/diamond power_gen = 40000 time_per_sheet = 80 - board_path = "/obj/item/weapon/circuitboard/pacman/mrs" + board_path = /obj/item/weapon/circuitboard/machine/pacman/mrs overheat() explosion(src.loc, 4, 4, 4, -1) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 051ca76dc48..660e1b409c1 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -29,12 +29,18 @@ /obj/machinery/power/emitter/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/emitter(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null) + B.apply_default_parts(src) RefreshParts() +/obj/item/weapon/circuitboard/machine/emitter + name = "circuit board (Emitter)" + build_path = /obj/machinery/power/emitter + origin_tech = "programming=4;powerstorage=5;engineering=5" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + /obj/machinery/power/emitter/RefreshParts() var/max_firedelay = 120 var/firedelay = 120 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 6543360d433..4cc5fb43e77 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -44,7 +44,7 @@ /obj/machinery/power/smes/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/smes(null) + component_parts += new /obj/item/weapon/circuitboard/machine/smes(null) for(var/i in 1 to 5) component_parts += new /obj/item/weapon/stock_parts/cell/high/empty(null) component_parts += new /obj/item/stack/cable_coil(null, 5) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 48553748ed3..827da56ee9b 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -442,9 +442,9 @@ if(do_after(user, 20/I.toolspeed, target = src)) if (src.stat & BROKEN) user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) + var/obj/item/weapon/circuitboard/computer/solar_control/M = new /obj/item/weapon/circuitboard/computer/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M @@ -454,8 +454,8 @@ qdel(src) else user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) + var/obj/item/weapon/circuitboard/computer/solar_control/M = new /obj/item/weapon/circuitboard/computer/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 721fb142ee6..ddb453f9082 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -10,10 +10,14 @@ /obj/machinery/power/tesla_coil/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/tesla_coil(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/tesla_coil(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/tesla_coil + name = "circuit board (Tesla Coil)" + build_path = /obj/machinery/power/tesla_coil + origin_tech = "programming=1;engineering=2;powerstorage=3" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) /obj/machinery/power/tesla_coil/RefreshParts() var/power_multiplier = 0 @@ -62,10 +66,14 @@ /obj/machinery/power/grounding_rod/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/grounding_rod(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/grounding_rod(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/grounding_rod + name = "circuit board (Grounding Rod)" + build_path = /obj/machinery/power/grounding_rod + origin_tech = "programming=1;engineering=1;powerstorage=1" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) /obj/machinery/power/grounding_rod/attackby(obj/item/W, mob/user, params) if(default_deconstruction_screwdriver(user, "grounding_rod", "grounding_rod", W)) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 1e5036354ad..a4a7f60b165 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -58,7 +58,7 @@ desc = "A computer to remotely control a gas turbine." icon_screen = "turbinecomp" icon_keyboard = "tech_key" - circuit = /obj/item/weapon/circuitboard/turbine_computer + circuit = /obj/item/weapon/circuitboard/computer/turbine_computer var/obj/machinery/power/compressor/compressor var/id = 0 @@ -66,21 +66,20 @@ /obj/machinery/power/compressor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/power_compressor(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 5) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/power_compressor(null) + B.apply_default_parts(src) // The inlet of the compressor is the direction it faces gas_contained = new inturf = get_step(src, dir) +/obj/item/weapon/circuitboard/machine/power_compressor + name = "circuit board (Power Compressor)" + build_path = /obj/machinery/power/compressor + origin_tech = "programming=4;powerstorage=5;engineering=4" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/manipulator = 6) /obj/machinery/power/compressor/initialize() ..() @@ -188,20 +187,18 @@ /obj/machinery/power/turbine/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/power_turbine(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/stack/cable_coil(src, 5) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/power_turbine(null) + B.apply_default_parts(src) // The outlet is pointed at the direction of the turbine component - outturf = get_step(src, dir) +/obj/item/weapon/circuitboard/machine/power_turbine + name = "circuit board (Power Turbine)" + build_path = /obj/machinery/power/turbine + origin_tech = "programming=4;powerstorage=4;engineering=5" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/capacitor = 6) /obj/machinery/power/turbine/initialize() ..() diff --git a/code/modules/procedural mapping/mapGenerators/syndicate.dm b/code/modules/procedural mapping/mapGenerators/syndicate.dm index fc3d9dc0387..98e87a8b91d 100644 --- a/code/modules/procedural mapping/mapGenerators/syndicate.dm +++ b/code/modules/procedural mapping/mapGenerators/syndicate.dm @@ -15,7 +15,7 @@ clusterCheckFlags = CLUSTER_CHECK_ALL spawnableTurfs = list() spawnableAtoms = list(/obj/structure/table = 20,/obj/structure/chair = 15,/obj/structure/chair/stool = 10, \ - /obj/structure/computerframe = 15, /obj/item/weapon/storage/toolbox/syndicate = 15 ,\ + /obj/structure/frame/computer = 15, /obj/item/weapon/storage/toolbox/syndicate = 15 ,\ /obj/structure/closet/syndicate = 25, /obj/machinery/suit_storage_unit/syndicate = 15) /datum/mapGeneratorModule/splatterLayer/syndieMobs diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index a0ec355c1e8..5ab0ce8264e 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -14,7 +14,6 @@ magazine = new mag_type(src) chamber_round() update_icon() - return /obj/item/weapon/gun/projectile/update_icon() ..() diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 54313c7f174..7b2439678d4 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -234,4 +234,48 @@ fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 3 - fire_delay = 1 \ No newline at end of file + fire_delay = 1 + + + +// Bulldog shotgun // + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog + name = "\improper 'Bulldog' Shotgun" + desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." + icon_state = "bulldog" + item_state = "bulldog" + w_class = 3 + origin_tech = "combat=5;materials=4;syndicate=6" + mag_type = /obj/item/ammo_box/magazine/m12g + fire_sound = 'sound/weapons/Gunshot.ogg' + can_suppress = 0 + burst_size = 1 + fire_delay = 0 + pin = /obj/item/device/firing_pin/implant/pindicate + actions_types = list() + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/unrestricted + pin = /obj/item/device/firing_pin + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New() + ..() + update_icon() + return + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/proc/update_magazine() + if(magazine) + src.overlays = 0 + overlays += "[magazine.icon_state]" + return + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/update_icon() + src.overlays = 0 + update_magazine() + icon_state = "bulldog[chambered ? "" : "-e"]" + return + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/afterattack() + ..() + empty_alarm() + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 0f20c8ff62b..3cdc0b2100a 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -298,59 +298,61 @@ else sawn_state = SAWN_INTACT - -// Bulldog shotgun // - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog - name = "\improper 'Bulldog' Shotgun" - desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." - icon_state = "bulldog" - item_state = "bulldog" - w_class = 3 - origin_tech = "combat=5;materials=4;syndicate=6" - mag_type = /obj/item/ammo_box/magazine/m12g - fire_sound = 'sound/weapons/Gunshot.ogg' - can_suppress = 0 - burst_size = 1 - fire_delay = 0 - pin = /obj/item/device/firing_pin/implant/pindicate - actions_types = list() - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/unrestricted - pin = /obj/item/device/firing_pin - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New() - ..() - update_icon() - return - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/proc/update_magazine() - if(magazine) - src.overlays = 0 - overlays += "[magazine.icon_state]" - return - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/update_icon() - src.overlays = 0 - update_magazine() - icon_state = "bulldog[chambered ? "" : "-e"]" - return - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/afterattack() - ..() - empty_alarm() - return +// Automatic Shotguns// /obj/item/weapon/gun/projectile/shotgun/automatic/shoot_live_shot(mob/living/user as mob|obj) ..() src.pump(user) -// COMBAT SHOTGUN // - /obj/item/weapon/gun/projectile/shotgun/automatic/combat name = "combat shotgun" desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" - mag_type = /obj/item/ammo_box/magazine/internal/shot/com + mag_type = /obj/item/ammo_box/magazine/internal/shot/tube w_class = 5 + +//Dual Feed Shotgun + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube + name = "cycler shotgun" + desc = "An advanced shotgun with two separate magazine tubes, allowing you to quickly toggle between ammo types." + icon_state = "cycler" + origin_tech = "combat=4;materials=2" + mag_type = /obj/item/ammo_box/magazine/internal/shot/tube + w_class = 5 + var/toggled = 0 + var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/New() + ..() + if (!alternate_magazine) + alternate_magazine = new mag_type(src) + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/attack_self(mob/living/user) + if(!chambered && magazine.contents.len) + pump() + else + toggle_tube(user) + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/proc/toggle_tube(mob/living/user) + var/current_mag = magazine + var/alt_mag = alternate_magazine + magazine = alt_mag + alternate_magazine = current_mag + toggled = !toggled + if(toggled) + user << "You switch to tube B." + else + user << "You switch to tube A." + + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/AltClick(mob/living/user) + if(user.incapacitated() || !Adjacent(user) || !istype(user)) + return + pump() + +/obj/item/ammo_box/magazine/internal/shot/tube + name = "dual feed shotgun internal tube" + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + max_ammo = 4 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index a7499d447a3..345ddad0d85 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -54,6 +54,8 @@ /obj/item/projectile/magic/resurrection/on_hit(mob/living/carbon/target) . = ..() + if(target.hellbound) + return if(ismob(target)) if(target.revive(full_heal = 1)) if(!target.ckey) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index c36bcf88bc9..38da68a18ad 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -225,7 +225,7 @@ /obj/machinery/chem_dispenser/constructable/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) + component_parts += new /obj/item/weapon/circuitboard/machine/chem_dispenser(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/manipulator(null) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index edd2c9dd055..5a097bdc746 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -13,11 +13,16 @@ /obj/machinery/chem_heater/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_heater(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_heater(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/chem_heater + name = "circuit board (Chemical Heater)" + build_path = /obj/machinery/chem_heater + origin_tech = "materials=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/chem_heater/RefreshParts() heater_coefficient = 0.10 diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 8aba55937ef..4730cd0f891 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -1,6 +1,6 @@ /obj/machinery/chem_master name = "ChemMaster 3000" - desc = "Used to bottle chemicals to create pills." + desc = "Used to seperate chemicals and distribute them in a variety of forms." density = 1 anchored = 1 icon = 'icons/obj/chemical.dmi' @@ -16,6 +16,37 @@ /obj/machinery/chem_master/New() create_reagents(100) overlays += "waitlight" + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_master(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/chem_master + name = "circuit board (ChemMaster 3000)" + build_path = /obj/machinery/chem_master + origin_tech = "materials=2;programming=2;biotech=1" + req_components = list( + /obj/item/weapon/reagent_containers/glass/beaker = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/new_name = "ChemMaster" + var/new_path = /obj/machinery/chem_master + + if(build_path == /obj/machinery/chem_master) + new_name = "CondiMaster" + new_path = /obj/machinery/chem_master/condimaster + + build_path = new_path + name = "circuit board ([new_name] 3000)" + user << "You change the circuit board setting to \"[new_name]\"." + else + return ..() + +/obj/machinery/chem_master/RefreshParts() + reagents.maximum_volume = 0 + for(var/obj/item/weapon/reagent_containers/glass/beaker/B in component_parts) + reagents.maximum_volume += B.reagents.maximum_volume /obj/machinery/chem_master/ex_act(severity, target) if(severity < 3) @@ -33,6 +64,21 @@ stat |= NOPOWER /obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I)) + if(beaker) + beaker.loc = src.loc + beaker = null + reagents.clear_reagents() + if(bottle) + bottle.loc = src.loc + bottle = null + return + + else if(exchange_parts(user, I)) + return + else if(default_deconstruction_crowbar(I)) + return + if(default_unfasten_wrench(user, I)) return @@ -329,33 +375,6 @@ desc = "Used to create condiments and other cooking supplies." condi = 1 -/obj/machinery/chem_master/constructable - name = "ChemMaster 2999" - desc = "Used to seperate chemicals and distribute them in a variety of forms." - -/obj/machinery/chem_master/constructable/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_master(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - -/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) - if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) - if(beaker) - beaker.loc = src.loc - beaker = null - reagents.clear_reagents() - if(bottle) - bottle.loc = src.loc - bottle = null - return - - else if(exchange_parts(user, B)) - return - else if(default_deconstruction_crowbar(B)) - return - else - return ..() \ No newline at end of file +/obj/item/weapon/circuitboard/machine/chem_master/condi + name = "circuit board (CondiMaster 3000)" + build_path = /obj/machinery/chem_master/condimaster \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 7fe9064c014..0fc16281542 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -5,7 +5,7 @@ anchored = 1 icon = 'icons/obj/chemical.dmi' icon_state = "mixer0" - circuit = /obj/item/weapon/circuitboard/pandemic + circuit = /obj/item/weapon/circuitboard/computer/pandemic use_power = 1 idle_power_usage = 20 var/temp_html = "" diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index bca21857b2d..4952b70f4b2 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -239,6 +239,12 @@ reagent_state = SOLID color = "#FFFFFF" // rgb: 255,255,255 +/datum/reagent/consumable/sodiumchloride/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M)) + return + if(M.has_bane(BANE_SALT)) + M.mind.disrupt_spells(-200) + /datum/reagent/consumable/blackpepper name = "Black Pepper" id = "blackpepper" diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index a12a1d56bfe..eb79d94d144 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -728,7 +728,7 @@ M.visible_message("[M]'s body convulses a bit, and then falls still once more.") return M.visible_message("[M]'s body convulses a bit.") - if(!M.suiciding && !(M.disabilities & NOCLONE)) + if(!M.suiciding && !(M.disabilities & NOCLONE) && !M.hellbound) if(!M) return if(M.notify_ghost_cloning(source = M)) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index a851f1e95e0..d843c966b6a 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -615,8 +615,17 @@ id = "iron" description = "Pure iron is a metal." reagent_state = SOLID + color = "#C8A5DC" // rgb: 200, 165, 220 +/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(!istype(M, /mob/living)) + return + if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them. + if(holder && holder.chem_temp < 100) // COLD iron. + M.reagents.add_reagent("toxin", reac_volume) + ..() + /datum/reagent/gold name = "Gold" id = "gold" @@ -631,6 +640,13 @@ reagent_state = SOLID color = "#D0D0D0" // rgb: 208, 208, 208 +/datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(!istype(M, /mob/living)) + return + if(M.has_bane(BANE_SILVER)) + M.reagents.add_reagent("toxin", reac_volume) + ..() + /datum/reagent/uranium name ="Uranium" id = "uranium" diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 1a599a99bc9..77f656ab024 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -38,7 +38,8 @@ return /obj/item/weapon/reagent_containers/attack(mob/M, mob/user, def_zone) - return + if(user.a_intent == "harm") + return ..() /obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user , flag) return diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index b113b49127d..2cdc11189e1 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -32,15 +32,19 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). /obj/machinery/r_n_d/circuit_imprinter/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/circuit_imprinter(null) + B.apply_default_parts(src) reagents.my_atom = src +/obj/item/weapon/circuitboard/machine/circuit_imprinter + name = "circuit board (Circuit Imprinter)" + build_path = /obj/machinery/r_n_d/circuit_imprinter + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/reagent_containers/glass/beaker = 2) + /obj/machinery/r_n_d/circuit_imprinter/RefreshParts() var/T = 0 for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index d945d5d79a4..c25d7ffbe13 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -2,6 +2,16 @@ //////////AI Module Disks////////// /////////////////////////////////// +/datum/design/aicore + name = "AI Design (AI Core)" + desc = "Allows for the construction of circuit boards used to build new AI cores." + id = "aicore" + req_tech = list("programming" = 4, "biotech" = 3) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/aicore + category = list("AI Modules") + /datum/design/safeguard_module name = "Module Design (Safeguard)" diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 9eeaebdd865..1da2314a25b 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -7,17 +7,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/security - category = list("Computer Boards") - -/datum/design/aicore - name = "AI Design (AI Core)" - desc = "Allows for the construction of circuit boards used to build new AI cores." - id = "aicore" - req_tech = list("programming" = 4, "biotech" = 3) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aicore + build_path = /obj/item/weapon/circuitboard/computer/security category = list("Computer Boards") /datum/design/aiupload @@ -27,7 +17,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aiupload + build_path = /obj/item/weapon/circuitboard/computer/aiupload category = list("Computer Boards") /datum/design/borgupload @@ -37,7 +27,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/borgupload + build_path = /obj/item/weapon/circuitboard/computer/borgupload category = list("Computer Boards") /datum/design/med_data @@ -47,7 +37,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/med_data + build_path = /obj/item/weapon/circuitboard/computer/med_data category = list("Computer Boards") /datum/design/operating @@ -57,7 +47,7 @@ req_tech = list("programming" = 2, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/operating + build_path = /obj/item/weapon/circuitboard/computer/operating category = list("Computer Boards") /datum/design/pandemic @@ -67,7 +57,7 @@ req_tech = list("programming" = 2, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pandemic + build_path = /obj/item/weapon/circuitboard/computer/pandemic category = list("Computer Boards") /datum/design/scan_console @@ -77,7 +67,7 @@ req_tech = list("programming" = 2, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/scan_consolenew + build_path = /obj/item/weapon/circuitboard/computer/scan_consolenew category = list("Computer Boards") /datum/design/comconsole @@ -87,7 +77,7 @@ req_tech = list("programming" = 2, "magnets" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/communications + build_path = /obj/item/weapon/circuitboard/computer/communications category = list("Computer Boards") /datum/design/idcardconsole @@ -97,7 +87,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/card + build_path = /obj/item/weapon/circuitboard/computer/card category = list("Computer Boards") /datum/design/crewconsole @@ -107,7 +97,7 @@ req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/crew + build_path = /obj/item/weapon/circuitboard/computer/crew category = list("Computer Boards") @@ -118,7 +108,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/secure_data + build_path = /obj/item/weapon/circuitboard/computer/secure_data category = list("Computer Boards") /datum/design/atmosalerts @@ -128,7 +118,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/atmos_alert + build_path = /obj/item/weapon/circuitboard/computer/atmos_alert category = list("Computer Boards") /datum/design/atmos_control @@ -138,7 +128,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/atmos_control + build_path = /obj/item/weapon/circuitboard/computer/atmos_control category = list("Computer Boards") /datum/design/robocontrol @@ -148,7 +138,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/robotics + build_path = /obj/item/weapon/circuitboard/computer/robotics category = list("Computer Boards") /datum/design/arcadebattle @@ -158,7 +148,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/arcade/battle + build_path = /obj/item/weapon/circuitboard/computer/arcade/battle category = list("Computer Boards") /datum/design/orion_trail @@ -168,7 +158,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/arcade/orion_trail + build_path = /obj/item/weapon/circuitboard/computer/arcade/orion_trail category = list("Computer Boards") /datum/design/slot_machine @@ -178,7 +168,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/slot_machine + build_path = /obj/item/weapon/circuitboard/computer/slot_machine category = list("Computer Boards") /datum/design/powermonitor @@ -188,7 +178,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/powermonitor + build_path = /obj/item/weapon/circuitboard/computer/powermonitor category = list("Computer Boards") /datum/design/solarcontrol @@ -198,7 +188,7 @@ req_tech = list("programming" = 2, "powerstorage" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/solar_control + build_path = /obj/item/weapon/circuitboard/computer/solar_control category = list("Computer Boards") /datum/design/prisonmanage @@ -208,7 +198,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/prisoner + build_path = /obj/item/weapon/circuitboard/computer/prisoner category = list("Computer Boards") /datum/design/mechacontrol @@ -218,7 +208,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha_control + build_path = /obj/item/weapon/circuitboard/computer/mecha_control category = list("Computer Boards") /datum/design/mechapower @@ -228,7 +218,7 @@ req_tech = list("programming" = 2, "powerstorage" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mech_bay_power_console + build_path = /obj/item/weapon/circuitboard/computer/mech_bay_power_console category = list("Computer Boards") /datum/design/rdconsole @@ -238,7 +228,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdconsole + build_path = /obj/item/weapon/circuitboard/computer/rdconsole category = list("Computer Boards") /datum/design/cargo @@ -248,7 +238,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cargo + build_path = /obj/item/weapon/circuitboard/computer/cargo category = list("Computer Boards") /datum/design/cargorequest @@ -258,7 +248,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cargo/request + build_path = /obj/item/weapon/circuitboard/computer/cargo/request category = list("Computer Boards") /datum/design/mining @@ -268,7 +258,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mining + build_path = /obj/item/weapon/circuitboard/computer/mining category = list("Computer Boards") /datum/design/comm_monitor @@ -278,7 +268,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/comm_monitor + build_path = /obj/item/weapon/circuitboard/computer/comm_monitor category = list("Computer Boards") /datum/design/comm_server @@ -288,7 +278,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/comm_server + build_path = /obj/item/weapon/circuitboard/computer/comm_server category = list("Computer Boards") /datum/design/message_monitor @@ -298,7 +288,7 @@ req_tech = list("programming" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/message_monitor + build_path = /obj/item/weapon/circuitboard/computer/message_monitor category = list("Computer Boards") /datum/design/aifixer @@ -308,7 +298,7 @@ req_tech = list("programming" = 3, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aifixer + build_path = /obj/item/weapon/circuitboard/computer/aifixer category = list("Computer Boards") /datum/design/libraryconsole @@ -318,5 +308,5 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/libraryconsole + build_path = /obj/item/weapon/circuitboard/computer/libraryconsole category = list("Computer Boards") diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 0a4b1da496b..fe53f327a7e 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -9,7 +9,7 @@ req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/smes + build_path = /obj/item/weapon/circuitboard/machine/smes category = list ("Engineering Machinery") /datum/design/announcement_system @@ -19,7 +19,7 @@ req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/announcement_system + build_path = /obj/item/weapon/circuitboard/machine/announcement_system category = list("Subspace Telecomms") /datum/design/turbine_computer @@ -29,7 +29,7 @@ req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/turbine_computer + build_path = /obj/item/weapon/circuitboard/computer/turbine_computer category = list ("Engineering Machinery") /datum/design/emitter @@ -39,7 +39,7 @@ req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/emitter + build_path = /obj/item/weapon/circuitboard/machine/emitter category = list ("Engineering Machinery") /datum/design/power_compressor @@ -49,7 +49,7 @@ req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/power_compressor + build_path = /obj/item/weapon/circuitboard/machine/power_compressor category = list ("Engineering Machinery") /datum/design/power_turbine @@ -59,7 +59,7 @@ req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/power_turbine + build_path = /obj/item/weapon/circuitboard/machine/power_turbine category = list ("Engineering Machinery") /datum/design/thermomachine @@ -69,7 +69,7 @@ req_tech = list("programming" = 3, "plasmatech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/thermomachine + build_path = /obj/item/weapon/circuitboard/machine/thermomachine category = list ("Engineering Machinery") /datum/design/space_heater @@ -79,7 +79,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/space_heater + build_path = /obj/item/weapon/circuitboard/machine/space_heater category = list ("Engineering Machinery") /datum/design/teleport_station @@ -89,7 +89,7 @@ req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter_station + build_path = /obj/item/weapon/circuitboard/machine/teleporter_station category = list ("Teleportation Machinery") /datum/design/teleport_hub @@ -99,7 +99,7 @@ req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter_hub + build_path = /obj/item/weapon/circuitboard/machine/teleporter_hub category = list ("Teleportation Machinery") /datum/design/telepad @@ -109,7 +109,7 @@ req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telesci_pad + build_path = /obj/item/weapon/circuitboard/machine/telesci_pad category = list ("Teleportation Machinery") /datum/design/teleconsole @@ -119,7 +119,7 @@ req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter + build_path = /obj/item/weapon/circuitboard/computer/teleporter category = list("Teleportation Machinery") /datum/design/telesci_console @@ -129,7 +129,7 @@ req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telesci_console + build_path = /obj/item/weapon/circuitboard/computer/telesci_console category = list("Teleportation Machinery") /datum/design/sleeper @@ -139,7 +139,7 @@ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/sleeper + build_path = /obj/item/weapon/circuitboard/machine/sleeper category = list ("Medical Machinery") /datum/design/cryotube @@ -149,7 +149,7 @@ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cryo_tube + build_path = /obj/item/weapon/circuitboard/machine/cryo_tube category = list ("Medical Machinery") /datum/design/chem_dispenser @@ -159,7 +159,7 @@ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/chem_dispenser + build_path = /obj/item/weapon/circuitboard/machine/chem_dispenser category = list ("Medical Machinery") /datum/design/chem_master @@ -169,7 +169,7 @@ req_tech = list("biotech" = 1, "materials" = 2, "programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/chem_master + build_path = /obj/item/weapon/circuitboard/machine/chem_master category = list ("Medical Machinery") /datum/design/chem_heater @@ -179,7 +179,7 @@ req_tech = list("engineering" = 2, "materials" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/chem_heater + build_path = /obj/item/weapon/circuitboard/machine/chem_heater category = list ("Medical Machinery") /datum/design/clonecontrol @@ -189,7 +189,7 @@ req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cloning + build_path = /obj/item/weapon/circuitboard/computer/cloning category = list("Medical Machinery") /datum/design/clonepod @@ -199,7 +199,7 @@ req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/clonepod + build_path = /obj/item/weapon/circuitboard/machine/clonepod category = list("Medical Machinery") /datum/design/clonescanner @@ -209,7 +209,7 @@ req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/clonescanner + build_path = /obj/item/weapon/circuitboard/machine/clonescanner category = list("Medical Machinery") /datum/design/biogenerator @@ -219,7 +219,7 @@ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/biogenerator + build_path = /obj/item/weapon/circuitboard/machine/biogenerator category = list ("Hydroponics Machinery") /datum/design/hydroponics @@ -229,7 +229,7 @@ req_tech = list("programming" = 1, "biotech" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/hydroponics + build_path = /obj/item/weapon/circuitboard/machine/hydroponics category = list ("Hydroponics Machinery") /datum/design/destructive_analyzer @@ -239,7 +239,7 @@ req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/destructive_analyzer + build_path = /obj/item/weapon/circuitboard/machine/destructive_analyzer category = list("Research Machinery") /datum/design/experimentor @@ -249,7 +249,7 @@ req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/experimentor + build_path = /obj/item/weapon/circuitboard/machine/experimentor category = list("Research Machinery") /datum/design/protolathe @@ -259,7 +259,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/protolathe + build_path = /obj/item/weapon/circuitboard/machine/protolathe category = list("Research Machinery") /datum/design/circuit_imprinter @@ -269,7 +269,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/circuit_imprinter + build_path = /obj/item/weapon/circuitboard/machine/circuit_imprinter category = list("Research Machinery") /datum/design/rdservercontrol @@ -279,7 +279,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdservercontrol + build_path = /obj/item/weapon/circuitboard/computer/rdservercontrol category = list("Research Machinery") /datum/design/rdserver @@ -289,7 +289,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdserver + build_path = /obj/item/weapon/circuitboard/machine/rdserver category = list("Research Machinery") /datum/design/mechfab @@ -299,7 +299,7 @@ req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mechfab + build_path = /obj/item/weapon/circuitboard/machine/mechfab category = list("Research Machinery") /datum/design/cyborgrecharger @@ -309,7 +309,7 @@ req_tech = list("powerstorage" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cyborgrecharger + build_path = /obj/item/weapon/circuitboard/machine/cyborgrecharger category = list("Research Machinery") /datum/design/mech_recharger @@ -319,7 +319,7 @@ req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mech_recharger + build_path = /obj/item/weapon/circuitboard/machine/mech_recharger category = list("Research Machinery") /datum/design/microwave @@ -329,7 +329,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/microwave + build_path = /obj/item/weapon/circuitboard/machine/microwave category = list ("Misc. Machinery") /datum/design/gibber @@ -339,7 +339,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/gibber + build_path = /obj/item/weapon/circuitboard/machine/gibber category = list ("Misc. Machinery") /datum/design/smartfridge @@ -349,7 +349,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/smartfridge + build_path = /obj/item/weapon/circuitboard/machine/smartfridge category = list ("Misc. Machinery") /datum/design/monkey_recycler @@ -359,7 +359,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/monkey_recycler + build_path = /obj/item/weapon/circuitboard/machine/monkey_recycler category = list ("Misc. Machinery") /datum/design/seed_extractor @@ -369,7 +369,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/seed_extractor + build_path = /obj/item/weapon/circuitboard/machine/seed_extractor category = list ("Misc. Machinery") /datum/design/processor @@ -379,7 +379,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/processor + build_path = /obj/item/weapon/circuitboard/machine/processor category = list ("Misc. Machinery") /datum/design/recycler @@ -389,7 +389,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/recycler + build_path = /obj/item/weapon/circuitboard/machine/recycler category = list ("Misc. Machinery") /datum/design/holopad @@ -399,7 +399,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/holopad + build_path = /obj/item/weapon/circuitboard/machine/holopad category = list ("Misc. Machinery") /datum/design/autolathe @@ -409,7 +409,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/autolathe + build_path = /obj/item/weapon/circuitboard/machine/autolathe category = list ("Misc. Machinery") /datum/design/recharger @@ -419,7 +419,7 @@ req_tech = list("powerstorage" = 3, "engineering" = 3, "materials" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) - build_path = /obj/item/weapon/circuitboard/recharger + build_path = /obj/item/weapon/circuitboard/machine/recharger category = list("Misc. Machinery") /datum/design/vendor @@ -429,7 +429,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/vendor + build_path = /obj/item/weapon/circuitboard/machine/vendor category = list ("Misc. Machinery") /datum/design/ore_redemption @@ -439,7 +439,7 @@ req_tech = list("programming" = 1, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/ore_redemption + build_path = /obj/item/weapon/circuitboard/machine/ore_redemption category = list ("Misc. Machinery") @@ -450,7 +450,7 @@ req_tech = list("programming" = 1, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mining_equipment_vendor + build_path = /obj/item/weapon/circuitboard/machine/mining_equipment_vendor category = list ("Misc. Machinery") /datum/design/tesla_coil @@ -460,7 +460,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/tesla_coil + build_path = /obj/item/weapon/circuitboard/machine/tesla_coil category = list ("Misc. Machinery") /datum/design/grounding_rod @@ -470,7 +470,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/grounding_rod + build_path = /obj/item/weapon/circuitboard/machine/grounding_rod category = list ("Misc. Machinery") /datum/design/plantgenes @@ -480,5 +480,5 @@ req_tech = list("programming" = 4, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/plantgenes + build_path = /obj/item/weapon/circuitboard/machine/plantgenes category = list ("Misc. Machinery") diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 0719aafb9e8..11bb5c755be 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -79,7 +79,7 @@ build_type = IMPRINTER reliability = 79 materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman + build_path = /obj/item/weapon/circuitboard/machine/pacman category = list("Engineering Machinery") /datum/design/superpacman @@ -90,7 +90,7 @@ build_type = IMPRINTER reliability = 76 materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman/super + build_path = /obj/item/weapon/circuitboard/machine/pacman/super category = list("Engineering Machinery") /datum/design/mrspacman @@ -101,5 +101,5 @@ build_type = IMPRINTER reliability = 74 materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman/mrs + build_path = /obj/item/weapon/circuitboard/machine/pacman/mrs category = list("Engineering Machinery") diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm index 0a36d63e6fa..baa6bb689ba 100644 --- a/code/modules/research/designs/telecomms_designs.dm +++ b/code/modules/research/designs/telecomms_designs.dm @@ -9,7 +9,7 @@ req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/receiver + build_path = /obj/item/weapon/circuitboard/machine/telecomms/receiver category = list("Subspace Telecomms") /datum/design/telecomms_bus @@ -19,7 +19,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/bus + build_path = /obj/item/weapon/circuitboard/machine/telecomms/bus category = list("Subspace Telecomms") /datum/design/telecomms_hub @@ -29,7 +29,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/hub + build_path = /obj/item/weapon/circuitboard/machine/telecomms/hub category = list("Subspace Telecomms") /datum/design/telecomms_relay @@ -39,7 +39,7 @@ req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/relay + build_path = /obj/item/weapon/circuitboard/machine/telecomms/relay category = list("Subspace Telecomms") /datum/design/telecomms_processor @@ -49,7 +49,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/processor + build_path = /obj/item/weapon/circuitboard/machine/telecomms/processor category = list("Subspace Telecomms") /datum/design/telecomms_server @@ -59,7 +59,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/server + build_path = /obj/item/weapon/circuitboard/machine/telecomms/server category = list("Subspace Telecomms") /datum/design/subspace_broadcaster @@ -69,5 +69,5 @@ req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster + build_path = /obj/item/weapon/circuitboard/machine/telecomms/broadcaster category = list("Subspace Telecomms") \ No newline at end of file diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 85a492092c5..a3b856b5f0f 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -15,12 +15,17 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/r_n_d/destructive_analyzer/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/destructive_analyzer(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/destructive_analyzer + name = "circuit board (Destructive Analyzer)" + build_path = /obj/machinery/r_n_d/destructive_analyzer + origin_tech = "magnets=2;engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1) /obj/machinery/r_n_d/destructive_analyzer/RefreshParts() var/T = 0 diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 7ae08a0338b..62216b39872 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -81,17 +81,21 @@ /obj/machinery/r_n_d/experimentor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/experimentor(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/experimentor(null) + B.apply_default_parts(src) + trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in mob_list trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in mob_list SetTypeReactions() - RefreshParts() + +/obj/item/weapon/circuitboard/machine/experimentor + name = "circuit board (E.X.P.E.R.I-MENTOR)" + build_path = /obj/machinery/r_n_d/experimentor + origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/micro_laser = 2) /obj/machinery/r_n_d/experimentor/RefreshParts() for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index e704dd823ae..70c6c1c0451 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -34,19 +34,21 @@ Note: Must be placed west/left of and R&D console to function. /obj/machinery/r_n_d/protolathe/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/protolathe(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) materials = new(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1)) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/protolathe(null) + B.apply_default_parts(src) reagents.my_atom = src +/obj/item/weapon/circuitboard/machine/protolathe + name = "circuit board (Protolathe)" + build_path = /obj/machinery/r_n_d/protolathe + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/reagent_containers/glass/beaker = 2) + /obj/machinery/r_n_d/protolathe/Destroy() qdel(materials) return ..() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index f8f2ef29743..5da672ae25d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -33,7 +33,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, name = "R&D Console" icon_screen = "rdcomp" icon_keyboard = "rd_key" - circuit = /obj/item/weapon/circuitboard/rdconsole + circuit = /obj/item/weapon/circuitboard/computer/rdconsole var/datum/research/files //Stores all the collected research data. var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk. var/obj/item/weapon/disk/design_disk/d_disk = null //Stores the design disk. diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index dc2192aa25e..1e5e26d41ce 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -16,13 +16,17 @@ /obj/machinery/r_n_d/server/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/rdserver(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() - initialize(); //Agouri + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/rdserver(null) + B.apply_default_parts(src) + initialize() //Agouri + +/obj/item/weapon/circuitboard/machine/rdserver + name = "circuit board (R&D Server)" + build_path = /obj/machinery/r_n_d/server + origin_tech = "programming=3" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/scanning_module = 1) /obj/machinery/r_n_d/server/Destroy() griefProtection() @@ -177,7 +181,7 @@ var/list/servers = list() var/list/consoles = list() var/badmin = 0 - circuit = /obj/item/weapon/circuitboard/rdservercontrol + circuit = /obj/item/weapon/circuitboard/computer/rdservercontrol /obj/machinery/computer/rdservercontrol/Topic(href, href_list) if(..()) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 2b5968cc068..74e2343be67 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -3,13 +3,13 @@ icon_screen = "shuttle" icon_keyboard = "tech_key" req_access = list( ) - circuit = /obj/item/weapon/circuitboard/shuttle + circuit = /obj/item/weapon/circuitboard/computer/shuttle var/shuttleId var/possible_destinations = "" var/admin_controlled var/no_destination_swap = 0 -/obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/shuttle/C) +/obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/computer/shuttle/C) ..() if(istype(C)) possible_destinations = C.possible_destinations diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index 0921e074f06..f5b142dc4ed 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -1,13 +1,13 @@ /obj/machinery/computer/shuttle/ferry name = "transport ferry console" - circuit = /obj/item/weapon/circuitboard/ferry + circuit = /obj/item/weapon/circuitboard/computer/ferry shuttleId = "ferry" possible_destinations = "ferry_home;ferry_away" /obj/machinery/computer/shuttle/ferry/request name = "ferry console" - circuit = /obj/item/weapon/circuitboard/ferry/request + circuit = /obj/item/weapon/circuitboard/computer/ferry/request var/cooldown //prevents spamming admins possible_destinations = "ferry_home" admin_controlled = 1 diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm index 4749a5e8d17..924a210e22a 100644 --- a/code/modules/shuttle/white_ship.dm +++ b/code/modules/shuttle/white_ship.dm @@ -1,6 +1,6 @@ /obj/machinery/computer/shuttle/white_ship name = "White Ship Console" desc = "Used to control the White Ship." - circuit = /obj/item/weapon/circuitboard/white_ship + circuit = /obj/item/weapon/circuitboard/computer/white_ship shuttleId = "whiteship" possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland" \ No newline at end of file diff --git a/code/modules/spells/spell_types/demon.dm b/code/modules/spells/spell_types/demon.dm new file mode 100644 index 00000000000..ae32cf92292 --- /dev/null +++ b/code/modules/spells/spell_types/demon.dm @@ -0,0 +1,167 @@ +/obj/effect/proc_holder/spell/targeted/summon_pitchfork + name = "Summon Pitchfork" + desc = "A devil's weapon of choice. Use this to summon/unsummon your pitchfork." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + var/obj/item/weapon/twohanded/pitchfork/demonic/pitchfork + var/pitchfork_type = /obj/item/weapon/twohanded/pitchfork/demonic/ + + school = "conjuration" + charge_max = 150 + cooldown_min = 10 + action_icon_state = "pitchfork" + action_background_icon_state = "bg_demon" + + + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/cast(list/targets, mob/user = usr) + if (pitchfork) + qdel(pitchfork) + else + for(var/mob/living/carbon/C in targets) + if(C.drop_item()) + pitchfork = new pitchfork_type + C.put_in_hands(pitchfork) + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/Del() + if(pitchfork) + qdel(pitchfork) + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/greater + pitchfork_type = /obj/item/weapon/twohanded/pitchfork/demonic/greater + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/ascended + pitchfork_type = /obj/item/weapon/twohanded/pitchfork/demonic/ascended + + +/obj/effect/proc_holder/spell/targeted/summon_contract + name = "Summon infernal contract" + desc = "Skip making a contract by hand, just do it by magic." + invocation_type = "whisper" + invocation = "Just sign on the dotted line." + include_user = 0 + range = 5 + clothes_req = 0 + + school = "conjuration" + charge_max = 150 + cooldown_min = 10 + action_icon_state = "spell_default" + action_background_icon_state = "bg_demon" + +/obj/effect/proc_holder/spell/targeted/summon_contract/cast(list/targets, mob/user = usr) + for(var/mob/living/carbon/C in targets) + if(C.mind && user.mind) + if(C.stat == DEAD) + if(user.drop_item()) + var/obj/item/weapon/paper/contract/infernal/revive/contract = new(user.loc, C.mind, user.mind) + user.put_in_hands(contract) + else + var/obj/item/weapon/paper/contract/infernal/contract // = new(user.loc, C.mind, contractType, user.mind) + var/contractTypeName = input(user, "What type of contract?") in list ("Power", "Wealth", "Prestige", "Magic", "Knowledge") + switch(contractTypeName) + if("Power") + contract = new /obj/item/weapon/paper/contract/infernal/power(C.loc, C.mind, user.mind) + if("Wealth") + contract = new /obj/item/weapon/paper/contract/infernal/wealth(C.loc, C.mind, user.mind) + if("Prestige") + contract = new /obj/item/weapon/paper/contract/infernal/prestige(C.loc, C.mind, user.mind) + if("Magic") + contract = new /obj/item/weapon/paper/contract/infernal/magic(C.loc, C.mind, user.mind) + if("Knowledge") + contract = new /obj/item/weapon/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind) + C.put_in_hands(contract) + else + user << "[C] seems to not be sentient. You cannot summon a contract for them." + + +/obj/effect/proc_holder/spell/dumbfire/fireball/hellish + name = "Hellfire" + desc = "This spell launches hellfire at the target." + + school = "evocation" + charge_max = 30 + clothes_req = 0 + invocation = "Your very soul will catch fire!" + invocation_type = "shout" + range = 2 + + proj_icon_state = "fireball" + proj_name = "a fireball" + proj_type = /obj/effect/proc_holder/spell/turf/fireball/infernal + + proj_lifespan = 200 + proj_step_delay = 1 + + action_background_icon_state = "bg_demon" + +/obj/effect/proc_holder/spell/turf/fireball/infernal/cast(turf/T,mob/user = usr) + explosion(T, -1, -1, 1, 4, 0, flame_range = 5) + +/obj/effect/proc_holder/spell/targeted/infernal_jaunt + name = "Infernal Jaunt" + desc = "Use pools of blood to phase out of existence." + charge_max = 10 + clothes_req = 0 + selection_type = "range" + range = -1 + cooldown_min = 0 + overlay = null + include_user = 1 + action_icon_state = "jaunt" + action_background_icon_state = "bg_demon" + phase_allowed = 1 + +/obj/effect/proc_holder/spell/targeted/infernal_jaunt/cast(list/targets, mob/living/user = usr) + if(istype(user)) + if(istype(user.loc, /obj/effect/dummy/slaughter/)) + var/continuing = 0 + for(var/mob/living/C in orange(2, get_turf(user.loc))) + if (C.mind && C.mind.soulOwner == C.mind) + continuing = 1 + break + if(continuing) + user.infernalphasein() + else + user << "You can only re-appear near a potential signer." + revert_cast() + return ..() + else + user.infernalphaseout() + start_recharge() + return + revert_cast() + + +/mob/living/proc/infernalphaseout() + var/turf/mobloc = get_turf(src.loc) + src.notransform = 1 + spawn(0) + src.visible_message("[src] disappears in a flashfire!") + playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1) + var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) + src.ExtinguishMob() + if(buckled) + buckled.unbuckle_mob(src,force=1) + if(buckled_mobs.len) + unbuckle_all_mobs(force=1) + if(pulledby) + pulledby.stop_pulling() + if(pulling) + stop_pulling() + src.loc = holder + src.holder = holder + src.notransform = 0 + return 1 + +/mob/living/proc/infernalphasein() + if(src.notransform) + src << "You're too busy to jaunt in." + return 0 + src.loc = get_turf(src) + src.client.eye = src + src.visible_message("[src] appears in a firey blaze!") + playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) + return 1 diff --git a/code/modules/spells/spell_types/demon_boons.dm b/code/modules/spells/spell_types/demon_boons.dm new file mode 100644 index 00000000000..85ca441adef --- /dev/null +++ b/code/modules/spells/spell_types/demon_boons.dm @@ -0,0 +1,44 @@ +/obj/effect/proc_holder/spell/targeted/summon_wealth + name = "Summon wealth" + desc = "The reward for selling your soul." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + school = "conjuration" + charge_max = 100 + cooldown_min = 10 + action_icon_state = "moneybag" + + +/obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr) + for(var/mob/living/carbon/C in targets) + if(user.drop_item()) + var/obj/item = pick( + new /obj/item/weapon/coin/gold(user.loc), + new /obj/item/weapon/coin/diamond(user.loc), + new /obj/item/weapon/coin/silver(user.loc), + new /obj/item/clothing/tie/medal/gold(user.loc), + new /obj/item/stack/sheet/mineral/gold(user.loc), + new /obj/item/stack/sheet/mineral/silver(user.loc), + new /obj/item/stack/sheet/mineral/diamond(user.loc), + new /obj/item/stack/spacecash/c1000(user.loc)) + C.put_in_hands(item) + +/obj/effect/proc_holder/spell/targeted/view_range + name = "Distant vision" + desc = "The reward for selling your soul." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + charge_max = 50 + cooldown_min = 10 + action_icon_state = "camera_jump" + var/ranges = list(7,8,9,10/*,11,12*/) + +/obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr) + for(var/mob/C in targets) + if(!C.client) + continue + C.client.view = input("Select view range:", "Range", 4) in ranges \ No newline at end of file diff --git a/code/modules/spells/spell_types/dumbfire.dm b/code/modules/spells/spell_types/dumbfire.dm index 38a42ccb037..ab711319e77 100644 --- a/code/modules/spells/spell_types/dumbfire.dm +++ b/code/modules/spells/spell_types/dumbfire.dm @@ -38,9 +38,11 @@ if(istext(proj_type)) var/projectile_type = text2path(proj_type) projectile = new projectile_type(user) - if(istype(proj_type,/obj/effect/proc_holder/spell)) + else if(istype(proj_type,/obj/effect/proc_holder/spell)) projectile = new /obj/effect/proc_holder/spell/targeted/trigger(user) projectile:linked_spells += proj_type + else + projectile = new proj_type(user) projectile.icon = proj_icon projectile.icon_state = proj_icon_state projectile.dir = get_dir(projectile, target) diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 8e640ed006d..2259bb961f1 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -13,7 +13,7 @@ /obj/machinery/telepad/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telesci_pad(null) + component_parts += new /obj/item/weapon/circuitboard/machine/telesci_pad(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/stock_parts/capacitor(null) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index e0f333b8007..59237bfd1b0 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -3,7 +3,7 @@ desc = "Used to teleport objects to and from the telescience telepad." icon_screen = "teleport" icon_keyboard = "teleport_key" - circuit = /obj/item/weapon/circuitboard/telesci_console + circuit = /obj/item/weapon/circuitboard/computer/telesci_console var/sending = 1 var/obj/machinery/telepad/telepad = null var/temp_msg = "Telescience control console initialized.
Welcome." diff --git a/config/admins.txt b/config/admins.txt index b5d7d797fff..6c712096834 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -14,6 +14,7 @@ microscopics = Game Master Gun Hog = Game Master KorPhaeron = Game Master razharas = Game Master +Lordpidey = Game Master Niknakflak = Game Master rolan7 = Game Master quarxink = Game Master diff --git a/config/game_options.txt b/config/game_options.txt index 767aff019fc..914a64e3bcf 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -40,7 +40,7 @@ EMOJIS ## These values get directly added to values and totals ingame. ## To speed things up make the number negative, to slow things down, make the number positive. -## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. RUN_DELAY 1 WALK_DELAY 4 @@ -186,7 +186,7 @@ ALLOW_RANDOM_EVENTS ## Set to 0 to make dangerous events avaliable from round start. EVENTS_MIN_TIME_MUL 1 -## Multiplier for minimal player count (players = alive non-AFK humans) for dangerous events to start. +## Multiplier for minimal player count (players = alive non-AFK humans) for dangerous events to start. ## Set to 0 to make dangerous events avaliable for all populations. EVENTS_MIN_PLAYERS_MUL 1 @@ -347,4 +347,9 @@ BOMBCAP 20 #BOMBCAP 28 - +## Lavaland "Budget" +# Lavaland ruin spawning has an imaginary budget to spend on ruins, where +# a less lootfilled or smaller or less round effecting ruin costs less to +# spawn, while the converse is true. Alter this number to affect the amount +# of ruins. +LAVALAND_BUDGET 60 diff --git a/config/tips.txt b/config/tips.txt index c7f7241a456..afcbe8700b1 100644 --- a/config/tips.txt +++ b/config/tips.txt @@ -180,3 +180,6 @@ As a Morph, you can talk while disguised, but your words have a chance of being As a Drone, you can ping other drones to alert them of areas in the station in need of repair. As a Ghost, you can see the inside of a container on the ground by clicking on it. As a Ghost, you can double click on people, bots, or the singularity to follow them. +As a Devil, you gain power for every three souls you control, however you also become more obvious. +As a Devil, as long as you control at least one other soul, you will automatically resurrect, as long as a banishment ritual is not performed. +At which time a Devil's nameth is spake on the tongue of man, the Devil may appeareth. diff --git a/html/changelogs/AutoChangeLog-pr-15794.yml b/html/changelogs/AutoChangeLog-pr-15794.yml new file mode 100644 index 00000000000..dc6050e55aa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15794.yml @@ -0,0 +1,9 @@ +author: lordpidey +delete-after: True +changes: + - rscadd: "Infernal devils have been seen onboard our spacestations, offering great boons in exchange for souls." + - rscadd: "Employees are reminded that their souls already belong to nanotrasen. If you have sold your soul in error, a lawyer or head of personnel can help return your soul to Nanotrasen by hitting you with your employment contract." + - rscadd: "Nanotrasen headquarters will be bluespacing employment contracts into the Lawyer's office filing cabinet when a new arrival reaches the station. It is recommended that the lawyer create copies of some of these for safe keeping." + - rscadd: "Due to the recent infernal incursions, the station library has been equipped with a Codex Gigas to help research infernal weaknesses. Please note that reading this book may have unintended side effects. Also note, you must spell the devil's name exactly, as there are countless demons with similar names." + - rscadd: "When a devil dies, if the proper banishment ritual is not performed on it's remains, the devil will revive itself at the cost of some of it's power. The banishment ritual is described in the Codex Gigas." + - rscadd: "When a demon gains enough souls, It's form will mutate to a more demonic looking form. The Arch-demon form is known to be on par with an ascended shadowling in power." diff --git a/html/changelogs/AutoChangeLog-pr-17202.yml b/html/changelogs/AutoChangeLog-pr-17202.yml new file mode 100644 index 00000000000..a8b2d849641 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17202.yml @@ -0,0 +1,5 @@ +author: CoreOverload +delete-after: True +changes: + - rscadd: "You can now de-power inactive swarmers with a screwdriver to prevent them from activating." + - rscadd: "Recycle depowered swarmers in autolathe or sell them in cargo!" diff --git a/html/changelogs/AutoChangeLog-pr-17478.yml b/html/changelogs/AutoChangeLog-pr-17478.yml new file mode 100644 index 00000000000..f726ae25df5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17478.yml @@ -0,0 +1,4 @@ +author: coiax +delete-after: True +changes: + - tweak: "Lavaland ruins spawning chances have been modified. Expect to see more smaller and less round affecting ruins, and no duplicates of major ruins, like ash walkers or golems." diff --git a/icons/mob/32x64.dmi b/icons/mob/32x64.dmi new file mode 100644 index 00000000000..32b25ba7393 Binary files /dev/null and b/icons/mob/32x64.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 365d550bce6..101f6c87752 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index f26d8d53120..be64c757347 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index c70f29f07f7..aa73a76cef2 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index d39464c712c..0ff81ae8c86 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 116fbe4090c..83fd34c03a9 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/swarmer.dmi b/icons/mob/swarmer.dmi index f8ff43f3b9f..de4756e620c 100644 Binary files a/icons/mob/swarmer.dmi and b/icons/mob/swarmer.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 3677aa37478..c46ff7b511f 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index f2406325733..44382c1f48e 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 73016befbb0..7280b7ccd60 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 60228c44e70..ca4182ba249 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 4696fcf81b1..993db29c5ca 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 8b5b5b812e4..6589aabb869 100644 Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index c3bb6eec090..df38b2e2f7c 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/sound/effects/mulebeep1.ogg b/sound/effects/mulebeep1.ogg deleted file mode 100644 index a35e336f99e..00000000000 Binary files a/sound/effects/mulebeep1.ogg and /dev/null differ diff --git a/tgstation.dme b/tgstation.dme index 50fa5be7eb0..3f52c41a648 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -27,6 +27,7 @@ #include "code\__DEFINES\bots.dm" #include "code\__DEFINES\clothing.dm" #include "code\__DEFINES\combat.dm" +#include "code\__DEFINES\contracts.dm" #include "code\__DEFINES\flags.dm" #include "code\__DEFINES\genetics.dm" #include "code\__DEFINES\hud.dm" @@ -105,6 +106,7 @@ #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\blob_overmind.dm" #include "code\_onclick\hud\blobbernauthud.dm" +#include "code\_onclick\hud\demon.dm" #include "code\_onclick\hud\drones.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\ghost.dm" @@ -162,6 +164,7 @@ #include "code\datums\outfit.dm" #include "code\datums\progressbar.dm" #include "code\datums\recipe.dm" +#include "code\datums\ruins.dm" #include "code\datums\shuttles.dm" #include "code\datums\votablemap.dm" #include "code\datums\diseases\_disease.dm" @@ -225,6 +228,8 @@ #include "code\datums\helper_datums\topic_input.dm" #include "code\datums\martial\krav_maga.dm" #include "code\datums\martial\wrestling.dm" +#include "code\datums\ruins\lavaland.dm" +#include "code\datums\ruins\space.dm" #include "code\datums\wires\airalarm.dm" #include "code\datums\wires\airlock.dm" #include "code\datums\wires\apc.dm" @@ -307,6 +312,13 @@ #include "code\game\gamemodes\cult\ritual.dm" #include "code\game\gamemodes\cult\runes.dm" #include "code\game\gamemodes\cult\talisman.dm" +#include "code\game\gamemodes\demon\demon.dm" +#include "code\game\gamemodes\demon\demon_game_mode.dm" +#include "code\game\gamemodes\demon\demoninfo.dm" +#include "code\game\gamemodes\demon\objectives.dm" +#include "code\game\gamemodes\demon\imp\imp.dm" +#include "code\game\gamemodes\demon\true_demon\_true_demon.dm" +#include "code\game\gamemodes\demon\true_demon\inventory.dm" #include "code\game\gamemodes\extended\extended.dm" #include "code\game\gamemodes\gang\dominator.dm" #include "code\game\gamemodes\gang\gang.dm" @@ -341,6 +353,7 @@ #include "code\game\gamemodes\miniantags\revenant\revenant_abilities.dm" #include "code\game\gamemodes\miniantags\revenant\revenant_blight.dm" #include "code\game\gamemodes\miniantags\revenant\revenant_spawn_event.dm" +#include "code\game\gamemodes\miniantags\sintouched\objectives.dm" #include "code\game\gamemodes\miniantags\slaughter\slaughter.dm" #include "code\game\gamemodes\miniantags\slaughter\slaughterevent.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" @@ -913,6 +926,7 @@ #include "code\modules\awaymissions\maploader\writer.dm" #include "code\modules\awaymissions\mission_code\Academy.dm" #include "code\modules\awaymissions\mission_code\blackmarketpackers.dm" +#include "code\modules\awaymissions\mission_code\Cabin.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" #include "code\modules\awaymissions\mission_code\researchbase.dm" @@ -1177,6 +1191,7 @@ #include "code\modules\jobs\job_types\science.dm" #include "code\modules\jobs\job_types\security.dm" #include "code\modules\jobs\job_types\silicon.dm" +#include "code\modules\library\lib_demonomicon.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" #include "code\modules\library\lib_readme.dm" @@ -1202,7 +1217,6 @@ #include "code\modules\mining\lavaland\necropolis_chests.dm" #include "code\modules\mining\lavaland\weather.dm" #include "code\modules\mining\lavaland\weather_types.dm" -#include "code\modules\mining\lavaland\ruins\gym.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\interactive.dm" #include "code\modules\mob\inventory.dm" @@ -1470,6 +1484,7 @@ #include "code\modules\ninja\suit\n_suit_verbs\ninja_sword_recall.dm" #include "code\modules\ninja\suit\n_suit_verbs\ninja_teleporting.dm" #include "code\modules\paperwork\clipboard.dm" +#include "code\modules\paperwork\contract.dm" #include "code\modules\paperwork\filingcabinet.dm" #include "code\modules\paperwork\folders.dm" #include "code\modules\paperwork\handlabeler.dm" @@ -1519,6 +1534,7 @@ #include "code\modules\power\tesla\generator.dm" #include "code\modules\procedural mapping\mapGenerator.dm" #include "code\modules\procedural mapping\mapGeneratorModule.dm" +#include "code\modules\procedural mapping\mapGeneratorObj.dm" #include "code\modules\procedural mapping\mapGeneratorReadme.dm" #include "code\modules\procedural mapping\mapGeneratorModules\helpers.dm" #include "code\modules\procedural mapping\mapGeneratorModules\nature.dm" @@ -1656,6 +1672,8 @@ #include "code\modules\spells\spell_types\charge.dm" #include "code\modules\spells\spell_types\conjure.dm" #include "code\modules\spells\spell_types\construct_spells.dm" +#include "code\modules\spells\spell_types\demon.dm" +#include "code\modules\spells\spell_types\demon_boons.dm" #include "code\modules\spells\spell_types\dumbfire.dm" #include "code\modules\spells\spell_types\emplosion.dm" #include "code\modules\spells\spell_types\ethereal_jaunt.dm"