Fixes map merge conflict in cyberiad.dmm
@@ -336,7 +336,7 @@
|
||||
"agx" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/flasher{id = "PCell 1"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
|
||||
"agy" = (/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitered"},/area/security/prison)
|
||||
"agz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitered"},/area/security/prison)
|
||||
"agA" = (/obj/structure/stool/bed/roller,/obj/structure/stool/bed/roller,/obj/machinery/iv_drip{density = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitered"},/area/security/prison)
|
||||
"agA" = (/obj/structure/stool/bed/roller,/obj/structure/stool/bed/roller,/obj/machinery/iv_drip,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitered"},/area/security/prison)
|
||||
"agB" = (/turf/simulated/wall/r_wall,/area/security/warden)
|
||||
"agC" = (/turf/simulated/wall/r_wall,/area/security/hos)
|
||||
"agD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/prison/solitary{name = "Prisoner Education Chamber"})
|
||||
@@ -929,7 +929,7 @@
|
||||
"arS" = (/obj/effect/landmark/start{name = "Brig Physician"},/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig)
|
||||
"arT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"arU" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"arV" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/security/brig)
|
||||
"arV" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "whitered"},/area/security/brig)
|
||||
"arW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fore)
|
||||
"arX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/brig)
|
||||
"arY" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/brig)
|
||||
@@ -6314,7 +6314,7 @@
|
||||
"crv" = (/obj/structure/closet/firecloset,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"crw" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
|
||||
"crx" = (/obj/machinery/vending/medical,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitebluecorner"},/area/medical/medbay{name = "Medbay Central"})
|
||||
"cry" = (/obj/structure/stool/bed/roller,/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay{name = "Medbay Central"})
|
||||
"cry" = (/obj/structure/stool/bed/roller,/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/medbay{name = "Medbay Central"})
|
||||
"crz" = (/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/medbay{name = "Medbay Central"})
|
||||
"crA" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteyellowcorner"},/area/medical/medbay{name = "Medbay Central"})
|
||||
"crB" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteyellow"; tag = "icon-whitehall (WEST)"},/area/medical/medbay{name = "Medbay Central"})
|
||||
@@ -6487,7 +6487,7 @@
|
||||
"cuM" = (/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cuN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cuO" = (/obj/machinery/power/apc{dir = 4; name = "Surgery APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel{tag = "icon-whitehall (WEST)"; icon_state = "whitehall"; dir = 8},/area/medical/surgery)
|
||||
"cuP" = (/obj/structure/stool/bed/roller,/obj/machinery/light/small{dir = 8},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cuP" = (/obj/structure/stool/bed/roller,/obj/machinery/light/small{dir = 8},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cuQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cuR" = (/obj/structure/stool/bed,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cuS" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor/preopen{id_tag = "rdprivacy"; name = "privacy shutter"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
|
||||
@@ -6620,7 +6620,7 @@
|
||||
"cxp" = (/obj/machinery/computer/operating,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cxq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cxr" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cxs" = (/obj/structure/stool/bed/roller,/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cxs" = (/obj/structure/stool/bed/roller,/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cxt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cxu" = (/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cxv" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/cryo)
|
||||
@@ -6660,7 +6660,7 @@
|
||||
"cyd" = (/obj/structure/table,/obj/structure/bedsheetbin{pixel_x = 2},/obj/item/clothing/mask/muzzle,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cye" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs/cable/white,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cyf" = (/obj/structure/rack,/obj/item/weapon/hatchet,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cyg" = (/obj/machinery/iv_drip{density = 0},/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cyg" = (/obj/machinery/iv_drip,/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cyh" = (/obj/structure/rack,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cyi" = (/obj/machinery/light_construct/small,/obj/item/toy/cards/deck,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cyj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
@@ -6671,7 +6671,7 @@
|
||||
"cyo" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cyp" = (/obj/structure/table,/obj/item/weapon/cautery{pixel_x = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/razor{pixel_y = 5},/obj/structure/window/reinforced/polarized{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cyq" = (/obj/structure/cable,/obj/machinery/power/turbine,/turf/simulated/floor/plating/airless,/area/maintenance/incinerator)
|
||||
"cyr" = (/obj/structure/stool/bed/roller,/obj/machinery/light/small{dir = 8},/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cyr" = (/obj/structure/stool/bed/roller,/obj/machinery/light/small{dir = 8},/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cys" = (/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cyt" = (/turf/simulated/wall,/area/medical/cryo)
|
||||
"cyu" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/camera{c_tag = "Medbay Hallway Central"; dir = 4; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/medbay{name = "Medbay Central"})
|
||||
@@ -6873,7 +6873,7 @@
|
||||
"cCi" = (/obj/machinery/light,/obj/machinery/camera{c_tag = "Medbay Surgery"; dir = 1; network = list("SS13","Medbay")},/obj/machinery/body_scanconsole,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cCj" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/surgery)
|
||||
"cCk" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel,/area/medical/surgery)
|
||||
"cCl" = (/obj/structure/stool/bed/roller,/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cCl" = (/obj/structure/stool/bed/roller,/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cCm" = (/obj/machinery/bodyscanner,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cCn" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
"cCo" = (/obj/structure/stool/bed,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/bedsheet/medical,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -32},/obj/machinery/camera{c_tag = "Medbay Recovery Room"; dir = 1; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
|
||||
@@ -7378,7 +7378,7 @@
|
||||
"cLT" = (/obj/structure/sign/biohazard{pixel_y = 32},/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/medical/virology)
|
||||
"cLU" = (/obj/structure/sink{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/medical/virology)
|
||||
"cLV" = (/obj/structure/sign/securearea{pixel_x = 0; pixel_y = 32},/obj/machinery/shower{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/medical/virology)
|
||||
"cLW" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3{name = "Medbay Aft"})
|
||||
"cLW" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3{name = "Medbay Aft"})
|
||||
"cLX" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreen"},/area/medical/medbay3{name = "Medbay Aft"})
|
||||
"cLY" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1; pixel_x = -3; pixel_y = 3; tag = "icon-plant-21"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreencorner"},/area/medical/medbay3{name = "Medbay Aft"})
|
||||
"cLZ" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"})
|
||||
@@ -7521,7 +7521,7 @@
|
||||
"cOG" = (/obj/structure/closet/l3closet/virology,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology)
|
||||
"cOH" = (/obj/structure/sign/biohazard{pixel_x = -32},/turf/space,/area/space)
|
||||
"cOI" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;5;39;6"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cOJ" = (/obj/structure/stool/bed/roller,/obj/structure/stool/bed/roller,/obj/machinery/iv_drip{density = 0},/obj/machinery/iv_drip{density = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cOJ" = (/obj/structure/stool/bed/roller,/obj/structure/stool/bed/roller,/obj/machinery/iv_drip,/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cOK" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cOL" = (/obj/item/clothing/gloves/color/latex/nitrile,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/breath/medical,/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cOM" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
|
||||
@@ -386,17 +386,17 @@
|
||||
"hv" = (/obj/machinery/power/smes/magical,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"hw" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"hx" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"hy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"hz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"hy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
|
||||
"hz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"hA" = (/obj/machinery/door/airlock/gold,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"hB" = (/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/classrooms)
|
||||
"hC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"hD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft)
|
||||
"hE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/classrooms)
|
||||
"hF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"hG" = (/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"hG" = (/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"hH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
|
||||
"hI" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"hI" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"hJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"hK" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"hL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
@@ -548,17 +548,17 @@
|
||||
"kB" = (/mob/living/simple_animal/hostile/carp/megacarp{name = "Elmo"},/turf/simulated/mineral/random/high_chance,/area/awaymission/academy)
|
||||
"kC" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/rack,/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"kD" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
|
||||
"kE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"kF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/classrooms)
|
||||
"kG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/awaymission/academy/classrooms)
|
||||
"kH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"kE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"kF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/classrooms)
|
||||
"kG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/awaymission/academy/classrooms)
|
||||
"kH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"kI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"kJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"kJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"kK" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
|
||||
"kL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/wall,/area/awaymission/academy/classrooms)
|
||||
"kN" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kO" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/awaymission/academy/classrooms)
|
||||
"kN" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kO" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
|
||||
"kQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/awaymission/academy/classrooms)
|
||||
"kR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/awaymission/academy/classrooms)
|
||||
@@ -567,23 +567,23 @@
|
||||
"kU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/academyaft)
|
||||
"kV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/academy/academyaft)
|
||||
"kW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"kX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft)
|
||||
"kX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft)
|
||||
"kY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"kZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"la" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"lb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"lc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"ld" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 8},/area/awaymission/academy/academyaft)
|
||||
"le" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft)
|
||||
"lf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"lg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"lh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"li" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"kZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"la" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"lb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"lc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"ld" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 8},/area/awaymission/academy/academyaft)
|
||||
"le" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/academy/academyaft)
|
||||
"lf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"lg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"lh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"li" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"lj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
|
||||
"lk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/item/weapon/caution,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"ll" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"lm" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"ln" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 2},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"lk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/item/weapon/caution,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
|
||||
"ll" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
"lm" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"ln" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"lo" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"lp" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
|
||||
"lq" = (/obj/machinery/atmospherics/binary/valve,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
|
||||
|
||||
@@ -11,10 +11,13 @@
|
||||
invocation_type = "shout"
|
||||
action_icon_state = "immrod"
|
||||
|
||||
sound = 'sound/effects/whoosh.ogg'
|
||||
var/rod_delay = 2
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/rod_form/cast(list/targets,mob/user = usr)
|
||||
for(var/mob/living/M in targets)
|
||||
var/turf/start = get_turf(M)
|
||||
var/obj/effect/immovablerod/wizard/W = new(start, get_ranged_target_turf(M, M.dir, (15 + spell_level * 3)))
|
||||
var/obj/effect/immovablerod/wizard/W = new(start, get_ranged_target_turf(M, M.dir, (15 + spell_level * 3)), rod_delay)
|
||||
W.wizard = M
|
||||
W.max_distance += spell_level * 3 //You travel farther when you upgrade the spell
|
||||
W.start_turf = start
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
head = /obj/item/clothing/head/hardhat/white
|
||||
l_ear = /obj/item/device/radio/headset/heads/ce
|
||||
id = /obj/item/weapon/card/id/ce
|
||||
l_pocket = /obj/item/device/t_scanner
|
||||
pda = /obj/item/device/pda/heads/ce
|
||||
backpack_contents = list(
|
||||
/obj/item/weapon/melee/classic_baton/telescopic = 1
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
var/datum/material_container/materials
|
||||
|
||||
var/list/categories = list("Communication", "Construction", "Electronics", "Imported", "Medical", "Miscellaneous", "Security", "Tools")
|
||||
var/list/categories = list("Tools", "Electronics", "Construction", "Communication", "Security", "Machinery", "Medical", "Miscellaneous", "Dinnerware", "Imported")
|
||||
|
||||
/obj/machinery/autolathe/New()
|
||||
..()
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
icon = 'icons/obj/iv_drip.dmi'
|
||||
icon_state = "iv_drip"
|
||||
anchored = 0
|
||||
density = 1
|
||||
var/mob/living/carbon/human/attached = null
|
||||
var/mode = 1 // 1 is injecting, 0 is taking blood.
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
|
||||
@@ -10,30 +10,55 @@
|
||||
icon_state = "glowshroom" //replaced in New
|
||||
layer = 2.1
|
||||
var/endurance = 30
|
||||
var/potency = 30
|
||||
var/delay = 1200
|
||||
var/floor = 0
|
||||
var/yield = 3
|
||||
var/generation = 1
|
||||
var/spreadIntoAdjacentChance = 60
|
||||
light_color = "#006622"
|
||||
var/obj/item/seeds/myseed = /obj/item/seeds/glowshroom
|
||||
|
||||
obj/effect/glowshroom/glowcap
|
||||
/obj/effect/glowshroom/glowcap
|
||||
name = "glowcap"
|
||||
desc = "Mycena Ruthenia, a species of mushroom that, while it does glow in the dark, is not actually bioluminescent."
|
||||
icon_state = "glowcap"
|
||||
light_color = "#8E0300"
|
||||
myseed = /obj/item/seeds/glowshroom/glowcap
|
||||
|
||||
/obj/effect/glowshroom/single
|
||||
yield = 0
|
||||
/obj/effect/glowshroom/shadowshroom
|
||||
name = "shadowshroom"
|
||||
desc = "Mycena Umbra, a species of mushroom that emits shadow instead of light."
|
||||
icon_state = "shadowshroom"
|
||||
myseed = /obj/item/seeds/glowshroom/shadowshroom
|
||||
|
||||
/obj/effect/glowshroom/single/Spread()
|
||||
return
|
||||
|
||||
/obj/effect/glowshroom/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "This is a [generation]\th generation [name]!")
|
||||
|
||||
/obj/effect/glowshroom/New()
|
||||
/obj/effect/glowshroom/Destroy()
|
||||
if(myseed)
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/glowshroom/New(loc, obj/item/seeds/newseed, mutate_stats)
|
||||
..()
|
||||
set_light(round(potency/10))
|
||||
dir = CalcDir()
|
||||
if(newseed)
|
||||
myseed = newseed.Copy()
|
||||
myseed.forceMove(src)
|
||||
else
|
||||
myseed = new myseed(src)
|
||||
if(mutate_stats) //baby mushrooms have different stats :3
|
||||
myseed.adjust_potency(rand(-3,6))
|
||||
myseed.adjust_yield(rand(-1,2))
|
||||
myseed.adjust_production(rand(-3,6))
|
||||
myseed.adjust_endurance(rand(-3,6))
|
||||
delay = delay - myseed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
|
||||
endurance = myseed.endurance
|
||||
if(myseed.get_gene(/datum/plant_gene/trait/glow))
|
||||
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
|
||||
set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color)
|
||||
setDir(CalcDir())
|
||||
var/base_icon_state = initial(icon_state)
|
||||
if(!floor)
|
||||
switch(dir) //offset to make it be on the wall rather than on the floor
|
||||
@@ -49,10 +74,12 @@ obj/effect/glowshroom/glowcap
|
||||
else //if on the floor, glowshroom on-floor sprite
|
||||
icon_state = "[base_icon_state]f"
|
||||
|
||||
addtimer(src, "Spread", delay)
|
||||
addtimer(src, "Spread", delay, FALSE)
|
||||
|
||||
/obj/effect/glowshroom/proc/Spread()
|
||||
for(var/i = 1 to yield)
|
||||
var/turf/ownturf = get_turf(src)
|
||||
var/shrooms_planted = 0
|
||||
for(var/i in 1 to myseed.yield)
|
||||
if(prob(1/(generation * generation) * 100))//This formula gives you diminishing returns based on generation. 100% with 1st gen, decreasing to 25%, 11%, 6, 4, 2...
|
||||
var/list/possibleLocs = list()
|
||||
var/spreadsIntoAdjacent = FALSE
|
||||
@@ -61,6 +88,8 @@ obj/effect/glowshroom/glowcap
|
||||
spreadsIntoAdjacent = TRUE
|
||||
|
||||
for(var/turf/simulated/floor/earth in view(3,src))
|
||||
if(!ownturf.CanAtmosPass(earth))
|
||||
continue
|
||||
if(spreadsIntoAdjacent || !locate(/obj/effect/glowshroom) in view(1,earth))
|
||||
possibleLocs += earth
|
||||
CHECK_TICK
|
||||
@@ -81,14 +110,16 @@ obj/effect/glowshroom/glowcap
|
||||
if(shroomCount >= placeCount)
|
||||
continue
|
||||
|
||||
var/obj/effect/glowshroom/child = new type(newLoc)//The baby mushrooms have different stats :3
|
||||
child.potency = max(potency + rand(-3,6), 0)
|
||||
child.yield = max(yield + rand(-1,2), 0)
|
||||
child.delay = max(delay + rand(-30,60), 0)
|
||||
child.endurance = max(endurance + rand(-3,6), 1)
|
||||
var/obj/effect/glowshroom/child = new type(newLoc, myseed, TRUE)
|
||||
child.generation = generation + 1
|
||||
shrooms_planted++
|
||||
|
||||
CHECK_TICK
|
||||
else
|
||||
shrooms_planted++ //if we failed due to generation, don't try to plant one later
|
||||
if(shrooms_planted < myseed.yield) //if we didn't get all possible shrooms planted, try again later
|
||||
myseed.yield -= shrooms_planted
|
||||
addtimer(src, "Spread", delay, FALSE)
|
||||
|
||||
/obj/effect/glowshroom/proc/CalcDir(turf/location = loc)
|
||||
var/direction = 16
|
||||
@@ -146,4 +177,4 @@ obj/effect/glowshroom/glowcap
|
||||
|
||||
/obj/effect/glowshroom/proc/CheckEndurance()
|
||||
if(endurance <= 0)
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -49,7 +49,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
|
||||
new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1),
|
||||
null,
|
||||
new /datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20),
|
||||
new /datum/stack_recipe/rods("metal rod", /obj/item/stack/rods, 1, 2, 60),
|
||||
new /datum/stack_recipe/rods("metal rod", /obj/item/stack/rods, 1, 2, 50),
|
||||
null,
|
||||
new /datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("modular console", /obj/machinery/modular_computer/console/buildable/, 10, time = 25, one_per_turf = 1, on_floor = 1),
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
mineralType = "uranium"
|
||||
materials = list(MAT_URANIUM=500)
|
||||
|
||||
var/global/list/datum/stack_recipe/gold_tile_recipes = list ( \
|
||||
new/datum/stack_recipe("fancy gold tile", /obj/item/stack/tile/mineral/gold/fancy, max_res_amount = 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/tile/mineral/gold
|
||||
name = "gold tile"
|
||||
singular_name = "gold floor tile"
|
||||
@@ -26,6 +30,26 @@
|
||||
mineralType = "gold"
|
||||
materials = list(MAT_GOLD=500)
|
||||
|
||||
/obj/item/stack/tile/mineral/gold/New(loc, amount=null)
|
||||
..()
|
||||
recipes = gold_tile_recipes
|
||||
|
||||
var/global/list/datum/stack_recipe/goldfancy_tile_recipes = list ( \
|
||||
new/datum/stack_recipe("regular gold tile", /obj/item/stack/tile/mineral/gold, max_res_amount = 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/tile/mineral/gold/fancy
|
||||
icon_state = "tile_goldfancy"
|
||||
turf_type = /turf/simulated/floor/mineral/gold/fancy
|
||||
|
||||
/obj/item/stack/tile/mineral/gold/fancy/New(loc, amount=null)
|
||||
..()
|
||||
recipes = goldfancy_tile_recipes
|
||||
|
||||
var/global/list/datum/stack_recipe/silver_tile_recipes = list ( \
|
||||
new/datum/stack_recipe("fancy silver tile", /obj/item/stack/tile/mineral/silver/fancy, max_res_amount = 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/tile/mineral/silver
|
||||
name = "silver tile"
|
||||
singular_name = "silver floor tile"
|
||||
@@ -35,6 +59,22 @@
|
||||
mineralType = "silver"
|
||||
materials = list(MAT_SILVER=500)
|
||||
|
||||
/obj/item/stack/tile/mineral/silver/New(loc, amount=null)
|
||||
..()
|
||||
recipes = silver_tile_recipes
|
||||
|
||||
var/global/list/datum/stack_recipe/silverfancy_tile_recipes = list ( \
|
||||
new/datum/stack_recipe("regular silver tile", /obj/item/stack/tile/mineral/silver, max_res_amount = 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/tile/mineral/silver/fancy
|
||||
icon_state = "tile_silverfancy"
|
||||
turf_type = /turf/simulated/floor/mineral/silver/fancy
|
||||
|
||||
/obj/item/stack/tile/mineral/silver/fancy/New(loc, amount=null)
|
||||
..()
|
||||
recipes = silverfancy_tile_recipes
|
||||
|
||||
/obj/item/stack/tile/mineral/diamond
|
||||
name = "diamond tile"
|
||||
singular_name = "diamond floor tile"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/mob/living/carbon/M = AM
|
||||
M.slip("soap", 4, 2)
|
||||
|
||||
/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity)
|
||||
/obj/item/weapon/soap/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
|
||||
//So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
|
||||
@@ -37,6 +37,9 @@
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.clean_blood()
|
||||
if(istype(target, /turf/simulated))
|
||||
var/turf/simulated/T = target
|
||||
T.dirt = 0
|
||||
return
|
||||
|
||||
/obj/item/weapon/soap/attack(mob/target as mob, mob/user as mob)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers."
|
||||
icon_state = "nullrod"
|
||||
item_state = "nullrod"
|
||||
force = 18
|
||||
force = 15
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
throwforce = 10
|
||||
@@ -197,7 +197,7 @@
|
||||
item_state = "hfrequency1"
|
||||
desc = "Bad references are the DNA of the soul."
|
||||
attack_verb = list("chopped", "sliced", "cut", "zandatsu'd")
|
||||
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/spellblade
|
||||
icon_state = "spellblade"
|
||||
item_state = "spellblade"
|
||||
@@ -328,7 +328,7 @@
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "carpplushie"
|
||||
item_state = "carp_plushie"
|
||||
force = 15
|
||||
force = 13
|
||||
attack_verb = list("bitten", "eaten", "fin slapped")
|
||||
hitsound = 'sound/weapons/bite.ogg'
|
||||
var/used_blessing = FALSE
|
||||
@@ -346,7 +346,7 @@
|
||||
name = "monk's staff"
|
||||
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, now used to harass the clown."
|
||||
w_class = 4
|
||||
force = 15
|
||||
force = 13
|
||||
block_chance = 40
|
||||
slot_flags = SLOT_BACK
|
||||
sharp = 0
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
/obj/item/weapon/mop/proc/clean(turf/simulated/A)
|
||||
if(reagents.has_reagent("water", 1) || reagents.has_reagent("cleaner", 1) || reagents.has_reagent("holywater", 1))
|
||||
A.clean_blood()
|
||||
A.dirt = 0
|
||||
for(var/obj/effect/O in A)
|
||||
if(is_cleanable(O))
|
||||
qdel(O)
|
||||
|
||||
@@ -280,7 +280,7 @@
|
||||
icon_state = "jaws_cutter"
|
||||
item_state = "jawsoflife"
|
||||
origin_tech = "materials=2;engineering=2"
|
||||
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
|
||||
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_GOLD=25)
|
||||
usesound = 'sound/items/jaws_cut.ogg'
|
||||
toolspeed = 0.25
|
||||
|
||||
@@ -495,7 +495,7 @@
|
||||
//Switches the welder on
|
||||
/obj/item/weapon/weldingtool/proc/switched_on(mob/user)
|
||||
if(!status)
|
||||
to_chat(user, "span class='warning'>[src] can't be turned on while unsecured!</span>")
|
||||
to_chat(user, "<span class='warning'>[src] can't be turned on while unsecured!</span>")
|
||||
return
|
||||
welding = !welding
|
||||
if(welding)
|
||||
@@ -651,12 +651,14 @@ obj/item/weapon/weldingtool/experimental/process()
|
||||
|
||||
/obj/item/weapon/crowbar/red
|
||||
icon_state = "crowbar_red"
|
||||
item_state = "crowbar_red"
|
||||
force = 8
|
||||
|
||||
/obj/item/weapon/crowbar/brass
|
||||
name = "brass crowbar"
|
||||
desc = "A brass crowbar. It feels faintly warm to the touch."
|
||||
icon_state = "crowbar_brass"
|
||||
item_state = "crowbar_brass"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/crowbar/abductor
|
||||
@@ -677,7 +679,7 @@ obj/item/weapon/weldingtool/experimental/process()
|
||||
throw_range = 3
|
||||
materials = list(MAT_METAL=70)
|
||||
icon_state = "crowbar_large"
|
||||
item_state = "crowbar"
|
||||
item_state = "crowbar_large"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/crowbar/cyborg
|
||||
@@ -692,7 +694,7 @@ obj/item/weapon/weldingtool/experimental/process()
|
||||
desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a prying head."
|
||||
icon_state = "jaws_pry"
|
||||
item_state = "jawsoflife"
|
||||
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25)
|
||||
materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_DIAMOND=25)
|
||||
origin_tech = "materials=2;engineering=2"
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 15
|
||||
|
||||
@@ -20,6 +20,12 @@
|
||||
/obj/structure/stool/bed/MouseDrop(atom/over_object)
|
||||
..(over_object, skip_fucking_stool_shit = 1)
|
||||
|
||||
/obj/structure/stool/bed/attackby(obj/item/weapon/W as obj, mob/user, params)
|
||||
if(iswrench(W))
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
new /obj/item/stack/sheet/metal(loc, 2)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/stool/psychbed
|
||||
name = "psych bed"
|
||||
desc = "For prime comfort during psychiatric evaluations."
|
||||
@@ -54,7 +60,7 @@
|
||||
|
||||
/obj/structure/stool/bed/attack_animal(var/mob/living/simple_animal/M)//No more buckling hostile mobs to chairs to render them immobile forever
|
||||
if(M.environment_smash)
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -73,7 +79,7 @@
|
||||
if(buckled_mob)
|
||||
user_unbuckle_mob(user)
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] collapses \the [src.name].</span>", "<span class='notice'>You collapse \the [src.name].</span>")
|
||||
user.visible_message("<span class='notice'>[user] collapses \the [name].</span>", "<span class='notice'>You collapse \the [name].</span>")
|
||||
new/obj/item/roller(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
@@ -107,8 +113,8 @@
|
||||
if(istype(W, /obj/item/roller_holder))
|
||||
var/obj/item/roller_holder/RH = W
|
||||
if(!RH.held)
|
||||
user.visible_message("<span class='notice'>[user] collects \the [src.name].</span>", "<span class='notice'>You collect \the [src.name].</span>")
|
||||
src.forceMove(RH)
|
||||
user.visible_message("<span class='notice'>[user] collects \the [name].</span>", "<span class='notice'>You collect \the [name].</span>")
|
||||
forceMove(RH)
|
||||
RH.held = src
|
||||
|
||||
/obj/structure/stool/bed/roller/MouseDrop(over_object, src_location, over_location)
|
||||
@@ -118,7 +124,7 @@
|
||||
return
|
||||
if(buckled_mob)
|
||||
return 0
|
||||
usr.visible_message("<span class='notice'>[usr] collapses \the [src.name].</span>", "<span class='notice'>You collapse \the [src.name].</span>")
|
||||
usr.visible_message("<span class='notice'>[usr] collapses \the [name].</span>", "<span class='notice'>You collapse \the [name].</span>")
|
||||
new/obj/item/roller(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -12,25 +12,25 @@
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(70))
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if(prob(50))
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/stool/blob_act()
|
||||
if(prob(75))
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/stool/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/stool/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params, skip_fucking_stool_shit = 0)
|
||||
@@ -41,7 +41,7 @@
|
||||
if(H==usr && !H.restrained() && !H.stat && in_range(src, over_object))
|
||||
var/obj/item/weapon/stool/S = new/obj/item/weapon/stool()
|
||||
S.origin = src
|
||||
src.loc = S
|
||||
loc = S
|
||||
H.put_in_hands(S)
|
||||
H.visible_message("<span class='warning'>[H] grabs [src] from the floor!</span>", "<span class='warning'>You grab [src] from the floor!</span>")
|
||||
|
||||
|
||||
@@ -58,6 +58,11 @@
|
||||
floor_tile = /obj/item/stack/tile/mineral/gold
|
||||
icons = list("gold","gold_dam")
|
||||
|
||||
/turf/simulated/floor/mineral/gold/fancy
|
||||
icon_state = "goldfancy"
|
||||
floor_tile = /obj/item/stack/tile/mineral/gold/fancy
|
||||
icons = list("goldfancy","goldfancy_dam")
|
||||
|
||||
//SILVER
|
||||
/turf/simulated/floor/mineral/silver
|
||||
name = "silver floor"
|
||||
@@ -65,6 +70,11 @@
|
||||
floor_tile = /obj/item/stack/tile/mineral/silver
|
||||
icons = list("silver","silver_dam")
|
||||
|
||||
/turf/simulated/floor/mineral/silver/fancy
|
||||
icon_state = "silverfancy"
|
||||
floor_tile = /obj/item/stack/tile/mineral/silver/fancy
|
||||
icons = list("silverfancy","silverfancy_dam")
|
||||
|
||||
//BANANIUM
|
||||
/turf/simulated/floor/mineral/bananium
|
||||
name = "bananium floor"
|
||||
|
||||
@@ -554,7 +554,7 @@ var/list/admin_verbs_snpc = list(
|
||||
|
||||
var/turf/epicenter = mob.loc
|
||||
var/list/choices = list("Small Bomb", "Medium Bomb", "Big Bomb", "Custom Bomb")
|
||||
var/choice = input("What size explosion would you like to produce?") in choices
|
||||
var/choice = input("What size explosion would you like to produce?") as null|anything in choices
|
||||
switch(choice)
|
||||
if(null)
|
||||
return 0
|
||||
|
||||
@@ -223,7 +223,7 @@ obj/item/clothing/head/blob
|
||||
desc = "Deus Vult."
|
||||
icon_state = "knight_templar"
|
||||
item_state = "knight_templar"
|
||||
|
||||
armor = list(melee = 20, bullet = 7, laser = 2, energy = 2, bomb = 2, bio = 2, rad = 0)
|
||||
|
||||
//Commander
|
||||
/obj/item/clothing/head/helmet/ert/command
|
||||
@@ -249,7 +249,7 @@ obj/item/clothing/head/blob
|
||||
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "erthelmet_med"
|
||||
|
||||
//Medical
|
||||
//Janitorial
|
||||
/obj/item/clothing/head/helmet/ert/janitor
|
||||
name = "emergency response team janitor helmet"
|
||||
desc = "A set of armor worn by janitorial members of the NanoTrasen Emergency Response Team. Has red and white highlights."
|
||||
|
||||
@@ -106,3 +106,15 @@
|
||||
desc = "It's baseball hat in corpotate colours."
|
||||
icon_state = "corpsoft"
|
||||
item_color = "corp"
|
||||
|
||||
/obj/item/clothing/head/soft/solgov
|
||||
name = "Sol Federation marine cap"
|
||||
desc = "A soft cap worn by marines of the Sol Federation."
|
||||
icon_state = "solgovsoft"
|
||||
item_color = "solgov"
|
||||
|
||||
/obj/item/clothing/head/soft/solgov/command
|
||||
name = "Sol Federation Lieutenant's cap"
|
||||
desc = "A soft cap worn by marines of the Sol Federation. The insignia signifies the wearer bears the rank of a Lieutenant."
|
||||
icon_state = "solgovcsoft"
|
||||
item_color = "solgovc"
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
desc = "An armored beret commonly used by special operations officers."
|
||||
icon_state = "beret_officer"
|
||||
armor = list(melee = 65, bullet = 55, laser = 35, energy = 20, bomb = 30, bio = 30, rad = 30)
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL //idfk
|
||||
|
||||
/obj/item/clothing/suit/space/deathsquad/officer
|
||||
name = "officer jacket"
|
||||
|
||||
@@ -209,6 +209,7 @@
|
||||
icon_state = "knight_templar"
|
||||
item_state = "knight_templar"
|
||||
allowed = list(/obj/item/weapon/nullrod/claymore)
|
||||
armor = list(melee = 25, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/bulletproof
|
||||
name = "Bulletproof Vest"
|
||||
|
||||
@@ -67,6 +67,27 @@
|
||||
item_state = "gy_suit"
|
||||
item_color = "vice"
|
||||
|
||||
/obj/item/clothing/under/solgov
|
||||
name = "Sol Federation marine uniform"
|
||||
desc = "A comfortable and durable combat uniform worn by Sol Federation Marine Forces."
|
||||
icon_state = "solgov"
|
||||
item_state = "ro_suit"
|
||||
item_color = "solgov"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
displays_id = 0
|
||||
|
||||
/obj/item/clothing/under/solgov/command
|
||||
name = "Sol Federation Lieutenant's uniform"
|
||||
desc = "A comfortable and durable combat uniform worn by Sol Federation Marine Forces. This one has additional insignia on its shoulders."
|
||||
icon_state = "solgovc"
|
||||
item_color = "solgovc"
|
||||
|
||||
/obj/item/clothing/under/solgov/rep
|
||||
name = "Sol Federation representative's uniform"
|
||||
desc = "A formal uniform worn by the diplomatic representatives of the Sol Federation."
|
||||
icon_state = "solgovr"
|
||||
item_color = "solgovr"
|
||||
|
||||
/obj/item/clothing/under/rank/centcom_officer
|
||||
desc = "It's a jumpsuit worn by CentComm Officers."
|
||||
name = "\improper CentComm officer's jumpsuit"
|
||||
|
||||
@@ -697,3 +697,32 @@
|
||||
name = "Voxcaster"
|
||||
desc = "Battered, Sol-made military radio backpack that had its speakers fried from playing Vox opera. The words 'Swift-Talon' are crudely scratched onto its side."
|
||||
icon_state = "voxcaster_fluff"
|
||||
|
||||
/obj/item/clothing/head/wizard/fake/fluff/dreamy //phantasmicdream : Dreamy Rockwall
|
||||
name = "strange witch hat"
|
||||
desc = "A shapeshifting witch hat. A strange aura comes from it..."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "classic_witch"
|
||||
item_state = "classic_witch"
|
||||
|
||||
/obj/item/clothing/head/wizard/fake/fluff/dreamy/attack_self(mob/user)
|
||||
var/list/options = list()
|
||||
options["Classic"] = "classic_witch"
|
||||
options["Good"] = "good_witch"
|
||||
options["Dark"] = "dark_witch"
|
||||
options["Steampunk"] ="steampunk_witch"
|
||||
options["Healer"] = "healer_witch"
|
||||
options["Cute"] = "cutie_witch"
|
||||
options["Shy"] = "shy_witch"
|
||||
options["Sexy"] ="sexy_witch"
|
||||
options["Bunny"] = "bunny_witch"
|
||||
options["Potions"] = "potions_witch"
|
||||
options["Syndicate"] = "syndie_witch"
|
||||
options["Nanotrasen"] ="nt_witch"
|
||||
|
||||
var/choice = input(user, "To what form do you wish to Shapeshift this hat?", "Shapeshift Hat") as null|anything in options
|
||||
|
||||
if(choice && !user.stat && in_range(user, src))
|
||||
icon_state = options[choice]
|
||||
to_chat(user, "Your strange witch hat has now shapeshifted into it's [choice] form!")
|
||||
return 1
|
||||
|
||||
@@ -488,18 +488,15 @@
|
||||
var/force = W.force
|
||||
|
||||
if(istype(W, /obj/item/weapon/scythe))
|
||||
force = force * 4
|
||||
for(var/obj/effect/spacevine/B in orange(1,src))
|
||||
B.health = health - force
|
||||
if(B.health < 1)
|
||||
wither()
|
||||
|
||||
health = health - force
|
||||
|
||||
if(health < 1)
|
||||
wither()
|
||||
|
||||
return
|
||||
var/obj/item/weapon/scythe/S = W
|
||||
if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes)
|
||||
force = force * 4
|
||||
for(var/obj/effect/spacevine/B in range(1,src))
|
||||
if(B.health > force) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier
|
||||
B.health -= force
|
||||
else
|
||||
B.wither()
|
||||
return
|
||||
|
||||
if(is_sharp(W))
|
||||
force = force * 4
|
||||
@@ -510,7 +507,7 @@
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
force = SM.on_hit(src, user, W, force) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
|
||||
|
||||
health = health - force
|
||||
health -= force
|
||||
if(health < 1)
|
||||
wither()
|
||||
|
||||
|
||||
@@ -5,81 +5,65 @@
|
||||
icon = 'icons/obj/fish_items.dmi'
|
||||
icon_state = "eggs"
|
||||
w_class = 2
|
||||
var/fish_type = null //Holds the name of the fish that the egg is for
|
||||
|
||||
/obj/item/fish_eggs/New()
|
||||
..()
|
||||
|
||||
var/global/list/fish_eggs_list = list("dud" = /obj/item/fish_eggs,
|
||||
"goldfish" = /obj/item/fish_eggs/goldfish,
|
||||
"clownfish" = /obj/item/fish_eggs/clownfish,
|
||||
"shark" = /obj/item/fish_eggs/shark,
|
||||
"baby space carp" = /obj/item/fish_eggs/babycarp,
|
||||
"catfish" = /obj/item/fish_eggs/catfish,
|
||||
"feederfish" = /obj/item/fish_eggs/feederfish,
|
||||
"salmon" = /obj/item/fish_eggs/salmon,
|
||||
"shrimp" = /obj/item/fish_eggs/shrimp,
|
||||
"electric eel" = /obj/item/fish_eggs/electric_eel,
|
||||
"glofish" = /obj/item/fish_eggs/glofish,
|
||||
)
|
||||
var/datum/fish/fish_type = null //Holds the datum of the fish that the egg is for, null means dud eggs
|
||||
|
||||
/obj/item/fish_eggs/goldfish
|
||||
name = "goldfish eggs"
|
||||
desc = "Goldfish eggs, surprisingly, don't contain actual gold."
|
||||
icon_state = "gold_eggs"
|
||||
fish_type = "goldfish"
|
||||
fish_type = /datum/fish/goldfish
|
||||
|
||||
/obj/item/fish_eggs/clownfish
|
||||
name = "clownfish eggs"
|
||||
desc = "Even as eggs, they are funnier than the clown. HONK!"
|
||||
icon_state = "clown_eggs"
|
||||
fish_type = "clownfish"
|
||||
fish_type = /datum/fish/clownfish
|
||||
|
||||
/obj/item/fish_eggs/shark
|
||||
name = "shark eggs"
|
||||
desc = "We're gonna need a- Oh wait, they're still eggs."
|
||||
icon_state = "shark_eggs"
|
||||
fish_type = "shark"
|
||||
fish_type = /datum/fish/shark
|
||||
|
||||
/obj/item/fish_eggs/babycarp
|
||||
name = "baby space carp eggs"
|
||||
desc = "Eggs from the substantially smaller form of the intergalactic terror."
|
||||
icon_state = "babycarp_eggs"
|
||||
fish_type = "baby space carp"
|
||||
fish_type = /datum/fish/babycarp
|
||||
|
||||
/obj/item/fish_eggs/catfish
|
||||
name = "catfish eggs"
|
||||
desc = "A bottom-feeding species noted for their similarity to cats and Tajaran."
|
||||
icon_state = "catfish_eggs"
|
||||
fish_type = "catfish"
|
||||
fish_type = /datum/fish/catfish
|
||||
|
||||
/obj/item/fish_eggs/feederfish
|
||||
name = "feeder fish eggs"
|
||||
desc = "These generic fish are commonly found being eaten by larger fish."
|
||||
icon_state = "feederfish_eggs"
|
||||
fish_type = "feederfish"
|
||||
fish_type = /datum/fish/feederfish
|
||||
|
||||
/obj/item/fish_eggs/salmon
|
||||
name = "salmon eggs"
|
||||
desc = "A collection of salmon eggs."
|
||||
icon_state = "salmon_eggs"
|
||||
fish_type = "salmon"
|
||||
fish_type = /datum/fish/salmon
|
||||
|
||||
/obj/item/fish_eggs/shrimp
|
||||
name = "shrimp eggs"
|
||||
desc = "Eggs for shrimp. You figured they'd be smaller though..."
|
||||
icon_state = "shrimp_eggs"
|
||||
fish_type = "shrimp"
|
||||
fish_type = /datum/fish/shrimp
|
||||
|
||||
/obj/item/fish_eggs/electric_eel
|
||||
name = "electric eel eggs"
|
||||
desc = "A pile of eggs for a slimy, shocking, sea-serpent."
|
||||
icon_state = "electric_eel_eggs"
|
||||
fish_type = "electric eel"
|
||||
fish_type = /datum/fish/electric_eel
|
||||
|
||||
/obj/item/fish_eggs/glofish
|
||||
name = "glofish eggs"
|
||||
desc = "A cluster of bright neon eggs belonging to a bio-luminescent species of fish."
|
||||
icon_state = "glofish_eggs"
|
||||
fish_type = "glofish"
|
||||
fish_type = /datum/fish/glofish
|
||||
|
||||
|
||||
@@ -1,17 +1,4 @@
|
||||
|
||||
var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfish,
|
||||
"clownfish" = /obj/item/weapon/grown/bananapeel/clownfish,
|
||||
"shark" = /obj/item/weapon/fish/shark,
|
||||
"baby space carp" = /obj/item/weapon/fish/babycarp,
|
||||
"catfish" = /obj/item/weapon/fish/catfish,
|
||||
"feederfish" = /obj/item/weapon/reagent_containers/food/snacks/feederfish,
|
||||
"salmon" = /obj/item/weapon/fish/salmon,
|
||||
"shrimp" = /obj/item/weapon/reagent_containers/food/snacks/shrimp,
|
||||
"electric eel" = /obj/item/weapon/fish/electric_eel,
|
||||
"glofish" = /obj/item/weapon/fish/glofish
|
||||
,
|
||||
)
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// Aquarium Supplies //
|
||||
//////////////////////////////////////////////
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
|
||||
/datum/fish
|
||||
var/fish_name = "generic fish"
|
||||
var/egg_item = /obj/item/fish_eggs
|
||||
var/fish_item = /obj/item/weapon/fish
|
||||
var/crossbreeder = 1 //determines if the fish will attempt to breed with other types, set to 0 if you want the fish to only lay eggs with its own species
|
||||
|
||||
/datum/fish/proc/special_interact(obj/machinery/fishtank/my_tank)
|
||||
return
|
||||
|
||||
/datum/fish/goldfish
|
||||
fish_name = "goldfish"
|
||||
egg_item = /obj/item/fish_eggs/goldfish
|
||||
fish_item = /obj/item/weapon/fish/goldfish
|
||||
|
||||
/datum/fish/glofish
|
||||
fish_name = "glofish"
|
||||
egg_item = /obj/item/fish_eggs/glofish
|
||||
fish_item = /obj/item/weapon/fish/glofish
|
||||
|
||||
/datum/fish/clownfish
|
||||
fish_name = "clownfish"
|
||||
egg_item = /obj/item/fish_eggs/clownfish
|
||||
fish_item = /obj/item/weapon/grown/bananapeel/clownfish
|
||||
|
||||
/datum/fish/shark
|
||||
fish_name = "shark"
|
||||
egg_item = /obj/item/fish_eggs/shark
|
||||
fish_item = /obj/item/weapon/fish/shark
|
||||
|
||||
/datum/fish/babycarp
|
||||
fish_name = "baby space carp"
|
||||
egg_item = /obj/item/fish_eggs/babycarp
|
||||
fish_item = /obj/item/weapon/fish/babycarp
|
||||
|
||||
/datum/fish/catfish
|
||||
fish_name = "catfish"
|
||||
egg_item = /obj/item/fish_eggs/catfish
|
||||
fish_item = /obj/item/weapon/fish/catfish
|
||||
|
||||
/datum/fish/catfish/special_interact(obj/machinery/fishtank/my_tank)
|
||||
if(!my_tank || !istype(my_tank))
|
||||
return
|
||||
if(my_tank.filth_level > 0 && prob(33))
|
||||
my_tank.adjust_filth_level(-0.1)
|
||||
|
||||
/datum/fish/salmon
|
||||
fish_name = "salmon"
|
||||
egg_item = /obj/item/fish_eggs/salmon
|
||||
fish_item = /obj/item/weapon/fish/salmon
|
||||
|
||||
/datum/fish/shrimp
|
||||
fish_name = "shrimp"
|
||||
egg_item = /obj/item/fish_eggs/shrimp
|
||||
fish_item = /obj/item/weapon/reagent_containers/food/snacks/shrimp
|
||||
crossbreeder = 0
|
||||
|
||||
/datum/fish/feederfish
|
||||
fish_name = "feeder fish"
|
||||
egg_item = /obj/item/fish_eggs/feederfish
|
||||
fish_item = /obj/item/weapon/reagent_containers/food/snacks/feederfish
|
||||
|
||||
/datum/fish/feederfish/special_interact(obj/machinery/fishtank/my_tank)
|
||||
if(!my_tank || !istype(my_tank))
|
||||
return
|
||||
if(my_tank.fish_count < 2)
|
||||
return
|
||||
if(my_tank.food_level <= 5 && prob(25))
|
||||
my_tank.adjust_food_level(1)
|
||||
my_tank.kill_fish(src)
|
||||
|
||||
/datum/fish/electric_eel
|
||||
fish_name = "electric eel"
|
||||
egg_item = /obj/item/fish_eggs/electric_eel
|
||||
fish_item = /obj/item/weapon/fish/electric_eel
|
||||
crossbreeder = 0
|
||||
@@ -112,7 +112,7 @@
|
||||
if(light_switch)
|
||||
set_light(2,2,"#a0a080")
|
||||
else
|
||||
set_light(0)
|
||||
adjust_tank_light()
|
||||
|
||||
//////////////////////////////
|
||||
// NEW() PROCS //
|
||||
@@ -176,6 +176,7 @@
|
||||
/obj/machinery/fishtank/process()
|
||||
//Start by counting fish in the tank
|
||||
fish_count = 0
|
||||
var/ate_food = 0
|
||||
for(var/fish in fish_list)
|
||||
if(fish)
|
||||
fish_count++
|
||||
@@ -184,43 +185,38 @@
|
||||
if((fish_count * 50) > water_level)
|
||||
if(prob(50)) //Not enough water for all the fish, chance to kill one
|
||||
kill_fish() //Chance passed, kill a random fish
|
||||
filth_level += 2 //Dead fish raise the filth level quite a bit, reflect this
|
||||
adjust_filth_level(2) //Dead fish raise the filth level quite a bit, reflect this
|
||||
|
||||
//Check filth_level
|
||||
check_filth_level()
|
||||
if(filth_level == 10 && fish_count > 0) //This tank is nasty and possibly unsuitable for fish if any are in it
|
||||
if(prob(30)) //Chance for a fish to die each cycle while the tank is this nasty
|
||||
kill_fish() //Kill a random fish, don't raise filth level since we're at cap already
|
||||
|
||||
//Check breeding conditions
|
||||
if(fish_count >=2 && egg_count < max_fish) //Need at least 2 fish to breed, but won't breed if there are as many eggs as max_fish
|
||||
if(food_level > 2 && filth_level <=5) //Breeding is going to use extra food, and the filth_level shouldn't be too high
|
||||
if(food_level >= 0.2 && filth_level <=5) //Breeding is going to use extra food, and the filth_level shouldn't be too high
|
||||
if(prob(((fish_count - 2) * 5)+10)) //Chances increase with each additional fish, 10% base + 5% per additional fish
|
||||
egg_count++ //A new set of eggs were laid, increase egg_count
|
||||
egg_list.Add(select_egg_type()) //Add the new egg to the egg_list for storage
|
||||
food_level -= 2 //Remove extra food for the breeding process
|
||||
breed_fish()
|
||||
adjust_food_level(-0.2) //Remove extra food for the breeding process
|
||||
ate_food = 1
|
||||
|
||||
//Handle standard food and filth adjustments
|
||||
check_food_level()
|
||||
var/ate_food = 0
|
||||
if(food_level > 0 && prob(50)) //Chance for the fish to eat some food
|
||||
if(food_level >= (fish_count * 0.1)) //If there is at least enough food to go around, feed all the fish
|
||||
food_level -= fish_count * 0.1
|
||||
adjust_food_level(fish_count * -0.1)
|
||||
else //Use up the last of the food
|
||||
food_level = 0
|
||||
adjust_food_level(-food_level)
|
||||
ate_food = 1
|
||||
check_food_level()
|
||||
|
||||
if(water_level > 0) //Don't dirty the tank if it has no water
|
||||
if(fish_count == 0) //If the tank has no fish, algae growth can occur
|
||||
if(filth_level < 7.5 && prob(15)) //Algae growth is a low chance and cannot exceed filth_level of 7.5
|
||||
filth_level += 0.05 //Algae growth is slower than fish filth build-up
|
||||
adjust_filth_level(0.05) //Algae growth is slower than fish filth build-up
|
||||
else if(filth_level < 10 && prob(10)) //Chance for the tank to get dirtier if the filth_level isn't 10
|
||||
if(ate_food && prob(25)) //If they ate this cycle, there is an additional chance they make a bigger mess
|
||||
filth_level += fish_count * 0.1
|
||||
adjust_filth_level(fish_count * 0.1)
|
||||
else //If they didn't make the big mess, make a little one
|
||||
filth_level += 0.1
|
||||
check_filth_level()
|
||||
adjust_filth_level(0.1)
|
||||
|
||||
//Handle special interactions
|
||||
handle_special_interactions()
|
||||
@@ -228,54 +224,42 @@
|
||||
//Handle water leakage from damage
|
||||
if(water_level > 0) //Can't leak water if there is no water in the tank
|
||||
if(leaking == 2) //At or below 25% health, the tank will lose 10 water_level per cycle (major leak)
|
||||
water_level -= 10
|
||||
adjust_water_level(-10)
|
||||
else if(leaking == 1) //At or below 50% health, the tank will lose 1 water_level per cycle (minor leak)
|
||||
water_level -= 1
|
||||
check_water_level()
|
||||
adjust_water_level(-1)
|
||||
update_icon()
|
||||
|
||||
//////////////////////////////
|
||||
// SUPPORT PROCS //
|
||||
//////////////////////////////
|
||||
|
||||
/obj/machinery/fishtank/proc/handle_special_interactions()
|
||||
var/glo_light = 0
|
||||
for(var/fish in fish_list)
|
||||
switch(fish)
|
||||
if("catfish") //Catfish have a small chance of cleaning some filth since they are a bottom-feeder
|
||||
if((filth_level > 0) && prob(30))
|
||||
filth_level -= 0.1
|
||||
if("feederfish") //Feeder fish have a small chance of sacrificing themselves to produce some food
|
||||
if(fish_count < 2) //Don't sacrifice the last fish, there's nothing to eat it
|
||||
continue
|
||||
if(food_level <= 5 && prob(25))
|
||||
kill_fish("feederfish") //Kill the fish to reflect it's sacrifice, but don't increase the filth_level
|
||||
food_level += 1 //The corpse became food for the other fish, ecology at it's finest
|
||||
if("glofish")
|
||||
glo_light++
|
||||
if(!light_switch && (glo_light > 0))
|
||||
set_light(2,glo_light,"#99FF66")
|
||||
check_food_level()
|
||||
check_filth_level()
|
||||
check_water_level()
|
||||
for(var/datum/fish/fish in fish_list)
|
||||
fish.special_interact(src)
|
||||
adjust_tank_light()
|
||||
|
||||
/obj/machinery/fishtank/proc/check_water_level()
|
||||
if(water_level < 0) //Water_level cannot be negative, set it to 0 if it is
|
||||
water_level = 0
|
||||
if(water_level > water_capacity) //Water_level cannot exceed capacity, set it to capacity if it does
|
||||
water_level = water_capacity
|
||||
/obj/machinery/fishtank/proc/adjust_tank_light()
|
||||
if(light_switch) //tank light overrides fish lights
|
||||
return
|
||||
else
|
||||
var/glo_light = 0
|
||||
for(var/datum/fish/fish in fish_list)
|
||||
if(istype(fish, /datum/fish/glofish))
|
||||
glo_light ++
|
||||
if(glo_light)
|
||||
set_light(2, glo_light, "#99FF66")
|
||||
else
|
||||
set_light(0, 0)
|
||||
|
||||
/obj/machinery/fishtank/proc/adjust_water_level(amount = 0)
|
||||
water_level = min(water_capacity, max(0, water_level + amount))
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/fishtank/proc/check_filth_level()
|
||||
if(filth_level < 0) //Filth_level cannot be negative, set it to 0 if it is
|
||||
filth_level = 0
|
||||
if(filth_level > 10) //Filth_level cannot exceed 10 (cap), set it to 10 if it does
|
||||
filth_level = 10
|
||||
/obj/machinery/fishtank/proc/adjust_filth_level(amount = 0)
|
||||
filth_level = min(10, max(0, filth_level + amount))
|
||||
|
||||
/obj/machinery/fishtank/proc/check_food_level()
|
||||
if(food_level < 0) //Food_level cannot be negative, set it to 0 if it is
|
||||
food_level = 0
|
||||
if(food_level > 10) //Food_level cannot exceed 10 (cap), set it to 10 if it does
|
||||
food_level = 10
|
||||
/obj/machinery/fishtank/proc/adjust_food_level(amount = 0)
|
||||
food_level = min(10, max(0, food_level + amount))
|
||||
|
||||
/obj/machinery/fishtank/proc/check_health()
|
||||
//Max value check
|
||||
@@ -292,37 +276,28 @@
|
||||
if(cur_health <= 0) //The tank is broken, destroy it
|
||||
destroy()
|
||||
|
||||
/obj/machinery/fishtank/proc/kill_fish(var/type = null)
|
||||
/obj/machinery/fishtank/proc/kill_fish(datum/fish/fish_type = null)
|
||||
//Check if we were passed a fish to kill, otherwise kill a random one
|
||||
if(type)
|
||||
fish_list.Remove(type) //Kill a fish of the specified type
|
||||
fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine
|
||||
else
|
||||
fish_list.Remove(pick(fish_list)) //Kill a random fish
|
||||
fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine
|
||||
if(!fish_type)
|
||||
fish_type = pick(fish_list)
|
||||
fish_list.Remove(fish_type) //Kill a fish of the specified type
|
||||
fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine
|
||||
if(istype(fish_type, /datum/fish/glofish))
|
||||
adjust_tank_light()
|
||||
qdel(fish_type)
|
||||
|
||||
/obj/machinery/fishtank/proc/add_fish(var/type = null)
|
||||
/obj/machinery/fishtank/proc/add_fish(datum/fish/fish_type = null)
|
||||
//Check if we were passed a fish type
|
||||
if(type)
|
||||
fish_list.Add("[type]") //Add a fish of the specified type
|
||||
if(fish_type)
|
||||
fish_type = new fish_type
|
||||
fish_list.Add(fish_type) //Add a fish of the specified type
|
||||
fish_count++ //Increase fish_count to reflect the introduction of a fish, so the everything else works fine
|
||||
//Announce the new fish
|
||||
src.visible_message("A new [type] has hatched in \the [src]!")
|
||||
visible_message("A new [fish_type.fish_name] has hatched in \the [src]!")
|
||||
//Null type fish are dud eggs, give a message to inform the player
|
||||
else
|
||||
to_chat(usr, "The eggs disolve in the water. They were duds!")
|
||||
|
||||
/obj/machinery/fishtank/proc/select_egg_type()
|
||||
var/fish = pick(fish_list) //Select a fish from the fish in the tank
|
||||
if(prob(25)) //25% chance to be a dud (blank) egg
|
||||
fish = "dud"
|
||||
var/obj/item/fish_eggs/egg_path = null //Create empty variable to receive the egg_path
|
||||
egg_path = fish_eggs_list[fish] //Locate the corresponding path from fish_eggs_list that matches the fish
|
||||
if(!egg_path) //The fish wasn't located in the fish_eggs_list, potentially due to a typo, so return a dud egg
|
||||
return /obj/item/fish_eggs
|
||||
else //The fish was located in the fish_eggs_list, so return the proper egg
|
||||
return egg_path
|
||||
|
||||
/obj/machinery/fishtank/proc/harvest_eggs(var/mob/user)
|
||||
if(!egg_count) //Can't harvest non-existant eggs
|
||||
return
|
||||
@@ -342,17 +317,17 @@
|
||||
if(!fish_count) //Can't catch non-existant fish!
|
||||
to_chat(usr, "There are no fish in \the [src] to catch!")
|
||||
return
|
||||
|
||||
var/caught_fish
|
||||
caught_fish = input("Select a fish to catch.", "Fishing", caught_fish) in fish_list //Select a fish from the tank
|
||||
var/list/fish_names_list = list()
|
||||
for(var/datum/fish/fish_type in fish_list)
|
||||
fish_names_list += list("[fish_type.fish_name]" = fish_type)
|
||||
var/caught_fish = input("Select a fish to catch.", "Fishing") as null|anything in fish_names_list //Select a fish from the tank
|
||||
if(caught_fish)
|
||||
var/dead_fish = null
|
||||
dead_fish = fish_items_list[caught_fish] //Locate the appropriate fish_item for the caught fish
|
||||
if(!dead_fish) //No fish_item found, possibly due to typo or not being listed. Do nothing.
|
||||
return
|
||||
kill_fish(caught_fish) //Kill the caught fish from the tank
|
||||
user.visible_message("[user.name] harvests \a [caught_fish] from \the [src].", "You scoop \a [caught_fish] out of \the [src].")
|
||||
new dead_fish(get_turf(user)) //Spawn the appropriate fish_item at the user's feet.
|
||||
var/datum/fish/fish_type = fish_names_list[caught_fish]
|
||||
var/fish_item = fish_type.fish_item
|
||||
if(fish_item)
|
||||
new fish_item(get_turf(user)) //Spawn the appropriate fish_item at the user's feet.
|
||||
kill_fish(fish_type) //Kill the caught fish from the tank
|
||||
|
||||
/obj/machinery/fishtank/proc/destroy(var/deconstruct = 0)
|
||||
var/turf/T = get_turf(src) //Store the tank's turf for atmos updating after deletion of tank
|
||||
@@ -392,6 +367,34 @@
|
||||
var/turf/simulated/S = T
|
||||
S.MakeSlippery()
|
||||
|
||||
/obj/machinery/fishtank/proc/breed_fish()
|
||||
var/list/breed_candidates = fish_list.Copy()
|
||||
var/datum/fish/parent1 = pick_n_take(breed_candidates)
|
||||
var/datum/fish/parent2 = null
|
||||
if(!parent1.crossbreeder) //fish with crossbreed = 0 will only breed with their own species, and only leave duds if they can't breed
|
||||
if(parent1 in breed_candidates)
|
||||
egg_list.Add(parent1.egg_item)
|
||||
else
|
||||
egg_list.Add(/obj/item/fish_eggs)
|
||||
else
|
||||
parent2 = pick(breed_candidates)
|
||||
if(!parent2.crossbreeder) //second fish refuses to crossbreed, spawn a dud
|
||||
egg_list.Add(/obj/item/fish_eggs)
|
||||
else if(parent1 == parent2) //both fish are the same type
|
||||
if(prob(90)) //90% chance to get that type of egg
|
||||
egg_list.Add(parent1.egg_item)
|
||||
else //10% chance to get a dud
|
||||
egg_list.Add(/obj/item/fish_eggs)
|
||||
else //different types of fish
|
||||
if(prob(30)) //30% chance to get dud
|
||||
egg_list.Add(/obj/item/fish_eggs)
|
||||
else
|
||||
if(prob(50)) //chance to get egg for either parent type (50/50 for either parent, 35% overall each)
|
||||
egg_list.Add(parent1.egg_item)
|
||||
else
|
||||
egg_list.Add(parent2.egg_item)
|
||||
egg_count++
|
||||
|
||||
////////////////////////////// Note from FalseIncarnate:
|
||||
// EXAMINE PROC // This proc is massive, messy, and probably could be handled better.
|
||||
////////////////////////////// Feel free to try cleaning it up if you think of a better way to do it.
|
||||
@@ -464,9 +467,11 @@
|
||||
var/fish_num = fish_count
|
||||
var/message = "You spot "
|
||||
while(fish_num > 0)
|
||||
var/datum/fish/fish_type = fish_list[fish_num]
|
||||
var/fish_name = fish_type.fish_name
|
||||
if(fish_count > 1 && fish_num == 1) //If there were at least 2 fish, and this is the last one, add "and" to the message
|
||||
message += "and "
|
||||
message += "a [fish_list[fish_num]]"
|
||||
message += "\an [fish_name]"
|
||||
fish_num --
|
||||
if(fish_num > 0) //There's more fish, add a comma to the message
|
||||
message +=", "
|
||||
@@ -645,13 +650,13 @@
|
||||
return
|
||||
else
|
||||
message = "The filtration process purifies the water, raising the water level."
|
||||
water_level += water_value
|
||||
if(water_level == water_capacity)
|
||||
|
||||
if((water_level + water_value) == water_capacity)
|
||||
message += " You filled \the [src] to the brim!"
|
||||
if(water_level > water_capacity)
|
||||
if((water_level + water_value) > water_capacity)
|
||||
message += " You overfilled \the [src] and some water runs down the side, wasted."
|
||||
C.reagents.clear_reagents()
|
||||
check_water_level()
|
||||
adjust_water_level(water_value)
|
||||
user.visible_message("[user.name] pours the contents of [C.name] into \the [src].", "[message]")
|
||||
return
|
||||
//Empty containers will scoop out water, filling the container as much as possible from the water_level
|
||||
@@ -661,13 +666,12 @@
|
||||
else
|
||||
if(water_level >= C.volume) //Enough to fill the container completely
|
||||
C.reagents.add_reagent("fishwater", C.volume)
|
||||
water_level -= C.volume
|
||||
adjust_water_level(-C.volume)
|
||||
user.visible_message("[user.name] scoops out some water from \the [src].", "You completely fill [C.name] from \the [src].")
|
||||
else //Fill the container as much as possible with the water_level
|
||||
C.reagents.add_reagent("fishwater", water_level)
|
||||
water_level = 0
|
||||
adjust_water_level(-water_level)
|
||||
user.visible_message("[user.name] scoops out some water from \the [src].", "You fill [C.name] with the last of the water in \the [src].")
|
||||
check_water_level()
|
||||
return
|
||||
//Wrenches can deconstruct empty tanks, but not tanks with any water. Kills any fish left inside and destroys any unharvested eggs in the process
|
||||
if(istype(O, /obj/item/weapon/wrench))
|
||||
@@ -702,12 +706,11 @@
|
||||
user.visible_message("[user.name] shakes some fish food into the empty [src]... How sad.", "You shake some fish food into the empty [src]... If only it had fish.")
|
||||
else
|
||||
user.visible_message("[user.name] feeds the fish in \the [src]. The fish look excited!", "You feed the fish in \the [src]. They look excited!")
|
||||
food_level += 10
|
||||
adjust_food_level(10)
|
||||
else
|
||||
to_chat(usr, "[src] already has plenty of food in it. You decide to not add more.")
|
||||
else
|
||||
to_chat(usr, "[src] doesn't have any water in it. You should fill it with water first.")
|
||||
check_food_level()
|
||||
return
|
||||
//Fish egg scoop
|
||||
else if(istype(O, /obj/item/weapon/egg_scoop))
|
||||
@@ -726,7 +729,7 @@
|
||||
if(filth_level == 0)
|
||||
to_chat(usr, "[src] is already spotless!")
|
||||
else
|
||||
filth_level = 0
|
||||
adjust_filth_level(-filth_level)
|
||||
user.visible_message("[user.name] scrubs the inside of \the [src], cleaning the filth.", "You scrub the inside of \the [src], cleaning the filth.")
|
||||
else if(O && O.force)
|
||||
user.visible_message("<span class='danger'>\The [src] has been attacked by [user.name] with \the [O]!</span>")
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
rarity = 20
|
||||
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
|
||||
mutatelist = list(/obj/item/seeds/glowshroom/glowcap)
|
||||
mutatelist = list(/obj/item/seeds/glowshroom/glowcap, /obj/item/seeds/glowshroom/shadowshroom)
|
||||
reagents_add = list("radium" = 0.1, "phosphorus" = 0.1, "nutriment" = 0.04)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom
|
||||
@@ -235,14 +235,25 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user)
|
||||
if(istype(user.loc, /turf/space))
|
||||
return
|
||||
var/obj/effect/glowshroom/planted = new effect_path(user.loc)
|
||||
planted.delay = planted.delay - seed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
|
||||
planted.endurance = seed.endurance
|
||||
planted.yield = seed.yield
|
||||
planted.potency = seed.potency
|
||||
return FALSE
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You need more space to plant [src].</span>")
|
||||
return FALSE
|
||||
var/count = 0
|
||||
var/maxcount = 1
|
||||
for(var/tempdir in cardinal)
|
||||
var/turf/simulated/wall = get_step(user.loc, tempdir)
|
||||
if(istype(wall))
|
||||
maxcount++
|
||||
for(var/obj/effect/glowshroom/G in user.loc)
|
||||
count++
|
||||
if(count >= maxcount)
|
||||
to_chat(user, "<span class='warning'>There are too many shrooms here to plant [src].</span>")
|
||||
return FALSE
|
||||
new effect_path(user.loc, seed)
|
||||
to_chat(user, "<span class='notice'>You plant [src].</span>")
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
|
||||
// Glowcap
|
||||
@@ -255,7 +266,7 @@
|
||||
icon_dead = "glowshroom-dead"
|
||||
plantname = "Glowcaps"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap
|
||||
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
genes = list(/datum/plant_gene/trait/glow/red, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
mutatelist = list()
|
||||
reagents_add = list("teslium" = 0.1, "nutriment" = 0.04)
|
||||
rarity = 30
|
||||
@@ -263,7 +274,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap
|
||||
seed = /obj/item/seeds/glowshroom/glowcap
|
||||
name = "glowcap cluster"
|
||||
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but aren't bioluminescent. They're warm to the touch..."
|
||||
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but isn't actually bioluminescent. They're warm to the touch..."
|
||||
icon_state = "glowcap"
|
||||
filling_color = "#00FA9A"
|
||||
effect_path = /obj/effect/glowshroom/glowcap
|
||||
@@ -292,3 +303,26 @@
|
||||
desc = "A fungus ideal for making antibacterials."
|
||||
icon_state = "angel"
|
||||
color = "#4f4331"
|
||||
|
||||
//Shadowshroom
|
||||
/obj/item/seeds/glowshroom/shadowshroom
|
||||
name = "pack of shadowshroom mycelium"
|
||||
desc = "This mycelium will grow into something shadowy."
|
||||
icon_state = "mycelium-shadowshroom"
|
||||
species = "shadowshroom"
|
||||
icon_grow = "shadowshroom-grow"
|
||||
icon_dead = "shadowshroom-dead"
|
||||
plantname = "Shadowshrooms"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom
|
||||
genes = list(/datum/plant_gene/trait/glow/shadow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
mutatelist = list()
|
||||
reagents_add = list("radium" = 0.2, "nutriment" = 0.04)
|
||||
rarity = 30
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom
|
||||
seed = /obj/item/seeds/glowshroom/shadowshroom
|
||||
name = "shadowshroom cluster"
|
||||
desc = "<I>Mycena Umbra</I>: This species of mushroom emits shadow instead of light."
|
||||
icon_state = "shadowshroom"
|
||||
effect_path = /obj/effect/glowshroom/shadowshroom
|
||||
origin_tech = "biotech=4;plasmatech=4;magnets=4"
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
sharp = 1
|
||||
edge = 1
|
||||
var/extend = 1
|
||||
|
||||
/obj/item/weapon/scythe/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is beheading \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
@@ -131,6 +132,64 @@
|
||||
playsound(loc, pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg'), 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/scythe/tele
|
||||
icon_state = "tscythe0"
|
||||
item_state = null //no sprite for folded version, like a tele-baton
|
||||
name = "telescopic scythe"
|
||||
desc = "A sharp and curved blade on a collapsable fibre metal handle, this tool is the pinnacle of covert reaping technology."
|
||||
force = 3
|
||||
sharp = 0
|
||||
edge = 0
|
||||
w_class = 2
|
||||
extend = 0
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=3;combat=3"
|
||||
attack_verb = list("hit", "poked")
|
||||
hitsound = "swing_hit"
|
||||
|
||||
/obj/item/weapon/scythe/tele/attack_self(mob/user)
|
||||
extend = !extend
|
||||
if(extend)
|
||||
to_chat(user, "<span class='warning'>With a flick of your wrist, you extend the scythe. It's reaping time!</span>")
|
||||
icon_state = "tscythe1"
|
||||
item_state = "scythe0" //use the normal scythe in-hands
|
||||
slot_flags = SLOT_BACK //won't fit on belt, but can be worn on belt when extended
|
||||
w_class = 4 //won't fit in backpacks while extended
|
||||
force = 15 //slightly better than normal scythe damage
|
||||
attack_verb = list("chopped", "sliced", "cut", "reaped")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
//Extend sound (blade unsheath)
|
||||
playsound(src.loc, 'sound/weapons/blade_unsheath.ogg', 50, 1) //Sound credit to Qat of Freesound.org
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You collapse the scythe, folding it away for easy storage.</span>")
|
||||
icon_state = "tscythe0"
|
||||
item_state = null //no sprite for folded version, like a tele-baton
|
||||
slot_flags = SLOT_BELT //can be worn on belt again, but no longer makes sense to wear on the back
|
||||
w_class = 2
|
||||
force = 3
|
||||
attack_verb = list("hit", "poked")
|
||||
hitsound = "swing_hit"
|
||||
//Collapse sound (blade sheath)
|
||||
playsound(src.loc, 'sound/weapons/blade_sheath.ogg', 50, 1) //Sound credit to Q.K. of Freesound.org
|
||||
sharp = extend
|
||||
edge = extend
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
add_fingerprint(user)
|
||||
if(!blood_DNA)
|
||||
return
|
||||
if(blood_overlay && (blood_DNA.len >= 1)) //updated blood overlay, if any
|
||||
overlays.Cut() //this might delete other item overlays as well but eeeeeh
|
||||
|
||||
var/icon/I = new /icon(icon, icon_state)
|
||||
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)), ICON_ADD)
|
||||
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY)
|
||||
blood_overlay = I
|
||||
overlays += blood_overlay
|
||||
|
||||
|
||||
// *************************************
|
||||
// Nutrient defines for hydroponics
|
||||
// *************************************
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
if(!self_sustaining)
|
||||
if(myseed && myseed.get_gene(/datum/plant_gene/trait/glow))
|
||||
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
|
||||
set_light(G.get_lum(myseed))
|
||||
set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
@@ -1003,7 +1003,7 @@
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/machinery/hydroponics/attack_animal(mob/living/user)
|
||||
if(istype(user, /mob/living/simple_animal/diona))
|
||||
|
||||
@@ -263,23 +263,40 @@
|
||||
|
||||
/datum/plant_gene/trait/glow
|
||||
// Makes plant glow. Makes plant in tray glow too.
|
||||
// Adds potency*rate luminosity to products.
|
||||
// Adds 1 + potency*rate light range and potency*(rate + 0.01) light_power to products.
|
||||
name = "Bioluminescence"
|
||||
rate = 0.1
|
||||
rate = 0.03
|
||||
examine_line = "<span class='info'>It emits a soft glow.</span>"
|
||||
trait_id = "glow"
|
||||
var/glow_color = "#AAD84B"
|
||||
|
||||
/datum/plant_gene/trait/glow/proc/get_lum(obj/item/seeds/S)
|
||||
return round(S.potency*rate)
|
||||
/datum/plant_gene/trait/glow/proc/glow_range(obj/item/seeds/S)
|
||||
return 1.4 + S.potency*rate
|
||||
|
||||
/datum/plant_gene/trait/glow/proc/glow_power(obj/item/seeds/S)
|
||||
return max(S.potency*(rate + 0.01), 0.1)
|
||||
|
||||
/datum/plant_gene/trait/glow/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc)
|
||||
..()
|
||||
G.set_light(get_lum(G.seed))
|
||||
G.set_light(glow_range(G.seed), glow_power(G.seed), glow_color)
|
||||
|
||||
/datum/plant_gene/trait/glow/shadow
|
||||
//makes plant emit slightly purple shadows
|
||||
//adds -potency*(rate*0.05) light power to products
|
||||
name = "Shadow Emission"
|
||||
rate = 0.04
|
||||
|
||||
/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S)
|
||||
return -max(S.potency*(rate*0.05), 0.075)
|
||||
|
||||
/datum/plant_gene/trait/glow/red
|
||||
name = "Red Electrical Glow"
|
||||
glow_color = LIGHT_COLOR_RED
|
||||
|
||||
/datum/plant_gene/trait/glow/berry
|
||||
name = "Strong Bioluminescence"
|
||||
rate = 0.2
|
||||
|
||||
rate = 0.05
|
||||
glow_color = null
|
||||
|
||||
/datum/plant_gene/trait/teleport
|
||||
// Makes plant teleport people when squashed or slipped on.
|
||||
|
||||
@@ -112,6 +112,8 @@
|
||||
return
|
||||
if(panel_open)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
if(inserted_id)
|
||||
inserted_id.forceMove(loc) //Prevents deconstructing the ORM from deleting whatever ID was inside it.
|
||||
empty_content()
|
||||
default_deconstruction_crowbar(W)
|
||||
if(ismultitool(W))
|
||||
@@ -304,6 +306,9 @@
|
||||
/obj/machinery/mineral/ore_redemption/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
if(inserted_id && !powered())
|
||||
visible_message("<span class='notice'>The ID slot indicator light flickers on \the [src] as it spits out a card before powering down.</span>")
|
||||
inserted_id.forceMove(loc)
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/update_icon()
|
||||
if(powered())
|
||||
@@ -387,6 +392,9 @@
|
||||
/obj/machinery/mineral/equipment_vendor/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
if(inserted_id && !powered())
|
||||
visible_message("<span class='notice'>The ID slot indicator light flickers on \the [src] as it spits out a card before powering down.</span>")
|
||||
inserted_id.forceMove(loc)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/update_icon()
|
||||
if(powered())
|
||||
@@ -456,6 +464,8 @@
|
||||
return
|
||||
if(panel_open)
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(inserted_id)
|
||||
inserted_id.forceMove(loc) //Prevents deconstructing the ORM from deleting whatever ID was inside it.
|
||||
default_deconstruction_crowbar(I)
|
||||
return 1
|
||||
if(istype(I, /obj/item/weapon/mining_voucher))
|
||||
|
||||
@@ -13,12 +13,11 @@
|
||||
universal_speak = 1 // Tell the humans spooky things about the afterlife
|
||||
speak_emote = list("mumbles", "moans", "whispers", "laments", "screeches")
|
||||
|
||||
allow_spin = 0 // No spinning. Spinning breaks our floating animation and broken floating animations make ghosts SUPER ANGRY.
|
||||
allow_spin = 0 // No spinning. Spinning breaks our floating animation.
|
||||
no_spin_thrown = 1
|
||||
|
||||
var/obj/item/possessed_item
|
||||
|
||||
|
||||
/mob/living/simple_animal/possessed_object/examine(mob/user)
|
||||
possessed_item.examine(user)
|
||||
if(health > (maxHealth / 30))
|
||||
@@ -47,15 +46,17 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/possessed_object/death(gibbed)
|
||||
var/mob/dead/observer/ghost = ghostize(1)
|
||||
..()
|
||||
|
||||
if(gibbed) // Leave no trace.
|
||||
var/mob/dead/observer/ghost = ghostize(1)
|
||||
ghost.timeofdeath = world.time
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
possessed_item.forceMove(loc) // Put the normal item back once the EVIL SPIRIT has been vanquished from it.
|
||||
if(possessed_item.loc == src)
|
||||
possessed_item.forceMove(loc) // Put the normal item back once the EVIL SPIRIT has been vanquished from it. If it's not already in place
|
||||
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -65,15 +66,23 @@
|
||||
if(!possessed_item) // If we're a donut and someone's eaten us, for instance.
|
||||
death(1)
|
||||
|
||||
if(possessed_item.loc != src)
|
||||
forceMove(possessed_item.loc)
|
||||
possessed_item.forceMove(src)
|
||||
if( possessed_item.loc != src )
|
||||
if ( isturf(possessed_item.loc) ) // If we've, say, placed the possessed item on the table move onto the table ourselves instead and put it back inside of us.
|
||||
forceMove(possessed_item.loc)
|
||||
possessed_item.forceMove(src)
|
||||
else // If we're inside a toolbox or something, we are inside the item rather than the item inside us. This is so people can see the item in the toolbox.
|
||||
forceMove( possessed_item )
|
||||
|
||||
if(l_hand) // Incase object interactions put things directly into our hands. (Like cameras, or gun magizines)
|
||||
drop_l_hand()
|
||||
if(r_hand)
|
||||
drop_r_hand()
|
||||
|
||||
/mob/living/simple_animal/possessed_object/Login()
|
||||
..()
|
||||
to_chat(src, "<span class='shadowling'><b>Your spirit has entered [src] and possessed it.</b><br>You are able to do most things a humanoid would be able to do with a [src] in their hands.<br>If you want to end your ghostly possession, use the '<b>ghost</b>' verb, it won't penalize your ability to respawn.</span>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/possessed_object/New(var/atom/loc as obj)
|
||||
..()
|
||||
|
||||
@@ -89,23 +98,14 @@
|
||||
qdel(src)
|
||||
|
||||
possessed_item = loc
|
||||
forceMove(possessed_loc)
|
||||
forceMove( possessed_loc )
|
||||
possessed_item.forceMove(src) // We'll keep the actual item inside of us until we die.
|
||||
|
||||
zone_sel = new /obj/screen/zone_sel(src) // Create a new zone selection item so the human attacks have something to reference.
|
||||
zone_sel = new /obj/screen/zone_sel(src) // Create a new zone selection item so the human attacks have something to reference. Horrifying and ugly hack, do not look directly at this.
|
||||
|
||||
name = possessed_item.name // Take on all the attributes of the item we've possessed.
|
||||
real_name = name
|
||||
desc = possessed_item.desc
|
||||
icon = possessed_item.icon
|
||||
icon_living = possessed_item.icon_state
|
||||
icon_state = possessed_item.icon_state
|
||||
dir = possessed_item.dir
|
||||
color = possessed_item.color
|
||||
overlays = possessed_item.overlays
|
||||
set_opacity(possessed_item.opacity)
|
||||
update_icon(1)
|
||||
|
||||
visible_message("<span class='warning'>[src] rises into the air and begins to float!</span>") // Inform those around us that shit's gettin' spooky.
|
||||
visible_message("<span class='shadowling'>[src] rises into the air and begins to float!</span>") // Inform those around us that shit's gettin' spooky.
|
||||
animate_ghostly_presence(src, -1, 20, 1)
|
||||
|
||||
|
||||
@@ -138,17 +138,26 @@
|
||||
else
|
||||
..()
|
||||
|
||||
if(possessed_item.loc != src) // If we've, say, placed the possessed item on the table move onto the table ourselves instead and put it back inside of us.
|
||||
forceMove(possessed_item.loc)
|
||||
possessed_item.forceMove(src)
|
||||
if( possessed_item.loc != src )
|
||||
if ( isturf(possessed_item.loc) ) // If we've, say, placed the possessed item on the table move onto the table ourselves instead and put it back inside of us.
|
||||
forceMove(possessed_item.loc)
|
||||
possessed_item.forceMove(src)
|
||||
else // If we're inside a toolbox or something, we are inside the item rather than the item inside us. This is so people can see the item in the toolbox.
|
||||
forceMove( possessed_item )
|
||||
|
||||
name = possessed_item.name // Update our status
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/possessed_object/proc/update_icon(update_pixel_xy = 0)
|
||||
name = possessed_item.name // Take on all the attributes of the item we've possessed.
|
||||
real_name = name
|
||||
desc = possessed_item.desc
|
||||
icon = possessed_item.icon
|
||||
icon_living = possessed_item.icon_state
|
||||
icon_state = possessed_item.icon_state
|
||||
dir = possessed_item.dir
|
||||
if(update_pixel_xy)
|
||||
pixel_x = possessed_item.pixel_x
|
||||
pixel_y = possessed_item.pixel_y
|
||||
color = possessed_item.color
|
||||
overlays = possessed_item.overlays
|
||||
opacity = possessed_item.opacity
|
||||
set_opacity(possessed_item.opacity)
|
||||
@@ -431,106 +431,87 @@
|
||||
/datum/sprite_accessory/hair/ipc
|
||||
species_allowed = list("Machine")
|
||||
glasses_over = 1
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.", "Shellguard Munitions Monitor Series")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_pink
|
||||
name = "Pink IPC Screen"
|
||||
icon_state = "ipc_pink"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_red
|
||||
name = "Red IPC Screen"
|
||||
icon_state = "ipc_red"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_green
|
||||
name = "Green IPC Screen"
|
||||
icon_state = "ipc_green"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_blue
|
||||
name = "Blue IPC Screen"
|
||||
icon_state = "ipc_blue"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_breakout
|
||||
name = "Breakout IPC Screen"
|
||||
icon_state = "ipc_breakout"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_eight
|
||||
name = "Eight IPC Screen"
|
||||
icon_state = "ipc_eight"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_rainbow
|
||||
name = "Rainbow IPC Screen"
|
||||
icon_state = "ipc_rainbow"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_goggles
|
||||
name = "Goggles IPC Screen"
|
||||
icon_state = "ipc_goggles"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_heart
|
||||
name = "Heart IPC Screen"
|
||||
icon_state = "ipc_heart"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_monoeye
|
||||
name = "Monoeye IPC Screen"
|
||||
icon_state = "ipc_monoeye"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_nature
|
||||
name = "Nature IPC Screen"
|
||||
icon_state = "ipc_nature"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_orange
|
||||
name = "Orange IPC Screen"
|
||||
icon_state = "ipc_orange"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_purple
|
||||
name = "Purple IPC Screen"
|
||||
icon_state = "ipc_purple"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_shower
|
||||
name = "Shower IPC Screen"
|
||||
icon_state = "ipc_shower"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_static
|
||||
name = "Static IPC Screen"
|
||||
icon_state = "ipc_static"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_yellow
|
||||
name = "Yellow IPC Screen"
|
||||
icon_state = "ipc_yellow"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_scrolling
|
||||
name = "Scanline IPC Screen"
|
||||
icon_state = "ipc_scroll"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_console
|
||||
name = "Console IPC Screen"
|
||||
icon_state = "ipc_console"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_rgb
|
||||
name = "RGB IPC Screen"
|
||||
icon_state = "ipc_rgb"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_glider
|
||||
name = "Glider IPC Screen"
|
||||
icon_state = "ipc_gol_glider"
|
||||
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/hesphiastos_alt_off
|
||||
name = "Dark Hesphiastos Screen"
|
||||
@@ -1151,13 +1132,13 @@
|
||||
///////////////////////////
|
||||
/datum/sprite_accessory/underwear
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skeleton", "Drask")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask")
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/underwear/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skeleton", "Drask", "Vox")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask", "Vox")
|
||||
|
||||
/datum/sprite_accessory/underwear/male
|
||||
gender = MALE
|
||||
@@ -1277,13 +1258,13 @@
|
||||
////////////////////////////
|
||||
/datum/sprite_accessory/undershirt
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skeleton", "Drask")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask")
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skeleton", "Drask", "Vox")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask", "Vox")
|
||||
|
||||
//plain color shirts
|
||||
/datum/sprite_accessory/undershirt/shirt_white
|
||||
@@ -1513,13 +1494,13 @@
|
||||
///////////////////////
|
||||
/datum/sprite_accessory/socks
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skeleton", "Drask")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask")
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/socks/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skeleton", "Drask", "Vox")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask", "Vox")
|
||||
|
||||
/datum/sprite_accessory/socks/white_norm
|
||||
name = "Normal White"
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/paper/proc/parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob)
|
||||
t = pencode_to_html(t, usr, P, deffont, signfont, crayonfont)
|
||||
t = pencode_to_html(t, usr, P, TRUE, TRUE, deffont, signfont, crayonfont)
|
||||
|
||||
//Count the fields
|
||||
var/laststart = 1
|
||||
@@ -667,4 +667,4 @@
|
||||
H.reagents.add_reagent(contact_poison, contact_poison_volume)
|
||||
contact_poison = null
|
||||
add_logs(user, src, "picked up [src], the paper poisoned by [contact_poison_poisoner]")
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
var/on_gs = 0
|
||||
var/static_power_used = 0
|
||||
var/brightness_range = 8 // luminosity when on, also used in power calculation
|
||||
var/brightness_power = 3
|
||||
var/brightness_power = 1
|
||||
var/brightness_color = null
|
||||
var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN
|
||||
var/flickering = 0
|
||||
@@ -157,7 +157,6 @@
|
||||
base_state = "bulb"
|
||||
fitting = "bulb"
|
||||
brightness_range = 4
|
||||
brightness_power = 2
|
||||
brightness_color = "#a0a080"
|
||||
desc = "A small lighting fixture."
|
||||
light_type = /obj/item/weapon/light/bulb
|
||||
@@ -190,12 +189,10 @@
|
||||
switch(fitting)
|
||||
if("tube")
|
||||
brightness_range = 8
|
||||
brightness_power = 3
|
||||
if(prob(2))
|
||||
broken(1)
|
||||
if("bulb")
|
||||
brightness_range = 4
|
||||
brightness_power = 2
|
||||
brightness_color = "#a0a080"
|
||||
if(prob(5))
|
||||
broken(1)
|
||||
@@ -608,13 +605,12 @@
|
||||
item_state = "c_tube"
|
||||
materials = list(MAT_GLASS=100)
|
||||
brightness_range = 8
|
||||
brightness_power = 3
|
||||
|
||||
/obj/item/weapon/light/tube/large
|
||||
w_class = 2
|
||||
name = "large light tube"
|
||||
brightness_range = 15
|
||||
brightness_power = 4
|
||||
brightness_power = 2
|
||||
|
||||
/obj/item/weapon/light/bulb
|
||||
name = "light bulb"
|
||||
@@ -624,7 +620,6 @@
|
||||
item_state = "contvapour"
|
||||
materials = list(MAT_GLASS=100)
|
||||
brightness_range = 5
|
||||
brightness_power = 2
|
||||
brightness_color = "#a0a080"
|
||||
|
||||
/obj/item/weapon/light/throw_impact(atom/hit_atom)
|
||||
@@ -639,7 +634,6 @@
|
||||
item_state = "egg4"
|
||||
materials = list(MAT_GLASS=100)
|
||||
brightness_range = 5
|
||||
brightness_power = 2
|
||||
|
||||
// update the icon state and description of the light
|
||||
|
||||
|
||||
@@ -68,11 +68,8 @@
|
||||
if(stat & NOPOWER)
|
||||
icon_state = "[reference]w"
|
||||
return
|
||||
else if(use_power)
|
||||
if(assembled)
|
||||
icon_state = "[reference]p"
|
||||
else
|
||||
icon_state = "u[reference]p"
|
||||
else if(use_power && assembled)
|
||||
icon_state = "[reference]p"
|
||||
else
|
||||
switch(construction_state)
|
||||
if(0)
|
||||
|
||||
@@ -652,7 +652,6 @@
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/necrosis_prob = 40 * min((20 MINUTES), max((time_dead - (1 MINUTES)), 0)) / ((20 MINUTES) - (1 MINUTES))
|
||||
to_chat(world, "Necrosis prob: [necrosis_prob]")
|
||||
for(var/obj/item/organ/O in (H.organs | H.internal_organs))
|
||||
// Per non-vital body part:
|
||||
// 0% chance of necrosis within 1 minute of death
|
||||
|
||||
@@ -256,9 +256,9 @@
|
||||
/obj/machinery/conveyor_switch/attack_hand(mob/user)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
|
||||
toggle(user)
|
||||
|
||||
|
||||
/obj/machinery/conveyor_switch/attack_ghost(mob/user)
|
||||
if(user.can_advanced_admin_interact())
|
||||
toggle(user)
|
||||
@@ -292,7 +292,7 @@
|
||||
S.position = position
|
||||
S.update()
|
||||
CHECK_TICK
|
||||
|
||||
|
||||
/obj/machinery/conveyor_switch/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
var/obj/item/conveyor_switch_construct/C = new/obj/item/conveyor_switch_construct(src.loc)
|
||||
@@ -309,7 +309,12 @@
|
||||
/obj/machinery/conveyor_switch/multitool_topic(var/mob/user,var/list/href_list,var/obj/O)
|
||||
..()
|
||||
if("toggle_logic" in href_list)
|
||||
convdir = !convdir //reverses?
|
||||
if(convdir)
|
||||
convdir = 0
|
||||
else if(last_pos)
|
||||
convdir = last_pos
|
||||
else
|
||||
convdir = position
|
||||
|
||||
|
||||
/obj/machinery/conveyor_switch/multitool_menu(var/mob/user, var/obj/item/device/multitool/P)
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
req_tech = list("biotech" = 2, "materials" = 2, "magnets" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500)
|
||||
build_path = /obj/item/weapon/scalpel/laser1
|
||||
build_path = /obj/item/weapon/scalpel/laser/laser1
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/item/scalpel_laser2
|
||||
@@ -175,7 +175,7 @@
|
||||
req_tech = list("biotech" = 3, "materials" = 4, "magnets" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 1000)
|
||||
build_path = /obj/item/weapon/scalpel/laser2
|
||||
build_path = /obj/item/weapon/scalpel/laser/laser2
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/item/scalpel_laser3
|
||||
@@ -185,7 +185,7 @@
|
||||
req_tech = list("biotech" = 4, "materials" = 6, "magnets" = 5)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_GOLD = 1000)
|
||||
build_path = /obj/item/weapon/scalpel/laser3
|
||||
build_path = /obj/item/weapon/scalpel/laser/laser3
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/item/scalpel_manager
|
||||
@@ -195,7 +195,7 @@
|
||||
req_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list (MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_GOLD = 1000, MAT_DIAMOND = 1000)
|
||||
build_path = /obj/item/weapon/scalpel/manager
|
||||
build_path = /obj/item/weapon/scalpel/laser/manager
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/alienscalpel
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
materials = list(MAT_METAL = 700, MAT_GLASS = 50)
|
||||
construction_time=100
|
||||
build_path = /obj/item/weapon/stock_parts/cell
|
||||
category = list("Misc","Power")
|
||||
category = list("Misc","Power","Machinery","initial")
|
||||
|
||||
/datum/design/high_cell
|
||||
name = "High-Capacity Power Cell"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/weapon/stock_parts/capacitor
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
lathe_time_factor = 5
|
||||
|
||||
/datum/design/basic_sensor
|
||||
@@ -21,7 +21,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
|
||||
build_path = /obj/item/weapon/stock_parts/scanning_module
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
lathe_time_factor = 5
|
||||
|
||||
/datum/design/micro_mani
|
||||
@@ -32,7 +32,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 30)
|
||||
build_path = /obj/item/weapon/stock_parts/manipulator
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
lathe_time_factor = 5
|
||||
|
||||
/datum/design/basic_micro_laser
|
||||
@@ -43,7 +43,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 20)
|
||||
build_path = /obj/item/weapon/stock_parts/micro_laser
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
lathe_time_factor = 5
|
||||
|
||||
/datum/design/basic_matter_bin
|
||||
@@ -54,7 +54,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 80)
|
||||
build_path = /obj/item/weapon/stock_parts/matter_bin
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
lathe_time_factor = 5
|
||||
|
||||
/datum/design/adv_capacitor
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
/datum/surgery_step/open_encased/retract
|
||||
name = "retract bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser/manager = 100, \
|
||||
/obj/item/weapon/retractor = 100, \
|
||||
/obj/item/weapon/crowbar = 75
|
||||
)
|
||||
@@ -121,7 +121,7 @@
|
||||
/datum/surgery_step/open_encased/close
|
||||
name = "unretract bone" //i suck at names okay? give me a new one
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser/manager = 100, \
|
||||
/obj/item/weapon/retractor = 100, \
|
||||
/obj/item/weapon/crowbar = 75
|
||||
)
|
||||
|
||||
@@ -28,10 +28,6 @@
|
||||
/datum/surgery_step/generic/cut_face
|
||||
name = "make incision"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/laser3 = 115, \
|
||||
/obj/item/weapon/scalpel/laser2 = 110, \
|
||||
/obj/item/weapon/scalpel/laser1 = 105, \
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel = 100, \
|
||||
/obj/item/weapon/kitchen/knife = 75, \
|
||||
/obj/item/weapon/shard = 50, \
|
||||
@@ -62,7 +58,7 @@
|
||||
/datum/surgery_step/face/mend_vocal
|
||||
name = "mend vocal cords"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser/manager = 100, \
|
||||
/obj/item/weapon/hemostat = 100, \
|
||||
/obj/item/stack/cable_coil = 75, \
|
||||
/obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity.
|
||||
@@ -89,7 +85,7 @@
|
||||
/datum/surgery_step/face/fix_face
|
||||
name = "reshape face"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser/manager = 100, \
|
||||
/obj/item/weapon/retractor = 100, \
|
||||
/obj/item/weapon/crowbar = 55, \
|
||||
/obj/item/weapon/kitchen/utensil/fork = 75)
|
||||
@@ -116,9 +112,7 @@
|
||||
/datum/surgery_step/face/cauterize
|
||||
name = "close incision"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/laser3 = 115, \
|
||||
/obj/item/weapon/scalpel/laser2 = 110, \
|
||||
/obj/item/weapon/scalpel/laser1 = 105, \
|
||||
/obj/item/weapon/scalpel/laser = 100, \
|
||||
/obj/item/weapon/cautery = 100, \
|
||||
/obj/item/clothing/mask/cigarette = 75, \
|
||||
/obj/item/weapon/lighter = 50, \
|
||||
|
||||
@@ -23,10 +23,6 @@
|
||||
name = "make incision"
|
||||
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/laser3 = 115, \
|
||||
/obj/item/weapon/scalpel/laser2 = 110, \
|
||||
/obj/item/weapon/scalpel/laser1 = 105, \
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel = 100, \
|
||||
/obj/item/weapon/kitchen/knife = 75, \
|
||||
/obj/item/weapon/shard = 50, \
|
||||
@@ -65,10 +61,7 @@
|
||||
name = "clamp bleeders"
|
||||
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/laser3 = 115, \
|
||||
/obj/item/weapon/scalpel/laser2 = 110, \
|
||||
/obj/item/weapon/scalpel/laser1 = 105, \
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser = 100, \
|
||||
/obj/item/weapon/hemostat = 100, \
|
||||
/obj/item/stack/cable_coil = 75, \
|
||||
/obj/item/device/assembly/mousetrap = 20
|
||||
@@ -103,7 +96,7 @@
|
||||
name = "retract skin"
|
||||
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser/manager = 100, \
|
||||
/obj/item/weapon/retractor = 100, \
|
||||
/obj/item/weapon/crowbar = 75, \
|
||||
/obj/item/weapon/kitchen/utensil/fork = 50
|
||||
@@ -158,9 +151,7 @@
|
||||
name = "cauterize incision"
|
||||
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/laser3 = 115, \
|
||||
/obj/item/weapon/scalpel/laser2 = 110, \
|
||||
/obj/item/weapon/scalpel/laser1 = 105, \
|
||||
/obj/item/weapon/scalpel/laser = 100, \
|
||||
/obj/item/weapon/cautery = 100, \
|
||||
/obj/item/clothing/mask/cigarette = 75, \
|
||||
/obj/item/weapon/lighter = 50, \
|
||||
|
||||
@@ -97,10 +97,7 @@
|
||||
/datum/surgery_step/cavity/close_space
|
||||
name = "close cavity space"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/laser3 = 115, \
|
||||
/obj/item/weapon/scalpel/laser2 = 110, \
|
||||
/obj/item/weapon/scalpel/laser1 = 105, \
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser = 100, \
|
||||
/obj/item/weapon/cautery = 100, \
|
||||
/obj/item/clothing/mask/cigarette = 75, \
|
||||
/obj/item/weapon/lighter = 50, \
|
||||
@@ -354,7 +351,7 @@
|
||||
name = "remove embedded objects"
|
||||
time = 32
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser/manager = 100, \
|
||||
/obj/item/weapon/hemostat = 100, \
|
||||
/obj/item/stack/cable_coil = 75, \
|
||||
/obj/item/device/assembly/mousetrap = 20
|
||||
|
||||
@@ -119,4 +119,23 @@ var/global/datum/robolimb/basic_robolimb
|
||||
company = "Zeng-Hu Pharmaceuticals"
|
||||
desc = "This limb has a rubbery fleshtone covering with visible seams."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi'
|
||||
has_subtypes = 2
|
||||
has_subtypes = 2
|
||||
|
||||
/datum/robolimb/shellguard
|
||||
company = "Shellguard Munitions Standard Series"
|
||||
desc = "This limb features exposed robust steel and paint to match Shellguards motifs"
|
||||
icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi'
|
||||
has_subtypes = 1
|
||||
|
||||
/datum/robolimb/shellguard/alt1
|
||||
company = "Shellguard Munitions Elite Series"
|
||||
icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_alt1.dmi'
|
||||
parts = list("head")
|
||||
has_subtypes = null
|
||||
|
||||
/datum/robolimb/shellguard/monitor
|
||||
company = "Shellguard Munitions Monitor Series"
|
||||
icon = 'icons/mob/human_races/cyberlimbs/shellguard/shellguard_monitor.dmi'
|
||||
parts = list("head")
|
||||
is_monitor = 1
|
||||
has_subtypes = null
|
||||
@@ -69,7 +69,7 @@
|
||||
var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55)
|
||||
var/implements_mend = list(/obj/item/stack/medical/bruise_pack = 20,/obj/item/stack/medical/bruise_pack/advanced = 100,/obj/item/stack/nanopaste = 100)
|
||||
//Finish is just so you can close up after you do other things.
|
||||
var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75)
|
||||
var/implements_finsh = list(/obj/item/weapon/scalpel/laser/manager = 100,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75)
|
||||
var/current_type
|
||||
var/obj/item/organ/internal/I = null
|
||||
var/obj/item/organ/external/affected = null
|
||||
@@ -368,10 +368,6 @@
|
||||
/datum/surgery_step/cut_carapace
|
||||
name = "cut carapace"
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/laser3 = 115, \
|
||||
/obj/item/weapon/scalpel/laser2 = 110, \
|
||||
/obj/item/weapon/scalpel/laser1 = 105, \
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel = 100, \
|
||||
/obj/item/weapon/kitchen/knife = 75, \
|
||||
/obj/item/weapon/shard = 50, \
|
||||
@@ -406,7 +402,7 @@
|
||||
name = "retract carapace"
|
||||
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/scalpel/manager = 120, \
|
||||
/obj/item/weapon/scalpel/laser/manager = 100, \
|
||||
/obj/item/weapon/retractor = 100, \
|
||||
/obj/item/weapon/crowbar = 75, \
|
||||
/obj/item/weapon/kitchen/utensil/fork = 50
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
desc = "Cut, cut, and once more cut."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "scalpel"
|
||||
item_state = "scalpel"
|
||||
flags = CONDUCT
|
||||
force = 10.0
|
||||
sharp = 1
|
||||
@@ -82,40 +83,35 @@
|
||||
/*
|
||||
* Researchable Scalpels
|
||||
*/
|
||||
/obj/item/weapon/scalpel/laser1 //lasers also count as catuarys
|
||||
/obj/item/weapon/scalpel/laser //parent type
|
||||
name = "laser scalpel"
|
||||
desc = "A scalpel augmented with a directed laser."
|
||||
icon_state = "scalpel_laser1_on"
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
|
||||
/obj/item/weapon/scalpel/laser/laser1 //lasers also count as catuarys
|
||||
name = "laser scalpel"
|
||||
desc = "A scalpel augmented with a directed laser. This one looks basic and could be improved."
|
||||
icon_state = "scalpel_laser1_on"
|
||||
item_state = "scalpel"
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
toolspeed = 0.8
|
||||
|
||||
/obj/item/weapon/scalpel/laser2
|
||||
/obj/item/weapon/scalpel/laser/laser2
|
||||
name = "laser scalpel"
|
||||
desc = "A scalpel augmented with a directed laser. This one looks somewhat advanced."
|
||||
icon_state = "scalpel_laser2_on"
|
||||
item_state = "scalpel"
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
toolspeed = 0.6
|
||||
|
||||
/obj/item/weapon/scalpel/laser3
|
||||
/obj/item/weapon/scalpel/laser/laser3
|
||||
name = "laser scalpel"
|
||||
desc = "A scalpel augmented with a directed laser. This one looks to be the pinnacle of precision energy cutlery!"
|
||||
icon_state = "scalpel_laser3_on"
|
||||
item_state = "scalpel"
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
toolspeed = 0.4
|
||||
|
||||
/obj/item/weapon/scalpel/manager //super tool! Retractor/hemostat
|
||||
/obj/item/weapon/scalpel/laser/manager //super tool! Retractor/hemostat
|
||||
name = "incision management system"
|
||||
desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
|
||||
icon_state = "scalpel_manager_on"
|
||||
item_state = "scalpel"
|
||||
damtype = "fire"
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
toolspeed = 0.2
|
||||
|
||||
/obj/item/weapon/circular_saw
|
||||
|
||||
@@ -55,6 +55,88 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">25 March 2017</h2>
|
||||
<h3 class="author">Crazylemon64 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">All pens are now certified crayon-wax free!</li>
|
||||
</ul>
|
||||
<h3 class="author">Kyep updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Pipes in the Wizard Academy have been banished back under the carpet, where they belong.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">24 March 2017</h2>
|
||||
<h3 class="author">KasparoVy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Red wire-cutters and red crowbars now appear correctly in-hands again. imgadd: The medical wrench and all the brass tools (screwdriver, crowbar, wrench, wire-cutters, welder) now have in-hand sprites of their own.</li>
|
||||
<li class="tweak">Adds TG's inhand icons for screwdrivers, crowbars, wrenches, wire-cutters and welders.</li>
|
||||
<li class="bugfix">Slime People can wear underwear, undershirts and socks.</li>
|
||||
</ul>
|
||||
<h3 class="author">uraniummeltdown updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">IV Drips are no longer dense objects, you can walk over them.</li>
|
||||
<li class="rscadd">You can change gold and silver tiles into fancy versions by using them in hand.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">23 March 2017</h2>
|
||||
<h3 class="author">FalseIncarnate updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Fish breeding has been tweaked to support fish refusing to cross-breed and improved egg chances with same-species parents.</li>
|
||||
</ul>
|
||||
<h3 class="author">Fox McCloud updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Floors are now fully properly cleaned with mops and soap</li>
|
||||
<li class="rscadd">Adds in emergency welding tool, fork, trays, drinking glasses, shot glasses, shakers, butcher cleavers, and riot darts to the autolathe</li>
|
||||
<li class="rscadd">Adds all basic stock parts to the autolathe</li>
|
||||
<li class="tweak">re-arranges the autolathe menu to be more logical</li>
|
||||
<li class="tweak">light bulbs no longer require metal to produce</li>
|
||||
<li class="tweak">Incision management system can now cauterize</li>
|
||||
</ul>
|
||||
<h3 class="author">KasparoVy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Unathi Security, Medical, Engineering and Syndicate side-facing hardsuit sprites have undergone weight reduction.</li>
|
||||
</ul>
|
||||
<h3 class="author">Kyep updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Chaplain's armor is no longer riot-grade. In addition, their nullrods do less damage.</li>
|
||||
</ul>
|
||||
<h3 class="author">MarsM0nd updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Conveyor switches can now set to left-only direction toggling.</li>
|
||||
</ul>
|
||||
<h3 class="author">Norgad updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Maintenance areas near arrivals, science, and the bar have been revamped.</li>
|
||||
</ul>
|
||||
<h3 class="author">uraniummeltdown updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Station lighting has less lighting power, this is not noticeable apart from maint and 1 bulb rooms being a bit darker.</li>
|
||||
<li class="tweak">Tweaked the potency scaling for glowshroom/glowberry light; high-potency plants no longer light up a huge area, but are slightly brighter.</li>
|
||||
<li class="rscadd">Added Shadowshrooms as a glowshroom mutation. They do exactly what you'd expect.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">22 March 2017</h2>
|
||||
<h3 class="author">Crazylemon64 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Rod form is now at half speed, and has a warning sound.</li>
|
||||
</ul>
|
||||
<h3 class="author">FlattestGuitar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">When a person's limb is dying, it will no longer notify the whole server of the ordeal</li>
|
||||
<li class="bugfix">Welding tools no longer tell you about their span classes</li>
|
||||
</ul>
|
||||
<h3 class="author">KasparoVy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Deconstructing beds now yields the same amount of metal as was used to make the bed.</li>
|
||||
<li class="bugfix">The PA console will no longer appear as though it is fully constructed at the start of the round.</li>
|
||||
<li class="bugfix">Ore Redemption Machines no longer eat IDs when deconstructed.</li>
|
||||
<li class="tweak">Ore Redemption Machines and Mining Equipment Vendors now spit out whatever IDs were in them when they lose power.</li>
|
||||
</ul>
|
||||
<h3 class="author">Krausus updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Personal crafting is now usable again for those with an Internet Explorer version below 11.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">21 March 2017</h2>
|
||||
<h3 class="author">Crazylemon64 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -4201,3 +4201,68 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- rscadd: Baseball bats added to the game, are craftable from 5 wood planks.
|
||||
- rscadd: Baseball burgers can be made with a baseball bat and a bun, either microwaved
|
||||
or table-crafted.
|
||||
2017-03-22:
|
||||
Crazylemon64:
|
||||
- tweak: Rod form is now at half speed, and has a warning sound.
|
||||
FlattestGuitar:
|
||||
- bugfix: When a person's limb is dying, it will no longer notify the whole server
|
||||
of the ordeal
|
||||
- bugfix: Welding tools no longer tell you about their span classes
|
||||
KasparoVy:
|
||||
- bugfix: Deconstructing beds now yields the same amount of metal as was used to
|
||||
make the bed.
|
||||
- bugfix: The PA console will no longer appear as though it is fully constructed
|
||||
at the start of the round.
|
||||
- bugfix: Ore Redemption Machines no longer eat IDs when deconstructed.
|
||||
- tweak: Ore Redemption Machines and Mining Equipment Vendors now spit out whatever
|
||||
IDs were in them when they lose power.
|
||||
Krausus:
|
||||
- bugfix: Personal crafting is now usable again for those with an Internet Explorer
|
||||
version below 11.
|
||||
2017-03-23:
|
||||
FalseIncarnate:
|
||||
- tweak: Fish breeding has been tweaked to support fish refusing to cross-breed
|
||||
and improved egg chances with same-species parents.
|
||||
Fox McCloud:
|
||||
- bugfix: Floors are now fully properly cleaned with mops and soap
|
||||
- rscadd: Adds in emergency welding tool, fork, trays, drinking glasses, shot glasses,
|
||||
shakers, butcher cleavers, and riot darts to the autolathe
|
||||
- rscadd: Adds all basic stock parts to the autolathe
|
||||
- tweak: re-arranges the autolathe menu to be more logical
|
||||
- tweak: light bulbs no longer require metal to produce
|
||||
- tweak: Incision management system can now cauterize
|
||||
KasparoVy:
|
||||
- tweak: Unathi Security, Medical, Engineering and Syndicate side-facing hardsuit
|
||||
sprites have undergone weight reduction.
|
||||
Kyep:
|
||||
- tweak: Chaplain's armor is no longer riot-grade. In addition, their nullrods do
|
||||
less damage.
|
||||
MarsM0nd:
|
||||
- bugfix: Conveyor switches can now set to left-only direction toggling.
|
||||
Norgad:
|
||||
- tweak: Maintenance areas near arrivals, science, and the bar have been revamped.
|
||||
uraniummeltdown:
|
||||
- tweak: Station lighting has less lighting power, this is not noticeable apart
|
||||
from maint and 1 bulb rooms being a bit darker.
|
||||
- tweak: Tweaked the potency scaling for glowshroom/glowberry light; high-potency
|
||||
plants no longer light up a huge area, but are slightly brighter.
|
||||
- rscadd: Added Shadowshrooms as a glowshroom mutation. They do exactly what you'd
|
||||
expect.
|
||||
2017-03-24:
|
||||
KasparoVy:
|
||||
- bugfix: 'Red wire-cutters and red crowbars now appear correctly in-hands again.
|
||||
imgadd: The medical wrench and all the brass tools (screwdriver, crowbar, wrench,
|
||||
wire-cutters, welder) now have in-hand sprites of their own.'
|
||||
- tweak: Adds TG's inhand icons for screwdrivers, crowbars, wrenches, wire-cutters
|
||||
and welders.
|
||||
- bugfix: Slime People can wear underwear, undershirts and socks.
|
||||
uraniummeltdown:
|
||||
- tweak: IV Drips are no longer dense objects, you can walk over them.
|
||||
- rscadd: You can change gold and silver tiles into fancy versions by using them
|
||||
in hand.
|
||||
2017-03-25:
|
||||
Crazylemon64:
|
||||
- bugfix: All pens are now certified crayon-wax free!
|
||||
Kyep:
|
||||
- bugfix: Pipes in the Wizard Academy have been banished back under the carpet,
|
||||
where they belong.
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "FalseIncarnate"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Re-adds the telescopic scythe, the pinnacle of covert reaping technologies. Currently admin-spawn only, for use in the most dire of harvest times."
|
||||
- bugfix: "Scythes (normal and telescopic) should once again clear swathes through all but the hardiest of vines when in proper reaping configurations, and heavily damage those they don't outright destroy."
|
||||
- bugfix: "Ankle-high piles of dirt will no longer prevent you from stepping over them."
|
||||
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 214 KiB After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 370 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 400 B |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 328 KiB After Width: | Height: | Size: 332 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 410 KiB |
@@ -1,5 +1,5 @@
|
||||
<script>
|
||||
{{var tooltiptext = function(req_text, catalyst_text, tool_text) { let text = ""; if(req_text){text += "REQUIREMENTS: " + req_text + " ";} if(catalyst_text){text += "CATALYSTS: " + catalyst_text + " ";} if(tool_text){text += "TOOLS: " + tool_text;}return text;};}}
|
||||
{{var tooltiptext = function(req_text, catalyst_text, tool_text) { var text = ""; if(req_text){text += "REQUIREMENTS: " + req_text + " ";} if(catalyst_text){text += "CATALYSTS: " + catalyst_text + " ";} if(tool_text){text += "TOOLS: " + tool_text;}return text;};}}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@@ -1326,6 +1326,7 @@
|
||||
#include "code\modules\ext_scripts\python.dm"
|
||||
#include "code\modules\fish\fish_eggs.dm"
|
||||
#include "code\modules\fish\fish_items.dm"
|
||||
#include "code\modules\fish\fish_types.dm"
|
||||
#include "code\modules\fish\fishtank.dm"
|
||||
#include "code\modules\flufftext\Dreaming.dm"
|
||||
#include "code\modules\flufftext\Hallucination.dm"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
SET RELATIVEROOT="../../"
|
||||
python icon_merge_tool.py %RELATIVEROOT%
|
||||
pause
|
||||
@@ -0,0 +1,87 @@
|
||||
from tempfile import NamedTemporaryFile
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
dmitool_path = "tools/dmitool/dmitool.jar"
|
||||
|
||||
def run_shell_command(command):
|
||||
return subprocess.run(command, shell=True, stdout=subprocess.PIPE, universal_newlines=True).stdout
|
||||
|
||||
def run_shell_command_binary(command):
|
||||
return subprocess.run(command, shell=True, stdout=subprocess.PIPE).stdout
|
||||
|
||||
def string_to_num(s):
|
||||
try:
|
||||
return int(s)
|
||||
except ValueError:
|
||||
return -1
|
||||
|
||||
def main(relative_root):
|
||||
git_version = run_shell_command("git version")
|
||||
if not git_version:
|
||||
print("ERROR: Failed to run git. Make sure it is installed and in your PATH.")
|
||||
return False
|
||||
|
||||
file_conflicts = run_shell_command("git diff --name-only --diff-filter=U").split("\n")
|
||||
icon_conflicts = [path for path in file_conflicts if path[len(path)-3::] == "dmi"]
|
||||
|
||||
for i in range(0, len(icon_conflicts)):
|
||||
print("[{}]: {}".format(i, icon_conflicts[i]))
|
||||
selection = input("Choose icon files you want to fix (example: 1,3-5,12):\n")
|
||||
selection = selection.replace(" ", "")
|
||||
selection = selection.split(",")
|
||||
|
||||
#shamelessly copied from mapmerger cli
|
||||
valid_indices = list()
|
||||
for m in selection:
|
||||
index_range = m.split("-")
|
||||
if len(index_range) == 1:
|
||||
index = string_to_num(index_range[0])
|
||||
if index >= 0 and index < len(icon_conflicts):
|
||||
valid_indices.append(index)
|
||||
elif len(index_range) == 2:
|
||||
index0 = string_to_num(index_range[0])
|
||||
index1 = string_to_num(index_range[1])
|
||||
if index0 >= 0 and index0 <= index1 and index1 < len(icon_conflicts):
|
||||
valid_indices.extend(range(index0, index1 + 1))
|
||||
|
||||
if not len(valid_indices):
|
||||
print("No icons selected, exiting.")
|
||||
sys.exit()
|
||||
|
||||
print("Attempting to fix the following icon files:")
|
||||
for i in valid_indices:
|
||||
print(icon_conflicts[i])
|
||||
input("Press Enter to start.")
|
||||
|
||||
for i in valid_indices:
|
||||
path = icon_conflicts[i]
|
||||
print("{}: {}".format("Merging", path))
|
||||
|
||||
common_ancestor_hash = run_shell_command("git merge-base ORIG_HEAD master").strip()
|
||||
|
||||
ours_icon = NamedTemporaryFile(delete=False)
|
||||
theirs_icon = NamedTemporaryFile(delete=False)
|
||||
base_icon = NamedTemporaryFile(delete=False)
|
||||
|
||||
ours_icon.write(run_shell_command_binary("git show ORIG_HEAD:{}".format(path)))
|
||||
theirs_icon.write(run_shell_command_binary("git show master:{}".format(path)))
|
||||
base_icon.write(run_shell_command_binary("git show {}:{}".format(common_ancestor_hash, path)))
|
||||
|
||||
# So it being "open" doesn't prevent other programs from using it
|
||||
ours_icon.close()
|
||||
theirs_icon.close()
|
||||
base_icon.close()
|
||||
|
||||
merge_command = "java -jar {} merge {} {} {} {}".format(relative_root + dmitool_path, base_icon.name, ours_icon.name, theirs_icon.name, relative_root + path + ".fixed")
|
||||
|
||||
print(merge_command)
|
||||
print(run_shell_command(merge_command))
|
||||
os.remove(ours_icon.name)
|
||||
os.remove(theirs_icon.name)
|
||||
os.remove(base_icon.name)
|
||||
print(".")
|
||||
|
||||
main(sys.argv[1])
|
||||